@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,44 @@
|
|
|
1
|
+
export interface UserFact {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly text: string;
|
|
4
|
+
readonly kind: string;
|
|
5
|
+
readonly createdAt: number;
|
|
6
|
+
readonly updatedAt: number;
|
|
7
|
+
readonly hits: number;
|
|
8
|
+
}
|
|
9
|
+
export interface UserProfile {
|
|
10
|
+
readonly version: number;
|
|
11
|
+
readonly facts: readonly UserFact[];
|
|
12
|
+
}
|
|
13
|
+
export declare function readUserProfile(sessionDir: string): UserProfile;
|
|
14
|
+
/**
|
|
15
|
+
* Aggiunge (o rinforza) un fatto. Un fatto ripetuto non si duplica: sale il
|
|
16
|
+
* contatore, che e' anche il segnale di quanto conta davvero.
|
|
17
|
+
*/
|
|
18
|
+
export declare function rememberUserFact(sessionDir: string, text: string, kind?: string, now?: number): {
|
|
19
|
+
readonly ok: boolean;
|
|
20
|
+
readonly reinforced: boolean;
|
|
21
|
+
readonly profile: UserProfile;
|
|
22
|
+
};
|
|
23
|
+
export declare function forgetUserFact(sessionDir: string, needle: string): {
|
|
24
|
+
readonly ok: boolean;
|
|
25
|
+
readonly removed: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Blocco per il system prompt. Ordine per rinforzo: i fatti che la persona ha
|
|
29
|
+
* ripetuto stanno in cima. Resta corto per scelta: e' un prefisso, non un
|
|
30
|
+
* archivio.
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatUserProfile(profile: UserProfile, max?: number): string;
|
|
33
|
+
/**
|
|
34
|
+
* Nudge deterministico a fine giro: se il lavoro ha prodotto decisioni e in
|
|
35
|
+
* memoria non e' finito NIENTE, lo si dice una volta. Sperare che il modello si
|
|
36
|
+
* ricordi da solo di persistere non ha funzionato: la memoria si popolava solo
|
|
37
|
+
* quando qualcuno la nominava.
|
|
38
|
+
*/
|
|
39
|
+
export declare function persistNudge(input: {
|
|
40
|
+
readonly memoryWrites: number;
|
|
41
|
+
readonly editedFiles: number;
|
|
42
|
+
readonly turns: number;
|
|
43
|
+
readonly profileFacts?: number;
|
|
44
|
+
}): string;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Profilo dell'utente: i fatti DUREVOLI che non vanno riscoperti ogni volta.
|
|
2
|
+
//
|
|
3
|
+
// La memoria di progetto risponde a "com'e' fatto questo repo"; le stanze a
|
|
4
|
+
// "cosa ho fatto ieri". Nessuna delle due tiene "chi e' la persona con cui
|
|
5
|
+
// lavoro": come preferisce le risposte, quali decisioni ha gia' preso e non va
|
|
6
|
+
// ridiscusse, quali vincoli valgono sempre. Senza questo strato l'agente
|
|
7
|
+
// ricomincia da zero a ogni sessione e la persona ripete le stesse istruzioni.
|
|
8
|
+
//
|
|
9
|
+
// Vive in un file JSON accanto alle sessioni, e viene iniettato nel PREFISSO del
|
|
10
|
+
// system prompt: sta nella parte cacheabile, quindi costa una volta.
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { dirname, join } from "node:path";
|
|
13
|
+
const PROFILE_FILE = "user-profile.json";
|
|
14
|
+
const PROFILE_VERSION = 1;
|
|
15
|
+
const MAX_FACTS = 48;
|
|
16
|
+
const MAX_FACT_CHARS = 300;
|
|
17
|
+
const MAX_INJECTED = 14;
|
|
18
|
+
const EMPTY = { version: PROFILE_VERSION, facts: [] };
|
|
19
|
+
function normalize(text) {
|
|
20
|
+
return String(text || "")
|
|
21
|
+
.normalize("NFKD")
|
|
22
|
+
.replace(/[̀-ͯ]/g, "")
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.replace(/[^a-z0-9]+/g, " ")
|
|
25
|
+
.trim();
|
|
26
|
+
}
|
|
27
|
+
function profilePath(sessionDir) {
|
|
28
|
+
return join(sessionDir, PROFILE_FILE);
|
|
29
|
+
}
|
|
30
|
+
export function readUserProfile(sessionDir) {
|
|
31
|
+
if (!sessionDir)
|
|
32
|
+
return EMPTY;
|
|
33
|
+
const file = profilePath(sessionDir);
|
|
34
|
+
if (!existsSync(file))
|
|
35
|
+
return EMPTY;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
38
|
+
if (!parsed || parsed.version !== PROFILE_VERSION || !Array.isArray(parsed.facts))
|
|
39
|
+
return EMPTY;
|
|
40
|
+
return parsed;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return EMPTY;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function save(sessionDir, profile) {
|
|
47
|
+
try {
|
|
48
|
+
const file = profilePath(sessionDir);
|
|
49
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
50
|
+
writeFileSync(file, JSON.stringify(profile), "utf8");
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Aggiunge (o rinforza) un fatto. Un fatto ripetuto non si duplica: sale il
|
|
59
|
+
* contatore, che e' anche il segnale di quanto conta davvero.
|
|
60
|
+
*/
|
|
61
|
+
export function rememberUserFact(sessionDir, text, kind = "preference", now = Date.now()) {
|
|
62
|
+
const clean = String(text || "").replace(/\s+/g, " ").trim().slice(0, MAX_FACT_CHARS);
|
|
63
|
+
if (!clean)
|
|
64
|
+
return { ok: false, reinforced: false, profile: readUserProfile(sessionDir) };
|
|
65
|
+
const current = readUserProfile(sessionDir);
|
|
66
|
+
const key = normalize(clean);
|
|
67
|
+
const existing = current.facts.find((fact) => normalize(fact.text) === key);
|
|
68
|
+
const facts = existing
|
|
69
|
+
? current.facts.map((fact) => (fact === existing
|
|
70
|
+
? { ...fact, text: clean, kind: kind || fact.kind, updatedAt: now, hits: fact.hits + 1 }
|
|
71
|
+
: fact))
|
|
72
|
+
: [
|
|
73
|
+
...current.facts,
|
|
74
|
+
{ id: `u${now.toString(36)}`, text: clean, kind: kind || "preference", createdAt: now, updatedAt: now, hits: 1 },
|
|
75
|
+
];
|
|
76
|
+
// Quando si sfora il tetto cade il fatto meno rinforzato e piu' vecchio.
|
|
77
|
+
const pruned = facts.length <= MAX_FACTS
|
|
78
|
+
? facts
|
|
79
|
+
: [...facts].sort((a, b) => b.hits - a.hits || b.updatedAt - a.updatedAt).slice(0, MAX_FACTS);
|
|
80
|
+
const profile = { version: PROFILE_VERSION, facts: pruned };
|
|
81
|
+
return { ok: save(sessionDir, profile), reinforced: !!existing, profile };
|
|
82
|
+
}
|
|
83
|
+
export function forgetUserFact(sessionDir, needle) {
|
|
84
|
+
const key = normalize(needle);
|
|
85
|
+
if (!key)
|
|
86
|
+
return { ok: false, removed: 0 };
|
|
87
|
+
const current = readUserProfile(sessionDir);
|
|
88
|
+
const facts = current.facts.filter((fact) => !normalize(fact.text).includes(key) && fact.id !== needle);
|
|
89
|
+
const removed = current.facts.length - facts.length;
|
|
90
|
+
if (!removed)
|
|
91
|
+
return { ok: true, removed: 0 };
|
|
92
|
+
return { ok: save(sessionDir, { version: PROFILE_VERSION, facts }), removed };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Blocco per il system prompt. Ordine per rinforzo: i fatti che la persona ha
|
|
96
|
+
* ripetuto stanno in cima. Resta corto per scelta: e' un prefisso, non un
|
|
97
|
+
* archivio.
|
|
98
|
+
*/
|
|
99
|
+
export function formatUserProfile(profile, max = MAX_INJECTED) {
|
|
100
|
+
const facts = [...profile.facts]
|
|
101
|
+
.sort((a, b) => b.hits - a.hits || b.updatedAt - a.updatedAt)
|
|
102
|
+
.slice(0, Math.max(1, max));
|
|
103
|
+
if (!facts.length)
|
|
104
|
+
return "";
|
|
105
|
+
const lines = facts.map((fact) => `- ${fact.text}`);
|
|
106
|
+
return [
|
|
107
|
+
"Chi hai davanti (fatti durevoli, non riscoprirli e non richiederli):",
|
|
108
|
+
...lines,
|
|
109
|
+
].join("\n");
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Nudge deterministico a fine giro: se il lavoro ha prodotto decisioni e in
|
|
113
|
+
* memoria non e' finito NIENTE, lo si dice una volta. Sperare che il modello si
|
|
114
|
+
* ricordi da solo di persistere non ha funzionato: la memoria si popolava solo
|
|
115
|
+
* quando qualcuno la nominava.
|
|
116
|
+
*/
|
|
117
|
+
export function persistNudge(input) {
|
|
118
|
+
const { memoryWrites, editedFiles, turns } = input;
|
|
119
|
+
if (memoryWrites > 0)
|
|
120
|
+
return "";
|
|
121
|
+
const worked = editedFiles > 0 || turns >= 6;
|
|
122
|
+
if (!worked)
|
|
123
|
+
return "";
|
|
124
|
+
const what = editedFiles > 0
|
|
125
|
+
? `Hai toccato ${editedFiles} file`
|
|
126
|
+
: `Questo giro e' durato ${turns} turni`;
|
|
127
|
+
return `${what} e in memoria non e' finito niente. Se resta una decisione che vale domani `
|
|
128
|
+
+ "(perche' una strada e' stata scartata, un vincolo scoperto, una preferenza espressa), "
|
|
129
|
+
+ "scrivila prima di chiudere: vascend_note per il lavoro, user_profile per cio' che riguarda la persona. "
|
|
130
|
+
+ "Se non c'e' nulla da ricordare, procedi senza dirlo.";
|
|
131
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export type FeatureStatus = "proposed" | "agreed" | "built" | "dropped";
|
|
2
|
+
export type FeaturePriority = "core" | "important" | "optional";
|
|
3
|
+
export interface VisionFeature {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly description?: string;
|
|
7
|
+
readonly priority: FeaturePriority;
|
|
8
|
+
readonly status: FeatureStatus;
|
|
9
|
+
}
|
|
10
|
+
export interface ReadinessCriterion {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly text: string;
|
|
13
|
+
readonly met: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface VisionValue {
|
|
16
|
+
readonly statement: string;
|
|
17
|
+
readonly beneficiary?: string;
|
|
18
|
+
readonly metric?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Vision {
|
|
21
|
+
readonly version: 1;
|
|
22
|
+
readonly taskId: string;
|
|
23
|
+
readonly goal: string;
|
|
24
|
+
readonly value: VisionValue;
|
|
25
|
+
readonly features: readonly VisionFeature[];
|
|
26
|
+
readonly readiness: readonly ReadinessCriterion[];
|
|
27
|
+
readonly createdAt: string;
|
|
28
|
+
readonly updatedAt: string;
|
|
29
|
+
}
|
|
30
|
+
export interface VisionDraft {
|
|
31
|
+
readonly taskId: string;
|
|
32
|
+
readonly goal: string;
|
|
33
|
+
readonly value: string | VisionValue;
|
|
34
|
+
readonly features?: ReadonlyArray<Partial<VisionFeature> & {
|
|
35
|
+
readonly title: string;
|
|
36
|
+
}>;
|
|
37
|
+
readonly readiness?: ReadonlyArray<Partial<ReadinessCriterion> & {
|
|
38
|
+
readonly text: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
export declare const VISION_SCHEMA_VERSION: 1;
|
|
42
|
+
export interface VisionIssue {
|
|
43
|
+
readonly field: string;
|
|
44
|
+
readonly message: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function validateVision(v: Vision): readonly VisionIssue[];
|
|
47
|
+
export declare function isVisionValid(v: Vision): boolean;
|
|
48
|
+
export declare function createVision(draft: VisionDraft, opts?: {
|
|
49
|
+
readonly now?: string;
|
|
50
|
+
}): Vision;
|
|
51
|
+
export declare function parseVision(text: string, opts?: {
|
|
52
|
+
readonly now?: string;
|
|
53
|
+
}): Vision | null;
|
|
54
|
+
export declare function updateVision(v: Vision, patch: Partial<Pick<Vision, "goal" | "value" | "features" | "readiness">>, opts?: {
|
|
55
|
+
readonly now?: string;
|
|
56
|
+
}): Vision;
|
|
57
|
+
export declare function visionToJSON(v: Vision): string;
|
|
58
|
+
export declare function visionFromJSON(json: string, opts?: {
|
|
59
|
+
readonly now?: string;
|
|
60
|
+
}): Vision | null;
|
|
61
|
+
export declare class VascendVisionStore {
|
|
62
|
+
private readonly file;
|
|
63
|
+
private readonly memory;
|
|
64
|
+
private visions;
|
|
65
|
+
private constructor();
|
|
66
|
+
static open(sessionDir: string, sessionId: string): VascendVisionStore;
|
|
67
|
+
has(taskId: string): boolean;
|
|
68
|
+
get(taskId: string): Vision | undefined;
|
|
69
|
+
all(): readonly Vision[];
|
|
70
|
+
set(v: Vision): Vision;
|
|
71
|
+
update(taskId: string, patch: Partial<Pick<Vision, "goal" | "value" | "features" | "readiness">>, opts?: {
|
|
72
|
+
readonly now?: string;
|
|
73
|
+
}): Vision | undefined;
|
|
74
|
+
remove(taskId: string): boolean;
|
|
75
|
+
private persist;
|
|
76
|
+
}
|
|
77
|
+
export interface VisionSummary {
|
|
78
|
+
readonly features: number;
|
|
79
|
+
readonly coreFeatures: number;
|
|
80
|
+
readonly builtFeatures: number;
|
|
81
|
+
readonly readiness: number;
|
|
82
|
+
readonly readinessMet: number;
|
|
83
|
+
}
|
|
84
|
+
export declare function visionSummary(v: Vision): VisionSummary;
|
|
85
|
+
export interface VisionCompleteness {
|
|
86
|
+
readonly ratio: number;
|
|
87
|
+
readonly productionReady: boolean;
|
|
88
|
+
readonly coreBuilt: number;
|
|
89
|
+
readonly coreTotal: number;
|
|
90
|
+
readonly readinessMet: number;
|
|
91
|
+
readonly readinessTotal: number;
|
|
92
|
+
}
|
|
93
|
+
export declare function visionCompleteness(v: Vision): VisionCompleteness;
|
|
94
|
+
export declare function buildVisionBlock(v: Vision): string;
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { MemoryStore } from "./memory-store.js";
|
|
4
|
+
export const VISION_SCHEMA_VERSION = 1;
|
|
5
|
+
const FEATURE_PRIORITIES = new Set(["core", "important", "optional"]);
|
|
6
|
+
const FEATURE_STATUSES = new Set(["proposed", "agreed", "built", "dropped"]);
|
|
7
|
+
// Tetto anti-esplosione (parita' con requirements).
|
|
8
|
+
const MAX_FEATURES = 30;
|
|
9
|
+
const MAX_READINESS = 30;
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// 2. NORMALIZZAZIONE + VALIDAZIONE
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
function nowIso() {
|
|
14
|
+
return new Date().toISOString();
|
|
15
|
+
}
|
|
16
|
+
function asString(v) {
|
|
17
|
+
return typeof v === "string" ? v : v == null ? "" : String(v);
|
|
18
|
+
}
|
|
19
|
+
function normalizeFeaturePriority(v) {
|
|
20
|
+
const s = asString(v).trim().toLowerCase();
|
|
21
|
+
return FEATURE_PRIORITIES.has(s) ? s : "core";
|
|
22
|
+
}
|
|
23
|
+
function normalizeFeatureStatus(v) {
|
|
24
|
+
const s = asString(v).trim().toLowerCase();
|
|
25
|
+
return FEATURE_STATUSES.has(s) ? s : "agreed";
|
|
26
|
+
}
|
|
27
|
+
function normalizeFeatures(raw) {
|
|
28
|
+
if (!Array.isArray(raw))
|
|
29
|
+
return [];
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const f of raw) {
|
|
32
|
+
const obj = (f ?? {});
|
|
33
|
+
const title = asString(obj["title"]).trim();
|
|
34
|
+
if (!title)
|
|
35
|
+
continue;
|
|
36
|
+
const id = asString(obj["id"]).trim() || `F${out.length + 1}`;
|
|
37
|
+
const description = asString(obj["description"]).trim();
|
|
38
|
+
out.push({
|
|
39
|
+
id,
|
|
40
|
+
title,
|
|
41
|
+
...(description ? { description } : {}),
|
|
42
|
+
priority: normalizeFeaturePriority(obj["priority"]),
|
|
43
|
+
status: normalizeFeatureStatus(obj["status"]),
|
|
44
|
+
});
|
|
45
|
+
if (out.length >= MAX_FEATURES)
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
function normalizeReadiness(raw) {
|
|
51
|
+
if (!Array.isArray(raw))
|
|
52
|
+
return [];
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const c of raw) {
|
|
55
|
+
const obj = (c ?? {});
|
|
56
|
+
const text = asString(obj["text"]).trim();
|
|
57
|
+
if (!text)
|
|
58
|
+
continue;
|
|
59
|
+
const id = asString(obj["id"]).trim() || `RP${out.length + 1}`;
|
|
60
|
+
out.push({ id, text, met: obj["met"] === true });
|
|
61
|
+
if (out.length >= MAX_READINESS)
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function normalizeValue(raw) {
|
|
67
|
+
if (typeof raw === "string")
|
|
68
|
+
return { statement: raw.trim() };
|
|
69
|
+
const obj = (raw ?? {});
|
|
70
|
+
const statement = asString(obj["statement"]).trim();
|
|
71
|
+
const beneficiary = asString(obj["beneficiary"]).trim();
|
|
72
|
+
const metric = asString(obj["metric"]).trim();
|
|
73
|
+
return {
|
|
74
|
+
statement,
|
|
75
|
+
...(beneficiary ? { beneficiary } : {}),
|
|
76
|
+
...(metric ? { metric } : {}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Valida una Vision gia' normalizzata: ritorna la lista (vuota = valida) dei
|
|
80
|
+
// problemi BLOCCANTI. Una Vision e' valida sse ha taskId, goal e value.statement
|
|
81
|
+
// non vuoti; gli id di feature e criteri devono essere univoci.
|
|
82
|
+
export function validateVision(v) {
|
|
83
|
+
const issues = [];
|
|
84
|
+
if (!v.taskId.trim())
|
|
85
|
+
issues.push({ field: "taskId", message: "taskId mancante" });
|
|
86
|
+
if (!v.goal.trim())
|
|
87
|
+
issues.push({ field: "goal", message: "goal (obiettivo finale) mancante" });
|
|
88
|
+
if (!v.value.statement.trim()) {
|
|
89
|
+
issues.push({ field: "value.statement", message: "valore (perche' conta) mancante" });
|
|
90
|
+
}
|
|
91
|
+
if (v.version !== VISION_SCHEMA_VERSION) {
|
|
92
|
+
issues.push({ field: "version", message: `versione schema attesa ${VISION_SCHEMA_VERSION}` });
|
|
93
|
+
}
|
|
94
|
+
const featIds = new Set();
|
|
95
|
+
for (const f of v.features) {
|
|
96
|
+
if (featIds.has(f.id))
|
|
97
|
+
issues.push({ field: `features.${f.id}`, message: "id funzionalita' duplicato" });
|
|
98
|
+
featIds.add(f.id);
|
|
99
|
+
}
|
|
100
|
+
const rpIds = new Set();
|
|
101
|
+
for (const c of v.readiness) {
|
|
102
|
+
if (rpIds.has(c.id))
|
|
103
|
+
issues.push({ field: `readiness.${c.id}`, message: "id criterio duplicato" });
|
|
104
|
+
rpIds.add(c.id);
|
|
105
|
+
}
|
|
106
|
+
return issues;
|
|
107
|
+
}
|
|
108
|
+
export function isVisionValid(v) {
|
|
109
|
+
return validateVision(v).length === 0;
|
|
110
|
+
}
|
|
111
|
+
// Costruisce una Vision normalizzata e completa a partire da un draft morbido.
|
|
112
|
+
// Applica default, genera gli id mancanti e i timestamp. NON lancia: produce
|
|
113
|
+
// sempre un oggetto Vision (eventualmente non valido, da controllare con
|
|
114
|
+
// validateVision).
|
|
115
|
+
export function createVision(draft, opts) {
|
|
116
|
+
const ts = opts?.now ?? nowIso();
|
|
117
|
+
return {
|
|
118
|
+
version: VISION_SCHEMA_VERSION,
|
|
119
|
+
taskId: asString(draft.taskId).trim(),
|
|
120
|
+
goal: asString(draft.goal).trim(),
|
|
121
|
+
value: normalizeValue(draft.value),
|
|
122
|
+
features: normalizeFeatures(draft.features),
|
|
123
|
+
readiness: normalizeReadiness(draft.readiness),
|
|
124
|
+
createdAt: ts,
|
|
125
|
+
updatedAt: ts,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Parsing robusto da testo/JSON: estrae il primo blocco {...}, normalizza tutto.
|
|
129
|
+
// Mai lancia: su input non valido ritorna null. Conserva i timestamp se presenti,
|
|
130
|
+
// altrimenti li genera.
|
|
131
|
+
export function parseVision(text, opts) {
|
|
132
|
+
const m = /\{[\s\S]*\}/.exec(text);
|
|
133
|
+
if (!m)
|
|
134
|
+
return null;
|
|
135
|
+
let root;
|
|
136
|
+
try {
|
|
137
|
+
root = JSON.parse(m[0]);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const ts = opts?.now ?? nowIso();
|
|
143
|
+
const createdAt = asString(root["createdAt"]).trim() || ts;
|
|
144
|
+
const updatedAt = asString(root["updatedAt"]).trim() || ts;
|
|
145
|
+
return {
|
|
146
|
+
version: VISION_SCHEMA_VERSION,
|
|
147
|
+
taskId: asString(root["taskId"]).trim(),
|
|
148
|
+
goal: asString(root["goal"]).trim(),
|
|
149
|
+
value: normalizeValue(root["value"]),
|
|
150
|
+
features: normalizeFeatures(root["features"]),
|
|
151
|
+
readiness: normalizeReadiness(root["readiness"]),
|
|
152
|
+
createdAt,
|
|
153
|
+
updatedAt,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// Aggiornamento immutabile: applica una patch e rinfresca updatedAt. I campi
|
|
157
|
+
// passati sostituiscono quelli esistenti (le liste vanno gia' normalizzate dal
|
|
158
|
+
// chiamante o passate come draft-like e ri-normalizzate qui).
|
|
159
|
+
export function updateVision(v, patch, opts) {
|
|
160
|
+
return {
|
|
161
|
+
...v,
|
|
162
|
+
...(patch.goal !== undefined ? { goal: asString(patch.goal).trim() } : {}),
|
|
163
|
+
...(patch.value !== undefined ? { value: normalizeValue(patch.value) } : {}),
|
|
164
|
+
...(patch.features !== undefined ? { features: normalizeFeatures(patch.features) } : {}),
|
|
165
|
+
...(patch.readiness !== undefined ? { readiness: normalizeReadiness(patch.readiness) } : {}),
|
|
166
|
+
updatedAt: opts?.now ?? nowIso(),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// 3. SERIALIZZAZIONE + STORE PERSISTENTE
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Serializza in stringa JSON stabile (chiavi in ordine deterministico, indentata).
|
|
173
|
+
export function visionToJSON(v) {
|
|
174
|
+
const ordered = {
|
|
175
|
+
version: v.version,
|
|
176
|
+
taskId: v.taskId,
|
|
177
|
+
goal: v.goal,
|
|
178
|
+
value: {
|
|
179
|
+
statement: v.value.statement,
|
|
180
|
+
...(v.value.beneficiary ? { beneficiary: v.value.beneficiary } : {}),
|
|
181
|
+
...(v.value.metric ? { metric: v.value.metric } : {}),
|
|
182
|
+
},
|
|
183
|
+
features: v.features.map((f) => ({
|
|
184
|
+
id: f.id,
|
|
185
|
+
title: f.title,
|
|
186
|
+
...(f.description ? { description: f.description } : {}),
|
|
187
|
+
priority: f.priority,
|
|
188
|
+
status: f.status,
|
|
189
|
+
})),
|
|
190
|
+
readiness: v.readiness.map((c) => ({ id: c.id, text: c.text, met: c.met })),
|
|
191
|
+
createdAt: v.createdAt,
|
|
192
|
+
updatedAt: v.updatedAt,
|
|
193
|
+
};
|
|
194
|
+
return JSON.stringify(ordered, null, 2);
|
|
195
|
+
}
|
|
196
|
+
// Deserializza da JSON. Alias semantico di parseVision per simmetria con toJSON.
|
|
197
|
+
export function visionFromJSON(json, opts) {
|
|
198
|
+
return parseVision(json, opts);
|
|
199
|
+
}
|
|
200
|
+
// Store persistente per sessione: una Vision per task, file
|
|
201
|
+
// `<sessionId>.vision.json` -> mappa { [taskId]: Vision }. Stesso stile di
|
|
202
|
+
// VascendPlanStore: API immutabile verso l'esterno, persistenza su mutazione.
|
|
203
|
+
export class VascendVisionStore {
|
|
204
|
+
file;
|
|
205
|
+
memory;
|
|
206
|
+
visions = {};
|
|
207
|
+
constructor(file, memory) {
|
|
208
|
+
this.file = file;
|
|
209
|
+
this.memory = memory;
|
|
210
|
+
}
|
|
211
|
+
static open(sessionDir, sessionId) {
|
|
212
|
+
const store = new VascendVisionStore(join(sessionDir, `${sessionId}.vision.json`), MemoryStore.open(sessionDir, sessionId));
|
|
213
|
+
if (existsSync(store.file)) {
|
|
214
|
+
try {
|
|
215
|
+
const raw = JSON.parse(readFileSync(store.file, "utf8"));
|
|
216
|
+
const out = {};
|
|
217
|
+
for (const [taskId, val] of Object.entries(raw ?? {})) {
|
|
218
|
+
const parsed = parseVision(JSON.stringify(val));
|
|
219
|
+
if (parsed)
|
|
220
|
+
out[taskId] = { ...parsed, taskId: parsed.taskId || taskId };
|
|
221
|
+
}
|
|
222
|
+
store.visions = out;
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// file corrotto: si riparte vuoti
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return store;
|
|
229
|
+
}
|
|
230
|
+
has(taskId) {
|
|
231
|
+
return Boolean(this.visions[taskId.trim()]);
|
|
232
|
+
}
|
|
233
|
+
get(taskId) {
|
|
234
|
+
return this.visions[taskId.trim()];
|
|
235
|
+
}
|
|
236
|
+
all() {
|
|
237
|
+
return Object.values(this.visions);
|
|
238
|
+
}
|
|
239
|
+
// Salva (crea o sostituisce) la Vision di un task. Ritorna la Vision salvata.
|
|
240
|
+
set(v) {
|
|
241
|
+
const taskId = v.taskId.trim();
|
|
242
|
+
this.visions = { ...this.visions, [taskId]: { ...v, taskId } };
|
|
243
|
+
this.persist();
|
|
244
|
+
this.memory.append(visionEvent("vision.updated", this.visions[taskId]));
|
|
245
|
+
return this.visions[taskId];
|
|
246
|
+
}
|
|
247
|
+
// Aggiorna immutabilmente la Vision di un task con una patch. No-op (ritorna
|
|
248
|
+
// undefined) se non esiste.
|
|
249
|
+
update(taskId, patch, opts) {
|
|
250
|
+
const cur = this.visions[taskId.trim()];
|
|
251
|
+
if (!cur)
|
|
252
|
+
return undefined;
|
|
253
|
+
return this.set(updateVision(cur, patch, opts));
|
|
254
|
+
}
|
|
255
|
+
remove(taskId) {
|
|
256
|
+
const id = taskId.trim();
|
|
257
|
+
if (!this.visions[id])
|
|
258
|
+
return false;
|
|
259
|
+
const { [id]: _drop, ...rest } = this.visions;
|
|
260
|
+
this.visions = rest;
|
|
261
|
+
this.persist();
|
|
262
|
+
this.memory.append({
|
|
263
|
+
type: "vision.removed",
|
|
264
|
+
domain: "vision",
|
|
265
|
+
subject: id,
|
|
266
|
+
summary: `Vision rimossa: ${id}`,
|
|
267
|
+
body: "",
|
|
268
|
+
terms: [id, "vision", "rimossa"],
|
|
269
|
+
payload: { taskId: id },
|
|
270
|
+
});
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
persist() {
|
|
274
|
+
mkdirSync(dirname(this.file), { recursive: true });
|
|
275
|
+
const ordered = {};
|
|
276
|
+
for (const [taskId, v] of Object.entries(this.visions)) {
|
|
277
|
+
ordered[taskId] = JSON.parse(visionToJSON(v));
|
|
278
|
+
}
|
|
279
|
+
writeFileSync(this.file, JSON.stringify(ordered, null, 2) + "\n", "utf8");
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function visionEvent(type, vision) {
|
|
283
|
+
const features = vision.features.filter((f) => f.status !== "dropped");
|
|
284
|
+
const readiness = vision.readiness;
|
|
285
|
+
return {
|
|
286
|
+
type,
|
|
287
|
+
domain: "vision",
|
|
288
|
+
subject: vision.taskId,
|
|
289
|
+
summary: vision.goal,
|
|
290
|
+
body: buildVisionBlock(vision),
|
|
291
|
+
terms: [
|
|
292
|
+
vision.taskId,
|
|
293
|
+
vision.goal,
|
|
294
|
+
vision.value.statement,
|
|
295
|
+
...features.flatMap((f) => [f.id, f.title, f.priority, f.status]),
|
|
296
|
+
...readiness.flatMap((r) => [r.id, r.text, r.met ? "met" : "todo"]),
|
|
297
|
+
],
|
|
298
|
+
links: [
|
|
299
|
+
...features.map((f) => ({ rel: "requires", target: f.id, domain: "vision" })),
|
|
300
|
+
...readiness.map((r) => ({ rel: "readiness", target: r.id, domain: "vision" })),
|
|
301
|
+
],
|
|
302
|
+
payload: { vision },
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
export function visionSummary(v) {
|
|
306
|
+
const active = v.features.filter((f) => f.status !== "dropped");
|
|
307
|
+
return {
|
|
308
|
+
features: active.length,
|
|
309
|
+
coreFeatures: active.filter((f) => f.priority === "core").length,
|
|
310
|
+
builtFeatures: active.filter((f) => f.status === "built").length,
|
|
311
|
+
readiness: v.readiness.length,
|
|
312
|
+
readinessMet: v.readiness.filter((c) => c.met).length,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
export function visionCompleteness(v) {
|
|
316
|
+
const core = v.features.filter((f) => f.priority === "core" && f.status !== "dropped");
|
|
317
|
+
const coreBuilt = core.filter((f) => f.status === "built").length;
|
|
318
|
+
const readinessMet = v.readiness.filter((c) => c.met).length;
|
|
319
|
+
const total = core.length + v.readiness.length;
|
|
320
|
+
const done = coreBuilt + readinessMet;
|
|
321
|
+
const ratio = total === 0 ? 1 : done / total;
|
|
322
|
+
return {
|
|
323
|
+
ratio,
|
|
324
|
+
productionReady: coreBuilt === core.length && readinessMet === v.readiness.length,
|
|
325
|
+
coreBuilt,
|
|
326
|
+
coreTotal: core.length,
|
|
327
|
+
readinessMet,
|
|
328
|
+
readinessTotal: v.readiness.length,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
const FEATURE_PRIORITY_TAG = {
|
|
332
|
+
core: "CORE",
|
|
333
|
+
important: "IMPORTANT",
|
|
334
|
+
optional: "OPTIONAL",
|
|
335
|
+
};
|
|
336
|
+
function q(s, max = 200) {
|
|
337
|
+
return s.replace(/"/g, "'").slice(0, max);
|
|
338
|
+
}
|
|
339
|
+
// Formatta la Vision in notazione Danilov: blocco di contesto (steer) da
|
|
340
|
+
// iniettare all'agente, parita' con buildRequirementsBlock. Ritorna "" se la
|
|
341
|
+
// Vision e' priva di goal.
|
|
342
|
+
export function buildVisionBlock(v) {
|
|
343
|
+
if (!v.goal.trim())
|
|
344
|
+
return "";
|
|
345
|
+
const featDefs = v.features
|
|
346
|
+
.filter((f) => f.status !== "dropped")
|
|
347
|
+
.map((f) => {
|
|
348
|
+
const desc = f.description ? ` -> ${q(f.description, 120)}` : "";
|
|
349
|
+
return `@${f.id}[${FEATURE_PRIORITY_TAG[f.priority]}/${f.status}]: ${q(f.title, 160)}${desc}`;
|
|
350
|
+
});
|
|
351
|
+
const rpDefs = v.readiness.map((c) => `@${c.id}[${c.met ? "MET" : "TODO"}]: ${q(c.text, 160)}`);
|
|
352
|
+
const valLine = [v.value.statement, v.value.beneficiary && `per ${v.value.beneficiary}`, v.value.metric && `(metrica: ${v.value.metric})`]
|
|
353
|
+
.filter(Boolean)
|
|
354
|
+
.join(" ");
|
|
355
|
+
const comp = visionCompleteness(v);
|
|
356
|
+
return `[VASCEND_VISION]
|
|
357
|
+
INDICE
|
|
358
|
+
1 = obiettivo
|
|
359
|
+
2 = valore
|
|
360
|
+
3 = funzionalita
|
|
361
|
+
4 = pronto-produzione
|
|
362
|
+
|
|
363
|
+
DEFINIZIONI
|
|
364
|
+
@obiettivo[finale]: "${q(v.goal)}"
|
|
365
|
+
@valore[perche]: "${q(valLine || "(non specificato)")}"
|
|
366
|
+
${featDefs.length ? featDefs.join("\n") : "@funzionalita[nessuna]: -"}
|
|
367
|
+
${rpDefs.length ? rpDefs.join("\n") : "@pronto[nessun-criterio]: -"}
|
|
368
|
+
|
|
369
|
+
RELAZIONI
|
|
370
|
+
@R-goal: @obiettivo[finale] -> @valore[perche] [ il lavoro esiste per realizzare questo valore ]
|
|
371
|
+
@R-feat: funzionalita[CORE] -> @obiettivo[finale] [ le core sono indispensabili all'obiettivo ]
|
|
372
|
+
@R-rp: @pronto -> consegna [ spedibile sse ogni CORE e' built e ogni criterio e' MET ]
|
|
373
|
+
|
|
374
|
+
OUTPUT: questa e' la Vision condivisa del task; pronto-per-produzione=${comp.productionReady} (core ${comp.coreBuilt}/${comp.coreTotal}, readiness ${comp.readinessMet}/${comp.readinessTotal}).`;
|
|
375
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AgentDeps } from "../core/agent.js";
|
|
2
|
+
import type { AgentEvent } from "../core/types.js";
|
|
3
|
+
import type { ItemOutcome } from "./work-runner.js";
|
|
4
|
+
import type { WorkItem } from "./work-queue.js";
|
|
5
|
+
export declare function briefFor(item: WorkItem): string;
|
|
6
|
+
export declare function parseOutcome(text: string): ItemOutcome;
|
|
7
|
+
export interface FreshAgentOptions {
|
|
8
|
+
readonly memoryScopeId?: string;
|
|
9
|
+
readonly planStoreId?: string;
|
|
10
|
+
readonly onEvent?: (item: WorkItem, event: AgentEvent) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function createFreshAgentRunner(base: AgentDeps, options?: FreshAgentOptions): (item: WorkItem, signal: AbortSignal) => Promise<ItemOutcome>;
|