@bubblebrain-ai/bubble 0.0.63 → 0.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +437 -11
- package/dist/agent/abort-errors.d.ts +18 -0
- package/dist/agent/abort-errors.js +51 -0
- package/dist/agent/budget-ledger.d.ts +20 -0
- package/dist/agent/budget-ledger.js +45 -0
- package/dist/agent/categories.d.ts +100 -0
- package/dist/agent/categories.js +203 -0
- package/dist/agent/change-tracker.d.ts +40 -0
- package/dist/agent/change-tracker.js +89 -0
- package/dist/agent/child-runner.d.ts +64 -0
- package/dist/agent/child-runner.js +405 -0
- package/dist/agent/input-controller.d.ts +14 -0
- package/dist/agent/input-controller.js +43 -0
- package/dist/agent/internal-reminder-sanitizer.d.ts +25 -0
- package/dist/agent/internal-reminder-sanitizer.js +297 -0
- package/dist/agent/profiles.d.ts +76 -0
- package/dist/agent/profiles.js +526 -0
- package/dist/agent/provider-fingerprint.d.ts +6 -0
- package/dist/agent/provider-fingerprint.js +89 -0
- package/dist/agent/resident-history.d.ts +7 -0
- package/dist/agent/resident-history.js +61 -0
- package/dist/agent/result-integrator.d.ts +22 -0
- package/dist/agent/result-integrator.js +50 -0
- package/dist/agent/routing-catalog.d.ts +131 -0
- package/dist/agent/routing-catalog.js +260 -0
- package/dist/agent/structured-output.d.ts +37 -0
- package/dist/agent/structured-output.js +193 -0
- package/dist/agent/subagent/router.d.ts +65 -0
- package/dist/agent/subagent/router.js +203 -0
- package/dist/agent/subagent/runtime.d.ts +235 -0
- package/dist/agent/subagent/runtime.js +835 -0
- package/dist/agent/subagent-control.d.ts +100 -0
- package/dist/agent/subagent-control.js +70 -0
- package/dist/agent/subagent-lifecycle-reminder.d.ts +3 -0
- package/dist/agent/subagent-lifecycle-reminder.js +112 -0
- package/dist/agent/subagent-route-format.d.ts +8 -0
- package/dist/agent/subagent-route-format.js +18 -0
- package/dist/agent/subagent-scheduler.d.ts +105 -0
- package/dist/agent/subagent-scheduler.js +287 -0
- package/dist/agent/subagent-store.d.ts +57 -0
- package/dist/agent/subagent-store.js +180 -0
- package/dist/agent/subagent-summary.d.ts +30 -0
- package/dist/agent/subagent-summary.js +74 -0
- package/dist/agent/subagent-wait-guidance.d.ts +2 -0
- package/dist/agent/subagent-wait-guidance.js +8 -0
- package/dist/agent/subtask-policy.d.ts +13 -0
- package/dist/agent/subtask-policy.js +56 -0
- package/dist/agent/task-lifecycle-reminder.d.ts +26 -0
- package/dist/agent/task-lifecycle-reminder.js +59 -0
- package/dist/agent/tool-intent.d.ts +45 -0
- package/dist/agent/tool-intent.js +318 -0
- package/dist/agent/tool-visibility.d.ts +10 -0
- package/dist/agent/tool-visibility.js +6 -0
- package/dist/agent/transcript-helpers.d.ts +20 -0
- package/dist/agent/transcript-helpers.js +63 -0
- package/dist/agent/update-queue.d.ts +13 -0
- package/dist/agent/update-queue.js +69 -0
- package/dist/agent/workflow/control.d.ts +60 -0
- package/dist/agent/workflow/control.js +62 -0
- package/dist/agent/workflow/errors.d.ts +16 -0
- package/dist/agent/workflow/errors.js +24 -0
- package/dist/agent/workflow/runs.d.ts +73 -0
- package/dist/agent/workflow/runs.js +160 -0
- package/dist/agent/workflow/runtime.d.ts +88 -0
- package/dist/agent/workflow/runtime.js +319 -0
- package/dist/agent/worktree.d.ts +29 -0
- package/dist/agent/worktree.js +73 -0
- package/dist/agent.d.ts +460 -0
- package/dist/agent.js +2210 -0
- package/dist/anthropic-thinking.d.ts +4 -0
- package/dist/anthropic-thinking.js +11 -0
- package/dist/approval/controller.d.ts +71 -0
- package/dist/approval/controller.js +286 -0
- package/dist/approval/danger.d.ts +13 -0
- package/dist/approval/danger.js +55 -0
- package/dist/approval/diff-hunks.d.ts +12 -0
- package/dist/approval/diff-hunks.js +32 -0
- package/dist/approval/protected-paths.d.ts +1 -0
- package/dist/approval/protected-paths.js +35 -0
- package/dist/approval/session-cache.d.ts +21 -0
- package/dist/approval/session-cache.js +38 -0
- package/dist/approval/tool-helper.d.ts +14 -0
- package/dist/approval/tool-helper.js +47 -0
- package/dist/approval/types.d.ts +146 -0
- package/dist/approval/types.js +8 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +3 -0
- package/dist/bubble-home.d.ts +8 -0
- package/dist/bubble-home.js +19 -0
- package/dist/checkpoints.d.ts +57 -0
- package/dist/checkpoints.js +0 -0
- package/dist/cli.d.ts +37 -0
- package/dist/cli.js +175 -0
- package/dist/clipboard.d.ts +14 -0
- package/dist/clipboard.js +132 -0
- package/dist/config.d.ts +96 -0
- package/dist/config.js +287 -0
- package/dist/context/budget.d.ts +28 -0
- package/dist/context/budget.js +130 -0
- package/dist/context/checkpoint.d.ts +18 -0
- package/dist/context/checkpoint.js +117 -0
- package/dist/context/compact-llm.d.ts +25 -0
- package/dist/context/compact-llm.js +175 -0
- package/dist/context/compact.d.ts +124 -0
- package/dist/context/compact.js +635 -0
- package/dist/context/compaction-files.d.ts +44 -0
- package/dist/context/compaction-files.js +148 -0
- package/dist/context/llm-compactor.d.ts +53 -0
- package/dist/context/llm-compactor.js +424 -0
- package/dist/context/overflow.d.ts +9 -0
- package/dist/context/overflow.js +50 -0
- package/dist/context/projector.d.ts +34 -0
- package/dist/context/projector.js +251 -0
- package/dist/context/prune.d.ts +26 -0
- package/dist/context/prune.js +171 -0
- package/dist/context/session-write-lock.d.ts +20 -0
- package/dist/context/session-write-lock.js +162 -0
- package/dist/context/token-estimator.d.ts +14 -0
- package/dist/context/token-estimator.js +106 -0
- package/dist/context/tool-images.d.ts +3 -0
- package/dist/context/tool-images.js +35 -0
- package/dist/context/tool-output-truncate.d.ts +24 -0
- package/dist/context/tool-output-truncate.js +181 -0
- package/dist/context/usage.d.ts +34 -0
- package/dist/context/usage.js +230 -0
- package/dist/debug-trace.d.ts +27 -0
- package/dist/debug-trace.js +401 -0
- package/dist/diff-stats.d.ts +5 -0
- package/dist/diff-stats.js +21 -0
- package/dist/external-runtime/grok-acp.d.ts +56 -0
- package/dist/external-runtime/grok-acp.js +386 -0
- package/dist/external-runtime/grok-binary.d.ts +25 -0
- package/dist/external-runtime/grok-binary.js +108 -0
- package/dist/external-runtime/grok-errors.d.ts +7 -0
- package/dist/external-runtime/grok-errors.js +15 -0
- package/dist/external-runtime/grok-input-policy.d.ts +58 -0
- package/dist/external-runtime/grok-input-policy.js +52 -0
- package/dist/external-runtime/grok-ndjson.d.ts +14 -0
- package/dist/external-runtime/grok-ndjson.js +193 -0
- package/dist/external-runtime/grok-network.d.ts +15 -0
- package/dist/external-runtime/grok-network.js +81 -0
- package/dist/external-runtime/grok-preflight.d.ts +28 -0
- package/dist/external-runtime/grok-preflight.js +194 -0
- package/dist/external-runtime/grok-process.d.ts +26 -0
- package/dist/external-runtime/grok-process.js +184 -0
- package/dist/external-runtime/grok-profile.d.ts +32 -0
- package/dist/external-runtime/grok-profile.js +419 -0
- package/dist/external-runtime/grok-provider.d.ts +31 -0
- package/dist/external-runtime/grok-provider.js +41 -0
- package/dist/external-runtime/grok-runtime.d.ts +91 -0
- package/dist/external-runtime/grok-runtime.js +882 -0
- package/dist/external-runtime/index.d.ts +13 -0
- package/dist/external-runtime/index.js +13 -0
- package/dist/external-runtime/session-policy.d.ts +11 -0
- package/dist/external-runtime/session-policy.js +30 -0
- package/dist/external-runtime/types.d.ts +65 -0
- package/dist/external-runtime/types.js +1 -0
- package/dist/feedback/collect.d.ts +7 -0
- package/dist/feedback/collect.js +119 -0
- package/dist/feedback/config.d.ts +14 -0
- package/dist/feedback/config.js +16 -0
- package/dist/feedback/redact.d.ts +1 -0
- package/dist/feedback/redact.js +25 -0
- package/dist/feedback/submit.d.ts +6 -0
- package/dist/feedback/submit.js +43 -0
- package/dist/feedback/types.d.ts +22 -0
- package/dist/feedback/types.js +1 -0
- package/dist/feishu/agent-host/approval-card.d.ts +11 -0
- package/dist/feishu/agent-host/approval-card.js +85 -0
- package/dist/feishu/agent-host/approval-ui.d.ts +59 -0
- package/dist/feishu/agent-host/approval-ui.js +214 -0
- package/dist/feishu/agent-host/run-driver.d.ts +51 -0
- package/dist/feishu/agent-host/run-driver.js +397 -0
- package/dist/feishu/agent-host/runtime-deps.d.ts +33 -0
- package/dist/feishu/agent-host/runtime-deps.js +8 -0
- package/dist/feishu/card/budget.d.ts +40 -0
- package/dist/feishu/card/budget.js +134 -0
- package/dist/feishu/card/renderer.d.ts +29 -0
- package/dist/feishu/card/renderer.js +245 -0
- package/dist/feishu/card/run-state-types.d.ts +49 -0
- package/dist/feishu/card/run-state-types.js +15 -0
- package/dist/feishu/card/run-state.d.ts +21 -0
- package/dist/feishu/card/run-state.js +223 -0
- package/dist/feishu/channel/channel.d.ts +52 -0
- package/dist/feishu/channel/channel.js +74 -0
- package/dist/feishu/config.d.ts +24 -0
- package/dist/feishu/config.js +97 -0
- package/dist/feishu/format.d.ts +6 -0
- package/dist/feishu/format.js +14 -0
- package/dist/feishu/index.d.ts +4 -0
- package/dist/feishu/index.js +4 -0
- package/dist/feishu/logger.d.ts +31 -0
- package/dist/feishu/logger.js +62 -0
- package/dist/feishu/paths.d.ts +12 -0
- package/dist/feishu/paths.js +38 -0
- package/dist/feishu/process-registry.d.ts +29 -0
- package/dist/feishu/process-registry.js +90 -0
- package/dist/feishu/router/commands.d.ts +38 -0
- package/dist/feishu/router/commands.js +286 -0
- package/dist/feishu/router/event-router.d.ts +40 -0
- package/dist/feishu/router/event-router.js +208 -0
- package/dist/feishu/router/whitelist.d.ts +23 -0
- package/dist/feishu/router/whitelist.js +20 -0
- package/dist/feishu/runtime/active-runs.d.ts +32 -0
- package/dist/feishu/runtime/active-runs.js +84 -0
- package/dist/feishu/runtime/pending-queue.d.ts +36 -0
- package/dist/feishu/runtime/pending-queue.js +98 -0
- package/dist/feishu/runtime/process-pool.d.ts +29 -0
- package/dist/feishu/runtime/process-pool.js +49 -0
- package/dist/feishu/schema.d.ts +17 -0
- package/dist/feishu/schema.js +252 -0
- package/dist/feishu/scope/scope-registry.d.ts +39 -0
- package/dist/feishu/scope/scope-registry.js +148 -0
- package/dist/feishu/scope/session-binder.d.ts +44 -0
- package/dist/feishu/scope/session-binder.js +100 -0
- package/dist/feishu/scope/session-store.d.ts +24 -0
- package/dist/feishu/scope/session-store.js +73 -0
- package/dist/feishu/secrets.d.ts +37 -0
- package/dist/feishu/secrets.js +129 -0
- package/dist/feishu/serve.d.ts +12 -0
- package/dist/feishu/serve.js +302 -0
- package/dist/feishu/types.d.ts +75 -0
- package/dist/feishu/types.js +23 -0
- package/dist/feishu/wizard.d.ts +24 -0
- package/dist/feishu/wizard.js +121 -0
- package/dist/goal/command.d.ts +20 -0
- package/dist/goal/command.js +76 -0
- package/dist/goal/engine.d.ts +33 -0
- package/dist/goal/engine.js +65 -0
- package/dist/goal/format.d.ts +18 -0
- package/dist/goal/format.js +112 -0
- package/dist/goal/prompts.d.ts +13 -0
- package/dist/goal/prompts.js +84 -0
- package/dist/goal/store.d.ts +64 -0
- package/dist/goal/store.js +174 -0
- package/dist/goal/tools.d.ts +13 -0
- package/dist/goal/tools.js +67 -0
- package/dist/goal/usage.d.ts +2 -0
- package/dist/goal/usage.js +3 -0
- package/dist/hooks/config.d.ts +9 -0
- package/dist/hooks/config.js +278 -0
- package/dist/hooks/controller.d.ts +24 -0
- package/dist/hooks/controller.js +254 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/log.d.ts +14 -0
- package/dist/hooks/log.js +54 -0
- package/dist/hooks/runner.d.ts +5 -0
- package/dist/hooks/runner.js +225 -0
- package/dist/hooks/trust.d.ts +37 -0
- package/dist/hooks/trust.js +143 -0
- package/dist/hooks/types.d.ts +173 -0
- package/dist/hooks/types.js +46 -0
- package/dist/loop/engine.d.ts +29 -0
- package/dist/loop/engine.js +63 -0
- package/dist/lsp/config.d.ts +18 -0
- package/dist/lsp/config.js +58 -0
- package/dist/lsp/diagnostics.d.ts +24 -0
- package/dist/lsp/diagnostics.js +103 -0
- package/dist/lsp/index.d.ts +3 -0
- package/dist/lsp/index.js +3 -0
- package/dist/lsp/service.d.ts +97 -0
- package/dist/lsp/service.js +815 -0
- package/dist/main.d.ts +5 -0
- package/dist/main.js +984 -0
- package/dist/mcp/client.d.ts +68 -0
- package/dist/mcp/client.js +177 -0
- package/dist/mcp/config.d.ts +30 -0
- package/dist/mcp/config.js +144 -0
- package/dist/mcp/manager.d.ts +67 -0
- package/dist/mcp/manager.js +328 -0
- package/dist/mcp/name.d.ts +26 -0
- package/dist/mcp/name.js +40 -0
- package/dist/mcp/transports.d.ts +54 -0
- package/dist/mcp/transports.js +267 -0
- package/dist/mcp/types.d.ts +111 -0
- package/dist/mcp/types.js +14 -0
- package/dist/memory/db.d.ts +65 -0
- package/dist/memory/db.js +332 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.js +10 -0
- package/dist/memory/paths.d.ts +18 -0
- package/dist/memory/paths.js +38 -0
- package/dist/memory/phase1.d.ts +23 -0
- package/dist/memory/phase1.js +292 -0
- package/dist/memory/phase2.d.ts +19 -0
- package/dist/memory/phase2.js +119 -0
- package/dist/memory/prompts.d.ts +19 -0
- package/dist/memory/prompts.js +104 -0
- package/dist/memory/reset.d.ts +1 -0
- package/dist/memory/reset.js +13 -0
- package/dist/memory/session-policy.d.ts +25 -0
- package/dist/memory/session-policy.js +55 -0
- package/dist/memory/start.d.ts +24 -0
- package/dist/memory/start.js +50 -0
- package/dist/memory/storage.d.ts +11 -0
- package/dist/memory/storage.js +95 -0
- package/dist/memory/store.d.ts +43 -0
- package/dist/memory/store.js +193 -0
- package/dist/memory/usage.d.ts +1 -0
- package/dist/memory/usage.js +38 -0
- package/dist/model-catalog.d.ts +65 -0
- package/dist/model-catalog.js +387 -0
- package/dist/model-config.d.ts +40 -0
- package/dist/model-config.js +74 -0
- package/dist/model-data.generated.d.ts +16 -0
- package/dist/model-data.generated.js +275 -0
- package/dist/model-pricing.d.ts +54 -0
- package/dist/model-pricing.js +244 -0
- package/dist/model-selection.d.ts +7 -0
- package/dist/model-selection.js +18 -0
- package/dist/network/chatgpt-transport.d.ts +16 -0
- package/dist/network/chatgpt-transport.js +232 -0
- package/dist/network/errors.d.ts +47 -0
- package/dist/network/errors.js +48 -0
- package/dist/network/provider-transport-log.d.ts +12 -0
- package/dist/network/provider-transport-log.js +32 -0
- package/dist/network/provider-transport.d.ts +37 -0
- package/dist/network/provider-transport.js +256 -0
- package/dist/network/retry.d.ts +34 -0
- package/dist/network/retry.js +97 -0
- package/dist/network/system-proxy.d.ts +18 -0
- package/dist/network/system-proxy.js +175 -0
- package/dist/oauth/grok.d.ts +26 -0
- package/dist/oauth/grok.js +251 -0
- package/dist/oauth/index.d.ts +4 -0
- package/dist/oauth/index.js +3 -0
- package/dist/oauth/openai-codex.d.ts +15 -0
- package/dist/oauth/openai-codex.js +193 -0
- package/dist/oauth/refresh-control.d.ts +12 -0
- package/dist/oauth/refresh-control.js +42 -0
- package/dist/oauth/storage.d.ts +88 -0
- package/dist/oauth/storage.js +357 -0
- package/dist/oauth/types.d.ts +15 -0
- package/dist/oauth/types.js +1 -0
- package/dist/orchestrator/default-hooks.d.ts +22 -0
- package/dist/orchestrator/default-hooks.js +127 -0
- package/dist/orchestrator/hooks.d.ts +69 -0
- package/dist/orchestrator/hooks.js +52 -0
- package/dist/permission/mode.d.ts +19 -0
- package/dist/permission/mode.js +16 -0
- package/dist/permissions/rule.d.ts +42 -0
- package/dist/permissions/rule.js +293 -0
- package/dist/permissions/settings.d.ts +97 -0
- package/dist/permissions/settings.js +289 -0
- package/dist/permissions/shell-command.d.ts +36 -0
- package/dist/permissions/shell-command.js +226 -0
- package/dist/permissions/trust-prompt.d.ts +10 -0
- package/dist/permissions/trust-prompt.js +34 -0
- package/dist/permissions/trust.d.ts +26 -0
- package/dist/permissions/trust.js +113 -0
- package/dist/permissions/types.d.ts +61 -0
- package/dist/permissions/types.js +14 -0
- package/dist/print-output.d.ts +98 -0
- package/dist/print-output.js +117 -0
- package/dist/prompt/compose.d.ts +19 -0
- package/dist/prompt/compose.js +110 -0
- package/dist/prompt/delegation.d.ts +14 -0
- package/dist/prompt/delegation.js +100 -0
- package/dist/prompt/environment.d.ts +12 -0
- package/dist/prompt/environment.js +55 -0
- package/dist/prompt/provider-prompts/anthropic.d.ts +1 -0
- package/dist/prompt/provider-prompts/anthropic.js +5 -0
- package/dist/prompt/provider-prompts/codex.d.ts +1 -0
- package/dist/prompt/provider-prompts/codex.js +5 -0
- package/dist/prompt/provider-prompts/deepseek.d.ts +1 -0
- package/dist/prompt/provider-prompts/deepseek.js +7 -0
- package/dist/prompt/provider-prompts/default.d.ts +1 -0
- package/dist/prompt/provider-prompts/default.js +6 -0
- package/dist/prompt/provider-prompts/gemini.d.ts +1 -0
- package/dist/prompt/provider-prompts/gemini.js +5 -0
- package/dist/prompt/provider-prompts/glm.d.ts +1 -0
- package/dist/prompt/provider-prompts/glm.js +7 -0
- package/dist/prompt/provider-prompts/gpt.d.ts +1 -0
- package/dist/prompt/provider-prompts/gpt.js +5 -0
- package/dist/prompt/provider-prompts/kimi.d.ts +1 -0
- package/dist/prompt/provider-prompts/kimi.js +8 -0
- package/dist/prompt/reminders.d.ts +33 -0
- package/dist/prompt/reminders.js +135 -0
- package/dist/prompt/routing.d.ts +14 -0
- package/dist/prompt/routing.js +71 -0
- package/dist/prompt/runtime.d.ts +12 -0
- package/dist/prompt/runtime.js +40 -0
- package/dist/prompt/task-reminders.d.ts +12 -0
- package/dist/prompt/task-reminders.js +64 -0
- package/dist/provider-ai-sdk.d.ts +59 -0
- package/dist/provider-ai-sdk.js +541 -0
- package/dist/provider-anthropic.d.ts +126 -0
- package/dist/provider-anthropic.js +940 -0
- package/dist/provider-ark-responses.d.ts +29 -0
- package/dist/provider-ark-responses.js +518 -0
- package/dist/provider-artifacts.d.ts +7 -0
- package/dist/provider-artifacts.js +60 -0
- package/dist/provider-error-record.d.ts +43 -0
- package/dist/provider-error-record.js +213 -0
- package/dist/provider-grok.d.ts +50 -0
- package/dist/provider-grok.js +110 -0
- package/dist/provider-model-policy.d.ts +16 -0
- package/dist/provider-model-policy.js +33 -0
- package/dist/provider-openai-codex.d.ts +66 -0
- package/dist/provider-openai-codex.js +781 -0
- package/dist/provider-registry.d.ts +197 -0
- package/dist/provider-registry.js +1194 -0
- package/dist/provider-transform.d.ts +12 -0
- package/dist/provider-transform.js +293 -0
- package/dist/provider-zen-errors.d.ts +9 -0
- package/dist/provider-zen-errors.js +36 -0
- package/dist/provider.d.ts +85 -0
- package/dist/provider.js +925 -0
- package/dist/question/controller.d.ts +22 -0
- package/dist/question/controller.js +98 -0
- package/dist/question/index.d.ts +2 -0
- package/dist/question/index.js +2 -0
- package/dist/question/normalize.d.ts +6 -0
- package/dist/question/normalize.js +11 -0
- package/dist/question/types.d.ts +42 -0
- package/dist/question/types.js +6 -0
- package/dist/reasoning-debug.d.ts +7 -0
- package/dist/reasoning-debug.js +33 -0
- package/dist/rewind.d.ts +20 -0
- package/dist/rewind.js +29 -0
- package/dist/sdk/index.d.ts +319 -0
- package/dist/sdk/index.js +1068 -0
- package/dist/sdk/replay-event-log.d.ts +26 -0
- package/dist/sdk/replay-event-log.js +122 -0
- package/dist/sdk/session-turn-coordinator.d.ts +45 -0
- package/dist/sdk/session-turn-coordinator.js +227 -0
- package/dist/session-context-fence.d.ts +16 -0
- package/dist/session-context-fence.js +26 -0
- package/dist/session-log.d.ts +25 -0
- package/dist/session-log.js +444 -0
- package/dist/session-title.d.ts +16 -0
- package/dist/session-title.js +131 -0
- package/dist/session-types.d.ts +86 -0
- package/dist/session-types.js +1 -0
- package/dist/session.d.ts +135 -0
- package/dist/session.js +664 -0
- package/dist/skills/discovery.d.ts +12 -0
- package/dist/skills/discovery.js +166 -0
- package/dist/skills/format.d.ts +32 -0
- package/dist/skills/format.js +68 -0
- package/dist/skills/frontmatter.d.ts +5 -0
- package/dist/skills/frontmatter.js +60 -0
- package/dist/skills/invocation.d.ts +8 -0
- package/dist/skills/invocation.js +33 -0
- package/dist/skills/registry.d.ts +28 -0
- package/dist/skills/registry.js +79 -0
- package/dist/skills/types.d.ts +34 -0
- package/dist/skills/types.js +1 -0
- package/dist/slash-commands/commands.d.ts +10 -0
- package/dist/slash-commands/commands.js +1251 -0
- package/dist/slash-commands/feishu.d.ts +17 -0
- package/dist/slash-commands/feishu.js +400 -0
- package/dist/slash-commands/index.d.ts +4 -0
- package/dist/slash-commands/index.js +8 -0
- package/dist/slash-commands/registry.d.ts +32 -0
- package/dist/slash-commands/registry.js +73 -0
- package/dist/slash-commands/types.d.ts +109 -0
- package/dist/slash-commands/types.js +1 -0
- package/dist/slash-commands/unified.d.ts +38 -0
- package/dist/slash-commands/unified.js +38 -0
- package/dist/stats/usage.d.ts +59 -0
- package/dist/stats/usage.js +485 -0
- package/dist/stream-json.d.ts +13 -0
- package/dist/stream-json.js +74 -0
- package/dist/system-prompt.d.ts +40 -0
- package/dist/system-prompt.js +7 -0
- package/dist/tasks/manager.d.ts +145 -0
- package/dist/tasks/manager.js +634 -0
- package/dist/tasks/process-utils.d.ts +10 -0
- package/dist/tasks/process-utils.js +49 -0
- package/dist/tasks/promotion.d.ts +17 -0
- package/dist/tasks/promotion.js +30 -0
- package/dist/tasks/wake.d.ts +53 -0
- package/dist/tasks/wake.js +125 -0
- package/dist/text-display.d.ts +3 -0
- package/dist/text-display.js +25 -0
- package/dist/tools/agent-lifecycle.d.ts +30 -0
- package/dist/tools/agent-lifecycle.js +790 -0
- package/dist/tools/bash.d.ts +23 -0
- package/dist/tools/bash.js +443 -0
- package/dist/tools/child-tools.d.ts +41 -0
- package/dist/tools/child-tools.js +122 -0
- package/dist/tools/edit-apply.d.ts +25 -0
- package/dist/tools/edit-apply.js +274 -0
- package/dist/tools/edit.d.ts +18 -0
- package/dist/tools/edit.js +200 -0
- package/dist/tools/exa-mcp.d.ts +3 -0
- package/dist/tools/exa-mcp.js +74 -0
- package/dist/tools/exit-plan-mode.d.ts +22 -0
- package/dist/tools/exit-plan-mode.js +79 -0
- package/dist/tools/file-mutation-queue.d.ts +2 -0
- package/dist/tools/file-mutation-queue.js +43 -0
- package/dist/tools/file-state.d.ts +48 -0
- package/dist/tools/file-state.js +76 -0
- package/dist/tools/grep.d.ts +9 -0
- package/dist/tools/grep.js +387 -0
- package/dist/tools/index.d.ts +63 -0
- package/dist/tools/index.js +76 -0
- package/dist/tools/ls.d.ts +3 -0
- package/dist/tools/ls.js +85 -0
- package/dist/tools/lsp.d.ts +4 -0
- package/dist/tools/lsp.js +95 -0
- package/dist/tools/memory.d.ts +8 -0
- package/dist/tools/memory.js +77 -0
- package/dist/tools/path-utils.d.ts +8 -0
- package/dist/tools/path-utils.js +53 -0
- package/dist/tools/prompt-metadata.d.ts +3 -0
- package/dist/tools/prompt-metadata.js +17 -0
- package/dist/tools/question.d.ts +3 -0
- package/dist/tools/question.js +177 -0
- package/dist/tools/read.d.ts +8 -0
- package/dist/tools/read.js +309 -0
- package/dist/tools/sensitive-paths.d.ts +11 -0
- package/dist/tools/sensitive-paths.js +106 -0
- package/dist/tools/server-manager.d.ts +6 -0
- package/dist/tools/server-manager.js +6 -0
- package/dist/tools/server.d.ts +6 -0
- package/dist/tools/server.js +249 -0
- package/dist/tools/skill-search.d.ts +10 -0
- package/dist/tools/skill-search.js +134 -0
- package/dist/tools/skill.d.ts +7 -0
- package/dist/tools/skill.js +81 -0
- package/dist/tools/task-tools.d.ts +10 -0
- package/dist/tools/task-tools.js +133 -0
- package/dist/tools/tool-search.d.ts +23 -0
- package/dist/tools/tool-search.js +145 -0
- package/dist/tools/web-fetch.d.ts +6 -0
- package/dist/tools/web-fetch.js +76 -0
- package/dist/tools/web-search.d.ts +5 -0
- package/dist/tools/web-search.js +50 -0
- package/dist/tools/write.d.ts +10 -0
- package/dist/tools/write.js +155 -0
- package/dist/tui/animation-clock.d.ts +14 -0
- package/dist/tui/animation-clock.js +34 -0
- package/dist/tui/app.d.ts +176 -0
- package/dist/tui/app.js +1659 -0
- package/dist/tui/components/approval-dialog.d.ts +43 -0
- package/dist/tui/components/approval-dialog.js +212 -0
- package/dist/tui/components/bottom-sheet.d.ts +9 -0
- package/dist/tui/components/bottom-sheet.js +32 -0
- package/dist/tui/components/context-info.d.ts +54 -0
- package/dist/tui/components/context-info.js +388 -0
- package/dist/tui/components/feedback-dialog.d.ts +56 -0
- package/dist/tui/components/feedback-dialog.js +262 -0
- package/dist/tui/components/feishu-setup-dialog.d.ts +65 -0
- package/dist/tui/components/feishu-setup-dialog.js +332 -0
- package/dist/tui/components/image-preview.d.ts +32 -0
- package/dist/tui/components/image-preview.js +130 -0
- package/dist/tui/components/plan-dialog.d.ts +34 -0
- package/dist/tui/components/plan-dialog.js +196 -0
- package/dist/tui/components/provider-key-input.d.ts +18 -0
- package/dist/tui/components/provider-key-input.js +49 -0
- package/dist/tui/components/question-dialog.d.ts +25 -0
- package/dist/tui/components/question-dialog.js +263 -0
- package/dist/tui/components/responsive-transcript.d.ts +31 -0
- package/dist/tui/components/responsive-transcript.js +77 -0
- package/dist/tui/components/rewind-picker.d.ts +62 -0
- package/dist/tui/components/rewind-picker.js +317 -0
- package/dist/tui/components/session-picker.d.ts +49 -0
- package/dist/tui/components/session-picker.js +303 -0
- package/dist/tui/components/skills-panel.d.ts +63 -0
- package/dist/tui/components/skills-panel.js +582 -0
- package/dist/tui/components/stats-panel.d.ts +40 -0
- package/dist/tui/components/stats-panel.js +301 -0
- package/dist/tui/components/streaming-message.d.ts +69 -0
- package/dist/tui/components/streaming-message.js +398 -0
- package/dist/tui/components/subagent-inspector.d.ts +28 -0
- package/dist/tui/components/subagent-inspector.js +127 -0
- package/dist/tui/components/task-inspector.d.ts +26 -0
- package/dist/tui/components/task-inspector.js +70 -0
- package/dist/tui/components/tasks-pane.d.ts +126 -0
- package/dist/tui/components/tasks-pane.js +566 -0
- package/dist/tui/components/transcript.d.ts +103 -0
- package/dist/tui/components/transcript.js +858 -0
- package/dist/tui/components/welcome.d.ts +20 -0
- package/dist/tui/components/welcome.js +133 -0
- package/dist/tui/components/workflow-inspector.d.ts +30 -0
- package/dist/tui/components/workflow-inspector.js +136 -0
- package/dist/tui/composer-autocomplete.d.ts +76 -0
- package/dist/tui/composer-autocomplete.js +465 -0
- package/dist/tui/composer-style.d.ts +7 -0
- package/dist/tui/composer-style.js +29 -0
- package/dist/tui/controller/agent-event-reducer.d.ts +75 -0
- package/dist/tui/controller/agent-event-reducer.js +239 -0
- package/dist/tui/controller/composer-controller.d.ts +95 -0
- package/dist/tui/controller/composer-controller.js +502 -0
- package/dist/tui/controller/controller.d.ts +199 -0
- package/dist/tui/controller/controller.js +1034 -0
- package/dist/tui/controller/effects.d.ts +71 -0
- package/dist/tui/controller/effects.js +1 -0
- package/dist/tui/controller/goal-runtime-controller.d.ts +47 -0
- package/dist/tui/controller/goal-runtime-controller.js +202 -0
- package/dist/tui/controller/input-queue-machine.d.ts +71 -0
- package/dist/tui/controller/input-queue-machine.js +121 -0
- package/dist/tui/controller/intents.d.ts +56 -0
- package/dist/tui/controller/intents.js +6 -0
- package/dist/tui/controller/overlay-controller.d.ts +64 -0
- package/dist/tui/controller/overlay-controller.js +129 -0
- package/dist/tui/controller/ports.d.ts +57 -0
- package/dist/tui/controller/ports.js +9 -0
- package/dist/tui/controller/session-transition.d.ts +54 -0
- package/dist/tui/controller/session-transition.js +68 -0
- package/dist/tui/controller/state.d.ts +14 -0
- package/dist/tui/controller/state.js +36 -0
- package/dist/tui/controller/task-runtime-controller.d.ts +66 -0
- package/dist/tui/controller/task-runtime-controller.js +158 -0
- package/dist/tui/detect-theme.d.ts +4 -0
- package/dist/tui/detect-theme.js +116 -0
- package/dist/tui/display-history.d.ts +64 -0
- package/dist/tui/display-history.js +283 -0
- package/dist/tui/display-sanitizer.d.ts +3 -0
- package/dist/tui/display-sanitizer.js +38 -0
- package/dist/tui/edit-diff.d.ts +11 -0
- package/dist/tui/edit-diff.js +57 -0
- package/dist/tui/file-mentions.d.ts +29 -0
- package/dist/tui/file-mentions.js +174 -0
- package/dist/tui/footer.d.ts +37 -0
- package/dist/tui/footer.js +80 -0
- package/dist/tui/formatting/edit-diff.d.ts +11 -0
- package/dist/tui/formatting/edit-diff.js +52 -0
- package/dist/tui/formatting/summary.d.ts +43 -0
- package/dist/tui/formatting/summary.js +150 -0
- package/dist/tui/fullscreen.d.ts +48 -0
- package/dist/tui/fullscreen.js +256 -0
- package/dist/tui/image-display.d.ts +23 -0
- package/dist/tui/image-display.js +92 -0
- package/dist/tui/image-paste.d.ts +113 -0
- package/dist/tui/image-paste.js +565 -0
- package/dist/tui/input-history.d.ts +47 -0
- package/dist/tui/input-history.js +250 -0
- package/dist/tui/markdown-style.d.ts +5 -0
- package/dist/tui/markdown-style.js +23 -0
- package/dist/tui/model/composer-buffer.d.ts +55 -0
- package/dist/tui/model/composer-buffer.js +317 -0
- package/dist/tui/model/composer-types.d.ts +17 -0
- package/dist/tui/model/composer-types.js +1 -0
- package/dist/tui/model/display-history.d.ts +78 -0
- package/dist/tui/model/display-history.js +124 -0
- package/dist/tui/model/display-reconstruct.d.ts +3 -0
- package/dist/tui/model/display-reconstruct.js +130 -0
- package/dist/tui/model/file-mentions.d.ts +31 -0
- package/dist/tui/model/file-mentions.js +178 -0
- package/dist/tui/model/image-attachment.d.ts +15 -0
- package/dist/tui/model/image-attachment.js +1 -0
- package/dist/tui/model/image-paste.d.ts +119 -0
- package/dist/tui/model/image-paste.js +610 -0
- package/dist/tui/model/input-history.d.ts +1 -0
- package/dist/tui/model/input-history.js +1 -0
- package/dist/tui/model/input-queue.d.ts +12 -0
- package/dist/tui/model/input-queue.js +17 -0
- package/dist/tui/model/key-events.d.ts +9 -0
- package/dist/tui/model/key-events.js +8 -0
- package/dist/tui/model/paste-operation-tracker.d.ts +13 -0
- package/dist/tui/model/paste-operation-tracker.js +25 -0
- package/dist/tui/model/recent-activity.d.ts +8 -0
- package/dist/tui/model/recent-activity.js +71 -0
- package/dist/tui/model/subagent-view.d.ts +87 -0
- package/dist/tui/model/subagent-view.js +336 -0
- package/dist/tui/model/submit-dedupe.d.ts +5 -0
- package/dist/tui/model/submit-dedupe.js +25 -0
- package/dist/tui/model/sync-output.d.ts +17 -0
- package/dist/tui/model/sync-output.js +35 -0
- package/dist/tui/model/task-lifecycle.d.ts +57 -0
- package/dist/tui/model/task-lifecycle.js +124 -0
- package/dist/tui/model/terminal-env.d.ts +15 -0
- package/dist/tui/model/terminal-env.js +22 -0
- package/dist/tui/model/terminal-mouse.d.ts +28 -0
- package/dist/tui/model/terminal-mouse.js +82 -0
- package/dist/tui/model/theme-style.d.ts +10 -0
- package/dist/tui/model/theme-style.js +79 -0
- package/dist/tui/model/theme.d.ts +72 -0
- package/dist/tui/model/theme.js +121 -0
- package/dist/tui/model/trace-groups.d.ts +45 -0
- package/dist/tui/model/trace-groups.js +558 -0
- package/dist/tui/model/trace-interaction.d.ts +63 -0
- package/dist/tui/model/trace-interaction.js +87 -0
- package/dist/tui/model/width.d.ts +18 -0
- package/dist/tui/model/width.js +130 -0
- package/dist/tui/model-picker-data.d.ts +9 -0
- package/dist/tui/model-picker-data.js +39 -0
- package/dist/tui/model-switch.d.ts +49 -0
- package/dist/tui/model-switch.js +67 -0
- package/dist/tui/paste-placeholder.d.ts +11 -0
- package/dist/tui/paste-placeholder.js +52 -0
- package/dist/tui/recent-activity.d.ts +8 -0
- package/dist/tui/recent-activity.js +71 -0
- package/dist/tui/run-session-picker.d.ts +9 -0
- package/dist/tui/run-session-picker.js +64 -0
- package/dist/tui/run.d.ts +72 -0
- package/dist/tui/run.js +139 -0
- package/dist/tui/session-display.d.ts +6 -0
- package/dist/tui/session-display.js +12 -0
- package/dist/tui/session-picker-data.d.ts +18 -0
- package/dist/tui/session-picker-data.js +21 -0
- package/dist/tui/terminal/multiplexer.d.ts +5 -0
- package/dist/tui/terminal/multiplexer.js +14 -0
- package/dist/tui/testing/fake-agent.d.ts +24 -0
- package/dist/tui/testing/fake-agent.js +22 -0
- package/dist/tui/testing/spy-host.d.ts +21 -0
- package/dist/tui/testing/spy-host.js +55 -0
- package/dist/tui/trace-groups.d.ts +43 -0
- package/dist/tui/trace-groups.js +554 -0
- package/dist/tui/wordmark.d.ts +18 -0
- package/dist/tui/wordmark.js +208 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.js +4 -0
- package/dist/update/index.d.ts +61 -0
- package/dist/update/index.js +267 -0
- package/dist/variant/thinking-level.d.ts +5 -0
- package/dist/variant/thinking-level.js +26 -0
- package/dist/variant/variant-resolver.d.ts +28 -0
- package/dist/variant/variant-resolver.js +62 -0
- package/node_modules/@bubblebrain-ai/pi-tui/LICENSE +21 -0
- package/node_modules/@bubblebrain-ai/pi-tui/README.md +854 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts +26 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js +121 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts +86 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js +649 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts +13 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js +36 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js +99 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js +36 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts +330 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js +2344 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts +7 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js +43 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts +28 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js +82 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts +48 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js +390 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts +31 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js +67 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts +103 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js +797 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts +56 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js +179 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts +53 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js +175 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts +50 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js +174 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts +12 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts +32 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js +109 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts +19 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js +81 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts +13 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js +48 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts +8 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js +26 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts +39 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js +2 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts +16 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js +110 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts +31 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js +42 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts +273 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js +231 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts +184 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js +1174 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts +28 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js +46 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts +10 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js +1268 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts +40 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js +6 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts +42 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js +335 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts +3 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js +60 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts +56 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js +363 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts +10 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js +59 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts +116 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js +518 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts +142 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js +544 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts +11 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js +11 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts +141 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js +1340 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts +39 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js +536 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts +340 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js +1020 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts +17 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js +27 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts +96 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js +1193 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts +25 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js +96 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts +73 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js +188 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/README.md +20 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/build.sh +62 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/src/darwin-modifiers.c +70 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/README.md +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/build.mjs +229 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/src/win32-console-mode.c +119 -0
- package/node_modules/@bubblebrain-ai/pi-tui/package.json +66 -0
- package/node_modules/get-east-asian-width/index.d.ts +60 -0
- package/node_modules/get-east-asian-width/index.js +30 -0
- package/node_modules/get-east-asian-width/license +9 -0
- package/node_modules/get-east-asian-width/lookup-data.js +21 -0
- package/node_modules/get-east-asian-width/lookup.js +138 -0
- package/node_modules/get-east-asian-width/package.json +71 -0
- package/node_modules/get-east-asian-width/readme.md +65 -0
- package/node_modules/get-east-asian-width/utilities.js +24 -0
- package/node_modules/marked/LICENSE +44 -0
- package/node_modules/marked/README.md +115 -0
- package/node_modules/marked/bin/main.js +284 -0
- package/node_modules/marked/bin/marked.js +16 -0
- package/node_modules/marked/lib/marked.d.ts +760 -0
- package/node_modules/marked/lib/marked.esm.js +77 -0
- package/node_modules/marked/lib/marked.esm.js.map +7 -0
- package/node_modules/marked/lib/marked.umd.js +79 -0
- package/node_modules/marked/lib/marked.umd.js.map +7 -0
- package/node_modules/marked/man/marked.1 +113 -0
- package/node_modules/marked/man/marked.1.md +93 -0
- package/node_modules/marked/package.json +103 -0
- package/package.json +96 -17
- package/bin/bubble.js +0 -39
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export class OwnedRequest {
|
|
2
|
+
id;
|
|
3
|
+
kind;
|
|
4
|
+
onSettle;
|
|
5
|
+
state = "pending";
|
|
6
|
+
resolvers = [];
|
|
7
|
+
result;
|
|
8
|
+
constructor(id, kind, onSettle) {
|
|
9
|
+
this.id = id;
|
|
10
|
+
this.kind = kind;
|
|
11
|
+
this.onSettle = onSettle;
|
|
12
|
+
this.result = new Promise((resolve) => {
|
|
13
|
+
this.resolvers.push(resolve);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
settle(decision, via) {
|
|
17
|
+
if (this.state !== "pending")
|
|
18
|
+
return false;
|
|
19
|
+
this.state = decision === undefined
|
|
20
|
+
? (via === "user" ? "cancelled" : via === "replaced" ? "disposed" : "cancelled")
|
|
21
|
+
: "accepted";
|
|
22
|
+
const resolve = this.resolvers[0];
|
|
23
|
+
this.resolvers = [];
|
|
24
|
+
resolve?.(decision);
|
|
25
|
+
this.onSettle?.(this, via);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
let nextRequestId = 0;
|
|
30
|
+
export class OverlayRequestController {
|
|
31
|
+
deps;
|
|
32
|
+
requests = new Map();
|
|
33
|
+
questionUnsubscribe;
|
|
34
|
+
notifyChange = () => { };
|
|
35
|
+
constructor(deps = {}) {
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
}
|
|
38
|
+
/** Host wires change notification (snapshot rebuild). */
|
|
39
|
+
onChange(listener) {
|
|
40
|
+
this.notifyChange = listener;
|
|
41
|
+
}
|
|
42
|
+
installPlanHandler(ref) {
|
|
43
|
+
ref.current = (plan) => {
|
|
44
|
+
void plan;
|
|
45
|
+
const request = new OwnedRequest(`plan-${++nextRequestId}`, "plan", (r) => {
|
|
46
|
+
if (r.state === "pending")
|
|
47
|
+
return;
|
|
48
|
+
void r;
|
|
49
|
+
this.notifyChange();
|
|
50
|
+
});
|
|
51
|
+
this.requests.set(request.id, request);
|
|
52
|
+
this.notifyChange();
|
|
53
|
+
return request.result.then((decision) => {
|
|
54
|
+
this.requests.delete(request.id);
|
|
55
|
+
return decision;
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
installApprovalHandler(ref) {
|
|
60
|
+
ref.current = (request) => {
|
|
61
|
+
void request;
|
|
62
|
+
const owned = new OwnedRequest(`approval-${++nextRequestId}`, "approval", () => {
|
|
63
|
+
this.notifyChange();
|
|
64
|
+
});
|
|
65
|
+
this.requests.set(owned.id, owned);
|
|
66
|
+
this.notifyChange();
|
|
67
|
+
return owned.result.then((decision) => {
|
|
68
|
+
this.requests.delete(owned.id);
|
|
69
|
+
return decision;
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
adoptQuestionStream() {
|
|
74
|
+
const controller = this.deps.questionController;
|
|
75
|
+
if (!controller || this.questionUnsubscribe)
|
|
76
|
+
return;
|
|
77
|
+
this.questionUnsubscribe = controller.subscribe((event) => {
|
|
78
|
+
if (event.type === "asked") {
|
|
79
|
+
const owned = new OwnedRequest(event.request.id, "question", () => {
|
|
80
|
+
this.notifyChange();
|
|
81
|
+
});
|
|
82
|
+
this.requests.set(owned.id, owned);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.requests.delete(event.request.id);
|
|
86
|
+
}
|
|
87
|
+
this.notifyChange();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
openFeedback(initialDescription) {
|
|
91
|
+
const owned = new OwnedRequest(`feedback-${++nextRequestId}`, "feedback", () => {
|
|
92
|
+
this.notifyChange();
|
|
93
|
+
});
|
|
94
|
+
this.requests.set(owned.id, owned);
|
|
95
|
+
void initialDescription;
|
|
96
|
+
this.notifyChange();
|
|
97
|
+
return owned;
|
|
98
|
+
}
|
|
99
|
+
/** Settle every pending request (session switch, shutdown, replacement). */
|
|
100
|
+
settleAll(via) {
|
|
101
|
+
let settled = 0;
|
|
102
|
+
for (const request of [...this.requests.values()]) {
|
|
103
|
+
if (request.state === "pending") {
|
|
104
|
+
// Resolve the promise (undefined decision) and mark the terminal state.
|
|
105
|
+
request.settle(undefined, via);
|
|
106
|
+
request.state = via === "shutdown" ? "cancelled" : "disposed";
|
|
107
|
+
settled += 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.requests.clear();
|
|
111
|
+
if (settled > 0)
|
|
112
|
+
this.notifyChange();
|
|
113
|
+
return settled;
|
|
114
|
+
}
|
|
115
|
+
/** Drain the question subscription (controller shutdown). */
|
|
116
|
+
dispose() {
|
|
117
|
+
this.questionUnsubscribe?.();
|
|
118
|
+
this.questionUnsubscribe = undefined;
|
|
119
|
+
this.settleAll("shutdown");
|
|
120
|
+
}
|
|
121
|
+
pendingCount() {
|
|
122
|
+
let count = 0;
|
|
123
|
+
for (const request of this.requests.values()) {
|
|
124
|
+
if (request.state === "pending")
|
|
125
|
+
count += 1;
|
|
126
|
+
}
|
|
127
|
+
return count;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment ports for the Bubble TUI controller.
|
|
3
|
+
*
|
|
4
|
+
* Every side effect the controller can trigger is expressed here as an
|
|
5
|
+
* interface so tests can substitute deterministic fakes (spy host) and the
|
|
6
|
+
* production host (Ink adapter today, pi-tui application later) can wire
|
|
7
|
+
* real implementations. The controller layer never imports ink/react/pi-tui.
|
|
8
|
+
*/
|
|
9
|
+
/** Debounced streaming flush (40ms) shared semantics with the legacy TUI. */
|
|
10
|
+
export interface FlushScheduler {
|
|
11
|
+
/** Schedule `flush` after `intervalMs`, merging with any pending flush. */
|
|
12
|
+
scheduleFlush(intervalMs: number, flush: () => void): void;
|
|
13
|
+
/** Drop any pending flush (must run before clearing stream state). */
|
|
14
|
+
cancelFlush(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface Clock {
|
|
17
|
+
now(): number;
|
|
18
|
+
}
|
|
19
|
+
export interface Scheduler {
|
|
20
|
+
setTimeout(callback: () => void, ms: number): Disposable;
|
|
21
|
+
setInterval(callback: () => void, ms: number): Disposable;
|
|
22
|
+
}
|
|
23
|
+
/** Terminal multiplexer detection (tmux/screen need full reprints). */
|
|
24
|
+
export interface TerminalProbe {
|
|
25
|
+
isMultiplexed(): boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Session storage boundary. The host (main.ts switchSession closure today)
|
|
29
|
+
* owns the disk IO and failure semantics; the controller only commits UI
|
|
30
|
+
* state after a successful prepare.
|
|
31
|
+
*/
|
|
32
|
+
export interface SessionHostPort {
|
|
33
|
+
switchSession(file: string): {
|
|
34
|
+
manager: import("../../session.js").SessionManager;
|
|
35
|
+
} | {
|
|
36
|
+
error: string;
|
|
37
|
+
};
|
|
38
|
+
createFresh(cwd: string): {
|
|
39
|
+
manager: import("../../session.js").SessionManager;
|
|
40
|
+
} | {
|
|
41
|
+
error: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface GitBranchProbe {
|
|
45
|
+
/** Current git branch for the footer, or undefined outside a repo. */
|
|
46
|
+
currentBranch(cwd: string): string | undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface BubbleTuiPorts {
|
|
49
|
+
clock: Clock;
|
|
50
|
+
scheduler: Scheduler;
|
|
51
|
+
flush: FlushScheduler;
|
|
52
|
+
terminal: TerminalProbe;
|
|
53
|
+
sessionHost: SessionHostPort;
|
|
54
|
+
git: GitBranchProbe;
|
|
55
|
+
/** Best-effort process exit; host decides signal semantics. */
|
|
56
|
+
exitProcess(code: number): void;
|
|
57
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment ports for the Bubble TUI controller.
|
|
3
|
+
*
|
|
4
|
+
* Every side effect the controller can trigger is expressed here as an
|
|
5
|
+
* interface so tests can substitute deterministic fakes (spy host) and the
|
|
6
|
+
* production host (Ink adapter today, pi-tui application later) can wire
|
|
7
|
+
* real implementations. The controller layer never imports ink/react/pi-tui.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session switch as a two-phase transaction (controller extraction §4).
|
|
3
|
+
*
|
|
4
|
+
* prepare (host-owned, may fail): the switchSession/createFresh closures in
|
|
5
|
+
* main.ts:711-759 — disk IO, history reload, agent rebinding.
|
|
6
|
+
* commit (controller-owned, atomic): the applySessionSwitch cleanup list
|
|
7
|
+
* (app.tsx:986-1018), executed inside one transaction so subscribers see
|
|
8
|
+
* exactly two snapshots (before, after) — never a mixed-session state.
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionManager } from "../../session.js";
|
|
11
|
+
import type { InputQueueState } from "./input-queue-machine.js";
|
|
12
|
+
import type { OverlayRequestController } from "./overlay-controller.js";
|
|
13
|
+
import type { ControllerState } from "./state.js";
|
|
14
|
+
import type { SessionHostPort } from "./ports.js";
|
|
15
|
+
import { type DisplayMessage } from "../model/display-history.js";
|
|
16
|
+
export interface SessionTransitionPlan {
|
|
17
|
+
targetFile: string;
|
|
18
|
+
notice?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SwitchOutcome {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
manager?: SessionManager;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SessionTransitionDeps {
|
|
26
|
+
host: SessionHostPort;
|
|
27
|
+
state: ControllerState;
|
|
28
|
+
overlays: OverlayRequestController;
|
|
29
|
+
queue: InputQueueState;
|
|
30
|
+
agent: {
|
|
31
|
+
getMessages(): readonly import("../../types.js").Message[];
|
|
32
|
+
setSessionID(file: string): void;
|
|
33
|
+
};
|
|
34
|
+
/** Bump to invalidate stale external-runtime events. */
|
|
35
|
+
bumpExternalGeneration(): void;
|
|
36
|
+
clearLiveSubagentTools(): void;
|
|
37
|
+
/** Apply every controller-owned mirror inside the atomic commit. */
|
|
38
|
+
commit(manager: SessionManager, transcript: DisplayMessage[]): void;
|
|
39
|
+
}
|
|
40
|
+
export declare class SessionTransitionController {
|
|
41
|
+
private readonly deps;
|
|
42
|
+
constructor(deps: SessionTransitionDeps);
|
|
43
|
+
/**
|
|
44
|
+
* Full switch: host prepare, then atomic commit. On prepare failure the
|
|
45
|
+
* previous session is untouched and no notification fires.
|
|
46
|
+
*/
|
|
47
|
+
switchTo(plan: SessionTransitionPlan): SwitchOutcome;
|
|
48
|
+
/** Create and enter a new empty session through the same transaction. */
|
|
49
|
+
createFresh(cwd: string, notice?: string): SwitchOutcome;
|
|
50
|
+
/** Atomic commit — the twelve-item cleanup list from the design doc §4.2. */
|
|
51
|
+
private commitSwitch;
|
|
52
|
+
/** Rebuild the transcript rows for a freshly committed session. */
|
|
53
|
+
buildTranscript(notice?: string, queuedDisplayKeys?: Set<string>): DisplayMessage[];
|
|
54
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { queuedAndPendingDisplayKeys } from "../model/input-queue.js";
|
|
2
|
+
import { reconstructDisplayMessages } from "../model/display-reconstruct.js";
|
|
3
|
+
import { nextDisplayMessageKey } from "../model/display-history.js";
|
|
4
|
+
export class SessionTransitionController {
|
|
5
|
+
deps;
|
|
6
|
+
constructor(deps) {
|
|
7
|
+
this.deps = deps;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Full switch: host prepare, then atomic commit. On prepare failure the
|
|
11
|
+
* previous session is untouched and no notification fires.
|
|
12
|
+
*/
|
|
13
|
+
switchTo(plan) {
|
|
14
|
+
const result = this.deps.host.switchSession(plan.targetFile);
|
|
15
|
+
if ("error" in result) {
|
|
16
|
+
return { ok: false, error: result.error };
|
|
17
|
+
}
|
|
18
|
+
this.commitSwitch(result.manager, plan.notice);
|
|
19
|
+
return { ok: true, manager: result.manager };
|
|
20
|
+
}
|
|
21
|
+
/** Create and enter a new empty session through the same transaction. */
|
|
22
|
+
createFresh(cwd, notice) {
|
|
23
|
+
const result = this.deps.host.createFresh(cwd);
|
|
24
|
+
if ("error" in result) {
|
|
25
|
+
return { ok: false, error: result.error };
|
|
26
|
+
}
|
|
27
|
+
this.commitSwitch(result.manager, notice);
|
|
28
|
+
return { ok: true, manager: result.manager };
|
|
29
|
+
}
|
|
30
|
+
/** Atomic commit — the twelve-item cleanup list from the design doc §4.2. */
|
|
31
|
+
commitSwitch(manager, notice) {
|
|
32
|
+
// Snapshot the keys to filter BEFORE purging (the queue is part of state).
|
|
33
|
+
const queuedDisplayKeys = queuedAndPendingDisplayKeys(this.deps.queue.queued, this.deps.queue.pendingSteers.values());
|
|
34
|
+
const transcript = this.buildTranscript(notice, queuedDisplayKeys);
|
|
35
|
+
this.deps.state.withTransaction(() => {
|
|
36
|
+
// 1. Invalidate late external-runtime events.
|
|
37
|
+
this.deps.bumpExternalGeneration();
|
|
38
|
+
// 3. Purge queue/steer state.
|
|
39
|
+
this.deps.queue.queued.length = 0;
|
|
40
|
+
this.deps.queue.pendingSteers.clear();
|
|
41
|
+
// 6. Rebind the session and the agent's session id.
|
|
42
|
+
this.deps.agent.setSessionID(manager.getSessionFile());
|
|
43
|
+
// 7. External binding refresh comes from the new manager's metadata.
|
|
44
|
+
void manager.getMetadata().externalRuntime;
|
|
45
|
+
// 8. Drop child-run accumulators (ghost-group defense).
|
|
46
|
+
this.deps.clearLiveSubagentTools();
|
|
47
|
+
// 11. Settle every blocking request (behavior delta vs legacy).
|
|
48
|
+
this.deps.overlays.settleAll("session-switch");
|
|
49
|
+
// 9. Replace the entire renderer-facing history. The host has already
|
|
50
|
+
// rebound Agent.messages, so this projects the NEW session rather than
|
|
51
|
+
// appending a notice to the previous session's transcript.
|
|
52
|
+
this.deps.commit(manager, transcript);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Rebuild the transcript rows for a freshly committed session. */
|
|
56
|
+
buildTranscript(notice, queuedDisplayKeys) {
|
|
57
|
+
const rows = reconstructDisplayMessages([...this.deps.agent.getMessages()])
|
|
58
|
+
.filter((message) => !queuedDisplayKeys?.has(message.key ?? ""));
|
|
59
|
+
return notice
|
|
60
|
+
? [...rows, {
|
|
61
|
+
key: nextDisplayMessageKey("notice"),
|
|
62
|
+
role: "assistant",
|
|
63
|
+
content: notice,
|
|
64
|
+
syntheticKind: "ui_notice",
|
|
65
|
+
}]
|
|
66
|
+
: rows;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutable container for all controller-owned state. Single-writer: only the
|
|
3
|
+
* controller mutates; readers get immutable snapshots (snapshot.ts).
|
|
4
|
+
* `withTransaction` batches mutations into one snapshot + one notification.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ControllerState {
|
|
7
|
+
private transactionDepth;
|
|
8
|
+
private dirty;
|
|
9
|
+
/** Bump on every committed change; consumers use it for cache invalidation. */
|
|
10
|
+
version: number;
|
|
11
|
+
withTransaction<T>(fn: () => T): T;
|
|
12
|
+
/** Mark mutated; version advances when the outermost transaction exits. */
|
|
13
|
+
touch(): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutable container for all controller-owned state. Single-writer: only the
|
|
3
|
+
* controller mutates; readers get immutable snapshots (snapshot.ts).
|
|
4
|
+
* `withTransaction` batches mutations into one snapshot + one notification.
|
|
5
|
+
*/
|
|
6
|
+
export class ControllerState {
|
|
7
|
+
transactionDepth = 0;
|
|
8
|
+
dirty = false;
|
|
9
|
+
/** Bump on every committed change; consumers use it for cache invalidation. */
|
|
10
|
+
version = 0;
|
|
11
|
+
withTransaction(fn) {
|
|
12
|
+
this.transactionDepth += 1;
|
|
13
|
+
try {
|
|
14
|
+
const result = fn();
|
|
15
|
+
this.transactionDepth -= 1;
|
|
16
|
+
if (this.transactionDepth === 0 && this.dirty) {
|
|
17
|
+
this.dirty = false;
|
|
18
|
+
this.version += 1;
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
this.transactionDepth -= 1;
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Mark mutated; version advances when the outermost transaction exits. */
|
|
28
|
+
touch() {
|
|
29
|
+
if (this.transactionDepth > 0) {
|
|
30
|
+
this.dirty = true;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.version += 1;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task/goal/loop runtime orchestration (controller extraction §5,
|
|
3
|
+
* task-runtime-controller row).
|
|
4
|
+
*
|
|
5
|
+
* Owns the process-manager wiring from app.tsx:2220-2350:
|
|
6
|
+
* - owner-session capture so task_started/finished markers land in the
|
|
7
|
+
* spawning session regardless of the currently bound one
|
|
8
|
+
* - completion announcements for the current session
|
|
9
|
+
* - wake coalescing with fire-time gates (running turn / queued input /
|
|
10
|
+
* exit suppress the wake; the state-change reminder carries it instead)
|
|
11
|
+
* - held completions for non-current sessions replayed on switch-back
|
|
12
|
+
* - loop scheduling (defer-not-stack) and goal continuation stay
|
|
13
|
+
* host-injected run launchers — this class only owns timing and gates.
|
|
14
|
+
*/
|
|
15
|
+
import type { BackgroundTaskInfo } from "../../tasks/manager.js";
|
|
16
|
+
export interface TaskRuntimeDeps {
|
|
17
|
+
readonly processManager: {
|
|
18
|
+
listTasks(sessionFile?: string): BackgroundTaskInfo[];
|
|
19
|
+
getTask?(id: string): BackgroundTaskInfo | undefined;
|
|
20
|
+
onChange(listener: (task: BackgroundTaskInfo) => void): () => void;
|
|
21
|
+
onTaskFinished(listener: (task: BackgroundTaskInfo) => void): () => void;
|
|
22
|
+
taskOutputTail(id: string, maxBytes: number): string | undefined;
|
|
23
|
+
markTaskDelivered(id: string): void;
|
|
24
|
+
};
|
|
25
|
+
getSessionFile(): string | undefined;
|
|
26
|
+
appendMarker(file: string, marker: string, payload: string): void;
|
|
27
|
+
announceCompletion(task: BackgroundTaskInfo): void;
|
|
28
|
+
/** Hidden task-wake submission (host wires to the run launcher). */
|
|
29
|
+
submitTaskWake(summary: string): void;
|
|
30
|
+
readonly tasksAutoResume: boolean;
|
|
31
|
+
/** Live gates evaluated at wake-fire time. */
|
|
32
|
+
gates(): {
|
|
33
|
+
turnRunning: boolean;
|
|
34
|
+
queuedInputs: number;
|
|
35
|
+
exiting: boolean;
|
|
36
|
+
goalActive?: boolean;
|
|
37
|
+
};
|
|
38
|
+
readonly wakeDebounceMs?: number;
|
|
39
|
+
}
|
|
40
|
+
export declare class TaskRuntimeController {
|
|
41
|
+
private readonly deps;
|
|
42
|
+
private readonly ownerSessions;
|
|
43
|
+
private readonly pendingCompletions;
|
|
44
|
+
private readonly deferredWake;
|
|
45
|
+
private readonly wakeCoalescer;
|
|
46
|
+
private readonly unsubscribers;
|
|
47
|
+
private disposed;
|
|
48
|
+
constructor(deps: TaskRuntimeDeps);
|
|
49
|
+
start(): void;
|
|
50
|
+
dispose(): void;
|
|
51
|
+
snapshot(): BackgroundTaskInfo[];
|
|
52
|
+
/** Switch-back sweep: replay completions held for the now-current session. */
|
|
53
|
+
releaseHeldCompletions(sessionFile: string): BackgroundTaskInfo[];
|
|
54
|
+
/** Re-evaluate completions that landed while a turn, queue, or Goal owned the loop. */
|
|
55
|
+
onIdle(): void;
|
|
56
|
+
/** Snapshot results that the next beforeTurn hook is expected to inject. */
|
|
57
|
+
captureCurrentUndeliveredIds(): string[];
|
|
58
|
+
/** A provider turn_start confirms its beforeTurn hook accepted the snapshot. */
|
|
59
|
+
markResultsDelivered(ids: readonly string[]): void;
|
|
60
|
+
/** Persist tasks reaped after the UI controller has already stopped. */
|
|
61
|
+
persistTerminalSnapshot(): void;
|
|
62
|
+
private onTaskChange;
|
|
63
|
+
private onTaskFinished;
|
|
64
|
+
private persistTerminalMarker;
|
|
65
|
+
private fireWake;
|
|
66
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { TaskWakeCoalescer, shouldFireTaskWake, taskEligibleForWake, formatTaskWakeSummary } from "../../tasks/wake.js";
|
|
2
|
+
export class TaskRuntimeController {
|
|
3
|
+
deps;
|
|
4
|
+
ownerSessions = new Map();
|
|
5
|
+
pendingCompletions = new Map();
|
|
6
|
+
deferredWake = new Map();
|
|
7
|
+
wakeCoalescer;
|
|
8
|
+
unsubscribers = [];
|
|
9
|
+
disposed = false;
|
|
10
|
+
constructor(deps) {
|
|
11
|
+
this.deps = deps;
|
|
12
|
+
this.wakeCoalescer = new TaskWakeCoalescer(deps.wakeDebounceMs ?? 500, (tasks) => this.fireWake(tasks));
|
|
13
|
+
}
|
|
14
|
+
start() {
|
|
15
|
+
this.unsubscribers.push(this.deps.processManager.onChange((task) => this.onTaskChange(task)), this.deps.processManager.onTaskFinished((task) => this.onTaskFinished(task)));
|
|
16
|
+
// A manager can already own a task when the renderer/controller is
|
|
17
|
+
// recreated. Capture it exactly as a newly emitted running change.
|
|
18
|
+
for (const task of this.deps.processManager.listTasks(this.deps.getSessionFile())) {
|
|
19
|
+
this.onTaskChange(task);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
dispose() {
|
|
23
|
+
this.disposed = true;
|
|
24
|
+
for (const unsubscribe of this.unsubscribers)
|
|
25
|
+
unsubscribe();
|
|
26
|
+
this.unsubscribers.length = 0;
|
|
27
|
+
this.wakeCoalescer.cancel();
|
|
28
|
+
this.deferredWake.clear();
|
|
29
|
+
}
|
|
30
|
+
snapshot() {
|
|
31
|
+
return this.deps.processManager.listTasks(this.deps.getSessionFile());
|
|
32
|
+
}
|
|
33
|
+
/** Switch-back sweep: replay completions held for the now-current session. */
|
|
34
|
+
releaseHeldCompletions(sessionFile) {
|
|
35
|
+
const held = this.pendingCompletions.get(sessionFile);
|
|
36
|
+
if (!held?.length)
|
|
37
|
+
return [];
|
|
38
|
+
this.pendingCompletions.delete(sessionFile);
|
|
39
|
+
for (const task of held) {
|
|
40
|
+
this.deps.announceCompletion(task);
|
|
41
|
+
if (taskEligibleForWake(task))
|
|
42
|
+
this.wakeCoalescer.add(task);
|
|
43
|
+
}
|
|
44
|
+
return held;
|
|
45
|
+
}
|
|
46
|
+
/** Re-evaluate completions that landed while a turn, queue, or Goal owned the loop. */
|
|
47
|
+
onIdle() {
|
|
48
|
+
if (this.deferredWake.size === 0)
|
|
49
|
+
return;
|
|
50
|
+
const tasks = [...this.deferredWake.values()];
|
|
51
|
+
this.deferredWake.clear();
|
|
52
|
+
this.fireWake(tasks);
|
|
53
|
+
}
|
|
54
|
+
/** Snapshot results that the next beforeTurn hook is expected to inject. */
|
|
55
|
+
captureCurrentUndeliveredIds() {
|
|
56
|
+
const current = this.deps.getSessionFile();
|
|
57
|
+
return this.deps.processManager.listTasks(current)
|
|
58
|
+
.filter((task) => taskEligibleForWake(task) && task.deliveredAt === undefined)
|
|
59
|
+
.map((task) => task.id);
|
|
60
|
+
}
|
|
61
|
+
/** A provider turn_start confirms its beforeTurn hook accepted the snapshot. */
|
|
62
|
+
markResultsDelivered(ids) {
|
|
63
|
+
for (const id of ids) {
|
|
64
|
+
const task = this.deps.processManager.getTask?.(id);
|
|
65
|
+
if (task && taskEligibleForWake(task) && task.deliveredAt === undefined) {
|
|
66
|
+
this.deps.processManager.markTaskDelivered(id);
|
|
67
|
+
}
|
|
68
|
+
this.deferredWake.delete(id);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Persist tasks reaped after the UI controller has already stopped. */
|
|
72
|
+
persistTerminalSnapshot() {
|
|
73
|
+
for (const task of this.deps.processManager.listTasks()) {
|
|
74
|
+
if (task.status !== "running")
|
|
75
|
+
this.persistTerminalMarker(task);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
onTaskChange(task) {
|
|
79
|
+
if (task.status !== "running" || this.ownerSessions.has(task.id))
|
|
80
|
+
return;
|
|
81
|
+
const current = this.deps.getSessionFile();
|
|
82
|
+
if (!current || task.ownerSessionId !== current)
|
|
83
|
+
return;
|
|
84
|
+
this.ownerSessions.set(task.id, current);
|
|
85
|
+
this.deps.appendMarker(current, "task_started", JSON.stringify({
|
|
86
|
+
id: task.id,
|
|
87
|
+
pid: task.pid,
|
|
88
|
+
startedAt: task.startedAt,
|
|
89
|
+
command: task.command,
|
|
90
|
+
description: task.description,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
onTaskFinished(task) {
|
|
94
|
+
this.persistTerminalMarker(task);
|
|
95
|
+
const currentFile = this.deps.getSessionFile();
|
|
96
|
+
if (task.ownerSessionId !== currentFile) {
|
|
97
|
+
if (task.ownerSessionId) {
|
|
98
|
+
const held = this.pendingCompletions.get(task.ownerSessionId) ?? [];
|
|
99
|
+
if (!held.some((candidate) => candidate.id === task.id))
|
|
100
|
+
held.push(task);
|
|
101
|
+
this.pendingCompletions.set(task.ownerSessionId, held);
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.deps.announceCompletion(task);
|
|
106
|
+
if (taskEligibleForWake(task))
|
|
107
|
+
this.wakeCoalescer.add(task);
|
|
108
|
+
}
|
|
109
|
+
persistTerminalMarker(task) {
|
|
110
|
+
const ownerFile = this.ownerSessions.get(task.id);
|
|
111
|
+
if (ownerFile) {
|
|
112
|
+
this.deps.appendMarker(ownerFile, task.status === "killed" ? "task_killed" : "task_finished", JSON.stringify({
|
|
113
|
+
id: task.id,
|
|
114
|
+
status: task.status,
|
|
115
|
+
exitCode: task.exitCode ?? null,
|
|
116
|
+
command: task.command,
|
|
117
|
+
description: task.description,
|
|
118
|
+
startedAt: task.startedAt,
|
|
119
|
+
endedAt: task.endedAt,
|
|
120
|
+
outputLines: task.outputLines,
|
|
121
|
+
output: this.deps.processManager.taskOutputTail(task.id, 12_000),
|
|
122
|
+
}));
|
|
123
|
+
this.ownerSessions.delete(task.id);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
fireWake(tasks) {
|
|
127
|
+
if (this.disposed)
|
|
128
|
+
return;
|
|
129
|
+
if (this.deps.tasksAutoResume === false)
|
|
130
|
+
return;
|
|
131
|
+
const currentFile = this.deps.getSessionFile();
|
|
132
|
+
const eligible = tasks
|
|
133
|
+
.map((task) => this.deps.processManager.getTask?.(task.id) ?? task)
|
|
134
|
+
.filter((task) => task.ownerSessionId === currentFile)
|
|
135
|
+
.filter((task) => taskEligibleForWake(task) && task.deliveredAt === undefined);
|
|
136
|
+
if (eligible.length === 0)
|
|
137
|
+
return;
|
|
138
|
+
const gates = this.deps.gates();
|
|
139
|
+
if (!shouldFireTaskWake({
|
|
140
|
+
autoResume: true,
|
|
141
|
+
turnRunning: gates.turnRunning,
|
|
142
|
+
queuedInputs: gates.queuedInputs,
|
|
143
|
+
exiting: gates.exiting,
|
|
144
|
+
}) || gates.goalActive) {
|
|
145
|
+
if (!gates.exiting) {
|
|
146
|
+
for (const task of eligible)
|
|
147
|
+
this.deferredWake.set(task.id, task);
|
|
148
|
+
}
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const summary = formatTaskWakeSummary(eligible, (id) => this.deps.processManager.taskOutputTail(id, 2000));
|
|
152
|
+
for (const task of eligible) {
|
|
153
|
+
this.deps.processManager.markTaskDelivered(task.id);
|
|
154
|
+
this.deferredWake.delete(task.id);
|
|
155
|
+
}
|
|
156
|
+
this.deps.submitTaskWake(summary);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ResolvedTheme = "light" | "dark";
|
|
2
|
+
export declare function detectTerminalTheme(timeoutMs?: number): Promise<ResolvedTheme>;
|
|
3
|
+
export declare function parseColorFgBg(value: string | undefined): ResolvedTheme | null;
|
|
4
|
+
export declare function themeFromMacOsAppearance(output: string | null | undefined): ResolvedTheme;
|