@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,124 @@
|
|
|
1
|
+
import { nextDisplayMessageKey } from "./display-history.js";
|
|
2
|
+
import { mapTranscriptTools } from "./subagent-view.js";
|
|
3
|
+
/**
|
|
4
|
+
* Occurrence for a restored terminal marker whose task_started marker is not
|
|
5
|
+
* in the retained log (the task was launched before a conversation_clear).
|
|
6
|
+
* It must never land on a later launch that happens to reuse the task id.
|
|
7
|
+
*/
|
|
8
|
+
export const UNMATCHED_LAUNCH = -1;
|
|
9
|
+
function isLaunchRowFor(tool, taskId) {
|
|
10
|
+
return tool.metadata?.background === true && tool.metadata?.taskId === taskId;
|
|
11
|
+
}
|
|
12
|
+
function hasLanded(tool) {
|
|
13
|
+
return tool.metadata?.taskLifecycle !== undefined;
|
|
14
|
+
}
|
|
15
|
+
/** Launch rows for a task id in transcript order, one entry per tool call. */
|
|
16
|
+
function launchRowsFor(messages, taskId) {
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const rows = [];
|
|
19
|
+
for (const message of messages) {
|
|
20
|
+
const tools = message.toolCalls
|
|
21
|
+
?? message.parts?.flatMap((part) => (part.type === "tools" ? part.toolCalls : []))
|
|
22
|
+
?? [];
|
|
23
|
+
for (const tool of tools) {
|
|
24
|
+
if (!isLaunchRowFor(tool, taskId) || seen.has(tool.id))
|
|
25
|
+
continue;
|
|
26
|
+
seen.add(tool.id);
|
|
27
|
+
rows.push(tool);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return rows;
|
|
31
|
+
}
|
|
32
|
+
/** The launch row a terminal state should land on, or undefined. */
|
|
33
|
+
function targetLaunchRow(messages, taskId, occurrence) {
|
|
34
|
+
const rows = launchRowsFor(messages, taskId);
|
|
35
|
+
if (occurrence !== undefined)
|
|
36
|
+
return occurrence >= 0 ? rows[occurrence] : undefined;
|
|
37
|
+
for (let index = rows.length - 1; index >= 0; index -= 1) {
|
|
38
|
+
if (!hasLanded(rows[index]))
|
|
39
|
+
return rows[index];
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
function displayStatus(task) {
|
|
44
|
+
return task.status === "killed" ? "cancelled" : task.status === "failed" ? "failed" : "completed";
|
|
45
|
+
}
|
|
46
|
+
/** Returns a copy of `tool` carrying the task's terminal state. */
|
|
47
|
+
export function applyTaskLifecycleToTool(tool, task, output) {
|
|
48
|
+
return {
|
|
49
|
+
...tool,
|
|
50
|
+
status: displayStatus(task),
|
|
51
|
+
isError: task.status === "failed",
|
|
52
|
+
result: output?.trim() ? output : tool.result,
|
|
53
|
+
startedAt: task.startedAt ?? tool.startedAt,
|
|
54
|
+
metadata: {
|
|
55
|
+
...tool.metadata,
|
|
56
|
+
kind: "shell",
|
|
57
|
+
background: true,
|
|
58
|
+
taskId: task.id,
|
|
59
|
+
taskLifecycle: task.status,
|
|
60
|
+
exitCode: task.exitCode ?? null,
|
|
61
|
+
endedAt: task.endedAt,
|
|
62
|
+
outputLines: task.outputLines,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Lands the terminal state on a launch row that is still in the streaming
|
|
68
|
+
* accumulator. Mutates in place because the accumulator's parts share the
|
|
69
|
+
* same tool objects. A row whose tool_end has not arrived yet is skipped:
|
|
70
|
+
* the reducer would overwrite the merge when the result lands.
|
|
71
|
+
*/
|
|
72
|
+
export function mergeTaskLifecycleIntoLiveTools(tools, task, output) {
|
|
73
|
+
const tool = [...tools].reverse().find((candidate) => isLaunchRowFor(candidate, task.id) && !hasLanded(candidate));
|
|
74
|
+
if (!tool || tool.status === "running")
|
|
75
|
+
return false;
|
|
76
|
+
Object.assign(tool, applyTaskLifecycleToTool(tool, task, output));
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Lands the terminal state on exactly one committed launch row: the given
|
|
81
|
+
* launch occurrence, or (for live completions) the newest one still open.
|
|
82
|
+
*/
|
|
83
|
+
export function applyTaskLifecycleToMessages(messages, task, output, occurrence) {
|
|
84
|
+
const target = targetLaunchRow(messages, task.id, occurrence);
|
|
85
|
+
if (!target)
|
|
86
|
+
return { messages, merged: false };
|
|
87
|
+
const next = mapTranscriptTools(messages, (tool) => tool.id === target.id ? applyTaskLifecycleToTool(tool, task, output) : tool);
|
|
88
|
+
return { messages: next, merged: next !== messages };
|
|
89
|
+
}
|
|
90
|
+
/** Detached terminal row for a task whose launch row is not in the transcript. */
|
|
91
|
+
export function taskLifecycleDisplayMessage(task, output) {
|
|
92
|
+
const tool = applyTaskLifecycleToTool({
|
|
93
|
+
id: `task-lifecycle:${task.id}:${task.endedAt ?? Date.now()}`,
|
|
94
|
+
name: "bash",
|
|
95
|
+
args: {
|
|
96
|
+
command: task.command,
|
|
97
|
+
...(task.description ? { description: task.description } : {}),
|
|
98
|
+
},
|
|
99
|
+
startedAt: task.startedAt,
|
|
100
|
+
}, task, output);
|
|
101
|
+
return {
|
|
102
|
+
key: nextDisplayMessageKey("task"),
|
|
103
|
+
role: "assistant",
|
|
104
|
+
content: "",
|
|
105
|
+
toolCalls: [tool],
|
|
106
|
+
parts: [{ type: "tools", toolCalls: [tool] }],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Lands every terminal state on its launch row; tasks without one get a
|
|
111
|
+
* detached row appended in the given order.
|
|
112
|
+
*/
|
|
113
|
+
export function landTaskLifecycles(messages, terminals) {
|
|
114
|
+
let next = messages;
|
|
115
|
+
const detached = [];
|
|
116
|
+
for (const { task, output, occurrence } of terminals) {
|
|
117
|
+
const landed = applyTaskLifecycleToMessages(next, task, output, occurrence);
|
|
118
|
+
if (landed.merged)
|
|
119
|
+
next = landed.messages;
|
|
120
|
+
else
|
|
121
|
+
detached.push(taskLifecycleDisplayMessage(task, output));
|
|
122
|
+
}
|
|
123
|
+
return detached.length > 0 ? [...next, ...detached] : next;
|
|
124
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether we're running inside a terminal multiplexer (tmux or GNU screen).
|
|
3
|
+
*
|
|
4
|
+
* Ink commits settled transcript rows to native scrollback via <Static> and
|
|
5
|
+
* repaints only the short live region in place. When that live region SHRINKS
|
|
6
|
+
* (a turn settles, a steer commits, a run is interrupted), Ink erases the prior
|
|
7
|
+
* frame with a cursor-up + clear. Under a multiplexer that erase cannot reach
|
|
8
|
+
* rows that have already scrolled out of the pane, leaving a blank gap — so
|
|
9
|
+
* those transitions fall back to a full screen+scrollback reprint to stay clean.
|
|
10
|
+
*
|
|
11
|
+
* On a normal terminal that reprint is unnecessary (Ink's in-place erase works)
|
|
12
|
+
* and visible as a one-frame full-screen flash, so we skip it. This predicate is
|
|
13
|
+
* the gate. Pure + injectable for tests.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isMultiplexedTerminal(env?: NodeJS.ProcessEnv): boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether we're running inside a terminal multiplexer (tmux or GNU screen).
|
|
3
|
+
*
|
|
4
|
+
* Ink commits settled transcript rows to native scrollback via <Static> and
|
|
5
|
+
* repaints only the short live region in place. When that live region SHRINKS
|
|
6
|
+
* (a turn settles, a steer commits, a run is interrupted), Ink erases the prior
|
|
7
|
+
* frame with a cursor-up + clear. Under a multiplexer that erase cannot reach
|
|
8
|
+
* rows that have already scrolled out of the pane, leaving a blank gap — so
|
|
9
|
+
* those transitions fall back to a full screen+scrollback reprint to stay clean.
|
|
10
|
+
*
|
|
11
|
+
* On a normal terminal that reprint is unnecessary (Ink's in-place erase works)
|
|
12
|
+
* and visible as a one-frame full-screen flash, so we skip it. This predicate is
|
|
13
|
+
* the gate. Pure + injectable for tests.
|
|
14
|
+
*/
|
|
15
|
+
export function isMultiplexedTerminal(env = process.env) {
|
|
16
|
+
if (env.TMUX)
|
|
17
|
+
return true; // inside tmux
|
|
18
|
+
if (env.STY)
|
|
19
|
+
return true; // inside GNU screen
|
|
20
|
+
const term = env.TERM ?? "";
|
|
21
|
+
return /^(screen|tmux)(-|\.|$)/.test(term); // e.g. screen-256color, tmux-256color
|
|
22
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const ALTERNATE_SCROLL_ENABLE = "\u001B[?1007h";
|
|
2
|
+
export declare const ALTERNATE_SCROLL_DISABLE = "\u001B[?1007l";
|
|
3
|
+
export declare const MOUSE_REPORTING_ENABLE = "\u001B[?1000h\u001B[?1006h";
|
|
4
|
+
export declare const MOUSE_REPORTING_DISABLE = "\u001B[?1003l\u001B[?1002l\u001B[?1000l\u001B[?1005l\u001B[?1006l\u001B[?1015l";
|
|
5
|
+
interface TerminalMouseEnv {
|
|
6
|
+
BUBBLE_ENABLE_MOUSE?: string;
|
|
7
|
+
BUBBLE_TUI_MOUSE?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Terminal mouse reporting captures drag events before the host terminal can
|
|
11
|
+
* create a native text selection. Keep it opt-in until Bubble owns a full
|
|
12
|
+
* renderer-level selection/copy pipeline.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isTerminalMouseReportingEnabled(env?: TerminalMouseEnv): boolean;
|
|
15
|
+
export type MouseWheelDirection = "up" | "down";
|
|
16
|
+
export interface TerminalMouseInput {
|
|
17
|
+
strippedInput: string;
|
|
18
|
+
wheelDirections: MouseWheelDirection[];
|
|
19
|
+
hasMouse: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function sanitizeTerminalMouseInput(input: string): TerminalMouseInput;
|
|
22
|
+
export declare function transcriptScrollLinesFromMouseInput(mouseInput: TerminalMouseInput, options: {
|
|
23
|
+
overlayActive: boolean;
|
|
24
|
+
}): number[];
|
|
25
|
+
export declare function stripTerminalMouseSequences(input: string): string;
|
|
26
|
+
export declare function hasTerminalMouseSequence(input: string): boolean;
|
|
27
|
+
export declare function parseTerminalMouseWheel(input: string): MouseWheelDirection[];
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// DECSET 1007 makes terminals translate wheel gestures into Up/Down arrows
|
|
2
|
+
// while the alternate screen is active. Keep it disabled in Ink; otherwise
|
|
3
|
+
// terminals without kitty event metadata make wheel and keyboard arrows
|
|
4
|
+
// indistinguishable.
|
|
5
|
+
export const ALTERNATE_SCROLL_ENABLE = "\x1b[?1007h";
|
|
6
|
+
export const ALTERNATE_SCROLL_DISABLE = "\x1b[?1007l";
|
|
7
|
+
// Use normal mouse tracking + SGR encoding so wheel events reach the app as
|
|
8
|
+
// mouse reports instead of being translated into keyboard arrows.
|
|
9
|
+
export const MOUSE_REPORTING_ENABLE = "\x1b[?1000h\x1b[?1006h";
|
|
10
|
+
// Disable every common tracking mode defensively in case a crash or another
|
|
11
|
+
// renderer left the terminal in a reporting state.
|
|
12
|
+
export const MOUSE_REPORTING_DISABLE = "\x1b[?1003l\x1b[?1002l\x1b[?1000l\x1b[?1005l\x1b[?1006l\x1b[?1015l";
|
|
13
|
+
function envValueEnabled(value) {
|
|
14
|
+
if (!value)
|
|
15
|
+
return false;
|
|
16
|
+
return ["1", "true", "yes", "on"].includes(value.trim().toLowerCase());
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Terminal mouse reporting captures drag events before the host terminal can
|
|
20
|
+
* create a native text selection. Keep it opt-in until Bubble owns a full
|
|
21
|
+
* renderer-level selection/copy pipeline.
|
|
22
|
+
*/
|
|
23
|
+
export function isTerminalMouseReportingEnabled(env = process.env) {
|
|
24
|
+
return envValueEnabled(env.BUBBLE_ENABLE_MOUSE) || envValueEnabled(env.BUBBLE_TUI_MOUSE);
|
|
25
|
+
}
|
|
26
|
+
const ESCAPED_MOUSE_SEQUENCE_RE = /\x1b(?:\[<(\d+);\d+;\d+([mM])|\[M([\s\S])[\s\S]{2})/g;
|
|
27
|
+
const RAW_SGR_MOUSE_SEQUENCE_RE = /\[?<(\d+);\d+;\d+([mM])/g;
|
|
28
|
+
const RAW_SGR_MOUSE_INPUT_RE = /^(?:\[?<\d+;\d+;\d+[mM])+$/;
|
|
29
|
+
function wheelDirectionFromButtonCode(code) {
|
|
30
|
+
if ((code & 64) !== 64)
|
|
31
|
+
return undefined;
|
|
32
|
+
const wheelButton = code & 0b11;
|
|
33
|
+
if (wheelButton === 0)
|
|
34
|
+
return "up";
|
|
35
|
+
if (wheelButton === 1)
|
|
36
|
+
return "down";
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function collectWheelDirection(directions, code, final) {
|
|
40
|
+
if (final !== undefined && final !== "M")
|
|
41
|
+
return;
|
|
42
|
+
const direction = wheelDirectionFromButtonCode(code);
|
|
43
|
+
if (direction)
|
|
44
|
+
directions.push(direction);
|
|
45
|
+
}
|
|
46
|
+
export function sanitizeTerminalMouseInput(input) {
|
|
47
|
+
const wheelDirections = [];
|
|
48
|
+
let hasMouse = false;
|
|
49
|
+
ESCAPED_MOUSE_SEQUENCE_RE.lastIndex = 0;
|
|
50
|
+
let strippedInput = input.replace(ESCAPED_MOUSE_SEQUENCE_RE, (_sequence, sgrCode, sgrFinal, x10Button) => {
|
|
51
|
+
hasMouse = true;
|
|
52
|
+
const code = sgrCode !== undefined
|
|
53
|
+
? Number(sgrCode)
|
|
54
|
+
: (x10Button?.charCodeAt(0) ?? 32) - 32;
|
|
55
|
+
collectWheelDirection(wheelDirections, code, sgrFinal);
|
|
56
|
+
return "";
|
|
57
|
+
});
|
|
58
|
+
if (RAW_SGR_MOUSE_INPUT_RE.test(strippedInput)) {
|
|
59
|
+
hasMouse = true;
|
|
60
|
+
RAW_SGR_MOUSE_SEQUENCE_RE.lastIndex = 0;
|
|
61
|
+
strippedInput = strippedInput.replace(RAW_SGR_MOUSE_SEQUENCE_RE, (_sequence, sgrCode, sgrFinal) => {
|
|
62
|
+
collectWheelDirection(wheelDirections, Number(sgrCode), sgrFinal);
|
|
63
|
+
return "";
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return { strippedInput, wheelDirections, hasMouse };
|
|
67
|
+
}
|
|
68
|
+
export function transcriptScrollLinesFromMouseInput(mouseInput, options) {
|
|
69
|
+
if (options.overlayActive)
|
|
70
|
+
return [];
|
|
71
|
+
return mouseInput.wheelDirections.map((direction) => direction === "up" ? -1 : 1);
|
|
72
|
+
}
|
|
73
|
+
export function stripTerminalMouseSequences(input) {
|
|
74
|
+
return sanitizeTerminalMouseInput(input).strippedInput;
|
|
75
|
+
}
|
|
76
|
+
export function hasTerminalMouseSequence(input) {
|
|
77
|
+
ESCAPED_MOUSE_SEQUENCE_RE.lastIndex = 0;
|
|
78
|
+
return ESCAPED_MOUSE_SEQUENCE_RE.test(input) || RAW_SGR_MOUSE_INPUT_RE.test(input);
|
|
79
|
+
}
|
|
80
|
+
export function parseTerminalMouseWheel(input) {
|
|
81
|
+
return sanitizeTerminalMouseInput(input).wheelDirections;
|
|
82
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Apply a configured foreground without letting a malformed override crash rendering. */
|
|
2
|
+
export declare function themeForeground(color: string | undefined, text: string): string;
|
|
3
|
+
/** Apply a configured background without letting a malformed override crash rendering. */
|
|
4
|
+
export declare function themeBackground(color: string | undefined, text: string): string;
|
|
5
|
+
export declare function themeDim(color: string | undefined, text: string): string;
|
|
6
|
+
/** ANSI pair used by the alternate-screen renderer to paint every cell. */
|
|
7
|
+
export declare function themeBackgroundCodes(color: string | undefined): {
|
|
8
|
+
open: string;
|
|
9
|
+
close: string;
|
|
10
|
+
} | undefined;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
const NAMED_COLORS = new Set([
|
|
3
|
+
"black",
|
|
4
|
+
"red",
|
|
5
|
+
"green",
|
|
6
|
+
"yellow",
|
|
7
|
+
"blue",
|
|
8
|
+
"magenta",
|
|
9
|
+
"cyan",
|
|
10
|
+
"white",
|
|
11
|
+
"gray",
|
|
12
|
+
"grey",
|
|
13
|
+
]);
|
|
14
|
+
function isHexColor(value) {
|
|
15
|
+
return /^#[0-9a-f]{6}$/i.test(value) || /^#[0-9a-f]{3}$/i.test(value);
|
|
16
|
+
}
|
|
17
|
+
/** Apply a configured foreground without letting a malformed override crash rendering. */
|
|
18
|
+
export function themeForeground(color, text) {
|
|
19
|
+
if (!color)
|
|
20
|
+
return text;
|
|
21
|
+
if (isHexColor(color))
|
|
22
|
+
return chalk.hex(color)(text);
|
|
23
|
+
const normalized = color.toLowerCase();
|
|
24
|
+
if (NAMED_COLORS.has(normalized))
|
|
25
|
+
return chalk[normalized](text);
|
|
26
|
+
return text;
|
|
27
|
+
}
|
|
28
|
+
/** Apply a configured background without letting a malformed override crash rendering. */
|
|
29
|
+
export function themeBackground(color, text) {
|
|
30
|
+
if (!color)
|
|
31
|
+
return text;
|
|
32
|
+
if (isHexColor(color))
|
|
33
|
+
return chalk.bgHex(color)(text);
|
|
34
|
+
const normalized = color.toLowerCase();
|
|
35
|
+
if (!NAMED_COLORS.has(normalized))
|
|
36
|
+
return text;
|
|
37
|
+
switch (normalized) {
|
|
38
|
+
case "black": return chalk.bgBlack(text);
|
|
39
|
+
case "red": return chalk.bgRed(text);
|
|
40
|
+
case "green": return chalk.bgGreen(text);
|
|
41
|
+
case "yellow": return chalk.bgYellow(text);
|
|
42
|
+
case "blue": return chalk.bgBlue(text);
|
|
43
|
+
case "magenta": return chalk.bgMagenta(text);
|
|
44
|
+
case "cyan": return chalk.bgCyan(text);
|
|
45
|
+
case "white": return chalk.bgWhite(text);
|
|
46
|
+
case "gray":
|
|
47
|
+
case "grey": return chalk.bgGray(text);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function themeDim(color, text) {
|
|
51
|
+
return chalk.dim(themeForeground(color, text));
|
|
52
|
+
}
|
|
53
|
+
/** ANSI pair used by the alternate-screen renderer to paint every cell. */
|
|
54
|
+
export function themeBackgroundCodes(color) {
|
|
55
|
+
if (!color)
|
|
56
|
+
return undefined;
|
|
57
|
+
if (isHexColor(color)) {
|
|
58
|
+
const expanded = color.length === 4
|
|
59
|
+
? color.slice(1).split("").map((part) => part + part).join("")
|
|
60
|
+
: color.slice(1);
|
|
61
|
+
const channels = expanded.match(/../g)?.map((part) => Number.parseInt(part, 16));
|
|
62
|
+
if (!channels || channels.length !== 3)
|
|
63
|
+
return undefined;
|
|
64
|
+
return { open: `\x1b[48;2;${channels.join(";")}m`, close: "\x1b[49m" };
|
|
65
|
+
}
|
|
66
|
+
const normalized = color.toLowerCase();
|
|
67
|
+
if (!NAMED_COLORS.has(normalized))
|
|
68
|
+
return undefined;
|
|
69
|
+
const code = normalized === "black" ? 40
|
|
70
|
+
: normalized === "red" ? 41
|
|
71
|
+
: normalized === "green" ? 42
|
|
72
|
+
: normalized === "yellow" ? 43
|
|
73
|
+
: normalized === "blue" ? 44
|
|
74
|
+
: normalized === "magenta" ? 45
|
|
75
|
+
: normalized === "cyan" ? 46
|
|
76
|
+
: normalized === "white" ? 47
|
|
77
|
+
: 100;
|
|
78
|
+
return { open: `\x1b[${code}m`, close: "\x1b[49m" };
|
|
79
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer-neutral theme tokens shared by the terminal UI surfaces.
|
|
3
|
+
*/
|
|
4
|
+
export type ResolvedTheme = "light" | "dark";
|
|
5
|
+
export type ThemeMode = "auto" | ResolvedTheme;
|
|
6
|
+
export interface Theme {
|
|
7
|
+
user: string;
|
|
8
|
+
agent: string;
|
|
9
|
+
error: string;
|
|
10
|
+
warning: string;
|
|
11
|
+
success: string;
|
|
12
|
+
/**
|
|
13
|
+
* Painted canvas color. `undefined` means "do not paint" — the terminal's
|
|
14
|
+
* own background shows through, so the app never fights the user's terminal
|
|
15
|
+
* palette (e.g. forcing pure black inside a soft-dark terminal). Users can
|
|
16
|
+
* still force a painted canvas via `theme.overrides.background` in config.
|
|
17
|
+
*/
|
|
18
|
+
background: string | undefined;
|
|
19
|
+
accent: string;
|
|
20
|
+
/** Welcome banner border. */
|
|
21
|
+
bannerBorder: string;
|
|
22
|
+
/** Welcome banner logo/title gradient endpoints (top→bottom, left→right). */
|
|
23
|
+
bannerGradientFrom: string;
|
|
24
|
+
bannerGradientTo: string;
|
|
25
|
+
border: string;
|
|
26
|
+
borderActive: string;
|
|
27
|
+
backgroundPanel: string;
|
|
28
|
+
backgroundElement: string;
|
|
29
|
+
inputBorder: string;
|
|
30
|
+
inputBorderDisabled: string;
|
|
31
|
+
inputBg: string;
|
|
32
|
+
inputBgDisabled: string;
|
|
33
|
+
inputText: string;
|
|
34
|
+
inputPlaceholder: string;
|
|
35
|
+
muted: string;
|
|
36
|
+
dim: string;
|
|
37
|
+
thinking: string;
|
|
38
|
+
thinkingDim: string;
|
|
39
|
+
toolName: string;
|
|
40
|
+
toolResult: string;
|
|
41
|
+
toolError: string;
|
|
42
|
+
toolPending: string;
|
|
43
|
+
/** Markdown inline `code` spans. */
|
|
44
|
+
inlineCode: string;
|
|
45
|
+
traceAction: string;
|
|
46
|
+
traceCount: string;
|
|
47
|
+
traceDetail: string;
|
|
48
|
+
traceCommand: string;
|
|
49
|
+
tracePending: string;
|
|
50
|
+
/** Neutral painted surfaces for pointer-hovered / selected tool traces. */
|
|
51
|
+
traceHoverBg: string;
|
|
52
|
+
traceSelectedBg: string;
|
|
53
|
+
userMessageBorder: string;
|
|
54
|
+
userMessageBg: string;
|
|
55
|
+
userMessageText: string;
|
|
56
|
+
/** Painted band backgrounds for diff lines inside user-message cards. */
|
|
57
|
+
diffAdd: string;
|
|
58
|
+
diffRemove: string;
|
|
59
|
+
/** Foregrounds for +/- diff lines rendered without a painted background. */
|
|
60
|
+
diffAddFg: string;
|
|
61
|
+
diffRemoveFg: string;
|
|
62
|
+
}
|
|
63
|
+
export declare const darkTheme: Theme;
|
|
64
|
+
export declare const lightTheme: Theme;
|
|
65
|
+
export declare function canvasBackgroundFor(mode: ThemeMode, resolved: ResolvedTheme, terminalTheme: ResolvedTheme): string | undefined;
|
|
66
|
+
/** Build a palette from one of the shipped themes plus user overrides. */
|
|
67
|
+
export declare function paletteFor(resolved: ResolvedTheme, overrides?: Record<string, string>): Theme;
|
|
68
|
+
/** Resolve the complete live palette used by an interactive TUI instance. */
|
|
69
|
+
export declare function resolveThemePalette(mode: ThemeMode, terminalTheme: ResolvedTheme, overrides?: Record<string, string>): {
|
|
70
|
+
resolved: ResolvedTheme;
|
|
71
|
+
palette: Theme;
|
|
72
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export const darkTheme = {
|
|
2
|
+
user: "green",
|
|
3
|
+
agent: "blue",
|
|
4
|
+
error: "red",
|
|
5
|
+
warning: "yellow",
|
|
6
|
+
success: "green",
|
|
7
|
+
background: undefined,
|
|
8
|
+
accent: "cyan",
|
|
9
|
+
bannerBorder: "#38bdf8",
|
|
10
|
+
bannerGradientFrom: "#67e8f9",
|
|
11
|
+
bannerGradientTo: "#a78bfa",
|
|
12
|
+
border: "gray",
|
|
13
|
+
borderActive: "cyan",
|
|
14
|
+
backgroundPanel: "#141414",
|
|
15
|
+
backgroundElement: "#1c1c24",
|
|
16
|
+
inputBorder: "#8A7FC6",
|
|
17
|
+
inputBorderDisabled: "#4a4754",
|
|
18
|
+
inputBg: "#1c1c24",
|
|
19
|
+
inputBgDisabled: "#161620",
|
|
20
|
+
inputText: "#f3f3f7",
|
|
21
|
+
inputPlaceholder: "#6c6a78",
|
|
22
|
+
muted: "gray",
|
|
23
|
+
dim: "gray",
|
|
24
|
+
thinking: "magenta",
|
|
25
|
+
thinkingDim: "gray",
|
|
26
|
+
toolName: "cyan",
|
|
27
|
+
toolResult: "gray",
|
|
28
|
+
toolError: "red",
|
|
29
|
+
toolPending: "yellow",
|
|
30
|
+
inlineCode: "#a78bfa",
|
|
31
|
+
traceAction: "#E89A6B",
|
|
32
|
+
traceCount: "#c9c1bd",
|
|
33
|
+
traceDetail: "gray",
|
|
34
|
+
traceCommand: "#59BCE8",
|
|
35
|
+
tracePending: "yellow",
|
|
36
|
+
traceHoverBg: "#232323",
|
|
37
|
+
traceSelectedBg: "#2B2B2B",
|
|
38
|
+
userMessageBorder: "#8A7FC6",
|
|
39
|
+
userMessageBg: "#2A2A2A",
|
|
40
|
+
userMessageText: "#f3f3f7",
|
|
41
|
+
diffAdd: "#1a3d1a",
|
|
42
|
+
diffRemove: "#3d1a1a",
|
|
43
|
+
diffAddFg: "green",
|
|
44
|
+
diffRemoveFg: "red",
|
|
45
|
+
};
|
|
46
|
+
export const lightTheme = {
|
|
47
|
+
user: "#356FD2",
|
|
48
|
+
agent: "#171717",
|
|
49
|
+
error: "#B62633",
|
|
50
|
+
warning: "#8B4A00",
|
|
51
|
+
success: "#2F7D4A",
|
|
52
|
+
background: undefined,
|
|
53
|
+
accent: "#8B4A00",
|
|
54
|
+
bannerBorder: "#356FD2",
|
|
55
|
+
bannerGradientFrom: "#0E7490",
|
|
56
|
+
bannerGradientTo: "#6D28D9",
|
|
57
|
+
border: "#B9BDB8",
|
|
58
|
+
borderActive: "#356FD2",
|
|
59
|
+
backgroundPanel: "#F6F6F3",
|
|
60
|
+
backgroundElement: "#ECEDEA",
|
|
61
|
+
inputBorder: "#356FD2",
|
|
62
|
+
inputBorderDisabled: "#D7DAD4",
|
|
63
|
+
inputBg: "#F1F3F0",
|
|
64
|
+
inputBgDisabled: "#F6F6F3",
|
|
65
|
+
inputText: "#171717",
|
|
66
|
+
inputPlaceholder: "#6F7377",
|
|
67
|
+
muted: "#6F7377",
|
|
68
|
+
dim: "#8B9094",
|
|
69
|
+
thinking: "#5F666D",
|
|
70
|
+
thinkingDim: "#8B9094",
|
|
71
|
+
toolName: "#495057",
|
|
72
|
+
toolResult: "#171717",
|
|
73
|
+
toolError: "#B62633",
|
|
74
|
+
toolPending: "#8B4A00",
|
|
75
|
+
inlineCode: "#6D28D9",
|
|
76
|
+
traceAction: "#8B4A00",
|
|
77
|
+
traceCount: "#6F7377",
|
|
78
|
+
traceDetail: "#8B9094",
|
|
79
|
+
traceCommand: "#257E8A",
|
|
80
|
+
tracePending: "#8B4A00",
|
|
81
|
+
traceHoverBg: "#E8E8E5",
|
|
82
|
+
traceSelectedBg: "#DDDFDB",
|
|
83
|
+
userMessageBorder: "#356FD2",
|
|
84
|
+
userMessageBg: "#F1F3F0",
|
|
85
|
+
userMessageText: "#234B93",
|
|
86
|
+
diffAdd: "#D7E8D8",
|
|
87
|
+
diffRemove: "#F7DADC",
|
|
88
|
+
diffAddFg: "#2F7D4A",
|
|
89
|
+
diffRemoveFg: "#B62633",
|
|
90
|
+
};
|
|
91
|
+
const paintedCanvas = {
|
|
92
|
+
dark: "#0A0A0A",
|
|
93
|
+
light: "#FCFCFA",
|
|
94
|
+
};
|
|
95
|
+
export function canvasBackgroundFor(mode, resolved, terminalTheme) {
|
|
96
|
+
if (mode === "auto" || resolved === terminalTheme)
|
|
97
|
+
return undefined;
|
|
98
|
+
return paintedCanvas[resolved];
|
|
99
|
+
}
|
|
100
|
+
/** Build a palette from one of the shipped themes plus user overrides. */
|
|
101
|
+
export function paletteFor(resolved, overrides) {
|
|
102
|
+
const base = resolved === "light" ? lightTheme : darkTheme;
|
|
103
|
+
if (!overrides)
|
|
104
|
+
return { ...base };
|
|
105
|
+
const palette = { ...base };
|
|
106
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
107
|
+
if (typeof value !== "string" || !(key in base))
|
|
108
|
+
continue;
|
|
109
|
+
palette[key] = value;
|
|
110
|
+
}
|
|
111
|
+
return palette;
|
|
112
|
+
}
|
|
113
|
+
/** Resolve the complete live palette used by an interactive TUI instance. */
|
|
114
|
+
export function resolveThemePalette(mode, terminalTheme, overrides) {
|
|
115
|
+
const resolved = mode === "auto" ? terminalTheme : mode;
|
|
116
|
+
const palette = paletteFor(resolved, overrides);
|
|
117
|
+
if (palette.background === undefined) {
|
|
118
|
+
palette.background = canvasBackgroundFor(mode, resolved, terminalTheme);
|
|
119
|
+
}
|
|
120
|
+
return { resolved, palette };
|
|
121
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { DisplayToolCall } from "./display-history.js";
|
|
2
|
+
export type TraceGroupKind = "list" | "read" | "search" | "execute" | "edit" | "write" | "subagent" | "other";
|
|
3
|
+
export interface TraceGroup {
|
|
4
|
+
kind: TraceGroupKind;
|
|
5
|
+
title: string;
|
|
6
|
+
raw: DisplayToolCall[];
|
|
7
|
+
count?: number;
|
|
8
|
+
noun?: string;
|
|
9
|
+
command?: string;
|
|
10
|
+
/** Model-provided one-line summary of what the command does (bash `description` arg). */
|
|
11
|
+
description?: string;
|
|
12
|
+
/** Original command split into lines, line breaks preserved (execute groups only). */
|
|
13
|
+
commandLines?: string[];
|
|
14
|
+
items: string[];
|
|
15
|
+
previewLines: string[];
|
|
16
|
+
errorLines: string[];
|
|
17
|
+
omitted: number;
|
|
18
|
+
pending: boolean;
|
|
19
|
+
hasError: boolean;
|
|
20
|
+
errorCount: number;
|
|
21
|
+
startedAt?: number;
|
|
22
|
+
/** Final lifecycle label for traces whose tool call launches background work. */
|
|
23
|
+
statusLabel?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TraceGroupOptions {
|
|
26
|
+
maxItems?: number;
|
|
27
|
+
maxPreviewLines?: number;
|
|
28
|
+
homeDir?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function buildTraceGroups(toolCalls: DisplayToolCall[], options?: TraceGroupOptions): TraceGroup[];
|
|
31
|
+
export declare function formatTracePath(value: unknown, homeDir?: string): string;
|
|
32
|
+
export declare function formatElapsed(startedAt: number | undefined, now?: number): string | null;
|
|
33
|
+
export declare function traceGroupLabel(group: TraceGroup): string;
|
|
34
|
+
/**
|
|
35
|
+
* An execute command is shown inline in the header only when nothing is lost:
|
|
36
|
+
* no description competing for the slot, a single logical line, and it fits
|
|
37
|
+
* the width budget. Otherwise the full command renders as a wrapped block
|
|
38
|
+
* below the header — commands are never clipped mid-line.
|
|
39
|
+
*/
|
|
40
|
+
export declare function shouldInlineExecuteCommand(group: TraceGroup, widthBudget: number): boolean;
|
|
41
|
+
/** Visible command-block lines for compact rendering, capped at `maxLines`. */
|
|
42
|
+
export declare function executeCommandBlock(group: TraceGroup, maxLines: number): {
|
|
43
|
+
lines: string[];
|
|
44
|
+
omitted: number;
|
|
45
|
+
};
|