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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-CLI State Detection System
|
|
3
|
+
*
|
|
4
|
+
* Provides unified state detection across different CLI tools:
|
|
5
|
+
* - Claude Code
|
|
6
|
+
* - Codex CLI
|
|
7
|
+
* - Gemini CLI
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* import { getStateDetector } from './state-detectors';
|
|
11
|
+
* const detector = getStateDetector('claude');
|
|
12
|
+
* const result = detector.detectState(output);
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// Export types and interfaces
|
|
16
|
+
export type { StateDetector, StateDetectionResult, CLIType } from './types.js';
|
|
17
|
+
export { AgentState } from './types.js';
|
|
18
|
+
|
|
19
|
+
// Export state detector implementations
|
|
20
|
+
export { ClaudeStateDetector } from './claude.js';
|
|
21
|
+
export { CodexStateDetector } from './codex.js';
|
|
22
|
+
export { GeminiStateDetector } from './gemini.js';
|
|
23
|
+
|
|
24
|
+
// Export factory functions
|
|
25
|
+
export { getStateDetector, isSupportedCLI } from './factory.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-CLI Agent State Detection Types
|
|
3
|
+
*
|
|
4
|
+
* Defines common state detection interfaces and types that work across
|
|
5
|
+
* different CLI tools (Claude Code, Codex, Gemini, etc.)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Universal agent states that apply across different CLI tools
|
|
10
|
+
*/
|
|
11
|
+
export enum AgentState {
|
|
12
|
+
// Active states - agent is actively working
|
|
13
|
+
THINKING = 'thinking',
|
|
14
|
+
TOOL_RUNNING = 'tool_running',
|
|
15
|
+
PROCESSING = 'processing',
|
|
16
|
+
|
|
17
|
+
// Waiting states - idle at prompt, ready for input
|
|
18
|
+
IDLE_AT_PROMPT = 'idle_at_prompt',
|
|
19
|
+
WORK_COMPLETE = 'work_complete',
|
|
20
|
+
|
|
21
|
+
// Blocked states - requires human intervention
|
|
22
|
+
ASKING_QUESTION = 'asking_question',
|
|
23
|
+
AWAITING_SELECTION = 'awaiting_selection',
|
|
24
|
+
PLAN_APPROVAL = 'plan_approval',
|
|
25
|
+
PERMISSION_REQUIRED = 'permission_required',
|
|
26
|
+
USER_DECLINED = 'user_declined',
|
|
27
|
+
|
|
28
|
+
// Unknown state
|
|
29
|
+
UNKNOWN = 'unknown',
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Result of state detection with confidence and metadata
|
|
34
|
+
*/
|
|
35
|
+
export interface StateDetectionResult {
|
|
36
|
+
state: AgentState;
|
|
37
|
+
confidence: number;
|
|
38
|
+
reason: string;
|
|
39
|
+
isWaiting: boolean;
|
|
40
|
+
needsHuman: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Interface for CLI-specific state detectors
|
|
45
|
+
* Each CLI tool implements this interface with its own patterns
|
|
46
|
+
*/
|
|
47
|
+
export interface StateDetector {
|
|
48
|
+
/**
|
|
49
|
+
* Detect the current state from CLI output
|
|
50
|
+
* @param output - The text output from the CLI
|
|
51
|
+
* @returns Detection result with state, confidence, and flags
|
|
52
|
+
*/
|
|
53
|
+
detectState(output: string): StateDetectionResult;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get a human-readable description of a state
|
|
57
|
+
* @param state - The state to describe
|
|
58
|
+
* @returns Human-readable description
|
|
59
|
+
*/
|
|
60
|
+
getStateDescription(state: AgentState): string;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if a state represents active work (not waiting)
|
|
64
|
+
* @param state - The state to check
|
|
65
|
+
* @returns True if the state is active
|
|
66
|
+
*/
|
|
67
|
+
isActiveState(state: AgentState): boolean;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Check if a state requires human intervention
|
|
71
|
+
* @param state - The state to check
|
|
72
|
+
* @returns True if the state is blocked
|
|
73
|
+
*/
|
|
74
|
+
isBlockedState(state: AgentState): boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Type identifier for different CLI tools
|
|
79
|
+
*/
|
|
80
|
+
export type CLIType = 'claude' | 'codex' | 'gemini';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './manager.js';
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
|
|
3
|
+
export interface TmuxSessionOptions {
|
|
4
|
+
sessionName: string;
|
|
5
|
+
workDir: string;
|
|
6
|
+
command: string;
|
|
7
|
+
env?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface TmuxSession {
|
|
11
|
+
name: string;
|
|
12
|
+
windows: number;
|
|
13
|
+
created: string;
|
|
14
|
+
attached: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function isTmuxAvailable(): Promise<boolean> {
|
|
18
|
+
try {
|
|
19
|
+
await execa('which', ['tmux']);
|
|
20
|
+
return true;
|
|
21
|
+
} catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function isTmuxSessionRunning(sessionName: string): Promise<boolean> {
|
|
27
|
+
try {
|
|
28
|
+
await execa('tmux', ['has-session', '-t', sessionName]);
|
|
29
|
+
return true;
|
|
30
|
+
} catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export async function listTmuxSessions(): Promise<TmuxSession[]> {
|
|
36
|
+
try {
|
|
37
|
+
const { stdout } = await execa('tmux', [
|
|
38
|
+
'list-sessions',
|
|
39
|
+
'-F',
|
|
40
|
+
'#{session_name}|#{session_windows}|#{session_created}|#{session_attached}',
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
return stdout.split('\n').filter(Boolean).map(line => {
|
|
44
|
+
const [name, windows, created, attached] = line.split('|');
|
|
45
|
+
return {
|
|
46
|
+
name,
|
|
47
|
+
windows: parseInt(windows, 10),
|
|
48
|
+
created,
|
|
49
|
+
attached: attached === '1',
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
} catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function getHiveSessions(): Promise<TmuxSession[]> {
|
|
58
|
+
const sessions = await listTmuxSessions();
|
|
59
|
+
return sessions.filter(s => s.name.startsWith('hive-'));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export async function spawnTmuxSession(options: TmuxSessionOptions): Promise<void> {
|
|
63
|
+
const { sessionName, workDir, command, env } = options;
|
|
64
|
+
|
|
65
|
+
// Kill existing session if it exists
|
|
66
|
+
if (await isTmuxSessionRunning(sessionName)) {
|
|
67
|
+
await killTmuxSession(sessionName);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Create new detached session with default shell
|
|
71
|
+
const args = [
|
|
72
|
+
'new-session',
|
|
73
|
+
'-d',
|
|
74
|
+
'-s', sessionName,
|
|
75
|
+
'-c', workDir,
|
|
76
|
+
];
|
|
77
|
+
|
|
78
|
+
const execaOptions: { env?: NodeJS.ProcessEnv } = {};
|
|
79
|
+
if (env) {
|
|
80
|
+
execaOptions.env = { ...process.env, ...env };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
await execa('tmux', args, execaOptions);
|
|
84
|
+
|
|
85
|
+
// Small delay to let shell initialize
|
|
86
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
87
|
+
|
|
88
|
+
// Send the command to the session
|
|
89
|
+
if (command) {
|
|
90
|
+
await execa('tmux', ['send-keys', '-t', sessionName, command, 'Enter']);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export async function killTmuxSession(sessionName: string): Promise<void> {
|
|
95
|
+
try {
|
|
96
|
+
await execa('tmux', ['kill-session', '-t', sessionName]);
|
|
97
|
+
} catch {
|
|
98
|
+
// Session might not exist, ignore error
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export async function killAllHiveSessions(): Promise<number> {
|
|
103
|
+
const sessions = await getHiveSessions();
|
|
104
|
+
let killed = 0;
|
|
105
|
+
|
|
106
|
+
for (const session of sessions) {
|
|
107
|
+
try {
|
|
108
|
+
await killTmuxSession(session.name);
|
|
109
|
+
killed++;
|
|
110
|
+
} catch {
|
|
111
|
+
// Ignore errors
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return killed;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function sendToTmuxSession(sessionName: string, text: string, clearFirst = true): Promise<void> {
|
|
119
|
+
if (clearFirst) {
|
|
120
|
+
// Clear any existing input at the prompt before sending new text
|
|
121
|
+
// Escape: exit any menu/selection state
|
|
122
|
+
// Ctrl+U: clear line from cursor to beginning
|
|
123
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'Escape']);
|
|
124
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
125
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'C-u']);
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (text.includes('\n')) {
|
|
130
|
+
// For multi-line text, send each line separately to avoid buffer race conditions
|
|
131
|
+
const lines = text.split('\n');
|
|
132
|
+
for (const line of lines) {
|
|
133
|
+
if (line.trim()) {
|
|
134
|
+
// Use send-keys with literal flag to handle special characters
|
|
135
|
+
// '--' signals end of options, preventing lines starting with '-' from being parsed as flags
|
|
136
|
+
await execa('tmux', ['send-keys', '-t', sessionName, '-l', '--', line]);
|
|
137
|
+
// Send Enter as a key event, not as literal text, to ensure prompt receives it
|
|
138
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
|
|
139
|
+
// Small delay between lines to ensure they're processed
|
|
140
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
// For single-line text, use send-keys with literal flag then Enter separately
|
|
145
|
+
// '--' signals end of options, preventing text starting with '-' from being parsed as flags
|
|
146
|
+
await execa('tmux', ['send-keys', '-t', sessionName, '-l', '--', text]);
|
|
147
|
+
// Send Enter as a key event (C-m = carriage return = Enter) to ensure prompt receives it
|
|
148
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export async function sendEnterToTmuxSession(sessionName: string): Promise<void> {
|
|
153
|
+
// C-m is equivalent to Enter/Return
|
|
154
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export async function captureTmuxPane(sessionName: string, lines = 100): Promise<string> {
|
|
158
|
+
try {
|
|
159
|
+
const { stdout } = await execa('tmux', [
|
|
160
|
+
'capture-pane',
|
|
161
|
+
'-t', sessionName,
|
|
162
|
+
'-p',
|
|
163
|
+
'-S', `-${lines}`,
|
|
164
|
+
]);
|
|
165
|
+
return stdout;
|
|
166
|
+
} catch {
|
|
167
|
+
return '';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Waits for a tmux session to be ready by detecting Claude CLI initialization.
|
|
173
|
+
* Claude is considered ready when the prompt appears in the pane output.
|
|
174
|
+
* @param sessionName - The tmux session name
|
|
175
|
+
* @param maxWaitMs - Maximum time to wait in milliseconds (default 15000ms)
|
|
176
|
+
* @param pollIntervalMs - Interval between checks in milliseconds (default 200ms)
|
|
177
|
+
* @returns true if ready, false on timeout
|
|
178
|
+
*/
|
|
179
|
+
export async function waitForTmuxSessionReady(
|
|
180
|
+
sessionName: string,
|
|
181
|
+
maxWaitMs = 15000,
|
|
182
|
+
pollIntervalMs = 200
|
|
183
|
+
): Promise<boolean> {
|
|
184
|
+
const startTime = Date.now();
|
|
185
|
+
let lastOutput = '';
|
|
186
|
+
|
|
187
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
188
|
+
const output = await captureTmuxPane(sessionName, 50);
|
|
189
|
+
|
|
190
|
+
// Check if we have Claude prompt indicator or substantial output
|
|
191
|
+
// Claude typically shows a prompt with "> " or similar
|
|
192
|
+
if (output.includes('>') || output.includes('Claude')) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Check if output has stabilized (same content for consecutive polls)
|
|
197
|
+
// This handles cases where output appears without explicit prompt
|
|
198
|
+
if (lastOutput === output && output.length > 0) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
lastOutput = output;
|
|
203
|
+
await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Timeout reached, but return true anyway as a fallback
|
|
207
|
+
// to avoid infinite hangs. Claude might still be starting.
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Forces bypass permissions mode in a Claude CLI session.
|
|
213
|
+
* Detects if the agent is in plan mode and switches to bypass mode by sending BTab.
|
|
214
|
+
* @param sessionName - The tmux session name
|
|
215
|
+
* @param cliTool - The CLI tool being used ('claude', 'codex', or 'gemini')
|
|
216
|
+
* @param maxRetries - Maximum number of retry attempts (default 5)
|
|
217
|
+
* @returns true if bypass mode was confirmed, false if max retries exceeded
|
|
218
|
+
*/
|
|
219
|
+
export async function forceBypassMode(
|
|
220
|
+
sessionName: string,
|
|
221
|
+
_cliTool: 'claude' | 'codex' | 'gemini' = 'claude',
|
|
222
|
+
maxRetries = 5
|
|
223
|
+
): Promise<boolean> {
|
|
224
|
+
// Note: cliTool parameter is reserved for future Codex/Gemini CLI integration
|
|
225
|
+
// Currently, all CLIs use the same BTab key sequence for cycling permissions
|
|
226
|
+
let retries = 0;
|
|
227
|
+
|
|
228
|
+
while (retries < maxRetries) {
|
|
229
|
+
// Capture pane output to check current permission mode
|
|
230
|
+
const output = await captureTmuxPane(sessionName, 100);
|
|
231
|
+
|
|
232
|
+
// Check if already in bypass mode
|
|
233
|
+
if (output.toLowerCase().includes('bypass permissions on')) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Check if in plan mode (needs to be switched)
|
|
238
|
+
if (output.toLowerCase().includes('plan mode on')) {
|
|
239
|
+
// Send BTab (Shift+Tab / backtab) to cycle permissions mode
|
|
240
|
+
// For Claude Code, BTab cycles through: plan -> safe -> bypass -> plan
|
|
241
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'BTab']);
|
|
242
|
+
|
|
243
|
+
// Wait for the mode change to take effect
|
|
244
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
245
|
+
|
|
246
|
+
retries++;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// If neither plan mode nor bypass mode is detected, try cycling anyway
|
|
251
|
+
// This handles cases where the mode indicator might not be visible
|
|
252
|
+
await execa('tmux', ['send-keys', '-t', sessionName, 'BTab']);
|
|
253
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
254
|
+
|
|
255
|
+
retries++;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Max retries exceeded
|
|
259
|
+
// Return false to indicate we couldn't confirm bypass mode
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export function generateSessionName(agentType: string, teamName?: string, index?: number): string {
|
|
264
|
+
let name = `hive-${agentType}`;
|
|
265
|
+
if (teamName) {
|
|
266
|
+
name += `-${teamName}`;
|
|
267
|
+
}
|
|
268
|
+
if (index !== undefined && index > 1) {
|
|
269
|
+
name += `-${index}`;
|
|
270
|
+
}
|
|
271
|
+
return name;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const MANAGER_SESSION = 'hive-manager';
|
|
275
|
+
|
|
276
|
+
export async function isManagerRunning(): Promise<boolean> {
|
|
277
|
+
return isTmuxSessionRunning(MANAGER_SESSION);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export async function startManager(interval = 60): Promise<boolean> {
|
|
281
|
+
if (await isManagerRunning()) {
|
|
282
|
+
return false; // Already running
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Start the manager in a detached tmux session
|
|
286
|
+
await execa('tmux', [
|
|
287
|
+
'new-session',
|
|
288
|
+
'-d',
|
|
289
|
+
'-s', MANAGER_SESSION,
|
|
290
|
+
]);
|
|
291
|
+
|
|
292
|
+
// Send the manager command
|
|
293
|
+
await execa('tmux', [
|
|
294
|
+
'send-keys',
|
|
295
|
+
'-t', MANAGER_SESSION,
|
|
296
|
+
`hive manager start -i ${interval}`,
|
|
297
|
+
'Enter',
|
|
298
|
+
]);
|
|
299
|
+
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export async function stopManager(): Promise<boolean> {
|
|
304
|
+
if (!await isManagerRunning()) {
|
|
305
|
+
return false; // Not running
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
await killTmuxSession(MANAGER_SESSION);
|
|
309
|
+
return true;
|
|
310
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare module 'sql.js' {
|
|
2
|
+
export interface SqlJsStatic {
|
|
3
|
+
Database: typeof Database;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface QueryExecResult {
|
|
7
|
+
columns: string[];
|
|
8
|
+
values: unknown[][];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface Statement {
|
|
12
|
+
bind(params?: unknown[]): boolean;
|
|
13
|
+
step(): boolean;
|
|
14
|
+
getAsObject(params?: unknown[]): Record<string, unknown>;
|
|
15
|
+
get(params?: unknown[]): unknown[];
|
|
16
|
+
free(): boolean;
|
|
17
|
+
reset(): void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export class Database {
|
|
21
|
+
constructor(data?: ArrayLike<number> | Buffer | null);
|
|
22
|
+
run(sql: string, params?: unknown[]): Database;
|
|
23
|
+
exec(sql: string): QueryExecResult[];
|
|
24
|
+
prepare(sql: string): Statement;
|
|
25
|
+
export(): Uint8Array;
|
|
26
|
+
close(): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SqlJsConfig {
|
|
30
|
+
locateFile?: (filename: string) => string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export default function initSqlJs(config?: SqlJsConfig): Promise<SqlJsStatic>;
|
|
34
|
+
}
|