]> git.giacomolli.uk - onechat/blobdiff - agent.go
Name private helpers for their owning feature
[onechat] / agent.go
index 8226a43fb0e4deebc20cef17c9ff2997ef7f281e..13491c11d22c41fd8a272f017e4497bdebf7064e 100644 (file)
--- a/agent.go
+++ b/agent.go
@@ -115,11 +115,6 @@ func (a *Agent) Voices() *VoiceStore {
        return &VoiceStore{dir: filepath.Join(filepath.Dir(root), voiceDirName)}
 }
 
-// CacheKey returns the prompt cache key of every model call of the agent.
-func (a *Agent) CacheKey() string {
-       return "onechat-" + a.config.ID
-}
-
 // Prompt returns the system prompt of the agent with the user's instructions
 // from instructions.md. It reads the file on each call, so a change applies at
 // the next call. A missing file means no instructions.
@@ -141,6 +136,17 @@ func (a *Agent) Prompt() (string, error) {
        return prompt(a.config.Name, path, instructions), nil
 }
 
+// instructions reads the user's instructions from instructions.md. A missing
+// file means no instructions.
+func (a *Agent) instructions() (string, error) {
+       data, err := os.ReadFile(filepath.Join(a.dir, agentInstructionsFileName))
+       if err != nil && !errors.Is(err, os.ErrNotExist) {
+               return "", fmt.Errorf("read instructions: %w", err)
+       }
+
+       return string(data), nil
+}
+
 // Tools returns the tools shared by the turns and compactions of this agent. A
 // child has no image output, WhatsApp, child creation, or route tools.
 func (a *Agent) Tools() []ModelTool {
@@ -213,6 +219,11 @@ func (a *Agent) Children() ([]*Agent, error) {
        return children, nil
 }
 
+// CacheKey returns the prompt cache key of every model call of the agent.
+func (a *Agent) CacheKey() string {
+       return "onechat-" + a.config.ID
+}
+
 // CreateChild writes a new direct child with its own ID and the model, effort,
 // and working directory of the root. Child and subagent names share a
 // namespace. The config is complete before an atomic rename publishes the
@@ -299,17 +310,6 @@ func (a *Agent) SubagentPrompt() (string, error) {
        return promptSubagent(a.config.Name, instructions), nil
 }
 
-// instructions reads the user's instructions from instructions.md. A missing
-// file means no instructions.
-func (a *Agent) instructions() (string, error) {
-       data, err := os.ReadFile(filepath.Join(a.dir, agentInstructionsFileName))
-       if err != nil && !errors.Is(err, os.ErrNotExist) {
-               return "", fmt.Errorf("read instructions: %w", err)
-       }
-
-       return string(data), nil
-}
-
 // validate makes sure that each setting has a valid value.
 func (c AgentConfig) validate() error {
        if c.Name == "" || strings.ContainsAny(c.Name, "\r\n") {
@@ -340,6 +340,33 @@ func (c AgentConfig) validate() error {
        return nil
 }
 
+// createAgent writes the config.json of a new agent in dir with the defaults
+// and a new ID.
+func createAgent(dir string) (*Agent, error) {
+       config, err := defaultAgentConfig()
+       if err != nil {
+               return nil, err
+       }
+
+       return writeAgent(dir, config)
+}
+
+// defaultAgentConfig returns the settings of a new agent, without an ID. The
+// commands run in the home directory of the user.
+func defaultAgentConfig() (AgentConfig, error) {
+       home, err := os.UserHomeDir()
+       if err != nil {
+               return AgentConfig{}, fmt.Errorf("find working directory: %w", err)
+       }
+
+       return AgentConfig{
+               Name:    "OneChat",
+               Model:   "gpt-6.1-sol",
+               Effort:  "medium",
+               Workdir: home,
+       }, nil
+}
+
 // agentChildNameValid accepts one word of 2 to 32 ASCII letters with an initial
 // capital letter. Child names describe their area.
 func agentChildNameValid(name string) bool {
@@ -357,17 +384,6 @@ func agentChildNameValid(name string) bool {
        return true
 }
 
-// createAgent writes the config.json of a new agent in dir with the defaults
-// and a new ID.
-func createAgent(dir string) (*Agent, error) {
-       config, err := defaultAgentConfig()
-       if err != nil {
-               return nil, err
-       }
-
-       return writeAgent(dir, config)
-}
-
 // writeAgent gives config a new ID and writes it in dir.
 func writeAgent(dir string, config AgentConfig) (*Agent, error) {
        id := make([]byte, agentIDBytes)
@@ -392,19 +408,3 @@ func writeAgent(dir string, config AgentConfig) (*Agent, error) {
                config: config,
        }, nil
 }
-
-// defaultAgentConfig returns the settings of a new agent, without an ID. The
-// commands run in the home directory of the user.
-func defaultAgentConfig() (AgentConfig, error) {
-       home, err := os.UserHomeDir()
-       if err != nil {
-               return AgentConfig{}, fmt.Errorf("find working directory: %w", err)
-       }
-
-       return AgentConfig{
-               Name:    "OneChat",
-               Model:   "gpt-6.1-sol",
-               Effort:  "medium",
-               Workdir: home,
-       }, nil
-}