@vascend/talos 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +202 -0
- package/dist/backend/asset-events.d.ts +31 -0
- package/dist/backend/asset-events.js +149 -0
- package/dist/backend/assets.d.ts +31 -0
- package/dist/backend/assets.js +210 -0
- package/dist/backend/auth.d.ts +18 -0
- package/dist/backend/auth.js +59 -0
- package/dist/backend/config.d.ts +14 -0
- package/dist/backend/config.js +41 -0
- package/dist/backend/conversations.d.ts +21 -0
- package/dist/backend/conversations.js +141 -0
- package/dist/backend/crypto.d.ts +9 -0
- package/dist/backend/crypto.js +68 -0
- package/dist/backend/engine.d.ts +13 -0
- package/dist/backend/engine.js +78 -0
- package/dist/backend/http.d.ts +25 -0
- package/dist/backend/http.js +112 -0
- package/dist/backend/index.d.ts +1 -0
- package/dist/backend/index.js +24 -0
- package/dist/backend/routes.d.ts +14 -0
- package/dist/backend/routes.js +169 -0
- package/dist/backend/sdk.d.ts +12 -0
- package/dist/backend/sdk.js +11 -0
- package/dist/backend/server.d.ts +12 -0
- package/dist/backend/server.js +91 -0
- package/dist/backend/temp-image-store.d.ts +46 -0
- package/dist/backend/temp-image-store.js +197 -0
- package/dist/backend/types.d.ts +103 -0
- package/dist/backend/types.js +29 -0
- package/dist/backend/users.d.ts +13 -0
- package/dist/backend/users.js +76 -0
- package/dist/backend/ws-handler.d.ts +14 -0
- package/dist/backend/ws-handler.js +72 -0
- package/dist/backend/ws.d.ts +19 -0
- package/dist/backend/ws.js +146 -0
- package/dist/core/agent.d.ts +56 -0
- package/dist/core/agent.js +1783 -0
- package/dist/core/background.d.ts +45 -0
- package/dist/core/background.js +140 -0
- package/dist/core/bootstrap.d.ts +45 -0
- package/dist/core/bootstrap.js +294 -0
- package/dist/core/cli-args.d.ts +41 -0
- package/dist/core/cli-args.js +282 -0
- package/dist/core/collapsible-output.d.ts +38 -0
- package/dist/core/collapsible-output.js +143 -0
- package/dist/core/compaction-checkpoint.d.ts +9 -0
- package/dist/core/compaction-checkpoint.js +58 -0
- package/dist/core/compaction.d.ts +42 -0
- package/dist/core/compaction.js +270 -0
- package/dist/core/config.d.ts +49 -0
- package/dist/core/config.js +417 -0
- package/dist/core/context-ledger.d.ts +99 -0
- package/dist/core/context-ledger.js +222 -0
- package/dist/core/context-policy.d.ts +17 -0
- package/dist/core/context-policy.js +81 -0
- package/dist/core/continuation-review.d.ts +23 -0
- package/dist/core/continuation-review.js +64 -0
- package/dist/core/crash-report.d.ts +3 -0
- package/dist/core/crash-report.js +27 -0
- package/dist/core/credentials.d.ts +11 -0
- package/dist/core/credentials.js +183 -0
- package/dist/core/doctor.d.ts +24 -0
- package/dist/core/doctor.js +125 -0
- package/dist/core/effort.d.ts +5 -0
- package/dist/core/effort.js +42 -0
- package/dist/core/env-paths.d.ts +3 -0
- package/dist/core/env-paths.js +38 -0
- package/dist/core/execution-guidance.d.ts +9 -0
- package/dist/core/execution-guidance.js +73 -0
- package/dist/core/execution-target.d.ts +41 -0
- package/dist/core/execution-target.js +69 -0
- package/dist/core/file-coordination.d.ts +66 -0
- package/dist/core/file-coordination.js +176 -0
- package/dist/core/file-lease-store.d.ts +14 -0
- package/dist/core/file-lease-store.js +89 -0
- package/dist/core/image-limits.d.ts +26 -0
- package/dist/core/image-limits.js +205 -0
- package/dist/core/interruptible-completion.d.ts +3 -0
- package/dist/core/interruptible-completion.js +42 -0
- package/dist/core/kingdoms-mode-state.d.ts +24 -0
- package/dist/core/kingdoms-mode-state.js +139 -0
- package/dist/core/licenza.d.ts +38 -0
- package/dist/core/licenza.js +125 -0
- package/dist/core/model-limits.d.ts +2 -0
- package/dist/core/model-limits.js +36 -0
- package/dist/core/output-lifecycle.d.ts +44 -0
- package/dist/core/output-lifecycle.js +190 -0
- package/dist/core/package-update.d.ts +15 -0
- package/dist/core/package-update.js +121 -0
- package/dist/core/permission-queue.d.ts +2 -0
- package/dist/core/permission-queue.js +20 -0
- package/dist/core/prompt-attachment.d.ts +21 -0
- package/dist/core/prompt-attachment.js +123 -0
- package/dist/core/request-plan.d.ts +16 -0
- package/dist/core/request-plan.js +36 -0
- package/dist/core/run-timing.d.ts +17 -0
- package/dist/core/run-timing.js +123 -0
- package/dist/core/self-update.d.ts +17 -0
- package/dist/core/self-update.js +54 -0
- package/dist/core/session-refs.d.ts +27 -0
- package/dist/core/session-refs.js +126 -0
- package/dist/core/session-storage.d.ts +4 -0
- package/dist/core/session-storage.js +48 -0
- package/dist/core/session-title.d.ts +1 -0
- package/dist/core/session-title.js +21 -0
- package/dist/core/session-usage.d.ts +17 -0
- package/dist/core/session-usage.js +74 -0
- package/dist/core/session.d.ts +58 -0
- package/dist/core/session.js +296 -0
- package/dist/core/settings.d.ts +17 -0
- package/dist/core/settings.js +107 -0
- package/dist/core/storage-retention.d.ts +21 -0
- package/dist/core/storage-retention.js +227 -0
- package/dist/core/text-sanitize.d.ts +1 -0
- package/dist/core/text-sanitize.js +35 -0
- package/dist/core/tool-artifacts.d.ts +6 -0
- package/dist/core/tool-artifacts.js +51 -0
- package/dist/core/tool-compress.d.ts +8 -0
- package/dist/core/tool-compress.js +111 -0
- package/dist/core/tool-executor.d.ts +16 -0
- package/dist/core/tool-executor.js +97 -0
- package/dist/core/tool-result-index.d.ts +52 -0
- package/dist/core/tool-result-index.js +327 -0
- package/dist/core/tool-result-store.d.ts +38 -0
- package/dist/core/tool-result-store.js +190 -0
- package/dist/core/tool-scheduler.d.ts +16 -0
- package/dist/core/tool-scheduler.js +35 -0
- package/dist/core/trust.d.ts +21 -0
- package/dist/core/trust.js +95 -0
- package/dist/core/types.d.ts +402 -0
- package/dist/core/types.js +1 -0
- package/dist/core/update-check.d.ts +26 -0
- package/dist/core/update-check.js +89 -0
- package/dist/core/update-process.d.ts +10 -0
- package/dist/core/update-process.js +31 -0
- package/dist/core/user-inbox.d.ts +23 -0
- package/dist/core/user-inbox.js +56 -0
- package/dist/core/user-input.d.ts +10 -0
- package/dist/core/user-input.js +35 -0
- package/dist/core/version.d.ts +1 -0
- package/dist/core/version.js +10 -0
- package/dist/core/vibe-modes.d.ts +38 -0
- package/dist/core/vibe-modes.js +383 -0
- package/dist/core/workspace-roots.d.ts +13 -0
- package/dist/core/workspace-roots.js +91 -0
- package/dist/core/workspace-sessions.d.ts +51 -0
- package/dist/core/workspace-sessions.js +243 -0
- package/dist/cowork/client.d.ts +29 -0
- package/dist/cowork/client.js +49 -0
- package/dist/cowork/engine-bridge.d.ts +22 -0
- package/dist/cowork/engine-bridge.js +98 -0
- package/dist/cowork/index.d.ts +11 -0
- package/dist/cowork/index.js +16 -0
- package/dist/cowork/ipc.d.ts +97 -0
- package/dist/cowork/ipc.js +96 -0
- package/dist/cowork/manager.d.ts +66 -0
- package/dist/cowork/manager.js +325 -0
- package/dist/cowork/store.d.ts +23 -0
- package/dist/cowork/store.js +182 -0
- package/dist/cowork/sync.d.ts +20 -0
- package/dist/cowork/sync.js +164 -0
- package/dist/cowork/types.d.ts +78 -0
- package/dist/cowork/types.js +21 -0
- package/dist/extensions/ext-tools.d.ts +3 -0
- package/dist/extensions/ext-tools.js +73 -0
- package/dist/extensions/loader.d.ts +91 -0
- package/dist/extensions/loader.js +474 -0
- package/dist/extensions/settings.d.ts +20 -0
- package/dist/extensions/settings.js +86 -0
- package/dist/extensions/types.d.ts +219 -0
- package/dist/extensions/types.js +1 -0
- package/dist/horizon/async-queue.d.ts +9 -0
- package/dist/horizon/async-queue.js +46 -0
- package/dist/horizon/engine.d.ts +85 -0
- package/dist/horizon/engine.js +603 -0
- package/dist/horizon/index.d.ts +4 -0
- package/dist/horizon/index.js +2 -0
- package/dist/horizon/main-team.d.ts +163 -0
- package/dist/horizon/main-team.js +774 -0
- package/dist/horizon/types.d.ts +233 -0
- package/dist/horizon/types.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +233 -0
- package/dist/mcp/protocol.d.ts +81 -0
- package/dist/mcp/protocol.js +122 -0
- package/dist/package.json +1 -0
- package/dist/packages/packages.d.ts +12 -0
- package/dist/packages/packages.js +323 -0
- package/dist/prompts/templates.d.ts +13 -0
- package/dist/prompts/templates.js +139 -0
- package/dist/providers/anthropic-oauth.d.ts +13 -0
- package/dist/providers/anthropic-oauth.js +124 -0
- package/dist/providers/anthropic.d.ts +27 -0
- package/dist/providers/anthropic.js +526 -0
- package/dist/providers/catalog.d.ts +15 -0
- package/dist/providers/catalog.js +166 -0
- package/dist/providers/effort.d.ts +12 -0
- package/dist/providers/effort.js +102 -0
- package/dist/providers/model-catalog.d.ts +43 -0
- package/dist/providers/model-catalog.js +70 -0
- package/dist/providers/model-effort.d.ts +5 -0
- package/dist/providers/model-effort.js +43 -0
- package/dist/providers/model-registry.d.ts +39 -0
- package/dist/providers/model-registry.js +142 -0
- package/dist/providers/models-dev.d.ts +9 -0
- package/dist/providers/models-dev.js +97 -0
- package/dist/providers/oauth-callback-server.d.ts +28 -0
- package/dist/providers/oauth-callback-server.js +184 -0
- package/dist/providers/oauth-orchestrator.d.ts +58 -0
- package/dist/providers/oauth-orchestrator.js +159 -0
- package/dist/providers/oauth-store.d.ts +12 -0
- package/dist/providers/oauth-store.js +139 -0
- package/dist/providers/open-browser.d.ts +20 -0
- package/dist/providers/open-browser.js +92 -0
- package/dist/providers/openai-compat.d.ts +14 -0
- package/dist/providers/openai-compat.js +523 -0
- package/dist/providers/openai-oauth.d.ts +15 -0
- package/dist/providers/openai-oauth.js +382 -0
- package/dist/providers/openrouter-auth.d.ts +73 -0
- package/dist/providers/openrouter-auth.js +321 -0
- package/dist/providers/openrouter-manual-fallback.d.ts +25 -0
- package/dist/providers/openrouter-manual-fallback.js +161 -0
- package/dist/providers/openrouter.d.ts +15 -0
- package/dist/providers/openrouter.js +107 -0
- package/dist/providers/plan-limits.d.ts +6 -0
- package/dist/providers/plan-limits.js +175 -0
- package/dist/providers/provider-reset.d.ts +4 -0
- package/dist/providers/provider-reset.js +83 -0
- package/dist/providers/quota-limits.d.ts +4 -0
- package/dist/providers/quota-limits.js +33 -0
- package/dist/providers/registry.d.ts +33 -0
- package/dist/providers/registry.js +213 -0
- package/dist/providers/retry.d.ts +37 -0
- package/dist/providers/retry.js +347 -0
- package/dist/rpc/server.d.ts +23 -0
- package/dist/rpc/server.js +222 -0
- package/dist/sdk.d.ts +67 -0
- package/dist/sdk.js +64 -0
- package/dist/skills/skills.d.ts +17 -0
- package/dist/skills/skills.js +155 -0
- package/dist/text-sanitize.js +28 -0
- package/dist/tools/ask-user.d.ts +2 -0
- package/dist/tools/ask-user.js +60 -0
- package/dist/tools/builtin.d.ts +48 -0
- package/dist/tools/builtin.js +2494 -0
- package/dist/tools/capabilities.d.ts +5 -0
- package/dist/tools/capabilities.js +55 -0
- package/dist/tools/computer-capture.d.ts +2 -0
- package/dist/tools/computer-capture.js +91 -0
- package/dist/tools/computer-posix.d.ts +5 -0
- package/dist/tools/computer-posix.js +136 -0
- package/dist/tools/computer-use.d.ts +14 -0
- package/dist/tools/computer-use.js +108 -0
- package/dist/tools/discovery.d.ts +12 -0
- package/dist/tools/discovery.js +205 -0
- package/dist/tools/execute.d.ts +2 -0
- package/dist/tools/execute.js +73 -0
- package/dist/tools/normalize-input.d.ts +17 -0
- package/dist/tools/normalize-input.js +174 -0
- package/dist/tools/output-artifact.d.ts +3 -0
- package/dist/tools/output-artifact.js +80 -0
- package/dist/tools/pagination.d.ts +15 -0
- package/dist/tools/pagination.js +93 -0
- package/dist/tools/plan-status.d.ts +2 -0
- package/dist/tools/plan-status.js +109 -0
- package/dist/tools/program-input.d.ts +3 -0
- package/dist/tools/program-input.js +19 -0
- package/dist/tools/program.d.ts +3 -0
- package/dist/tools/program.js +567 -0
- package/dist/tools/protocol-catalog.d.ts +12 -0
- package/dist/tools/protocol-catalog.js +46 -0
- package/dist/tools/ramification-tools.d.ts +12 -0
- package/dist/tools/ramification-tools.js +528 -0
- package/dist/tools/regex-compat.d.ts +9 -0
- package/dist/tools/regex-compat.js +96 -0
- package/dist/tools/registry.d.ts +51 -0
- package/dist/tools/registry.js +185 -0
- package/dist/tools/resolve.d.ts +2 -0
- package/dist/tools/resolve.js +107 -0
- package/dist/tools/shell-env.d.ts +2 -0
- package/dist/tools/shell-env.js +7 -0
- package/dist/tools/team-input.d.ts +3 -0
- package/dist/tools/team-input.js +129 -0
- package/dist/tools/team-tools.d.ts +7 -0
- package/dist/tools/team-tools.js +348 -0
- package/dist/tools/workspace-sessions.d.ts +2 -0
- package/dist/tools/workspace-sessions.js +35 -0
- package/dist/tui/account-entry.d.ts +1 -0
- package/dist/tui/account-entry.js +93 -0
- package/dist/tui/attachment-highlight.d.ts +1 -0
- package/dist/tui/attachment-highlight.js +24 -0
- package/dist/tui/attachment-refs.d.ts +2 -0
- package/dist/tui/attachment-refs.js +3 -0
- package/dist/tui/bottom-input.d.ts +219 -0
- package/dist/tui/bottom-input.js +1958 -0
- package/dist/tui/branding.d.ts +107 -0
- package/dist/tui/branding.js +750 -0
- package/dist/tui/clipboard-image.d.ts +10 -0
- package/dist/tui/clipboard-image.js +163 -0
- package/dist/tui/clipboard-text.d.ts +9 -0
- package/dist/tui/clipboard-text.js +51 -0
- package/dist/tui/clipboard-windows.d.ts +8 -0
- package/dist/tui/clipboard-windows.js +84 -0
- package/dist/tui/collapsible-command.d.ts +15 -0
- package/dist/tui/collapsible-command.js +48 -0
- package/dist/tui/command-feedback.d.ts +10 -0
- package/dist/tui/command-feedback.js +46 -0
- package/dist/tui/command-output-registry.d.ts +28 -0
- package/dist/tui/command-output-registry.js +103 -0
- package/dist/tui/command-transcript.d.ts +12 -0
- package/dist/tui/command-transcript.js +90 -0
- package/dist/tui/commands.d.ts +20 -0
- package/dist/tui/commands.js +131 -0
- package/dist/tui/context-bar.d.ts +4 -0
- package/dist/tui/context-bar.js +74 -0
- package/dist/tui/context-meter.d.ts +25 -0
- package/dist/tui/context-meter.js +81 -0
- package/dist/tui/cost-binding.d.ts +8 -0
- package/dist/tui/cost-binding.js +43 -0
- package/dist/tui/cost-tracker.d.ts +49 -0
- package/dist/tui/cost-tracker.js +122 -0
- package/dist/tui/diff.d.ts +9 -0
- package/dist/tui/diff.js +119 -0
- package/dist/tui/i18n-catalog.d.ts +5 -0
- package/dist/tui/i18n-catalog.js +184 -0
- package/dist/tui/i18n.d.ts +6 -0
- package/dist/tui/i18n.js +10 -0
- package/dist/tui/image-attachments.d.ts +46 -0
- package/dist/tui/image-attachments.js +167 -0
- package/dist/tui/images.d.ts +12 -0
- package/dist/tui/images.js +87 -0
- package/dist/tui/intro.d.ts +13 -0
- package/dist/tui/intro.js +109 -0
- package/dist/tui/language-preference.d.ts +6 -0
- package/dist/tui/language-preference.js +24 -0
- package/dist/tui/live-output.d.ts +2 -0
- package/dist/tui/live-output.js +18 -0
- package/dist/tui/locales.d.ts +19 -0
- package/dist/tui/locales.js +22 -0
- package/dist/tui/login-menu.d.ts +17 -0
- package/dist/tui/login-menu.js +58 -0
- package/dist/tui/logo.d.ts +8 -0
- package/dist/tui/logo.js +305 -0
- package/dist/tui/markdown-inline.d.ts +3 -0
- package/dist/tui/markdown-inline.js +99 -0
- package/dist/tui/markdown-table.d.ts +4 -0
- package/dist/tui/markdown-table.js +63 -0
- package/dist/tui/markdown.d.ts +11 -0
- package/dist/tui/markdown.js +257 -0
- package/dist/tui/mcp-transcript.d.ts +7 -0
- package/dist/tui/mcp-transcript.js +40 -0
- package/dist/tui/model-details.d.ts +2 -0
- package/dist/tui/model-details.js +21 -0
- package/dist/tui/model-selection.d.ts +7 -0
- package/dist/tui/model-selection.js +41 -0
- package/dist/tui/native-scrollback.d.ts +27 -0
- package/dist/tui/native-scrollback.js +134 -0
- package/dist/tui/onboarding.d.ts +72 -0
- package/dist/tui/onboarding.js +207 -0
- package/dist/tui/paste-collapse.d.ts +39 -0
- package/dist/tui/paste-collapse.js +117 -0
- package/dist/tui/perm-mode.d.ts +8 -0
- package/dist/tui/perm-mode.js +41 -0
- package/dist/tui/prompt-queue-store.d.ts +26 -0
- package/dist/tui/prompt-queue-store.js +87 -0
- package/dist/tui/prompt-queue.d.ts +47 -0
- package/dist/tui/prompt-queue.js +187 -0
- package/dist/tui/provider-menu.d.ts +33 -0
- package/dist/tui/provider-menu.js +175 -0
- package/dist/tui/question.d.ts +24 -0
- package/dist/tui/question.js +32 -0
- package/dist/tui/queue-screen.d.ts +25 -0
- package/dist/tui/queue-screen.js +152 -0
- package/dist/tui/queue-team.d.ts +3 -0
- package/dist/tui/queue-team.js +28 -0
- package/dist/tui/queued-questions.d.ts +20 -0
- package/dist/tui/queued-questions.js +163 -0
- package/dist/tui/quick-help.d.ts +1 -0
- package/dist/tui/quick-help.js +53 -0
- package/dist/tui/repl.d.ts +78 -0
- package/dist/tui/repl.js +4130 -0
- package/dist/tui/restore-queued-input.d.ts +3 -0
- package/dist/tui/restore-queued-input.js +20 -0
- package/dist/tui/review-detail.d.ts +6 -0
- package/dist/tui/review-detail.js +56 -0
- package/dist/tui/review-files.d.ts +3 -0
- package/dist/tui/review-files.js +22 -0
- package/dist/tui/review-render.d.ts +22 -0
- package/dist/tui/review-render.js +98 -0
- package/dist/tui/review-screen.d.ts +38 -0
- package/dist/tui/review-screen.js +358 -0
- package/dist/tui/review-store.d.ts +60 -0
- package/dist/tui/review-store.js +270 -0
- package/dist/tui/review-team.d.ts +2 -0
- package/dist/tui/review-team.js +27 -0
- package/dist/tui/selector-mouse.d.ts +26 -0
- package/dist/tui/selector-mouse.js +65 -0
- package/dist/tui/selector.d.ts +51 -0
- package/dist/tui/selector.js +299 -0
- package/dist/tui/session-replay.d.ts +10 -0
- package/dist/tui/session-replay.js +78 -0
- package/dist/tui/session-usage.d.ts +22 -0
- package/dist/tui/session-usage.js +55 -0
- package/dist/tui/skill-transcript.d.ts +5 -0
- package/dist/tui/skill-transcript.js +31 -0
- package/dist/tui/startup.d.ts +5 -0
- package/dist/tui/startup.js +61 -0
- package/dist/tui/status-line-loader.d.ts +8 -0
- package/dist/tui/status-line-loader.js +33 -0
- package/dist/tui/status-line.d.ts +38 -0
- package/dist/tui/status-line.js +213 -0
- package/dist/tui/system-language.d.ts +8 -0
- package/dist/tui/system-language.js +41 -0
- package/dist/tui/task-labels.d.ts +2 -0
- package/dist/tui/task-labels.js +7 -0
- package/dist/tui/term-bg.d.ts +4 -0
- package/dist/tui/term-bg.js +67 -0
- package/dist/tui/terminal-screen.d.ts +12 -0
- package/dist/tui/terminal-screen.js +1 -0
- package/dist/tui/terminal-text.d.ts +7 -0
- package/dist/tui/terminal-text.js +123 -0
- package/dist/tui/theme.d.ts +25 -0
- package/dist/tui/theme.js +383 -0
- package/dist/tui/tool-style.d.ts +7 -0
- package/dist/tui/tool-style.js +119 -0
- package/dist/tui/update-prompt.d.ts +14 -0
- package/dist/tui/update-prompt.js +104 -0
- package/dist/tui/usage-footer.d.ts +9 -0
- package/dist/tui/usage-footer.js +123 -0
- package/dist/tui/vascend-login.d.ts +68 -0
- package/dist/tui/vascend-login.js +355 -0
- package/dist/tui/web-login.d.ts +28 -0
- package/dist/tui/web-login.js +115 -0
- package/dist/vascend/activity-status.d.ts +12 -0
- package/dist/vascend/activity-status.js +68 -0
- package/dist/vascend/architecture-map.d.ts +73 -0
- package/dist/vascend/architecture-map.js +424 -0
- package/dist/vascend/attention-layout.d.ts +19 -0
- package/dist/vascend/attention-layout.js +141 -0
- package/dist/vascend/budget-allocator.d.ts +31 -0
- package/dist/vascend/budget-allocator.js +79 -0
- package/dist/vascend/candidate-collector.d.ts +20 -0
- package/dist/vascend/candidate-collector.js +220 -0
- package/dist/vascend/code-events.d.ts +24 -0
- package/dist/vascend/code-events.js +304 -0
- package/dist/vascend/code-graph-memory.d.ts +38 -0
- package/dist/vascend/code-graph-memory.js +334 -0
- package/dist/vascend/code-graph-runtime.d.ts +19 -0
- package/dist/vascend/code-graph-runtime.js +190 -0
- package/dist/vascend/code-graph-types.d.ts +58 -0
- package/dist/vascend/code-graph-types.js +50 -0
- package/dist/vascend/code-parser.d.ts +4 -0
- package/dist/vascend/code-parser.js +257 -0
- package/dist/vascend/competitor-knowledge.d.ts +53 -0
- package/dist/vascend/competitor-knowledge.js +262 -0
- package/dist/vascend/completeness.d.ts +16 -0
- package/dist/vascend/completeness.js +90 -0
- package/dist/vascend/context-autotuner.d.ts +45 -0
- package/dist/vascend/context-autotuner.js +231 -0
- package/dist/vascend/context-candidate.d.ts +45 -0
- package/dist/vascend/context-candidate.js +150 -0
- package/dist/vascend/context-capsule.d.ts +51 -0
- package/dist/vascend/context-capsule.js +133 -0
- package/dist/vascend/context-fabric.d.ts +108 -0
- package/dist/vascend/context-fabric.js +480 -0
- package/dist/vascend/context-feedback-loop.d.ts +56 -0
- package/dist/vascend/context-feedback-loop.js +204 -0
- package/dist/vascend/context-learning-identity.d.ts +4 -0
- package/dist/vascend/context-learning-identity.js +8 -0
- package/dist/vascend/context-links.d.ts +14 -0
- package/dist/vascend/context-links.js +83 -0
- package/dist/vascend/context-lint.d.ts +22 -0
- package/dist/vascend/context-lint.js +91 -0
- package/dist/vascend/context-market-selection.d.ts +17 -0
- package/dist/vascend/context-market-selection.js +50 -0
- package/dist/vascend/context-metrics.d.ts +25 -0
- package/dist/vascend/context-metrics.js +57 -0
- package/dist/vascend/context-pack-render.d.ts +16 -0
- package/dist/vascend/context-pack-render.js +52 -0
- package/dist/vascend/context-pareto.d.ts +33 -0
- package/dist/vascend/context-pareto.js +165 -0
- package/dist/vascend/context-pattern-explorer.d.ts +41 -0
- package/dist/vascend/context-pattern-explorer.js +276 -0
- package/dist/vascend/context-regret.d.ts +32 -0
- package/dist/vascend/context-regret.js +93 -0
- package/dist/vascend/context-retriever.d.ts +22 -0
- package/dist/vascend/context-retriever.js +243 -0
- package/dist/vascend/context-scope-index.d.ts +5 -0
- package/dist/vascend/context-scope-index.js +96 -0
- package/dist/vascend/context-scorer.d.ts +35 -0
- package/dist/vascend/context-scorer.js +162 -0
- package/dist/vascend/context-search-index.d.ts +12 -0
- package/dist/vascend/context-search-index.js +25 -0
- package/dist/vascend/context-snapshot.d.ts +22 -0
- package/dist/vascend/context-snapshot.js +135 -0
- package/dist/vascend/context-window-compiler.d.ts +42 -0
- package/dist/vascend/context-window-compiler.js +237 -0
- package/dist/vascend/contract-memory.d.ts +61 -0
- package/dist/vascend/contract-memory.js +435 -0
- package/dist/vascend/council.d.ts +58 -0
- package/dist/vascend/council.js +337 -0
- package/dist/vascend/decision-promotion.d.ts +48 -0
- package/dist/vascend/decision-promotion.js +410 -0
- package/dist/vascend/delta-context.d.ts +12 -0
- package/dist/vascend/delta-context.js +36 -0
- package/dist/vascend/dev-context-compiler.d.ts +27 -0
- package/dist/vascend/dev-context-compiler.js +133 -0
- package/dist/vascend/dev-context-layout.d.ts +30 -0
- package/dist/vascend/dev-context-layout.js +262 -0
- package/dist/vascend/evidence-slots.d.ts +14 -0
- package/dist/vascend/evidence-slots.js +55 -0
- package/dist/vascend/expansion-levels.d.ts +15 -0
- package/dist/vascend/expansion-levels.js +178 -0
- package/dist/vascend/file-lock.d.ts +7 -0
- package/dist/vascend/file-lock.js +95 -0
- package/dist/vascend/granular-kingdom.d.ts +25 -0
- package/dist/vascend/granular-kingdom.js +259 -0
- package/dist/vascend/granular-launcher.d.ts +48 -0
- package/dist/vascend/granular-launcher.js +202 -0
- package/dist/vascend/kingdom-bus.d.ts +25 -0
- package/dist/vascend/kingdom-bus.js +54 -0
- package/dist/vascend/kingdom-channel.d.ts +22 -0
- package/dist/vascend/kingdom-channel.js +180 -0
- package/dist/vascend/kingdom-kpi.d.ts +48 -0
- package/dist/vascend/kingdom-kpi.js +172 -0
- package/dist/vascend/kingdom-live.d.ts +28 -0
- package/dist/vascend/kingdom-live.js +61 -0
- package/dist/vascend/kingdom-run.d.ts +18 -0
- package/dist/vascend/kingdom-run.js +506 -0
- package/dist/vascend/kingdom-scribe.d.ts +20 -0
- package/dist/vascend/kingdom-scribe.js +52 -0
- package/dist/vascend/kingdom.d.ts +79 -0
- package/dist/vascend/kingdom.js +870 -0
- package/dist/vascend/lexical-index.d.ts +10 -0
- package/dist/vascend/lexical-index.js +99 -0
- package/dist/vascend/lexical-search.d.ts +29 -0
- package/dist/vascend/lexical-search.js +262 -0
- package/dist/vascend/long-term-context.d.ts +51 -0
- package/dist/vascend/long-term-context.js +194 -0
- package/dist/vascend/mandate.d.ts +33 -0
- package/dist/vascend/mandate.js +107 -0
- package/dist/vascend/memory-packet.d.ts +13 -0
- package/dist/vascend/memory-packet.js +155 -0
- package/dist/vascend/memory-status.d.ts +22 -0
- package/dist/vascend/memory-status.js +73 -0
- package/dist/vascend/memory-store.d.ts +62 -0
- package/dist/vascend/memory-store.js +273 -0
- package/dist/vascend/objective-revision.d.ts +69 -0
- package/dist/vascend/objective-revision.js +319 -0
- package/dist/vascend/patch-plan-store.d.ts +33 -0
- package/dist/vascend/patch-plan-store.js +240 -0
- package/dist/vascend/patch-plan.d.ts +97 -0
- package/dist/vascend/patch-plan.js +345 -0
- package/dist/vascend/plan-progress.d.ts +11 -0
- package/dist/vascend/plan-progress.js +68 -0
- package/dist/vascend/plan-store.d.ts +64 -0
- package/dist/vascend/plan-store.js +460 -0
- package/dist/vascend/proof-chains.d.ts +19 -0
- package/dist/vascend/proof-chains.js +120 -0
- package/dist/vascend/ramification-store.d.ts +25 -0
- package/dist/vascend/ramification-store.js +94 -0
- package/dist/vascend/ramification.d.ts +193 -0
- package/dist/vascend/ramification.js +583 -0
- package/dist/vascend/recall-planner.d.ts +17 -0
- package/dist/vascend/recall-planner.js +109 -0
- package/dist/vascend/requirements.d.ts +31 -0
- package/dist/vascend/requirements.js +151 -0
- package/dist/vascend/reviewer.d.ts +9 -0
- package/dist/vascend/reviewer.js +93 -0
- package/dist/vascend/room-graph.d.ts +29 -0
- package/dist/vascend/room-graph.js +242 -0
- package/dist/vascend/room-memory.d.ts +57 -0
- package/dist/vascend/room-memory.js +631 -0
- package/dist/vascend/runtime.d.ts +84 -0
- package/dist/vascend/runtime.js +286 -0
- package/dist/vascend/self-improve.d.ts +104 -0
- package/dist/vascend/self-improve.js +396 -0
- package/dist/vascend/session-search.d.ts +52 -0
- package/dist/vascend/session-search.js +349 -0
- package/dist/vascend/supersession-graph.d.ts +14 -0
- package/dist/vascend/supersession-graph.js +70 -0
- package/dist/vascend/team-areas.d.ts +9 -0
- package/dist/vascend/team-areas.js +28 -0
- package/dist/vascend/team-handoff.d.ts +24 -0
- package/dist/vascend/team-handoff.js +37 -0
- package/dist/vascend/team-scheduler.d.ts +13 -0
- package/dist/vascend/team-scheduler.js +74 -0
- package/dist/vascend/team-session.d.ts +42 -0
- package/dist/vascend/team-session.js +142 -0
- package/dist/vascend/test-failure-memory.d.ts +76 -0
- package/dist/vascend/test-failure-memory.js +354 -0
- package/dist/vascend/token-market.d.ts +42 -0
- package/dist/vascend/token-market.js +144 -0
- package/dist/vascend/tuner-baseline-store.d.ts +52 -0
- package/dist/vascend/tuner-baseline-store.js +446 -0
- package/dist/vascend/user-profile.d.ts +44 -0
- package/dist/vascend/user-profile.js +131 -0
- package/dist/vascend/vision.d.ts +94 -0
- package/dist/vascend/vision.js +375 -0
- package/dist/vascend/work-agent.d.ts +12 -0
- package/dist/vascend/work-agent.js +83 -0
- package/dist/vascend/work-queue.d.ts +62 -0
- package/dist/vascend/work-queue.js +255 -0
- package/dist/vascend/work-runner.d.ts +64 -0
- package/dist/vascend/work-runner.js +137 -0
- package/dist/vascend/worktree.d.ts +38 -0
- package/dist/vascend/worktree.js +206 -0
- package/dist/vendor/computer-use/README.md +7 -0
- package/dist/vendor/computer-use/computer-desktop.js +211 -0
- package/dist/vendor/computer-use/computer-observe.js +315 -0
- package/dist/vendor/computer-use/computer-scripts.js +1230 -0
- package/dist/vendor/computer-use/computer-tools.js +2136 -0
- package/dist/vendor/computer-use/package.json +1 -0
- package/dist/vendor/computer-use/rac/atomic-input.js +91 -0
- package/dist/vendor/computer-use/rac/grammatica.js +101 -0
- package/dist/vendor/computer-use/rac/parser.js +185 -0
- package/dist/vendor/computer-use/rac/protocol.js +136 -0
- package/install.ps1 +30 -0
- package/install.sh +50 -0
- package/package.json +56 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
4
|
+
// Risorse che, se presenti, rendono il progetto "da fidare".
|
|
5
|
+
const TRUST_RESOURCES = [
|
|
6
|
+
".talos/settings.json",
|
|
7
|
+
".talos/extensions",
|
|
8
|
+
".talos/skills",
|
|
9
|
+
".talos/prompts",
|
|
10
|
+
".talos/themes",
|
|
11
|
+
".talos/SYSTEM.md",
|
|
12
|
+
".talos/APPEND_SYSTEM.md",
|
|
13
|
+
// Pi usa lo stesso modello di sicurezza per risorse project-local. Talos
|
|
14
|
+
// deve mostrare il prompt di fiducia anche quando il progetto contiene solo
|
|
15
|
+
// un package/configurazione Pi, altrimenti verrebbe ignorato in silenzio.
|
|
16
|
+
".pi/settings.json",
|
|
17
|
+
".pi/extensions",
|
|
18
|
+
".pi/skills",
|
|
19
|
+
".pi/prompts",
|
|
20
|
+
".pi/themes",
|
|
21
|
+
];
|
|
22
|
+
export function resourcesRequiringTrust(cwd) {
|
|
23
|
+
return TRUST_RESOURCES.filter((rel) => existsSync(join(cwd, rel)));
|
|
24
|
+
}
|
|
25
|
+
function trustFile(env) {
|
|
26
|
+
const override = env["TALOS_CONFIG_DIR"];
|
|
27
|
+
const base = override ? override : join(homedir(), ".talos", "agent");
|
|
28
|
+
return join(base, "trust.json");
|
|
29
|
+
}
|
|
30
|
+
export function readTrustStore(env) {
|
|
31
|
+
const file = trustFile(env);
|
|
32
|
+
if (!existsSync(file))
|
|
33
|
+
return {};
|
|
34
|
+
try {
|
|
35
|
+
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
36
|
+
if (typeof raw !== "object" || raw === null)
|
|
37
|
+
return {};
|
|
38
|
+
const out = {};
|
|
39
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
40
|
+
if (v === "trust" || v === "deny")
|
|
41
|
+
out[k] = v;
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function writeTrustDecision(env, cwd, decision) {
|
|
50
|
+
const file = trustFile(env);
|
|
51
|
+
const store = readTrustStore(env);
|
|
52
|
+
const next = { ...store, [resolve(cwd)]: decision };
|
|
53
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
54
|
+
writeFileSync(file, JSON.stringify(next, null, 2), "utf8");
|
|
55
|
+
}
|
|
56
|
+
function isAncestorOrSelf(ancestor, target) {
|
|
57
|
+
const rel = relative(ancestor, target);
|
|
58
|
+
return rel === "" || (!rel.startsWith("..") && !rel.includes(":"));
|
|
59
|
+
}
|
|
60
|
+
// Decisione salvata per cwd: vince il path piu' vicino (piu' lungo) tra gli
|
|
61
|
+
// antenati registrati.
|
|
62
|
+
export function savedDecision(store, cwd) {
|
|
63
|
+
const target = resolve(cwd);
|
|
64
|
+
let best;
|
|
65
|
+
for (const [path, decision] of Object.entries(store)) {
|
|
66
|
+
if (isAncestorOrSelf(path, target)) {
|
|
67
|
+
if (!best || path.length > best.path.length)
|
|
68
|
+
best = { path, decision };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return best?.decision;
|
|
72
|
+
}
|
|
73
|
+
export function parseDefaultTrust(value) {
|
|
74
|
+
return value === "trust" || value === "deny" ? value : "ask";
|
|
75
|
+
}
|
|
76
|
+
// Risolve la fiducia per il progetto in cwd. `prompt` viene usato solo in
|
|
77
|
+
// modalita' "ask" interattiva quando ci sono risorse da fidare.
|
|
78
|
+
export async function resolveProjectTrust(opts) {
|
|
79
|
+
const resources = resourcesRequiringTrust(opts.cwd);
|
|
80
|
+
if (resources.length === 0)
|
|
81
|
+
return { trusted: true, resources, persist: false, source: "default" };
|
|
82
|
+
const saved = savedDecision(readTrustStore(opts.env), opts.cwd);
|
|
83
|
+
if (saved)
|
|
84
|
+
return { trusted: saved === "trust", resources, persist: false, source: "stored" };
|
|
85
|
+
if (opts.defaultTrust === "trust")
|
|
86
|
+
return { trusted: true, resources, persist: false, source: "default" };
|
|
87
|
+
if (opts.defaultTrust === "deny")
|
|
88
|
+
return { trusted: false, resources, persist: false, source: "default" };
|
|
89
|
+
// "ask": interattivo se possibile, altrimenti default sicuro (deny).
|
|
90
|
+
if (opts.prompt) {
|
|
91
|
+
const granted = await opts.prompt(resources);
|
|
92
|
+
return { trusted: granted, resources, persist: true, source: "prompt" };
|
|
93
|
+
}
|
|
94
|
+
return { trusted: false, resources, persist: false, source: "default" };
|
|
95
|
+
}
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import type { JsonSchema, McpCallToolResult, McpContentBlock, McpMeta, McpToolAnnotations, McpToolDefinition } from "../mcp/protocol.js";
|
|
2
|
+
import type { ContextLedger } from "./context-ledger.js";
|
|
3
|
+
import type { SessionUsageRecord } from "./session-usage.js";
|
|
4
|
+
import type { FileActivityMode, FileActor, FileCoordinationContext, FilePresence } from "./file-coordination.js";
|
|
5
|
+
export type Role = "system" | "user" | "assistant" | "tool";
|
|
6
|
+
export interface TextPart {
|
|
7
|
+
readonly type: "text";
|
|
8
|
+
readonly text: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ToolCallPart {
|
|
11
|
+
readonly type: "tool_call";
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly input: Readonly<Record<string, unknown>>;
|
|
15
|
+
readonly inputTruncatedChars?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ToolResultPart {
|
|
18
|
+
readonly type: "tool_result";
|
|
19
|
+
readonly callId: string;
|
|
20
|
+
readonly output: string;
|
|
21
|
+
readonly isError: boolean;
|
|
22
|
+
readonly content?: readonly McpContentBlock[];
|
|
23
|
+
readonly structuredContent?: Readonly<Record<string, unknown>>;
|
|
24
|
+
readonly _meta?: McpMeta;
|
|
25
|
+
readonly media?: readonly ImagePart[];
|
|
26
|
+
}
|
|
27
|
+
export interface ImagePart {
|
|
28
|
+
readonly type: "image";
|
|
29
|
+
readonly data: string;
|
|
30
|
+
readonly mime: string;
|
|
31
|
+
readonly source?: string;
|
|
32
|
+
}
|
|
33
|
+
export type ContentPart = TextPart | ToolCallPart | ToolResultPart | ImagePart;
|
|
34
|
+
export interface Message {
|
|
35
|
+
readonly role: Role;
|
|
36
|
+
readonly content: readonly ContentPart[];
|
|
37
|
+
}
|
|
38
|
+
export interface ToolDef extends McpToolDefinition {
|
|
39
|
+
readonly description: string;
|
|
40
|
+
readonly schema?: JsonSchema;
|
|
41
|
+
}
|
|
42
|
+
export interface LegacyToolDef {
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly title?: string;
|
|
45
|
+
readonly description: string;
|
|
46
|
+
readonly schema: JsonSchema;
|
|
47
|
+
readonly inputSchema?: JsonSchema;
|
|
48
|
+
readonly outputSchema?: JsonSchema;
|
|
49
|
+
readonly annotations?: McpToolAnnotations;
|
|
50
|
+
readonly _meta?: McpMeta;
|
|
51
|
+
}
|
|
52
|
+
export type ToolRegistrationDef = ToolDef | LegacyToolDef;
|
|
53
|
+
export type NestedToolEvent = {
|
|
54
|
+
readonly type: "tool_call";
|
|
55
|
+
readonly call: ToolCallPart;
|
|
56
|
+
} | {
|
|
57
|
+
readonly type: "tool_result";
|
|
58
|
+
readonly call: ToolCallPart;
|
|
59
|
+
readonly result: ToolResultPart;
|
|
60
|
+
};
|
|
61
|
+
export interface ToolContext {
|
|
62
|
+
readonly cwd: string;
|
|
63
|
+
readonly workspaceSession?: import("./workspace-sessions.js").WorkspaceSession;
|
|
64
|
+
/** Ambiente che possiede davvero cwd, filesystem e processi del turno. */
|
|
65
|
+
readonly executionTarget?: import("./execution-target.js").ExecutionTarget;
|
|
66
|
+
/**
|
|
67
|
+
* Radici filesystem aggiuntive concesse dall'host per questo solo turno.
|
|
68
|
+
* La presenza del campo (anche come array vuoto) attiva il confinement su
|
|
69
|
+
* `cwd` + queste radici senza consultare la allowlist globale del processo.
|
|
70
|
+
*/
|
|
71
|
+
readonly fsRoots?: readonly string[];
|
|
72
|
+
readonly signal: AbortSignal;
|
|
73
|
+
/** Coordinamento condiviso delle letture/scritture sul workspace. */
|
|
74
|
+
readonly fileCoordination?: FileCoordinationContext;
|
|
75
|
+
readonly confirm: (action: string, detail: string) => Promise<boolean>;
|
|
76
|
+
readonly ask?: (question: string, options?: readonly string[]) => Promise<string | null>;
|
|
77
|
+
readonly spawnKingdom?: (castles: readonly SpawnAgentSpec[], opts?: {
|
|
78
|
+
baseBranch?: string;
|
|
79
|
+
detach?: boolean;
|
|
80
|
+
}) => Promise<string>;
|
|
81
|
+
readonly kingdom?: {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly self: string;
|
|
84
|
+
readonly isolated?: boolean;
|
|
85
|
+
readonly peers?: readonly string[];
|
|
86
|
+
};
|
|
87
|
+
readonly sessionId?: string;
|
|
88
|
+
readonly sessionDir?: string;
|
|
89
|
+
readonly roomStoreId?: string;
|
|
90
|
+
readonly planStoreId?: string;
|
|
91
|
+
readonly planCastle?: string;
|
|
92
|
+
readonly planTasks?: readonly string[];
|
|
93
|
+
readonly emitToolEvent?: (event: NestedToolEvent) => void;
|
|
94
|
+
/** Shared dispatch including hooks, normalization, result storage and evidence. */
|
|
95
|
+
readonly visibleOutputPages?: ReadonlySet<string>;
|
|
96
|
+
readonly contextLearning?: {
|
|
97
|
+
readonly storeId: string;
|
|
98
|
+
readonly scope: string;
|
|
99
|
+
};
|
|
100
|
+
readonly guardToolCall?: (call: ToolCallPart) => void;
|
|
101
|
+
readonly invokeTool?: (call: ToolCallPart, signal?: AbortSignal, guard?: (call: ToolCallPart) => void) => Promise<ToolResultPart>;
|
|
102
|
+
readonly tools?: {
|
|
103
|
+
readonly revision?: string;
|
|
104
|
+
readonly compact?: boolean;
|
|
105
|
+
defs?(): readonly ToolDef[];
|
|
106
|
+
catalog(): readonly ToolDef[];
|
|
107
|
+
get(name: string): RegisteredTool | undefined;
|
|
108
|
+
isDeferred?(name: string): boolean;
|
|
109
|
+
promote?(name: string): boolean;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export interface ToolHandlerOutput {
|
|
113
|
+
readonly output?: string;
|
|
114
|
+
readonly media?: readonly ImagePart[];
|
|
115
|
+
readonly content?: McpCallToolResult["content"];
|
|
116
|
+
readonly structuredContent?: McpCallToolResult["structuredContent"];
|
|
117
|
+
readonly _meta?: McpCallToolResult["_meta"];
|
|
118
|
+
readonly isError?: boolean;
|
|
119
|
+
}
|
|
120
|
+
export type ToolHandler = (input: Record<string, unknown>, ctx: ToolContext) => Promise<string | ToolHandlerOutput | McpCallToolResult>;
|
|
121
|
+
export type ToolExecution = "serial" | "parallel";
|
|
122
|
+
export type Tool = ToolRegistrationDef & {
|
|
123
|
+
readonly handler: ToolHandler;
|
|
124
|
+
readonly execution?: ToolExecution;
|
|
125
|
+
readonly capabilities?: readonly string[];
|
|
126
|
+
readonly continuations?: readonly string[];
|
|
127
|
+
readonly requiresNativeCall?: boolean;
|
|
128
|
+
};
|
|
129
|
+
export interface RegisteredTool extends ToolDef {
|
|
130
|
+
readonly schema: JsonSchema;
|
|
131
|
+
readonly handler: ToolHandler;
|
|
132
|
+
readonly execution?: ToolExecution;
|
|
133
|
+
readonly capabilities?: readonly string[];
|
|
134
|
+
readonly continuations?: readonly string[];
|
|
135
|
+
readonly requiresNativeCall?: boolean;
|
|
136
|
+
}
|
|
137
|
+
export interface Usage {
|
|
138
|
+
readonly inputTokens: number;
|
|
139
|
+
readonly outputTokens: number;
|
|
140
|
+
readonly cacheReadTokens?: number;
|
|
141
|
+
readonly cacheWriteTokens?: number;
|
|
142
|
+
readonly costUsd?: number;
|
|
143
|
+
}
|
|
144
|
+
export interface PlanLimitWindow {
|
|
145
|
+
readonly id: string;
|
|
146
|
+
readonly label: string;
|
|
147
|
+
readonly utilization?: number;
|
|
148
|
+
readonly remaining?: number;
|
|
149
|
+
readonly limit?: number;
|
|
150
|
+
readonly resetAt?: number;
|
|
151
|
+
readonly status?: string;
|
|
152
|
+
readonly unit?: string;
|
|
153
|
+
}
|
|
154
|
+
export interface PlanLimits {
|
|
155
|
+
readonly providerId: string;
|
|
156
|
+
readonly windows: readonly PlanLimitWindow[];
|
|
157
|
+
readonly capturedAt: number;
|
|
158
|
+
}
|
|
159
|
+
export interface ModelTurn {
|
|
160
|
+
readonly text: string;
|
|
161
|
+
readonly toolCalls: readonly ToolCallPart[];
|
|
162
|
+
readonly stopReason: "end" | "tool_use" | "max_tokens" | "error";
|
|
163
|
+
readonly usage?: Usage;
|
|
164
|
+
readonly limits?: PlanLimits;
|
|
165
|
+
}
|
|
166
|
+
export interface CompletionRequest {
|
|
167
|
+
readonly system: string;
|
|
168
|
+
readonly turnContext?: string;
|
|
169
|
+
readonly messages: readonly Message[];
|
|
170
|
+
readonly tools: readonly ToolDef[];
|
|
171
|
+
readonly model: string;
|
|
172
|
+
readonly maxTokens: number;
|
|
173
|
+
readonly signal: AbortSignal;
|
|
174
|
+
readonly onDelta?: (chunk: string) => void;
|
|
175
|
+
readonly onToolDelta?: (event: {
|
|
176
|
+
readonly id: string;
|
|
177
|
+
readonly name: string;
|
|
178
|
+
readonly index: number;
|
|
179
|
+
readonly delta: string;
|
|
180
|
+
}) => void;
|
|
181
|
+
readonly onActivity?: (label: string) => void;
|
|
182
|
+
readonly onReasoning?: (chunk: string) => void;
|
|
183
|
+
readonly sessionId?: string;
|
|
184
|
+
readonly effort?: string;
|
|
185
|
+
readonly serviceTier?: "priority";
|
|
186
|
+
}
|
|
187
|
+
export interface Provider {
|
|
188
|
+
readonly id: string;
|
|
189
|
+
readonly label?: string;
|
|
190
|
+
readonly models: readonly string[];
|
|
191
|
+
readonly supportsFastMode?: boolean;
|
|
192
|
+
complete(req: CompletionRequest): Promise<ModelTurn>;
|
|
193
|
+
}
|
|
194
|
+
export interface SpawnAgentToolPolicy {
|
|
195
|
+
readonly allow?: readonly string[];
|
|
196
|
+
readonly deny?: readonly string[];
|
|
197
|
+
}
|
|
198
|
+
export interface SpawnAgentSpec {
|
|
199
|
+
readonly slug: string;
|
|
200
|
+
readonly goal: string;
|
|
201
|
+
readonly castle?: string;
|
|
202
|
+
readonly tasks?: readonly string[];
|
|
203
|
+
readonly after?: readonly string[];
|
|
204
|
+
readonly parent?: string;
|
|
205
|
+
readonly role?: string;
|
|
206
|
+
readonly model?: string;
|
|
207
|
+
readonly effort?: string;
|
|
208
|
+
readonly tools?: SpawnAgentToolPolicy;
|
|
209
|
+
readonly instructions?: string;
|
|
210
|
+
readonly area?: readonly string[];
|
|
211
|
+
}
|
|
212
|
+
export interface KingdomCastleInfo extends SpawnAgentSpec {
|
|
213
|
+
readonly after: readonly string[];
|
|
214
|
+
}
|
|
215
|
+
export type KingdomVassalState = "start" | "active" | "done" | "error";
|
|
216
|
+
export interface KingdomVassalSummary {
|
|
217
|
+
readonly slug: string;
|
|
218
|
+
readonly ok: boolean;
|
|
219
|
+
readonly rooms: number;
|
|
220
|
+
readonly summary: string;
|
|
221
|
+
readonly model?: string;
|
|
222
|
+
readonly role?: string;
|
|
223
|
+
readonly parent?: string;
|
|
224
|
+
readonly workstreamId?: string;
|
|
225
|
+
readonly taskRefs?: readonly string[];
|
|
226
|
+
readonly parentTaskRef?: string;
|
|
227
|
+
readonly error?: string;
|
|
228
|
+
readonly branch?: string;
|
|
229
|
+
readonly merged?: boolean;
|
|
230
|
+
}
|
|
231
|
+
export type AgentEvent = {
|
|
232
|
+
readonly type: "turn_start";
|
|
233
|
+
readonly turn: number;
|
|
234
|
+
} | {
|
|
235
|
+
readonly type: "workspace_message";
|
|
236
|
+
readonly message: import("./workspace-sessions.js").WorkspaceMessage;
|
|
237
|
+
} | {
|
|
238
|
+
readonly type: "text";
|
|
239
|
+
readonly delta: string;
|
|
240
|
+
} | {
|
|
241
|
+
readonly type: "tool_delta";
|
|
242
|
+
readonly id: string;
|
|
243
|
+
readonly name: string;
|
|
244
|
+
readonly index: number;
|
|
245
|
+
readonly delta: string;
|
|
246
|
+
} | {
|
|
247
|
+
readonly type: "tool_call";
|
|
248
|
+
readonly call: ToolCallPart;
|
|
249
|
+
readonly parentId?: string;
|
|
250
|
+
} | {
|
|
251
|
+
readonly type: "status";
|
|
252
|
+
readonly label: string;
|
|
253
|
+
readonly category?: "context";
|
|
254
|
+
} | {
|
|
255
|
+
readonly type: "usage";
|
|
256
|
+
readonly record: SessionUsageRecord;
|
|
257
|
+
readonly persisted: boolean;
|
|
258
|
+
} | {
|
|
259
|
+
readonly type: "file_coordination";
|
|
260
|
+
readonly phase: "observed" | "blocked" | "acquired" | "released" | "presence";
|
|
261
|
+
readonly path: string;
|
|
262
|
+
readonly actor: FileActor;
|
|
263
|
+
readonly mode: FileActivityMode;
|
|
264
|
+
readonly others: readonly FilePresence[];
|
|
265
|
+
readonly at: number;
|
|
266
|
+
} | {
|
|
267
|
+
readonly type: "reasoning";
|
|
268
|
+
readonly delta: string;
|
|
269
|
+
} | {
|
|
270
|
+
readonly type: "tool_result";
|
|
271
|
+
readonly result: ToolResultPart;
|
|
272
|
+
readonly parentId?: string;
|
|
273
|
+
} | {
|
|
274
|
+
readonly type: "turn_end";
|
|
275
|
+
readonly stopReason: ModelTurn["stopReason"];
|
|
276
|
+
readonly usage?: Usage;
|
|
277
|
+
readonly limits?: PlanLimits;
|
|
278
|
+
} | {
|
|
279
|
+
readonly type: "context_window";
|
|
280
|
+
readonly ledger: ContextLedger;
|
|
281
|
+
} | {
|
|
282
|
+
readonly type: "kingdom";
|
|
283
|
+
readonly phase: "start";
|
|
284
|
+
readonly kingdomId: string;
|
|
285
|
+
readonly concurrency: number;
|
|
286
|
+
readonly worktree: boolean;
|
|
287
|
+
readonly castles: readonly KingdomCastleInfo[];
|
|
288
|
+
} | {
|
|
289
|
+
readonly type: "kingdom";
|
|
290
|
+
readonly phase: "notice";
|
|
291
|
+
readonly text: string;
|
|
292
|
+
} | {
|
|
293
|
+
readonly type: "kingdom";
|
|
294
|
+
readonly phase: "vassal";
|
|
295
|
+
readonly slug: string;
|
|
296
|
+
readonly state: KingdomVassalState;
|
|
297
|
+
readonly label?: string;
|
|
298
|
+
readonly parent?: string;
|
|
299
|
+
readonly role?: string;
|
|
300
|
+
readonly goal?: string;
|
|
301
|
+
readonly workstreamId?: string;
|
|
302
|
+
readonly taskRefs?: readonly string[];
|
|
303
|
+
readonly parentTaskRef?: string;
|
|
304
|
+
} | {
|
|
305
|
+
readonly type: "kingdom";
|
|
306
|
+
readonly phase: "message";
|
|
307
|
+
readonly from: string;
|
|
308
|
+
readonly to: string;
|
|
309
|
+
readonly text: string;
|
|
310
|
+
readonly kind?: "assignment" | "message" | "result";
|
|
311
|
+
readonly workstreamId?: string;
|
|
312
|
+
readonly taskRef?: string;
|
|
313
|
+
} | {
|
|
314
|
+
readonly type: "kingdom";
|
|
315
|
+
readonly phase: "task";
|
|
316
|
+
readonly slug: string;
|
|
317
|
+
readonly workstreamId: string;
|
|
318
|
+
readonly taskRef: string;
|
|
319
|
+
readonly status: "pending" | "running" | "completed" | "failed";
|
|
320
|
+
readonly at: number;
|
|
321
|
+
} | {
|
|
322
|
+
readonly type: "kingdom";
|
|
323
|
+
readonly phase: "note";
|
|
324
|
+
readonly slug: string;
|
|
325
|
+
readonly workstreamId: string;
|
|
326
|
+
readonly taskRef?: string;
|
|
327
|
+
readonly text: string;
|
|
328
|
+
readonly at: number;
|
|
329
|
+
} | {
|
|
330
|
+
readonly type: "kingdom";
|
|
331
|
+
readonly phase: "file";
|
|
332
|
+
readonly slug: string;
|
|
333
|
+
readonly path: string;
|
|
334
|
+
readonly operation: "write" | "edit";
|
|
335
|
+
readonly workstreamId?: string;
|
|
336
|
+
readonly taskRef?: string;
|
|
337
|
+
readonly edit?: {
|
|
338
|
+
readonly oldString?: string;
|
|
339
|
+
readonly newString?: string;
|
|
340
|
+
readonly content?: string;
|
|
341
|
+
readonly append?: boolean;
|
|
342
|
+
};
|
|
343
|
+
} | {
|
|
344
|
+
readonly type: "kingdom";
|
|
345
|
+
readonly phase: "say";
|
|
346
|
+
readonly slug: string;
|
|
347
|
+
readonly text: string;
|
|
348
|
+
readonly at: number;
|
|
349
|
+
} | {
|
|
350
|
+
readonly type: "kingdom";
|
|
351
|
+
readonly phase: "tool";
|
|
352
|
+
readonly slug: string;
|
|
353
|
+
readonly callId: string;
|
|
354
|
+
readonly tool: string;
|
|
355
|
+
readonly args?: string;
|
|
356
|
+
readonly command?: string;
|
|
357
|
+
readonly state: "start" | "ok" | "error";
|
|
358
|
+
readonly output?: string;
|
|
359
|
+
readonly at: number;
|
|
360
|
+
} | {
|
|
361
|
+
readonly type: "kingdom";
|
|
362
|
+
readonly phase: "inbox";
|
|
363
|
+
readonly slug: string;
|
|
364
|
+
readonly messageId: string;
|
|
365
|
+
readonly text: string;
|
|
366
|
+
readonly state: "queued" | "read";
|
|
367
|
+
readonly at: number;
|
|
368
|
+
} | {
|
|
369
|
+
readonly type: "kingdom";
|
|
370
|
+
readonly phase: "usage";
|
|
371
|
+
readonly slug: string;
|
|
372
|
+
readonly inputTokens: number;
|
|
373
|
+
readonly outputTokens: number;
|
|
374
|
+
readonly totalTokens: number;
|
|
375
|
+
readonly costUsd?: number;
|
|
376
|
+
readonly turns: number;
|
|
377
|
+
readonly at: number;
|
|
378
|
+
} | {
|
|
379
|
+
readonly type: "kingdom";
|
|
380
|
+
readonly phase: "end";
|
|
381
|
+
readonly reports: readonly KingdomVassalSummary[];
|
|
382
|
+
} | {
|
|
383
|
+
readonly type: "compacted";
|
|
384
|
+
readonly tokensBefore: number;
|
|
385
|
+
readonly tokensAfter: number;
|
|
386
|
+
readonly reason?: "room-index" | "summary";
|
|
387
|
+
readonly anchors?: readonly string[];
|
|
388
|
+
} | {
|
|
389
|
+
readonly type: "user_message";
|
|
390
|
+
readonly id: string;
|
|
391
|
+
readonly text: string;
|
|
392
|
+
readonly at: number;
|
|
393
|
+
readonly immediate?: boolean;
|
|
394
|
+
} | {
|
|
395
|
+
readonly type: "error";
|
|
396
|
+
readonly message: string;
|
|
397
|
+
readonly providerId?: string;
|
|
398
|
+
readonly resetAt?: number;
|
|
399
|
+
} | {
|
|
400
|
+
readonly type: "done";
|
|
401
|
+
};
|
|
402
|
+
export type EventSink = (event: AgentEvent) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CliArgs } from "./cli-args.js";
|
|
2
|
+
import { type UpdateRunner } from "./update-process.js";
|
|
3
|
+
export declare const TALOS_REPOSITORY = "VascendTechnologies/vascend-talos";
|
|
4
|
+
export declare const TALOS_RELEASES_URL = "https://github.com/VascendTechnologies/vascend-talos/releases";
|
|
5
|
+
export interface TalosUpdate {
|
|
6
|
+
readonly currentVersion: string;
|
|
7
|
+
readonly version: string;
|
|
8
|
+
readonly tag: string;
|
|
9
|
+
}
|
|
10
|
+
export type UpdateSource = "github" | "npm";
|
|
11
|
+
export declare function parseUpdateVersion(value: unknown): {
|
|
12
|
+
version: string;
|
|
13
|
+
core: readonly bigint[];
|
|
14
|
+
prerelease: boolean;
|
|
15
|
+
} | null;
|
|
16
|
+
export declare function updateFromRelease(currentVersion: string, data: unknown): TalosUpdate | null;
|
|
17
|
+
export declare function shouldCheckForUpdate(args: Pick<CliArgs, "mode" | "help" | "version">, env: NodeJS.ProcessEnv, inputIsTTY: boolean, outputIsTTY: boolean): boolean;
|
|
18
|
+
export declare function checkForTalosUpdate(options: {
|
|
19
|
+
readonly currentVersion: string;
|
|
20
|
+
readonly env: NodeJS.ProcessEnv;
|
|
21
|
+
readonly cwd: string;
|
|
22
|
+
readonly timeoutMs?: number;
|
|
23
|
+
readonly fetch?: typeof fetch;
|
|
24
|
+
readonly run?: UpdateRunner;
|
|
25
|
+
readonly source?: UpdateSource;
|
|
26
|
+
}): Promise<TalosUpdate | null>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { runUpdateCommand } from "./update-process.js";
|
|
2
|
+
export const TALOS_REPOSITORY = "VascendTechnologies/vascend-talos";
|
|
3
|
+
export const TALOS_RELEASES_URL = `https://github.com/${TALOS_REPOSITORY}/releases`;
|
|
4
|
+
const RELEASE_ENDPOINT = `https://api.github.com/repos/${TALOS_REPOSITORY}/releases/latest`;
|
|
5
|
+
// Accept SemVer only; reject shell syntax, control characters and oversized input.
|
|
6
|
+
export function parseUpdateVersion(value) {
|
|
7
|
+
if (typeof value !== "string" || value.length > 128)
|
|
8
|
+
return null;
|
|
9
|
+
const match = /^v?((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)$/.exec(value);
|
|
10
|
+
if (!match || match[0] !== value)
|
|
11
|
+
return null;
|
|
12
|
+
if (match[5]?.split(".").some(part => /^0\d+$/.test(part)))
|
|
13
|
+
return null;
|
|
14
|
+
return { version: match[1], core: [BigInt(match[2]), BigInt(match[3]), BigInt(match[4])], prerelease: Boolean(match[5]) };
|
|
15
|
+
}
|
|
16
|
+
export function updateFromRelease(currentVersion, data) {
|
|
17
|
+
if (!data || typeof data !== "object")
|
|
18
|
+
return null;
|
|
19
|
+
const release = data;
|
|
20
|
+
if (release.draft !== false || release.prerelease !== false)
|
|
21
|
+
return null;
|
|
22
|
+
const current = parseUpdateVersion(currentVersion);
|
|
23
|
+
const latest = parseUpdateVersion(release.tag_name);
|
|
24
|
+
if (!current || !latest || latest.prerelease)
|
|
25
|
+
return null;
|
|
26
|
+
for (let i = 0; i < 3; i++) {
|
|
27
|
+
if (latest.core[i] < current.core[i])
|
|
28
|
+
return null;
|
|
29
|
+
if (latest.core[i] > current.core[i]) {
|
|
30
|
+
return { currentVersion: current.version, version: latest.version, tag: release.tag_name };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return current.prerelease
|
|
34
|
+
? { currentVersion: current.version, version: latest.version, tag: release.tag_name }
|
|
35
|
+
: null;
|
|
36
|
+
}
|
|
37
|
+
export function shouldCheckForUpdate(args, env, inputIsTTY, outputIsTTY) {
|
|
38
|
+
return args.mode === "tui" && !args.help && !args.version && inputIsTTY && outputIsTTY
|
|
39
|
+
&& env.TALOS_NO_UPDATE_CHECK !== "1"
|
|
40
|
+
&& (!env.CI || /^(0|false)$/i.test(env.CI))
|
|
41
|
+
&& env.TALOS_HOST_PROFILE?.toLowerCase() !== "horizon";
|
|
42
|
+
}
|
|
43
|
+
export async function checkForTalosUpdate(options) {
|
|
44
|
+
if (!parseUpdateVersion(options.currentVersion))
|
|
45
|
+
return null;
|
|
46
|
+
const budget = options.timeoutMs ?? 2_500;
|
|
47
|
+
const deadline = Date.now() + budget;
|
|
48
|
+
const fromNpm = options.source === "npm";
|
|
49
|
+
const token = fromNpm ? undefined : options.env.GH_TOKEN || options.env.GITHUB_TOKEN;
|
|
50
|
+
const controller = new AbortController();
|
|
51
|
+
const timer = setTimeout(() => controller.abort(), Math.max(1, Math.floor(budget / (fromNpm ? 1 : 2))));
|
|
52
|
+
try {
|
|
53
|
+
const response = await (options.fetch ?? fetch)(fromNpm ? "https://registry.npmjs.org/@vascend%2ftalos/latest" : RELEASE_ENDPOINT, {
|
|
54
|
+
headers: { Accept: fromNpm ? "application/json" : "application/vnd.github+json", "User-Agent": "vascend-talos-update",
|
|
55
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}) },
|
|
56
|
+
redirect: "error",
|
|
57
|
+
signal: controller.signal,
|
|
58
|
+
});
|
|
59
|
+
if (response.ok) {
|
|
60
|
+
const data = await response.json();
|
|
61
|
+
if (!fromNpm)
|
|
62
|
+
return updateFromRelease(options.currentVersion, data);
|
|
63
|
+
const pkg = data;
|
|
64
|
+
return pkg?.name === "@vascend/talos"
|
|
65
|
+
? updateFromRelease(options.currentVersion, { tag_name: pkg.version, draft: false, prerelease: false })
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
await response.body?.cancel();
|
|
69
|
+
}
|
|
70
|
+
catch { /* Offline, authentication or rate limit: try the user's GitHub CLI. */ }
|
|
71
|
+
finally {
|
|
72
|
+
clearTimeout(timer);
|
|
73
|
+
}
|
|
74
|
+
if (fromNpm)
|
|
75
|
+
return null;
|
|
76
|
+
const remaining = deadline - Date.now();
|
|
77
|
+
if (remaining <= 0)
|
|
78
|
+
return null;
|
|
79
|
+
try {
|
|
80
|
+
// Also supports private repositories when the user has signed into gh.
|
|
81
|
+
const json = await (options.run ?? runUpdateCommand)({ command: "gh", args: [
|
|
82
|
+
"api", "--hostname", "github.com", `repos/${TALOS_REPOSITORY}/releases/latest`,
|
|
83
|
+
], cwd: options.cwd, env: { ...options.env, GH_PROMPT_DISABLED: "1" }, timeoutMs: remaining });
|
|
84
|
+
return updateFromRelease(options.currentVersion, JSON.parse(json));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface UpdateCommand {
|
|
2
|
+
readonly command: string;
|
|
3
|
+
readonly args: readonly string[];
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly env: NodeJS.ProcessEnv;
|
|
6
|
+
readonly timeoutMs?: number;
|
|
7
|
+
readonly inherit?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type UpdateRunner = (command: UpdateCommand) => Promise<string>;
|
|
10
|
+
export declare const runUpdateCommand: UpdateRunner;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
// No shell: paths with spaces and release tags remain individual arguments.
|
|
3
|
+
export const runUpdateCommand = (command) => new Promise((resolve, reject) => {
|
|
4
|
+
const child = spawn(command.command, [...command.args], {
|
|
5
|
+
cwd: command.cwd, env: command.env, shell: false, windowsHide: true,
|
|
6
|
+
stdio: command.inherit ? "inherit" : ["ignore", "pipe", "pipe"],
|
|
7
|
+
timeout: command.timeoutMs,
|
|
8
|
+
});
|
|
9
|
+
let output = "";
|
|
10
|
+
let failed = false;
|
|
11
|
+
const collect = (data) => {
|
|
12
|
+
output += data.toString();
|
|
13
|
+
if (output.length > 2_000_000) {
|
|
14
|
+
failed = true;
|
|
15
|
+
child.kill();
|
|
16
|
+
reject(new Error("Command output exceeded limit"));
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
child.stdout?.on("data", collect);
|
|
20
|
+
// Do not surface authentication diagnostics or credentials in the update UI.
|
|
21
|
+
child.stderr?.resume();
|
|
22
|
+
child.on("error", reject);
|
|
23
|
+
child.on("close", (code, signal) => {
|
|
24
|
+
if (failed)
|
|
25
|
+
return;
|
|
26
|
+
if (code === 0 && !signal)
|
|
27
|
+
resolve(output.trim());
|
|
28
|
+
else
|
|
29
|
+
reject(new Error(`${command.command} exited with ${signal ?? code}`));
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ContentPart } from "./types.js";
|
|
2
|
+
export interface PendingUserMessage {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly parts: readonly ContentPart[];
|
|
5
|
+
/** Quando l'host l'ha ricevuto dall'utente. */
|
|
6
|
+
readonly queuedAt: number;
|
|
7
|
+
readonly immediate?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface UserInbox {
|
|
10
|
+
/** Accoda un messaggio arrivato durante il turno. Ritorna l'id assegnato. */
|
|
11
|
+
push(input: string | readonly ContentPart[], id?: string): string;
|
|
12
|
+
/** Porta un messaggio gia' accodato in testa, senza duplicarlo. */
|
|
13
|
+
promote(id: string): boolean;
|
|
14
|
+
/** Vero se c'e' almeno un messaggio in attesa. */
|
|
15
|
+
readonly pending: number;
|
|
16
|
+
/** Preleva e SVUOTA la coda. La chiama solo il loop, a confine sicuro. */
|
|
17
|
+
drain(): readonly PendingUserMessage[];
|
|
18
|
+
/** Richiesta esplicita di interrompere la generazione per leggere subito l'input.
|
|
19
|
+
* Notifica anche un invio immediato gia' pendente quando ci si iscrive. */
|
|
20
|
+
onImmediate?(listener: () => void): () => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createUserInbox(now?: () => number): UserInbox;
|
|
23
|
+
export declare function pendingText(message: PendingUserMessage): string;
|