fc70dd2492
* style(tests): normalize BDD comments from '// #given' to '// given'
- Replace 4,668 Python-style BDD comments across 107 test files
- Patterns changed: // #given -> // given, // #when -> // when, // #then -> // then
- Also handles no-space variants: //#given -> // given
* fix(rules-injector): prefer output.metadata.filePath over output.title
- Extract file path resolution to dedicated output-path.ts module
- Prefer metadata.filePath which contains actual file path
- Fall back to output.title only when metadata unavailable
- Fixes issue where rules weren't injected when tool output title was a label
* feat(slashcommand): add optional user_message parameter
- Add user_message optional parameter for command arguments
- Model can now call: command='publish' user_message='patch'
- Improves error messages with clearer format guidance
- Helps LLMs understand correct parameter usage
* feat(hooks): restore compaction-context-injector hook
- Restore hook deleted in cbbc7bd0 for session compaction context
- Injects 7 mandatory sections: User Requests, Final Goal, Work Completed,
Remaining Tasks, Active Working Context, MUST NOT Do, Agent Verification State
- Re-register in hooks/index.ts and main plugin entry
* refactor(background-agent): split manager.ts into focused modules
- Extract constants.ts for TTL values and internal types (52 lines)
- Extract state.ts for TaskStateManager class (204 lines)
- Extract spawner.ts for task creation logic (244 lines)
- Extract result-handler.ts for completion handling (265 lines)
- Reduce manager.ts from 1377 to 755 lines (45% reduction)
- Maintain backward compatible exports
* refactor(agents): split prometheus-prompt.ts into subdirectory
- Move 1196-line prometheus-prompt.ts to prometheus/ subdirectory
- Organize prompt sections into separate files for maintainability
- Update agents/index.ts exports
* refactor(delegate-task): split tools.ts into focused modules
- Extract categories.ts for category definitions and routing
- Extract executor.ts for task execution logic
- Extract helpers.ts for utility functions
- Extract prompt-builder.ts for prompt construction
- Reduce tools.ts complexity with cleaner separation of concerns
* refactor(builtin-skills): split skills.ts into individual skill files
- Move each skill to dedicated file in skills/ subdirectory
- Create barrel export for backward compatibility
- Improve maintainability with focused skill modules
* chore: update import paths and lockfile
- Update prometheus import path after refactor
- Update bun.lock
* fix(tests): complete BDD comment normalization
- Fix remaining #when/#then patterns missed by initial sed
- Affected: state.test.ts, events.test.ts
---------
Co-authored-by: justsisyphus <justsisyphus@users.noreply.github.com>
346 lines
11 KiB
TypeScript
346 lines
11 KiB
TypeScript
/**
|
|
* Prometheus Plan Template
|
|
*
|
|
* The markdown template structure for work plans generated by Prometheus.
|
|
* Includes TL;DR, context, objectives, verification strategy, TODOs, and success criteria.
|
|
*/
|
|
|
|
export const PROMETHEUS_PLAN_TEMPLATE = `## Plan Structure
|
|
|
|
Generate plan to: \`.sisyphus/plans/{name}.md\`
|
|
|
|
\`\`\`markdown
|
|
# {Plan Title}
|
|
|
|
## TL;DR
|
|
|
|
> **Quick Summary**: [1-2 sentences capturing the core objective and approach]
|
|
>
|
|
> **Deliverables**: [Bullet list of concrete outputs]
|
|
> - [Output 1]
|
|
> - [Output 2]
|
|
>
|
|
> **Estimated Effort**: [Quick | Short | Medium | Large | XL]
|
|
> **Parallel Execution**: [YES - N waves | NO - sequential]
|
|
> **Critical Path**: [Task X → Task Y → Task Z]
|
|
|
|
---
|
|
|
|
## Context
|
|
|
|
### Original Request
|
|
[User's initial description]
|
|
|
|
### Interview Summary
|
|
**Key Discussions**:
|
|
- [Point 1]: [User's decision/preference]
|
|
- [Point 2]: [Agreed approach]
|
|
|
|
**Research Findings**:
|
|
- [Finding 1]: [Implication]
|
|
- [Finding 2]: [Recommendation]
|
|
|
|
### Metis Review
|
|
**Identified Gaps** (addressed):
|
|
- [Gap 1]: [How resolved]
|
|
- [Gap 2]: [How resolved]
|
|
|
|
---
|
|
|
|
## Work Objectives
|
|
|
|
### Core Objective
|
|
[1-2 sentences: what we're achieving]
|
|
|
|
### Concrete Deliverables
|
|
- [Exact file/endpoint/feature]
|
|
|
|
### Definition of Done
|
|
- [ ] [Verifiable condition with command]
|
|
|
|
### Must Have
|
|
- [Non-negotiable requirement]
|
|
|
|
### Must NOT Have (Guardrails)
|
|
- [Explicit exclusion from Metis review]
|
|
- [AI slop pattern to avoid]
|
|
- [Scope boundary]
|
|
|
|
---
|
|
|
|
## Verification Strategy (MANDATORY)
|
|
|
|
> This section is determined during interview based on Test Infrastructure Assessment.
|
|
> The choice here affects ALL TODO acceptance criteria.
|
|
|
|
### Test Decision
|
|
- **Infrastructure exists**: [YES/NO]
|
|
- **User wants tests**: [TDD / Tests-after / Manual-only]
|
|
- **Framework**: [bun test / vitest / jest / pytest / none]
|
|
|
|
### If TDD Enabled
|
|
|
|
Each TODO follows RED-GREEN-REFACTOR:
|
|
|
|
**Task Structure:**
|
|
1. **RED**: Write failing test first
|
|
- Test file: \`[path].test.ts\`
|
|
- Test command: \`bun test [file]\`
|
|
- Expected: FAIL (test exists, implementation doesn't)
|
|
2. **GREEN**: Implement minimum code to pass
|
|
- Command: \`bun test [file]\`
|
|
- Expected: PASS
|
|
3. **REFACTOR**: Clean up while keeping green
|
|
- Command: \`bun test [file]\`
|
|
- Expected: PASS (still)
|
|
|
|
**Test Setup Task (if infrastructure doesn't exist):**
|
|
- [ ] 0. Setup Test Infrastructure
|
|
- Install: \`bun add -d [test-framework]\`
|
|
- Config: Create \`[config-file]\`
|
|
- Verify: \`bun test --help\` → shows help
|
|
- Example: Create \`src/__tests__/example.test.ts\`
|
|
- Verify: \`bun test\` → 1 test passes
|
|
|
|
### If Automated Verification Only (NO User Intervention)
|
|
|
|
> **CRITICAL PRINCIPLE: ZERO USER INTERVENTION**
|
|
>
|
|
> **NEVER** create acceptance criteria that require:
|
|
> - "User manually tests..." / "사용자가 직접 테스트..."
|
|
> - "User visually confirms..." / "사용자가 눈으로 확인..."
|
|
> - "User interacts with..." / "사용자가 직접 조작..."
|
|
> - "Ask user to verify..." / "사용자에게 확인 요청..."
|
|
> - ANY step that requires a human to perform an action
|
|
>
|
|
> **ALL verification MUST be automated and executable by the agent.**
|
|
> If a verification cannot be automated, find an automated alternative or explicitly note it as a known limitation.
|
|
|
|
Each TODO includes EXECUTABLE verification procedures that agents can run directly:
|
|
|
|
**By Deliverable Type:**
|
|
|
|
| Type | Verification Tool | Automated Procedure |
|
|
|------|------------------|---------------------|
|
|
| **Frontend/UI** | Playwright browser via playwright skill | Agent navigates, clicks, screenshots, asserts DOM state |
|
|
| **TUI/CLI** | interactive_bash (tmux) | Agent runs command, captures output, validates expected strings |
|
|
| **API/Backend** | curl / httpie via Bash | Agent sends request, parses response, validates JSON fields |
|
|
| **Library/Module** | Node/Python REPL via Bash | Agent imports, calls function, compares output |
|
|
| **Config/Infra** | Shell commands via Bash | Agent applies config, runs state check, validates output |
|
|
|
|
**Evidence Requirements (Agent-Executable):**
|
|
- Command output captured and compared against expected patterns
|
|
- Screenshots saved to .sisyphus/evidence/ for visual verification
|
|
- JSON response fields validated with specific assertions
|
|
- Exit codes checked (0 = success)
|
|
|
|
---
|
|
|
|
## Execution Strategy
|
|
|
|
### Parallel Execution Waves
|
|
|
|
> Maximize throughput by grouping independent tasks into parallel waves.
|
|
> Each wave completes before the next begins.
|
|
|
|
\`\`\`
|
|
Wave 1 (Start Immediately):
|
|
├── Task 1: [no dependencies]
|
|
└── Task 5: [no dependencies]
|
|
|
|
Wave 2 (After Wave 1):
|
|
├── Task 2: [depends: 1]
|
|
├── Task 3: [depends: 1]
|
|
└── Task 6: [depends: 5]
|
|
|
|
Wave 3 (After Wave 2):
|
|
└── Task 4: [depends: 2, 3]
|
|
|
|
Critical Path: Task 1 → Task 2 → Task 4
|
|
Parallel Speedup: ~40% faster than sequential
|
|
\`\`\`
|
|
|
|
### Dependency Matrix
|
|
|
|
| Task | Depends On | Blocks | Can Parallelize With |
|
|
|------|------------|--------|---------------------|
|
|
| 1 | None | 2, 3 | 5 |
|
|
| 2 | 1 | 4 | 3, 6 |
|
|
| 3 | 1 | 4 | 2, 6 |
|
|
| 4 | 2, 3 | None | None (final) |
|
|
| 5 | None | 6 | 1 |
|
|
| 6 | 5 | None | 2, 3 |
|
|
|
|
### Agent Dispatch Summary
|
|
|
|
| Wave | Tasks | Recommended Agents |
|
|
|------|-------|-------------------|
|
|
| 1 | 1, 5 | delegate_task(category="...", load_skills=[...], run_in_background=true) |
|
|
| 2 | 2, 3, 6 | dispatch parallel after Wave 1 completes |
|
|
| 3 | 4 | final integration task |
|
|
|
|
---
|
|
|
|
## TODOs
|
|
|
|
> Implementation + Test = ONE Task. Never separate.
|
|
> EVERY task MUST have: Recommended Agent Profile + Parallelization info.
|
|
|
|
- [ ] 1. [Task Title]
|
|
|
|
**What to do**:
|
|
- [Clear implementation steps]
|
|
- [Test cases to cover]
|
|
|
|
**Must NOT do**:
|
|
- [Specific exclusions from guardrails]
|
|
|
|
**Recommended Agent Profile**:
|
|
> Select category + skills based on task domain. Justify each choice.
|
|
- **Category**: \`[visual-engineering | ultrabrain | artistry | quick | unspecified-low | unspecified-high | writing]\`
|
|
- Reason: [Why this category fits the task domain]
|
|
- **Skills**: [\`skill-1\`, \`skill-2\`]
|
|
- \`skill-1\`: [Why needed - domain overlap explanation]
|
|
- \`skill-2\`: [Why needed - domain overlap explanation]
|
|
- **Skills Evaluated but Omitted**:
|
|
- \`omitted-skill\`: [Why domain doesn't overlap]
|
|
|
|
**Parallelization**:
|
|
- **Can Run In Parallel**: YES | NO
|
|
- **Parallel Group**: Wave N (with Tasks X, Y) | Sequential
|
|
- **Blocks**: [Tasks that depend on this task completing]
|
|
- **Blocked By**: [Tasks this depends on] | None (can start immediately)
|
|
|
|
**References** (CRITICAL - Be Exhaustive):
|
|
|
|
> The executor has NO context from your interview. References are their ONLY guide.
|
|
> Each reference must answer: "What should I look at and WHY?"
|
|
|
|
**Pattern References** (existing code to follow):
|
|
- \`src/services/auth.ts:45-78\` - Authentication flow pattern (JWT creation, refresh token handling)
|
|
- \`src/hooks/useForm.ts:12-34\` - Form validation pattern (Zod schema + react-hook-form integration)
|
|
|
|
**API/Type References** (contracts to implement against):
|
|
- \`src/types/user.ts:UserDTO\` - Response shape for user endpoints
|
|
- \`src/api/schema.ts:createUserSchema\` - Request validation schema
|
|
|
|
**Test References** (testing patterns to follow):
|
|
- \`src/__tests__/auth.test.ts:describe("login")\` - Test structure and mocking patterns
|
|
|
|
**Documentation References** (specs and requirements):
|
|
- \`docs/api-spec.md#authentication\` - API contract details
|
|
- \`ARCHITECTURE.md:Database Layer\` - Database access patterns
|
|
|
|
**External References** (libraries and frameworks):
|
|
- Official docs: \`https://zod.dev/?id=basic-usage\` - Zod validation syntax
|
|
- Example repo: \`github.com/example/project/src/auth\` - Reference implementation
|
|
|
|
**WHY Each Reference Matters** (explain the relevance):
|
|
- Don't just list files - explain what pattern/information the executor should extract
|
|
- Bad: \`src/utils.ts\` (vague, which utils? why?)
|
|
- Good: \`src/utils/validation.ts:sanitizeInput()\` - Use this sanitization pattern for user input
|
|
|
|
**Acceptance Criteria**:
|
|
|
|
> **CRITICAL: AGENT-EXECUTABLE VERIFICATION ONLY**
|
|
>
|
|
> - Acceptance = EXECUTION by the agent, not "user checks if it works"
|
|
> - Every criterion MUST be verifiable by running a command or using a tool
|
|
> - NO steps like "user opens browser", "user clicks", "user confirms"
|
|
> - If you write "[placeholder]" - REPLACE IT with actual values based on task context
|
|
|
|
**If TDD (tests enabled):**
|
|
- [ ] Test file created: src/auth/login.test.ts
|
|
- [ ] Test covers: successful login returns JWT token
|
|
- [ ] bun test src/auth/login.test.ts → PASS (3 tests, 0 failures)
|
|
|
|
**Automated Verification (ALWAYS include, choose by deliverable type):**
|
|
|
|
**For Frontend/UI changes** (using playwright skill):
|
|
\\\`\\\`\\\`
|
|
# Agent executes via playwright browser automation:
|
|
1. Navigate to: http://localhost:3000/login
|
|
2. Fill: input[name="email"] with "test@example.com"
|
|
3. Fill: input[name="password"] with "password123"
|
|
4. Click: button[type="submit"]
|
|
5. Wait for: selector ".dashboard-welcome" to be visible
|
|
6. Assert: text "Welcome back" appears on page
|
|
7. Screenshot: .sisyphus/evidence/task-1-login-success.png
|
|
\\\`\\\`\\\`
|
|
|
|
**For TUI/CLI changes** (using interactive_bash):
|
|
\\\`\\\`\\\`
|
|
# Agent executes via tmux session:
|
|
1. Command: ./my-cli --config test.yaml
|
|
2. Wait for: "Configuration loaded" in output
|
|
3. Send keys: "q" to quit
|
|
4. Assert: Exit code 0
|
|
5. Assert: Output contains "Goodbye"
|
|
\\\`\\\`\\\`
|
|
|
|
**For API/Backend changes** (using Bash curl):
|
|
\\\`\\\`\\\`bash
|
|
# Agent runs:
|
|
curl -s -X POST http://localhost:8080/api/users \\
|
|
-H "Content-Type: application/json" \\
|
|
-d '{"email":"new@test.com","name":"Test User"}' \\
|
|
| jq '.id'
|
|
# Assert: Returns non-empty UUID
|
|
# Assert: HTTP status 201
|
|
\\\`\\\`\\\`
|
|
|
|
**For Library/Module changes** (using Bash node/bun):
|
|
\\\`\\\`\\\`bash
|
|
# Agent runs:
|
|
bun -e "import { validateEmail } from './src/utils/validate'; console.log(validateEmail('test@example.com'))"
|
|
# Assert: Output is "true"
|
|
|
|
bun -e "import { validateEmail } from './src/utils/validate'; console.log(validateEmail('invalid'))"
|
|
# Assert: Output is "false"
|
|
\\\`\\\`\\\`
|
|
|
|
**For Config/Infra changes** (using Bash):
|
|
\\\`\\\`\\\`bash
|
|
# Agent runs:
|
|
docker compose up -d
|
|
# Wait 5s for containers
|
|
docker compose ps --format json | jq '.[].State'
|
|
# Assert: All states are "running"
|
|
\\\`\\\`\\\`
|
|
|
|
**Evidence to Capture:**
|
|
- [ ] Terminal output from verification commands (actual output, not expected)
|
|
- [ ] Screenshot files in .sisyphus/evidence/ for UI changes
|
|
- [ ] JSON response bodies for API changes
|
|
|
|
**Commit**: YES | NO (groups with N)
|
|
- Message: \`type(scope): desc\`
|
|
- Files: \`path/to/file\`
|
|
- Pre-commit: \`test command\`
|
|
|
|
---
|
|
|
|
## Commit Strategy
|
|
|
|
| After Task | Message | Files | Verification |
|
|
|------------|---------|-------|--------------|
|
|
| 1 | \`type(scope): desc\` | file.ts | npm test |
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
### Verification Commands
|
|
\`\`\`bash
|
|
command # Expected: output
|
|
\`\`\`
|
|
|
|
### Final Checklist
|
|
- [ ] All "Must Have" present
|
|
- [ ] All "Must NOT Have" absent
|
|
- [ ] All tests pass
|
|
\`\`\`
|
|
|
|
---
|
|
`
|