@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,480 @@
|
|
|
1
|
+
import { projectMemoryScopes, contextFrameWritten } from "./context-scope-index.js";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
5
|
+
import { isContinuationText, parseVibeMode, renderVibeModeBlock, routeVibeMode, vibeModeSpec, } from "../core/vibe-modes.js";
|
|
6
|
+
import { tokenize } from "./lexical-search.js";
|
|
7
|
+
import { withLockSync } from "./file-lock.js";
|
|
8
|
+
const FABRIC_DIR = "context-fabric";
|
|
9
|
+
const MAX_FOCUS_TERMS = 28;
|
|
10
|
+
const MAX_MISSION_CHARS = 480;
|
|
11
|
+
export function contextProjectKey(cwd) {
|
|
12
|
+
let canonical = resolve(cwd);
|
|
13
|
+
try {
|
|
14
|
+
canonical = realpathSync.native(canonical);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Il cwd viene validato altrove. Se sparisce durante il turno, il path
|
|
18
|
+
// risolto resta comunque un'identita' deterministica e non collidente per
|
|
19
|
+
// semplice basename.
|
|
20
|
+
}
|
|
21
|
+
const normalized = process.platform === "win32" ? canonical.toLowerCase() : canonical;
|
|
22
|
+
const digest = createHash("sha256").update(normalized).digest("hex").slice(0, 16);
|
|
23
|
+
return `${safeName(basename(canonical) || "workspace")}-${digest}`;
|
|
24
|
+
}
|
|
25
|
+
export function contextFramePath(sessionDir, frameId) {
|
|
26
|
+
return join(sessionDir, FABRIC_DIR, `${safeName(frameId)}.json`);
|
|
27
|
+
}
|
|
28
|
+
export function loadContextFrame(sessionDir, frameId, projectKey, inherit = true) {
|
|
29
|
+
const own = readFrame(contextFramePath(sessionDir, frameId));
|
|
30
|
+
if (own && own.projectKey === projectKey)
|
|
31
|
+
return own;
|
|
32
|
+
if (!inherit)
|
|
33
|
+
return null;
|
|
34
|
+
const dir = join(sessionDir, FABRIC_DIR);
|
|
35
|
+
if (!existsSync(dir))
|
|
36
|
+
return null;
|
|
37
|
+
let files = [];
|
|
38
|
+
try {
|
|
39
|
+
files = readdirSync(dir).filter((name) => name.endsWith(".json"));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const candidates = files.flatMap((name) => {
|
|
45
|
+
const path = join(dir, name);
|
|
46
|
+
const frame = readFrame(path);
|
|
47
|
+
if (!frame || frame.projectKey !== projectKey || frame.owner === frameId)
|
|
48
|
+
return [];
|
|
49
|
+
let mtime = frame.updatedAt;
|
|
50
|
+
try {
|
|
51
|
+
mtime = Math.max(mtime, statSync(path).mtimeMs);
|
|
52
|
+
}
|
|
53
|
+
catch { /* best effort */ }
|
|
54
|
+
return [{ frame, mtime }];
|
|
55
|
+
});
|
|
56
|
+
return candidates
|
|
57
|
+
.sort((a, b) => b.mtime - a.mtime || b.frame.turn - a.frame.turn || a.frame.owner.localeCompare(b.frame.owner))[0]
|
|
58
|
+
?.frame ?? null;
|
|
59
|
+
}
|
|
60
|
+
// Restituisce gli scope di memoria che le receipt associano esplicitamente a
|
|
61
|
+
// un progetto. Serve ai compiler quando piu' repository condividono lo stesso
|
|
62
|
+
// sessionDir (per esempio Horizon): senza questo filtro il working set recente
|
|
63
|
+
// di un repo omonimo poteva entrare nel prompt di un altro. Se il chiamante non
|
|
64
|
+
// passa un projectKey, i collector mantengono il comportamento legacy.
|
|
65
|
+
export function listContextMemoryScopes(sessionDir, projectKey) {
|
|
66
|
+
return projectMemoryScopes(sessionDir, projectKey);
|
|
67
|
+
}
|
|
68
|
+
export function buildContextFabric(input) {
|
|
69
|
+
const now = input.now ?? Date.now();
|
|
70
|
+
const projectKey = contextProjectKey(input.cwd);
|
|
71
|
+
const ownPrevious = loadContextFrame(input.sessionDir, input.frameId, projectKey, false);
|
|
72
|
+
const previous = ownPrevious ?? (input.inheritProjectFrame === false
|
|
73
|
+
? null
|
|
74
|
+
: loadContextFrame(input.sessionDir, input.frameId, projectKey, true));
|
|
75
|
+
const inherited = Boolean(previous && !ownPrevious);
|
|
76
|
+
const rawUserText = extractRawUserText(input.userText);
|
|
77
|
+
const continuation = isContinuationText(rawUserText);
|
|
78
|
+
let route = routeVibeMode(input.selection, rawUserText, previous?.activeMode);
|
|
79
|
+
const nextTurn = (previous?.turn ?? 0) + 1;
|
|
80
|
+
const startsNewEpoch = shouldOpenEpoch(previous, rawUserText, inherited, continuation);
|
|
81
|
+
// Una lente precedente e' sticky dentro lo stesso epoch, non oltre una
|
|
82
|
+
// barriera di missione. Senza nuovi segnali, un epoch nuovo torna classic.
|
|
83
|
+
if (startsNewEpoch && input.selection === "auto" && previous && route.resolved === previous.activeMode) {
|
|
84
|
+
route = routeVibeMode("auto", rawUserText);
|
|
85
|
+
}
|
|
86
|
+
const mode = vibeModeSpec(route.resolved);
|
|
87
|
+
const epoch = previous ? previous.epoch + (startsNewEpoch ? 1 : 0) : 1;
|
|
88
|
+
const mission = missionFor(previous, rawUserText, startsNewEpoch, continuation);
|
|
89
|
+
const contract = reconcileGoalContract({
|
|
90
|
+
previous: previous?.contract,
|
|
91
|
+
fallbackObjective: mission || previous?.mission || rawUserText,
|
|
92
|
+
epoch,
|
|
93
|
+
turn: nextTurn,
|
|
94
|
+
startsNewEpoch,
|
|
95
|
+
userText: rawUserText,
|
|
96
|
+
continuation,
|
|
97
|
+
now,
|
|
98
|
+
});
|
|
99
|
+
const leases = reconcileLeases({
|
|
100
|
+
previous: previous?.leases ?? [],
|
|
101
|
+
epoch,
|
|
102
|
+
turn: nextTurn,
|
|
103
|
+
startsNewEpoch,
|
|
104
|
+
mission,
|
|
105
|
+
userText: rawUserText,
|
|
106
|
+
mode,
|
|
107
|
+
});
|
|
108
|
+
const focusTerms = leases.slice(0, MAX_FOCUS_TERMS).map((lease) => lease.term);
|
|
109
|
+
const retrievalQuery = buildRetrievalQuery(rawUserText, mission, focusTerms);
|
|
110
|
+
const receipt = {
|
|
111
|
+
generatedAt: now,
|
|
112
|
+
epoch,
|
|
113
|
+
mode: mode.id,
|
|
114
|
+
routeConfidence: route.confidence,
|
|
115
|
+
routeReasons: route.reasons,
|
|
116
|
+
memoryScopeId: input.memoryScopeId,
|
|
117
|
+
mission,
|
|
118
|
+
retrievalQuery,
|
|
119
|
+
focusTerms,
|
|
120
|
+
contextBudget: mode.context.totalTokens,
|
|
121
|
+
proofChains: mode.context.proofChains,
|
|
122
|
+
inherited,
|
|
123
|
+
};
|
|
124
|
+
const frame = {
|
|
125
|
+
version: 1,
|
|
126
|
+
owner: input.frameId,
|
|
127
|
+
projectKey,
|
|
128
|
+
epoch,
|
|
129
|
+
turn: nextTurn,
|
|
130
|
+
selection: input.selection,
|
|
131
|
+
activeMode: mode.id,
|
|
132
|
+
mission,
|
|
133
|
+
contract,
|
|
134
|
+
leases,
|
|
135
|
+
createdAt: startsNewEpoch || !previous ? now : previous.createdAt,
|
|
136
|
+
updatedAt: now,
|
|
137
|
+
reset: false,
|
|
138
|
+
receipt,
|
|
139
|
+
};
|
|
140
|
+
writeContextFrame(input.sessionDir, frame);
|
|
141
|
+
return {
|
|
142
|
+
frame,
|
|
143
|
+
route,
|
|
144
|
+
mode,
|
|
145
|
+
rawUserText,
|
|
146
|
+
systemBlock: `${renderVibeModeBlock(route)}\n\n${renderFabricBlock(frame, inherited)}\n\n${renderGoalContract(contract)}`,
|
|
147
|
+
compile: {
|
|
148
|
+
retrievalQuery,
|
|
149
|
+
totalTokens: mode.context.totalTokens,
|
|
150
|
+
policy: mode.context.policy,
|
|
151
|
+
weights: mode.context.weights,
|
|
152
|
+
thresholds: mode.context.thresholds,
|
|
153
|
+
goal: goalContractAnchor(contract),
|
|
154
|
+
constraints: dedupeText([...contract.constraints, ...mode.operatingRules]).slice(0, 20),
|
|
155
|
+
success: dedupeText([...contract.successCriteria, ...mode.completionGates]).join("; "),
|
|
156
|
+
nextAction: mode.firstMove,
|
|
157
|
+
proofChains: mode.context.proofChains,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function updateContextPins(input) {
|
|
162
|
+
const projectKey = contextProjectKey(input.cwd);
|
|
163
|
+
const previous = loadContextFrame(input.sessionDir, input.frameId, projectKey, true);
|
|
164
|
+
if (!previous || previous.reset)
|
|
165
|
+
return null;
|
|
166
|
+
const now = input.now ?? Date.now();
|
|
167
|
+
const remove = new Set((input.remove ?? []).flatMap((value) => pinTerms(value)));
|
|
168
|
+
const kept = previous.leases.filter((lease) => lease.source !== "pinned" || !remove.has(lease.term));
|
|
169
|
+
const additions = (input.add ?? []).flatMap((value) => pinTerms(value)).map((term) => makeLease(previous.epoch, term, "pinned", 100, previous.turn, null));
|
|
170
|
+
const frame = {
|
|
171
|
+
...previous,
|
|
172
|
+
owner: input.frameId,
|
|
173
|
+
leases: dedupeAndSortLeases([...kept, ...additions]),
|
|
174
|
+
updatedAt: now,
|
|
175
|
+
};
|
|
176
|
+
writeContextFrame(input.sessionDir, frame);
|
|
177
|
+
return frame;
|
|
178
|
+
}
|
|
179
|
+
export function resetContextFrame(input) {
|
|
180
|
+
const now = input.now ?? Date.now();
|
|
181
|
+
const projectKey = contextProjectKey(input.cwd);
|
|
182
|
+
const previous = loadContextFrame(input.sessionDir, input.frameId, projectKey, true);
|
|
183
|
+
const frame = {
|
|
184
|
+
version: 1,
|
|
185
|
+
owner: input.frameId,
|
|
186
|
+
projectKey,
|
|
187
|
+
epoch: (previous?.epoch ?? 0) + 1,
|
|
188
|
+
turn: previous?.turn ?? 0,
|
|
189
|
+
selection: input.selection ?? previous?.selection ?? "auto",
|
|
190
|
+
activeMode: "classic",
|
|
191
|
+
mission: "",
|
|
192
|
+
leases: input.preservePins === false
|
|
193
|
+
? []
|
|
194
|
+
: previous?.leases.filter((lease) => lease.source === "pinned") ?? [],
|
|
195
|
+
createdAt: now,
|
|
196
|
+
updatedAt: now,
|
|
197
|
+
reset: true,
|
|
198
|
+
receipt: null,
|
|
199
|
+
};
|
|
200
|
+
writeContextFrame(input.sessionDir, frame);
|
|
201
|
+
return frame;
|
|
202
|
+
}
|
|
203
|
+
export function renderContextFrame(frame) {
|
|
204
|
+
if (!frame || frame.reset)
|
|
205
|
+
return "context fabric: nessun epoch attivo";
|
|
206
|
+
const pinned = frame.leases.filter((lease) => lease.source === "pinned").map((lease) => lease.term);
|
|
207
|
+
const expiring = frame.leases.filter((lease) => lease.expiresAfterTurn !== null).map((lease) => lease.term).slice(0, 12);
|
|
208
|
+
const receipt = frame.receipt;
|
|
209
|
+
return [
|
|
210
|
+
`context fabric · epoch ${frame.epoch} · turno ${frame.turn} · mode ${frame.activeMode}`,
|
|
211
|
+
`missione: ${frame.mission || "(non definita)"}`,
|
|
212
|
+
frame.contract ? `contratto: ${frame.contract.revisions.length} revisioni · ${frame.contract.constraints.length} vincoli · ${frame.contract.successCriteria.length} criteri` : "",
|
|
213
|
+
`pin: ${pinned.length ? pinned.join(", ") : "nessuno"}`,
|
|
214
|
+
`focus con lease: ${expiring.length ? expiring.join(", ") : "nessuno"}`,
|
|
215
|
+
receipt ? `budget: ${receipt.contextBudget} token · proof chains: ${receipt.proofChains ? "on" : "off"}` : "",
|
|
216
|
+
receipt ? `route: ${receipt.routeReasons.join("; ") || "manuale"}` : "",
|
|
217
|
+
].filter(Boolean).join("\n");
|
|
218
|
+
}
|
|
219
|
+
function reconcileGoalContract(input) {
|
|
220
|
+
const text = oneLine(input.userText).slice(0, 1_200);
|
|
221
|
+
if (input.startsNewEpoch || !input.previous || input.previous.epoch !== input.epoch) {
|
|
222
|
+
return {
|
|
223
|
+
epoch: input.epoch,
|
|
224
|
+
objective: text && !input.continuation ? text : oneLine(input.fallbackObjective).slice(0, 1_200),
|
|
225
|
+
revisions: [],
|
|
226
|
+
constraints: extractContractLines(text, "constraint"),
|
|
227
|
+
successCriteria: extractContractLines(text, "success"),
|
|
228
|
+
updatedAt: input.now,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (!text || input.continuation)
|
|
232
|
+
return { ...input.previous, updatedAt: input.now };
|
|
233
|
+
const kind = isConstraintText(text) ? "constraint" : "clarification";
|
|
234
|
+
const duplicate = input.previous.revisions.some((revision) => normalizeContractText(revision.text) === normalizeContractText(text));
|
|
235
|
+
const revision = { turn: input.turn, text, kind, createdAt: input.now };
|
|
236
|
+
const revisions = duplicate
|
|
237
|
+
? input.previous.revisions
|
|
238
|
+
: [...input.previous.revisions, revision].slice(-32);
|
|
239
|
+
return {
|
|
240
|
+
...input.previous,
|
|
241
|
+
revisions,
|
|
242
|
+
constraints: dedupeText([...input.previous.constraints, ...extractContractLines(text, "constraint")]).slice(-24),
|
|
243
|
+
successCriteria: dedupeText([...input.previous.successCriteria, ...extractContractLines(text, "success")]).slice(-16),
|
|
244
|
+
updatedAt: input.now,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function isConstraintText(text) {
|
|
248
|
+
return /\b(?:non|senza|mai|solo|deve|devono|voglio|serve|bisogna|evita|attenzione|invece|piuttosto|must|should|without|never|only|do not)\b/i.test(text);
|
|
249
|
+
}
|
|
250
|
+
function extractContractLines(text, kind) {
|
|
251
|
+
const pattern = kind === "constraint"
|
|
252
|
+
? /\b(?:non|senza|mai|solo|deve|devono|voglio|serve|bisogna|evita|attenzione|invece|piuttosto|must|should|without|never|only|do not)\b/i
|
|
253
|
+
: /\b(?:funzion\w*|verific\w*|test\w*|mostr\w*|risultat\w*|success\w*|quando|deve|devono|must)\b/i;
|
|
254
|
+
return dedupeText(text.split(/(?<=[.!?;])\s+|\r?\n/).map((line) => oneLine(line).slice(0, 500)).filter((line) => line.length > 3 && pattern.test(line)));
|
|
255
|
+
}
|
|
256
|
+
function normalizeContractText(value) {
|
|
257
|
+
return oneLine(value).toLowerCase().replace(/[^a-z0-9à-ÿ]+/gi, " ").trim();
|
|
258
|
+
}
|
|
259
|
+
function dedupeText(values) {
|
|
260
|
+
const seen = new Set();
|
|
261
|
+
const out = [];
|
|
262
|
+
for (const value of values) {
|
|
263
|
+
const clean = oneLine(value);
|
|
264
|
+
const key = normalizeContractText(clean);
|
|
265
|
+
if (!key || seen.has(key))
|
|
266
|
+
continue;
|
|
267
|
+
seen.add(key);
|
|
268
|
+
out.push(clean);
|
|
269
|
+
}
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
function goalContractAnchor(contract) {
|
|
273
|
+
const revisions = contract.revisions.slice(-4).map((revision) => `rev${revision.turn}: ${revision.text}`);
|
|
274
|
+
return [contract.objective, ...revisions].filter(Boolean).join(" | ").slice(0, 2_400);
|
|
275
|
+
}
|
|
276
|
+
function renderGoalContract(contract) {
|
|
277
|
+
const revisions = contract.revisions.slice(-8).map((revision) => `@revisione[t${revision.turn}/${revision.kind}]: ${revision.text}`);
|
|
278
|
+
return [
|
|
279
|
+
"[TALOS_GOAL_CONTRACT]",
|
|
280
|
+
`@obiettivo[corrente]: ${contract.objective}`,
|
|
281
|
+
...revisions,
|
|
282
|
+
...contract.constraints.map((constraint, index) => `@vincolo[user-${index + 1}]: ${constraint}`),
|
|
283
|
+
...contract.successCriteria.map((criterion, index) => `@success[${index + 1}]: ${criterion}`),
|
|
284
|
+
"OUTPUT: le revisioni piu recenti prevalgono; non ripristinare requisiti superati.",
|
|
285
|
+
"[/TALOS_GOAL_CONTRACT]",
|
|
286
|
+
].join("\n");
|
|
287
|
+
}
|
|
288
|
+
function reconcileLeases(input) {
|
|
289
|
+
const retained = input.previous.filter((lease) => {
|
|
290
|
+
if (lease.source === "pinned")
|
|
291
|
+
return true;
|
|
292
|
+
if (input.startsNewEpoch)
|
|
293
|
+
return false;
|
|
294
|
+
return lease.expiresAfterTurn === null || lease.expiresAfterTurn >= input.turn;
|
|
295
|
+
});
|
|
296
|
+
const mission = meaningfulTerms(input.mission).map((term) => makeLease(input.epoch, term, "mission", 80, input.turn, null));
|
|
297
|
+
const turn = meaningfulTerms(input.userText).map((term) => makeLease(input.epoch, term, "turn", 60, input.turn, input.turn + 2));
|
|
298
|
+
const mode = input.mode.context.focusTerms.flatMap((value) => meaningfulTerms(value)).map((term) => makeLease(input.epoch, term, "mode", 30, input.turn, input.turn + 1));
|
|
299
|
+
return dedupeAndSortLeases([...retained, ...mission, ...turn, ...mode]);
|
|
300
|
+
}
|
|
301
|
+
function dedupeAndSortLeases(leases) {
|
|
302
|
+
const byTerm = new Map();
|
|
303
|
+
for (const lease of leases) {
|
|
304
|
+
const current = byTerm.get(lease.term);
|
|
305
|
+
if (!current || lease.weight > current.weight || (lease.weight === current.weight && (lease.expiresAfterTurn ?? Number.MAX_SAFE_INTEGER) > (current.expiresAfterTurn ?? Number.MAX_SAFE_INTEGER)))
|
|
306
|
+
byTerm.set(lease.term, lease);
|
|
307
|
+
}
|
|
308
|
+
return [...byTerm.values()].sort((a, b) => b.weight - a.weight || a.term.localeCompare(b.term));
|
|
309
|
+
}
|
|
310
|
+
function makeLease(epoch, term, source, weight, createdTurn, expiresAfterTurn) {
|
|
311
|
+
return {
|
|
312
|
+
id: `${epoch}:${source}:${term}`,
|
|
313
|
+
term,
|
|
314
|
+
source,
|
|
315
|
+
weight,
|
|
316
|
+
createdTurn,
|
|
317
|
+
expiresAfterTurn,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
function shouldOpenEpoch(previous, userText, inherited, continuation) {
|
|
321
|
+
if (!previous || previous.reset || !previous.mission)
|
|
322
|
+
return true;
|
|
323
|
+
if (continuation)
|
|
324
|
+
return false;
|
|
325
|
+
if (inherited)
|
|
326
|
+
return true;
|
|
327
|
+
if (/\b(nuovo task|nuovo obiettivo|cambiamo argomento|passiamo a|invece occupati|new task|switch task|different task)\b/i.test(userText))
|
|
328
|
+
return true;
|
|
329
|
+
const oldTerms = new Set(meaningfulTerms(previous.mission));
|
|
330
|
+
const nextTerms = new Set(meaningfulTerms(userText));
|
|
331
|
+
let overlap = 0;
|
|
332
|
+
for (const term of nextTerms)
|
|
333
|
+
if (oldTerms.has(term))
|
|
334
|
+
overlap += 1;
|
|
335
|
+
const overlapRatio = overlap / Math.max(1, Math.min(oldTerms.size, nextTerms.size));
|
|
336
|
+
if (overlapRatio >= 0.18 || hasFollowupReference(userText))
|
|
337
|
+
return false;
|
|
338
|
+
// In dubbio isoliamo una richiesta concreta nuova: contaminare il control
|
|
339
|
+
// lane con una missione vecchia e' piu' dannoso che aprire un epoch in piu'.
|
|
340
|
+
// I follow-up minimi con un solo termine informativo ("documentalo") restano
|
|
341
|
+
// nello stesso epoch. Due termini nuovi e senza alcun legame con missione o
|
|
342
|
+
// riferimenti deittici sono gia' un segnale sufficiente di task nuovo. Questa
|
|
343
|
+
// decisione dipende solo dalla continuita' semantica dell'epoch: il mode
|
|
344
|
+
// routing non puo' piu' cambiare implicitamente la missione.
|
|
345
|
+
return nextTerms.size >= 2;
|
|
346
|
+
}
|
|
347
|
+
function hasFollowupReference(value) {
|
|
348
|
+
const text = value.trim();
|
|
349
|
+
return /^(?:e\s+|anche\b|inoltre\b|poi\b)/i.test(text) ||
|
|
350
|
+
/\b(stess[oaie]|precedent[ei]|quest[oaie]|quell[oaie]|sopra|il fix|la modifica|l'implementazione|the same|previous|this|that change)\b/i.test(text);
|
|
351
|
+
}
|
|
352
|
+
function missionFor(previous, userText, startsNewEpoch, continuation) {
|
|
353
|
+
if (previous && !previous.reset && !startsNewEpoch && (continuation || previous.mission))
|
|
354
|
+
return previous.mission;
|
|
355
|
+
return oneLine(userText).slice(0, MAX_MISSION_CHARS);
|
|
356
|
+
}
|
|
357
|
+
function buildRetrievalQuery(userText, mission, focusTerms) {
|
|
358
|
+
const parts = [oneLine(userText).slice(0, 2_000)];
|
|
359
|
+
if (mission && oneLine(userText) !== mission)
|
|
360
|
+
parts.push(mission);
|
|
361
|
+
if (focusTerms.length)
|
|
362
|
+
parts.push(focusTerms.join(" "));
|
|
363
|
+
return parts.filter(Boolean).join("\n");
|
|
364
|
+
}
|
|
365
|
+
function renderFabricBlock(frame, inherited) {
|
|
366
|
+
const pins = frame.leases.filter((lease) => lease.source === "pinned").map((lease) => lease.term);
|
|
367
|
+
const working = frame.leases.filter((lease) => lease.source !== "pinned").slice(0, 20).map((lease) => lease.term);
|
|
368
|
+
return `[CONTEXT_FABRIC]
|
|
369
|
+
INDICE
|
|
370
|
+
1 = epoch
|
|
371
|
+
2 = control_lane
|
|
372
|
+
3 = working_lane
|
|
373
|
+
4 = evidence_lane
|
|
374
|
+
5 = quarantine_lane
|
|
375
|
+
|
|
376
|
+
DEFINIZIONI
|
|
377
|
+
@epoch[${frame.epoch}]: missione="${escapeValue(frame.mission)}", owner=${safeName(frame.owner)}, inherited=${inherited}
|
|
378
|
+
@lane[control]: mode=${frame.activeMode}, pin="${escapeValue(pins.join(", ") || "nessuno")}"
|
|
379
|
+
@lane[working]: focus="${escapeValue(working.join(", ") || "nessuno")}"
|
|
380
|
+
@lane[evidence]: accetta fatti passati solo se presenti negli evidence slot o recuperati con recall
|
|
381
|
+
@lane[quarantine]: epoch precedenti e lease scadute restano fuori dal prompt vivo; sono solo handle richiamabili
|
|
382
|
+
@lease[regola]: turn=scade, mission=dura_per_epoch, pinned=non_scade
|
|
383
|
+
|
|
384
|
+
OUTPUT: continua la missione dell'epoch; non sostituirla con un follow-up deittico come 'continua'.`;
|
|
385
|
+
}
|
|
386
|
+
function extractRawUserText(value) {
|
|
387
|
+
const marker = "\nINPUT_UTENTE\n";
|
|
388
|
+
const index = value.lastIndexOf(marker);
|
|
389
|
+
if (index >= 0)
|
|
390
|
+
return value.slice(index + marker.length).trim();
|
|
391
|
+
return value.trim();
|
|
392
|
+
}
|
|
393
|
+
function meaningfulTerms(value) {
|
|
394
|
+
return [...new Set(tokenize(value).filter((term) => term.length >= 3 && term !== "continua" && term !== "continue"))];
|
|
395
|
+
}
|
|
396
|
+
function pinTerms(value) {
|
|
397
|
+
const clean = oneLine(value).replace(/^(?:"([\s\S]*)"|'([\s\S]*)')$/, (_match, double, single) => double ?? single ?? "");
|
|
398
|
+
const normalizedPath = clean.replace(/\\/g, "/");
|
|
399
|
+
const pathLike = /^[a-z]:\//i.test(normalizedPath) || /^\.{0,2}\//.test(normalizedPath) ||
|
|
400
|
+
normalizedPath.startsWith("/") || /^[^\s/]+\/(?:[^/]+\/)*[^/]+$/.test(normalizedPath);
|
|
401
|
+
return pathLike && normalizedPath
|
|
402
|
+
? [normalizedPath.toLowerCase()]
|
|
403
|
+
: meaningfulTerms(clean);
|
|
404
|
+
}
|
|
405
|
+
function writeContextFrame(sessionDir, frame) {
|
|
406
|
+
const path = contextFramePath(sessionDir, frame.owner);
|
|
407
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
408
|
+
withLockSync(path, () => {
|
|
409
|
+
const temp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
410
|
+
writeFileSync(temp, JSON.stringify(frame, null, 2) + "\n", "utf8");
|
|
411
|
+
try {
|
|
412
|
+
renameSync(temp, path);
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
// Windows puo' rifiutare la sostituzione atomica di un file esistente.
|
|
416
|
+
// Il lock impedisce lettori/scrittori Talos concorrenti sullo stesso owner.
|
|
417
|
+
rmSync(path, { force: true });
|
|
418
|
+
renameSync(temp, path);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
contextFrameWritten(sessionDir, path);
|
|
422
|
+
}
|
|
423
|
+
function readFrame(path) {
|
|
424
|
+
if (!existsSync(path))
|
|
425
|
+
return null;
|
|
426
|
+
try {
|
|
427
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
428
|
+
return isContextFrame(raw) ? raw : null;
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
function isContextFrame(value) {
|
|
435
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
436
|
+
return false;
|
|
437
|
+
const frame = value;
|
|
438
|
+
const activeMode = parseVibeMode(frame.activeMode);
|
|
439
|
+
return frame.version === 1 && typeof frame.owner === "string" && typeof frame.projectKey === "string" &&
|
|
440
|
+
isFiniteNumber(frame.epoch) && isFiniteNumber(frame.turn) && typeof frame.mission === "string" &&
|
|
441
|
+
Array.isArray(frame.leases) && frame.leases.every(isContextLease) &&
|
|
442
|
+
activeMode !== undefined && activeMode !== "auto" && parseVibeMode(frame.selection) !== undefined &&
|
|
443
|
+
isFiniteNumber(frame.createdAt) && isFiniteNumber(frame.updatedAt) && typeof frame.reset === "boolean" &&
|
|
444
|
+
(frame.receipt === null || isContextReceipt(frame.receipt));
|
|
445
|
+
}
|
|
446
|
+
function isContextLease(value) {
|
|
447
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
448
|
+
return false;
|
|
449
|
+
const lease = value;
|
|
450
|
+
return typeof lease.id === "string" && typeof lease.term === "string" &&
|
|
451
|
+
(lease.source === "pinned" || lease.source === "mission" || lease.source === "turn" || lease.source === "mode") &&
|
|
452
|
+
isFiniteNumber(lease.weight) && isFiniteNumber(lease.createdTurn) &&
|
|
453
|
+
(lease.expiresAfterTurn === null || isFiniteNumber(lease.expiresAfterTurn));
|
|
454
|
+
}
|
|
455
|
+
function isContextReceipt(value) {
|
|
456
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
457
|
+
return false;
|
|
458
|
+
const receipt = value;
|
|
459
|
+
const mode = parseVibeMode(receipt.mode);
|
|
460
|
+
return isFiniteNumber(receipt.generatedAt) && isFiniteNumber(receipt.epoch) &&
|
|
461
|
+
mode !== undefined && mode !== "auto" && isFiniteNumber(receipt.routeConfidence) &&
|
|
462
|
+
Array.isArray(receipt.routeReasons) && receipt.routeReasons.every((item) => typeof item === "string") &&
|
|
463
|
+
typeof receipt.memoryScopeId === "string" && typeof receipt.mission === "string" &&
|
|
464
|
+
typeof receipt.retrievalQuery === "string" && Array.isArray(receipt.focusTerms) &&
|
|
465
|
+
receipt.focusTerms.every((item) => typeof item === "string") && isFiniteNumber(receipt.contextBudget) &&
|
|
466
|
+
typeof receipt.proofChains === "boolean" && typeof receipt.inherited === "boolean";
|
|
467
|
+
}
|
|
468
|
+
function isFiniteNumber(value) {
|
|
469
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
470
|
+
}
|
|
471
|
+
function safeName(value) {
|
|
472
|
+
const safe = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
473
|
+
return safe || "context";
|
|
474
|
+
}
|
|
475
|
+
function oneLine(value) {
|
|
476
|
+
return value.replace(/\s+/g, " ").trim();
|
|
477
|
+
}
|
|
478
|
+
function escapeValue(value) {
|
|
479
|
+
return oneLine(value).replace(/"/g, "'");
|
|
480
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type TuneConfig, type QualityTargets, type TuneAdjustment } from "./context-autotuner.js";
|
|
2
|
+
import type { ContextMetrics } from "./context-metrics.js";
|
|
3
|
+
import { type CompileInput, type CompiledContext } from "./context-window-compiler.js";
|
|
4
|
+
import { type TunerBaseline } from "./tuner-baseline-store.js";
|
|
5
|
+
import { type ExploreOptions, type PatternRanking } from "./context-pattern-explorer.js";
|
|
6
|
+
export type CompileWithConfig = (config: TuneConfig) => ContextMetrics;
|
|
7
|
+
export interface LoopStep {
|
|
8
|
+
readonly round: number;
|
|
9
|
+
readonly config: TuneConfig;
|
|
10
|
+
readonly metrics: ContextMetrics;
|
|
11
|
+
readonly score: number;
|
|
12
|
+
readonly adjustments: readonly TuneAdjustment[];
|
|
13
|
+
}
|
|
14
|
+
export interface LoopResult {
|
|
15
|
+
readonly bestConfig: TuneConfig;
|
|
16
|
+
readonly bestScore: number;
|
|
17
|
+
readonly initialScore: number;
|
|
18
|
+
readonly improved: boolean;
|
|
19
|
+
readonly converged: boolean;
|
|
20
|
+
readonly rounds: number;
|
|
21
|
+
readonly trajectory: readonly LoopStep[];
|
|
22
|
+
}
|
|
23
|
+
export interface LoopOptions {
|
|
24
|
+
readonly config?: TuneConfig;
|
|
25
|
+
readonly targets?: QualityTargets;
|
|
26
|
+
readonly maxRounds?: number;
|
|
27
|
+
readonly minGain?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function runFeedbackLoop(compile: CompileWithConfig, opts?: LoopOptions): LoopResult;
|
|
30
|
+
export declare function runContextFeedbackLoop(input: CompileInput, opts?: LoopOptions): {
|
|
31
|
+
readonly loop: LoopResult;
|
|
32
|
+
readonly compiled: CompiledContext;
|
|
33
|
+
};
|
|
34
|
+
export interface LearningLoopOptions extends LoopOptions {
|
|
35
|
+
readonly dir: string;
|
|
36
|
+
readonly storeId: string;
|
|
37
|
+
readonly scope?: string;
|
|
38
|
+
readonly persist?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare function runLearningFeedbackLoop(input: CompileInput, opts: LearningLoopOptions): {
|
|
41
|
+
readonly loop: LoopResult;
|
|
42
|
+
readonly compiled: CompiledContext;
|
|
43
|
+
readonly baseline: TunerBaseline;
|
|
44
|
+
};
|
|
45
|
+
export interface DeepSelfImproveOptions extends ExploreOptions {
|
|
46
|
+
readonly dir: string;
|
|
47
|
+
readonly storeId: string;
|
|
48
|
+
readonly scope?: string;
|
|
49
|
+
readonly persist?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function runDeepSelfImprove(input: CompileInput, opts: DeepSelfImproveOptions): Promise<{
|
|
52
|
+
readonly ranking: PatternRanking;
|
|
53
|
+
readonly compiled: CompiledContext;
|
|
54
|
+
readonly baseline: TunerBaseline;
|
|
55
|
+
}>;
|
|
56
|
+
export declare function formatLoopResult(result: LoopResult): string;
|