hungry-ghost-hive 0.3.0
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/LICENSE +111 -0
- package/README.md +352 -0
- package/dist/agents/base-agent.d.ts +63 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +189 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +7 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/intermediate.d.ts +15 -0
- package/dist/agents/intermediate.d.ts.map +1 -0
- package/dist/agents/intermediate.js +142 -0
- package/dist/agents/intermediate.js.map +1 -0
- package/dist/agents/junior.d.ts +15 -0
- package/dist/agents/junior.d.ts.map +1 -0
- package/dist/agents/junior.js +147 -0
- package/dist/agents/junior.js.map +1 -0
- package/dist/agents/qa.d.ts +23 -0
- package/dist/agents/qa.d.ts.map +1 -0
- package/dist/agents/qa.js +238 -0
- package/dist/agents/qa.js.map +1 -0
- package/dist/agents/senior.d.ts +18 -0
- package/dist/agents/senior.d.ts.map +1 -0
- package/dist/agents/senior.js +267 -0
- package/dist/agents/senior.js.map +1 -0
- package/dist/agents/tech-lead.d.ts +17 -0
- package/dist/agents/tech-lead.d.ts.map +1 -0
- package/dist/agents/tech-lead.js +274 -0
- package/dist/agents/tech-lead.js.map +1 -0
- package/dist/cli/commands/add-repo.d.ts +3 -0
- package/dist/cli/commands/add-repo.d.ts.map +1 -0
- package/dist/cli/commands/add-repo.js +84 -0
- package/dist/cli/commands/add-repo.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +3 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +214 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/assign.d.ts +3 -0
- package/dist/cli/commands/assign.d.ts.map +1 -0
- package/dist/cli/commands/assign.js +81 -0
- package/dist/cli/commands/assign.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +118 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/escalations.d.ts +3 -0
- package/dist/cli/commands/escalations.d.ts.map +1 -0
- package/dist/cli/commands/escalations.js +157 -0
- package/dist/cli/commands/escalations.js.map +1 -0
- package/dist/cli/commands/index.d.ts +17 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +17 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +59 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/manager.d.ts +3 -0
- package/dist/cli/commands/manager.d.ts.map +1 -0
- package/dist/cli/commands/manager.js +775 -0
- package/dist/cli/commands/manager.js.map +1 -0
- package/dist/cli/commands/manager.test.d.ts +2 -0
- package/dist/cli/commands/manager.test.d.ts.map +1 -0
- package/dist/cli/commands/manager.test.js +45 -0
- package/dist/cli/commands/manager.test.js.map +1 -0
- package/dist/cli/commands/msg.d.ts +3 -0
- package/dist/cli/commands/msg.d.ts.map +1 -0
- package/dist/cli/commands/msg.js +190 -0
- package/dist/cli/commands/msg.js.map +1 -0
- package/dist/cli/commands/my-stories.d.ts +3 -0
- package/dist/cli/commands/my-stories.d.ts.map +1 -0
- package/dist/cli/commands/my-stories.js +174 -0
- package/dist/cli/commands/my-stories.js.map +1 -0
- package/dist/cli/commands/nuke.d.ts +3 -0
- package/dist/cli/commands/nuke.d.ts.map +1 -0
- package/dist/cli/commands/nuke.js +189 -0
- package/dist/cli/commands/nuke.js.map +1 -0
- package/dist/cli/commands/pr.d.ts +3 -0
- package/dist/cli/commands/pr.d.ts.map +1 -0
- package/dist/cli/commands/pr.js +488 -0
- package/dist/cli/commands/pr.js.map +1 -0
- package/dist/cli/commands/req.d.ts +3 -0
- package/dist/cli/commands/req.d.ts.map +1 -0
- package/dist/cli/commands/req.js +212 -0
- package/dist/cli/commands/req.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +3 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +114 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +259 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stories.d.ts +3 -0
- package/dist/cli/commands/stories.d.ts.map +1 -0
- package/dist/cli/commands/stories.js +111 -0
- package/dist/cli/commands/stories.js.map +1 -0
- package/dist/cli/commands/teams.d.ts +3 -0
- package/dist/cli/commands/teams.d.ts.map +1 -0
- package/dist/cli/commands/teams.js +137 -0
- package/dist/cli/commands/teams.js.map +1 -0
- package/dist/cli/dashboard/index.d.ts +5 -0
- package/dist/cli/dashboard/index.d.ts.map +1 -0
- package/dist/cli/dashboard/index.js +128 -0
- package/dist/cli/dashboard/index.js.map +1 -0
- package/dist/cli/dashboard/panels/activity.d.ts +5 -0
- package/dist/cli/dashboard/panels/activity.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/activity.js +64 -0
- package/dist/cli/dashboard/panels/activity.js.map +1 -0
- package/dist/cli/dashboard/panels/agents.d.ts +5 -0
- package/dist/cli/dashboard/panels/agents.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/agents.js +196 -0
- package/dist/cli/dashboard/panels/agents.js.map +1 -0
- package/dist/cli/dashboard/panels/escalations.d.ts +5 -0
- package/dist/cli/dashboard/panels/escalations.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/escalations.js +93 -0
- package/dist/cli/dashboard/panels/escalations.js.map +1 -0
- package/dist/cli/dashboard/panels/merge-queue.d.ts +5 -0
- package/dist/cli/dashboard/panels/merge-queue.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/merge-queue.js +57 -0
- package/dist/cli/dashboard/panels/merge-queue.js.map +1 -0
- package/dist/cli/dashboard/panels/pipeline.d.ts +5 -0
- package/dist/cli/dashboard/panels/pipeline.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/pipeline.js +54 -0
- package/dist/cli/dashboard/panels/pipeline.js.map +1 -0
- package/dist/cli/dashboard/panels/stories.d.ts +5 -0
- package/dist/cli/dashboard/panels/stories.d.ts.map +1 -0
- package/dist/cli/dashboard/panels/stories.js +79 -0
- package/dist/cli/dashboard/panels/stories.js.map +1 -0
- package/dist/cli-runtimes/claude.d.ts +8 -0
- package/dist/cli-runtimes/claude.d.ts.map +1 -0
- package/dist/cli-runtimes/claude.js +27 -0
- package/dist/cli-runtimes/claude.js.map +1 -0
- package/dist/cli-runtimes/codex.d.ts +8 -0
- package/dist/cli-runtimes/codex.d.ts.map +1 -0
- package/dist/cli-runtimes/codex.js +27 -0
- package/dist/cli-runtimes/codex.js.map +1 -0
- package/dist/cli-runtimes/gemini.d.ts +8 -0
- package/dist/cli-runtimes/gemini.d.ts.map +1 -0
- package/dist/cli-runtimes/gemini.js +29 -0
- package/dist/cli-runtimes/gemini.js.map +1 -0
- package/dist/cli-runtimes/index.d.ts +25 -0
- package/dist/cli-runtimes/index.d.ts.map +1 -0
- package/dist/cli-runtimes/index.js +48 -0
- package/dist/cli-runtimes/index.js.map +1 -0
- package/dist/cli-runtimes/index.test.d.ts +2 -0
- package/dist/cli-runtimes/index.test.d.ts.map +1 -0
- package/dist/cli-runtimes/index.test.js +216 -0
- package/dist/cli-runtimes/index.test.js.map +1 -0
- package/dist/cli-runtimes/types.d.ts +27 -0
- package/dist/cli-runtimes/types.d.ts.map +1 -0
- package/dist/cli-runtimes/types.js +2 -0
- package/dist/cli-runtimes/types.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +72 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +660 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +217 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/schema.test.d.ts +2 -0
- package/dist/config/schema.test.d.ts.map +1 -0
- package/dist/config/schema.test.js +123 -0
- package/dist/config/schema.test.js.map +1 -0
- package/dist/context-files/generator.d.ts +32 -0
- package/dist/context-files/generator.d.ts.map +1 -0
- package/dist/context-files/generator.js +120 -0
- package/dist/context-files/generator.js.map +1 -0
- package/dist/context-files/index.d.ts +38 -0
- package/dist/context-files/index.d.ts.map +1 -0
- package/dist/context-files/index.js +76 -0
- package/dist/context-files/index.js.map +1 -0
- package/dist/context-files/index.test.d.ts +2 -0
- package/dist/context-files/index.test.d.ts.map +1 -0
- package/dist/context-files/index.test.js +265 -0
- package/dist/context-files/index.test.js.map +1 -0
- package/dist/context-files/templates.d.ts +19 -0
- package/dist/context-files/templates.d.ts.map +1 -0
- package/dist/context-files/templates.js +266 -0
- package/dist/context-files/templates.js.map +1 -0
- package/dist/db/client.d.ts +95 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +343 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/lock.d.ts +25 -0
- package/dist/db/lock.d.ts.map +1 -0
- package/dist/db/lock.js +56 -0
- package/dist/db/lock.js.map +1 -0
- package/dist/db/lock.test.d.ts +2 -0
- package/dist/db/lock.test.d.ts.map +1 -0
- package/dist/db/lock.test.js +73 -0
- package/dist/db/lock.test.js.map +1 -0
- package/dist/db/queries/agents.d.ts +31 -0
- package/dist/db/queries/agents.d.ts.map +1 -0
- package/dist/db/queries/agents.js +76 -0
- package/dist/db/queries/agents.js.map +1 -0
- package/dist/db/queries/escalations.d.ts +29 -0
- package/dist/db/queries/escalations.d.ts.map +1 -0
- package/dist/db/queries/escalations.js +105 -0
- package/dist/db/queries/escalations.js.map +1 -0
- package/dist/db/queries/heartbeat.d.ts +20 -0
- package/dist/db/queries/heartbeat.d.ts.map +1 -0
- package/dist/db/queries/heartbeat.js +61 -0
- package/dist/db/queries/heartbeat.js.map +1 -0
- package/dist/db/queries/index.d.ts +8 -0
- package/dist/db/queries/index.d.ts.map +1 -0
- package/dist/db/queries/index.js +8 -0
- package/dist/db/queries/index.js.map +1 -0
- package/dist/db/queries/logs.d.ts +21 -0
- package/dist/db/queries/logs.d.ts.map +1 -0
- package/dist/db/queries/logs.js +72 -0
- package/dist/db/queries/logs.js.map +1 -0
- package/dist/db/queries/messages.d.ts +17 -0
- package/dist/db/queries/messages.d.ts.map +1 -0
- package/dist/db/queries/messages.js +22 -0
- package/dist/db/queries/messages.js.map +1 -0
- package/dist/db/queries/pull-requests.d.ts +33 -0
- package/dist/db/queries/pull-requests.d.ts.map +1 -0
- package/dist/db/queries/pull-requests.js +130 -0
- package/dist/db/queries/pull-requests.js.map +1 -0
- package/dist/db/queries/requirements.d.ts +22 -0
- package/dist/db/queries/requirements.d.ts.map +1 -0
- package/dist/db/queries/requirements.js +53 -0
- package/dist/db/queries/requirements.js.map +1 -0
- package/dist/db/queries/stories.d.ts +42 -0
- package/dist/db/queries/stories.d.ts.map +1 -0
- package/dist/db/queries/stories.js +163 -0
- package/dist/db/queries/stories.js.map +1 -0
- package/dist/db/queries/teams.d.ts +14 -0
- package/dist/db/queries/teams.d.ts.map +1 -0
- package/dist/db/queries/teams.js +24 -0
- package/dist/db/queries/teams.js.map +1 -0
- package/dist/git/branches.d.ts +52 -0
- package/dist/git/branches.d.ts.map +1 -0
- package/dist/git/branches.js +133 -0
- package/dist/git/branches.js.map +1 -0
- package/dist/git/github.d.ts +75 -0
- package/dist/git/github.d.ts.map +1 -0
- package/dist/git/github.js +162 -0
- package/dist/git/github.js.map +1 -0
- package/dist/git/index.d.ts +4 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +4 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/submodules.d.ts +47 -0
- package/dist/git/submodules.d.ts.map +1 -0
- package/dist/git/submodules.js +115 -0
- package/dist/git/submodules.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +18 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +111 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +24 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/openai.d.ts +18 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +103 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/llm/provider.d.ts +38 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +17 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/orchestrator/index.d.ts +4 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +4 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/scaler.d.ts +42 -0
- package/dist/orchestrator/scaler.d.ts.map +1 -0
- package/dist/orchestrator/scaler.js +154 -0
- package/dist/orchestrator/scaler.js.map +1 -0
- package/dist/orchestrator/scheduler.d.ts +90 -0
- package/dist/orchestrator/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/scheduler.js +1003 -0
- package/dist/orchestrator/scheduler.js.map +1 -0
- package/dist/orchestrator/scheduler.test.d.ts +2 -0
- package/dist/orchestrator/scheduler.test.d.ts.map +1 -0
- package/dist/orchestrator/scheduler.test.js +242 -0
- package/dist/orchestrator/scheduler.test.js.map +1 -0
- package/dist/orchestrator/workflow.d.ts +18 -0
- package/dist/orchestrator/workflow.d.ts.map +1 -0
- package/dist/orchestrator/workflow.js +106 -0
- package/dist/orchestrator/workflow.js.map +1 -0
- package/dist/state-detectors/claude.d.ts +33 -0
- package/dist/state-detectors/claude.d.ts.map +1 -0
- package/dist/state-detectors/claude.js +237 -0
- package/dist/state-detectors/claude.js.map +1 -0
- package/dist/state-detectors/claude.test.d.ts +2 -0
- package/dist/state-detectors/claude.test.d.ts.map +1 -0
- package/dist/state-detectors/claude.test.js +127 -0
- package/dist/state-detectors/claude.test.js.map +1 -0
- package/dist/state-detectors/codex.d.ts +34 -0
- package/dist/state-detectors/codex.d.ts.map +1 -0
- package/dist/state-detectors/codex.js +233 -0
- package/dist/state-detectors/codex.js.map +1 -0
- package/dist/state-detectors/codex.test.d.ts +2 -0
- package/dist/state-detectors/codex.test.d.ts.map +1 -0
- package/dist/state-detectors/codex.test.js +85 -0
- package/dist/state-detectors/codex.test.js.map +1 -0
- package/dist/state-detectors/factory.d.ts +22 -0
- package/dist/state-detectors/factory.d.ts.map +1 -0
- package/dist/state-detectors/factory.js +37 -0
- package/dist/state-detectors/factory.js.map +1 -0
- package/dist/state-detectors/factory.test.d.ts +2 -0
- package/dist/state-detectors/factory.test.d.ts.map +1 -0
- package/dist/state-detectors/factory.test.js +44 -0
- package/dist/state-detectors/factory.test.js.map +1 -0
- package/dist/state-detectors/gemini.d.ts +34 -0
- package/dist/state-detectors/gemini.d.ts.map +1 -0
- package/dist/state-detectors/gemini.js +236 -0
- package/dist/state-detectors/gemini.js.map +1 -0
- package/dist/state-detectors/gemini.test.d.ts +2 -0
- package/dist/state-detectors/gemini.test.d.ts.map +1 -0
- package/dist/state-detectors/gemini.test.js +93 -0
- package/dist/state-detectors/gemini.test.js.map +1 -0
- package/dist/state-detectors/index.d.ts +20 -0
- package/dist/state-detectors/index.d.ts.map +1 -0
- package/dist/state-detectors/index.js +21 -0
- package/dist/state-detectors/index.js.map +1 -0
- package/dist/state-detectors/types.d.ts +67 -0
- package/dist/state-detectors/types.d.ts.map +1 -0
- package/dist/state-detectors/types.js +28 -0
- package/dist/state-detectors/types.js.map +1 -0
- package/dist/tmux/index.d.ts +2 -0
- package/dist/tmux/index.d.ts.map +1 -0
- package/dist/tmux/index.js +2 -0
- package/dist/tmux/index.js.map +1 -0
- package/dist/tmux/manager.d.ts +45 -0
- package/dist/tmux/manager.d.ts.map +1 -0
- package/dist/tmux/manager.js +252 -0
- package/dist/tmux/manager.js.map +1 -0
- package/dist/utils/claude-code-state.d.ts +46 -0
- package/dist/utils/claude-code-state.d.ts.map +1 -0
- package/dist/utils/claude-code-state.js +252 -0
- package/dist/utils/claude-code-state.js.map +1 -0
- package/dist/utils/cli-builder.d.ts +19 -0
- package/dist/utils/cli-builder.d.ts.map +1 -0
- package/dist/utils/cli-builder.js +58 -0
- package/dist/utils/cli-builder.js.map +1 -0
- package/dist/utils/cli-commands.d.ts +27 -0
- package/dist/utils/cli-commands.d.ts.map +1 -0
- package/dist/utils/cli-commands.js +69 -0
- package/dist/utils/cli-commands.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +77 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +17 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +33 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/timeout.d.ts +25 -0
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/timeout.js +57 -0
- package/dist/utils/timeout.js.map +1 -0
- package/package.json +78 -0
- package/src/agents/base-agent.ts +255 -0
- package/src/agents/index.ts +6 -0
- package/src/agents/intermediate.ts +161 -0
- package/src/agents/junior.ts +166 -0
- package/src/agents/qa.ts +272 -0
- package/src/agents/senior.ts +307 -0
- package/src/agents/tech-lead.ts +324 -0
- package/src/cli/commands/add-repo.ts +89 -0
- package/src/cli/commands/agents.ts +247 -0
- package/src/cli/commands/assign.ts +86 -0
- package/src/cli/commands/config.ts +121 -0
- package/src/cli/commands/escalations.ts +179 -0
- package/src/cli/commands/index.ts +16 -0
- package/src/cli/commands/init.ts +66 -0
- package/src/cli/commands/manager.test.ts +52 -0
- package/src/cli/commands/manager.ts +916 -0
- package/src/cli/commands/msg.ts +232 -0
- package/src/cli/commands/my-stories.ts +198 -0
- package/src/cli/commands/nuke.ts +223 -0
- package/src/cli/commands/pr.ts +559 -0
- package/src/cli/commands/req.ts +231 -0
- package/src/cli/commands/resume.ts +129 -0
- package/src/cli/commands/status.ts +284 -0
- package/src/cli/commands/stories.ts +131 -0
- package/src/cli/commands/teams.ts +158 -0
- package/src/cli/dashboard/index.ts +141 -0
- package/src/cli/dashboard/panels/activity.ts +77 -0
- package/src/cli/dashboard/panels/agents.ts +244 -0
- package/src/cli/dashboard/panels/escalations.ts +109 -0
- package/src/cli/dashboard/panels/merge-queue.ts +65 -0
- package/src/cli/dashboard/panels/pipeline.ts +65 -0
- package/src/cli/dashboard/panels/stories.ts +87 -0
- package/src/cli-runtimes/claude.ts +31 -0
- package/src/cli-runtimes/codex.ts +31 -0
- package/src/cli-runtimes/gemini.ts +33 -0
- package/src/cli-runtimes/index.test.ts +261 -0
- package/src/cli-runtimes/index.ts +52 -0
- package/src/cli-runtimes/types.ts +30 -0
- package/src/config/index.ts +2 -0
- package/src/config/loader.ts +89 -0
- package/src/config/schema.test.ts +135 -0
- package/src/config/schema.ts +238 -0
- package/src/context-files/generator.ts +132 -0
- package/src/context-files/index.test.ts +323 -0
- package/src/context-files/index.ts +102 -0
- package/src/context-files/templates.ts +279 -0
- package/src/db/client.ts +475 -0
- package/src/db/lock.test.ts +93 -0
- package/src/db/lock.ts +74 -0
- package/src/db/migrations/001-initial.sql +121 -0
- package/src/db/migrations/005-add-agent-heartbeat.sql +4 -0
- package/src/db/queries/agents.ts +113 -0
- package/src/db/queries/escalations.ts +140 -0
- package/src/db/queries/heartbeat.ts +92 -0
- package/src/db/queries/index.ts +7 -0
- package/src/db/queries/logs.ts +136 -0
- package/src/db/queries/messages.ts +38 -0
- package/src/db/queries/pull-requests.ts +170 -0
- package/src/db/queries/requirements.ts +81 -0
- package/src/db/queries/stories.ts +223 -0
- package/src/db/queries/teams.ts +39 -0
- package/src/git/branches.ts +186 -0
- package/src/git/github.ts +247 -0
- package/src/git/index.ts +3 -0
- package/src/git/submodules.ts +141 -0
- package/src/index.ts +93 -0
- package/src/llm/anthropic.ts +134 -0
- package/src/llm/index.ts +26 -0
- package/src/llm/openai.ts +125 -0
- package/src/llm/provider.ts +60 -0
- package/src/orchestrator/index.ts +3 -0
- package/src/orchestrator/scaler.ts +201 -0
- package/src/orchestrator/scheduler.test.ts +288 -0
- package/src/orchestrator/scheduler.ts +1130 -0
- package/src/orchestrator/workflow.ts +137 -0
- package/src/state-detectors/claude.test.ts +149 -0
- package/src/state-detectors/claude.ts +256 -0
- package/src/state-detectors/codex.test.ts +100 -0
- package/src/state-detectors/codex.ts +252 -0
- package/src/state-detectors/factory.test.ts +51 -0
- package/src/state-detectors/factory.ts +40 -0
- package/src/state-detectors/gemini.test.ts +110 -0
- package/src/state-detectors/gemini.ts +255 -0
- package/src/state-detectors/index.ts +25 -0
- package/src/state-detectors/types.ts +80 -0
- package/src/tmux/index.ts +1 -0
- package/src/tmux/manager.ts +310 -0
- package/src/types/sql.js.d.ts +34 -0
- package/src/utils/claude-code-state.ts +281 -0
- package/src/utils/cli-builder.ts +78 -0
- package/src/utils/cli-commands.ts +84 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/logger.ts +93 -0
- package/src/utils/paths.ts +49 -0
- package/src/utils/timeout.ts +84 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class CodexRuntimeBuilder {
|
|
2
|
+
buildSpawnCommand(model) {
|
|
3
|
+
return [
|
|
4
|
+
'codex',
|
|
5
|
+
'--full-auto',
|
|
6
|
+
'--model',
|
|
7
|
+
model,
|
|
8
|
+
];
|
|
9
|
+
}
|
|
10
|
+
buildResumeCommand(model, sessionId) {
|
|
11
|
+
return [
|
|
12
|
+
'codex',
|
|
13
|
+
'--full-auto',
|
|
14
|
+
'--model',
|
|
15
|
+
model,
|
|
16
|
+
'--resume',
|
|
17
|
+
sessionId,
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
getAutoApprovalFlag() {
|
|
21
|
+
return '--full-auto';
|
|
22
|
+
}
|
|
23
|
+
getModelFlag() {
|
|
24
|
+
return '--model';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/cli-runtimes/codex.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IAC9B,iBAAiB,CAAC,KAAa;QAC7B,OAAO;YACL,OAAO;YACP,aAAa;YACb,SAAS;YACT,KAAK;SACN,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAiB;QACjD,OAAO;YACL,OAAO;YACP,aAAa;YACb,SAAS;YACT,KAAK;YACL,UAAU;YACV,SAAS;SACV,CAAC;IACJ,CAAC;IAED,mBAAmB;QACjB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CliRuntimeBuilder } from './types.js';
|
|
2
|
+
export declare class GeminiRuntimeBuilder implements CliRuntimeBuilder {
|
|
3
|
+
buildSpawnCommand(model: string): string[];
|
|
4
|
+
buildResumeCommand(model: string, sessionId: string): string[];
|
|
5
|
+
getAutoApprovalFlag(): string;
|
|
6
|
+
getModelFlag(): string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/cli-runtimes/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,oBAAqB,YAAW,iBAAiB;IAC5D,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAU1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAY9D,mBAAmB,IAAI,MAAM;IAI7B,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export class GeminiRuntimeBuilder {
|
|
2
|
+
buildSpawnCommand(model) {
|
|
3
|
+
return [
|
|
4
|
+
'gemini',
|
|
5
|
+
'--model',
|
|
6
|
+
model,
|
|
7
|
+
'--sandbox',
|
|
8
|
+
'none',
|
|
9
|
+
];
|
|
10
|
+
}
|
|
11
|
+
buildResumeCommand(model, sessionId) {
|
|
12
|
+
return [
|
|
13
|
+
'gemini',
|
|
14
|
+
'--model',
|
|
15
|
+
model,
|
|
16
|
+
'--sandbox',
|
|
17
|
+
'none',
|
|
18
|
+
'--resume',
|
|
19
|
+
sessionId,
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
getAutoApprovalFlag() {
|
|
23
|
+
return '--sandbox';
|
|
24
|
+
}
|
|
25
|
+
getModelFlag() {
|
|
26
|
+
return '--model';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/cli-runtimes/gemini.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IAC/B,iBAAiB,CAAC,KAAa;QAC7B,OAAO;YACL,QAAQ;YACR,SAAS;YACT,KAAK;YACL,WAAW;YACX,MAAM;SACP,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAiB;QACjD,OAAO;YACL,QAAQ;YACR,SAAS;YACT,KAAK;YACL,WAAW;YACX,MAAM;YACN,UAAU;YACV,SAAS;SACV,CAAC;IACJ,CAAC;IAED,mBAAmB;QACjB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,YAAY;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CliRuntimeType, CliRuntimeBuilder } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Factory function to get the appropriate CLI runtime builder
|
|
4
|
+
* @param runtimeType - The type of CLI runtime to use
|
|
5
|
+
* @returns The corresponding runtime builder instance
|
|
6
|
+
* @throws Error if the runtime type is unknown
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCliRuntimeBuilder(runtimeType: CliRuntimeType): CliRuntimeBuilder;
|
|
9
|
+
/**
|
|
10
|
+
* Validate that a CLI binary is available in the system PATH
|
|
11
|
+
* @param binary - The name of the binary to check
|
|
12
|
+
* @returns Promise that resolves to true if binary exists, false otherwise
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateCliBinary(binary: string): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Validate that the CLI runtime binary is available
|
|
17
|
+
* @param runtimeType - The type of CLI runtime to validate
|
|
18
|
+
* @returns Promise that resolves to true if binary exists, false otherwise
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateCliRuntime(runtimeType: CliRuntimeType): Promise<boolean>;
|
|
21
|
+
export type { CliRuntimeType, CliRuntimeBuilder };
|
|
22
|
+
export { ClaudeRuntimeBuilder } from './claude.js';
|
|
23
|
+
export { CodexRuntimeBuilder } from './codex.js';
|
|
24
|
+
export { GeminiRuntimeBuilder } from './gemini.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli-runtimes/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB,CAWnF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAEtF;AAED,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { ClaudeRuntimeBuilder } from './claude.js';
|
|
3
|
+
import { CodexRuntimeBuilder } from './codex.js';
|
|
4
|
+
import { GeminiRuntimeBuilder } from './gemini.js';
|
|
5
|
+
/**
|
|
6
|
+
* Factory function to get the appropriate CLI runtime builder
|
|
7
|
+
* @param runtimeType - The type of CLI runtime to use
|
|
8
|
+
* @returns The corresponding runtime builder instance
|
|
9
|
+
* @throws Error if the runtime type is unknown
|
|
10
|
+
*/
|
|
11
|
+
export function getCliRuntimeBuilder(runtimeType) {
|
|
12
|
+
switch (runtimeType) {
|
|
13
|
+
case 'claude':
|
|
14
|
+
return new ClaudeRuntimeBuilder();
|
|
15
|
+
case 'codex':
|
|
16
|
+
return new CodexRuntimeBuilder();
|
|
17
|
+
case 'gemini':
|
|
18
|
+
return new GeminiRuntimeBuilder();
|
|
19
|
+
default:
|
|
20
|
+
throw new Error(`Unknown CLI runtime type: ${runtimeType}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validate that a CLI binary is available in the system PATH
|
|
25
|
+
* @param binary - The name of the binary to check
|
|
26
|
+
* @returns Promise that resolves to true if binary exists, false otherwise
|
|
27
|
+
*/
|
|
28
|
+
export async function validateCliBinary(binary) {
|
|
29
|
+
try {
|
|
30
|
+
await execa('which', [binary]);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate that the CLI runtime binary is available
|
|
39
|
+
* @param runtimeType - The type of CLI runtime to validate
|
|
40
|
+
* @returns Promise that resolves to true if binary exists, false otherwise
|
|
41
|
+
*/
|
|
42
|
+
export async function validateCliRuntime(runtimeType) {
|
|
43
|
+
return validateCliBinary(runtimeType);
|
|
44
|
+
}
|
|
45
|
+
export { ClaudeRuntimeBuilder } from './claude.js';
|
|
46
|
+
export { CodexRuntimeBuilder } from './codex.js';
|
|
47
|
+
export { GeminiRuntimeBuilder } from './gemini.js';
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli-runtimes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAA2B;IAC9D,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,IAAI,mBAAmB,EAAE,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IACpD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAA2B;IAClE,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/cli-runtimes/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { getCliRuntimeBuilder, validateCliBinary, validateCliRuntime, ClaudeRuntimeBuilder, CodexRuntimeBuilder, GeminiRuntimeBuilder, } from './index.js';
|
|
3
|
+
vi.mock('execa');
|
|
4
|
+
describe('CLI Runtime Builders', () => {
|
|
5
|
+
describe('ClaudeRuntimeBuilder', () => {
|
|
6
|
+
it('should build spawn command with correct flags', () => {
|
|
7
|
+
const builder = new ClaudeRuntimeBuilder();
|
|
8
|
+
const command = builder.buildSpawnCommand('claude-sonnet-4-20250514');
|
|
9
|
+
expect(command).toEqual([
|
|
10
|
+
'claude',
|
|
11
|
+
'--dangerously-skip-permissions',
|
|
12
|
+
'--model',
|
|
13
|
+
'claude-sonnet-4-20250514',
|
|
14
|
+
]);
|
|
15
|
+
});
|
|
16
|
+
it('should build resume command with session ID', () => {
|
|
17
|
+
const builder = new ClaudeRuntimeBuilder();
|
|
18
|
+
const command = builder.buildResumeCommand('claude-sonnet-4-20250514', 'session-123');
|
|
19
|
+
expect(command).toEqual([
|
|
20
|
+
'claude',
|
|
21
|
+
'--dangerously-skip-permissions',
|
|
22
|
+
'--model',
|
|
23
|
+
'claude-sonnet-4-20250514',
|
|
24
|
+
'--resume',
|
|
25
|
+
'session-123',
|
|
26
|
+
]);
|
|
27
|
+
});
|
|
28
|
+
it('should return correct auto-approval flag', () => {
|
|
29
|
+
const builder = new ClaudeRuntimeBuilder();
|
|
30
|
+
expect(builder.getAutoApprovalFlag()).toBe('--dangerously-skip-permissions');
|
|
31
|
+
});
|
|
32
|
+
it('should return correct model flag', () => {
|
|
33
|
+
const builder = new ClaudeRuntimeBuilder();
|
|
34
|
+
expect(builder.getModelFlag()).toBe('--model');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('CodexRuntimeBuilder', () => {
|
|
38
|
+
it('should build spawn command with correct flags', () => {
|
|
39
|
+
const builder = new CodexRuntimeBuilder();
|
|
40
|
+
const command = builder.buildSpawnCommand('gpt-4o-mini');
|
|
41
|
+
expect(command).toEqual([
|
|
42
|
+
'codex',
|
|
43
|
+
'--full-auto',
|
|
44
|
+
'--model',
|
|
45
|
+
'gpt-4o-mini',
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
it('should build resume command with session ID', () => {
|
|
49
|
+
const builder = new CodexRuntimeBuilder();
|
|
50
|
+
const command = builder.buildResumeCommand('gpt-4o-mini', 'session-456');
|
|
51
|
+
expect(command).toEqual([
|
|
52
|
+
'codex',
|
|
53
|
+
'--full-auto',
|
|
54
|
+
'--model',
|
|
55
|
+
'gpt-4o-mini',
|
|
56
|
+
'--resume',
|
|
57
|
+
'session-456',
|
|
58
|
+
]);
|
|
59
|
+
});
|
|
60
|
+
it('should return correct auto-approval flag', () => {
|
|
61
|
+
const builder = new CodexRuntimeBuilder();
|
|
62
|
+
expect(builder.getAutoApprovalFlag()).toBe('--full-auto');
|
|
63
|
+
});
|
|
64
|
+
it('should return correct model flag', () => {
|
|
65
|
+
const builder = new CodexRuntimeBuilder();
|
|
66
|
+
expect(builder.getModelFlag()).toBe('--model');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('GeminiRuntimeBuilder', () => {
|
|
70
|
+
it('should build spawn command with correct flags', () => {
|
|
71
|
+
const builder = new GeminiRuntimeBuilder();
|
|
72
|
+
const command = builder.buildSpawnCommand('gemini-2.0-flash-exp');
|
|
73
|
+
expect(command).toEqual([
|
|
74
|
+
'gemini',
|
|
75
|
+
'--model',
|
|
76
|
+
'gemini-2.0-flash-exp',
|
|
77
|
+
'--sandbox',
|
|
78
|
+
'none',
|
|
79
|
+
]);
|
|
80
|
+
});
|
|
81
|
+
it('should build resume command with session ID', () => {
|
|
82
|
+
const builder = new GeminiRuntimeBuilder();
|
|
83
|
+
const command = builder.buildResumeCommand('gemini-2.0-flash-exp', 'session-789');
|
|
84
|
+
expect(command).toEqual([
|
|
85
|
+
'gemini',
|
|
86
|
+
'--model',
|
|
87
|
+
'gemini-2.0-flash-exp',
|
|
88
|
+
'--sandbox',
|
|
89
|
+
'none',
|
|
90
|
+
'--resume',
|
|
91
|
+
'session-789',
|
|
92
|
+
]);
|
|
93
|
+
});
|
|
94
|
+
it('should return correct auto-approval flag', () => {
|
|
95
|
+
const builder = new GeminiRuntimeBuilder();
|
|
96
|
+
expect(builder.getAutoApprovalFlag()).toBe('--sandbox');
|
|
97
|
+
});
|
|
98
|
+
it('should return correct model flag', () => {
|
|
99
|
+
const builder = new GeminiRuntimeBuilder();
|
|
100
|
+
expect(builder.getModelFlag()).toBe('--model');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('getCliRuntimeBuilder', () => {
|
|
104
|
+
it('should return ClaudeRuntimeBuilder for claude type', () => {
|
|
105
|
+
const builder = getCliRuntimeBuilder('claude');
|
|
106
|
+
expect(builder).toBeInstanceOf(ClaudeRuntimeBuilder);
|
|
107
|
+
});
|
|
108
|
+
it('should return CodexRuntimeBuilder for codex type', () => {
|
|
109
|
+
const builder = getCliRuntimeBuilder('codex');
|
|
110
|
+
expect(builder).toBeInstanceOf(CodexRuntimeBuilder);
|
|
111
|
+
});
|
|
112
|
+
it('should return GeminiRuntimeBuilder for gemini type', () => {
|
|
113
|
+
const builder = getCliRuntimeBuilder('gemini');
|
|
114
|
+
expect(builder).toBeInstanceOf(GeminiRuntimeBuilder);
|
|
115
|
+
});
|
|
116
|
+
it('should throw error for unknown runtime type', () => {
|
|
117
|
+
expect(() => {
|
|
118
|
+
// @ts-expect-error Testing invalid input
|
|
119
|
+
getCliRuntimeBuilder('unknown');
|
|
120
|
+
}).toThrow('Unknown CLI runtime type: unknown');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('validateCliBinary', () => {
|
|
124
|
+
beforeEach(() => {
|
|
125
|
+
vi.clearAllMocks();
|
|
126
|
+
});
|
|
127
|
+
afterEach(() => {
|
|
128
|
+
vi.restoreAllMocks();
|
|
129
|
+
});
|
|
130
|
+
it('should return true when binary exists', async () => {
|
|
131
|
+
const { execa } = await import('execa');
|
|
132
|
+
vi.mocked(execa).mockResolvedValue({
|
|
133
|
+
stdout: '/usr/local/bin/claude',
|
|
134
|
+
stderr: '',
|
|
135
|
+
exitCode: 0,
|
|
136
|
+
command: 'which claude',
|
|
137
|
+
escapedCommand: 'which claude',
|
|
138
|
+
failed: false,
|
|
139
|
+
timedOut: false,
|
|
140
|
+
isCanceled: false,
|
|
141
|
+
killed: false,
|
|
142
|
+
});
|
|
143
|
+
const result = await validateCliBinary('claude');
|
|
144
|
+
expect(result).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
it('should return false when binary does not exist', async () => {
|
|
147
|
+
const { execa } = await import('execa');
|
|
148
|
+
vi.mocked(execa).mockRejectedValue(new Error('Command failed'));
|
|
149
|
+
const result = await validateCliBinary('nonexistent');
|
|
150
|
+
expect(result).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('validateCliRuntime', () => {
|
|
154
|
+
beforeEach(() => {
|
|
155
|
+
vi.clearAllMocks();
|
|
156
|
+
});
|
|
157
|
+
afterEach(() => {
|
|
158
|
+
vi.restoreAllMocks();
|
|
159
|
+
});
|
|
160
|
+
it('should validate claude runtime', async () => {
|
|
161
|
+
const { execa } = await import('execa');
|
|
162
|
+
vi.mocked(execa).mockResolvedValue({
|
|
163
|
+
stdout: '/usr/local/bin/claude',
|
|
164
|
+
stderr: '',
|
|
165
|
+
exitCode: 0,
|
|
166
|
+
command: 'which claude',
|
|
167
|
+
escapedCommand: 'which claude',
|
|
168
|
+
failed: false,
|
|
169
|
+
timedOut: false,
|
|
170
|
+
isCanceled: false,
|
|
171
|
+
killed: false,
|
|
172
|
+
});
|
|
173
|
+
const result = await validateCliRuntime('claude');
|
|
174
|
+
expect(result).toBe(true);
|
|
175
|
+
});
|
|
176
|
+
it('should validate codex runtime', async () => {
|
|
177
|
+
const { execa } = await import('execa');
|
|
178
|
+
vi.mocked(execa).mockResolvedValue({
|
|
179
|
+
stdout: '/usr/local/bin/codex',
|
|
180
|
+
stderr: '',
|
|
181
|
+
exitCode: 0,
|
|
182
|
+
command: 'which codex',
|
|
183
|
+
escapedCommand: 'which codex',
|
|
184
|
+
failed: false,
|
|
185
|
+
timedOut: false,
|
|
186
|
+
isCanceled: false,
|
|
187
|
+
killed: false,
|
|
188
|
+
});
|
|
189
|
+
const result = await validateCliRuntime('codex');
|
|
190
|
+
expect(result).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
it('should validate gemini runtime', async () => {
|
|
193
|
+
const { execa } = await import('execa');
|
|
194
|
+
vi.mocked(execa).mockResolvedValue({
|
|
195
|
+
stdout: '/usr/local/bin/gemini',
|
|
196
|
+
stderr: '',
|
|
197
|
+
exitCode: 0,
|
|
198
|
+
command: 'which gemini',
|
|
199
|
+
escapedCommand: 'which gemini',
|
|
200
|
+
failed: false,
|
|
201
|
+
timedOut: false,
|
|
202
|
+
isCanceled: false,
|
|
203
|
+
killed: false,
|
|
204
|
+
});
|
|
205
|
+
const result = await validateCliRuntime('gemini');
|
|
206
|
+
expect(result).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
it('should return false for missing runtime binary', async () => {
|
|
209
|
+
const { execa } = await import('execa');
|
|
210
|
+
vi.mocked(execa).mockRejectedValue(new Error('Command failed'));
|
|
211
|
+
const result = await validateCliRuntime('claude');
|
|
212
|
+
expect(result).toBe(false);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/cli-runtimes/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type CliRuntimeType = 'claude' | 'codex' | 'gemini';
|
|
2
|
+
export interface CliRuntimeBuilder {
|
|
3
|
+
/**
|
|
4
|
+
* Build command array for spawning a new agent session
|
|
5
|
+
* @param model - The model identifier to use
|
|
6
|
+
* @returns Array of command and arguments suitable for spawn
|
|
7
|
+
*/
|
|
8
|
+
buildSpawnCommand(model: string): string[];
|
|
9
|
+
/**
|
|
10
|
+
* Build command array for resuming an existing agent session
|
|
11
|
+
* @param model - The model identifier to use
|
|
12
|
+
* @param sessionId - The session ID to resume
|
|
13
|
+
* @returns Array of command and arguments suitable for spawn
|
|
14
|
+
*/
|
|
15
|
+
buildResumeCommand(model: string, sessionId: string): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Get the auto-approval flag for this CLI runtime
|
|
18
|
+
* @returns The flag string that enables auto-approval mode
|
|
19
|
+
*/
|
|
20
|
+
getAutoApprovalFlag(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get the model flag for this CLI runtime
|
|
23
|
+
* @returns The flag string used to specify the model
|
|
24
|
+
*/
|
|
25
|
+
getModelFlag(): string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli-runtimes/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3C;;;;;OAKG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE/D;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC;IAE9B;;;OAGG;IACH,YAAY,IAAI,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli-runtimes/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type HiveConfig } from './schema.js';
|
|
2
|
+
export declare class ConfigError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function loadConfig(hiveDir: string): HiveConfig;
|
|
6
|
+
export declare function saveConfig(hiveDir: string, config: HiveConfig): void;
|
|
7
|
+
export declare function createDefaultConfig(hiveDir: string): HiveConfig;
|
|
8
|
+
export declare function configExists(hiveDir: string): boolean;
|
|
9
|
+
export declare function getConfigValue(config: HiveConfig, path: string): unknown;
|
|
10
|
+
export declare function setConfigValue(config: HiveConfig, path: string, value: unknown): HiveConfig;
|
|
11
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,UAAU,EAA6B,MAAM,aAAa,CAAC;AAE3F,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAkBtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAIpE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAK/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYxE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,CAwB3F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { parse, stringify } from 'yaml';
|
|
4
|
+
import { HiveConfigSchema, generateDefaultConfigYaml } from './schema.js';
|
|
5
|
+
export class ConfigError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'ConfigError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function loadConfig(hiveDir) {
|
|
12
|
+
const configPath = join(hiveDir, 'hive.config.yaml');
|
|
13
|
+
if (!existsSync(configPath)) {
|
|
14
|
+
throw new ConfigError(`Config file not found: ${configPath}`);
|
|
15
|
+
}
|
|
16
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
17
|
+
const rawConfig = parse(content);
|
|
18
|
+
const result = HiveConfigSchema.safeParse(rawConfig);
|
|
19
|
+
if (!result.success) {
|
|
20
|
+
const errors = result.error.errors.map(e => ` - ${e.path.join('.')}: ${e.message}`).join('\n');
|
|
21
|
+
throw new ConfigError(`Invalid configuration:\n${errors}`);
|
|
22
|
+
}
|
|
23
|
+
return result.data;
|
|
24
|
+
}
|
|
25
|
+
export function saveConfig(hiveDir, config) {
|
|
26
|
+
const configPath = join(hiveDir, 'hive.config.yaml');
|
|
27
|
+
const content = stringify(config, { indent: 2 });
|
|
28
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
29
|
+
}
|
|
30
|
+
export function createDefaultConfig(hiveDir) {
|
|
31
|
+
const configPath = join(hiveDir, 'hive.config.yaml');
|
|
32
|
+
const content = generateDefaultConfigYaml();
|
|
33
|
+
writeFileSync(configPath, content, 'utf-8');
|
|
34
|
+
return loadConfig(hiveDir);
|
|
35
|
+
}
|
|
36
|
+
export function configExists(hiveDir) {
|
|
37
|
+
const configPath = join(hiveDir, 'hive.config.yaml');
|
|
38
|
+
return existsSync(configPath);
|
|
39
|
+
}
|
|
40
|
+
export function getConfigValue(config, path) {
|
|
41
|
+
const parts = path.split('.');
|
|
42
|
+
let current = config;
|
|
43
|
+
for (const part of parts) {
|
|
44
|
+
if (current === null || current === undefined || typeof current !== 'object') {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
current = current[part];
|
|
48
|
+
}
|
|
49
|
+
return current;
|
|
50
|
+
}
|
|
51
|
+
export function setConfigValue(config, path, value) {
|
|
52
|
+
const parts = path.split('.');
|
|
53
|
+
const newConfig = JSON.parse(JSON.stringify(config));
|
|
54
|
+
let current = newConfig;
|
|
55
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
56
|
+
const part = parts[i];
|
|
57
|
+
if (current[part] === undefined || typeof current[part] !== 'object') {
|
|
58
|
+
current[part] = {};
|
|
59
|
+
}
|
|
60
|
+
current = current[part];
|
|
61
|
+
}
|
|
62
|
+
const lastPart = parts[parts.length - 1];
|
|
63
|
+
current[lastPart] = value;
|
|
64
|
+
// Validate the new config
|
|
65
|
+
const result = HiveConfigSchema.safeParse(newConfig);
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
const errors = result.error.errors.map(e => ` - ${e.path.join('.')}: ${e.message}`).join('\n');
|
|
68
|
+
throw new ConfigError(`Invalid configuration after update:\n${errors}`);
|
|
69
|
+
}
|
|
70
|
+
return result.data;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|