@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,206 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
export function runGit(cwd, args, signal) {
|
|
5
|
+
return new Promise((resolve) => {
|
|
6
|
+
let stdout = "";
|
|
7
|
+
let stderr = "";
|
|
8
|
+
let child;
|
|
9
|
+
try {
|
|
10
|
+
child = spawn("git", args, { cwd, windowsHide: true });
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
resolve({ code: -1, stdout: "", stderr: String(err) });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
child.stdout?.on("data", (d) => { stdout += d.toString("utf8"); });
|
|
17
|
+
child.stderr?.on("data", (d) => { stderr += d.toString("utf8"); });
|
|
18
|
+
child.on("error", (err) => resolve({ code: -1, stdout: stdout.trim(), stderr: (stderr + String(err)).trim() }));
|
|
19
|
+
child.on("exit", (code) => resolve({ code: code ?? -1, stdout: stdout.trim(), stderr: stderr.trim() }));
|
|
20
|
+
if (signal) {
|
|
21
|
+
if (signal.aborted) {
|
|
22
|
+
try {
|
|
23
|
+
child.kill();
|
|
24
|
+
}
|
|
25
|
+
catch { /* gia' morto */ }
|
|
26
|
+
}
|
|
27
|
+
else
|
|
28
|
+
signal.addEventListener("abort", () => { try {
|
|
29
|
+
child.kill();
|
|
30
|
+
}
|
|
31
|
+
catch { /* gia' morto */ } }, { once: true });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Modalita' worktree: default ON. Disattivabile con TALOS_KINGDOM_WORKTREE=0
|
|
36
|
+
// (torna alla modalita' working dir condivisa + commit unico finale).
|
|
37
|
+
/* I worktree NON sono piu' il default. Erano diventati il pedaggio per avere
|
|
38
|
+
una squadra che lavora davvero in parallelo: in un repo git partiva una
|
|
39
|
+
richiesta di creare N worktree e N rami prima ancora di cominciare, e fuori
|
|
40
|
+
da git il parallelismo veniva tolto del tutto. Adesso i collaboratori
|
|
41
|
+
partono insieme comunque, e l'isolamento e' una scelta di chi lo vuole
|
|
42
|
+
(TALOS_KINGDOM_WORKTREE=1), non una condizione. */
|
|
43
|
+
export function worktreeMode(env) {
|
|
44
|
+
const v = (env["TALOS_KINGDOM_WORKTREE"] ?? "").trim().toLowerCase();
|
|
45
|
+
return v === "1" || v === "on" || v === "true" || v === "yes";
|
|
46
|
+
}
|
|
47
|
+
export async function isGitRepo(cwd) {
|
|
48
|
+
const r = await runGit(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
49
|
+
return r.code === 0 && r.stdout.startsWith("true");
|
|
50
|
+
}
|
|
51
|
+
// Radice del repo (toplevel) a partire da una dir qualsiasi.
|
|
52
|
+
export async function repoRoot(cwd) {
|
|
53
|
+
const r = await runGit(cwd, ["rev-parse", "--show-toplevel"]);
|
|
54
|
+
return r.code === 0 && r.stdout ? r.stdout.trim() : null;
|
|
55
|
+
}
|
|
56
|
+
// Ramo corrente (null se detached o non-repo).
|
|
57
|
+
export async function currentBranch(cwd, signal) {
|
|
58
|
+
const r = await runGit(cwd, ["rev-parse", "--abbrev-ref", "HEAD"], signal);
|
|
59
|
+
if (r.code !== 0)
|
|
60
|
+
return null;
|
|
61
|
+
const b = r.stdout.trim();
|
|
62
|
+
return b && b !== "HEAD" ? b : null;
|
|
63
|
+
}
|
|
64
|
+
// Ramo di integrazione: esplicito > env > ramo corrente. NON hardcoded.
|
|
65
|
+
export async function resolveBaseBranch(cwd, env, explicit) {
|
|
66
|
+
const e = (explicit ?? env["TALOS_KINGDOM_BASE_BRANCH"] ?? "").trim();
|
|
67
|
+
if (e)
|
|
68
|
+
return e;
|
|
69
|
+
return currentBranch(cwd);
|
|
70
|
+
}
|
|
71
|
+
// Verifica il target PRIMA del merge. Un override del ramo base non autorizza a
|
|
72
|
+
// fondere silenziosamente nel ramo attualmente checkout: in caso di mismatch ci
|
|
73
|
+
// fermiamo e lasciamo intatti ramo e worktree del vassallo.
|
|
74
|
+
export async function verifyBaseBranch(root, base, signal) {
|
|
75
|
+
const ref = await runGit(root, ["show-ref", "--verify", "--quiet", `refs/heads/${base}`], signal);
|
|
76
|
+
if (ref.code !== 0) {
|
|
77
|
+
return {
|
|
78
|
+
ok: false,
|
|
79
|
+
current: await currentBranch(root, signal),
|
|
80
|
+
note: `ramo base locale "${base}" non trovato; crealo o seleziona un ramo locale esistente`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const current = await currentBranch(root, signal);
|
|
84
|
+
if (current !== base) {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
current,
|
|
88
|
+
note: `ramo base atteso "${base}", ma il repo principale e' su "${current ?? "HEAD staccato"}"; esegui git switch ${base} e riprova il merge`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const mergeHead = await runGit(root, ["rev-parse", "-q", "--verify", "MERGE_HEAD"], signal);
|
|
92
|
+
if (mergeHead.code === 0) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
current,
|
|
96
|
+
note: `il ramo base "${base}" ha gia' un merge in corso; completalo o annullalo prima di integrare i collaboratori`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { ok: true, current, note: `ramo base verificato: ${base}` };
|
|
100
|
+
}
|
|
101
|
+
// Componente di ref sicuro (per il nome ramo del vassallo).
|
|
102
|
+
export function sanitizeRef(s) {
|
|
103
|
+
return s.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^[-.]+|[-.]+$/g, "").slice(0, 40) || "x";
|
|
104
|
+
}
|
|
105
|
+
export function vassalBranchName(kingdomId, slug) {
|
|
106
|
+
return `talos/${sanitizeRef(kingdomId)}/${sanitizeRef(slug)}`;
|
|
107
|
+
}
|
|
108
|
+
export function worktreeDir(kingdomId, slug) {
|
|
109
|
+
return join(tmpdir(), "talos-wt", sanitizeRef(kingdomId), sanitizeRef(slug));
|
|
110
|
+
}
|
|
111
|
+
// Crea il worktree del vassallo su un ramo NUOVO dal ramo base. Non rimuove mai
|
|
112
|
+
// con --force un worktree precedente e non resetta mai un ramo gia' esistente:
|
|
113
|
+
// entrambi potrebbero contenere il recupero di un'esecuzione fallita.
|
|
114
|
+
export async function addWorktree(root, dir, branch, base, signal) {
|
|
115
|
+
return runGit(root, ["worktree", "add", "-b", branch, dir, base], signal);
|
|
116
|
+
}
|
|
117
|
+
// Committa nel worktree del vassallo TUTTO cio' che e' rimasto non committato
|
|
118
|
+
// (rete di sicurezza se il vassallo non ha committato da solo). Ritorna se ha
|
|
119
|
+
// effettivamente creato un commit.
|
|
120
|
+
export async function commitAll(dir, message, signal) {
|
|
121
|
+
const add = await runGit(dir, ["add", "-A"], signal);
|
|
122
|
+
if (add.code !== 0) {
|
|
123
|
+
return { ok: false, committed: false, clean: false, note: gitFailure("git add", add) };
|
|
124
|
+
}
|
|
125
|
+
const status = await runGit(dir, ["status", "--porcelain"], signal);
|
|
126
|
+
if (status.code !== 0) {
|
|
127
|
+
return { ok: false, committed: false, clean: false, note: gitFailure("git status", status) };
|
|
128
|
+
}
|
|
129
|
+
if (!status.stdout.trim())
|
|
130
|
+
return { ok: true, committed: false, clean: true, note: "worktree gia' pulito" };
|
|
131
|
+
const r = await runGit(dir, ["commit", "-m", message], signal);
|
|
132
|
+
if (r.code !== 0) {
|
|
133
|
+
return { ok: false, committed: false, clean: false, note: gitFailure("git commit", r) };
|
|
134
|
+
}
|
|
135
|
+
// Un hook post-commit potrebbe aver generato altre modifiche. Finche' il
|
|
136
|
+
// worktree non e' davvero pulito non e' sicuro fare merge e cleanup.
|
|
137
|
+
const after = await runGit(dir, ["status", "--porcelain"], signal);
|
|
138
|
+
if (after.code !== 0) {
|
|
139
|
+
return { ok: false, committed: true, clean: false, note: gitFailure("verifica dopo il commit", after) };
|
|
140
|
+
}
|
|
141
|
+
if (after.stdout.trim()) {
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
committed: true,
|
|
145
|
+
clean: false,
|
|
146
|
+
note: `commit creato, ma restano modifiche non salvate: ${after.stdout.split(/\r?\n/).slice(0, 4).join(", ")}`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { ok: true, committed: true, clean: true, note: "commit creato e worktree pulito" };
|
|
150
|
+
}
|
|
151
|
+
// Merge del ramo del vassallo nel ramo base (eseguito nel repo principale, che
|
|
152
|
+
// e' sul ramo base). In conflitto: abort e segnalazione (il ramo resta per la
|
|
153
|
+
// risoluzione manuale).
|
|
154
|
+
export async function mergeBack(root, base, branch, message, signal) {
|
|
155
|
+
const target = await verifyBaseBranch(root, base, signal);
|
|
156
|
+
if (!target.ok)
|
|
157
|
+
return { ok: false, conflict: false, integrated: false, note: target.note };
|
|
158
|
+
const r = await runGit(root, ["merge", "--no-ff", "-m", message, branch], signal);
|
|
159
|
+
if (r.code === 0) {
|
|
160
|
+
const ancestor = await runGit(root, ["merge-base", "--is-ancestor", branch, base], signal);
|
|
161
|
+
if (ancestor.code === 0)
|
|
162
|
+
return { ok: true, conflict: false, integrated: true, note: `merge verificato in ${base}` };
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
conflict: false,
|
|
166
|
+
integrated: false,
|
|
167
|
+
note: `git merge e' terminato, ma non e' stato possibile verificare ${branch} come antenato di ${base}; ramo e worktree conservati`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const out = `${r.stdout}\n${r.stderr}`;
|
|
171
|
+
const mergeHead = await runGit(root, ["rev-parse", "-q", "--verify", "MERGE_HEAD"], signal);
|
|
172
|
+
const conflict = mergeHead.code === 0 || /conflict/i.test(out);
|
|
173
|
+
let abortNote = "";
|
|
174
|
+
if (mergeHead.code === 0) {
|
|
175
|
+
const aborted = await runGit(root, ["merge", "--abort"], signal);
|
|
176
|
+
abortNote = aborted.code === 0
|
|
177
|
+
? "; merge parziale annullato"
|
|
178
|
+
: `; ATTENZIONE: git merge --abort fallito (${gitFailure("merge abort", aborted)})`;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
ok: false,
|
|
182
|
+
conflict,
|
|
183
|
+
integrated: false,
|
|
184
|
+
note: `${(out.trim() || "merge fallito").slice(0, 360)}${abortNote}`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// Pulizia volutamente non forzata: se Git vede modifiche residue, fallisce e il
|
|
188
|
+
// chiamante conserva sia worktree sia ramo per il recupero manuale.
|
|
189
|
+
export function removeWorktree(root, dir, signal) {
|
|
190
|
+
return runGit(root, ["worktree", "remove", dir], signal);
|
|
191
|
+
}
|
|
192
|
+
// -d (non -D) costituisce un secondo gate: Git rifiuta di eliminare un ramo che
|
|
193
|
+
// non risulta integrato.
|
|
194
|
+
export function deleteBranch(root, branch, signal) {
|
|
195
|
+
return runGit(root, ["branch", "-d", branch], signal);
|
|
196
|
+
}
|
|
197
|
+
// HEAD del ramo base prima dello swarm: serve a sapere se il merge ha aggiunto
|
|
198
|
+
// qualcosa (per il push finale).
|
|
199
|
+
export async function revParse(cwd, ref, signal) {
|
|
200
|
+
const r = await runGit(cwd, ["rev-parse", ref], signal);
|
|
201
|
+
return r.code === 0 ? r.stdout.trim() : null;
|
|
202
|
+
}
|
|
203
|
+
function gitFailure(step, result) {
|
|
204
|
+
const detail = (result.stderr || result.stdout || `uscita ${result.code}`).trim();
|
|
205
|
+
return `${step} fallito: ${detail.slice(0, 360)}`;
|
|
206
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Backend Computer Use incorporato
|
|
2
|
+
|
|
3
|
+
Snapshot dei moduli nativi del workspace Vascend Horizon (`vascend-terminal/src/main`), incorporato per rendere Talos CLI indipendente da Electron e dal repository esterno.
|
|
4
|
+
|
|
5
|
+
I file JavaScript mantengono CommonJS e il codice upstream. Dipendenze: soltanto built-in Node e PowerShell/Windows UI Automation. Non aggiungere dipendenze runtime. Il consenso, la serializzazione, l'isolamento sessioni e la conversione immagini sono gestiti da `src/tools/computer-use.ts`. I tool RAC che richiedono l'host non vengono esposti.
|
|
6
|
+
|
|
7
|
+
`node scripts/copy-computer-use.mjs` copia questi asset in `dist/vendor/computer-use` durante la build. Aggiornare lo snapshot in modo esplicito, rivedendo dipendenze e test; nessun caricamento dal repository fratello in produzione.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Inventario del desktop per Computer Use: applicazioni, processi e finestre.
|
|
4
|
+
// Sta fuori dal modulo dei tool perche' e' una fonte dati con regole proprie
|
|
5
|
+
// (fusione di due enumerazioni Win32, icone locali che non devono mai entrare
|
|
6
|
+
// nel contesto del modello, fotografia breve riusata da processes e attach).
|
|
7
|
+
|
|
8
|
+
const crypto = require('crypto');
|
|
9
|
+
const { integer, cleanWindow, cleanProcess } = require('./computer-observe');
|
|
10
|
+
|
|
11
|
+
const KNOWN_APPLICATIONS = Object.freeze({
|
|
12
|
+
claude: 'Claude Desktop', code: 'Visual Studio Code', chrome: 'Google Chrome',
|
|
13
|
+
msedge: 'Microsoft Edge', firefox: 'Firefox', slack: 'Slack', teams: 'Microsoft Teams',
|
|
14
|
+
notion: 'Notion', discord: 'Discord', spotify: 'Spotify', explorer: 'Esplora file',
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
function applicationName(process, windows) {
|
|
18
|
+
const normalized = String(process || '').trim().toLocaleLowerCase();
|
|
19
|
+
if (KNOWN_APPLICATIONS[normalized]) return KNOWN_APPLICATIONS[normalized];
|
|
20
|
+
const titled = (Array.isArray(windows) ? windows : []).find((row) => row.visible && row.title)
|
|
21
|
+
|| (Array.isArray(windows) ? windows : []).find((row) => row.title);
|
|
22
|
+
if (titled && titled.title) return titled.title.slice(0, 120);
|
|
23
|
+
const raw = String(process || 'Applicazione').replace(/[-_]+/g, ' ').trim();
|
|
24
|
+
return raw ? raw.charAt(0).toLocaleUpperCase() + raw.slice(1) : 'Applicazione';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function safeIconDataUrl(value) {
|
|
28
|
+
const icon = String(value || '');
|
|
29
|
+
return icon.length <= 32768 && /^data:image\/png;base64,[a-z0-9+/=]+$/i.test(icon) ? icon : '';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Il percorso dell'eseguibile serve solo all'host per estrarre l'icona: non
|
|
33
|
+
// lascia mai questo processo.
|
|
34
|
+
function publicProcess(value) {
|
|
35
|
+
const { _executablePath, ...safe } = value && typeof value === 'object' ? value : {};
|
|
36
|
+
return safe;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function publicApplication(value) {
|
|
40
|
+
const { icon, _iconProcess, ...safe } = value && typeof value === 'object' ? value : {};
|
|
41
|
+
return safe;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function uiApplication(value) {
|
|
45
|
+
const { _iconProcess, ...safe } = value && typeof value === 'object' ? value : {};
|
|
46
|
+
return safe;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function publicTarget(value) {
|
|
50
|
+
const { icon, _iconProcess, ...safe } = value && typeof value === 'object' ? value : {};
|
|
51
|
+
return Object.keys(safe).length ? safe : null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function mergeProcessWindows(windows, processes) {
|
|
55
|
+
const byId = new Map((Array.isArray(windows) ? windows : []).map((row) => [row.windowId, row]));
|
|
56
|
+
for (const process of Array.isArray(processes) ? processes : []) {
|
|
57
|
+
if (!process.windowId || !process.bounds || byId.has(process.windowId)) continue;
|
|
58
|
+
const row = cleanWindow({
|
|
59
|
+
windowId: process.windowId,
|
|
60
|
+
processId: process.processId,
|
|
61
|
+
process: process.process,
|
|
62
|
+
title: process.title || process.process,
|
|
63
|
+
bounds: process.bounds,
|
|
64
|
+
visible: process.visible,
|
|
65
|
+
minimized: process.minimized,
|
|
66
|
+
});
|
|
67
|
+
if (row) byId.set(row.windowId, row);
|
|
68
|
+
}
|
|
69
|
+
return [...byId.values()].sort((a, b) => Number(b.visible) - Number(a.visible)
|
|
70
|
+
|| Number(a.minimized) - Number(b.minimized)
|
|
71
|
+
|| a.process.localeCompare(b.process) || a.title.localeCompare(b.title)).slice(0, 240);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function createDesktopInventory({ listWindows, listProcesses, resolveProcessIcon, cacheMs = 2500 } = {}) {
|
|
75
|
+
let cache = null;
|
|
76
|
+
const iconCache = new Map();
|
|
77
|
+
|
|
78
|
+
const windowsNow = async () => {
|
|
79
|
+
let rows = [];
|
|
80
|
+
try { rows = await listWindows(); } catch (_) { rows = []; }
|
|
81
|
+
return (Array.isArray(rows) ? rows : []).map(cleanWindow).filter(Boolean).slice(0, 240);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const processesNow = async (windows) => {
|
|
85
|
+
let rows = [];
|
|
86
|
+
try { rows = listProcesses ? await listProcesses() : windows; } catch (_) { rows = []; }
|
|
87
|
+
const byId = new Map();
|
|
88
|
+
for (const raw of Array.isArray(rows) ? rows : []) {
|
|
89
|
+
const row = cleanProcess(raw);
|
|
90
|
+
if (row) byId.set(row.processId, row);
|
|
91
|
+
}
|
|
92
|
+
// EnumWindows e' piu autorevole sul collegamento tra HWND e PID: fonde le
|
|
93
|
+
// due fonti e promuove in cima le applicazioni realmente collegabili.
|
|
94
|
+
for (const win of Array.isArray(windows) ? windows : []) {
|
|
95
|
+
const previous = byId.get(win.processId);
|
|
96
|
+
byId.set(win.processId, {
|
|
97
|
+
processId: win.processId,
|
|
98
|
+
process: win.process || previous && previous.process || 'processo',
|
|
99
|
+
title: win.title || previous && previous.title || '',
|
|
100
|
+
windowId: win.windowId,
|
|
101
|
+
hasWindow: true,
|
|
102
|
+
bounds: win.bounds,
|
|
103
|
+
visible: win.visible,
|
|
104
|
+
minimized: win.minimized,
|
|
105
|
+
responding: previous ? previous.responding : true,
|
|
106
|
+
_executablePath: previous ? previous._executablePath : '',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return [...byId.values()].sort((a, b) => Number(b.hasWindow) - Number(a.hasWindow)
|
|
110
|
+
|| Number(b.visible) - Number(a.visible)
|
|
111
|
+
|| a.process.localeCompare(b.process) || a.processId - b.processId).slice(0, 512);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const applicationsNow = async (processes, windows) => {
|
|
115
|
+
const groups = new Map();
|
|
116
|
+
for (const process of Array.isArray(processes) ? processes : []) {
|
|
117
|
+
const key = String(process.process || '').trim().toLocaleLowerCase();
|
|
118
|
+
if (!key) continue;
|
|
119
|
+
if (!groups.has(key)) groups.set(key, { process: process.process, processes: [], windows: [] });
|
|
120
|
+
groups.get(key).processes.push(process);
|
|
121
|
+
}
|
|
122
|
+
for (const win of Array.isArray(windows) ? windows : []) {
|
|
123
|
+
const key = String(win.process || '').trim().toLocaleLowerCase();
|
|
124
|
+
if (!key) continue;
|
|
125
|
+
if (!groups.has(key)) groups.set(key, { process: win.process, processes: [], windows: [] });
|
|
126
|
+
groups.get(key).windows.push(win);
|
|
127
|
+
}
|
|
128
|
+
const applications = [...groups.entries()].map(([key, group]) => {
|
|
129
|
+
const processIds = [...new Set(group.processes.map((row) => row.processId)
|
|
130
|
+
.concat(group.windows.map((row) => row.processId)).filter(Boolean))];
|
|
131
|
+
const windowIds = [...new Set(group.windows.map((row) => row.windowId).filter(Boolean))];
|
|
132
|
+
const titles = [...new Set(group.windows.map((row) => row.title).filter(Boolean))].slice(0, 8);
|
|
133
|
+
return {
|
|
134
|
+
applicationId: 'app-' + crypto.createHash('sha256').update(key).digest('hex').slice(0, 10),
|
|
135
|
+
name: applicationName(group.process, group.windows),
|
|
136
|
+
process: group.process,
|
|
137
|
+
processIds,
|
|
138
|
+
instanceCount: processIds.length,
|
|
139
|
+
windowIds,
|
|
140
|
+
windowCount: windowIds.length,
|
|
141
|
+
titles,
|
|
142
|
+
controllable: windowIds.length > 0,
|
|
143
|
+
visible: group.windows.some((row) => row.visible),
|
|
144
|
+
minimized: group.windows.some((row) => row.minimized),
|
|
145
|
+
_iconProcess: group.processes.find((row) => row.hasWindow) || group.processes[0] || null,
|
|
146
|
+
};
|
|
147
|
+
}).sort((a, b) => Number(b.controllable) - Number(a.controllable)
|
|
148
|
+
|| Number(b.visible) - Number(a.visible)
|
|
149
|
+
|| a.name.localeCompare(b.name)).slice(0, 240);
|
|
150
|
+
return applications;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// Estrarre l'icona di ogni processo richiede accesso al relativo eseguibile e
|
|
154
|
+
// rendeva computer_processes lento anche quando l'utente cercava una sola app.
|
|
155
|
+
// Risolviamo soltanto le applicazioni effettivamente mostrate/collegate e
|
|
156
|
+
// riutilizziamo il risultato per tutto il run.
|
|
157
|
+
const hydrateApplicationIcons = async (rows) => {
|
|
158
|
+
if (!resolveProcessIcon) return rows;
|
|
159
|
+
await Promise.all((Array.isArray(rows) ? rows : []).map(async (application) => {
|
|
160
|
+
if (!application || application.icon || !application._iconProcess) return;
|
|
161
|
+
const process = application._iconProcess;
|
|
162
|
+
const key = String(process._executablePath || process.process || process.processId || '').toLocaleLowerCase();
|
|
163
|
+
if (key && iconCache.has(key)) {
|
|
164
|
+
application.icon = iconCache.get(key);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
let icon = '';
|
|
168
|
+
try { icon = safeIconDataUrl(await resolveProcessIcon(process)); } catch (_) { icon = ''; }
|
|
169
|
+
application.icon = icon;
|
|
170
|
+
if (key) iconCache.set(key, icon);
|
|
171
|
+
}));
|
|
172
|
+
return rows;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// computer_processes e computer_attach sono normalmente consecutivi. Una
|
|
176
|
+
// seconda enumerazione Win32/PowerShell immediata aggiungeva vari secondi
|
|
177
|
+
// senza aumentare la precisione; riusiamo solo una fotografia molto breve.
|
|
178
|
+
const targetsNow = async (progress) => {
|
|
179
|
+
if (cache && Date.now() - cache.capturedAt < integer(cacheMs, 0, 60000, 2500)) {
|
|
180
|
+
if (typeof progress === 'function') progress({ phase: 'windows', windows: cache.value.windows });
|
|
181
|
+
return cache.value;
|
|
182
|
+
}
|
|
183
|
+
const enumerated = await windowsNow();
|
|
184
|
+
if (typeof progress === 'function') progress({ phase: 'windows', windows: enumerated });
|
|
185
|
+
const processes = await processesNow(enumerated);
|
|
186
|
+
const windows = mergeProcessWindows(enumerated, processes);
|
|
187
|
+
const applications = await applicationsNow(processes, windows);
|
|
188
|
+
const value = { applications, processes: processes.map(publicProcess), windows };
|
|
189
|
+
cache = { capturedAt: Date.now(), value };
|
|
190
|
+
return value;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
windowsNow,
|
|
195
|
+
targetsNow,
|
|
196
|
+
hydrateApplicationIcons,
|
|
197
|
+
invalidate: () => { cache = null; },
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
module.exports = {
|
|
202
|
+
KNOWN_APPLICATIONS,
|
|
203
|
+
applicationName,
|
|
204
|
+
safeIconDataUrl,
|
|
205
|
+
publicProcess,
|
|
206
|
+
publicApplication,
|
|
207
|
+
uiApplication,
|
|
208
|
+
publicTarget,
|
|
209
|
+
mergeProcessWindows,
|
|
210
|
+
createDesktopInventory,
|
|
211
|
+
};
|