@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,135 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readdirSync, statSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { collectCandidates } from "./candidate-collector.js";
|
|
5
|
+
import { buildMemoryPacket, clampMemoryPacket } from "./memory-packet.js";
|
|
6
|
+
import { retrieve } from "./context-retriever.js";
|
|
7
|
+
import { ContextSearchIndex } from "./context-search-index.js";
|
|
8
|
+
import { projectMemoryScopes, clearContextScopeIndexes } from "./context-scope-index.js";
|
|
9
|
+
const STORE_SUFFIXES = [".memory.events.jsonl", ".rooms.jsonl", ".decisions.jsonl", ".contracts.jsonl", ".castle.json", ".vision.json"];
|
|
10
|
+
const FABRIC_DIR = "context-fabric";
|
|
11
|
+
const MAX_CACHED_SCOPES = 8;
|
|
12
|
+
const cache = new Map();
|
|
13
|
+
/** Legacy callers can inspect the entire directory; runtime signatures use exact dependencies. */
|
|
14
|
+
export function storeSignature(sessionDir, scopes) {
|
|
15
|
+
if (!scopes)
|
|
16
|
+
return legacyStoreSignature(sessionDir);
|
|
17
|
+
try {
|
|
18
|
+
statSync(sessionDir);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
const hash = createHash("sha256");
|
|
24
|
+
for (const scope of [...new Set(scopes)].sort())
|
|
25
|
+
for (const suffix of STORE_SUFFIXES) {
|
|
26
|
+
const name = scope + suffix;
|
|
27
|
+
try {
|
|
28
|
+
const stat = statSync(join(sessionDir, name));
|
|
29
|
+
hash.update(name + ":" + stat.size + ":" + stat.mtimeMs + ":" + stat.ctimeMs + "\n");
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error.code !== "ENOENT")
|
|
33
|
+
return "";
|
|
34
|
+
hash.update(name + ":missing\n");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return hash.digest("hex");
|
|
38
|
+
}
|
|
39
|
+
function legacyStoreSignature(sessionDir) {
|
|
40
|
+
let names;
|
|
41
|
+
try {
|
|
42
|
+
names = readdirSync(sessionDir);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
const hash = createHash("sha1");
|
|
48
|
+
let counted = 0;
|
|
49
|
+
for (const name of names.sort()) {
|
|
50
|
+
if (!STORE_SUFFIXES.some((suffix) => name.endsWith(suffix)))
|
|
51
|
+
continue;
|
|
52
|
+
try {
|
|
53
|
+
const st = statSync(join(sessionDir, name));
|
|
54
|
+
hash.update(`${name}:${st.size}:${st.mtimeMs}\n`);
|
|
55
|
+
counted += 1;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Un file svanito fra readdir e stat e' esso stesso un cambiamento:
|
|
59
|
+
// marcalo, cosi' la firma non coincide con quella precedente.
|
|
60
|
+
hash.update(`${name}:gone\n`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const fabricDir = join(sessionDir, FABRIC_DIR);
|
|
65
|
+
const frames = readdirSync(fabricDir).filter((name) => name.endsWith(".json")).sort();
|
|
66
|
+
hash.update(`fabric-count:${frames.length}\n`);
|
|
67
|
+
for (const name of frames) {
|
|
68
|
+
const st = statSync(join(fabricDir, name));
|
|
69
|
+
hash.update(`fabric:${name}:${st.size}:${st.mtimeMs}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
hash.update("fabric:none\n");
|
|
74
|
+
}
|
|
75
|
+
return `${counted}-${hash.digest("hex").slice(0, 16)}`;
|
|
76
|
+
}
|
|
77
|
+
export function loadContextStoreSnapshot(input) {
|
|
78
|
+
const indexed = input.indexed ?? process.env["TALOS_CONTEXT_INDEX"] !== "0";
|
|
79
|
+
const key = JSON.stringify([input.sessionDir, input.scopeId, input.projectKey, input.planScopeId, indexed]);
|
|
80
|
+
const projectScopes = indexed
|
|
81
|
+
? (input.projectKey ? projectMemoryScopes(input.sessionDir, input.projectKey) : []).filter((scope) => scope !== input.scopeId).sort()
|
|
82
|
+
: undefined;
|
|
83
|
+
const scopes = indexed ? [input.scopeId, ...(projectScopes ?? []), ...(input.planScopeId ? [input.planScopeId] : [])] : undefined;
|
|
84
|
+
const signature = storeSignature(input.sessionDir, scopes);
|
|
85
|
+
const previous = cache.get(key);
|
|
86
|
+
if (signature && previous?.signature === signature) {
|
|
87
|
+
cache.delete(key);
|
|
88
|
+
cache.set(key, previous);
|
|
89
|
+
return previous;
|
|
90
|
+
}
|
|
91
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
92
|
+
const before = storeSignature(input.sessionDir, scopes);
|
|
93
|
+
const snapshot = buildSnapshot(input, key, before, projectScopes, indexed, previous);
|
|
94
|
+
if (before !== storeSignature(input.sessionDir, scopes))
|
|
95
|
+
continue;
|
|
96
|
+
if (before) {
|
|
97
|
+
cache.delete(key);
|
|
98
|
+
cache.set(key, snapshot);
|
|
99
|
+
while (cache.size > MAX_CACHED_SCOPES)
|
|
100
|
+
cache.delete(cache.keys().next().value);
|
|
101
|
+
}
|
|
102
|
+
return snapshot;
|
|
103
|
+
}
|
|
104
|
+
throw new Error("gli store di contesto stanno cambiando: snapshot coerente non disponibile");
|
|
105
|
+
}
|
|
106
|
+
function buildSnapshot(input, key, signature, projectScopes, indexed, previous) {
|
|
107
|
+
const pool = collectCandidates({ ...input, ...(projectScopes ? { projectScopes } : {}),
|
|
108
|
+
...(indexed ? {} : { limit: 1000 }) });
|
|
109
|
+
const index = indexed ? new ContextSearchIndex(pool, previous?.index) : undefined;
|
|
110
|
+
// Eager capture: packet and candidates belong to the same checked revision.
|
|
111
|
+
const recent = new Map();
|
|
112
|
+
for (const candidate of pool)
|
|
113
|
+
if (candidate.scopeId)
|
|
114
|
+
recent.set(candidate.scopeId, Math.max(recent.get(candidate.scopeId) ?? 0, candidate.createdAt));
|
|
115
|
+
const packetScopes = projectScopes?.slice().sort((a, b) => (recent.get(b) ?? 0) - (recent.get(a) ?? 0) || a.localeCompare(b)).slice(0, 6);
|
|
116
|
+
const packet = buildMemoryPacket({ ...input, maxChars: Number.MAX_SAFE_INTEGER,
|
|
117
|
+
...(packetScopes ? { projectScopes: packetScopes } : {}) });
|
|
118
|
+
const retrievals = new Map();
|
|
119
|
+
return {
|
|
120
|
+
key, signature, pool, ...(index ? { index } : {}),
|
|
121
|
+
packet: (maxChars) => clampMemoryPacket(packet, maxChars > 0 ? maxChars : 12_000),
|
|
122
|
+
retrieve(query, limit) {
|
|
123
|
+
const key = JSON.stringify([query, limit]);
|
|
124
|
+
const cached = retrievals.get(key);
|
|
125
|
+
if (cached)
|
|
126
|
+
return cached;
|
|
127
|
+
const ranked = retrieve(pool, { query, limit, ...(index ? { index } : { legacy: true }) });
|
|
128
|
+
if (retrievals.size >= 64)
|
|
129
|
+
retrievals.delete(retrievals.keys().next().value);
|
|
130
|
+
retrievals.set(key, ranked);
|
|
131
|
+
return ranked;
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function invalidateContextSnapshots() { cache.clear(); clearContextScopeIndexes(); }
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ContextStoreSnapshot } from "./context-snapshot.js";
|
|
2
|
+
import { type ScoreWeights, type TierThresholds } from "./context-scorer.js";
|
|
3
|
+
import { type ContextScore } from "./context-candidate.js";
|
|
4
|
+
import { type BudgetPolicy } from "./budget-allocator.js";
|
|
5
|
+
import { type LintReport } from "./context-lint.js";
|
|
6
|
+
import { type ContextMetrics } from "./context-metrics.js";
|
|
7
|
+
import { type ContextRegret } from "./context-regret.js";
|
|
8
|
+
import type { MarketResult } from "./token-market.js";
|
|
9
|
+
export { selectWithMarket, type MarketSelection, type MarketSelectionInput } from "./context-market-selection.js";
|
|
10
|
+
export interface CompileInput {
|
|
11
|
+
readonly planScopeId?: string;
|
|
12
|
+
readonly sessionDir: string;
|
|
13
|
+
readonly scopeId: string;
|
|
14
|
+
readonly projectKey?: string;
|
|
15
|
+
readonly userText: string;
|
|
16
|
+
readonly retrievalQuery?: string;
|
|
17
|
+
readonly totalTokens?: number;
|
|
18
|
+
readonly policy?: BudgetPolicy;
|
|
19
|
+
readonly now?: number;
|
|
20
|
+
readonly goal?: string;
|
|
21
|
+
readonly constraints?: readonly string[];
|
|
22
|
+
readonly success?: string;
|
|
23
|
+
readonly nextAction?: string;
|
|
24
|
+
readonly recallBlock?: string;
|
|
25
|
+
readonly toolBlock?: string;
|
|
26
|
+
readonly visionBlock?: string;
|
|
27
|
+
readonly weights?: ScoreWeights;
|
|
28
|
+
readonly thresholds?: TierThresholds;
|
|
29
|
+
readonly snapshot?: ContextStoreSnapshot;
|
|
30
|
+
readonly proofChains?: boolean;
|
|
31
|
+
readonly capsuleMarket?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface CompiledContext {
|
|
34
|
+
readonly pack: string;
|
|
35
|
+
readonly report: LintReport;
|
|
36
|
+
readonly selected: readonly ContextScore[];
|
|
37
|
+
readonly tokensUsed: number;
|
|
38
|
+
readonly metrics: ContextMetrics;
|
|
39
|
+
readonly regret: ContextRegret;
|
|
40
|
+
readonly market?: MarketResult;
|
|
41
|
+
}
|
|
42
|
+
export declare function compileContext(input: CompileInput): CompiledContext;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// Context Window Compiler (metodo Danilov, Memory OS) -- L1.
|
|
2
|
+
//
|
|
3
|
+
// Il salto sopra il Memory Packet: non manda "piu' memoria", ma COMPILA la
|
|
4
|
+
// forma ottimale del prompt per il turno. Orchestratore deterministico della
|
|
5
|
+
// pipeline:
|
|
6
|
+
//
|
|
7
|
+
// collect -> raccoglie i candidati dagli store (candidate-collector)
|
|
8
|
+
// retrieve -> ranking ibrido BM25 + link graph, drop superseded (context-retriever)
|
|
9
|
+
// score -> scoring multi-fattore + tier HIGH/MID/LOW (context-scorer)
|
|
10
|
+
// budget -> alloca token per zona, packing greedy (budget-allocator)
|
|
11
|
+
// lint -> dedup, stale, conflitti, budget (context-lint)
|
|
12
|
+
// layout -> zone 1-9 con mission/tail anchor anti-rot (attention-layout)
|
|
13
|
+
//
|
|
14
|
+
// Output: un Prompt Pack (stringa) + il report, da anteporre come blocco system.
|
|
15
|
+
//
|
|
16
|
+
// Modulo di SOLA LETTURA verso gli store (via collector). Nessuna scrittura.
|
|
17
|
+
import { loadContextStoreSnapshot } from "./context-snapshot.js";
|
|
18
|
+
import { scoreCandidate, } from "./context-scorer.js";
|
|
19
|
+
import {} from "./context-candidate.js";
|
|
20
|
+
import { allocateBudget, clampToBudget, estimateTokens, } from "./budget-allocator.js";
|
|
21
|
+
import { assembleLayout, layoutOverheadTokens, buildMissionAnchor, buildTailAnchor, } from "./attention-layout.js";
|
|
22
|
+
import { lintContext } from "./context-lint.js";
|
|
23
|
+
import { planRecall, formatRecallPlan, RECALL_FIRST_POLICY } from "./recall-planner.js";
|
|
24
|
+
import { computeContextMetrics } from "./context-metrics.js";
|
|
25
|
+
import { buildProofChain, renderProofChain, isContinuationRequest } from "./proof-chains.js";
|
|
26
|
+
import { computeContextRegret } from "./context-regret.js";
|
|
27
|
+
import { renderCapsules } from "./expansion-levels.js";
|
|
28
|
+
import { selectWithMarket } from "./context-market-selection.js";
|
|
29
|
+
import { packRendered, renderControlLane, renderEvidence, renderHandle, HANDLE_GUIDE, remainingTokens, joinBlocks } from "./context-pack-render.js";
|
|
30
|
+
// Mantiene l'entry point SDK esistente per i caller della selezione pura.
|
|
31
|
+
export { selectWithMarket } from "./context-market-selection.js";
|
|
32
|
+
const DEFAULT_TOTAL = 3_000;
|
|
33
|
+
// Compila la context window del turno. Deterministico a parita' di store + now.
|
|
34
|
+
export function compileContext(input) {
|
|
35
|
+
const now = input.now ?? Date.now();
|
|
36
|
+
const total = input.totalTokens !== undefined && Number.isFinite(input.totalTokens)
|
|
37
|
+
? Math.max(0, Math.floor(input.totalTokens)) : DEFAULT_TOTAL;
|
|
38
|
+
// Il turno utente viaggia nella cronologia, fuori dal pack: sottrarlo qui
|
|
39
|
+
// azzerava la memoria proprio sulle richieste lunghe. Gli header invece
|
|
40
|
+
// appartengono al pack e vanno riservati prima di allocare le zone.
|
|
41
|
+
const overhead = layoutOverheadTokens(["mission", "vision", "memory", "evidence", "recall", "tool", "tail"]);
|
|
42
|
+
const alloc = allocateBudget({
|
|
43
|
+
totalTokens: Math.max(0, total - overhead),
|
|
44
|
+
...(input.policy ? { policy: input.policy } : {}),
|
|
45
|
+
});
|
|
46
|
+
// 1) collect + 2) retrieve (drop superseded incluso). Entrambi vengono dallo
|
|
47
|
+
// snapshot degli store: dentro un turno il disco viene letto una volta sola.
|
|
48
|
+
const snapshot = input.snapshot ?? loadContextStoreSnapshot({
|
|
49
|
+
sessionDir: input.sessionDir,
|
|
50
|
+
scopeId: input.scopeId,
|
|
51
|
+
...(input.planScopeId ? { planScopeId: input.planScopeId } : {}),
|
|
52
|
+
...(input.projectKey ? { projectKey: input.projectKey } : {}),
|
|
53
|
+
});
|
|
54
|
+
const retrievalQuery = input.retrievalQuery?.trim() || input.userText;
|
|
55
|
+
const recallPlan = planRecall({ userText: input.userText, recallBudget: alloc.recall });
|
|
56
|
+
const retrievedRanked = snapshot.retrieve(retrievalQuery, 40);
|
|
57
|
+
const materializedRecall = recallPlan.needed
|
|
58
|
+
? snapshot.retrieve(`${recallPlan.query}\n${retrievalQuery}`.trim(), 24)
|
|
59
|
+
.filter((item) => !recallPlan.domains.length || recallPlan.domains.includes(item.candidate.domain))
|
|
60
|
+
.map((item) => item.candidate)
|
|
61
|
+
: [];
|
|
62
|
+
// Control lane autoritativa: goal/task aperti/decisioni/vision non possono
|
|
63
|
+
// dipendere dal fatto che la query corrente ripeta le stesse parole.
|
|
64
|
+
const mandatory = controlLaneCandidates(snapshot.pool, Boolean(input.nextAction));
|
|
65
|
+
const retrieved = mergeCandidates(mandatory, materializedRecall, retrievedRanked.map((r) => r.candidate));
|
|
66
|
+
const hasActiveDecisions = snapshot.pool.some((candidate) => candidate.kind === "decision" && candidate.status === "active" && !candidate.supersededBy);
|
|
67
|
+
// Conserva il segnale ibrido gia' calcolato dal retriever: BM25 per i match
|
|
68
|
+
// diretti, rilevanza propagata per prerequisiti e prove collegate. Lo
|
|
69
|
+
// normalizziamo sul batch prima dello scoring multi-fattore.
|
|
70
|
+
const maxRetrieval = retrievedRanked.reduce((max, item) => (item.retrievalScore > max ? item.retrievalScore : max), 0);
|
|
71
|
+
const retrievalScores = new Map();
|
|
72
|
+
if (maxRetrieval > 0) {
|
|
73
|
+
for (const item of retrievedRanked) {
|
|
74
|
+
retrievalScores.set(item.candidate.id, item.retrievalScore / maxRetrieval);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 3) score con novelty incrementale. Se il chiamante passa pesi/soglie
|
|
78
|
+
// adattati dall'autotuner, l'anello di retroazione li applica qui.
|
|
79
|
+
const ctx = {
|
|
80
|
+
query: retrievalQuery,
|
|
81
|
+
now,
|
|
82
|
+
tokenBudget: alloc.evidence + alloc.memory,
|
|
83
|
+
...(retrievalScores.size ? { retrievalScores } : {}),
|
|
84
|
+
...(input.weights ? { weights: input.weights } : {}),
|
|
85
|
+
...(input.thresholds ? { thresholds: input.thresholds } : {}),
|
|
86
|
+
};
|
|
87
|
+
// La pulizia precede tutte le corsie, anche control lane e proof chain.
|
|
88
|
+
const validity = lintContext({ selected: retrieved });
|
|
89
|
+
const validIds = new Set(validity.cleaned.map((candidate) => candidate.id));
|
|
90
|
+
const scored = scoreCandidatesWithNovelty(validity.cleaned, ctx);
|
|
91
|
+
const cleanMandatory = mandatory.filter((candidate) => validIds.has(candidate.id));
|
|
92
|
+
// 4) Riserva i prefissi PRIMA della selezione: packet e control lane non
|
|
93
|
+
// possono consumare una seconda volta i token gia' venduti alle capsule.
|
|
94
|
+
const control = renderControlLane(cleanMandatory, Math.floor(alloc.memory * 0.35));
|
|
95
|
+
const packetBudget = Math.floor(alloc.memory * 0.35);
|
|
96
|
+
const packet = packetBudget > 0
|
|
97
|
+
? clampToBudget(snapshot.packet(packetBudget * 4), packetBudget) : "";
|
|
98
|
+
const memoryBase = joinBlocks(control.text, packet);
|
|
99
|
+
const memoryBudget = remainingTokens(alloc.memory, memoryBase);
|
|
100
|
+
let proofChainBlock = "";
|
|
101
|
+
let proofCandidates = [];
|
|
102
|
+
if (input.proofChains && isContinuationRequest(input.userText)) {
|
|
103
|
+
const chain = buildProofChain(scored.filter((score) => score.tier !== "low").map((score) => score.candidate), {
|
|
104
|
+
...(input.goal ? { goal: input.goal } : {}),
|
|
105
|
+
...(input.nextAction ? { nextAction: input.nextAction } : {}),
|
|
106
|
+
});
|
|
107
|
+
if (chain) {
|
|
108
|
+
const rendered = renderProofChain(chain);
|
|
109
|
+
// Una catena parziale perde i legami causali: entra intera o lascia
|
|
110
|
+
// spazio alle singole prove e ai relativi handle.
|
|
111
|
+
if (estimateTokens(rendered) <= Math.floor(alloc.evidence * 0.4)) {
|
|
112
|
+
proofChainBlock = rendered;
|
|
113
|
+
const ids = new Set(chain.links.flatMap((link) => link.id ? [link.id] : []));
|
|
114
|
+
proofCandidates = validity.cleaned.filter((candidate) => ids.has(candidate.id));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const evidenceBudget = remainingTokens(alloc.evidence, proofChainBlock);
|
|
119
|
+
let evidenceText = "";
|
|
120
|
+
let memoryText = "";
|
|
121
|
+
let evidenceCandidates = [];
|
|
122
|
+
let memoryCandidates = [];
|
|
123
|
+
let market;
|
|
124
|
+
if (input.capsuleMarket) {
|
|
125
|
+
const selection = selectWithMarket({
|
|
126
|
+
scored,
|
|
127
|
+
...(retrievalScores.size ? { retrievalScores } : {}),
|
|
128
|
+
evidenceBudget, memoryBudget, now,
|
|
129
|
+
});
|
|
130
|
+
market = selection.market;
|
|
131
|
+
const byId = new Map(scored.map((score) => [score.candidate.id, score.candidate]));
|
|
132
|
+
evidenceCandidates = selection.evidence.map((capsule) => byId.get(capsule.header.id));
|
|
133
|
+
memoryCandidates = selection.memory.map((capsule) => byId.get(capsule.header.id));
|
|
134
|
+
evidenceText = renderCapsules(selection.evidence);
|
|
135
|
+
memoryText = renderCapsules(selection.memory);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const high = scored.filter((score) => score.tier === "high").map((score) => score.candidate);
|
|
139
|
+
const evidence = packRendered(high, renderEvidence, evidenceBudget);
|
|
140
|
+
const overflowIds = new Set(evidence.excluded.map((candidate) => candidate.id));
|
|
141
|
+
// Conserva l'ordine dello scorer anche dopo il degrado: una prova HIGH
|
|
142
|
+
// esclusa per dimensione precede gli handle MID meno rilevanti.
|
|
143
|
+
const handles = scored.filter((score) => score.tier === "mid" || overflowIds.has(score.candidate.id))
|
|
144
|
+
.map((score) => score.candidate);
|
|
145
|
+
const memory = packRendered(handles, renderHandle, memoryBudget, { before: HANDLE_GUIDE });
|
|
146
|
+
evidenceCandidates = evidence.included;
|
|
147
|
+
memoryCandidates = memory.included;
|
|
148
|
+
evidenceText = evidence.text;
|
|
149
|
+
memoryText = memory.text;
|
|
150
|
+
}
|
|
151
|
+
// La ricevuta descrive SOLO record integri resi, incluse le corsie di
|
|
152
|
+
// controllo e le citazioni nella proof chain. Il packet L0 e' orientamento
|
|
153
|
+
// testuale separato, non una prova contabilizzata per candidato.
|
|
154
|
+
const renderedCandidates = mergeCandidates(control.included, proofCandidates, evidenceCandidates, memoryCandidates);
|
|
155
|
+
const activeDecisions = renderedCandidates.filter((candidate) => candidate.kind === "decision")
|
|
156
|
+
.map((candidate) => candidate.summary).slice(0, 4);
|
|
157
|
+
const goal = input.goal ?? input.userText;
|
|
158
|
+
const autoRecall = recallPlan.needed
|
|
159
|
+
? `${formatRecallPlan(recallPlan)}\n@recall[materializzato]: ${materializedRecall.length} candidati caricati prima della chiamata\n\n${RECALL_FIRST_POLICY}`
|
|
160
|
+
: RECALL_FIRST_POLICY;
|
|
161
|
+
// 5) Layout: ogni zona e' gia' entro budget, inclusi separatori interni.
|
|
162
|
+
const content = {
|
|
163
|
+
mission: buildMissionAnchor({
|
|
164
|
+
goal,
|
|
165
|
+
...(input.constraints ? { constraints: input.constraints } : {}),
|
|
166
|
+
...(input.success ? { success: input.success } : {}),
|
|
167
|
+
}, alloc.mission),
|
|
168
|
+
...(input.visionBlock ? { vision: clampToBudget(input.visionBlock, alloc.vision) } : {}),
|
|
169
|
+
memory: joinBlocks(memoryBase, memoryText),
|
|
170
|
+
evidence: joinBlocks(proofChainBlock, evidenceText),
|
|
171
|
+
recall: clampToBudget(input.recallBlock ?? autoRecall, alloc.recall),
|
|
172
|
+
...(input.toolBlock ? { tool: clampToBudget(input.toolBlock, alloc.tool) } : {}),
|
|
173
|
+
tail: buildTailAnchor({
|
|
174
|
+
goal,
|
|
175
|
+
...(input.constraints ? { constraints: input.constraints } : {}),
|
|
176
|
+
...(activeDecisions.length ? { activeDecisions } : {}),
|
|
177
|
+
...(input.nextAction ? { nextAction: input.nextAction } : {}),
|
|
178
|
+
recallPolicy: true,
|
|
179
|
+
}, alloc.tail),
|
|
180
|
+
};
|
|
181
|
+
// Nessun taglio dopo il rendering: non puo' invalidare record e ricevuta.
|
|
182
|
+
const pack = assembleLayout(content);
|
|
183
|
+
const finalLint = lintContext({
|
|
184
|
+
selected: renderedCandidates,
|
|
185
|
+
tokenBudget: total,
|
|
186
|
+
renderedTokens: estimateTokens(pack),
|
|
187
|
+
hasVision: Boolean(content.vision) || renderedCandidates.some((candidate) => candidate.domain === "vision"),
|
|
188
|
+
hasActiveDecisions,
|
|
189
|
+
});
|
|
190
|
+
const report = {
|
|
191
|
+
...finalLint,
|
|
192
|
+
findings: [...validity.findings, ...finalLint.findings],
|
|
193
|
+
ok: validity.ok && finalLint.ok,
|
|
194
|
+
};
|
|
195
|
+
const includedIds = new Set(report.cleaned.map((candidate) => candidate.id));
|
|
196
|
+
const evidenceIds = new Set(evidenceCandidates.map((candidate) => candidate.id));
|
|
197
|
+
const metrics = computeContextMetrics({ scored, pack, report, includedIds, evidenceIds });
|
|
198
|
+
const regret = computeContextRegret({
|
|
199
|
+
scored, report, metrics, includedIds,
|
|
200
|
+
recallPlannedButUnused: recallPlan.needed && !materializedRecall.some((candidate) => includedIds.has(candidate.id)),
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
pack, report, selected: scored, tokensUsed: estimateTokens(pack), metrics, regret,
|
|
204
|
+
...(market ? { market } : {}),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function controlLaneCandidates(pool, includeTasks) {
|
|
208
|
+
const active = pool.filter((candidate) => candidate.status === "active" && !candidate.supersededBy);
|
|
209
|
+
const sorted = (items, limit) => [...items].sort((a, b) => b.createdAt - a.createdAt || a.id.localeCompare(b.id)).slice(0, limit);
|
|
210
|
+
return mergeCandidates(includeTasks ? sorted(active.filter((candidate) => candidate.kind === "task" && candidate.dependency), 10) : [], sorted(active.filter((candidate) => candidate.kind === "decision"), 6), sorted(active.filter((candidate) => candidate.domain === "vision"), 3), sorted(active.filter((candidate) => candidate.dependency && candidate.kind !== "task" && candidate.kind !== "decision"), 5)).slice(0, 20);
|
|
211
|
+
}
|
|
212
|
+
function mergeCandidates(...groups) {
|
|
213
|
+
const seen = new Set();
|
|
214
|
+
const out = [];
|
|
215
|
+
for (const group of groups) {
|
|
216
|
+
for (const candidate of group) {
|
|
217
|
+
if (seen.has(candidate.id))
|
|
218
|
+
continue;
|
|
219
|
+
seen.add(candidate.id);
|
|
220
|
+
out.push(candidate);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
// Scoring con novelty incrementale (penalizza i simili ai gia' accettati).
|
|
226
|
+
function scoreCandidatesWithNovelty(candidates, ctx) {
|
|
227
|
+
const base = candidates.map((c) => scoreCandidate(c, ctx)).sort((a, b) => b.score - a.score || a.candidate.id.localeCompare(b.candidate.id));
|
|
228
|
+
const seen = [];
|
|
229
|
+
const out = [];
|
|
230
|
+
for (const s of base) {
|
|
231
|
+
const rescored = scoreCandidate(s.candidate, ctx, { seenTermSets: seen });
|
|
232
|
+
out.push(rescored);
|
|
233
|
+
if (rescored.tier !== "low")
|
|
234
|
+
seen.push(new Set(s.candidate.terms));
|
|
235
|
+
}
|
|
236
|
+
return out.sort((a, b) => b.score - a.score || a.candidate.id.localeCompare(b.candidate.id));
|
|
237
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Message } from "../core/types.js";
|
|
2
|
+
import type { RoomRecord } from "./room-memory.js";
|
|
3
|
+
export interface ContractEvent {
|
|
4
|
+
readonly type: "contract.changed";
|
|
5
|
+
readonly domain: "contracts";
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly symbol: string;
|
|
8
|
+
readonly before: string;
|
|
9
|
+
readonly after: string;
|
|
10
|
+
readonly kind: ContractChangeKind;
|
|
11
|
+
readonly callsites: readonly string[];
|
|
12
|
+
readonly testsRequired: readonly string[];
|
|
13
|
+
readonly docsToUpdate: readonly string[];
|
|
14
|
+
readonly context: string;
|
|
15
|
+
readonly task: string | null;
|
|
16
|
+
readonly subject: string;
|
|
17
|
+
readonly summary: string;
|
|
18
|
+
readonly source: "user" | "assistant";
|
|
19
|
+
readonly createdAt: number;
|
|
20
|
+
}
|
|
21
|
+
export type ContractChangeKind = "signature" | "rename" | "remove" | "add" | "behavior";
|
|
22
|
+
export interface ContractMatch {
|
|
23
|
+
readonly symbol: string;
|
|
24
|
+
readonly before: string;
|
|
25
|
+
readonly after: string;
|
|
26
|
+
readonly kind: ContractChangeKind;
|
|
27
|
+
readonly context: string;
|
|
28
|
+
readonly source: "user" | "assistant";
|
|
29
|
+
}
|
|
30
|
+
export declare function detectContractChanges(text: string, source: "user" | "assistant"): readonly ContractMatch[];
|
|
31
|
+
export declare function extractImpacts(text: string): {
|
|
32
|
+
callsites: string[];
|
|
33
|
+
testsRequired: string[];
|
|
34
|
+
docsToUpdate: string[];
|
|
35
|
+
};
|
|
36
|
+
export declare function promoteContractChanges(messages: readonly Message[], opts: {
|
|
37
|
+
task?: string | null;
|
|
38
|
+
ns?: string;
|
|
39
|
+
now: number;
|
|
40
|
+
startNum?: number;
|
|
41
|
+
}): readonly ContractEvent[];
|
|
42
|
+
export declare function contractToRoomRecord(ev: ContractEvent): RoomRecord;
|
|
43
|
+
export interface ContractSearchHit {
|
|
44
|
+
readonly event: ContractEvent;
|
|
45
|
+
readonly score: number;
|
|
46
|
+
}
|
|
47
|
+
export declare class ContractStore {
|
|
48
|
+
private readonly file;
|
|
49
|
+
private events;
|
|
50
|
+
private constructor();
|
|
51
|
+
static open(sessionDir: string, storeId: string): ContractStore;
|
|
52
|
+
count(): number;
|
|
53
|
+
all(): readonly ContractEvent[];
|
|
54
|
+
nextNum(ns?: string): number;
|
|
55
|
+
append(event: ContractEvent): boolean;
|
|
56
|
+
appendAll(events: readonly ContractEvent[]): readonly ContractEvent[];
|
|
57
|
+
byTask(task: string): readonly ContractEvent[];
|
|
58
|
+
bySymbol(symbol: string): readonly ContractEvent[];
|
|
59
|
+
search(query: string, limit?: number): readonly ContractSearchHit[];
|
|
60
|
+
indexBlock(): string;
|
|
61
|
+
}
|