@bubblebrain-ai/bubble 0.0.63 → 0.0.65
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 +399 -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 +256 -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 +584 -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,213 @@
|
|
|
1
|
+
import { getCurrentVersion } from "./update/index.js";
|
|
2
|
+
const MAX_FIELD_CHARS = 160;
|
|
3
|
+
const RUNTIME_STARTED_AT = Date.now();
|
|
4
|
+
const TRANSPORT_ERROR_CODES = new Set([
|
|
5
|
+
"UND_ERR_SOCKET", "UND_ERR_CONNECT_TIMEOUT", "UND_ERR_HEADERS_TIMEOUT", "UND_ERR_BODY_TIMEOUT",
|
|
6
|
+
"ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT", "ENOTFOUND", "EAI_AGAIN",
|
|
7
|
+
]);
|
|
8
|
+
const SAFE_ERROR_CODES = new Map([
|
|
9
|
+
["authentication_error", "authentication_error"],
|
|
10
|
+
["bad_request", "bad_request"],
|
|
11
|
+
["context_length_exceeded", "context_length_exceeded"],
|
|
12
|
+
["failed_precondition", "failed_precondition"],
|
|
13
|
+
["internal_error", "internal_error"],
|
|
14
|
+
["invalid_argument", "invalid_argument"],
|
|
15
|
+
["invalid_request_error", "invalid_request_error"],
|
|
16
|
+
["invalidparameter", "invalid_parameter"],
|
|
17
|
+
["invalid_parameter", "invalid_parameter"],
|
|
18
|
+
["location_not_supported", "location_not_supported"],
|
|
19
|
+
["permission_denied", "permission_denied"],
|
|
20
|
+
["rate_limit_exceeded", "rate_limit_exceeded"],
|
|
21
|
+
["rate_limit_exhausted", "rate_limit_exhausted"],
|
|
22
|
+
["resource_exhausted", "resource_exhausted"],
|
|
23
|
+
["service_unavailable", "service_unavailable"],
|
|
24
|
+
["timeout", "timeout"],
|
|
25
|
+
["unauthenticated", "unauthenticated"],
|
|
26
|
+
["unsupported_parameter", "unsupported_parameter"],
|
|
27
|
+
["unsupported_value", "unsupported_value"],
|
|
28
|
+
...Array.from(TRANSPORT_ERROR_CODES, (code) => [code.toLowerCase(), code]),
|
|
29
|
+
]);
|
|
30
|
+
const SAFE_PARAMETER_NAMES = new Set([
|
|
31
|
+
"contents",
|
|
32
|
+
"frequency_penalty",
|
|
33
|
+
"generationConfig",
|
|
34
|
+
"input",
|
|
35
|
+
"max_output_tokens",
|
|
36
|
+
"max_tokens",
|
|
37
|
+
"messages",
|
|
38
|
+
"model",
|
|
39
|
+
"n",
|
|
40
|
+
"presence_penalty",
|
|
41
|
+
"prompt",
|
|
42
|
+
"reasoning_effort",
|
|
43
|
+
"response_format",
|
|
44
|
+
"seed",
|
|
45
|
+
"stop",
|
|
46
|
+
"stream",
|
|
47
|
+
"temperature",
|
|
48
|
+
"thinkingConfig",
|
|
49
|
+
"thinkingLevel",
|
|
50
|
+
"thinking_level",
|
|
51
|
+
"tool_choice",
|
|
52
|
+
"tools",
|
|
53
|
+
"topP",
|
|
54
|
+
"top_p",
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* Build the allowlisted diagnostic record written to a session log.
|
|
58
|
+
*
|
|
59
|
+
* Deliberately do not serialize the original error object: SDK errors can
|
|
60
|
+
* contain request headers, request bodies, response bodies and stacks. Only
|
|
61
|
+
* scalar identifiers plus a locally-authored error category are retained.
|
|
62
|
+
*/
|
|
63
|
+
export function createSanitizedProviderError(error, context) {
|
|
64
|
+
const sources = errorSources(error);
|
|
65
|
+
const rawMessage = firstString(sources, ["message"])
|
|
66
|
+
|| (typeof error === "string" ? error : "Provider request failed.");
|
|
67
|
+
const httpStatus = firstHttpStatus(sources);
|
|
68
|
+
// A wrapper's unknown code must not hide an allowlisted nested transport code.
|
|
69
|
+
const code = sources.flatMap((source) => ["code", "errorCode", "type"].map((key) => typeof source[key] === "string" ? sanitizeErrorCode(source[key]) : undefined)).find((value) => value !== undefined);
|
|
70
|
+
const parameter = sanitizeParameterName(firstScalarString(sources, ["param", "parameter"]));
|
|
71
|
+
return {
|
|
72
|
+
providerId: sanitizeControlledIdentifier(context.providerId),
|
|
73
|
+
modelId: sanitizeControlledIdentifier(context.modelId),
|
|
74
|
+
...(context.model ? { model: sanitizeControlledIdentifier(context.model) } : {}),
|
|
75
|
+
thinkingLevel: context.thinkingLevel,
|
|
76
|
+
name: "ProviderError",
|
|
77
|
+
message: code && TRANSPORT_ERROR_CODES.has(code)
|
|
78
|
+
? code.includes("TIMEOUT") || code === "ETIMEDOUT" ? "Provider request timed out." : "Provider connection failed."
|
|
79
|
+
: sanitizeProviderErrorText(rawMessage),
|
|
80
|
+
...(httpStatus !== undefined ? { httpStatus } : {}),
|
|
81
|
+
...(code ? { code } : {}),
|
|
82
|
+
...(parameter ? { parameter } : {}),
|
|
83
|
+
messageCount: Math.max(0, Math.trunc(context.messageCount)),
|
|
84
|
+
toolCount: Math.max(0, Math.trunc(context.toolCount)),
|
|
85
|
+
...sanitizedRequestShape(sources),
|
|
86
|
+
bubbleVersion: getCurrentVersion(),
|
|
87
|
+
pid: process.pid,
|
|
88
|
+
runtimeStartedAt: RUNTIME_STARTED_AT,
|
|
89
|
+
...(context.retry ? { retry: {
|
|
90
|
+
attempt: context.retry.attempt,
|
|
91
|
+
maxAttempts: context.retry.maxAttempts,
|
|
92
|
+
} } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function sanitizedRequestShape(sources) {
|
|
96
|
+
const raw = sources.find(source => asRecord(source.requestShape))?.requestShape;
|
|
97
|
+
const shape = asRecord(raw);
|
|
98
|
+
if (!shape)
|
|
99
|
+
return {};
|
|
100
|
+
const safe = {};
|
|
101
|
+
for (const key of ["messages", "tools", "assistant", "emptyAssistant", "reasoning", "toolCalls", "toolResults", "contentChars"]) {
|
|
102
|
+
const value = shape[key];
|
|
103
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0)
|
|
104
|
+
safe[key] = value;
|
|
105
|
+
}
|
|
106
|
+
return { requestShape: safe };
|
|
107
|
+
}
|
|
108
|
+
export function sanitizeProviderErrorText(value) {
|
|
109
|
+
const text = value.replace(/[\r\n\t]+/g, " ").replace(/\s{2,}/g, " ").trim();
|
|
110
|
+
// Fail closed: provider/SDK messages can embed request headers, bodies,
|
|
111
|
+
// prompts, URLs or credentials in formats a denylist cannot anticipate.
|
|
112
|
+
// Persist only fixed, locally-authored summaries selected by broad error
|
|
113
|
+
// categories; never return any substring copied from the provider message.
|
|
114
|
+
if (/user location (?:is )?not supported|location[^.]{0,40}(?:unsupported|not supported)/i.test(text)) {
|
|
115
|
+
return "User location is not supported for API use.";
|
|
116
|
+
}
|
|
117
|
+
if (/context[_ -]?(?:length|window)|prompt (?:is )?too long|maximum context|token limit/i.test(text)) {
|
|
118
|
+
return "Provider context limit was exceeded.";
|
|
119
|
+
}
|
|
120
|
+
if (/rate limit|too many requests|quota|resource exhausted|\b429\b/i.test(text)) {
|
|
121
|
+
return "Provider rate limit was exceeded.";
|
|
122
|
+
}
|
|
123
|
+
if (/unauthori[sz]ed|authentication|invalid (?:api )?key|missing (?:api )?key|\b401\b/i.test(text)) {
|
|
124
|
+
return "Provider authentication failed.";
|
|
125
|
+
}
|
|
126
|
+
if (/forbidden|permission denied|access denied|\b403\b/i.test(text)) {
|
|
127
|
+
return "Provider denied the request.";
|
|
128
|
+
}
|
|
129
|
+
if (/unprocessable entity|\b422\b/i.test(text)) {
|
|
130
|
+
return "Provider rejected the request (unprocessable entity).";
|
|
131
|
+
}
|
|
132
|
+
if (/invalid[^.]{0,60}(?:parameter|argument)|unsupported[^.]{0,60}(?:parameter|argument)|bad request|\b400\b/i.test(text)) {
|
|
133
|
+
return "Provider rejected a request parameter.";
|
|
134
|
+
}
|
|
135
|
+
if (/timed? ?out|timeout/i.test(text)) {
|
|
136
|
+
return "Provider request timed out.";
|
|
137
|
+
}
|
|
138
|
+
if (/network|connection|socket|fetch failed|stream (?:closed|interrupted)/i.test(text)) {
|
|
139
|
+
return "Provider connection failed.";
|
|
140
|
+
}
|
|
141
|
+
if (/abort|cancel/i.test(text)) {
|
|
142
|
+
return "Provider request was cancelled.";
|
|
143
|
+
}
|
|
144
|
+
return "Provider request failed.";
|
|
145
|
+
}
|
|
146
|
+
function errorSources(error) {
|
|
147
|
+
const sources = [];
|
|
148
|
+
const pending = [error];
|
|
149
|
+
const seen = new Set();
|
|
150
|
+
while (pending.length && sources.length < 12) {
|
|
151
|
+
const source = asRecord(pending.shift());
|
|
152
|
+
if (!source || seen.has(source))
|
|
153
|
+
continue;
|
|
154
|
+
seen.add(source);
|
|
155
|
+
sources.push(source);
|
|
156
|
+
pending.push(source.error, source.cause);
|
|
157
|
+
}
|
|
158
|
+
return sources;
|
|
159
|
+
}
|
|
160
|
+
function asRecord(value) {
|
|
161
|
+
return value !== null && (typeof value === "object" || typeof value === "function")
|
|
162
|
+
? value
|
|
163
|
+
: undefined;
|
|
164
|
+
}
|
|
165
|
+
function firstString(sources, keys) {
|
|
166
|
+
for (const source of sources) {
|
|
167
|
+
for (const key of keys) {
|
|
168
|
+
const value = source[key];
|
|
169
|
+
if (typeof value === "string" && value.trim())
|
|
170
|
+
return value.trim();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
function firstScalarString(sources, keys) {
|
|
176
|
+
for (const source of sources) {
|
|
177
|
+
for (const key of keys) {
|
|
178
|
+
const value = source[key];
|
|
179
|
+
if ((typeof value === "string" || typeof value === "number") && String(value).trim()) {
|
|
180
|
+
return String(value).trim();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
function firstHttpStatus(sources) {
|
|
187
|
+
for (const source of sources) {
|
|
188
|
+
for (const key of ["status", "statusCode", "httpStatus"]) {
|
|
189
|
+
const value = source[key];
|
|
190
|
+
const numeric = typeof value === "number" ? value : Number(value);
|
|
191
|
+
if (Number.isInteger(numeric) && numeric >= 100 && numeric <= 599)
|
|
192
|
+
return numeric;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
function sanitizeControlledIdentifier(value) {
|
|
198
|
+
const normalized = value.trim();
|
|
199
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._:/@+-]*$/.test(normalized))
|
|
200
|
+
return "unknown";
|
|
201
|
+
return normalized.slice(0, MAX_FIELD_CHARS);
|
|
202
|
+
}
|
|
203
|
+
function sanitizeErrorCode(value) {
|
|
204
|
+
if (!value)
|
|
205
|
+
return undefined;
|
|
206
|
+
return SAFE_ERROR_CODES.get(value.trim().toLowerCase());
|
|
207
|
+
}
|
|
208
|
+
function sanitizeParameterName(value) {
|
|
209
|
+
if (!value)
|
|
210
|
+
return undefined;
|
|
211
|
+
const normalized = value.trim();
|
|
212
|
+
return SAFE_PARAMETER_NAMES.has(normalized) ? normalized : undefined;
|
|
213
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grok subscription provider support.
|
|
3
|
+
*
|
|
4
|
+
* The CLI chat proxy (cli-chat-proxy.grok.com) speaks the OpenAI
|
|
5
|
+
* chat-completions protocol, so the generic OpenAI provider does the heavy
|
|
6
|
+
* lifting. This module supplies the two Grok-specific pieces: the client
|
|
7
|
+
* identity headers the proxy gates on, and a fetch wrapper that keeps the
|
|
8
|
+
* OAuth bearer fresh across long sessions.
|
|
9
|
+
*/
|
|
10
|
+
import type { OAuthCredentials } from "./oauth/types.js";
|
|
11
|
+
import { type ChatGptFetch } from "./network/chatgpt-transport.js";
|
|
12
|
+
import { type ThinkingLevel } from "./types.js";
|
|
13
|
+
export declare const GROK_SUBSCRIPTION_BASE_URL = "https://cli-chat-proxy.grok.com/v1";
|
|
14
|
+
export declare const GROK_CLIENT_VERSION = "0.2.93";
|
|
15
|
+
export declare function isGrokSubscriptionBaseUrl(baseURL: string): boolean;
|
|
16
|
+
export declare function buildGrokSubscriptionHeaders(): Record<string, string>;
|
|
17
|
+
export interface GrokAuthAdapter {
|
|
18
|
+
getCredentials: () => OAuthCredentials | undefined | Promise<OAuthCredentials | undefined>;
|
|
19
|
+
refreshCredentials: (current?: OAuthCredentials) => Promise<OAuthCredentials>;
|
|
20
|
+
isExpired?: (credentials: OAuthCredentials, graceMs: number) => boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wrap a fetch so every request carries a fresh subscription bearer. The
|
|
24
|
+
* OpenAI client's static apiKey would go stale after ~6h; this reads (and
|
|
25
|
+
* proactively refreshes) the stored OAuth credentials per request instead.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createGrokSubscriptionFetch(auth: GrokAuthAdapter, baseFetch?: ChatGptFetch): ChatGptFetch;
|
|
28
|
+
export interface GrokModelDescriptor {
|
|
29
|
+
id: string;
|
|
30
|
+
name?: string;
|
|
31
|
+
/** Server-declared context window (the /models `context_window` field). */
|
|
32
|
+
contextWindow?: number;
|
|
33
|
+
/** Server-declared reasoning effort ladder, sorted ascending. */
|
|
34
|
+
reasoningEfforts?: ThinkingLevel[];
|
|
35
|
+
/** Server-declared default effort (the /models `reasoning_effort` field). */
|
|
36
|
+
defaultReasoningEffort?: ThinkingLevel;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch the model list for a Grok subscription account. The CLI chat proxy
|
|
40
|
+
* gates on the grok-cli identity headers plus a fresh OAuth bearer, so this
|
|
41
|
+
* rides the same refreshing fetch used for chat requests instead of a raw
|
|
42
|
+
* global fetch. The /models payload carries richer metadata than id+name —
|
|
43
|
+
* `context_window`, `reasoning_efforts`, and the default `reasoning_effort` —
|
|
44
|
+
* which this surfaces so discovery can stop inferring them. Throws on a
|
|
45
|
+
* non-2xx so callers fall back to the curated catalog.
|
|
46
|
+
*/
|
|
47
|
+
export declare function fetchGrokSubscriptionModels(baseURL: string, auth: GrokAuthAdapter, options?: {
|
|
48
|
+
timeoutMs?: number;
|
|
49
|
+
fetch?: ChatGptFetch;
|
|
50
|
+
}): Promise<GrokModelDescriptor[]>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grok subscription provider support.
|
|
3
|
+
*
|
|
4
|
+
* The CLI chat proxy (cli-chat-proxy.grok.com) speaks the OpenAI
|
|
5
|
+
* chat-completions protocol, so the generic OpenAI provider does the heavy
|
|
6
|
+
* lifting. This module supplies the two Grok-specific pieces: the client
|
|
7
|
+
* identity headers the proxy gates on, and a fetch wrapper that keeps the
|
|
8
|
+
* OAuth bearer fresh across long sessions.
|
|
9
|
+
*/
|
|
10
|
+
import { waitForOAuth } from "./oauth/refresh-control.js";
|
|
11
|
+
import { getChatGptFetch } from "./network/chatgpt-transport.js";
|
|
12
|
+
import { THINKING_LEVELS } from "./types.js";
|
|
13
|
+
export const GROK_SUBSCRIPTION_BASE_URL = "https://cli-chat-proxy.grok.com/v1";
|
|
14
|
+
// The proxy rejects requests below a minimum client version; identify as the
|
|
15
|
+
// same pinned CLI build Bubble verifies elsewhere.
|
|
16
|
+
export const GROK_CLIENT_VERSION = "0.2.93";
|
|
17
|
+
const TOKEN_REFRESH_GRACE_MS = 5 * 60 * 1000;
|
|
18
|
+
export function isGrokSubscriptionBaseUrl(baseURL) {
|
|
19
|
+
const normalized = baseURL.trim().replace(/\/+$/, "");
|
|
20
|
+
return normalized === GROK_SUBSCRIPTION_BASE_URL || normalized.startsWith(`${GROK_SUBSCRIPTION_BASE_URL}/`);
|
|
21
|
+
}
|
|
22
|
+
export function buildGrokSubscriptionHeaders() {
|
|
23
|
+
return {
|
|
24
|
+
"User-Agent": "grok-cli",
|
|
25
|
+
"x-grok-client-version": GROK_CLIENT_VERSION,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Wrap a fetch so every request carries a fresh subscription bearer. The
|
|
30
|
+
* OpenAI client's static apiKey would go stale after ~6h; this reads (and
|
|
31
|
+
* proactively refreshes) the stored OAuth credentials per request instead.
|
|
32
|
+
*/
|
|
33
|
+
export function createGrokSubscriptionFetch(auth, baseFetch = getChatGptFetch()) {
|
|
34
|
+
let refreshPromise;
|
|
35
|
+
async function freshAccessToken() {
|
|
36
|
+
let credentials = await auth.getCredentials();
|
|
37
|
+
if (!credentials)
|
|
38
|
+
return undefined;
|
|
39
|
+
const expired = auth.isExpired
|
|
40
|
+
? auth.isExpired(credentials, TOKEN_REFRESH_GRACE_MS)
|
|
41
|
+
: Date.now() >= credentials.expiresAt - TOKEN_REFRESH_GRACE_MS;
|
|
42
|
+
if ((expired || !credentials.accessToken) && credentials.refreshToken) {
|
|
43
|
+
if (!refreshPromise) {
|
|
44
|
+
refreshPromise = auth.refreshCredentials(credentials).finally(() => {
|
|
45
|
+
refreshPromise = undefined;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
credentials = await refreshPromise;
|
|
49
|
+
}
|
|
50
|
+
return credentials.accessToken || undefined;
|
|
51
|
+
}
|
|
52
|
+
return async (input, init) => {
|
|
53
|
+
const signal = init?.signal ?? (input instanceof Request ? input.signal : undefined);
|
|
54
|
+
signal?.throwIfAborted();
|
|
55
|
+
const token = await waitForOAuth(freshAccessToken(), signal);
|
|
56
|
+
signal?.throwIfAborted();
|
|
57
|
+
if (!token) {
|
|
58
|
+
return baseFetch(input, init);
|
|
59
|
+
}
|
|
60
|
+
const headers = new Headers(init?.headers);
|
|
61
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
62
|
+
return baseFetch(input, { ...(init ?? {}), headers });
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetch the model list for a Grok subscription account. The CLI chat proxy
|
|
67
|
+
* gates on the grok-cli identity headers plus a fresh OAuth bearer, so this
|
|
68
|
+
* rides the same refreshing fetch used for chat requests instead of a raw
|
|
69
|
+
* global fetch. The /models payload carries richer metadata than id+name —
|
|
70
|
+
* `context_window`, `reasoning_efforts`, and the default `reasoning_effort` —
|
|
71
|
+
* which this surfaces so discovery can stop inferring them. Throws on a
|
|
72
|
+
* non-2xx so callers fall back to the curated catalog.
|
|
73
|
+
*/
|
|
74
|
+
export async function fetchGrokSubscriptionModels(baseURL, auth, options = {}) {
|
|
75
|
+
const fetchImpl = createGrokSubscriptionFetch(auth, options.fetch);
|
|
76
|
+
const base = baseURL.trim().replace(/\/+$/, "");
|
|
77
|
+
const response = await fetchImpl(`${base}/models`, {
|
|
78
|
+
headers: buildGrokSubscriptionHeaders(),
|
|
79
|
+
signal: AbortSignal.timeout(options.timeoutMs ?? 5_000),
|
|
80
|
+
});
|
|
81
|
+
if (!response.ok)
|
|
82
|
+
throw new Error(`HTTP ${response.status}`);
|
|
83
|
+
const payload = (await response.json());
|
|
84
|
+
const entries = payload.data ?? payload.models ?? [];
|
|
85
|
+
return entries
|
|
86
|
+
.filter((entry) => typeof entry?.id === "string" && entry.id.trim().length > 0)
|
|
87
|
+
.map((entry) => {
|
|
88
|
+
const id = entry.id;
|
|
89
|
+
const rawEfforts = Array.isArray(entry.reasoning_efforts) ? entry.reasoning_efforts : [];
|
|
90
|
+
const reasoningEfforts = rawEfforts
|
|
91
|
+
.map((effort) => (effort && typeof effort === "object" && typeof effort.value === "string"
|
|
92
|
+
? effort.value
|
|
93
|
+
: undefined))
|
|
94
|
+
.filter((value) => typeof value === "string" && THINKING_LEVELS.includes(value))
|
|
95
|
+
.sort((a, b) => THINKING_LEVELS.indexOf(a) - THINKING_LEVELS.indexOf(b));
|
|
96
|
+
const defaultReasoningEffort = typeof entry.reasoning_effort === "string"
|
|
97
|
+
&& THINKING_LEVELS.includes(entry.reasoning_effort)
|
|
98
|
+
? entry.reasoning_effort
|
|
99
|
+
: undefined;
|
|
100
|
+
return {
|
|
101
|
+
id,
|
|
102
|
+
name: typeof entry.name === "string" ? entry.name : undefined,
|
|
103
|
+
contextWindow: typeof entry.context_window === "number" && entry.context_window > 0
|
|
104
|
+
? entry.context_window
|
|
105
|
+
: undefined,
|
|
106
|
+
reasoningEfforts: reasoningEfforts.length > 0 ? reasoningEfforts : undefined,
|
|
107
|
+
defaultReasoningEffort,
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable provider-level model constraints.
|
|
3
|
+
*
|
|
4
|
+
* Catalog discovery describes what a provider currently lists; it is not a
|
|
5
|
+
* runtime security boundary. A fixed policy is different: Bubble deliberately
|
|
6
|
+
* exposes and permits exactly one model for that provider, across every host
|
|
7
|
+
* and caller (TUI, CLI, SDK, Feishu, parent agents, and subagents).
|
|
8
|
+
*/
|
|
9
|
+
export declare const OPENROUTER_MODEL_ID = "stealth/ox-alpha";
|
|
10
|
+
export declare function getFixedProviderModelId(providerId: string): string | undefined;
|
|
11
|
+
export declare function isProviderModelAllowed(providerId: string, modelId: string): boolean;
|
|
12
|
+
export declare function providerModelPolicyError(providerId: string, modelId: string): string | undefined;
|
|
13
|
+
export declare function assertProviderModelAllowed(providerId: string, modelId: string): void;
|
|
14
|
+
export declare function filterProviderModels<T extends {
|
|
15
|
+
id: string;
|
|
16
|
+
}>(providerId: string, models: readonly T[]): T[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable provider-level model constraints.
|
|
3
|
+
*
|
|
4
|
+
* Catalog discovery describes what a provider currently lists; it is not a
|
|
5
|
+
* runtime security boundary. A fixed policy is different: Bubble deliberately
|
|
6
|
+
* exposes and permits exactly one model for that provider, across every host
|
|
7
|
+
* and caller (TUI, CLI, SDK, Feishu, parent agents, and subagents).
|
|
8
|
+
*/
|
|
9
|
+
export const OPENROUTER_MODEL_ID = "stealth/ox-alpha";
|
|
10
|
+
const FIXED_PROVIDER_MODELS = {
|
|
11
|
+
openrouter: OPENROUTER_MODEL_ID,
|
|
12
|
+
};
|
|
13
|
+
export function getFixedProviderModelId(providerId) {
|
|
14
|
+
return FIXED_PROVIDER_MODELS[providerId.toLowerCase()];
|
|
15
|
+
}
|
|
16
|
+
export function isProviderModelAllowed(providerId, modelId) {
|
|
17
|
+
const fixedModelId = getFixedProviderModelId(providerId);
|
|
18
|
+
return !fixedModelId || modelId === fixedModelId;
|
|
19
|
+
}
|
|
20
|
+
export function providerModelPolicyError(providerId, modelId) {
|
|
21
|
+
const fixedModelId = getFixedProviderModelId(providerId);
|
|
22
|
+
if (!fixedModelId || modelId === fixedModelId)
|
|
23
|
+
return undefined;
|
|
24
|
+
return `Provider "${providerId}" is fixed to model "${fixedModelId}"; received "${modelId}".`;
|
|
25
|
+
}
|
|
26
|
+
export function assertProviderModelAllowed(providerId, modelId) {
|
|
27
|
+
const error = providerModelPolicyError(providerId, modelId);
|
|
28
|
+
if (error)
|
|
29
|
+
throw new Error(error);
|
|
30
|
+
}
|
|
31
|
+
export function filterProviderModels(providerId, models) {
|
|
32
|
+
return models.filter((model) => isProviderModelAllowed(providerId, model.id));
|
|
33
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type Provider, type ReasoningEffort, type ThinkingLevel, type TokenUsage } from "./types.js";
|
|
2
|
+
import type { OAuthCredentials } from "./oauth/types.js";
|
|
3
|
+
import { type ChatGptFetch } from "./network/chatgpt-transport.js";
|
|
4
|
+
export interface CodexModelDescriptor {
|
|
5
|
+
id: string;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
contextWindow?: number;
|
|
8
|
+
useResponsesLite?: boolean;
|
|
9
|
+
reasoningLevels?: ReasoningEffort[];
|
|
10
|
+
defaultReasoningLevel?: ReasoningEffort;
|
|
11
|
+
priority?: number;
|
|
12
|
+
visibility?: string;
|
|
13
|
+
minimalClientVersion?: string;
|
|
14
|
+
/** Server-declared per-tool-output token cap (truncation_policy.limit when mode=tokens). */
|
|
15
|
+
toolOutputTokenLimit?: number;
|
|
16
|
+
}
|
|
17
|
+
/** The Codex client version Bubble claims; the account catalog the server returns depends on it. */
|
|
18
|
+
export declare function getCodexClientVersion(): string;
|
|
19
|
+
export declare function isOpenAICodexBaseUrl(baseURL: string): boolean;
|
|
20
|
+
export declare function getOpenAICodexFallbackModels(): string[];
|
|
21
|
+
export interface OpenAICodexAuthAdapter {
|
|
22
|
+
getCredentials: () => OAuthCredentials | undefined | Promise<OAuthCredentials | undefined>;
|
|
23
|
+
refreshCredentials: (current?: OAuthCredentials) => Promise<OAuthCredentials>;
|
|
24
|
+
isExpired?: (credentials: OAuthCredentials, graceMs: number) => boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function extractChatGptAccountId(accessToken: string): string | undefined;
|
|
27
|
+
export declare function createOpenAICodexProvider(options: {
|
|
28
|
+
providerId?: string;
|
|
29
|
+
apiKey: string;
|
|
30
|
+
baseURL: string;
|
|
31
|
+
thinkingLevel?: ThinkingLevel;
|
|
32
|
+
promptCacheKey?: string;
|
|
33
|
+
auth?: OpenAICodexAuthAdapter;
|
|
34
|
+
fetch?: ChatGptFetch;
|
|
35
|
+
}): Provider;
|
|
36
|
+
export declare function normalizeOpenAICodexUsage(usage: any): TokenUsage;
|
|
37
|
+
export declare function buildOpenAICodexPromptCacheKey(input: {
|
|
38
|
+
seed?: string;
|
|
39
|
+
providerId?: string;
|
|
40
|
+
model: string;
|
|
41
|
+
}): string | undefined;
|
|
42
|
+
export declare function fetchOpenAICodexModels(options: {
|
|
43
|
+
baseURL: string;
|
|
44
|
+
accessToken: string;
|
|
45
|
+
fetch?: ChatGptFetch;
|
|
46
|
+
}): Promise<CodexModelDescriptor[]>;
|
|
47
|
+
export interface OpenAICodexModelCatalogResult {
|
|
48
|
+
descriptors: CodexModelDescriptor[];
|
|
49
|
+
status: "success" | "unavailable";
|
|
50
|
+
/** Why each discovery path failed, when status is "unavailable". */
|
|
51
|
+
reason?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fetches the account-scoped Codex catalog while preserving the distinction
|
|
55
|
+
* between an authoritative empty catalog and discovery being unavailable.
|
|
56
|
+
*/
|
|
57
|
+
export declare function fetchOpenAICodexModelCatalog(options: {
|
|
58
|
+
baseURL: string;
|
|
59
|
+
accessToken: string;
|
|
60
|
+
fetch?: ChatGptFetch;
|
|
61
|
+
/** Bounds both catalog GETs; a stalled warm-up must not pin the in-flight slot. */
|
|
62
|
+
signal?: AbortSignal;
|
|
63
|
+
/** Per-request timeout, so a slow first path still leaves the fallback a full window. */
|
|
64
|
+
timeoutMs?: number;
|
|
65
|
+
}): Promise<OpenAICodexModelCatalogResult>;
|
|
66
|
+
export declare function sortCodexModelDescriptors(descriptors: CodexModelDescriptor[]): CodexModelDescriptor[];
|