@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,345 @@
|
|
|
1
|
+
// Modello "Patch Plan": il PIANO STRUTTURATO che precede ogni modifica al
|
|
2
|
+
// codice. Prima di editare, l'agente dichiara COSA vuole ottenere (goal), QUALI
|
|
3
|
+
// file tocchera' (files), QUALI contratti/API sono coinvolti (contracts), QUALI
|
|
4
|
+
// rischi/regressioni introduce (risks) e QUALI test lo verificano (tests).
|
|
5
|
+
//
|
|
6
|
+
// Si inserisce nel flusso: analisi-repo -> recall -> [PATCH PLAN] -> edit ->
|
|
7
|
+
// verify. Lo stato del piano traccia il ciclo di vita: draft (appena scritto),
|
|
8
|
+
// approved (pronto a editare), applied (edit fatto), verified (test passati),
|
|
9
|
+
// abandoned (scartato). E' persistito per sessione ed emette eventi sul
|
|
10
|
+
// MemoryStore (dominio "patches") cosi' da essere richiamabile via recall.
|
|
11
|
+
//
|
|
12
|
+
// Allineato a vision.ts: zero dipendenze a runtime, tipi readonly, parsing
|
|
13
|
+
// robusto che non lancia mai, API immutabile, serializzazione deterministica.
|
|
14
|
+
export const PATCH_PLAN_SCHEMA_VERSION = 1;
|
|
15
|
+
const FILE_KINDS = new Set(["create", "modify", "delete", "rename"]);
|
|
16
|
+
const CONTRACT_IMPACTS = new Set(["uses", "changes", "breaks"]);
|
|
17
|
+
const RISK_SEVERITIES = new Set(["low", "medium", "high"]);
|
|
18
|
+
const TEST_STATUSES = new Set(["pending", "passed", "failed"]);
|
|
19
|
+
const PLAN_STATUSES = new Set([
|
|
20
|
+
"draft", "approved", "applied", "verified", "abandoned",
|
|
21
|
+
]);
|
|
22
|
+
// Tetto anti-esplosione (parita' con vision/requirements).
|
|
23
|
+
const MAX_FILES = 50;
|
|
24
|
+
const MAX_CONTRACTS = 30;
|
|
25
|
+
const MAX_RISKS = 30;
|
|
26
|
+
const MAX_TESTS = 30;
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// 2. NORMALIZZAZIONE + VALIDAZIONE
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
function nowIso() {
|
|
31
|
+
return new Date().toISOString();
|
|
32
|
+
}
|
|
33
|
+
function asString(v) {
|
|
34
|
+
return typeof v === "string" ? v : v == null ? "" : String(v);
|
|
35
|
+
}
|
|
36
|
+
function normalizeFileKind(v) {
|
|
37
|
+
const s = asString(v).trim().toLowerCase();
|
|
38
|
+
return FILE_KINDS.has(s) ? s : "modify";
|
|
39
|
+
}
|
|
40
|
+
function normalizeImpact(v) {
|
|
41
|
+
const s = asString(v).trim().toLowerCase();
|
|
42
|
+
return CONTRACT_IMPACTS.has(s) ? s : "uses";
|
|
43
|
+
}
|
|
44
|
+
function normalizeSeverity(v) {
|
|
45
|
+
const s = asString(v).trim().toLowerCase();
|
|
46
|
+
return RISK_SEVERITIES.has(s) ? s : "medium";
|
|
47
|
+
}
|
|
48
|
+
function normalizeTestStatus(v) {
|
|
49
|
+
const s = asString(v).trim().toLowerCase();
|
|
50
|
+
return TEST_STATUSES.has(s) ? s : "pending";
|
|
51
|
+
}
|
|
52
|
+
function normalizeStatus(v) {
|
|
53
|
+
const s = asString(v).trim().toLowerCase();
|
|
54
|
+
return PLAN_STATUSES.has(s) ? s : "draft";
|
|
55
|
+
}
|
|
56
|
+
function normalizeFiles(raw) {
|
|
57
|
+
if (!Array.isArray(raw))
|
|
58
|
+
return [];
|
|
59
|
+
const out = [];
|
|
60
|
+
for (const f of raw) {
|
|
61
|
+
const obj = (f ?? {});
|
|
62
|
+
const path = asString(obj["path"]).trim();
|
|
63
|
+
if (!path)
|
|
64
|
+
continue;
|
|
65
|
+
const reason = asString(obj["reason"]).trim();
|
|
66
|
+
out.push({
|
|
67
|
+
path,
|
|
68
|
+
kind: normalizeFileKind(obj["kind"]),
|
|
69
|
+
...(reason ? { reason } : {}),
|
|
70
|
+
});
|
|
71
|
+
if (out.length >= MAX_FILES)
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
function normalizeContracts(raw) {
|
|
77
|
+
if (!Array.isArray(raw))
|
|
78
|
+
return [];
|
|
79
|
+
const out = [];
|
|
80
|
+
for (const c of raw) {
|
|
81
|
+
const obj = (c ?? {});
|
|
82
|
+
const name = asString(obj["name"]).trim();
|
|
83
|
+
if (!name)
|
|
84
|
+
continue;
|
|
85
|
+
const id = asString(obj["id"]).trim() || `C${out.length + 1}`;
|
|
86
|
+
const note = asString(obj["note"]).trim();
|
|
87
|
+
out.push({
|
|
88
|
+
id,
|
|
89
|
+
name,
|
|
90
|
+
impact: normalizeImpact(obj["impact"]),
|
|
91
|
+
...(note ? { note } : {}),
|
|
92
|
+
});
|
|
93
|
+
if (out.length >= MAX_CONTRACTS)
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
function normalizeRisks(raw) {
|
|
99
|
+
if (!Array.isArray(raw))
|
|
100
|
+
return [];
|
|
101
|
+
const out = [];
|
|
102
|
+
for (const r of raw) {
|
|
103
|
+
const obj = (r ?? {});
|
|
104
|
+
const text = asString(obj["text"]).trim();
|
|
105
|
+
if (!text)
|
|
106
|
+
continue;
|
|
107
|
+
const id = asString(obj["id"]).trim() || `R${out.length + 1}`;
|
|
108
|
+
const mitigation = asString(obj["mitigation"]).trim();
|
|
109
|
+
out.push({
|
|
110
|
+
id,
|
|
111
|
+
text,
|
|
112
|
+
severity: normalizeSeverity(obj["severity"]),
|
|
113
|
+
...(mitigation ? { mitigation } : {}),
|
|
114
|
+
});
|
|
115
|
+
if (out.length >= MAX_RISKS)
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
function normalizeTests(raw) {
|
|
121
|
+
if (!Array.isArray(raw))
|
|
122
|
+
return [];
|
|
123
|
+
const out = [];
|
|
124
|
+
for (const t of raw) {
|
|
125
|
+
const obj = (t ?? {});
|
|
126
|
+
const text = asString(obj["text"]).trim();
|
|
127
|
+
if (!text)
|
|
128
|
+
continue;
|
|
129
|
+
const id = asString(obj["id"]).trim() || `T${out.length + 1}`;
|
|
130
|
+
out.push({ id, text, status: normalizeTestStatus(obj["status"]) });
|
|
131
|
+
if (out.length >= MAX_TESTS)
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
136
|
+
// Valida un Patch Plan gia' normalizzato: ritorna la lista (vuota = valido) dei
|
|
137
|
+
// problemi BLOCCANTI. Un piano e' valido sse ha id, goal non vuoti e almeno un
|
|
138
|
+
// file da toccare; gli id di contratti/rischi/test devono essere univoci.
|
|
139
|
+
export function validatePatchPlan(p) {
|
|
140
|
+
const issues = [];
|
|
141
|
+
if (!p.id.trim())
|
|
142
|
+
issues.push({ field: "id", message: "id mancante" });
|
|
143
|
+
if (!p.goal.trim())
|
|
144
|
+
issues.push({ field: "goal", message: "goal (obiettivo della patch) mancante" });
|
|
145
|
+
if (p.files.length === 0)
|
|
146
|
+
issues.push({ field: "files", message: "nessun file da modificare" });
|
|
147
|
+
if (p.version !== PATCH_PLAN_SCHEMA_VERSION) {
|
|
148
|
+
issues.push({ field: "version", message: `versione schema attesa ${PATCH_PLAN_SCHEMA_VERSION}` });
|
|
149
|
+
}
|
|
150
|
+
dupCheck(p.contracts.map((c) => c.id), "contracts", issues);
|
|
151
|
+
dupCheck(p.risks.map((r) => r.id), "risks", issues);
|
|
152
|
+
dupCheck(p.tests.map((t) => t.id), "tests", issues);
|
|
153
|
+
return issues;
|
|
154
|
+
}
|
|
155
|
+
function dupCheck(ids, field, issues) {
|
|
156
|
+
const seen = new Set();
|
|
157
|
+
for (const id of ids) {
|
|
158
|
+
if (seen.has(id))
|
|
159
|
+
issues.push({ field: `${field}.${id}`, message: "id duplicato" });
|
|
160
|
+
seen.add(id);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export function isPatchPlanValid(p) {
|
|
164
|
+
return validatePatchPlan(p).length === 0;
|
|
165
|
+
}
|
|
166
|
+
// Costruisce un Patch Plan normalizzato e completo da un draft morbido. Applica
|
|
167
|
+
// default, genera gli id mancanti e i timestamp. NON lancia: produce sempre un
|
|
168
|
+
// oggetto (eventualmente non valido, da controllare con validatePatchPlan).
|
|
169
|
+
export function createPatchPlan(draft, opts) {
|
|
170
|
+
const ts = opts?.now ?? nowIso();
|
|
171
|
+
return {
|
|
172
|
+
version: PATCH_PLAN_SCHEMA_VERSION,
|
|
173
|
+
id: asString(draft.id ?? opts?.id).trim() || "P1",
|
|
174
|
+
...(asString(draft.taskRef).trim() ? { taskRef: asString(draft.taskRef).trim() } : {}),
|
|
175
|
+
goal: asString(draft.goal).trim(),
|
|
176
|
+
status: normalizeStatus(draft.status ?? "draft"),
|
|
177
|
+
files: normalizeFiles(draft.files),
|
|
178
|
+
contracts: normalizeContracts(draft.contracts),
|
|
179
|
+
risks: normalizeRisks(draft.risks),
|
|
180
|
+
tests: normalizeTests(draft.tests),
|
|
181
|
+
createdAt: ts,
|
|
182
|
+
updatedAt: ts,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// Parsing robusto da testo/JSON: estrae il primo blocco {...}, normalizza tutto.
|
|
186
|
+
// Mai lancia: su input non valido ritorna null. Conserva i timestamp se presenti.
|
|
187
|
+
export function parsePatchPlan(text, opts) {
|
|
188
|
+
const m = /\{[\s\S]*\}/.exec(text);
|
|
189
|
+
if (!m)
|
|
190
|
+
return null;
|
|
191
|
+
let root;
|
|
192
|
+
try {
|
|
193
|
+
root = JSON.parse(m[0]);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const ts = opts?.now ?? nowIso();
|
|
199
|
+
const createdAt = asString(root["createdAt"]).trim() || ts;
|
|
200
|
+
const updatedAt = asString(root["updatedAt"]).trim() || ts;
|
|
201
|
+
const taskRef = asString(root["taskRef"]).trim();
|
|
202
|
+
return {
|
|
203
|
+
version: PATCH_PLAN_SCHEMA_VERSION,
|
|
204
|
+
id: asString(root["id"]).trim() || "P1",
|
|
205
|
+
...(taskRef ? { taskRef } : {}),
|
|
206
|
+
goal: asString(root["goal"]).trim(),
|
|
207
|
+
status: normalizeStatus(root["status"]),
|
|
208
|
+
files: normalizeFiles(root["files"]),
|
|
209
|
+
contracts: normalizeContracts(root["contracts"]),
|
|
210
|
+
risks: normalizeRisks(root["risks"]),
|
|
211
|
+
tests: normalizeTests(root["tests"]),
|
|
212
|
+
createdAt,
|
|
213
|
+
updatedAt,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Aggiornamento immutabile: applica una patch e rinfresca updatedAt. I campi
|
|
217
|
+
// passati sostituiscono quelli esistenti e vengono ri-normalizzati.
|
|
218
|
+
export function updatePatchPlan(p, patch, opts) {
|
|
219
|
+
return {
|
|
220
|
+
...p,
|
|
221
|
+
...(patch.goal !== undefined ? { goal: asString(patch.goal).trim() } : {}),
|
|
222
|
+
...(patch.status !== undefined ? { status: normalizeStatus(patch.status) } : {}),
|
|
223
|
+
...(patch.taskRef !== undefined ? { taskRef: asString(patch.taskRef).trim() || undefined } : {}),
|
|
224
|
+
...(patch.files !== undefined ? { files: normalizeFiles(patch.files) } : {}),
|
|
225
|
+
...(patch.contracts !== undefined ? { contracts: normalizeContracts(patch.contracts) } : {}),
|
|
226
|
+
...(patch.risks !== undefined ? { risks: normalizeRisks(patch.risks) } : {}),
|
|
227
|
+
...(patch.tests !== undefined ? { tests: normalizeTests(patch.tests) } : {}),
|
|
228
|
+
updatedAt: opts?.now ?? nowIso(),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
// 3. SERIALIZZAZIONE
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// Serializza in stringa JSON stabile (chiavi in ordine deterministico, indentata).
|
|
235
|
+
export function patchPlanToJSON(p) {
|
|
236
|
+
return JSON.stringify(orderedPlan(p), null, 2);
|
|
237
|
+
}
|
|
238
|
+
// Deserializza da JSON. Alias semantico di parsePatchPlan per simmetria.
|
|
239
|
+
export function patchPlanFromJSON(json, opts) {
|
|
240
|
+
return parsePatchPlan(json, opts);
|
|
241
|
+
}
|
|
242
|
+
function orderedPlan(p) {
|
|
243
|
+
return {
|
|
244
|
+
version: p.version,
|
|
245
|
+
id: p.id,
|
|
246
|
+
...(p.taskRef ? { taskRef: p.taskRef } : {}),
|
|
247
|
+
goal: p.goal,
|
|
248
|
+
status: p.status,
|
|
249
|
+
files: p.files.map((f) => ({
|
|
250
|
+
path: f.path,
|
|
251
|
+
kind: f.kind,
|
|
252
|
+
...(f.reason ? { reason: f.reason } : {}),
|
|
253
|
+
})),
|
|
254
|
+
contracts: p.contracts.map((c) => ({
|
|
255
|
+
id: c.id,
|
|
256
|
+
name: c.name,
|
|
257
|
+
impact: c.impact,
|
|
258
|
+
...(c.note ? { note: c.note } : {}),
|
|
259
|
+
})),
|
|
260
|
+
risks: p.risks.map((r) => ({
|
|
261
|
+
id: r.id,
|
|
262
|
+
text: r.text,
|
|
263
|
+
severity: r.severity,
|
|
264
|
+
...(r.mitigation ? { mitigation: r.mitigation } : {}),
|
|
265
|
+
})),
|
|
266
|
+
tests: p.tests.map((t) => ({ id: t.id, text: t.text, status: t.status })),
|
|
267
|
+
createdAt: p.createdAt,
|
|
268
|
+
updatedAt: p.updatedAt,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
export function patchPlanSummary(p) {
|
|
272
|
+
return {
|
|
273
|
+
files: p.files.length,
|
|
274
|
+
contracts: p.contracts.length,
|
|
275
|
+
breakingContracts: p.contracts.filter((c) => c.impact === "breaks").length,
|
|
276
|
+
risks: p.risks.length,
|
|
277
|
+
highRisks: p.risks.filter((r) => r.severity === "high").length,
|
|
278
|
+
tests: p.tests.length,
|
|
279
|
+
testsPassed: p.tests.filter((t) => t.status === "passed").length,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
export function patchPlanVerification(p) {
|
|
283
|
+
const total = p.tests.length;
|
|
284
|
+
const passed = p.tests.filter((t) => t.status === "passed").length;
|
|
285
|
+
const failed = p.tests.filter((t) => t.status === "failed").length;
|
|
286
|
+
return {
|
|
287
|
+
ratio: total === 0 ? 0 : passed / total,
|
|
288
|
+
verified: total > 0 && passed === total,
|
|
289
|
+
testsPassed: passed,
|
|
290
|
+
testsTotal: total,
|
|
291
|
+
testsFailed: failed,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
const FILE_KIND_TAG = {
|
|
295
|
+
create: "CREATE",
|
|
296
|
+
modify: "MODIFY",
|
|
297
|
+
delete: "DELETE",
|
|
298
|
+
rename: "RENAME",
|
|
299
|
+
};
|
|
300
|
+
const SEVERITY_TAG = {
|
|
301
|
+
low: "LOW",
|
|
302
|
+
medium: "MED",
|
|
303
|
+
high: "HIGH",
|
|
304
|
+
};
|
|
305
|
+
function q(s, max = 200) {
|
|
306
|
+
return s.replace(/"/g, "'").slice(0, max);
|
|
307
|
+
}
|
|
308
|
+
// Formatta il Patch Plan in notazione Danilov: blocco di contesto (steer) da
|
|
309
|
+
// iniettare all'agente prima dell'edit, parita' con buildVisionBlock. Ritorna
|
|
310
|
+
// "" se il piano e' privo di goal.
|
|
311
|
+
export function buildPatchPlanBlock(p) {
|
|
312
|
+
if (!p.goal.trim())
|
|
313
|
+
return "";
|
|
314
|
+
const fileDefs = p.files.map((f) => {
|
|
315
|
+
const why = f.reason ? ` -> ${q(f.reason, 120)}` : "";
|
|
316
|
+
return `@${FILE_KIND_TAG[f.kind]}[${q(f.path, 160)}]:${why || " -"}`;
|
|
317
|
+
});
|
|
318
|
+
const contractDefs = p.contracts.map((c) => `@${c.id}[${c.impact}]: ${q(c.name, 160)}${c.note ? ` -> ${q(c.note, 120)}` : ""}`);
|
|
319
|
+
const riskDefs = p.risks.map((r) => `@${r.id}[${SEVERITY_TAG[r.severity]}]: ${q(r.text, 160)}${r.mitigation ? ` (mitiga: ${q(r.mitigation, 120)})` : ""}`);
|
|
320
|
+
const testDefs = p.tests.map((t) => `@${t.id}[${t.status}]: ${q(t.text, 160)}`);
|
|
321
|
+
const ver = patchPlanVerification(p);
|
|
322
|
+
return `[VASCEND_PATCH_PLAN ${p.id}]
|
|
323
|
+
INDICE
|
|
324
|
+
1 = goal
|
|
325
|
+
2 = file
|
|
326
|
+
3 = contratti
|
|
327
|
+
4 = rischi
|
|
328
|
+
5 = test
|
|
329
|
+
|
|
330
|
+
DEFINIZIONI
|
|
331
|
+
@goal[patch]: "${q(p.goal)}"
|
|
332
|
+
@stato[ciclo]: ${p.status}${p.taskRef ? ` (attivita ${p.taskRef})` : ""}
|
|
333
|
+
${fileDefs.length ? fileDefs.join("\n") : "@file[nessuno]: -"}
|
|
334
|
+
${contractDefs.length ? contractDefs.join("\n") : "@contratti[nessuno]: -"}
|
|
335
|
+
${riskDefs.length ? riskDefs.join("\n") : "@rischi[nessuno]: -"}
|
|
336
|
+
${testDefs.length ? testDefs.join("\n") : "@test[nessuno]: -"}
|
|
337
|
+
|
|
338
|
+
RELAZIONI
|
|
339
|
+
@R-edit: @goal[patch] -> @file [ la modifica tocca questi file per l'obiettivo ]
|
|
340
|
+
@R-contract: @file -> @contratti [ i file alterano/usano queste superfici ]
|
|
341
|
+
@R-risk: @contratti -> @rischi [ i cambi di contratto generano regressioni potenziali ]
|
|
342
|
+
@R-verify: @rischi -> @test [ i test coprono i rischi prima del verify ]
|
|
343
|
+
|
|
344
|
+
OUTPUT: piano di patch ${p.id}; verificato=${ver.verified} (test ${ver.testsPassed}/${ver.testsTotal}, falliti ${ver.testsFailed}). Edita solo i file elencati, poi esegui i test.`;
|
|
345
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CastlePlan, type PlanTask } from "./plan-store.js";
|
|
2
|
+
export declare function taskTitles(input: unknown, available?: number): readonly string[];
|
|
3
|
+
export declare function sameCastlePlan(castle: CastlePlan, title: string, tasks: readonly string[], after?: string): boolean;
|
|
4
|
+
export interface PlanBlocker {
|
|
5
|
+
readonly castle: string;
|
|
6
|
+
readonly reason: "missing" | "incomplete" | "cycle";
|
|
7
|
+
}
|
|
8
|
+
export declare function planBlockers(castles: readonly CastlePlan[], slug: string): readonly PlanBlocker[];
|
|
9
|
+
export declare function isConcreteTaskEvidence(value: string): boolean;
|
|
10
|
+
export declare function hasTaskEvidence(task: PlanTask): boolean;
|
|
11
|
+
export declare function nextPlanTask(castle: CastlePlan): PlanTask | undefined;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { parseTaskTokens } from "./plan-store.js";
|
|
2
|
+
// Public tool validation must never silently discard part of the requested work.
|
|
3
|
+
export function taskTitles(input, available = 16) {
|
|
4
|
+
if (!Array.isArray(input) || input.length === 0)
|
|
5
|
+
throw new Error("tasks deve contenere almeno una attivita");
|
|
6
|
+
if (input.some((title) => typeof title !== "string" || !parseTaskTokens(title).title)) {
|
|
7
|
+
throw new Error("ogni task deve essere una stringa con un titolo non vuoto");
|
|
8
|
+
}
|
|
9
|
+
if (input.length > available) {
|
|
10
|
+
throw new Error(`troppe attivita: ${input.length} richieste, ${available} disponibili (max 16 per gruppo). Usa un altro gruppo`);
|
|
11
|
+
}
|
|
12
|
+
return input.map((title) => title.trim());
|
|
13
|
+
}
|
|
14
|
+
export function sameCastlePlan(castle, title, tasks, after) {
|
|
15
|
+
if (castle.title !== (title.trim() || castle.slug) || (castle.after ?? "") !== (after?.trim() ?? ""))
|
|
16
|
+
return false;
|
|
17
|
+
return castle.tasks.length === tasks.length && tasks.every((raw, index) => {
|
|
18
|
+
const meta = parseTaskTokens(raw);
|
|
19
|
+
const task = castle.tasks[index];
|
|
20
|
+
return task.title === meta.title && task.weight === meta.weight && Boolean(task.compact) === meta.compact
|
|
21
|
+
&& meta.skills.every((skill) => task.skills?.includes(skill))
|
|
22
|
+
&& JSON.stringify(task.files ?? []) === JSON.stringify(meta.files);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// Follow the entire prerequisite chain: forward references are allowed while
|
|
26
|
+
// planning, but missing, unfinished or cyclic dependencies cannot be executed.
|
|
27
|
+
export function planBlockers(castles, slug) {
|
|
28
|
+
const bySlug = new Map(castles.map((castle) => [castle.slug, castle]));
|
|
29
|
+
const seen = new Set([slug]);
|
|
30
|
+
const blockers = [];
|
|
31
|
+
let next = bySlug.get(slug)?.after;
|
|
32
|
+
while (next) {
|
|
33
|
+
if (seen.has(next)) {
|
|
34
|
+
blockers.push({ castle: next, reason: "cycle" });
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
seen.add(next);
|
|
38
|
+
const dependency = bySlug.get(next);
|
|
39
|
+
if (!dependency) {
|
|
40
|
+
blockers.push({ castle: next, reason: "missing" });
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
if (!dependency.tasks.length || dependency.tasks.some((task) => task.status !== "completed")) {
|
|
44
|
+
blockers.push({ castle: next, reason: "incomplete" });
|
|
45
|
+
}
|
|
46
|
+
next = dependency.after;
|
|
47
|
+
}
|
|
48
|
+
return blockers;
|
|
49
|
+
}
|
|
50
|
+
// This checks whether evidence is specific enough to inspect, not whether the
|
|
51
|
+
// underlying claim is true. Verification remains the agent's responsibility.
|
|
52
|
+
export function isConcreteTaskEvidence(value) {
|
|
53
|
+
const text = value.trim();
|
|
54
|
+
if (text.length < 12)
|
|
55
|
+
return false;
|
|
56
|
+
if (/^tool=(?:write_file|edit_file|bash|bash_output); target=.+; result=.+/.test(text))
|
|
57
|
+
return true;
|
|
58
|
+
return /(?:[A-Za-z]:[\\/]|(?:^|\s)[./]?[\w@-]+[\\/][\w./\\-]+|\.(?:ts|tsx|js|jsx|json|md|css|html|py|rs|go|java|cs|yml|yaml)\b|\b(?:test|tests|bun|npm|pnpm|pytest|cargo|build|lint|typecheck|comando|command|output|exit\s*code|pass|passed|verde|ok)\b)/i.test(text);
|
|
59
|
+
}
|
|
60
|
+
export function hasTaskEvidence(task) {
|
|
61
|
+
return (task.status === "running" || task.status === "completed")
|
|
62
|
+
&& Boolean(task.evidence?.some(isConcreteTaskEvidence));
|
|
63
|
+
}
|
|
64
|
+
export function nextPlanTask(castle) {
|
|
65
|
+
return castle.tasks.find((task) => task.status === "running")
|
|
66
|
+
?? castle.tasks.find((task) => task.status === "failed")
|
|
67
|
+
?? castle.tasks.find((task) => task.status === "pending");
|
|
68
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type PlanTaskStatus = "pending" | "running" | "completed" | "failed";
|
|
2
|
+
export interface PlanTask {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly bit: number;
|
|
5
|
+
readonly mask: string;
|
|
6
|
+
readonly title: string;
|
|
7
|
+
readonly status: PlanTaskStatus;
|
|
8
|
+
readonly evidence?: readonly string[];
|
|
9
|
+
readonly tokens?: number;
|
|
10
|
+
readonly ms?: number;
|
|
11
|
+
readonly notes?: readonly string[];
|
|
12
|
+
readonly skills?: readonly string[];
|
|
13
|
+
readonly weight?: number;
|
|
14
|
+
readonly files?: readonly string[];
|
|
15
|
+
readonly compact?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TaskMeta {
|
|
18
|
+
readonly title: string;
|
|
19
|
+
readonly skills: readonly string[];
|
|
20
|
+
readonly weight?: number;
|
|
21
|
+
readonly files: readonly string[];
|
|
22
|
+
readonly compact: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function parseTaskTokens(raw: string): TaskMeta;
|
|
25
|
+
export interface CastlePlan {
|
|
26
|
+
readonly slug: string;
|
|
27
|
+
readonly title: string;
|
|
28
|
+
readonly maskTarget: string;
|
|
29
|
+
readonly custom: true;
|
|
30
|
+
readonly tasks: readonly PlanTask[];
|
|
31
|
+
readonly notes?: readonly string[];
|
|
32
|
+
readonly skills?: readonly string[];
|
|
33
|
+
readonly after?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface KingdomPlan {
|
|
36
|
+
readonly castles: readonly CastlePlan[];
|
|
37
|
+
}
|
|
38
|
+
export declare class VascendPlanStore {
|
|
39
|
+
private readonly file;
|
|
40
|
+
private readonly memory;
|
|
41
|
+
private kingdom;
|
|
42
|
+
private constructor();
|
|
43
|
+
static open(sessionDir: string, sessionId: string, options?: {
|
|
44
|
+
strict?: boolean;
|
|
45
|
+
}): VascendPlanStore;
|
|
46
|
+
castles(): readonly CastlePlan[];
|
|
47
|
+
hasAny(): boolean;
|
|
48
|
+
runningTaskRef(): string | null;
|
|
49
|
+
setCastle(slug: string, title: string, taskTitles: readonly string[], after?: string): CastlePlan;
|
|
50
|
+
mark(slug: string, idOrBit: string, status: PlanTaskStatus, evidence?: string): PlanTask | null;
|
|
51
|
+
addEvidence(slug: string, idOrBit: string, evidence: string): PlanTask | null;
|
|
52
|
+
setRoomTokens(slug: string, idOrBit: string, tokens: number): void;
|
|
53
|
+
setRoomMetrics(slug: string, idOrBit: string, metrics: {
|
|
54
|
+
tokens?: number;
|
|
55
|
+
ms?: number;
|
|
56
|
+
}): void;
|
|
57
|
+
addTasks(slug: string, taskTitles: readonly string[]): readonly PlanTask[];
|
|
58
|
+
addNote(slug: string, idOrBit: string | null, note: string): boolean;
|
|
59
|
+
bindSkills(slug: string, idOrBit: string | null, skills: readonly string[]): boolean;
|
|
60
|
+
setAfter(slug: string, after: string): boolean;
|
|
61
|
+
castle(slug: string): CastlePlan | undefined;
|
|
62
|
+
clear(): void;
|
|
63
|
+
private persist;
|
|
64
|
+
}
|