refactor: extract context.go fork insertions to context_ext.go
Move orchestration identity overrides to extIdentityOverrides() and orchestration guidance + peer note injection to extPromptSections(). getIdentity and BuildSystemPrompt now call these ext methods instead of inlining the fork-specific logic. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7512b6e8f3
commit
210608b20f
2 changed files with 55 additions and 35 deletions
|
|
@ -89,32 +89,14 @@ func (cb *ContextBuilder) getIdentity() string {
|
||||||
// Build tools section dynamically
|
// Build tools section dynamically
|
||||||
toolsSection := cb.buildToolsSection()
|
toolsSection := cb.buildToolsSection()
|
||||||
|
|
||||||
// Build prompt with optional orchestration banner
|
// Orchestration overrides (banner, identity, executing rule)
|
||||||
var prompt string
|
prompt, identity, executingRule := cb.extIdentityOverrides()
|
||||||
if cb.orchestrationEnabled {
|
if identity == "" {
|
||||||
prompt = ` /_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
identity = "a helpful AI assistant"
|
||||||
|
|
||||||
O R C H E S T R A M O D E
|
|
||||||
|
|
||||||
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
`
|
|
||||||
}
|
}
|
||||||
|
if executingRule == "" {
|
||||||
// Conditional identity and plan executing rule for orchestration mode
|
executingRule = `Work through the current Phase's steps.
|
||||||
identity := "a helpful AI assistant"
|
|
||||||
executingRule := `Work through the current Phase's steps.
|
|
||||||
Mark each "- [x]" via edit_file. The system will auto-advance phases.`
|
Mark each "- [x]" via edit_file. The system will auto-advance phases.`
|
||||||
if cb.orchestrationEnabled {
|
|
||||||
identity = "a conductor AI agent that orchestrates subagents"
|
|
||||||
executingRule = `Delegate the current Phase's steps to subagents using spawn.
|
|
||||||
For each step: spawn a subagent with the appropriate preset (scout for investigation,
|
|
||||||
coder for implementation, analyst for review). Spawn multiple independent steps in parallel.
|
|
||||||
When a subagent completes, mark "- [x]" via edit_file and record findings in
|
|
||||||
## Orchestration > Findings in MEMORY.md.
|
|
||||||
Only do a step inline if it's a single quick tool call (e.g., reading one file).`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf(prompt+`# picoclaw 🦞 (%s)
|
return fmt.Sprintf(prompt+`# picoclaw 🦞 (%s)
|
||||||
|
|
@ -223,12 +205,8 @@ func (cb *ContextBuilder) BuildSystemPrompt() string {
|
||||||
// Core identity section
|
// Core identity section
|
||||||
parts = append(parts, cb.getIdentity())
|
parts = append(parts, cb.getIdentity())
|
||||||
|
|
||||||
// Orchestration guidance — injected only when spawn tool is registered
|
// Fork-specific prompt sections (orchestration guidance, peer note)
|
||||||
if cb.tools != nil {
|
parts = append(parts, cb.extPromptSections()...)
|
||||||
if _, hasSpawn := cb.tools.Get("spawn"); hasSpawn {
|
|
||||||
parts = append(parts, orchestrationGuidance)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bootstrap files
|
// Bootstrap files
|
||||||
bootstrapContent := cb.LoadBootstrapFiles()
|
bootstrapContent := cb.LoadBootstrapFiles()
|
||||||
|
|
@ -253,11 +231,6 @@ The following skills extend your capabilities. To use a skill, read its SKILL.md
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Peer session coordination
|
|
||||||
if cb.peerNote != "" {
|
|
||||||
parts = append(parts, "## Active Sessions\n\n"+cb.peerNote)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Memory context
|
// Memory context
|
||||||
memoryContext := cb.memory.GetMemoryContext()
|
memoryContext := cb.memory.GetMemoryContext()
|
||||||
if memoryContext != "" {
|
if memoryContext != "" {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,53 @@ func (cb *ContextBuilder) SetOrchestrationEnabled(enabled bool) {
|
||||||
cb.orchestrationEnabled = enabled
|
cb.orchestrationEnabled = enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extIdentityOverrides returns the orchestration-specific overrides for
|
||||||
|
// getIdentity: banner prefix, identity string, and plan executing rule.
|
||||||
|
// When orchestration is disabled, all return values are empty strings.
|
||||||
|
func (cb *ContextBuilder) extIdentityOverrides() (banner, identity, executingRule string) {
|
||||||
|
if !cb.orchestrationEnabled {
|
||||||
|
return "", "", ""
|
||||||
|
}
|
||||||
|
|
||||||
|
banner = ` /_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||||
|
|
||||||
|
O R C H E S T R A M O D E
|
||||||
|
|
||||||
|
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
identity = "a conductor AI agent that orchestrates subagents"
|
||||||
|
executingRule = `Delegate the current Phase's steps to subagents using spawn.
|
||||||
|
For each step: spawn a subagent with the appropriate preset (scout for investigation,
|
||||||
|
coder for implementation, analyst for review). Spawn multiple independent steps in parallel.
|
||||||
|
When a subagent completes, mark "- [x]" via edit_file and record findings in
|
||||||
|
## Orchestration > Findings in MEMORY.md.
|
||||||
|
Only do a step inline if it's a single quick tool call (e.g., reading one file).`
|
||||||
|
return banner, identity, executingRule
|
||||||
|
}
|
||||||
|
|
||||||
|
// extPromptSections returns fork-specific prompt sections to append to
|
||||||
|
// BuildSystemPrompt: orchestration guidance and peer session note.
|
||||||
|
func (cb *ContextBuilder) extPromptSections() []string {
|
||||||
|
var sections []string
|
||||||
|
|
||||||
|
// Orchestration guidance — injected only when spawn tool is registered
|
||||||
|
if cb.tools != nil {
|
||||||
|
if _, hasSpawn := cb.tools.Get("spawn"); hasSpawn {
|
||||||
|
sections = append(sections, orchestrationGuidance)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Peer session coordination
|
||||||
|
if cb.peerNote != "" {
|
||||||
|
sections = append(sections, "## Active Sessions\n\n"+cb.peerNote)
|
||||||
|
}
|
||||||
|
|
||||||
|
return sections
|
||||||
|
}
|
||||||
|
|
||||||
// Memory returns the underlying MemoryStore for direct plan queries.
|
// Memory returns the underlying MemoryStore for direct plan queries.
|
||||||
func (cb *ContextBuilder) Memory() *MemoryStore {
|
func (cb *ContextBuilder) Memory() *MemoryStore {
|
||||||
return cb.memory
|
return cb.memory
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue