@shepai/cli 1.14.2 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -101
- package/dist/src/application/ports/output/{agent-executor-factory.interface.d.ts → agents/agent-executor-factory.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-executor.interface.d.ts → agents/agent-executor.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-registry.interface.d.ts → agents/agent-registry.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-registry.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-run-repository.interface.d.ts → agents/agent-run-repository.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-run-repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-runner.interface.d.ts → agents/agent-runner.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-runner.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/{agent-validator.interface.d.ts → agents/agent-validator.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/agents/agent-validator.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/feature-agent-process.interface.d.ts +44 -0
- package/dist/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/feature-agent-process.interface.js +12 -0
- package/dist/src/application/ports/output/agents/index.d.ts +13 -0
- package/dist/src/application/ports/output/agents/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/agents/index.js +6 -0
- package/dist/src/application/ports/output/index.d.ts +8 -11
- package/dist/src/application/ports/output/index.d.ts.map +1 -1
- package/dist/src/application/ports/output/index.js +5 -3
- package/dist/src/application/ports/output/repositories/feature-repository.interface.d.ts +76 -0
- package/dist/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/repositories/feature-repository.interface.js +11 -0
- package/dist/src/application/ports/output/repositories/index.d.ts +8 -0
- package/dist/src/application/ports/output/repositories/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/repositories/index.js +6 -0
- package/dist/src/application/ports/output/{settings.repository.interface.d.ts → repositories/settings.repository.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/repositories/settings.repository.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/external-issue-fetcher.interface.d.ts +69 -0
- package/dist/src/application/ports/output/services/external-issue-fetcher.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/external-issue-fetcher.interface.js +46 -0
- package/dist/src/application/ports/output/services/index.d.ts +13 -0
- package/dist/src/application/ports/output/services/index.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/index.js +7 -0
- package/dist/src/application/ports/output/services/spec-initializer.interface.d.ts +33 -0
- package/dist/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/spec-initializer.interface.js +8 -0
- package/dist/src/application/ports/output/{version-service.interface.d.ts → services/version-service.interface.d.ts} +1 -1
- package/dist/src/application/ports/output/services/version-service.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/web-server-service.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/worktree-service.interface.d.ts +83 -0
- package/dist/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -0
- package/dist/src/application/ports/output/services/worktree-service.interface.js +30 -0
- package/dist/src/application/use-cases/agents/approve-agent-run.use-case.d.ts +22 -0
- package/dist/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/approve-agent-run.use-case.js +67 -0
- package/dist/src/application/use-cases/agents/configure-agent.use-case.d.ts +2 -2
- package/dist/src/application/use-cases/agents/configure-agent.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/delete-agent-run.use-case.d.ts +16 -0
- package/dist/src/application/use-cases/agents/delete-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/delete-agent-run.use-case.js +46 -0
- package/dist/src/application/use-cases/agents/get-agent-run.use-case.d.ts +22 -0
- package/dist/src/application/use-cases/agents/get-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/get-agent-run.use-case.js +42 -0
- package/dist/src/application/use-cases/agents/list-agent-runs.use-case.d.ts +21 -0
- package/dist/src/application/use-cases/agents/list-agent-runs.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/list-agent-runs.use-case.js +54 -0
- package/dist/src/application/use-cases/agents/reject-agent-run.use-case.d.ts +16 -0
- package/dist/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/reject-agent-run.use-case.js +52 -0
- package/dist/src/application/use-cases/agents/run-agent.use-case.d.ts +2 -2
- package/dist/src/application/use-cases/agents/run-agent.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/agents/show-agent-run.use-case.d.ts +24 -0
- package/dist/src/application/use-cases/agents/show-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/show-agent-run.use-case.js +52 -0
- package/dist/src/application/use-cases/agents/stop-agent-run.use-case.d.ts +15 -0
- package/dist/src/application/use-cases/agents/stop-agent-run.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/agents/stop-agent-run.use-case.js +86 -0
- package/dist/src/application/use-cases/agents/validate-agent-auth.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/agents/validate-agent-auth.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/features/create-feature.use-case.d.ts +43 -0
- package/dist/src/application/use-cases/features/create-feature.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/features/create-feature.use-case.js +166 -0
- package/dist/src/application/use-cases/features/delete-feature.use-case.d.ts +27 -0
- package/dist/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/features/delete-feature.use-case.js +83 -0
- package/dist/src/application/use-cases/features/list-features.use-case.d.ts +17 -0
- package/dist/src/application/use-cases/features/list-features.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/features/list-features.use-case.js +37 -0
- package/dist/src/application/use-cases/features/resume-feature.use-case.d.ts +24 -0
- package/dist/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/features/resume-feature.use-case.js +100 -0
- package/dist/src/application/use-cases/features/show-feature.use-case.d.ts +17 -0
- package/dist/src/application/use-cases/features/show-feature.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/features/show-feature.use-case.js +43 -0
- package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts.map +1 -1
- package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts +1 -1
- package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts.map +1 -1
- package/dist/src/domain/generated/output.d.ts +26 -1
- package/dist/src/domain/generated/output.d.ts.map +1 -1
- package/dist/src/domain/generated/output.js +1 -0
- package/dist/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/src/infrastructure/di/container.js +64 -14
- package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts +4 -0
- package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
- package/dist/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +8 -0
- package/dist/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +50 -0
- package/dist/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -0
- package/dist/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +62 -0
- package/dist/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/src/infrastructure/persistence/sqlite/migrations.js +49 -0
- package/dist/src/infrastructure/repositories/agent-run.repository.d.ts +1 -1
- package/dist/src/infrastructure/repositories/agent-run.repository.d.ts.map +1 -1
- package/dist/src/infrastructure/repositories/agent-run.repository.js +30 -8
- package/dist/src/infrastructure/repositories/sqlite-feature.repository.d.ts +25 -0
- package/dist/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -0
- package/dist/src/infrastructure/repositories/sqlite-feature.repository.js +113 -0
- package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts +1 -1
- package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/src/infrastructure/services/agents/{langgraph → analyze-repo}/analyze-repository-graph.d.ts +1 -23
- package/dist/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{langgraph → analyze-repo}/analyze-repository-graph.js +4 -11
- package/dist/src/infrastructure/services/agents/analyze-repo/prompts/analyze-repository.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{agent-executor-factory.service.d.ts → common/agent-executor-factory.service.d.ts} +3 -3
- package/dist/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{agent-registry.service.d.ts → common/agent-registry.service.d.ts} +1 -1
- package/dist/src/infrastructure/services/agents/common/agent-registry.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{agent-registry.service.js → common/agent-registry.service.js} +7 -1
- package/dist/src/infrastructure/services/agents/{agent-runner.service.d.ts → common/agent-runner.service.d.ts} +5 -5
- package/dist/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{agent-runner.service.js → common/agent-runner.service.js} +4 -4
- package/dist/src/infrastructure/services/agents/{agent-validator.service.d.ts → common/agent-validator.service.d.ts} +2 -2
- package/dist/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{langgraph → common}/checkpointer.d.ts +1 -0
- package/dist/src/infrastructure/services/agents/common/checkpointer.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{langgraph → common}/checkpointer.js +6 -0
- package/dist/src/infrastructure/services/agents/{executors → common/executors}/claude-code-executor.service.d.ts +9 -2
- package/dist/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/{executors → common/executors}/claude-code-executor.service.js +103 -6
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +15 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +16 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor.service.d.ts +17 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/common/executors/mock-executor.service.js +49 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +244 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +36 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +20 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +90 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +31 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +236 -0
- package/dist/src/infrastructure/services/agents/feature-agent/heartbeat.d.ts +19 -0
- package/dist/src/infrastructure/services/agents/feature-agent/heartbeat.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/heartbeat.js +38 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/analyze.node.d.ts +7 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/analyze.node.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/analyze.node.js +9 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts +11 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +23 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +40 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +114 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/plan.node.d.ts +7 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/plan.node.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/plan.node.js +9 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.d.ts +9 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/analyze.prompt.js +94 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts +8 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +18 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts +11 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.js +170 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts +10 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +116 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts +10 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +121 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts +7 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.js +9 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/research.node.d.ts +7 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/research.node.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/nodes/research.node.js +9 -0
- package/dist/src/infrastructure/services/agents/feature-agent/state.d.ts +39 -0
- package/dist/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -0
- package/dist/src/infrastructure/services/agents/feature-agent/state.js +27 -0
- package/dist/src/infrastructure/services/agents/streaming/streaming-executor-proxy.d.ts +1 -1
- package/dist/src/infrastructure/services/agents/streaming/streaming-executor-proxy.d.ts.map +1 -1
- package/dist/src/infrastructure/services/external/github-issue.service.d.ts +19 -0
- package/dist/src/infrastructure/services/external/github-issue.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/external/github-issue.service.js +59 -0
- package/dist/src/infrastructure/services/external/jira-ticket.service.d.ts +23 -0
- package/dist/src/infrastructure/services/external/jira-ticket.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/external/jira-ticket.service.js +57 -0
- package/dist/src/infrastructure/services/git/worktree.service.d.ts +28 -0
- package/dist/src/infrastructure/services/git/worktree.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/git/worktree.service.js +112 -0
- package/dist/src/infrastructure/services/spec/spec-initializer.service.d.ts +17 -0
- package/dist/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -0
- package/dist/src/infrastructure/services/spec/spec-initializer.service.js +281 -0
- package/dist/src/infrastructure/services/web-server.service.d.ts +1 -1
- package/dist/src/infrastructure/services/web-server.service.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/agent/approve.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/agent/approve.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/approve.command.js +42 -0
- package/dist/src/presentation/cli/commands/agent/delete.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/agent/delete.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/delete.command.js +49 -0
- package/dist/src/presentation/cli/commands/agent/index.d.ts +21 -0
- package/dist/src/presentation/cli/commands/agent/index.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/index.js +38 -0
- package/dist/src/presentation/cli/commands/agent/logs.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/agent/logs.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/logs.command.js +163 -0
- package/dist/src/presentation/cli/commands/agent/ls.command.d.ts +12 -0
- package/dist/src/presentation/cli/commands/agent/ls.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/ls.command.js +111 -0
- package/dist/src/presentation/cli/commands/agent/reject.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/agent/reject.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/reject.command.js +43 -0
- package/dist/src/presentation/cli/commands/agent/resolve-run.d.ts +10 -0
- package/dist/src/presentation/cli/commands/agent/resolve-run.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/resolve-run.js +27 -0
- package/dist/src/presentation/cli/commands/agent/show.command.d.ts +12 -0
- package/dist/src/presentation/cli/commands/agent/show.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/show.command.js +202 -0
- package/dist/src/presentation/cli/commands/agent/stop.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/agent/stop.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/agent/stop.command.js +42 -0
- package/dist/src/presentation/cli/commands/feat/del.command.d.ts +17 -0
- package/dist/src/presentation/cli/commands/feat/del.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/del.command.js +55 -0
- package/dist/src/presentation/cli/commands/feat/index.d.ts +17 -0
- package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/index.js +29 -0
- package/dist/src/presentation/cli/commands/feat/ls.command.d.ts +15 -0
- package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/ls.command.js +112 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts +17 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/new.command.js +64 -0
- package/dist/src/presentation/cli/commands/feat/resume.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/feat/resume.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/resume.command.js +33 -0
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts +11 -0
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/show.command.js +128 -0
- package/dist/src/presentation/cli/index.d.ts +8 -4
- package/dist/src/presentation/cli/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/index.js +12 -4
- package/dist/src/presentation/cli/ui/detail-view.d.ts +43 -0
- package/dist/src/presentation/cli/ui/detail-view.d.ts.map +1 -0
- package/dist/src/presentation/cli/ui/detail-view.js +57 -0
- package/dist/src/presentation/cli/ui/index.d.ts +2 -0
- package/dist/src/presentation/cli/ui/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/ui/index.js +2 -0
- package/dist/src/presentation/cli/ui/list-view.d.ts +34 -0
- package/dist/src/presentation/cli/ui/list-view.d.ts.map +1 -0
- package/dist/src/presentation/cli/ui/list-view.js +65 -0
- package/dist/src/presentation/cli/ui/symbols.d.ts +5 -1
- package/dist/src/presentation/cli/ui/symbols.d.ts.map +1 -1
- package/dist/src/presentation/cli/ui/symbols.js +4 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.html +2 -2
- package/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/index.html +2 -2
- package/web/.next/server/app/index.rsc +1 -1
- package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/version.html +2 -2
- package/web/.next/server/app/version.rsc +1 -1
- package/web/.next/server/app/version.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/version.segments/version.segment.rsc +1 -1
- package/web/.next/server/chunks/ssr/_19be0743._.js +1 -1
- package/web/.next/server/pages/404.html +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/dist/src/application/ports/output/agent-executor-factory.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-executor.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-registry.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-run-repository.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-runner.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/agent-validator.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/settings.repository.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/version-service.interface.d.ts.map +0 -1
- package/dist/src/application/ports/output/web-server-service.interface.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/agent-executor-factory.service.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/agent-registry.service.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/agent-runner.service.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/agent-validator.service.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/executors/claude-code-executor.service.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/langgraph/analyze-repository-graph.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/langgraph/checkpointer.d.ts.map +0 -1
- package/dist/src/infrastructure/services/agents/langgraph/prompts/analyze-repository.prompt.d.ts.map +0 -1
- /package/dist/src/application/ports/output/{agent-executor-factory.interface.js → agents/agent-executor-factory.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-executor.interface.js → agents/agent-executor.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-registry.interface.js → agents/agent-registry.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-run-repository.interface.js → agents/agent-run-repository.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-runner.interface.js → agents/agent-runner.interface.js} +0 -0
- /package/dist/src/application/ports/output/{agent-validator.interface.js → agents/agent-validator.interface.js} +0 -0
- /package/dist/src/application/ports/output/{settings.repository.interface.js → repositories/settings.repository.interface.js} +0 -0
- /package/dist/src/application/ports/output/{version-service.interface.js → services/version-service.interface.js} +0 -0
- /package/dist/src/application/ports/output/{web-server-service.interface.d.ts → services/web-server-service.interface.d.ts} +0 -0
- /package/dist/src/application/ports/output/{web-server-service.interface.js → services/web-server-service.interface.js} +0 -0
- /package/dist/src/infrastructure/services/agents/{langgraph → analyze-repo}/prompts/analyze-repository.prompt.d.ts +0 -0
- /package/dist/src/infrastructure/services/agents/{langgraph → analyze-repo}/prompts/analyze-repository.prompt.js +0 -0
- /package/dist/src/infrastructure/services/agents/{agent-executor-factory.service.js → common/agent-executor-factory.service.js} +0 -0
- /package/dist/src/infrastructure/services/agents/{agent-validator.service.js → common/agent-validator.service.js} +0 -0
- /package/web/.next/static/{rCkFI74-eja9LrkBfHFpp → iYaq62xFNOChDTbH3WMrr}/_buildManifest.js +0 -0
- /package/web/.next/static/{rCkFI74-eja9LrkBfHFpp → iYaq62xFNOChDTbH3WMrr}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{rCkFI74-eja9LrkBfHFpp → iYaq62xFNOChDTbH3WMrr}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement Phase Prompt — PLACEHOLDER
|
|
3
|
+
*
|
|
4
|
+
* The implement phase is not yet wired up. This returns a programming joke
|
|
5
|
+
* to clearly signal it's a placeholder while keeping the graph pipeline intact.
|
|
6
|
+
*/
|
|
7
|
+
const JOKES = [
|
|
8
|
+
'Why do programmers prefer dark mode? Because light attracts bugs.',
|
|
9
|
+
'A SQL query walks into a bar, walks up to two tables and asks... "Can I JOIN you?"',
|
|
10
|
+
"There are only 10 types of people: those who understand binary, and those who don't.",
|
|
11
|
+
"Why was the JavaScript developer sad? Because he didn't Node how to Express himself.",
|
|
12
|
+
"What's a programmer's favorite hangout place? Foo Bar.",
|
|
13
|
+
'To understand recursion, you must first understand recursion.',
|
|
14
|
+
"!false — it's funny because it's true.",
|
|
15
|
+
];
|
|
16
|
+
export function getImplementPlaceholderJoke() {
|
|
17
|
+
return JOKES[Math.floor(Math.random() * JOKES.length)];
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to create an implementation plan (plan.yaml) and
|
|
5
|
+
* a task breakdown (tasks.yaml) from the spec and research.
|
|
6
|
+
* The plan covers architecture decisions and rationale.
|
|
7
|
+
* The tasks cover concrete TDD work items.
|
|
8
|
+
*/
|
|
9
|
+
import type { FeatureAgentState } from '../../state.js';
|
|
10
|
+
export declare function buildPlanPrompt(state: FeatureAgentState): string;
|
|
11
|
+
//# sourceMappingURL=plan.prompt.d.ts.map
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiKhE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to create an implementation plan (plan.yaml) and
|
|
5
|
+
* a task breakdown (tasks.yaml) from the spec and research.
|
|
6
|
+
* The plan covers architecture decisions and rationale.
|
|
7
|
+
* The tasks cover concrete TDD work items.
|
|
8
|
+
*/
|
|
9
|
+
import { readSpecFile } from '../node-helpers.js';
|
|
10
|
+
export function buildPlanPrompt(state) {
|
|
11
|
+
const specContent = readSpecFile(state.specDir, 'spec.yaml');
|
|
12
|
+
const researchContent = readSpecFile(state.specDir, 'research.yaml');
|
|
13
|
+
return `You are a software architect performing the PLANNING phase of feature development.
|
|
14
|
+
|
|
15
|
+
## Your Task
|
|
16
|
+
|
|
17
|
+
1. Read the feature spec (with requirements) and research findings
|
|
18
|
+
2. Create a high-level implementation plan with architecture decisions, phases, and rationale
|
|
19
|
+
3. Break the work into ordered tasks with TDD cycles (RED-GREEN-REFACTOR)
|
|
20
|
+
4. Write the plan to plan.yaml AND the task breakdown to tasks.yaml
|
|
21
|
+
5. plan.yaml covers strategy and architecture — tasks.yaml covers the concrete work items (no duplication)
|
|
22
|
+
|
|
23
|
+
## Feature Spec
|
|
24
|
+
|
|
25
|
+
${specContent}
|
|
26
|
+
|
|
27
|
+
## Research Findings
|
|
28
|
+
|
|
29
|
+
${researchContent}
|
|
30
|
+
|
|
31
|
+
## What to Produce
|
|
32
|
+
|
|
33
|
+
### Implementation Plan (plan.yaml) — Strategy & Architecture Only
|
|
34
|
+
- Architecture overview and how the feature fits the existing codebase
|
|
35
|
+
- Key design decisions with rationale (reference research where applicable)
|
|
36
|
+
- Implementation phases — high-level names and descriptions (NO individual task lists)
|
|
37
|
+
- Files to create and files to modify
|
|
38
|
+
- Risk mitigation strategies
|
|
39
|
+
- Do NOT include task breakdowns — those belong exclusively in tasks.yaml
|
|
40
|
+
|
|
41
|
+
### Task Breakdown (tasks.yaml)
|
|
42
|
+
- Concrete, ordered tasks that implement the plan
|
|
43
|
+
- Each task with TDD cycle: what test to write first (RED), minimal implementation (GREEN), cleanup (REFACTOR)
|
|
44
|
+
- Dependencies between tasks
|
|
45
|
+
- Acceptance criteria for each task
|
|
46
|
+
- Effort estimates
|
|
47
|
+
|
|
48
|
+
## Output Instructions
|
|
49
|
+
|
|
50
|
+
You MUST write TWO files:
|
|
51
|
+
|
|
52
|
+
### File 1: ${state.specDir}/plan.yaml
|
|
53
|
+
|
|
54
|
+
name: (feature name)
|
|
55
|
+
summary: >
|
|
56
|
+
(Summary of the implementation approach and key decisions)
|
|
57
|
+
|
|
58
|
+
relatedFeatures: []
|
|
59
|
+
technologies:
|
|
60
|
+
- (technologies needed)
|
|
61
|
+
relatedLinks: []
|
|
62
|
+
|
|
63
|
+
phases:
|
|
64
|
+
- id: phase-1
|
|
65
|
+
name: '(Phase Name — e.g., "Foundation & Domain Setup")'
|
|
66
|
+
description: '(What this phase accomplishes and why it comes first)'
|
|
67
|
+
parallel: false
|
|
68
|
+
- id: phase-2
|
|
69
|
+
name: '(Next Phase)'
|
|
70
|
+
description: '(What this phase accomplishes)'
|
|
71
|
+
parallel: false
|
|
72
|
+
|
|
73
|
+
filesToCreate:
|
|
74
|
+
- (path/to/new/file.ts)
|
|
75
|
+
|
|
76
|
+
filesToModify:
|
|
77
|
+
- (path/to/existing/file.ts)
|
|
78
|
+
|
|
79
|
+
openQuestions: []
|
|
80
|
+
|
|
81
|
+
content: |
|
|
82
|
+
## Architecture Overview
|
|
83
|
+
|
|
84
|
+
(How the implementation fits the existing architecture.
|
|
85
|
+
Reference specific patterns from the codebase.)
|
|
86
|
+
|
|
87
|
+
## Key Design Decisions
|
|
88
|
+
|
|
89
|
+
(For each decision, explain what was chosen, what alternatives were considered,
|
|
90
|
+
and why this approach is best. Reference research findings.)
|
|
91
|
+
|
|
92
|
+
## Implementation Strategy
|
|
93
|
+
|
|
94
|
+
(High-level approach: phase ordering rationale, what comes first and why)
|
|
95
|
+
|
|
96
|
+
## Risk Mitigation
|
|
97
|
+
|
|
98
|
+
| Risk | Mitigation |
|
|
99
|
+
| ---- | ---------- |
|
|
100
|
+
| (risk) | (how to handle it) |
|
|
101
|
+
|
|
102
|
+
### File 2: ${state.specDir}/tasks.yaml
|
|
103
|
+
|
|
104
|
+
name: (feature name)
|
|
105
|
+
summary: >
|
|
106
|
+
(Summary: N tasks across M phases)
|
|
107
|
+
|
|
108
|
+
relatedFeatures: []
|
|
109
|
+
technologies: []
|
|
110
|
+
relatedLinks: []
|
|
111
|
+
|
|
112
|
+
tasks:
|
|
113
|
+
- id: task-1
|
|
114
|
+
phaseId: phase-1
|
|
115
|
+
title: '(Task Title)'
|
|
116
|
+
description: '(What this task accomplishes and why)'
|
|
117
|
+
state: Todo
|
|
118
|
+
dependencies: []
|
|
119
|
+
acceptanceCriteria:
|
|
120
|
+
- '(Specific, testable criterion)'
|
|
121
|
+
- '(Another criterion)'
|
|
122
|
+
tdd:
|
|
123
|
+
red:
|
|
124
|
+
- '(Write test that asserts X behavior)'
|
|
125
|
+
green:
|
|
126
|
+
- '(Implement minimal code to pass the test)'
|
|
127
|
+
refactor:
|
|
128
|
+
- '(Clean up: extract helpers, improve naming, etc.)'
|
|
129
|
+
estimatedEffort: '(time estimate, e.g., 1h, 30min)'
|
|
130
|
+
|
|
131
|
+
- id: task-2
|
|
132
|
+
phaseId: phase-1
|
|
133
|
+
title: '(Next Task)'
|
|
134
|
+
description: '...'
|
|
135
|
+
state: Todo
|
|
136
|
+
dependencies:
|
|
137
|
+
- task-1
|
|
138
|
+
acceptanceCriteria:
|
|
139
|
+
- '...'
|
|
140
|
+
tdd:
|
|
141
|
+
red:
|
|
142
|
+
- '...'
|
|
143
|
+
green:
|
|
144
|
+
- '...'
|
|
145
|
+
refactor:
|
|
146
|
+
- '...'
|
|
147
|
+
estimatedEffort: '...'
|
|
148
|
+
|
|
149
|
+
totalEstimate: '(total estimated hours)'
|
|
150
|
+
openQuestions: []
|
|
151
|
+
|
|
152
|
+
content: |
|
|
153
|
+
## Summary
|
|
154
|
+
|
|
155
|
+
(Brief narrative: what gets built, in what order, and why.
|
|
156
|
+
Do NOT list individual tasks — the structured tasks array above is the source of truth.
|
|
157
|
+
Instead, summarize the overall flow: "First we set up X, then wire Y, finally integrate Z.")
|
|
158
|
+
|
|
159
|
+
## Constraints
|
|
160
|
+
|
|
161
|
+
- Write to BOTH ${state.specDir}/plan.yaml AND ${state.specDir}/tasks.yaml
|
|
162
|
+
- Every code task MUST have TDD cycles (red/green/refactor) — non-code tasks (installs, docs) can set tdd: null
|
|
163
|
+
- Tasks must be ordered by dependency — no task should depend on a later task
|
|
164
|
+
- Each phase should group logically related tasks
|
|
165
|
+
- Prefer small, focused tasks over large monolithic ones
|
|
166
|
+
- Follow existing codebase conventions for file placement and naming
|
|
167
|
+
- Do NOT create any other files
|
|
168
|
+
- Do NOT modify any source code
|
|
169
|
+
- Do NOT start implementing — planning only`;
|
|
170
|
+
}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requirements Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to build comprehensive requirements from the analysis,
|
|
5
|
+
* including product questions with AI-recommended default answers.
|
|
6
|
+
* Writes back to spec.yaml with full requirements.
|
|
7
|
+
*/
|
|
8
|
+
import type { FeatureAgentState } from '../../state.js';
|
|
9
|
+
export declare function buildRequirementsPrompt(state: FeatureAgentState): string;
|
|
10
|
+
//# sourceMappingURL=requirements.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA4GxE"}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requirements Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to build comprehensive requirements from the analysis,
|
|
5
|
+
* including product questions with AI-recommended default answers.
|
|
6
|
+
* Writes back to spec.yaml with full requirements.
|
|
7
|
+
*/
|
|
8
|
+
import { readSpecFile } from '../node-helpers.js';
|
|
9
|
+
export function buildRequirementsPrompt(state) {
|
|
10
|
+
const specContent = readSpecFile(state.specDir, 'spec.yaml');
|
|
11
|
+
return `You are a product analyst performing the REQUIREMENTS phase of feature development.
|
|
12
|
+
|
|
13
|
+
## Your Task
|
|
14
|
+
|
|
15
|
+
1. Read the current spec with codebase analysis below
|
|
16
|
+
2. Build a complete set of functional and non-functional requirements
|
|
17
|
+
3. Define clear, measurable success criteria
|
|
18
|
+
4. Identify product decisions that need input — for EACH one, provide your AI-recommended default answer with rationale
|
|
19
|
+
5. Update the spec YAML file with the full requirements
|
|
20
|
+
|
|
21
|
+
## Current Spec (with analysis)
|
|
22
|
+
|
|
23
|
+
${specContent}
|
|
24
|
+
|
|
25
|
+
## What to Produce
|
|
26
|
+
|
|
27
|
+
### Requirements
|
|
28
|
+
- **Functional requirements (FR-N)**: what the system must DO
|
|
29
|
+
- **Non-functional requirements (NFR-N)**: performance, security, UX, maintainability constraints
|
|
30
|
+
- **Success criteria**: measurable checkboxes that define "done"
|
|
31
|
+
|
|
32
|
+
### Product Questions with AI Defaults
|
|
33
|
+
For every ambiguous product decision, create an openQuestion entry with:
|
|
34
|
+
- A clear question
|
|
35
|
+
- resolved: true (your recommendation is the default)
|
|
36
|
+
- Your recommended answer with reasoning
|
|
37
|
+
|
|
38
|
+
The user can later review and override these defaults. This is the AI-recommended path — not the only option.
|
|
39
|
+
|
|
40
|
+
## Output Instructions
|
|
41
|
+
|
|
42
|
+
Update the file at: ${state.specDir}/spec.yaml
|
|
43
|
+
|
|
44
|
+
Write the COMPLETE file. Preserve name/number/branch/technologies from analysis and update:
|
|
45
|
+
|
|
46
|
+
name: (keep)
|
|
47
|
+
number: (keep)
|
|
48
|
+
branch: (keep)
|
|
49
|
+
oneLiner: (keep or refine)
|
|
50
|
+
summary: >
|
|
51
|
+
(keep or refine based on requirements)
|
|
52
|
+
phase: Requirements
|
|
53
|
+
sizeEstimate: (keep or update if scope changed)
|
|
54
|
+
|
|
55
|
+
relatedFeatures: (keep)
|
|
56
|
+
|
|
57
|
+
technologies:
|
|
58
|
+
- (keep from analysis, add any new ones identified)
|
|
59
|
+
|
|
60
|
+
relatedLinks: (keep)
|
|
61
|
+
|
|
62
|
+
openQuestions:
|
|
63
|
+
- question: 'Should X use approach A or B?'
|
|
64
|
+
resolved: true
|
|
65
|
+
answer: 'Recommend A because [rationale]. Alternative: B if [condition].'
|
|
66
|
+
- question: 'What level of Y is needed?'
|
|
67
|
+
resolved: true
|
|
68
|
+
answer: 'Recommend Z level because [rationale].'
|
|
69
|
+
|
|
70
|
+
content: |
|
|
71
|
+
## Problem Statement
|
|
72
|
+
|
|
73
|
+
(refined from analysis)
|
|
74
|
+
|
|
75
|
+
## Success Criteria
|
|
76
|
+
|
|
77
|
+
- [ ] (measurable criterion 1)
|
|
78
|
+
- [ ] (measurable criterion 2)
|
|
79
|
+
- [ ] (etc.)
|
|
80
|
+
|
|
81
|
+
## Functional Requirements
|
|
82
|
+
|
|
83
|
+
- **FR-1**: (requirement description)
|
|
84
|
+
- **FR-2**: (requirement description)
|
|
85
|
+
|
|
86
|
+
## Non-Functional Requirements
|
|
87
|
+
|
|
88
|
+
- **NFR-1**: (performance/security/UX requirement)
|
|
89
|
+
- **NFR-2**: (etc.)
|
|
90
|
+
|
|
91
|
+
## Product Questions & AI Recommendations
|
|
92
|
+
|
|
93
|
+
| # | Question | AI Recommendation | Rationale |
|
|
94
|
+
| - | -------- | ----------------- | --------- |
|
|
95
|
+
| 1 | (question) | (recommended answer) | (why) |
|
|
96
|
+
|
|
97
|
+
## Affected Areas
|
|
98
|
+
|
|
99
|
+
(keep from analysis)
|
|
100
|
+
|
|
101
|
+
## Dependencies
|
|
102
|
+
|
|
103
|
+
(keep from analysis, add any new ones)
|
|
104
|
+
|
|
105
|
+
## Size Estimate
|
|
106
|
+
|
|
107
|
+
(keep or update with requirements-informed reasoning)
|
|
108
|
+
|
|
109
|
+
## Constraints
|
|
110
|
+
|
|
111
|
+
- Write ONLY to ${state.specDir}/spec.yaml
|
|
112
|
+
- Every open question MUST have an AI-recommended default answer (resolved: true)
|
|
113
|
+
- Requirements must be specific and testable, not vague
|
|
114
|
+
- Do NOT create any other files
|
|
115
|
+
- Do NOT modify any source code`;
|
|
116
|
+
}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to research technical implementation details,
|
|
5
|
+
* evaluate libraries, and document architecture decisions with rationale.
|
|
6
|
+
* Writes to research.yaml.
|
|
7
|
+
*/
|
|
8
|
+
import type { FeatureAgentState } from '../../state.js';
|
|
9
|
+
export declare function buildResearchPrompt(state: FeatureAgentState): string;
|
|
10
|
+
//# sourceMappingURL=research.prompt.d.ts.map
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiHpE"}
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research Phase Prompt
|
|
3
|
+
*
|
|
4
|
+
* Instructs the agent to research technical implementation details,
|
|
5
|
+
* evaluate libraries, and document architecture decisions with rationale.
|
|
6
|
+
* Writes to research.yaml.
|
|
7
|
+
*/
|
|
8
|
+
import { readSpecFile } from '../node-helpers.js';
|
|
9
|
+
export function buildResearchPrompt(state) {
|
|
10
|
+
const specContent = readSpecFile(state.specDir, 'spec.yaml');
|
|
11
|
+
const existingResearch = readSpecFile(state.specDir, 'research.yaml');
|
|
12
|
+
return `You are a technical architect performing the RESEARCH phase of feature development.
|
|
13
|
+
|
|
14
|
+
## Your Task
|
|
15
|
+
|
|
16
|
+
1. Read the feature spec with requirements below
|
|
17
|
+
2. Research how to implement this feature technically
|
|
18
|
+
3. For each technical decision, evaluate multiple options and choose one with clear rationale
|
|
19
|
+
4. Evaluate libraries needed — document what to use, what to reject, and why
|
|
20
|
+
5. Identify security and performance implications
|
|
21
|
+
6. Write your complete research to the research YAML file
|
|
22
|
+
|
|
23
|
+
## Feature Spec (with requirements)
|
|
24
|
+
|
|
25
|
+
${specContent}
|
|
26
|
+
|
|
27
|
+
${existingResearch ? `## Existing Research (update/expand this)\n\n${existingResearch}` : ''}
|
|
28
|
+
|
|
29
|
+
## What to Research
|
|
30
|
+
|
|
31
|
+
- **Architecture decisions**: how this fits into the existing codebase architecture
|
|
32
|
+
- **Technology choices**: which libraries/tools/patterns to use (and which to reject)
|
|
33
|
+
- **Data model changes**: any schema or model updates needed
|
|
34
|
+
- **API design**: endpoints, contracts, interfaces
|
|
35
|
+
- **Security implications**: authentication, authorization, data safety
|
|
36
|
+
- **Performance considerations**: caching, optimization, scalability
|
|
37
|
+
- **Integration points**: how this connects to existing systems
|
|
38
|
+
|
|
39
|
+
## Output Instructions
|
|
40
|
+
|
|
41
|
+
Write your research to: ${state.specDir}/research.yaml
|
|
42
|
+
|
|
43
|
+
Use this YAML structure:
|
|
44
|
+
|
|
45
|
+
name: (feature name from spec)
|
|
46
|
+
summary: >
|
|
47
|
+
(2-3 sentence summary of research findings and key decisions)
|
|
48
|
+
|
|
49
|
+
relatedFeatures: []
|
|
50
|
+
|
|
51
|
+
technologies:
|
|
52
|
+
- (list all technologies evaluated or needed)
|
|
53
|
+
|
|
54
|
+
relatedLinks:
|
|
55
|
+
- (relevant documentation URLs discovered during research)
|
|
56
|
+
|
|
57
|
+
decisions:
|
|
58
|
+
- title: '(Decision Title — e.g., "Database Schema Design")'
|
|
59
|
+
chosen: '(The chosen approach)'
|
|
60
|
+
rejected:
|
|
61
|
+
- '(Alternative 1 that was considered and why not)'
|
|
62
|
+
- '(Alternative 2 that was considered and why not)'
|
|
63
|
+
rationale: >
|
|
64
|
+
(Detailed reasoning for why the chosen approach is best.
|
|
65
|
+
Reference the codebase's existing patterns where relevant.)
|
|
66
|
+
|
|
67
|
+
- title: '(Next Decision)'
|
|
68
|
+
chosen: '...'
|
|
69
|
+
rejected:
|
|
70
|
+
- '...'
|
|
71
|
+
rationale: >
|
|
72
|
+
...
|
|
73
|
+
|
|
74
|
+
openQuestions:
|
|
75
|
+
- question: '(Any technical question that arose)'
|
|
76
|
+
resolved: true
|
|
77
|
+
answer: '(Resolution with technical reasoning)'
|
|
78
|
+
|
|
79
|
+
content: |
|
|
80
|
+
## Technology Decisions
|
|
81
|
+
|
|
82
|
+
### 1. (Decision Title)
|
|
83
|
+
|
|
84
|
+
**Chosen:** (approach)
|
|
85
|
+
|
|
86
|
+
**Rejected:**
|
|
87
|
+
- (alternative 1) — (why rejected)
|
|
88
|
+
- (alternative 2) — (why rejected)
|
|
89
|
+
|
|
90
|
+
**Rationale:** (detailed reasoning)
|
|
91
|
+
|
|
92
|
+
### 2. (Next Decision)
|
|
93
|
+
...
|
|
94
|
+
|
|
95
|
+
## Library Analysis
|
|
96
|
+
|
|
97
|
+
| Library | Purpose | Decision | Reasoning |
|
|
98
|
+
| ------- | ------- | -------- | --------- |
|
|
99
|
+
| (lib) | (purpose) | Use/Reject | (why) |
|
|
100
|
+
|
|
101
|
+
## Security Considerations
|
|
102
|
+
|
|
103
|
+
(security implications and mitigations)
|
|
104
|
+
|
|
105
|
+
## Performance Implications
|
|
106
|
+
|
|
107
|
+
(performance considerations and optimizations)
|
|
108
|
+
|
|
109
|
+
## Architecture Notes
|
|
110
|
+
|
|
111
|
+
(how this fits into the existing codebase architecture)
|
|
112
|
+
|
|
113
|
+
## Constraints
|
|
114
|
+
|
|
115
|
+
- Write ONLY to ${state.specDir}/research.yaml
|
|
116
|
+
- Every decision MUST have at least one rejected alternative with reasoning
|
|
117
|
+
- Every decision MUST have clear rationale referencing the codebase where applicable
|
|
118
|
+
- Prefer solutions that follow existing codebase patterns and conventions
|
|
119
|
+
- Do NOT create any other files
|
|
120
|
+
- Do NOT modify any source code`;
|
|
121
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the requirements node that builds comprehensive requirements
|
|
4
|
+
* with product questions and AI-recommended defaults, writing to spec.yaml.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createRequirementsNode(executor: IAgentExecutor): (state: import("../state.js").FeatureAgentState) => Promise<Partial<import("../state.js").FeatureAgentState>>;
|
|
7
|
+
//# sourceMappingURL=requirements.node.d.ts.map
|
package/dist/src/infrastructure/services/agents/feature-agent/nodes/requirements.node.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/requirements.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,iHAE9D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { executeNode } from './node-helpers.js';
|
|
2
|
+
import { buildRequirementsPrompt } from './prompts/requirements.prompt.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the requirements node that builds comprehensive requirements
|
|
5
|
+
* with product questions and AI-recommended defaults, writing to spec.yaml.
|
|
6
|
+
*/
|
|
7
|
+
export function createRequirementsNode(executor) {
|
|
8
|
+
return executeNode('requirements', executor, buildRequirementsPrompt);
|
|
9
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the research node that evaluates technical approaches,
|
|
4
|
+
* libraries, and architecture decisions, writing to research.yaml.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createResearchNode(executor: IAgentExecutor): (state: import("../state.js").FeatureAgentState) => Promise<Partial<import("../state.js").FeatureAgentState>>;
|
|
7
|
+
//# sourceMappingURL=research.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.node.d.ts","sourceRoot":"","sources":["../../../../../../../src/infrastructure/services/agents/feature-agent/nodes/research.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,iHAE1D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { executeNode } from './node-helpers.js';
|
|
2
|
+
import { buildResearchPrompt } from './prompts/research.prompt.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates the research node that evaluates technical approaches,
|
|
5
|
+
* libraries, and architecture decisions, writing to research.yaml.
|
|
6
|
+
*/
|
|
7
|
+
export function createResearchNode(executor) {
|
|
8
|
+
return executeNode('research', executor, buildResearchPrompt);
|
|
9
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State annotation for the feature-agent graph.
|
|
3
|
+
*
|
|
4
|
+
* Uses LangGraph's Annotation API to define state channels.
|
|
5
|
+
* The `messages` channel uses a reducer to accumulate messages
|
|
6
|
+
* from all nodes as the graph executes.
|
|
7
|
+
*/
|
|
8
|
+
export declare const FeatureAgentAnnotation: import("@langchain/langgraph").AnnotationRoot<{
|
|
9
|
+
featureId: {
|
|
10
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
11
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
12
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
13
|
+
};
|
|
14
|
+
repositoryPath: {
|
|
15
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
16
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
17
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
18
|
+
};
|
|
19
|
+
specDir: {
|
|
20
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
21
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
22
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
23
|
+
};
|
|
24
|
+
worktreePath: {
|
|
25
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
26
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
27
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
28
|
+
};
|
|
29
|
+
currentNode: {
|
|
30
|
+
(): import("@langchain/langgraph").LastValue<string>;
|
|
31
|
+
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
32
|
+
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
33
|
+
};
|
|
34
|
+
error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
35
|
+
approvalMode: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
|
|
36
|
+
messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
37
|
+
}>;
|
|
38
|
+
export type FeatureAgentState = typeof FeatureAgentAnnotation.State;
|
|
39
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Annotation } from '@langchain/langgraph';
|
|
2
|
+
/**
|
|
3
|
+
* State annotation for the feature-agent graph.
|
|
4
|
+
*
|
|
5
|
+
* Uses LangGraph's Annotation API to define state channels.
|
|
6
|
+
* The `messages` channel uses a reducer to accumulate messages
|
|
7
|
+
* from all nodes as the graph executes.
|
|
8
|
+
*/
|
|
9
|
+
export const FeatureAgentAnnotation = Annotation.Root({
|
|
10
|
+
featureId: (Annotation),
|
|
11
|
+
repositoryPath: (Annotation),
|
|
12
|
+
specDir: (Annotation),
|
|
13
|
+
worktreePath: (Annotation),
|
|
14
|
+
currentNode: (Annotation),
|
|
15
|
+
error: Annotation({
|
|
16
|
+
reducer: (prev, next) => (next !== undefined ? next : prev),
|
|
17
|
+
default: () => null,
|
|
18
|
+
}),
|
|
19
|
+
approvalMode: Annotation({
|
|
20
|
+
reducer: (prev, next) => next ?? prev,
|
|
21
|
+
default: () => undefined,
|
|
22
|
+
}),
|
|
23
|
+
messages: Annotation({
|
|
24
|
+
reducer: (prev, next) => [...prev, ...next],
|
|
25
|
+
default: () => [],
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* the EventChannel receive real-time events.
|
|
12
12
|
*/
|
|
13
13
|
import type { AgentType, AgentFeature } from '../../../../domain/generated/output.js';
|
|
14
|
-
import type { IAgentExecutor, AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../application/ports/output/agent-executor.interface.js';
|
|
14
|
+
import type { IAgentExecutor, AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
15
15
|
import type { EventChannel } from './event-channel.js';
|
|
16
16
|
export declare class StreamingExecutorProxy implements IAgentExecutor {
|
|
17
17
|
private readonly inner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-executor-proxy.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/streaming/streaming-executor-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"streaming-executor-proxy.d.ts","sourceRoot":"","sources":["../../../../../../src/infrastructure/services/agents/streaming/streaming-executor-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,sBAAuB,YAAW,cAAc;IAMzD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,IAAI,SAAS,IAAI,SAAS,CAEzB;gBAGkB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,YAAY,CAAC,yBAAyB,CAAC;IAG7D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyBtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAI3C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;CAGhD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Issue Fetcher Service
|
|
3
|
+
*
|
|
4
|
+
* Fetches GitHub issues using the gh CLI subprocess.
|
|
5
|
+
* Supports owner/repo#number and #number (current repo) formats.
|
|
6
|
+
*/
|
|
7
|
+
import type { IExternalIssueFetcher, ExternalIssue } from '../../../application/ports/output/services/external-issue-fetcher.interface.js';
|
|
8
|
+
type ExecFileFn = (cmd: string, args: string[], options?: object) => Promise<{
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr?: string;
|
|
11
|
+
}>;
|
|
12
|
+
export declare class GitHubIssueFetcher implements Pick<IExternalIssueFetcher, 'fetchGitHubIssue'> {
|
|
13
|
+
private readonly execFile;
|
|
14
|
+
constructor(execFile: ExecFileFn);
|
|
15
|
+
fetchGitHubIssue(ref: string): Promise<ExternalIssue>;
|
|
16
|
+
private parseRef;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=github-issue.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-issue.service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/services/external/github-issue.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACd,MAAM,yEAAyE,CAAC;AAMjF,KAAK,UAAU,GAAG,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElD,qBAAa,kBAAmB,YAAW,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,UAAU;IAE3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAyC3D,OAAO,CAAC,QAAQ;CAoBjB"}
|