talos-code 0.0.1 → 0.2.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/CHANGELOG.md +87 -0
- package/LICENSE +661 -0
- package/README.md +116 -3
- package/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/archive/zip.js +73 -0
- package/dist/args.js +100 -0
- package/dist/automations/history-store.js +34 -0
- package/dist/automations/policy-store.js +43 -0
- package/dist/automations/runner.js +107 -0
- package/dist/automations/schedule.js +85 -0
- package/dist/automations/windows-task.js +53 -0
- package/dist/commands/advanced-cli.js +233 -0
- package/dist/commands/checkpoint-cli.js +45 -0
- package/dist/commands/config-cli.js +107 -0
- package/dist/commands/context.js +17 -0
- package/dist/commands/extensions-cli.js +207 -0
- package/dist/commands/project-cli.js +74 -0
- package/dist/commands/project-commands.js +143 -0
- package/dist/commands/provider-cli.js +244 -0
- package/dist/commands/services-cli.js +248 -0
- package/dist/commands/session-cli.js +171 -0
- package/dist/commands/system-cli.js +405 -0
- package/dist/config/commands.js +60 -0
- package/dist/config/load.js +382 -0
- package/dist/config/migrations.js +48 -0
- package/dist/config/types.js +11 -0
- package/dist/diagnostics/development-log.js +154 -0
- package/dist/diagnostics/doctor.js +104 -0
- package/dist/diagnostics/redact.js +80 -0
- package/dist/diagnostics/zip.js +52 -0
- package/dist/errors.js +156 -0
- package/dist/events/bridge.js +130 -0
- package/dist/extensions/installer.js +178 -0
- package/dist/extensions/package-schema.js +24 -0
- package/dist/headless/result.js +84 -0
- package/dist/headless/run.js +230 -0
- package/dist/i18n/en/approval.js +46 -0
- package/dist/i18n/en/common.js +9 -0
- package/dist/i18n/en/credentials.js +92 -0
- package/dist/i18n/en/errors.js +267 -0
- package/dist/i18n/en/firstrun.js +101 -0
- package/dist/i18n/en/providers.js +37 -0
- package/dist/i18n/en/screen.js +774 -0
- package/dist/i18n/en/tools.js +127 -0
- package/dist/i18n/en.js +14 -0
- package/dist/i18n/error-view.js +307 -0
- package/dist/i18n/index.js +19 -0
- package/dist/i18n/kernel-map.js +139 -0
- package/dist/io.js +45 -0
- package/dist/main.js +331 -0
- package/dist/paths.js +41 -0
- package/dist/protocol/v2/codec.js +9 -0
- package/dist/protocol/v2/events.js +555 -0
- package/dist/protocol/v2/index.js +4 -0
- package/dist/protocol/v2/replay.js +28 -0
- package/dist/protocol/v2/types.js +1 -0
- package/dist/provider/control-plane.js +135 -0
- package/dist/provider/environment-keys.js +275 -0
- package/dist/provider/health.js +110 -0
- package/dist/provider/missing-key.js +48 -0
- package/dist/provider/model-catalog.js +168 -0
- package/dist/provider/openrouter-login.js +172 -0
- package/dist/provider/provider-text.js +13 -0
- package/dist/provider/store.js +95 -0
- package/dist/provider/system-keyring.js +214 -0
- package/dist/runtime/active-run.js +63 -0
- package/dist/runtime/agent-tree.js +74 -0
- package/dist/runtime/attachments.js +84 -0
- package/dist/runtime/brokered-executor.js +395 -0
- package/dist/runtime/context-archive.js +69 -0
- package/dist/runtime/context-status.js +76 -0
- package/dist/runtime/create-runtime.js +111 -0
- package/dist/runtime/model-profile.js +361 -0
- package/dist/runtime/output-store.js +137 -0
- package/dist/runtime/provider-attempts.js +185 -0
- package/dist/runtime/replay-buffer.js +153 -0
- package/dist/runtime/repo.js +95 -0
- package/dist/runtime/session-facade.js +135 -0
- package/dist/runtime/session-summary.js +125 -0
- package/dist/runtime/supervisor.js +265 -0
- package/dist/runtime/talos-composition.js +1011 -0
- package/dist/runtime/types.js +5 -0
- package/dist/runtime/usage-snapshot.js +82 -0
- package/dist/security/auto-classifier.js +38 -0
- package/dist/security/credential-free-environment.js +54 -0
- package/dist/security/evaluate.js +243 -0
- package/dist/security/execution-backends.js +236 -0
- package/dist/security/execution-broker.js +102 -0
- package/dist/security/forge-scan.js +74 -0
- package/dist/security/from-approval.js +39 -0
- package/dist/security/mxc-execution-backend.js +281 -0
- package/dist/security/permission-engine.js +138 -0
- package/dist/security/permission-explanation.js +54 -0
- package/dist/security/persist.js +179 -0
- package/dist/security/plugin-guard.js +230 -0
- package/dist/security/process-tree-evidence-store.js +74 -0
- package/dist/security/process-tree-probe.js +554 -0
- package/dist/security/project-resource-inventory.js +186 -0
- package/dist/security/project-trust-gate.js +38 -0
- package/dist/security/project-trust.js +367 -0
- package/dist/security/rule-parser.js +201 -0
- package/dist/security/shell-segmentation.js +68 -0
- package/dist/security/trust-authority.js +324 -0
- package/dist/security/types.js +1 -0
- package/dist/security/workspace-identity.js +102 -0
- package/dist/services/automation-facade.js +59 -0
- package/dist/services/forge-facade.js +77 -0
- package/dist/services/hook-facade.js +240 -0
- package/dist/services/index.js +16 -0
- package/dist/services/library-facade.js +174 -0
- package/dist/services/mcp-facade.js +348 -0
- package/dist/services/memory-facade.js +126 -0
- package/dist/services/notes-facade.js +157 -0
- package/dist/services/plugin-facade.js +308 -0
- package/dist/services/research-facade.js +110 -0
- package/dist/services/task-board-facade.js +236 -0
- package/dist/services/workflow-catalog.js +246 -0
- package/dist/sessions/export-format.js +98 -0
- package/dist/sessions/metadata-store.js +160 -0
- package/dist/sessions/share.js +122 -0
- package/dist/sessions/transfer.js +16 -0
- package/dist/subcommands.js +62 -0
- package/dist/tui/agent-roster.js +36 -0
- package/dist/tui/agent-view.js +51 -0
- package/dist/tui/app.js +4098 -0
- package/dist/tui/approval.js +36 -0
- package/dist/tui/boot/boot-sequence.js +76 -0
- package/dist/tui/boot/cinematic.js +243 -0
- package/dist/tui/boot/desktop-logo.js +82 -0
- package/dist/tui/boot.js +3 -0
- package/dist/tui/busy-input.js +58 -0
- package/dist/tui/catalog-service.js +560 -0
- package/dist/tui/components/assistant-stream.js +1 -0
- package/dist/tui/components/command-menu.js +68 -0
- package/dist/tui/components/composer.js +219 -0
- package/dist/tui/components/diff.js +35 -0
- package/dist/tui/components/footer.js +48 -0
- package/dist/tui/components/header.js +6 -0
- package/dist/tui/components/markdown.js +305 -0
- package/dist/tui/components/status-indicator.js +38 -0
- package/dist/tui/components/terminal-shell.js +214 -0
- package/dist/tui/components/thinking-row.js +19 -0
- package/dist/tui/components/tool-row.js +97 -0
- package/dist/tui/components/transcript-virtualizer.js +165 -0
- package/dist/tui/components/transcript.js +43 -0
- package/dist/tui/descendant-approvals.js +104 -0
- package/dist/tui/diff-model.js +77 -0
- package/dist/tui/editor-history.js +21 -0
- package/dist/tui/editor.js +210 -0
- package/dist/tui/event-adapter.js +436 -0
- package/dist/tui/exit-output.js +58 -0
- package/dist/tui/external-editor.js +53 -0
- package/dist/tui/file-completion.js +89 -0
- package/dist/tui/focus-manager.js +5 -0
- package/dist/tui/highlight.js +30 -0
- package/dist/tui/input-router.js +18 -0
- package/dist/tui/interrupt.js +99 -0
- package/dist/tui/keybindings.js +194 -0
- package/dist/tui/keymap-resolver.js +91 -0
- package/dist/tui/launch-state.js +148 -0
- package/dist/tui/line-diff.js +57 -0
- package/dist/tui/live-activity.js +56 -0
- package/dist/tui/metrics.js +123 -0
- package/dist/tui/onboarding.js +36 -0
- package/dist/tui/overlays/agent-tree.js +43 -0
- package/dist/tui/overlays/approval-dialog.js +642 -0
- package/dist/tui/overlays/automation-center.js +51 -0
- package/dist/tui/overlays/checkpoint-picker.js +47 -0
- package/dist/tui/overlays/context-inspector.js +36 -0
- package/dist/tui/overlays/effort-line.js +110 -0
- package/dist/tui/overlays/forge-center.js +46 -0
- package/dist/tui/overlays/help-dialog.js +16 -0
- package/dist/tui/overlays/history-picker.js +37 -0
- package/dist/tui/overlays/hook-center.js +70 -0
- package/dist/tui/overlays/library-center.js +55 -0
- package/dist/tui/overlays/mcp-center.js +60 -0
- package/dist/tui/overlays/memory-center.js +63 -0
- package/dist/tui/overlays/model-picker.js +77 -0
- package/dist/tui/overlays/notes-center.js +53 -0
- package/dist/tui/overlays/overlay-host.js +8 -0
- package/dist/tui/overlays/plugin-center.js +76 -0
- package/dist/tui/overlays/provider-picker.js +171 -0
- package/dist/tui/overlays/queue-editor.js +32 -0
- package/dist/tui/overlays/research-center.js +59 -0
- package/dist/tui/overlays/scroll-window.js +234 -0
- package/dist/tui/overlays/session-picker.js +115 -0
- package/dist/tui/overlays/tasks-center.js +83 -0
- package/dist/tui/overlays/theme-picker.js +21 -0
- package/dist/tui/overlays/transcript-search.js +58 -0
- package/dist/tui/overlays/trust-center.js +29 -0
- package/dist/tui/overlays/workflow-center.js +46 -0
- package/dist/tui/project-file-index.js +214 -0
- package/dist/tui/project-references.js +85 -0
- package/dist/tui/project-trust-prompt.js +289 -0
- package/dist/tui/prompt-history-store.js +116 -0
- package/dist/tui/queue-store.js +110 -0
- package/dist/tui/regions/budget.js +59 -0
- package/dist/tui/regions/views.js +96 -0
- package/dist/tui/render-coordinator.js +148 -0
- package/dist/tui/render-scheduler.js +4 -0
- package/dist/tui/run.js +69 -0
- package/dist/tui/selection-list.js +29 -0
- package/dist/tui/session-controller.js +791 -0
- package/dist/tui/session-export.js +54 -0
- package/dist/tui/setup-wizard.js +46 -0
- package/dist/tui/shell-input.js +35 -0
- package/dist/tui/shell-layout.js +48 -0
- package/dist/tui/shell-model.js +98 -0
- package/dist/tui/slash-commands.js +82 -0
- package/dist/tui/state.js +151 -0
- package/dist/tui/status-bar.js +125 -0
- package/dist/tui/status-view.js +40 -0
- package/dist/tui/terminal-capabilities.js +9 -0
- package/dist/tui/terminal-session.js +11 -0
- package/dist/tui/text-width.js +66 -0
- package/dist/tui/theme-catalog.js +27 -0
- package/dist/tui/theme-store.js +23 -0
- package/dist/tui/theme.js +23 -0
- package/dist/tui/tool-display.js +135 -0
- package/dist/tui/tool-facts.js +1 -0
- package/dist/tui/tools/bash-renderer.js +32 -0
- package/dist/tui/tools/change.js +61 -0
- package/dist/tui/tools/edit-renderer.js +17 -0
- package/dist/tui/tools/generic-renderer.js +13 -0
- package/dist/tui/tools/list-renderer.js +14 -0
- package/dist/tui/tools/read-renderer.js +13 -0
- package/dist/tui/tools/registry.js +20 -0
- package/dist/tui/tools/row-format.js +187 -0
- package/dist/tui/tools/search-renderer.js +38 -0
- package/dist/tui/tools/shared.js +97 -0
- package/dist/tui/tools/write-renderer.js +15 -0
- package/dist/tui/transcript-model.js +441 -0
- package/dist/tui/ui-preferences.js +79 -0
- package/dist/tui/usage-view.js +77 -0
- package/dist/tui/vim-mode.js +99 -0
- package/dist/update/check.js +15 -0
- package/dist/update/npm.js +51 -0
- package/dist/update/run.js +129 -0
- package/dist/version.js +2 -0
- package/dist/workspace/checkpoint-store.js +210 -0
- package/dist/workspace/checkpoint.js +413 -0
- package/dist/workspace/restore.js +232 -0
- package/package.json +64 -5
- package/vendor/context-engine/package.json +11 -0
- package/vendor/context-engine/src/compaction-planner.mjs +57 -0
- package/vendor/context-engine/src/contracts.mjs +48 -0
- package/vendor/context-engine/src/engine.mjs +445 -0
- package/vendor/context-engine/src/node/context-export.mjs +164 -0
- package/vendor/context-engine/src/node/legacy-import.mjs +92 -0
- package/vendor/context-engine/src/node/migrations/001-context.sql +126 -0
- package/vendor/context-engine/src/node/sqlite-store.mjs +85 -0
- package/vendor/context-engine/src/node/sqlite-worker.mjs +559 -0
- package/vendor/context-engine/src/profiles.mjs +10 -0
- package/vendor/context-engine/src/retrieval.mjs +104 -0
- package/vendor/context-engine/src/summary.mjs +97 -0
- package/vendor/context-engine/src/usage.mjs +34 -0
- package/vendor/harness-ui/package.json +38 -0
- package/vendor/harness-ui/src/acp-agent.mjs +350 -0
- package/vendor/harness-ui/src/agent-service.mjs +2188 -0
- package/vendor/harness-ui/src/agui-events.mjs +452 -0
- package/vendor/harness-ui/src/ambiente-solo-server.mjs +121 -0
- package/vendor/harness-ui/src/artifact-store.mjs +39 -0
- package/vendor/harness-ui/src/assistenza.mjs +123 -0
- package/vendor/harness-ui/src/automation-scheduler.mjs +69 -0
- package/vendor/harness-ui/src/automation-store.mjs +145 -0
- package/vendor/harness-ui/src/browser-annota.mjs +639 -0
- package/vendor/harness-ui/src/browser-frame.mjs +211 -0
- package/vendor/harness-ui/src/browser-proxy-universale.mjs +519 -0
- package/vendor/harness-ui/src/browser-proxy.mjs +87 -0
- package/vendor/harness-ui/src/browser-sessione-viva.mjs +329 -0
- package/vendor/harness-ui/src/browser-stream.mjs +445 -0
- package/vendor/harness-ui/src/browser-vivo.mjs +694 -0
- package/vendor/harness-ui/src/chat-image-attachments.mjs +72 -0
- package/vendor/harness-ui/src/config.mjs +697 -0
- package/vendor/harness-ui/src/contesto-del-progetto.mjs +385 -0
- package/vendor/harness-ui/src/context-asset-adapter.mjs +72 -0
- package/vendor/harness-ui/src/context-desktop-service.mjs +253 -0
- package/vendor/harness-ui/src/context-embedding-runtime.mjs +252 -0
- package/vendor/harness-ui/src/context-inference-scheduler.mjs +81 -0
- package/vendor/harness-ui/src/context-native-compaction.mjs +75 -0
- package/vendor/harness-ui/src/context-provider-adapter.mjs +141 -0
- package/vendor/harness-ui/src/context-runtime.mjs +118 -0
- package/vendor/harness-ui/src/context-token-counters.mjs +184 -0
- package/vendor/harness-ui/src/context-tool-catalog.mjs +86 -0
- package/vendor/harness-ui/src/context-tool-output.mjs +72 -0
- package/vendor/harness-ui/src/costo-elenco.mjs +252 -0
- package/vendor/harness-ui/src/custom-task.mjs +171 -0
- package/vendor/harness-ui/src/doctor.mjs +142 -0
- package/vendor/harness-ui/src/document-filename.mjs +97 -0
- package/vendor/harness-ui/src/document-generator.mjs +493 -0
- package/vendor/harness-ui/src/document-report.mjs +331 -0
- package/vendor/harness-ui/src/duckduckgo-search.mjs +155 -0
- package/vendor/harness-ui/src/elenco-profondo.mjs +337 -0
- package/vendor/harness-ui/src/favicon-proxy.mjs +113 -0
- package/vendor/harness-ui/src/forge-contract.mjs +221 -0
- package/vendor/harness-ui/src/frequent-dirs.mjs +134 -0
- package/vendor/harness-ui/src/generated-image-store.mjs +147 -0
- package/vendor/harness-ui/src/generation-idle.mjs +332 -0
- package/vendor/harness-ui/src/gguf-header.mjs +207 -0
- package/vendor/harness-ui/src/git-service.mjs +626 -0
- package/vendor/harness-ui/src/gitignore-elenco.mjs +604 -0
- package/vendor/harness-ui/src/harness-receipt-keypair.mjs +207 -0
- package/vendor/harness-ui/src/hf-direct-transfer.mjs +170 -0
- package/vendor/harness-ui/src/hf-hub-client.mjs +106 -0
- package/vendor/harness-ui/src/hf-image-proxy.mjs +105 -0
- package/vendor/harness-ui/src/hf-model-transfer.mjs +245 -0
- package/vendor/harness-ui/src/hook-registry.mjs +186 -0
- package/vendor/harness-ui/src/http-app.mjs +6259 -0
- package/vendor/harness-ui/src/http-lifecycle.mjs +132 -0
- package/vendor/harness-ui/src/id-archivio.mjs +27 -0
- package/vendor/harness-ui/src/image-generator.mjs +143 -0
- package/vendor/harness-ui/src/istruzioni-di-progetto.mjs +234 -0
- package/vendor/harness-ui/src/kernel/dist/kernelPerIlBanco.js +518 -0
- package/vendor/harness-ui/src/kernel/talosHarness.mjs +10437 -0
- package/vendor/harness-ui/src/library-policy-store.mjs +175 -0
- package/vendor/harness-ui/src/library-store.mjs +652 -0
- package/vendor/harness-ui/src/llama-server-supervisor.mjs +629 -0
- package/vendor/harness-ui/src/local-model-store.mjs +339 -0
- package/vendor/harness-ui/src/local-runtime-contract.mjs +66 -0
- package/vendor/harness-ui/src/local-runtime-events.mjs +44 -0
- package/vendor/harness-ui/src/local-runtime-llama-server.mjs +244 -0
- package/vendor/harness-ui/src/local-runtime-probe.mjs +401 -0
- package/vendor/harness-ui/src/machine-capacity.mjs +66 -0
- package/vendor/harness-ui/src/mappa-cartelle.mjs +491 -0
- package/vendor/harness-ui/src/mcp-client.mjs +98 -0
- package/vendor/harness-ui/src/mcp-registry.mjs +157 -0
- package/vendor/harness-ui/src/mcp-session.mjs +177 -0
- package/vendor/harness-ui/src/memory-store.mjs +227 -0
- package/vendor/harness-ui/src/model-catalog-models-dev.mjs +276 -0
- package/vendor/harness-ui/src/model-catalog.mjs +129 -0
- package/vendor/harness-ui/src/model-destination.mjs +189 -0
- package/vendor/harness-ui/src/modifica-ancorata.mjs +177 -0
- package/vendor/harness-ui/src/native-provider-adapter.mjs +205 -0
- package/vendor/harness-ui/src/notes-store.mjs +250 -0
- package/vendor/harness-ui/src/openai-compatible-runtime.mjs +428 -0
- package/vendor/harness-ui/src/openrouter-oauth.mjs +339 -0
- package/vendor/harness-ui/src/path-policy.mjs +442 -0
- package/vendor/harness-ui/src/plugin-registry.mjs +780 -0
- package/vendor/harness-ui/src/plugin-session.mjs +180 -0
- package/vendor/harness-ui/src/process-policy.mjs +345 -0
- package/vendor/harness-ui/src/prompt-enhancer-provider.mjs +94 -0
- package/vendor/harness-ui/src/provider-auth-cloud.mjs +95 -0
- package/vendor/harness-ui/src/provider-credential-store.mjs +541 -0
- package/vendor/harness-ui/src/provider-probe.mjs +582 -0
- package/vendor/harness-ui/src/provider-registry.mjs +1633 -0
- package/vendor/harness-ui/src/pty-terminal.mjs +312 -0
- package/vendor/harness-ui/src/public-problem.mjs +109 -0
- package/vendor/harness-ui/src/research/card.mjs +235 -0
- package/vendor/harness-ui/src/research/citations.mjs +142 -0
- package/vendor/harness-ui/src/research/collector.mjs +275 -0
- package/vendor/harness-ui/src/research/deposito-a-pezzi.mjs +139 -0
- package/vendor/harness-ui/src/research/dossier.mjs +114 -0
- package/vendor/harness-ui/src/research/esportazioni.mjs +560 -0
- package/vendor/harness-ui/src/research/fetch-cache.mjs +465 -0
- package/vendor/harness-ui/src/research/fidelity.mjs +122 -0
- package/vendor/harness-ui/src/research/independence.mjs +159 -0
- package/vendor/harness-ui/src/research/ledger.mjs +166 -0
- package/vendor/harness-ui/src/research/markdown-server.mjs +565 -0
- package/vendor/harness-ui/src/research/narration.mjs +181 -0
- package/vendor/harness-ui/src/research/open-cards.mjs +131 -0
- package/vendor/harness-ui/src/research/opposing.mjs +305 -0
- package/vendor/harness-ui/src/research/outline.mjs +111 -0
- package/vendor/harness-ui/src/research/page-budget.mjs +209 -0
- package/vendor/harness-ui/src/research/pdf.mjs +291 -0
- package/vendor/harness-ui/src/research/plan.mjs +301 -0
- package/vendor/harness-ui/src/research/raccolta-viva.mjs +452 -0
- package/vendor/harness-ui/src/research/recheck-document.mjs +69 -0
- package/vendor/harness-ui/src/research/recheck-history.mjs +192 -0
- package/vendor/harness-ui/src/research/recheck.mjs +194 -0
- package/vendor/harness-ui/src/research/report.mjs +203 -0
- package/vendor/harness-ui/src/research/run.mjs +527 -0
- package/vendor/harness-ui/src/research/synthesis.mjs +318 -0
- package/vendor/harness-ui/src/research/verification.mjs +572 -0
- package/vendor/harness-ui/src/research-orchestrator.mjs +2679 -0
- package/vendor/harness-ui/src/research-store.mjs +1133 -0
- package/vendor/harness-ui/src/runtime-build-manifest.mjs +26 -0
- package/vendor/harness-ui/src/runtime-contract.mjs +59 -0
- package/vendor/harness-ui/src/runtime-owner-adapter.mjs +1348 -0
- package/vendor/harness-ui/src/runtime-owner-contract.mjs +32 -0
- package/vendor/harness-ui/src/scheda-di-lavoro.mjs +249 -0
- package/vendor/harness-ui/src/search-source-store.mjs +172 -0
- package/vendor/harness-ui/src/session-registry.mjs +6095 -0
- package/vendor/harness-ui/src/session-store.mjs +220 -0
- package/vendor/harness-ui/src/sessione-pronta.mjs +73 -0
- package/vendor/harness-ui/src/setup-stato.mjs +31 -0
- package/vendor/harness-ui/src/sezioni-istruzioni.mjs +204 -0
- package/vendor/harness-ui/src/skill-registry.mjs +120 -0
- package/vendor/harness-ui/src/sse-replay-coalescente.mjs +0 -0
- package/vendor/harness-ui/src/static-files.mjs +96 -0
- package/vendor/harness-ui/src/stream-partition.mjs +123 -0
- package/vendor/harness-ui/src/subagent-orchestrator.mjs +453 -0
- package/vendor/harness-ui/src/task-catalog.mjs +65 -0
- package/vendor/harness-ui/src/tasks-store.mjs +220 -0
- package/vendor/harness-ui/src/terminal-registry.mjs +312 -0
- package/vendor/harness-ui/src/terminal-ws.mjs +170 -0
- package/vendor/harness-ui/src/tool-forge-store.mjs +299 -0
- package/vendor/harness-ui/src/tool-schema-normalize.mjs +100 -0
- package/vendor/harness-ui/src/usage-cache.mjs +315 -0
- package/vendor/harness-ui/src/workspace-browser.mjs +213 -0
- package/vendor/harness-ui/src/workspace-context.mjs +124 -0
- package/vendor/harness-ui/src/workspace-disk.mjs +62 -0
- package/vendor/harness-ui/src/workspace-files.mjs +589 -0
- package/vendor/harness-ui/src/workspace-info.mjs +189 -0
- package/vendor/harness-ui/src/workspace-launch-store.mjs +150 -0
- package/vendor/harness-ui/src/workspace-tree.mjs +67 -0
- package/vendor/harness-ui/src/workspace-watcher.mjs +161 -0
- package/vendor/manifest.json +170 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PORTO FEDELE di AVM/mobile/src/lib/research/researchPlan.ts (271 righe, 11/09/2026).
|
|
3
|
+
*
|
|
4
|
+
* Il piano, il suo costo, e il rifiuto di inventare un numero.
|
|
5
|
+
*
|
|
6
|
+
* R-2. Gemini mostra un piano e lo lascia modificare, e il campo si ferma lì:
|
|
7
|
+
* nessuno dice quanto costerà il giro PRIMA che parta. Con BYOK l'utente paga
|
|
8
|
+
* di tasca sua, quindi dirlo non è un fronzolo — è dovuto.
|
|
9
|
+
*
|
|
10
|
+
* La parte scomoda è che non ci è permesso conoscere il prezzo. I prezzi
|
|
11
|
+
* cambiano, e un listino cotto dentro un pacchetto è una bugia con una data di
|
|
12
|
+
* rilascio sopra — la regola contro le liste statiche esiste esattamente per
|
|
13
|
+
* questo. OpenRouter pubblica le tariffe per token nella sua lista modelli, che
|
|
14
|
+
* è una fonte viva che possiamo leggere; gli altri fornitori non pubblicano
|
|
15
|
+
* niente di leggibile a macchina.
|
|
16
|
+
*
|
|
17
|
+
* Quindi il costo ha due metà e si trattano diversamente. Il LAVORO — ricerche,
|
|
18
|
+
* pagine, minuti, token — è aritmetica sul piano e si mostra sempre. Il DENARO
|
|
19
|
+
* si mostra solo dove un prezzo pubblicato è stato davvero ottenuto, e dove non
|
|
20
|
+
* lo è stato la risposta è «non conoscibile da qui» invece di una cifra
|
|
21
|
+
* plausibile. Un prezzo inventato è peggio di nessun prezzo: verrebbe creduto.
|
|
22
|
+
*
|
|
23
|
+
* ⛔ Porto meccanico: stesse semantiche, stessi casi limite, stessi nomi
|
|
24
|
+
* esportati. I tipi sono in JSDoc (`@typedef`), non in TypeScript — vedi
|
|
25
|
+
* https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html.
|
|
26
|
+
* `TalosResearchBranch` e `TalosResearchDepth` vivono in `./run.mjs` e qui
|
|
27
|
+
* entrano SOLO come tipi: nessun import a runtime, quindi nessun ciclo.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @typedef {import('./run.mjs').TalosResearchBranch} TalosResearchBranch
|
|
32
|
+
* @typedef {import('./run.mjs').TalosResearchDepth} TalosResearchDepth
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {object} TalosResearchDepthProfile
|
|
37
|
+
* @property {TalosResearchDepth} depth
|
|
38
|
+
* @property {number} branches Quante linee d'indagine apre il piano di default.
|
|
39
|
+
* @property {number} sources Fonti che l'intero giro si aspetta di leggere. Distribuite sui rami.
|
|
40
|
+
* @property {number} minutes Tempo d'orologio grossolano, per chi decide se partire adesso.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* I tre livelli, coi numeri delle misure sui concorrenti: OpenAI legge 50-200
|
|
45
|
+
* fonti in 10-30 minuti, Gemini 30-150 in 5-15, Claude 20-100 in 5-20,
|
|
46
|
+
* Perplexity finisce in 2-4. Questi stanno di proposito in fondo a quella
|
|
47
|
+
* forbice — qui si gira su una batteria di telefono, non in un datacentre.
|
|
48
|
+
*
|
|
49
|
+
* Default, non gabbie: il piano resta modificabile, che è il punto di R-2.
|
|
50
|
+
*
|
|
51
|
+
* @type {Readonly<Record<TalosResearchDepth, TalosResearchDepthProfile>>}
|
|
52
|
+
*/
|
|
53
|
+
export const TALOS_RESEARCH_DEPTHS = Object.freeze({
|
|
54
|
+
quick: Object.freeze({ depth: 'quick', branches: 2, sources: 10, minutes: 3 }),
|
|
55
|
+
deep: Object.freeze({ depth: 'deep', branches: 4, sources: 30, minutes: 10 }),
|
|
56
|
+
exhaustive: Object.freeze({ depth: 'exhaustive', branches: 6, sources: 80, minutes: 25 }),
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Quanto testo costa assorbire una fonte.
|
|
61
|
+
*
|
|
62
|
+
* Una pagina ridotta alla sua parte leggibile sono qualche migliaio di parole;
|
|
63
|
+
* a circa quattro caratteri per token si arriva vicino a questa cifra. È una
|
|
64
|
+
* stima, ed è etichettata come tale ovunque esca — il numero vero si conosce
|
|
65
|
+
* solo dopo che la pagina è stata scaricata.
|
|
66
|
+
*/
|
|
67
|
+
const TOKENS_PER_SOURCE = 1_500;
|
|
68
|
+
|
|
69
|
+
/** Quanto spende il modello forte a tirare insieme un ramo, alla fine. */
|
|
70
|
+
const TOKENS_PER_BRANCH_SYNTHESIS = 2_000;
|
|
71
|
+
|
|
72
|
+
/** Le facce lungo cui si apre una domanda, nell'ordine in cui vale aprirle. */
|
|
73
|
+
const FACETS = [
|
|
74
|
+
'fatti e numeri',
|
|
75
|
+
'fonti contrarie',
|
|
76
|
+
'chi lo dice e con quale interesse',
|
|
77
|
+
'quanto è recente',
|
|
78
|
+
'casi reali',
|
|
79
|
+
'cosa resta incerto',
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Quante fonti per ramo regge un autore che gira SUL TELEFONO.
|
|
84
|
+
*
|
|
85
|
+
* Il rapporto si scrive leggendo tutte le fonti raccolte in un colpo solo,
|
|
86
|
+
* quindi la profondità non decide solo quanto si cerca: decide la lunghezza
|
|
87
|
+
* del prompt finale. Misurato sul OnePlus Pad 3 il 2026-08-04 — dieci pagine
|
|
88
|
+
* facevano 11009 token, e un 3B con quel prompt macinava mezz'ora senza
|
|
89
|
+
* consegnare. Non è un limite del contesto (quello è 16384): è il tempo.
|
|
90
|
+
*
|
|
91
|
+
* Il tetto è sul TOTALE, non sul singolo ramo, e la differenza non è un
|
|
92
|
+
* dettaglio: la sintesi legge tutti i rami insieme. Col tetto per ramo,
|
|
93
|
+
* «Esaustiva» restava a 39.000 token — sei rami da tre fonti — cioè oltre il
|
|
94
|
+
* doppio del contesto, esattamente il difetto che si voleva chiudere.
|
|
95
|
+
*
|
|
96
|
+
* Sei fonti in tutto tengono la sintesi in un prompt che un modello sul
|
|
97
|
+
* dispositivo scrive in minuti, non in decine di minuti, a QUALSIASI
|
|
98
|
+
* profondità. Il numero è basso di proposito: un rapporto che arriva vale
|
|
99
|
+
* più di uno più ricco che non arriva.
|
|
100
|
+
*/
|
|
101
|
+
const TALOS_LOCAL_SOURCES_TOTAL = 6;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Un primo piano per una domanda. Ci si aspetta che l'utente lo cambi.
|
|
105
|
+
*
|
|
106
|
+
* Le domande dei rami sono la domanda stessa vista da un altro lato, perché un
|
|
107
|
+
* piano i cui rami sono parafrasi l'uno dell'altro spende quattro volte per
|
|
108
|
+
* imparare una cosa sola. Le facce sono ordinate per quanto spesso cambiano una
|
|
109
|
+
* risposta, così un giro rapido a due rami prende le due che contano di più.
|
|
110
|
+
*
|
|
111
|
+
* @param {string} question
|
|
112
|
+
* @param {TalosResearchDepth} depth
|
|
113
|
+
* @param {boolean} [localAuthor=false] L'autore gira sul dispositivo: il piano si adatta a lui.
|
|
114
|
+
* @returns {readonly TalosResearchBranch[]}
|
|
115
|
+
*/
|
|
116
|
+
export function talosResearchPlanFor(question, depth, localAuthor = false) {
|
|
117
|
+
const profile = TALOS_RESEARCH_DEPTHS[depth];
|
|
118
|
+
const chiesto = Math.max(1, Math.round(profile.sources / profile.branches));
|
|
119
|
+
// Si ABBASSA soltanto: se la profondità chiede già meno di così, quella
|
|
120
|
+
// vince — nessuno ha chiesto di gonfiare una ricerca rapida.
|
|
121
|
+
/*
|
|
122
|
+
* Il totale si DISTRIBUISCE, non si divide e basta.
|
|
123
|
+
*
|
|
124
|
+
* Dividere e arrotondare per difetto perdeva fonti a ogni ramo: sei fonti
|
|
125
|
+
* su quattro rami facevano uno per ramo, cioè quattro — e sulle linguette
|
|
126
|
+
* «Approfondita» mostrava 4 dove «Rapida» mostrava 6. Più profonda che
|
|
127
|
+
* rende meno non è una scelta discutibile: sembra rotta, e lo era.
|
|
128
|
+
*
|
|
129
|
+
* Il resto va ai primi rami, quindi il totale è esatto a qualsiasi
|
|
130
|
+
* profondità e le linguette dicono tutte lo stesso numero.
|
|
131
|
+
*/
|
|
132
|
+
const perBranch = localAuthor
|
|
133
|
+
? Math.max(1, Math.min(chiesto, Math.floor(TALOS_LOCAL_SOURCES_TOTAL / profile.branches)))
|
|
134
|
+
: chiesto;
|
|
135
|
+
const avanzo = localAuthor && perBranch * profile.branches < TALOS_LOCAL_SOURCES_TOTAL
|
|
136
|
+
? Math.min(TALOS_LOCAL_SOURCES_TOTAL - perBranch * profile.branches, profile.branches)
|
|
137
|
+
: 0;
|
|
138
|
+
return Array.from({ length: profile.branches }, (_, index) => ({
|
|
139
|
+
id: `b${index + 1}`,
|
|
140
|
+
question: `${question.trim()} — ${FACETS[index % FACETS.length]}`,
|
|
141
|
+
estimate: {
|
|
142
|
+
searches: 1,
|
|
143
|
+
pages: perBranch + (index < avanzo ? 1 : 0),
|
|
144
|
+
tokens: (perBranch + (index < avanzo ? 1 : 0)) * TOKENS_PER_SOURCE + TOKENS_PER_BRANCH_SYNTHESIS,
|
|
145
|
+
},
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @typedef {object} TalosResearchPlanTotals
|
|
151
|
+
* @property {number} branches
|
|
152
|
+
* @property {number} searches
|
|
153
|
+
* @property {number} pages
|
|
154
|
+
* @property {number} tokens
|
|
155
|
+
* @property {number} minutes
|
|
156
|
+
*/
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Quanto tempo ci vuole in tutto, una volta noti i rami.
|
|
160
|
+
*
|
|
161
|
+
* Una pagina costa circa questo tempo d'orologio per essere scaricata e ridotta
|
|
162
|
+
* su un telefono: la rete è la maggior parte, e l'analisi non è gratis.
|
|
163
|
+
* Moltiplicato per le pagine, è quello su cui l'utente sta davvero decidendo
|
|
164
|
+
* quando sceglie una profondità.
|
|
165
|
+
*/
|
|
166
|
+
const SECONDS_PER_PAGE = 6;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @param {readonly TalosResearchBranch[]} plan
|
|
170
|
+
* @returns {TalosResearchPlanTotals}
|
|
171
|
+
*/
|
|
172
|
+
export function talosResearchPlanTotals(plan) {
|
|
173
|
+
const totals = plan.reduce(
|
|
174
|
+
(sum, branch) => ({
|
|
175
|
+
searches: sum.searches + branch.estimate.searches,
|
|
176
|
+
pages: sum.pages + branch.estimate.pages,
|
|
177
|
+
tokens: sum.tokens + branch.estimate.tokens,
|
|
178
|
+
}),
|
|
179
|
+
{ searches: 0, pages: 0, tokens: 0 },
|
|
180
|
+
);
|
|
181
|
+
return {
|
|
182
|
+
branches: plan.length,
|
|
183
|
+
...totals,
|
|
184
|
+
// Arrotondato PER ECCESSO, e mai a zero per un piano che ha lavoro dentro:
|
|
185
|
+
// un giro annunciato come «0 minuti» che ne prende quaranta di secondi ha
|
|
186
|
+
// mentito sull'unica cosa che l'utente aveva chiesto.
|
|
187
|
+
minutes: plan.length === 0 ? 0 : Math.max(1, Math.ceil((totals.pages * SECONDS_PER_PAGE) / 60)),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Un prezzo che il FORNITORE ha pubblicato, per milione di token. Mai
|
|
193
|
+
* assemblato qui dentro.
|
|
194
|
+
*
|
|
195
|
+
* Diviso perché le due tariffe differiscono di un ordine di grandezza sulla
|
|
196
|
+
* maggior parte dei modelli, e un giro di ricerca è sbilanciato: legge molto
|
|
197
|
+
* più di quanto scriva, quindi usare una tariffa sola per entrambe
|
|
198
|
+
* sbaglierebbe il totale nella direzione in cui il modello è tariffato.
|
|
199
|
+
*
|
|
200
|
+
* @typedef {object} TalosResearchPrice
|
|
201
|
+
* @property {string} currency
|
|
202
|
+
* @property {number} promptPerMillion
|
|
203
|
+
* @property {number} completionPerMillion
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* `{known:false}` NON è un errore, e non è uno zero.
|
|
208
|
+
*
|
|
209
|
+
* @typedef {{known:true, currency:string, amount:number} | {known:false}} TalosResearchCost
|
|
210
|
+
*/
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Quanto costerà il giro, quando lo si può dire del tutto.
|
|
214
|
+
*
|
|
215
|
+
* La quota scritta rispetto a quella letta non è un'ipotesi tirata fuori dal
|
|
216
|
+
* nulla: un giro di ricerca legge pagine e scrive un riassunto, quindi l'uscita
|
|
217
|
+
* è una piccola frazione dell'ingresso. Sbagliarla sposta la stima di qualche
|
|
218
|
+
* punto percentuale; fingere di conoscere un prezzo che non ci è mai stato
|
|
219
|
+
* detto la sposterebbe da stima a finzione.
|
|
220
|
+
*/
|
|
221
|
+
const COMPLETION_SHARE = 0.15;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @param {TalosResearchPlanTotals} totals
|
|
225
|
+
* @param {TalosResearchPrice | null} price
|
|
226
|
+
* @returns {TalosResearchCost}
|
|
227
|
+
*/
|
|
228
|
+
export function talosResearchPlanCost(totals, price) {
|
|
229
|
+
if (!price) return { known: false };
|
|
230
|
+
const completion = totals.tokens * COMPLETION_SHARE;
|
|
231
|
+
const prompt = totals.tokens - completion;
|
|
232
|
+
const amount = (prompt * price.promptPerMillion + completion * price.completionPerMillion) / 1_000_000;
|
|
233
|
+
return { known: true, currency: price.currency, amount };
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Togliere una linea d'indagine. Gli id degli altri non si muovono.
|
|
238
|
+
*
|
|
239
|
+
* @param {readonly TalosResearchBranch[]} plan
|
|
240
|
+
* @param {string} branchId
|
|
241
|
+
* @returns {readonly TalosResearchBranch[]}
|
|
242
|
+
*/
|
|
243
|
+
export function talosResearchPlanWithout(plan, branchId) {
|
|
244
|
+
return plan.filter((branch) => branch.id !== branchId);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Aggiungerne uno, con una stima presa in prestito dal piano a cui si unisce.
|
|
249
|
+
*
|
|
250
|
+
* Un ramo nuovo costa quanto costano gli altri — è ciò che vuol dire «un altro
|
|
251
|
+
* di questi» — e un piano i cui rami portassero stime selvaggiamente diverse
|
|
252
|
+
* per lo stesso tipo di lavoro renderebbe il totale illeggibile. L'id NON è di
|
|
253
|
+
* proposito un contatore sulla lunghezza corrente: togliere b2 e poi
|
|
254
|
+
* aggiungerne uno produrrebbe un secondo b2, e un id doppio è un passo che
|
|
255
|
+
* sovrascrive il posto di un altro nel giornale.
|
|
256
|
+
*
|
|
257
|
+
* @param {readonly TalosResearchBranch[]} plan
|
|
258
|
+
* @param {string} question
|
|
259
|
+
* @param {TalosResearchDepth} depth
|
|
260
|
+
* @returns {readonly TalosResearchBranch[]}
|
|
261
|
+
*/
|
|
262
|
+
export function talosResearchPlanWith(plan, question, depth) {
|
|
263
|
+
const highest = plan.reduce((top, branch) => {
|
|
264
|
+
const parsed = Number.parseInt(branch.id.replace(/^b/, ''), 10);
|
|
265
|
+
return Number.isFinite(parsed) && parsed > top ? parsed : top;
|
|
266
|
+
}, 0);
|
|
267
|
+
const template = plan[0]?.estimate ?? talosResearchPlanFor(question, depth)[0].estimate;
|
|
268
|
+
return [...plan, { id: `b${highest + 1}`, question: question.trim(), estimate: template }];
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Riformularne uno. La stima non cambia: il lavoro ha la stessa forma.
|
|
273
|
+
*
|
|
274
|
+
* @param {readonly TalosResearchBranch[]} plan
|
|
275
|
+
* @param {string} branchId
|
|
276
|
+
* @param {string} question
|
|
277
|
+
* @returns {readonly TalosResearchBranch[]}
|
|
278
|
+
*/
|
|
279
|
+
export function talosResearchPlanReworded(plan, branchId, question) {
|
|
280
|
+
return plan.map((branch) => (
|
|
281
|
+
branch.id === branchId ? { ...branch, question: question.trim() } : branch
|
|
282
|
+
));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Quanto DEVE LEGGERE IN UNA VOLTA chi scrive il rapporto.
|
|
287
|
+
*
|
|
288
|
+
* Non è il totale della ricerca — quello comprende le ricerche e le sintesi
|
|
289
|
+
* per ramo, che sono chiamate separate. Il prompt finale porta il testo di
|
|
290
|
+
* tutte le fonti raccolte, e basta.
|
|
291
|
+
*
|
|
292
|
+
* La differenza conta perché è quella che un avviso mostra all'utente: dire
|
|
293
|
+
* 21.000 quando il modello ne legge 9.000 è una cifra plausibile invece che
|
|
294
|
+
* vera, ed è esattamente ciò che la disciplina sul costo vieta.
|
|
295
|
+
*
|
|
296
|
+
* @param {readonly TalosResearchBranch[]} plan
|
|
297
|
+
* @returns {number}
|
|
298
|
+
*/
|
|
299
|
+
export function talosResearchSynthesisLoad(plan) {
|
|
300
|
+
return plan.reduce((sum, branch) => sum + branch.estimate.pages, 0) * TOKENS_PER_SOURCE;
|
|
301
|
+
}
|