feat(agents): add Sisyphus-Junior focused executor agent
Add Sisyphus-Junior agent for focused task execution: - Same discipline as Sisyphus, no delegation capability - Used for category-based task spawning via sisyphus_task tool 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
parent
74cb4ac2a4
commit
4acdcbcd55
131
src/agents/sisyphus-junior.ts
Normal file
131
src/agents/sisyphus-junior.ts
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import type { AgentConfig } from "@opencode-ai/sdk"
|
||||||
|
import { isGptModel } from "./types"
|
||||||
|
import type { CategoryConfig } from "../config/schema"
|
||||||
|
import {
|
||||||
|
createAgentToolRestrictions,
|
||||||
|
migrateAgentConfig,
|
||||||
|
} from "../shared/permission-compat"
|
||||||
|
|
||||||
|
const SISYPHUS_JUNIOR_PROMPT = `<Role>
|
||||||
|
Sisyphus-Junior - Focused executor from OhMyOpenCode.
|
||||||
|
Execute tasks directly. NEVER delegate or spawn other agents.
|
||||||
|
</Role>
|
||||||
|
|
||||||
|
<Critical_Constraints>
|
||||||
|
BLOCKED ACTIONS (will fail if attempted):
|
||||||
|
- task tool: BLOCKED
|
||||||
|
- sisyphus_task tool: BLOCKED
|
||||||
|
- sisyphus_task tool: BLOCKED (already blocked above, but explicit)
|
||||||
|
- call_omo_agent tool: BLOCKED
|
||||||
|
|
||||||
|
You work ALONE. No delegation. No background tasks. Execute directly.
|
||||||
|
</Critical_Constraints>
|
||||||
|
|
||||||
|
<Work_Context>
|
||||||
|
## Notepad Location (for recording learnings)
|
||||||
|
NOTEPAD PATH: .sisyphus/notepads/{plan-name}/
|
||||||
|
- learnings.md: Record patterns, conventions, successful approaches
|
||||||
|
- issues.md: Record problems, blockers, gotchas encountered
|
||||||
|
- decisions.md: Record architectural choices and rationales
|
||||||
|
- problems.md: Record unresolved issues, technical debt
|
||||||
|
|
||||||
|
You SHOULD append findings to notepad files after completing work.
|
||||||
|
|
||||||
|
## Plan Location (READ ONLY)
|
||||||
|
PLAN PATH: .sisyphus/plans/{plan-name}.md
|
||||||
|
|
||||||
|
⚠️⚠️⚠️ CRITICAL RULE: NEVER MODIFY THE PLAN FILE ⚠️⚠️⚠️
|
||||||
|
|
||||||
|
The plan file (.sisyphus/plans/*.md) is SACRED and READ-ONLY.
|
||||||
|
- You may READ the plan to understand tasks
|
||||||
|
- You may READ checkbox items to know what to do
|
||||||
|
- You MUST NOT edit, modify, or update the plan file
|
||||||
|
- You MUST NOT mark checkboxes as complete in the plan
|
||||||
|
- Only the Orchestrator manages the plan file
|
||||||
|
|
||||||
|
VIOLATION = IMMEDIATE FAILURE. The Orchestrator tracks plan state.
|
||||||
|
</Work_Context>
|
||||||
|
|
||||||
|
<Todo_Discipline>
|
||||||
|
TODO OBSESSION (NON-NEGOTIABLE):
|
||||||
|
- 2+ steps → todowrite FIRST, atomic breakdown
|
||||||
|
- Mark in_progress before starting (ONE at a time)
|
||||||
|
- Mark completed IMMEDIATELY after each step
|
||||||
|
- NEVER batch completions
|
||||||
|
|
||||||
|
No todos on multi-step work = INCOMPLETE WORK.
|
||||||
|
</Todo_Discipline>
|
||||||
|
|
||||||
|
<Verification>
|
||||||
|
Task NOT complete without:
|
||||||
|
- lsp_diagnostics clean on changed files
|
||||||
|
- Build passes (if applicable)
|
||||||
|
- All todos marked completed
|
||||||
|
</Verification>
|
||||||
|
|
||||||
|
<Style>
|
||||||
|
- Start immediately. No acknowledgments.
|
||||||
|
- Match user's communication style.
|
||||||
|
- Dense > verbose.
|
||||||
|
</Style>`
|
||||||
|
|
||||||
|
function buildSisyphusJuniorPrompt(promptAppend?: string): string {
|
||||||
|
if (!promptAppend) return SISYPHUS_JUNIOR_PROMPT
|
||||||
|
return SISYPHUS_JUNIOR_PROMPT + "\n\n" + promptAppend
|
||||||
|
}
|
||||||
|
|
||||||
|
// Core tools that Sisyphus-Junior must NEVER have access to
|
||||||
|
const BLOCKED_TOOLS = ["task", "sisyphus_task", "call_omo_agent"]
|
||||||
|
|
||||||
|
export function createSisyphusJuniorAgent(
|
||||||
|
categoryConfig: CategoryConfig,
|
||||||
|
promptAppend?: string
|
||||||
|
): AgentConfig {
|
||||||
|
const prompt = buildSisyphusJuniorPrompt(promptAppend)
|
||||||
|
const model = categoryConfig.model
|
||||||
|
|
||||||
|
const baseRestrictions = createAgentToolRestrictions(BLOCKED_TOOLS)
|
||||||
|
const mergedConfig = migrateAgentConfig({
|
||||||
|
...baseRestrictions,
|
||||||
|
...(categoryConfig.tools ? { tools: categoryConfig.tools } : {}),
|
||||||
|
})
|
||||||
|
|
||||||
|
const base: AgentConfig = {
|
||||||
|
description:
|
||||||
|
"Sisyphus-Junior - Focused task executor. Same discipline, no delegation.",
|
||||||
|
mode: "subagent" as const,
|
||||||
|
model,
|
||||||
|
maxTokens: categoryConfig.maxTokens ?? 64000,
|
||||||
|
prompt,
|
||||||
|
color: "#20B2AA",
|
||||||
|
...mergedConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryConfig.temperature !== undefined) {
|
||||||
|
base.temperature = categoryConfig.temperature
|
||||||
|
}
|
||||||
|
if (categoryConfig.top_p !== undefined) {
|
||||||
|
base.top_p = categoryConfig.top_p
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryConfig.thinking) {
|
||||||
|
return { ...base, thinking: categoryConfig.thinking } as AgentConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
if (categoryConfig.reasoningEffort) {
|
||||||
|
return {
|
||||||
|
...base,
|
||||||
|
reasoningEffort: categoryConfig.reasoningEffort,
|
||||||
|
textVerbosity: categoryConfig.textVerbosity,
|
||||||
|
} as AgentConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isGptModel(model)) {
|
||||||
|
return { ...base, reasoningEffort: "medium" } as AgentConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...base,
|
||||||
|
thinking: { type: "enabled", budgetTokens: 32000 },
|
||||||
|
} as AgentConfig
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user