@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,327 @@
|
|
|
1
|
+
// Retrocessione dei tool result vecchi a RIFERIMENTO richiamabile.
|
|
2
|
+
//
|
|
3
|
+
// I risultati degli strumenti sono la voce che cresce in modo monotono nella
|
|
4
|
+
// finestra: ogni lettura aggiunge token che nessun meccanismo toglie piu'. La
|
|
5
|
+
// compattazione interviene solo al limite della finestra e riassume TUTTO
|
|
6
|
+
// (perdendo il testo esatto); la compressione content-aware non tocca i tool di
|
|
7
|
+
// contenuto, giustamente. Nel mezzo non c'era niente.
|
|
8
|
+
//
|
|
9
|
+
// Qui il mezzo: quando la massa verbatim dei risultati supera una soglia, i piu'
|
|
10
|
+
// VECCHI vengono sostituiti — solo nella proiezione inviata al modello, non nella
|
|
11
|
+
// sessione su disco — da una riga che dice cosa erano, quanto pesavano, come si
|
|
12
|
+
// recuperano e con le prime righe come promemoria.
|
|
13
|
+
//
|
|
14
|
+
// Due vincoli non negoziabili, entrambi imposti qui:
|
|
15
|
+
// 1. si retrocede SOLO cio' che e' stato archiviato: senza id recuperabile
|
|
16
|
+
// sarebbe perdita di informazione, non gestione del contesto;
|
|
17
|
+
// 2. si interviene A SCATTI con isteresi, non a ogni turno: riscrivere un
|
|
18
|
+
// messaggio vecchio invalida la cache del prefisso da quel punto in avanti,
|
|
19
|
+
// quindi la retrocessione deve essere un evento raro che libera molto (la
|
|
20
|
+
// stessa economia della compattazione).
|
|
21
|
+
//
|
|
22
|
+
// Modulo PURO: nessun IO. L'archivio arriva come funzione `archivedId`.
|
|
23
|
+
import { estimateTokens } from "./compaction.js";
|
|
24
|
+
export const DEFAULT_TOOL_INDEX = {
|
|
25
|
+
enabled: true,
|
|
26
|
+
triggerTokens: 24_000,
|
|
27
|
+
keepTokens: 8_000,
|
|
28
|
+
keepRecent: 4,
|
|
29
|
+
minTokens: 150,
|
|
30
|
+
};
|
|
31
|
+
// Quote della finestra di contesto destinate ai risultati verbatim. Le soglie
|
|
32
|
+
// fisse (24k/8k) erano tarate su finestre da 128-200k: su un modello da 1M
|
|
33
|
+
// significavano tenere verbatim lo 0,8% del disponibile, cioe' meno del working
|
|
34
|
+
// set di un compito normale. Misurato in sessione: 80 tool call, 48 read_file su
|
|
35
|
+
// tre file e ZERO edit — il modello non "esplorava troppo", ricostruiva a ogni
|
|
36
|
+
// turno un contesto che gli veniva tolto sotto i piedi, e non arrivava mai
|
|
37
|
+
// all'azione. Le quote valgono come PAVIMENTO sui default storici: nessun
|
|
38
|
+
// modello piccolo peggiora.
|
|
39
|
+
const TRIGGER_SHARE = 0.12;
|
|
40
|
+
const KEEP_SHARE = 0.06;
|
|
41
|
+
export function toolIndexPolicy(env, contextWindow = 0) {
|
|
42
|
+
const flag = (env["TALOS_TOOL_INDEX"] ?? "").trim().toLowerCase();
|
|
43
|
+
const enabled = !(flag === "0" || flag === "off" || flag === "false" || flag === "no");
|
|
44
|
+
const positive = (raw, fallback) => {
|
|
45
|
+
const n = Number(raw);
|
|
46
|
+
return Number.isFinite(n) && n > 0 ? Math.trunc(n) : fallback;
|
|
47
|
+
};
|
|
48
|
+
const window = Number.isFinite(contextWindow) && contextWindow > 0 ? contextWindow : 0;
|
|
49
|
+
const scaledTrigger = window ? Math.max(DEFAULT_TOOL_INDEX.triggerTokens, Math.round(window * TRIGGER_SHARE)) : DEFAULT_TOOL_INDEX.triggerTokens;
|
|
50
|
+
const scaledKeep = window ? Math.max(DEFAULT_TOOL_INDEX.keepTokens, Math.round(window * KEEP_SHARE)) : DEFAULT_TOOL_INDEX.keepTokens;
|
|
51
|
+
const trigger = positive(env["TALOS_TOOL_INDEX_TRIGGER"], scaledTrigger);
|
|
52
|
+
const keep = positive(env["TALOS_TOOL_INDEX_KEEP"], scaledKeep);
|
|
53
|
+
return {
|
|
54
|
+
enabled,
|
|
55
|
+
triggerTokens: trigger,
|
|
56
|
+
// Un tetto piu' alto della soglia renderebbe l'intervento un no-op.
|
|
57
|
+
keepTokens: Math.min(keep, Math.max(1, trigger - 1)),
|
|
58
|
+
keepRecent: positive(env["TALOS_TOOL_INDEX_KEEP_RECENT"], DEFAULT_TOOL_INDEX.keepRecent),
|
|
59
|
+
minTokens: positive(env["TALOS_TOOL_INDEX_MIN"], DEFAULT_TOOL_INDEX.minTokens),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export const EMPTY_PLAN = { refs: [], freedTokens: 0, verbatimTokens: 0 };
|
|
63
|
+
// Decide COSA retrocedere. Deterministico: a parita' di cronologia e archivio,
|
|
64
|
+
// stesso piano.
|
|
65
|
+
export function planToolResultDemotion(input) {
|
|
66
|
+
const { policy } = input;
|
|
67
|
+
if (!policy.enabled)
|
|
68
|
+
return EMPTY_PLAN;
|
|
69
|
+
const names = toolNames(input.messages);
|
|
70
|
+
// In ordine di apparizione: i primi sono i piu' vecchi.
|
|
71
|
+
const candidates = [];
|
|
72
|
+
let verbatimTokens = 0;
|
|
73
|
+
let seen = 0;
|
|
74
|
+
const results = [];
|
|
75
|
+
for (const message of input.messages) {
|
|
76
|
+
for (const part of message.content) {
|
|
77
|
+
if (part.type !== "tool_result")
|
|
78
|
+
continue;
|
|
79
|
+
if (isDemoted(part.output))
|
|
80
|
+
continue;
|
|
81
|
+
results.push({ part, tokens: estimateTokens(part.output) });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const lastKept = Math.max(0, results.length - Math.max(0, policy.keepRecent));
|
|
85
|
+
for (const { part, tokens } of results) {
|
|
86
|
+
verbatimTokens += tokens;
|
|
87
|
+
seen += 1;
|
|
88
|
+
if (seen > lastKept)
|
|
89
|
+
continue;
|
|
90
|
+
if (part.isError)
|
|
91
|
+
continue; // un errore e' corto e serve al recupero
|
|
92
|
+
if (tokens < policy.minTokens)
|
|
93
|
+
continue;
|
|
94
|
+
const storedId = input.archivedId(part.callId);
|
|
95
|
+
if (!storedId)
|
|
96
|
+
continue;
|
|
97
|
+
candidates.push({
|
|
98
|
+
callId: part.callId,
|
|
99
|
+
storedId,
|
|
100
|
+
name: names.get(part.callId) ?? "strumento",
|
|
101
|
+
tokens,
|
|
102
|
+
images: part.media?.length ?? 0,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const demotable = candidates.reduce((sum, ref) => sum + ref.tokens, 0);
|
|
106
|
+
if (demotable < policy.triggerTokens)
|
|
107
|
+
return { refs: [], freedTokens: 0, verbatimTokens };
|
|
108
|
+
// Si retrocede dal piu' vecchio, fermandosi appena la massa verbatim rientra
|
|
109
|
+
// sotto il tetto: cosi' il lavoro recente resta intatto.
|
|
110
|
+
const refs = [];
|
|
111
|
+
let remaining = verbatimTokens;
|
|
112
|
+
for (const ref of candidates) {
|
|
113
|
+
if (remaining <= policy.keepTokens)
|
|
114
|
+
break;
|
|
115
|
+
refs.push(ref);
|
|
116
|
+
remaining -= ref.tokens;
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
refs,
|
|
120
|
+
freedTokens: refs.reduce((sum, ref) => sum + ref.tokens, 0),
|
|
121
|
+
verbatimTokens,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Applica il piano: nuova lista di messaggi con i risultati retrocessi. La
|
|
125
|
+
// sessione su disco NON viene toccata — la cronologia resta integrale, questa e'
|
|
126
|
+
// solo la proiezione inviata al modello.
|
|
127
|
+
export function applyToolResultDemotion(messages, plan) {
|
|
128
|
+
if (!plan.refs.length)
|
|
129
|
+
return messages;
|
|
130
|
+
const byCallId = new Map(plan.refs.map((ref) => [ref.callId, ref]));
|
|
131
|
+
return messages.map((message) => {
|
|
132
|
+
if (!message.content.some((part) => part.type === "tool_result" && byCallId.has(part.callId))) {
|
|
133
|
+
return message;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
...message,
|
|
137
|
+
content: message.content.map((part) => {
|
|
138
|
+
if (part.type !== "tool_result")
|
|
139
|
+
return part;
|
|
140
|
+
const ref = byCallId.get(part.callId);
|
|
141
|
+
if (!ref)
|
|
142
|
+
return part;
|
|
143
|
+
// Le immagini allegate a un risultato vecchio se ne vanno con esso: uno
|
|
144
|
+
// screenshot di sei azioni fa costa 1400 token a ogni turno e lo stato
|
|
145
|
+
// che mostrava non esiste piu'. Il riferimento lo dichiara.
|
|
146
|
+
const { media: _media, ...rest } = part;
|
|
147
|
+
return { ...rest, output: demotedText(ref, part.output) };
|
|
148
|
+
}),
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const MARKER = "[risultato archiviato";
|
|
153
|
+
export function isDemoted(output) {
|
|
154
|
+
return output.startsWith(MARKER);
|
|
155
|
+
}
|
|
156
|
+
// La riga che sostituisce il corpo. Deve bastare a decidere SE recuperare:
|
|
157
|
+
// quale strumento, quanto pesava, le prime righe, e la sintassi esatta del
|
|
158
|
+
// recupero (senza di essa il modello inventa la chiamata).
|
|
159
|
+
export function demotedText(ref, output) {
|
|
160
|
+
const head = firstLines(output, 2, 200);
|
|
161
|
+
const parts = [
|
|
162
|
+
`${MARKER} · ${ref.name} · ${output.length} caratteri (~${ref.tokens} token)`,
|
|
163
|
+
...(head ? [`inizio: ${head}`] : []),
|
|
164
|
+
...(ref.images ? [`${ref.images === 1 ? "1 immagine" : `${ref.images} immagini`} non piu' allegate: riacquisisci se servono`] : []),
|
|
165
|
+
`integrale: output_page id="${ref.storedId}" page=1`,
|
|
166
|
+
];
|
|
167
|
+
return `${parts.join("\n")}]`;
|
|
168
|
+
}
|
|
169
|
+
function firstLines(text, lines, max) {
|
|
170
|
+
const head = String(text || "")
|
|
171
|
+
.split(/\r?\n/)
|
|
172
|
+
.filter((line) => line.trim())
|
|
173
|
+
.slice(0, lines)
|
|
174
|
+
.join(" / ")
|
|
175
|
+
.replace(/\s+/g, " ")
|
|
176
|
+
.trim();
|
|
177
|
+
if (!head)
|
|
178
|
+
return "";
|
|
179
|
+
return head.length > max ? `${head.slice(0, max - 1)}…` : head;
|
|
180
|
+
}
|
|
181
|
+
// --- una sola copia dei byte nella sessione ----------------------------------
|
|
182
|
+
//
|
|
183
|
+
// Misurato su una sessione Computer Use reale: la STESSA immagine PNG compariva
|
|
184
|
+
// TRE volte in ogni tool result — `media` (quella che va al modello), il blocco
|
|
185
|
+
// MCP `content[image]` e `_meta` dell'host (quella della card in chat). 680 KB
|
|
186
|
+
// diventavano 2 MB per schermata: 12,3 MB di sessione invece di 4, tutti
|
|
187
|
+
// residenti nella memoria del processo che serve anche l'interfaccia e scritti
|
|
188
|
+
// con un `appendFileSync` da 2 MB per riga.
|
|
189
|
+
//
|
|
190
|
+
// UI e client MCP hanno gia' ricevuto la loro copia nell'evento `tool_result`:
|
|
191
|
+
// nella cronologia persistita non serve. Qui si tiene solo `media`.
|
|
192
|
+
// Oltre questa lunghezza una stringa dentro `_meta` non e' un metadato: e' un
|
|
193
|
+
// blob. La regola e' volutamente generica, cosi' vale per qualunque host.
|
|
194
|
+
const META_BLOB_CHARS = 4_096;
|
|
195
|
+
export function slimToolResultForSession(part) {
|
|
196
|
+
const content = part.content?.filter((block) => block.type !== "image");
|
|
197
|
+
const meta = part._meta ? stripBlobs(part._meta) : undefined;
|
|
198
|
+
const droppedContent = (part.content?.length ?? 0) !== (content?.length ?? 0);
|
|
199
|
+
if (!droppedContent && meta === part._meta)
|
|
200
|
+
return part;
|
|
201
|
+
const next = { ...part };
|
|
202
|
+
if (content && content.length)
|
|
203
|
+
next["content"] = content;
|
|
204
|
+
else
|
|
205
|
+
delete next["content"];
|
|
206
|
+
if (meta && Object.keys(meta).length)
|
|
207
|
+
next["_meta"] = meta;
|
|
208
|
+
else
|
|
209
|
+
delete next["_meta"];
|
|
210
|
+
return next;
|
|
211
|
+
}
|
|
212
|
+
export function slimMessageForSession(message) {
|
|
213
|
+
if (!message.content.some((part) => part.type === "tool_result"))
|
|
214
|
+
return message;
|
|
215
|
+
const content = message.content.map((part) => (part.type === "tool_result" ? slimToolResultForSession(part) : part));
|
|
216
|
+
// Niente da togliere, niente da copiare: la stessa istanza. Questa funzione
|
|
217
|
+
// gira su OGNI messaggio di tool, quindi il caso normale deve costare zero.
|
|
218
|
+
return content.every((part, index) => part === message.content[index]) ? message : { ...message, content };
|
|
219
|
+
}
|
|
220
|
+
// Rimuove ricorsivamente le stringhe-blob, lasciando una traccia leggibile.
|
|
221
|
+
// Ritorna l'oggetto ORIGINALE quando non c'e' niente da togliere, cosi' il
|
|
222
|
+
// chiamante puo' riconoscere il no-op per identita'.
|
|
223
|
+
function stripBlobs(value) {
|
|
224
|
+
let changed = false;
|
|
225
|
+
const walk = (input) => {
|
|
226
|
+
if (typeof input === "string") {
|
|
227
|
+
if (input.length <= META_BLOB_CHARS)
|
|
228
|
+
return input;
|
|
229
|
+
changed = true;
|
|
230
|
+
return `[blob rimosso dalla cronologia: ${input.length} caratteri]`;
|
|
231
|
+
}
|
|
232
|
+
if (Array.isArray(input))
|
|
233
|
+
return input.map(walk);
|
|
234
|
+
if (input && typeof input === "object") {
|
|
235
|
+
const out = {};
|
|
236
|
+
for (const [key, item] of Object.entries(input))
|
|
237
|
+
out[key] = walk(item);
|
|
238
|
+
return out;
|
|
239
|
+
}
|
|
240
|
+
return input;
|
|
241
|
+
};
|
|
242
|
+
const result = walk(value);
|
|
243
|
+
return changed ? result : value;
|
|
244
|
+
}
|
|
245
|
+
export const DEFAULT_MEDIA_BUDGET = { enabled: true, keepImages: 2 };
|
|
246
|
+
export function mediaBudgetPolicy(env) {
|
|
247
|
+
const flag = (env["TALOS_MEDIA_BUDGET"] ?? "").trim().toLowerCase();
|
|
248
|
+
const raw = Number(env["TALOS_MEDIA_KEEP"]);
|
|
249
|
+
return {
|
|
250
|
+
enabled: !(flag === "0" || flag === "off" || flag === "false" || flag === "no"),
|
|
251
|
+
keepImages: Number.isFinite(raw) && raw >= 0 ? Math.trunc(raw) : DEFAULT_MEDIA_BUDGET.keepImages,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
export const EMPTY_MEDIA_PLAN = { callIds: [], images: 0, bytes: 0, totalImages: 0 };
|
|
255
|
+
// Decide quali risultati perdono le immagini. Le immagini allegate DALL'UTENTE
|
|
256
|
+
// non si toccano: le ha messe lui, e sono poche.
|
|
257
|
+
export function planMediaEviction(input) {
|
|
258
|
+
if (!input.policy.enabled)
|
|
259
|
+
return EMPTY_MEDIA_PLAN;
|
|
260
|
+
const carriers = [];
|
|
261
|
+
for (const message of input.messages) {
|
|
262
|
+
for (const part of message.content) {
|
|
263
|
+
if (part.type !== "tool_result" || !part.media?.length)
|
|
264
|
+
continue;
|
|
265
|
+
carriers.push({
|
|
266
|
+
callId: part.callId,
|
|
267
|
+
images: part.media.length,
|
|
268
|
+
bytes: part.media.reduce((sum, image) => sum + image.data.length, 0),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const totalImages = carriers.reduce((sum, item) => sum + item.images, 0);
|
|
273
|
+
if (totalImages <= input.policy.keepImages)
|
|
274
|
+
return { ...EMPTY_MEDIA_PLAN, totalImages };
|
|
275
|
+
// Si tengono le PIU' RECENTI: sono lo stato su cui il modello sta decidendo.
|
|
276
|
+
const keep = new Set();
|
|
277
|
+
let kept = 0;
|
|
278
|
+
for (let index = carriers.length - 1; index >= 0 && kept < input.policy.keepImages; index -= 1) {
|
|
279
|
+
const carrier = carriers[index];
|
|
280
|
+
if (!carrier)
|
|
281
|
+
continue;
|
|
282
|
+
keep.add(carrier.callId);
|
|
283
|
+
kept += carrier.images;
|
|
284
|
+
}
|
|
285
|
+
const dropped = carriers.filter((carrier) => !keep.has(carrier.callId));
|
|
286
|
+
return {
|
|
287
|
+
callIds: dropped.map((carrier) => carrier.callId),
|
|
288
|
+
images: dropped.reduce((sum, carrier) => sum + carrier.images, 0),
|
|
289
|
+
bytes: dropped.reduce((sum, carrier) => sum + carrier.bytes, 0),
|
|
290
|
+
totalImages,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const MEDIA_NOTE = "[schermata non piu' allegata";
|
|
294
|
+
export function applyMediaEviction(messages, plan) {
|
|
295
|
+
if (!plan.callIds.length)
|
|
296
|
+
return messages;
|
|
297
|
+
const drop = new Set(plan.callIds);
|
|
298
|
+
return messages.map((message) => {
|
|
299
|
+
if (!message.content.some((part) => part.type === "tool_result" && drop.has(part.callId) && part.media?.length)) {
|
|
300
|
+
return message;
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
...message,
|
|
304
|
+
content: message.content.map((part) => {
|
|
305
|
+
if (part.type !== "tool_result" || !drop.has(part.callId) || !part.media?.length)
|
|
306
|
+
return part;
|
|
307
|
+
const kb = Math.round(part.media.reduce((sum, image) => sum + image.data.length, 0) / 1024);
|
|
308
|
+
const count = part.media.length;
|
|
309
|
+
const { media: _media, ...rest } = part;
|
|
310
|
+
const note = `${MEDIA_NOTE}: ${count === 1 ? "1 immagine" : `${count} immagini`}, ${kb} KB `
|
|
311
|
+
+ "rimossi dalla finestra perche' mostravano uno stato superato. Riacquisisci se serve rivedere.]";
|
|
312
|
+
return { ...rest, output: `${part.output}\n${note}` };
|
|
313
|
+
}),
|
|
314
|
+
};
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
// Mappa callId -> nome dello strumento che ha prodotto il risultato.
|
|
318
|
+
function toolNames(messages) {
|
|
319
|
+
const names = new Map();
|
|
320
|
+
for (const message of messages) {
|
|
321
|
+
for (const part of message.content) {
|
|
322
|
+
if (part.type === "tool_call")
|
|
323
|
+
names.set(part.id, part.name);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return names;
|
|
327
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ToolResultPart } from "./types.js";
|
|
2
|
+
export interface StoredToolOutput {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly callId: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly chars: number;
|
|
7
|
+
readonly at: number;
|
|
8
|
+
readonly sha256?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ToolOutputStore {
|
|
11
|
+
private readonly dir;
|
|
12
|
+
readonly scope: string;
|
|
13
|
+
private index;
|
|
14
|
+
private signature;
|
|
15
|
+
private constructor();
|
|
16
|
+
static open(sessionDir: string, sessionId: string): ToolOutputStore;
|
|
17
|
+
put(callId: string, name: string, output: string, result?: ToolResultPart): StoredToolOutput | null;
|
|
18
|
+
/**
|
|
19
|
+
* Lega un nuovo callId a un archivio GIA' esistente, senza creare un id ne'
|
|
20
|
+
* un file nuovi.
|
|
21
|
+
*
|
|
22
|
+
* Serve al recupero (`output_page` su un id `tr*`): il suo risultato e' una
|
|
23
|
+
* COPIA di qualcosa che l'archivio contiene gia'. Archiviandolo come nuovo si
|
|
24
|
+
* otteneva un `tr` nuovo a ogni recupero, che alla retrocessione successiva
|
|
25
|
+
* diventava un marker nuovo, che invitava un altro recupero: in una sessione
|
|
26
|
+
* reale sono state 52 chiamate output_page su 80, con i marker accodati in
|
|
27
|
+
* catena dentro lo stesso testo. Alias = il recupero e' idempotente e non
|
|
28
|
+
* genera mai una nuova esca.
|
|
29
|
+
*/
|
|
30
|
+
alias(callId: string, id: string): StoredToolOutput | null;
|
|
31
|
+
byCallId(callId: string): StoredToolOutput | null;
|
|
32
|
+
entry(id: string): StoredToolOutput | null;
|
|
33
|
+
text(id: string): string | null;
|
|
34
|
+
result(id: string): ToolResultPart | null;
|
|
35
|
+
private refresh;
|
|
36
|
+
private writeIndex;
|
|
37
|
+
private read;
|
|
38
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { withLockSync } from "../vascend/file-lock.js";
|
|
3
|
+
// Archivio su disco degli output degli strumenti.
|
|
4
|
+
//
|
|
5
|
+
// Un tool result entra nel contesto una volta e poi ci resta per sempre: la
|
|
6
|
+
// cronologia e' append-only, quindi tre `read_file` da 5k token diventano 15k
|
|
7
|
+
// token pagati a OGNI chiamata successiva, per il resto della conversazione.
|
|
8
|
+
// Comprimere non basta (i tool di CONTENUTO sono giustamente esenti: il modello
|
|
9
|
+
// ne vuole il testo verbatim) e troncare perde informazione.
|
|
10
|
+
//
|
|
11
|
+
// La via d'uscita e' l'indirizzabilita': l'output completo si archivia qui, con
|
|
12
|
+
// un id corto e stabile, e nella finestra resta un riferimento richiamabile.
|
|
13
|
+
// Niente e' perduto — `output_page` risolve l'id e restituisce il testo — quindi
|
|
14
|
+
// la retrocessione e' reversibile su richiesta del modello.
|
|
15
|
+
//
|
|
16
|
+
// Store per SESSIONE, su disco: sopravvive al riavvio del processo host, che e'
|
|
17
|
+
// il requisito che lo store di pagine in memoria non soddisfa.
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, statSync } from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
const EMPTY = { version: 1, nextSeq: 1, entries: {} };
|
|
21
|
+
export class ToolOutputStore {
|
|
22
|
+
dir;
|
|
23
|
+
scope;
|
|
24
|
+
index = EMPTY;
|
|
25
|
+
signature = "";
|
|
26
|
+
constructor(dir, scope) {
|
|
27
|
+
this.dir = dir;
|
|
28
|
+
this.scope = scope;
|
|
29
|
+
this.index = this.read();
|
|
30
|
+
}
|
|
31
|
+
static open(sessionDir, sessionId) {
|
|
32
|
+
return new ToolOutputStore(join(sessionDir, "tool-outputs", sanitize(sessionId)), sessionId);
|
|
33
|
+
}
|
|
34
|
+
// Archivia un output. Idempotente per callId: un turno ripetuto (retry del
|
|
35
|
+
// provider, riparazione) non moltiplica i file ne' gli id.
|
|
36
|
+
put(callId, name, output, result) {
|
|
37
|
+
const key = sanitize(callId);
|
|
38
|
+
if (!key || !output)
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
return withLockSync(join(this.dir, "index.json"), () => {
|
|
42
|
+
this.index = this.read(true);
|
|
43
|
+
const existing = this.index.entries[key];
|
|
44
|
+
if (existing)
|
|
45
|
+
return existing;
|
|
46
|
+
const id = `tr${this.index.nextSeq}`;
|
|
47
|
+
writeFileSync(join(this.dir, `${id}.txt`), output, "utf8");
|
|
48
|
+
const entry = {
|
|
49
|
+
id,
|
|
50
|
+
callId: key,
|
|
51
|
+
name: String(name || "strumento"),
|
|
52
|
+
chars: output.length,
|
|
53
|
+
at: Date.now(),
|
|
54
|
+
sha256: createHash("sha256").update(output).digest("hex"),
|
|
55
|
+
};
|
|
56
|
+
this.index = {
|
|
57
|
+
version: 1,
|
|
58
|
+
nextSeq: this.index.nextSeq + 1,
|
|
59
|
+
entries: { ...this.index.entries, [key]: entry },
|
|
60
|
+
};
|
|
61
|
+
if (result)
|
|
62
|
+
writeFileSync(join(this.dir, id + ".json"), JSON.stringify(result), "utf8");
|
|
63
|
+
this.writeIndex();
|
|
64
|
+
return entry;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// L'archivio e' un acceleratore: se il disco non collabora, l'output resta
|
|
69
|
+
// verbatim nel contesto. Mai perdere contenuto per salvare token.
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Lega un nuovo callId a un archivio GIA' esistente, senza creare un id ne'
|
|
75
|
+
* un file nuovi.
|
|
76
|
+
*
|
|
77
|
+
* Serve al recupero (`output_page` su un id `tr*`): il suo risultato e' una
|
|
78
|
+
* COPIA di qualcosa che l'archivio contiene gia'. Archiviandolo come nuovo si
|
|
79
|
+
* otteneva un `tr` nuovo a ogni recupero, che alla retrocessione successiva
|
|
80
|
+
* diventava un marker nuovo, che invitava un altro recupero: in una sessione
|
|
81
|
+
* reale sono state 52 chiamate output_page su 80, con i marker accodati in
|
|
82
|
+
* catena dentro lo stesso testo. Alias = il recupero e' idempotente e non
|
|
83
|
+
* genera mai una nuova esca.
|
|
84
|
+
*/
|
|
85
|
+
alias(callId, id) {
|
|
86
|
+
const key = sanitize(callId);
|
|
87
|
+
if (!key)
|
|
88
|
+
return null;
|
|
89
|
+
try {
|
|
90
|
+
return withLockSync(join(this.dir, "index.json"), () => {
|
|
91
|
+
this.index = this.read(true);
|
|
92
|
+
const existing = this.index.entries[key];
|
|
93
|
+
if (existing)
|
|
94
|
+
return existing;
|
|
95
|
+
const target = Object.values(this.index.entries).find((entry) => entry.id === id);
|
|
96
|
+
if (!target)
|
|
97
|
+
return null;
|
|
98
|
+
const entry = { ...target, callId: key };
|
|
99
|
+
this.index = {
|
|
100
|
+
...this.index,
|
|
101
|
+
entries: { ...this.index.entries, [key]: entry },
|
|
102
|
+
};
|
|
103
|
+
mkdirSync(this.dir, { recursive: true });
|
|
104
|
+
this.writeIndex();
|
|
105
|
+
return entry;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
byCallId(callId) {
|
|
113
|
+
this.refresh();
|
|
114
|
+
return this.index.entries[sanitize(callId)] ?? null;
|
|
115
|
+
}
|
|
116
|
+
entry(id) {
|
|
117
|
+
this.refresh();
|
|
118
|
+
for (const value of Object.values(this.index.entries)) {
|
|
119
|
+
if (value.id === id)
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
text(id) {
|
|
125
|
+
if (!/^tr\d+$/.test(id))
|
|
126
|
+
return null;
|
|
127
|
+
try {
|
|
128
|
+
const path = join(this.dir, `${id}.txt`);
|
|
129
|
+
return existsSync(path) ? readFileSync(path, "utf8") : null;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
result(id) {
|
|
136
|
+
if (!/^tr\d+$/.test(id))
|
|
137
|
+
return null;
|
|
138
|
+
try {
|
|
139
|
+
return JSON.parse(readFileSync(join(this.dir, id + ".json"), "utf8"));
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
refresh() {
|
|
146
|
+
try {
|
|
147
|
+
const stat = statSync(join(this.dir, "index.json"));
|
|
148
|
+
const signature = stat.size + ":" + stat.mtimeMs + ":" + stat.ctimeMs;
|
|
149
|
+
if (signature !== this.signature) {
|
|
150
|
+
this.index = this.read();
|
|
151
|
+
this.signature = signature;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch { /* keep the last readable index */ }
|
|
155
|
+
}
|
|
156
|
+
writeIndex() {
|
|
157
|
+
const path = join(this.dir, "index.json");
|
|
158
|
+
const temp = path + "." + process.pid + ".tmp";
|
|
159
|
+
writeFileSync(temp, JSON.stringify(this.index), "utf8");
|
|
160
|
+
renameSync(temp, path);
|
|
161
|
+
this.signature = "";
|
|
162
|
+
}
|
|
163
|
+
read(strict = false) {
|
|
164
|
+
try {
|
|
165
|
+
const path = join(this.dir, "index.json");
|
|
166
|
+
if (!existsSync(path))
|
|
167
|
+
return EMPTY;
|
|
168
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
169
|
+
if (!parsed || typeof parsed !== "object" || !parsed.entries || Array.isArray(parsed.entries))
|
|
170
|
+
throw new Error("indice output non valido");
|
|
171
|
+
const seq = Number(parsed.nextSeq);
|
|
172
|
+
const ids = Object.values(parsed.entries).map((entry) => /^tr(\d+)$/.exec(entry?.id ?? "")?.[1]).map(Number);
|
|
173
|
+
if (!Number.isInteger(seq) || seq <= 0 || ids.some((id) => !Number.isFinite(id) || id >= seq))
|
|
174
|
+
throw new Error("sequenza output non valida");
|
|
175
|
+
return {
|
|
176
|
+
version: 1,
|
|
177
|
+
nextSeq: Number.isFinite(seq) && seq > 0 ? Math.trunc(seq) : 1,
|
|
178
|
+
entries: parsed.entries,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (strict)
|
|
183
|
+
throw error;
|
|
184
|
+
return EMPTY;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function sanitize(value) {
|
|
189
|
+
return String(value || "").replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 120);
|
|
190
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToolCallPart } from "./types.js";
|
|
2
|
+
export declare function toolConcurrency(env: NodeJS.ProcessEnv): number;
|
|
3
|
+
/**
|
|
4
|
+
* Finestre limitate di chiamate contigue e indipendenti. Ogni altra chiamata
|
|
5
|
+
* e' una barriera: parte solo dopo il completamento e il consumo degli esiti
|
|
6
|
+
* precedenti. Il consumer applica hook, archiviazione ed eventi in ordine.
|
|
7
|
+
* `run` deve restituire un esito anche per errori e chiamate annullate.
|
|
8
|
+
*/
|
|
9
|
+
export declare function scheduleToolCalls<T>(calls: readonly ToolCallPart[], options: {
|
|
10
|
+
readonly concurrency: number;
|
|
11
|
+
readonly parallel: (call: ToolCallPart) => boolean;
|
|
12
|
+
readonly run: (call: ToolCallPart) => Promise<T>;
|
|
13
|
+
}): AsyncGenerator<{
|
|
14
|
+
readonly call: ToolCallPart;
|
|
15
|
+
readonly result: T;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function toolConcurrency(env) {
|
|
2
|
+
const raw = env["TALOS_TOOL_CONCURRENCY"];
|
|
3
|
+
if (!raw?.trim())
|
|
4
|
+
return 4;
|
|
5
|
+
const value = Number(raw);
|
|
6
|
+
return Number.isFinite(value) && value >= 1 ? Math.min(16, Math.floor(value)) : 4;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Finestre limitate di chiamate contigue e indipendenti. Ogni altra chiamata
|
|
10
|
+
* e' una barriera: parte solo dopo il completamento e il consumo degli esiti
|
|
11
|
+
* precedenti. Il consumer applica hook, archiviazione ed eventi in ordine.
|
|
12
|
+
* `run` deve restituire un esito anche per errori e chiamate annullate.
|
|
13
|
+
*/
|
|
14
|
+
export async function* scheduleToolCalls(calls, options) {
|
|
15
|
+
const limit = Number.isFinite(options.concurrency)
|
|
16
|
+
? Math.max(1, Math.min(16, Math.floor(options.concurrency))) : 1;
|
|
17
|
+
let cursor = 0;
|
|
18
|
+
while (cursor < calls.length) {
|
|
19
|
+
const start = cursor++;
|
|
20
|
+
if (limit > 1 && options.parallel(calls[start])) {
|
|
21
|
+
while (cursor < calls.length && cursor - start < limit && options.parallel(calls[cursor]))
|
|
22
|
+
cursor++;
|
|
23
|
+
}
|
|
24
|
+
// Anche un errore inatteso deve drenare il batch prima di propagarsi:
|
|
25
|
+
// nessun handler rimane abbandonato in background dal generatore.
|
|
26
|
+
const window = calls.slice(start, cursor);
|
|
27
|
+
const outcomes = await Promise.allSettled(window.map((call) => Promise.resolve().then(() => options.run(call))));
|
|
28
|
+
for (let index = 0; index < window.length; index++) {
|
|
29
|
+
const outcome = outcomes[index];
|
|
30
|
+
if (outcome.status === "rejected")
|
|
31
|
+
throw outcome.reason;
|
|
32
|
+
yield { call: window[index], result: outcome.value };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type TrustDecision = "trust" | "deny";
|
|
2
|
+
export type DefaultProjectTrust = "ask" | "trust" | "deny";
|
|
3
|
+
export declare function resourcesRequiringTrust(cwd: string): readonly string[];
|
|
4
|
+
type TrustStore = Record<string, TrustDecision>;
|
|
5
|
+
export declare function readTrustStore(env: NodeJS.ProcessEnv): TrustStore;
|
|
6
|
+
export declare function writeTrustDecision(env: NodeJS.ProcessEnv, cwd: string, decision: TrustDecision): void;
|
|
7
|
+
export declare function savedDecision(store: TrustStore, cwd: string): TrustDecision | undefined;
|
|
8
|
+
export declare function parseDefaultTrust(value: string | undefined): DefaultProjectTrust;
|
|
9
|
+
export interface TrustResolution {
|
|
10
|
+
readonly trusted: boolean;
|
|
11
|
+
readonly resources: readonly string[];
|
|
12
|
+
readonly persist: boolean;
|
|
13
|
+
readonly source: "default" | "stored" | "prompt";
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveProjectTrust(opts: {
|
|
16
|
+
readonly cwd: string;
|
|
17
|
+
readonly env: NodeJS.ProcessEnv;
|
|
18
|
+
readonly defaultTrust: DefaultProjectTrust;
|
|
19
|
+
readonly prompt?: (resources: readonly string[]) => Promise<boolean>;
|
|
20
|
+
}): Promise<TrustResolution>;
|
|
21
|
+
export {};
|