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.
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 {
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
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") {
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 {
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)
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
-}