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,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code State Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects the UI state of Claude Code CLI based on output patterns
|
|
5
|
+
* Refactored from src/utils/claude-code-state.ts
|
|
6
|
+
*/
|
|
7
|
+
import { AgentState } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Priority-based state indicators for Claude Code
|
|
10
|
+
* Higher priority patterns are checked first to handle overlapping indicators
|
|
11
|
+
*/
|
|
12
|
+
const CLAUDE_STATE_INDICATORS = [
|
|
13
|
+
// High priority: Active work states
|
|
14
|
+
{
|
|
15
|
+
state: AgentState.THINKING,
|
|
16
|
+
patterns: [
|
|
17
|
+
/\(thinking\)/i,
|
|
18
|
+
/Concocting|Twisting|Considering|Analyzing/i,
|
|
19
|
+
],
|
|
20
|
+
priority: 100,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
state: AgentState.TOOL_RUNNING,
|
|
24
|
+
patterns: [
|
|
25
|
+
/esc to interrupt/i,
|
|
26
|
+
/Running|Executing/i,
|
|
27
|
+
/\[.*\]\s+\d+%/i, // Progress bars
|
|
28
|
+
],
|
|
29
|
+
priority: 100,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
state: AgentState.PROCESSING,
|
|
33
|
+
patterns: [
|
|
34
|
+
/Processing|Analyzing|Generating/i,
|
|
35
|
+
/Please wait/i,
|
|
36
|
+
],
|
|
37
|
+
priority: 90,
|
|
38
|
+
},
|
|
39
|
+
// High priority: Blocked states requiring human intervention
|
|
40
|
+
{
|
|
41
|
+
state: AgentState.AWAITING_SELECTION,
|
|
42
|
+
patterns: [
|
|
43
|
+
/Enter to select.*↑\/↓/i,
|
|
44
|
+
/Use arrows to navigate/i,
|
|
45
|
+
/Select an option/i,
|
|
46
|
+
],
|
|
47
|
+
priority: 90,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
state: AgentState.ASKING_QUESTION,
|
|
51
|
+
patterns: [
|
|
52
|
+
/\?\s*$/m, // Line ending with question mark
|
|
53
|
+
/Please (choose|select|confirm)/i,
|
|
54
|
+
/Would you like to/i,
|
|
55
|
+
/Do you want to/i,
|
|
56
|
+
],
|
|
57
|
+
priority: 85,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
state: AgentState.PLAN_APPROVAL,
|
|
61
|
+
patterns: [
|
|
62
|
+
/approve.*plan/i,
|
|
63
|
+
/review.*plan/i,
|
|
64
|
+
/proceed.*plan/i,
|
|
65
|
+
/ExitPlanMode/i,
|
|
66
|
+
],
|
|
67
|
+
priority: 90,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
state: AgentState.PERMISSION_REQUIRED,
|
|
71
|
+
patterns: [
|
|
72
|
+
/permission.*required/i,
|
|
73
|
+
/authorize/i,
|
|
74
|
+
/Allow.*\[y\/n\]/i,
|
|
75
|
+
/Approve.*\[y\/n\]/i,
|
|
76
|
+
],
|
|
77
|
+
priority: 90,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
state: AgentState.USER_DECLINED,
|
|
81
|
+
patterns: [
|
|
82
|
+
/declined/i,
|
|
83
|
+
/permission denied/i,
|
|
84
|
+
/User chose not to/i,
|
|
85
|
+
],
|
|
86
|
+
priority: 85,
|
|
87
|
+
},
|
|
88
|
+
// Lower priority: Ready/idle states
|
|
89
|
+
{
|
|
90
|
+
state: AgentState.WORK_COMPLETE,
|
|
91
|
+
patterns: [
|
|
92
|
+
/done|complete|finished/i,
|
|
93
|
+
/successfully/i,
|
|
94
|
+
/All.*tests passed/i,
|
|
95
|
+
],
|
|
96
|
+
priority: 50,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
state: AgentState.IDLE_AT_PROMPT,
|
|
100
|
+
patterns: [
|
|
101
|
+
/^>\s*$/m, // Prompt alone on line
|
|
102
|
+
/Ready for input/i,
|
|
103
|
+
/What would you like/i,
|
|
104
|
+
],
|
|
105
|
+
priority: 40,
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
/**
|
|
109
|
+
* Claude Code State Detector Implementation
|
|
110
|
+
*/
|
|
111
|
+
export class ClaudeStateDetector {
|
|
112
|
+
/**
|
|
113
|
+
* Detect the current Claude Code UI state from output text
|
|
114
|
+
*/
|
|
115
|
+
detectState(output) {
|
|
116
|
+
// Sort indicators by priority (highest first)
|
|
117
|
+
const sortedIndicators = [...CLAUDE_STATE_INDICATORS].sort((a, b) => b.priority - a.priority);
|
|
118
|
+
// Check each indicator in priority order
|
|
119
|
+
for (const indicator of sortedIndicators) {
|
|
120
|
+
for (const pattern of indicator.patterns) {
|
|
121
|
+
if (pattern.test(output)) {
|
|
122
|
+
const result = this.mapStateToWaitingStatus(indicator.state);
|
|
123
|
+
return {
|
|
124
|
+
...result,
|
|
125
|
+
confidence: 0.9,
|
|
126
|
+
reason: `Detected pattern for ${indicator.state}`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// No clear state detected
|
|
132
|
+
return {
|
|
133
|
+
state: AgentState.UNKNOWN,
|
|
134
|
+
confidence: 0.3,
|
|
135
|
+
reason: 'No clear state indicators found',
|
|
136
|
+
isWaiting: false,
|
|
137
|
+
needsHuman: false,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get a human-readable description of a state
|
|
142
|
+
*/
|
|
143
|
+
getStateDescription(state) {
|
|
144
|
+
switch (state) {
|
|
145
|
+
case AgentState.THINKING:
|
|
146
|
+
return 'Claude is thinking';
|
|
147
|
+
case AgentState.TOOL_RUNNING:
|
|
148
|
+
return 'A tool is running';
|
|
149
|
+
case AgentState.PROCESSING:
|
|
150
|
+
return 'Processing request';
|
|
151
|
+
case AgentState.IDLE_AT_PROMPT:
|
|
152
|
+
return 'Idle at prompt';
|
|
153
|
+
case AgentState.WORK_COMPLETE:
|
|
154
|
+
return 'Work completed';
|
|
155
|
+
case AgentState.ASKING_QUESTION:
|
|
156
|
+
return 'Asking a question - needs response';
|
|
157
|
+
case AgentState.AWAITING_SELECTION:
|
|
158
|
+
return 'Awaiting user selection';
|
|
159
|
+
case AgentState.PLAN_APPROVAL:
|
|
160
|
+
return 'Waiting for plan approval';
|
|
161
|
+
case AgentState.PERMISSION_REQUIRED:
|
|
162
|
+
return 'Permission required';
|
|
163
|
+
case AgentState.USER_DECLINED:
|
|
164
|
+
return 'User declined - blocked';
|
|
165
|
+
case AgentState.UNKNOWN:
|
|
166
|
+
return 'Unknown state';
|
|
167
|
+
default:
|
|
168
|
+
return 'Unknown';
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check if a state represents active work (not waiting)
|
|
173
|
+
*/
|
|
174
|
+
isActiveState(state) {
|
|
175
|
+
return [
|
|
176
|
+
AgentState.THINKING,
|
|
177
|
+
AgentState.TOOL_RUNNING,
|
|
178
|
+
AgentState.PROCESSING,
|
|
179
|
+
].includes(state);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a state requires human intervention
|
|
183
|
+
*/
|
|
184
|
+
isBlockedState(state) {
|
|
185
|
+
return [
|
|
186
|
+
AgentState.ASKING_QUESTION,
|
|
187
|
+
AgentState.AWAITING_SELECTION,
|
|
188
|
+
AgentState.PLAN_APPROVAL,
|
|
189
|
+
AgentState.PERMISSION_REQUIRED,
|
|
190
|
+
AgentState.USER_DECLINED,
|
|
191
|
+
].includes(state);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Map a state to waiting status flags
|
|
195
|
+
*/
|
|
196
|
+
mapStateToWaitingStatus(state) {
|
|
197
|
+
switch (state) {
|
|
198
|
+
// Active states - not waiting
|
|
199
|
+
case AgentState.THINKING:
|
|
200
|
+
case AgentState.TOOL_RUNNING:
|
|
201
|
+
case AgentState.PROCESSING:
|
|
202
|
+
return {
|
|
203
|
+
state,
|
|
204
|
+
isWaiting: false,
|
|
205
|
+
needsHuman: false,
|
|
206
|
+
};
|
|
207
|
+
// Idle states - waiting but not blocked
|
|
208
|
+
case AgentState.IDLE_AT_PROMPT:
|
|
209
|
+
case AgentState.WORK_COMPLETE:
|
|
210
|
+
return {
|
|
211
|
+
state,
|
|
212
|
+
isWaiting: true,
|
|
213
|
+
needsHuman: false,
|
|
214
|
+
};
|
|
215
|
+
// Blocked states - waiting and needs human
|
|
216
|
+
case AgentState.ASKING_QUESTION:
|
|
217
|
+
case AgentState.AWAITING_SELECTION:
|
|
218
|
+
case AgentState.PLAN_APPROVAL:
|
|
219
|
+
case AgentState.PERMISSION_REQUIRED:
|
|
220
|
+
case AgentState.USER_DECLINED:
|
|
221
|
+
return {
|
|
222
|
+
state,
|
|
223
|
+
isWaiting: true,
|
|
224
|
+
needsHuman: true,
|
|
225
|
+
};
|
|
226
|
+
// Unknown state - assume not waiting
|
|
227
|
+
case AgentState.UNKNOWN:
|
|
228
|
+
default:
|
|
229
|
+
return {
|
|
230
|
+
state,
|
|
231
|
+
isWaiting: false,
|
|
232
|
+
needsHuman: false,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/state-detectors/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.test.d.ts","sourceRoot":"","sources":["../../src/state-detectors/claude.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ClaudeStateDetector } from './claude.js';
|
|
3
|
+
import { AgentState } from './types.js';
|
|
4
|
+
describe('ClaudeStateDetector', () => {
|
|
5
|
+
const detector = new ClaudeStateDetector();
|
|
6
|
+
describe('detectState', () => {
|
|
7
|
+
it('should detect THINKING state', () => {
|
|
8
|
+
const result = detector.detectState('(thinking) about the problem');
|
|
9
|
+
expect(result.state).toBe(AgentState.THINKING);
|
|
10
|
+
expect(result.confidence).toBe(0.9);
|
|
11
|
+
expect(result.isWaiting).toBe(false);
|
|
12
|
+
expect(result.needsHuman).toBe(false);
|
|
13
|
+
});
|
|
14
|
+
it('should detect THINKING state with action words', () => {
|
|
15
|
+
const result = detector.detectState('Analyzing the code structure...');
|
|
16
|
+
expect(result.state).toBe(AgentState.THINKING);
|
|
17
|
+
});
|
|
18
|
+
it('should detect TOOL_RUNNING state', () => {
|
|
19
|
+
const result = detector.detectState('Running tests... (esc to interrupt)');
|
|
20
|
+
expect(result.state).toBe(AgentState.TOOL_RUNNING);
|
|
21
|
+
expect(result.isWaiting).toBe(false);
|
|
22
|
+
expect(result.needsHuman).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it('should detect TOOL_RUNNING with progress bar', () => {
|
|
25
|
+
const result = detector.detectState('[=====> ] 50%');
|
|
26
|
+
expect(result.state).toBe(AgentState.TOOL_RUNNING);
|
|
27
|
+
});
|
|
28
|
+
it('should detect PROCESSING state', () => {
|
|
29
|
+
const result = detector.detectState('Processing your request...');
|
|
30
|
+
expect(result.state).toBe(AgentState.PROCESSING);
|
|
31
|
+
expect(result.isWaiting).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
it('should detect AWAITING_SELECTION state', () => {
|
|
34
|
+
const result = detector.detectState('Enter to select ↑/↓ to navigate');
|
|
35
|
+
expect(result.state).toBe(AgentState.AWAITING_SELECTION);
|
|
36
|
+
expect(result.isWaiting).toBe(true);
|
|
37
|
+
expect(result.needsHuman).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
it('should detect ASKING_QUESTION state', () => {
|
|
40
|
+
const result = detector.detectState('Would you like to continue?');
|
|
41
|
+
expect(result.state).toBe(AgentState.ASKING_QUESTION);
|
|
42
|
+
expect(result.needsHuman).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
it('should detect ASKING_QUESTION with question mark', () => {
|
|
45
|
+
const result = detector.detectState('Should I proceed with this change?');
|
|
46
|
+
expect(result.state).toBe(AgentState.ASKING_QUESTION);
|
|
47
|
+
});
|
|
48
|
+
it('should detect PLAN_APPROVAL state', () => {
|
|
49
|
+
const result = detector.detectState('Please review the plan and approve');
|
|
50
|
+
expect(result.state).toBe(AgentState.PLAN_APPROVAL);
|
|
51
|
+
expect(result.needsHuman).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
it('should detect PERMISSION_REQUIRED state', () => {
|
|
54
|
+
const result = detector.detectState('Permission required: Allow access [y/n]');
|
|
55
|
+
expect(result.state).toBe(AgentState.PERMISSION_REQUIRED);
|
|
56
|
+
expect(result.needsHuman).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it('should detect USER_DECLINED state', () => {
|
|
59
|
+
const result = detector.detectState('User declined the operation');
|
|
60
|
+
expect(result.state).toBe(AgentState.USER_DECLINED);
|
|
61
|
+
expect(result.needsHuman).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it('should detect WORK_COMPLETE state', () => {
|
|
64
|
+
const result = detector.detectState('Task completed successfully');
|
|
65
|
+
expect(result.state).toBe(AgentState.WORK_COMPLETE);
|
|
66
|
+
expect(result.isWaiting).toBe(true);
|
|
67
|
+
expect(result.needsHuman).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
it('should detect IDLE_AT_PROMPT state', () => {
|
|
70
|
+
const result = detector.detectState('>\n');
|
|
71
|
+
expect(result.state).toBe(AgentState.IDLE_AT_PROMPT);
|
|
72
|
+
expect(result.isWaiting).toBe(true);
|
|
73
|
+
expect(result.needsHuman).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
it('should return UNKNOWN for unclear output', () => {
|
|
76
|
+
const result = detector.detectState('Some random text');
|
|
77
|
+
expect(result.state).toBe(AgentState.UNKNOWN);
|
|
78
|
+
expect(result.confidence).toBe(0.3);
|
|
79
|
+
});
|
|
80
|
+
it('should prioritize higher priority patterns', () => {
|
|
81
|
+
// TOOL_RUNNING (priority 100) should win over PROCESSING (priority 90)
|
|
82
|
+
const result = detector.detectState('Executing and Processing');
|
|
83
|
+
expect(result.state).toBe(AgentState.TOOL_RUNNING);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('getStateDescription', () => {
|
|
87
|
+
it('should return description for THINKING', () => {
|
|
88
|
+
const desc = detector.getStateDescription(AgentState.THINKING);
|
|
89
|
+
expect(desc).toBe('Claude is thinking');
|
|
90
|
+
});
|
|
91
|
+
it('should return description for PERMISSION_REQUIRED', () => {
|
|
92
|
+
const desc = detector.getStateDescription(AgentState.PERMISSION_REQUIRED);
|
|
93
|
+
expect(desc).toBe('Permission required');
|
|
94
|
+
});
|
|
95
|
+
it('should return description for UNKNOWN', () => {
|
|
96
|
+
const desc = detector.getStateDescription(AgentState.UNKNOWN);
|
|
97
|
+
expect(desc).toBe('Unknown state');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('isActiveState', () => {
|
|
101
|
+
it('should return true for active states', () => {
|
|
102
|
+
expect(detector.isActiveState(AgentState.THINKING)).toBe(true);
|
|
103
|
+
expect(detector.isActiveState(AgentState.TOOL_RUNNING)).toBe(true);
|
|
104
|
+
expect(detector.isActiveState(AgentState.PROCESSING)).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
it('should return false for non-active states', () => {
|
|
107
|
+
expect(detector.isActiveState(AgentState.IDLE_AT_PROMPT)).toBe(false);
|
|
108
|
+
expect(detector.isActiveState(AgentState.ASKING_QUESTION)).toBe(false);
|
|
109
|
+
expect(detector.isActiveState(AgentState.UNKNOWN)).toBe(false);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('isBlockedState', () => {
|
|
113
|
+
it('should return true for blocked states', () => {
|
|
114
|
+
expect(detector.isBlockedState(AgentState.ASKING_QUESTION)).toBe(true);
|
|
115
|
+
expect(detector.isBlockedState(AgentState.AWAITING_SELECTION)).toBe(true);
|
|
116
|
+
expect(detector.isBlockedState(AgentState.PLAN_APPROVAL)).toBe(true);
|
|
117
|
+
expect(detector.isBlockedState(AgentState.PERMISSION_REQUIRED)).toBe(true);
|
|
118
|
+
expect(detector.isBlockedState(AgentState.USER_DECLINED)).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
it('should return false for non-blocked states', () => {
|
|
121
|
+
expect(detector.isBlockedState(AgentState.THINKING)).toBe(false);
|
|
122
|
+
expect(detector.isBlockedState(AgentState.IDLE_AT_PROMPT)).toBe(false);
|
|
123
|
+
expect(detector.isBlockedState(AgentState.WORK_COMPLETE)).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=claude.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.test.js","sourceRoot":"","sources":["../../src/state-detectors/claude.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex CLI State Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects the UI state of Codex CLI based on output patterns
|
|
5
|
+
* Note: These patterns are based on common CLI patterns and may need adjustment
|
|
6
|
+
* based on actual Codex CLI output behavior
|
|
7
|
+
*/
|
|
8
|
+
import { AgentState, StateDetectionResult, StateDetector } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Codex CLI State Detector Implementation
|
|
11
|
+
*/
|
|
12
|
+
export declare class CodexStateDetector implements StateDetector {
|
|
13
|
+
/**
|
|
14
|
+
* Detect the current Codex CLI state from output text
|
|
15
|
+
*/
|
|
16
|
+
detectState(output: string): StateDetectionResult;
|
|
17
|
+
/**
|
|
18
|
+
* Get a human-readable description of a state
|
|
19
|
+
*/
|
|
20
|
+
getStateDescription(state: AgentState): string;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a state represents active work (not waiting)
|
|
23
|
+
*/
|
|
24
|
+
isActiveState(state: AgentState): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a state requires human intervention
|
|
27
|
+
*/
|
|
28
|
+
isBlockedState(state: AgentState): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Map a state to waiting status flags
|
|
31
|
+
*/
|
|
32
|
+
private mapStateToWaitingStatus;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/state-detectors/codex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0G7E;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;IA4BjD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IA6B9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAQzC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAU1C;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA2ChC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex CLI State Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects the UI state of Codex CLI based on output patterns
|
|
5
|
+
* Note: These patterns are based on common CLI patterns and may need adjustment
|
|
6
|
+
* based on actual Codex CLI output behavior
|
|
7
|
+
*/
|
|
8
|
+
import { AgentState } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Priority-based state indicators for Codex CLI
|
|
11
|
+
* Higher priority patterns are checked first to handle overlapping indicators
|
|
12
|
+
*/
|
|
13
|
+
const CODEX_STATE_INDICATORS = [
|
|
14
|
+
// High priority: Active work states
|
|
15
|
+
{
|
|
16
|
+
state: AgentState.THINKING,
|
|
17
|
+
patterns: [
|
|
18
|
+
/thinking\.\.\./i,
|
|
19
|
+
/analyzing|considering/i,
|
|
20
|
+
/generating response/i,
|
|
21
|
+
],
|
|
22
|
+
priority: 100,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
state: AgentState.TOOL_RUNNING,
|
|
26
|
+
patterns: [
|
|
27
|
+
/executing/i,
|
|
28
|
+
/running command/i,
|
|
29
|
+
/\[\s*=+\s*\]/i, // Progress bars with = signs
|
|
30
|
+
/\d+%\s*complete/i,
|
|
31
|
+
],
|
|
32
|
+
priority: 100,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
state: AgentState.PROCESSING,
|
|
36
|
+
patterns: [
|
|
37
|
+
/processing/i,
|
|
38
|
+
/loading/i,
|
|
39
|
+
/working/i,
|
|
40
|
+
],
|
|
41
|
+
priority: 90,
|
|
42
|
+
},
|
|
43
|
+
// High priority: Blocked states requiring human intervention
|
|
44
|
+
{
|
|
45
|
+
state: AgentState.AWAITING_SELECTION,
|
|
46
|
+
patterns: [
|
|
47
|
+
/select an option/i,
|
|
48
|
+
/choose from the following/i,
|
|
49
|
+
/\[1-9\]/i, // Numbered options
|
|
50
|
+
],
|
|
51
|
+
priority: 90,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
state: AgentState.ASKING_QUESTION,
|
|
55
|
+
patterns: [
|
|
56
|
+
/\?\s*$/m, // Line ending with question mark
|
|
57
|
+
/please confirm/i,
|
|
58
|
+
/do you want/i,
|
|
59
|
+
/would you like/i,
|
|
60
|
+
],
|
|
61
|
+
priority: 85,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
state: AgentState.PERMISSION_REQUIRED,
|
|
65
|
+
patterns: [
|
|
66
|
+
/permission required/i,
|
|
67
|
+
/authorization needed/i,
|
|
68
|
+
/\[y\/n\]/i,
|
|
69
|
+
/approve/i,
|
|
70
|
+
],
|
|
71
|
+
priority: 90,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
state: AgentState.USER_DECLINED,
|
|
75
|
+
patterns: [
|
|
76
|
+
/declined/i,
|
|
77
|
+
/denied/i,
|
|
78
|
+
/cancelled/i,
|
|
79
|
+
/aborted/i,
|
|
80
|
+
],
|
|
81
|
+
priority: 85,
|
|
82
|
+
},
|
|
83
|
+
// Lower priority: Ready/idle states
|
|
84
|
+
{
|
|
85
|
+
state: AgentState.WORK_COMPLETE,
|
|
86
|
+
patterns: [
|
|
87
|
+
/done/i,
|
|
88
|
+
/completed/i,
|
|
89
|
+
/finished/i,
|
|
90
|
+
/success/i,
|
|
91
|
+
],
|
|
92
|
+
priority: 50,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
state: AgentState.IDLE_AT_PROMPT,
|
|
96
|
+
patterns: [
|
|
97
|
+
/^>\s*$/m, // Prompt alone on line
|
|
98
|
+
/^codex>\s*$/m,
|
|
99
|
+
/waiting for input/i,
|
|
100
|
+
],
|
|
101
|
+
priority: 40,
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
/**
|
|
105
|
+
* Codex CLI State Detector Implementation
|
|
106
|
+
*/
|
|
107
|
+
export class CodexStateDetector {
|
|
108
|
+
/**
|
|
109
|
+
* Detect the current Codex CLI state from output text
|
|
110
|
+
*/
|
|
111
|
+
detectState(output) {
|
|
112
|
+
// Sort indicators by priority (highest first)
|
|
113
|
+
const sortedIndicators = [...CODEX_STATE_INDICATORS].sort((a, b) => b.priority - a.priority);
|
|
114
|
+
// Check each indicator in priority order
|
|
115
|
+
for (const indicator of sortedIndicators) {
|
|
116
|
+
for (const pattern of indicator.patterns) {
|
|
117
|
+
if (pattern.test(output)) {
|
|
118
|
+
const result = this.mapStateToWaitingStatus(indicator.state);
|
|
119
|
+
return {
|
|
120
|
+
...result,
|
|
121
|
+
confidence: 0.85, // Slightly lower confidence for Codex patterns
|
|
122
|
+
reason: `Detected Codex pattern for ${indicator.state}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// No clear state detected
|
|
128
|
+
return {
|
|
129
|
+
state: AgentState.UNKNOWN,
|
|
130
|
+
confidence: 0.3,
|
|
131
|
+
reason: 'No clear Codex state indicators found',
|
|
132
|
+
isWaiting: false,
|
|
133
|
+
needsHuman: false,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get a human-readable description of a state
|
|
138
|
+
*/
|
|
139
|
+
getStateDescription(state) {
|
|
140
|
+
switch (state) {
|
|
141
|
+
case AgentState.THINKING:
|
|
142
|
+
return 'Codex is thinking';
|
|
143
|
+
case AgentState.TOOL_RUNNING:
|
|
144
|
+
return 'Running command';
|
|
145
|
+
case AgentState.PROCESSING:
|
|
146
|
+
return 'Processing request';
|
|
147
|
+
case AgentState.IDLE_AT_PROMPT:
|
|
148
|
+
return 'Idle at prompt';
|
|
149
|
+
case AgentState.WORK_COMPLETE:
|
|
150
|
+
return 'Work completed';
|
|
151
|
+
case AgentState.ASKING_QUESTION:
|
|
152
|
+
return 'Asking a question - needs response';
|
|
153
|
+
case AgentState.AWAITING_SELECTION:
|
|
154
|
+
return 'Awaiting user selection';
|
|
155
|
+
case AgentState.PLAN_APPROVAL:
|
|
156
|
+
return 'Waiting for approval';
|
|
157
|
+
case AgentState.PERMISSION_REQUIRED:
|
|
158
|
+
return 'Permission required';
|
|
159
|
+
case AgentState.USER_DECLINED:
|
|
160
|
+
return 'User declined - blocked';
|
|
161
|
+
case AgentState.UNKNOWN:
|
|
162
|
+
return 'Unknown state';
|
|
163
|
+
default:
|
|
164
|
+
return 'Unknown';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if a state represents active work (not waiting)
|
|
169
|
+
*/
|
|
170
|
+
isActiveState(state) {
|
|
171
|
+
return [
|
|
172
|
+
AgentState.THINKING,
|
|
173
|
+
AgentState.TOOL_RUNNING,
|
|
174
|
+
AgentState.PROCESSING,
|
|
175
|
+
].includes(state);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Check if a state requires human intervention
|
|
179
|
+
*/
|
|
180
|
+
isBlockedState(state) {
|
|
181
|
+
return [
|
|
182
|
+
AgentState.ASKING_QUESTION,
|
|
183
|
+
AgentState.AWAITING_SELECTION,
|
|
184
|
+
AgentState.PLAN_APPROVAL,
|
|
185
|
+
AgentState.PERMISSION_REQUIRED,
|
|
186
|
+
AgentState.USER_DECLINED,
|
|
187
|
+
].includes(state);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Map a state to waiting status flags
|
|
191
|
+
*/
|
|
192
|
+
mapStateToWaitingStatus(state) {
|
|
193
|
+
switch (state) {
|
|
194
|
+
// Active states - not waiting
|
|
195
|
+
case AgentState.THINKING:
|
|
196
|
+
case AgentState.TOOL_RUNNING:
|
|
197
|
+
case AgentState.PROCESSING:
|
|
198
|
+
return {
|
|
199
|
+
state,
|
|
200
|
+
isWaiting: false,
|
|
201
|
+
needsHuman: false,
|
|
202
|
+
};
|
|
203
|
+
// Idle states - waiting but not blocked
|
|
204
|
+
case AgentState.IDLE_AT_PROMPT:
|
|
205
|
+
case AgentState.WORK_COMPLETE:
|
|
206
|
+
return {
|
|
207
|
+
state,
|
|
208
|
+
isWaiting: true,
|
|
209
|
+
needsHuman: false,
|
|
210
|
+
};
|
|
211
|
+
// Blocked states - waiting and needs human
|
|
212
|
+
case AgentState.ASKING_QUESTION:
|
|
213
|
+
case AgentState.AWAITING_SELECTION:
|
|
214
|
+
case AgentState.PLAN_APPROVAL:
|
|
215
|
+
case AgentState.PERMISSION_REQUIRED:
|
|
216
|
+
case AgentState.USER_DECLINED:
|
|
217
|
+
return {
|
|
218
|
+
state,
|
|
219
|
+
isWaiting: true,
|
|
220
|
+
needsHuman: true,
|
|
221
|
+
};
|
|
222
|
+
// Unknown state - assume not waiting
|
|
223
|
+
case AgentState.UNKNOWN:
|
|
224
|
+
default:
|
|
225
|
+
return {
|
|
226
|
+
state,
|
|
227
|
+
isWaiting: false,
|
|
228
|
+
needsHuman: false,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/state-detectors/codex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAuC,MAAM,YAAY,CAAC;AAQ7E;;;GAGG;AACH,MAAM,sBAAsB,GAAqB;IAC/C,oCAAoC;IACpC;QACE,KAAK,EAAE,UAAU,CAAC,QAAQ;QAC1B,QAAQ,EAAE;YACR,iBAAiB;YACjB,wBAAwB;YACxB,sBAAsB;SACvB;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,KAAK,EAAE,UAAU,CAAC,YAAY;QAC9B,QAAQ,EAAE;YACR,YAAY;YACZ,kBAAkB;YAClB,eAAe,EAAE,6BAA6B;YAC9C,kBAAkB;SACnB;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,KAAK,EAAE,UAAU,CAAC,UAAU;QAC5B,QAAQ,EAAE;YACR,aAAa;YACb,UAAU;YACV,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IAED,6DAA6D;IAC7D;QACE,KAAK,EAAE,UAAU,CAAC,kBAAkB;QACpC,QAAQ,EAAE;YACR,mBAAmB;YACnB,4BAA4B;YAC5B,UAAU,EAAE,mBAAmB;SAChC;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,eAAe;QACjC,QAAQ,EAAE;YACR,SAAS,EAAE,iCAAiC;YAC5C,iBAAiB;YACjB,cAAc;YACd,iBAAiB;SAClB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,mBAAmB;QACrC,QAAQ,EAAE;YACR,sBAAsB;YACtB,uBAAuB;YACvB,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,aAAa;QAC/B,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;YACT,YAAY;YACZ,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IAED,oCAAoC;IACpC;QACE,KAAK,EAAE,UAAU,CAAC,aAAa;QAC/B,QAAQ,EAAE;YACR,OAAO;YACP,YAAY;YACZ,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,cAAc;QAChC,QAAQ,EAAE;YACR,SAAS,EAAE,uBAAuB;YAClC,cAAc;YACd,oBAAoB;SACrB;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,WAAW,CAAC,MAAc;QACxB,8CAA8C;QAC9C,MAAM,gBAAgB,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE7F,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC7D,OAAO;wBACL,GAAG,MAAM;wBACT,UAAU,EAAE,IAAI,EAAE,+CAA+C;wBACjE,MAAM,EAAE,8BAA8B,SAAS,CAAC,KAAK,EAAE;qBACxD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,OAAO;YACzB,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,uCAAuC;YAC/C,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB;QACnC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,UAAU,CAAC,QAAQ;gBACtB,OAAO,mBAAmB,CAAC;YAC7B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAO,iBAAiB,CAAC;YAC3B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,oBAAoB,CAAC;YAC9B,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAO,gBAAgB,CAAC;YAC1B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,gBAAgB,CAAC;YAC1B,KAAK,UAAU,CAAC,eAAe;gBAC7B,OAAO,oCAAoC,CAAC;YAC9C,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAO,yBAAyB,CAAC;YACnC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,sBAAsB,CAAC;YAChC,KAAK,UAAU,CAAC,mBAAmB;gBACjC,OAAO,qBAAqB,CAAC;YAC/B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,yBAAyB,CAAC;YACnC,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,eAAe,CAAC;YACzB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAiB;QAC7B,OAAO;YACL,UAAU,CAAC,QAAQ;YACnB,UAAU,CAAC,YAAY;YACvB,UAAU,CAAC,UAAU;SACtB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAiB;QAC9B,OAAO;YACL,UAAU,CAAC,eAAe;YAC1B,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,aAAa;YACxB,UAAU,CAAC,mBAAmB;YAC9B,UAAU,CAAC,aAAa;SACzB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,KAAiB;QAC/C,QAAQ,KAAK,EAAE,CAAC;YACd,8BAA8B;YAC9B,KAAK,UAAU,CAAC,QAAQ,CAAC;YACzB,KAAK,UAAU,CAAC,YAAY,CAAC;YAC7B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBAClB,CAAC;YAEJ,wCAAwC;YACxC,KAAK,UAAU,CAAC,cAAc,CAAC;YAC/B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,KAAK;iBAClB,CAAC;YAEJ,2CAA2C;YAC3C,KAAK,UAAU,CAAC,eAAe,CAAC;YAChC,KAAK,UAAU,CAAC,kBAAkB,CAAC;YACnC,KAAK,UAAU,CAAC,aAAa,CAAC;YAC9B,KAAK,UAAU,CAAC,mBAAmB,CAAC;YACpC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,IAAI;iBACjB,CAAC;YAEJ,qCAAqC;YACrC,KAAK,UAAU,CAAC,OAAO,CAAC;YACxB;gBACE,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBAClB,CAAC;QACN,CAAC;IACH,CAAC;CACF"}
|