talos-code 0.0.1 → 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/LICENSE +661 -0
- package/README.md +111 -3
- package/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/archive/zip.js +73 -0
- package/dist/args.js +97 -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 +185 -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 +43 -0
- package/dist/i18n/en/common.js +9 -0
- package/dist/i18n/en/credentials.js +82 -0
- package/dist/i18n/en/errors.js +246 -0
- package/dist/i18n/en/firstrun.js +89 -0
- package/dist/i18n/en/providers.js +37 -0
- package/dist/i18n/en/screen.js +736 -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 +330 -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/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-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 +262 -0
- package/dist/runtime/talos-composition.js +1006 -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/app.js +3761 -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 +559 -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 +32 -0
- package/dist/tui/components/terminal-shell.js +205 -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/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 +139 -0
- package/dist/tui/line-diff.js +57 -0
- package/dist/tui/live-activity.js +45 -0
- package/dist/tui/metrics.js +123 -0
- package/dist/tui/onboarding.js +36 -0
- package/dist/tui/overlays/agent-tree.js +39 -0
- package/dist/tui/overlays/approval-dialog.js +640 -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 +72 -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 +145 -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 +287 -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 +778 -0
- package/dist/tui/session-export.js +54 -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 +80 -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 +25 -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 +63 -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,159 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PORTO FEDELE di AVM/mobile/src/lib/research/researchIndependence.ts (147 righe, 11/09/2026).
|
|
3
|
+
*
|
|
4
|
+
* ⛔ Meccanico e fedele: stessi nomi esportati, stessa semantica, stessi casi
|
|
5
|
+
* limite. I tipi TypeScript diventano `@typedef` JSDoc; il resto è invariato.
|
|
6
|
+
*
|
|
7
|
+
* ⛔⛔ INDIPENDENZA-03 — tre fonti che ripetono la stessa non fanno tre prove.
|
|
8
|
+
*
|
|
9
|
+
* ## Il difetto che questo modulo chiude
|
|
10
|
+
*
|
|
11
|
+
* Un rapporto che dice «sostenuta da 3 fonti» sta facendo una promessa
|
|
12
|
+
* numerica. Se quelle tre sono tre siti che riprendono lo stesso comunicato, il
|
|
13
|
+
* 3 è **falso**: la prova è una sola, ripetuta tre volte, e chi legge decide con
|
|
14
|
+
* più fiducia di quanta ne meriti il fatto.
|
|
15
|
+
*
|
|
16
|
+
* È il modo più comune in cui una notizia sbagliata si consolida, e un agente
|
|
17
|
+
* che cerca sul web ci cade più facilmente di una persona: i primi risultati di
|
|
18
|
+
* una ricerca sono spesso proprio le riprese.
|
|
19
|
+
*
|
|
20
|
+
* ## ⛔ Si misura con quello che ABBIAMO, non con quello che servirebbe
|
|
21
|
+
*
|
|
22
|
+
* La cosa giusta in assoluto sarebbe risalire alla catena editoriale di ogni
|
|
23
|
+
* pagina. Non ce l'abbiamo, e fingere di averla sarebbe peggio di non contare
|
|
24
|
+
* affatto. Quello che abbiamo, senza chiedere un byte in più alla rete, è il
|
|
25
|
+
* **dominio registrabile** e le origini che una fonte cita quando il
|
|
26
|
+
* raccoglitore le ha viste. Con quei due si fanno tre regole difendibili:
|
|
27
|
+
*
|
|
28
|
+
* 1. due pagine dello stesso dominio non sono due fonti;
|
|
29
|
+
* 2. una fonte che cita **una sola** altra origine è una ripresa di quella;
|
|
30
|
+
* 3. ⛔ una fonte che cita **più** origini diverse resta indipendente — è un
|
|
31
|
+
* lavoro che ha messo insieme più cose, e punirlo sarebbe il verso
|
|
32
|
+
* sbagliato: toglierebbe valore proprio alle fonti migliori.
|
|
33
|
+
*
|
|
34
|
+
* Il numero che si mostra è quello dei GRUPPI, non quello degli URL.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* ⛔ La lista pubblica dei suffissi è un file da megabyte che cambia ogni
|
|
39
|
+
* settimana: non entra in un'app che ha un tetto misurato sul grafo d'avvio.
|
|
40
|
+
*
|
|
41
|
+
* Qui basta molto meno. Serve a non tagliare `bbc.co.uk` in `co.uk`, che
|
|
42
|
+
* trasformerebbe due testate britanniche diverse in una fonte sola — cioè
|
|
43
|
+
* l'errore opposto a quello che stiamo curando, e il più insidioso: fa
|
|
44
|
+
* sembrare DIPENDENTI due prove che sono davvero indipendenti.
|
|
45
|
+
*
|
|
46
|
+
* ⇒ Si tengono i secondi livelli veri, quelli sotto cui chiunque registra.
|
|
47
|
+
* Un dominio fuori da questa lista viene trattato come normale, che è il caso
|
|
48
|
+
* di gran lunga più frequente e sbaglia nella direzione prudente.
|
|
49
|
+
*
|
|
50
|
+
* @type {ReadonlySet<string>}
|
|
51
|
+
*/
|
|
52
|
+
const SUFFISSI_DI_SECONDO_LIVELLO = new Set([
|
|
53
|
+
'co.uk', 'org.uk', 'ac.uk', 'gov.uk', 'me.uk', 'net.uk', 'sch.uk',
|
|
54
|
+
'com.au', 'net.au', 'org.au', 'edu.au', 'gov.au',
|
|
55
|
+
'co.jp', 'or.jp', 'ne.jp', 'ac.jp', 'go.jp',
|
|
56
|
+
'com.br', 'net.br', 'org.br', 'gov.br',
|
|
57
|
+
'co.nz', 'net.nz', 'org.nz', 'govt.nz',
|
|
58
|
+
'co.in', 'net.in', 'org.in', 'gov.in',
|
|
59
|
+
'com.cn', 'net.cn', 'org.cn', 'gov.cn',
|
|
60
|
+
'co.za', 'org.za', 'gov.za',
|
|
61
|
+
'com.mx', 'com.ar', 'com.tr', 'com.sg', 'com.hk', 'com.tw',
|
|
62
|
+
'gov.it', 'edu.it',
|
|
63
|
+
])
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Il dominio sotto cui la fonte è registrata, o `null` se non è un indirizzo.
|
|
67
|
+
*
|
|
68
|
+
* ⛔ `null` è un esito, non un guasto: un URL illeggibile non deve inventare un
|
|
69
|
+
* gruppo, perché un gruppo in più vuol dire una prova in più che non esiste.
|
|
70
|
+
*
|
|
71
|
+
* @param {string} url
|
|
72
|
+
* @returns {string | null}
|
|
73
|
+
*/
|
|
74
|
+
export function talosResearchRegistrableHost(url) {
|
|
75
|
+
/** @type {string} */
|
|
76
|
+
let host
|
|
77
|
+
try {
|
|
78
|
+
host = new URL(url).hostname.toLowerCase()
|
|
79
|
+
} catch {
|
|
80
|
+
return null
|
|
81
|
+
}
|
|
82
|
+
if (!host) return null
|
|
83
|
+
|
|
84
|
+
const parti = host.split('.').filter(Boolean)
|
|
85
|
+
if (parti.length <= 2) return parti.join('.') || null
|
|
86
|
+
|
|
87
|
+
const ultimiDue = parti.slice(-2).join('.')
|
|
88
|
+
// Con un suffisso a due livelli il dominio vero ha TRE etichette.
|
|
89
|
+
const quante = SUFFISSI_DI_SECONDO_LIVELLO.has(ultimiDue) ? 3 : 2
|
|
90
|
+
return parti.slice(-quante).join('.')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @typedef {object} TalosResearchSourceOrigin
|
|
95
|
+
* @property {string} url
|
|
96
|
+
* @property {readonly string[]} [cites] Le origini che questa fonte cita a sua
|
|
97
|
+
* volta, quando il raccoglitore le ha viste. Assente non vuol dire «nessuna»:
|
|
98
|
+
* vuol dire «non guardato», e allora la fonte resta per conto suo.
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @typedef {object} TalosResearchIndependenceGroup
|
|
103
|
+
* @property {string} origin Il dominio che regge il gruppo: l'origine comune, o la fonte stessa.
|
|
104
|
+
* @property {readonly string[]} sources Gli URL che ci ricadono dentro, nell'ordine in cui sono arrivati.
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @typedef {object} TalosResearchIndependence
|
|
109
|
+
* @property {number} total Quante fonti sono state passate, riprese comprese.
|
|
110
|
+
* @property {number} independent Quante prove distinte ci sono davvero.
|
|
111
|
+
* @property {readonly TalosResearchIndependenceGroup[]} groups
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* L'origine di cui una fonte è una RIPRESA, se lo è.
|
|
116
|
+
*
|
|
117
|
+
* Una sola origine citata, e diversa da sé: è una ripresa. Zero, o più di una,
|
|
118
|
+
* oppure solo sé stessa: no.
|
|
119
|
+
*
|
|
120
|
+
* @param {string} proprio
|
|
121
|
+
* @param {readonly string[] | undefined} cites
|
|
122
|
+
* @returns {string | null}
|
|
123
|
+
*/
|
|
124
|
+
function origineDiCuiEUnaRipresa(proprio, cites) {
|
|
125
|
+
if (!cites?.length) return null
|
|
126
|
+
/** @type {Set<string>} */
|
|
127
|
+
const altre = new Set()
|
|
128
|
+
for (const citata of cites) {
|
|
129
|
+
const host = talosResearchRegistrableHost(citata)
|
|
130
|
+
if (host && host !== proprio) altre.add(host)
|
|
131
|
+
}
|
|
132
|
+
return altre.size === 1 ? [...altre][0] : null
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @param {readonly TalosResearchSourceOrigin[]} sources
|
|
137
|
+
* @returns {TalosResearchIndependence}
|
|
138
|
+
*/
|
|
139
|
+
export function talosResearchIndependentSources(sources) {
|
|
140
|
+
/** @type {Map<string, string[]>} */
|
|
141
|
+
const gruppi = new Map()
|
|
142
|
+
|
|
143
|
+
for (const source of sources) {
|
|
144
|
+
const proprio = talosResearchRegistrableHost(source.url)
|
|
145
|
+
// Un indirizzo illeggibile non entra: contarlo vorrebbe dire mostrare
|
|
146
|
+
// una prova in più di quante ne abbiamo.
|
|
147
|
+
if (!proprio) continue
|
|
148
|
+
const origine = origineDiCuiEUnaRipresa(proprio, source.cites) ?? proprio
|
|
149
|
+
const dentro = gruppi.get(origine)
|
|
150
|
+
if (dentro) dentro.push(source.url)
|
|
151
|
+
else gruppi.set(origine, [source.url])
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
total: sources.length,
|
|
156
|
+
independent: gruppi.size,
|
|
157
|
+
groups: [...gruppi].map(([origin, urls]) => ({ origin, sources: urls })),
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { talosResearchDuration } from './outline.mjs'
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* PORTO FEDELE di AVM/mobile/src/lib/research/researchLedger.ts (162 righe, 11/09/2026).
|
|
5
|
+
*
|
|
6
|
+
* ⛔⛔ REGISTRO-01 — «Come è stato costruito», la sezione che mancava.
|
|
7
|
+
*
|
|
8
|
+
* ## Il difetto che chiude
|
|
9
|
+
*
|
|
10
|
+
* Una ricerca approfondita dura minuti e costa crediti. Alla fine la persona
|
|
11
|
+
* legge un rapporto e una percentuale, e deve decidere se fidarsi **senza aver
|
|
12
|
+
* visto niente di quello che è successo in mezzo**.
|
|
13
|
+
*
|
|
14
|
+
* ⛔ E non è trasparenza per bellezza: il numero dei passi e la loro durata
|
|
15
|
+
* sono l'unica cosa che distingue una ricerca che ha davvero **letto** le
|
|
16
|
+
* pagine da una che ha guardato quattro estratti. Due rapporti possono portare
|
|
17
|
+
* lo stesso 100% e dietro avere lavori incomparabili — e oggi si leggono
|
|
18
|
+
* uguali.
|
|
19
|
+
*
|
|
20
|
+
* ## La forma, dalla ricerca del 2026-08-20
|
|
21
|
+
*
|
|
22
|
+
* Il pattern concorde per gli agenti che lavorano a lungo è **sommario →
|
|
23
|
+
* dettaglio → dati grezzi**: si riassume per tappe, si interrompe la persona
|
|
24
|
+
* solo per ciò che decide, e il registro completo resta **a un clic**. Non
|
|
25
|
+
* dieci righe sempre aperte — un sommario che si apre.
|
|
26
|
+
*
|
|
27
|
+
* ⇒ Qui escono le due cose insieme, così la schermata non ricalcola e non
|
|
28
|
+
* decide: mostra.
|
|
29
|
+
*
|
|
30
|
+
* ⛔ Puro e senza I/O: i passi ce li ha già la corsa, e una sezione che
|
|
31
|
+
* chiedesse qualcosa a disco o alla rete sarebbe in ritardo proprio mentre la
|
|
32
|
+
* ricerca lavora.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @import { TalosResearchStep, TalosResearchStepKind, TalosResearchStepState } from './run.mjs'
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @typedef {object} TalosResearchLedgerEntry
|
|
41
|
+
* @property {string} id
|
|
42
|
+
* @property {TalosResearchStepKind} kind
|
|
43
|
+
* @property {TalosResearchStepState} state
|
|
44
|
+
* @property {string | null} duration Leggibile — «3 s», «1 min 07 s» — o `null` se non è finito.
|
|
45
|
+
* @property {number} attempts Quante volte è stato avviato. Due tentativi non sono un tentativo.
|
|
46
|
+
* @property {string | null} error
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @typedef {object} TalosResearchLedgerSummary
|
|
51
|
+
* @property {number} total
|
|
52
|
+
* @property {number} search
|
|
53
|
+
* @property {number} read ⛔ Pagine APERTE davvero, contate dalle fonti — non passi `read`.
|
|
54
|
+
* @property {number} synthesise
|
|
55
|
+
* @property {number} verify ⛔ Affermazioni che un giudice ha guardato, contate dai verdetti.
|
|
56
|
+
* @property {number} failed ⛔ A parte dagli altri: un lavoro incompleto va detto, non sommato.
|
|
57
|
+
* @property {number} interrupted
|
|
58
|
+
* @property {number} workedSeconds ⛔ Il tempo LAVORATO, non quello dall'inizio
|
|
59
|
+
* alla fine. Due passi da 3 s partiti insieme fanno 6 s di lavoro e 3 s di
|
|
60
|
+
* orologio. La persona l'attesa la conosce — l'ha vissuta; quello che non sa è
|
|
61
|
+
* quanto lavoro c'è dentro, ed è il numero che dice se un 100% è stato pagato.
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @typedef {object} TalosResearchLedger
|
|
66
|
+
* @property {TalosResearchLedgerSummary} summary
|
|
67
|
+
* @property {readonly TalosResearchLedgerEntry[]} entries
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* ⛔⛔ LE PROVE, non i tipi di passo — e questa riga è nata da un errore MIO.
|
|
72
|
+
*
|
|
73
|
+
* La prima versione contava `kind === 'read'` e `kind === 'verify'`, e sul
|
|
74
|
+
* Pad il 2026-08-20 ha scritto «3 passi · 2 ricerche · **0 pagine lette · 0
|
|
75
|
+
* verifiche**» sotto un rapporto al 100% verificato da un giudice.
|
|
76
|
+
*
|
|
77
|
+
* MISURATO subito dopo, in `researchRuntime.ts`: il runtime emette **solo**
|
|
78
|
+
* `search` e `synthesise`. `read` e `verify` non vengono creati mai — non
|
|
79
|
+
* perché il lavoro non si faccia, ma perché avviene DENTRO quei due passi.
|
|
80
|
+
* Il collettore apre le pagine (`obtained: 'page'`) e il giudice verifica
|
|
81
|
+
* (`judge`, `judgedAt`): sono lì, con nome e ora.
|
|
82
|
+
*
|
|
83
|
+
* ⇒ Contare i tipi di passo faceva dire al registro una cosa falsa sul
|
|
84
|
+
* lavoro — esattamente nel verso che questa sezione esiste per impedire, e
|
|
85
|
+
* alla sua prima corsa vera. Si contano le **prove**: quante fonti sono
|
|
86
|
+
* state aperte per davvero, quante affermazioni un giudice ha guardato.
|
|
87
|
+
*
|
|
88
|
+
* ⛔ Resta un buco vero, ma è un altro: le durate della lettura e della
|
|
89
|
+
* verifica nessuno le registra, perché non hanno un passo loro. Il registro
|
|
90
|
+
* dice quante, non quanto — e non finge di sapere il resto.
|
|
91
|
+
*
|
|
92
|
+
* @typedef {object} TalosResearchLedgerEvidence
|
|
93
|
+
* @property {readonly { obtained?: 'page' | 'snippet' }[]} [sources] Le fonti raccolte: `obtained` dice se la pagina è stata APERTA.
|
|
94
|
+
* @property {readonly { checks?: { judge?: string | null } }[]} [claims] Le affermazioni: `judge` non nullo vuol dire che qualcuno ha guardato.
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* I secondi fra due istanti, o `null` se manca un capo.
|
|
99
|
+
* @param {string | null} from
|
|
100
|
+
* @param {string | null} to
|
|
101
|
+
* @returns {number | null}
|
|
102
|
+
*/
|
|
103
|
+
function secondi(from, to) {
|
|
104
|
+
if (!from || !to) return null
|
|
105
|
+
const inizio = Date.parse(from)
|
|
106
|
+
const fine = Date.parse(to)
|
|
107
|
+
if (Number.isNaN(inizio) || Number.isNaN(fine)) return null
|
|
108
|
+
// Un tempo negativo è un orologio che è tornato indietro, non una durata.
|
|
109
|
+
return Math.max(0, Math.round((fine - inizio) / 1000))
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @param {readonly TalosResearchStep[]} steps
|
|
114
|
+
* @param {TalosResearchLedgerEvidence} [evidence]
|
|
115
|
+
* @returns {TalosResearchLedger}
|
|
116
|
+
*/
|
|
117
|
+
export function talosResearchLedger(steps, evidence = {}) {
|
|
118
|
+
/*
|
|
119
|
+
* ⛔ In ordine di ACCADIMENTO, non di identificativo.
|
|
120
|
+
*
|
|
121
|
+
* I rami partono in parallelo e gli id li assegna chi crea il piano: letti
|
|
122
|
+
* per id, i passi raccontano una storia che non è successa. Chi non è mai
|
|
123
|
+
* partito va in fondo — non ha un momento a cui appartenere.
|
|
124
|
+
*/
|
|
125
|
+
const ordinati = [...steps].sort((a, b) => {
|
|
126
|
+
const ta = a.startedAt ? Date.parse(a.startedAt) : Number.POSITIVE_INFINITY
|
|
127
|
+
const tb = b.startedAt ? Date.parse(b.startedAt) : Number.POSITIVE_INFINITY
|
|
128
|
+
return ta - tb
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
const entries = ordinati.map((step) => {
|
|
132
|
+
const durata = secondi(step.startedAt, step.finishedAt)
|
|
133
|
+
return {
|
|
134
|
+
id: step.id,
|
|
135
|
+
kind: step.kind,
|
|
136
|
+
state: step.state,
|
|
137
|
+
duration: durata === null ? null : talosResearchDuration(durata),
|
|
138
|
+
attempts: step.attempts,
|
|
139
|
+
error: step.error,
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
/** @param {(step: TalosResearchStep) => boolean} predicato */
|
|
144
|
+
const quanti = (predicato) => steps.filter(predicato).length
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
summary: {
|
|
148
|
+
total: steps.length,
|
|
149
|
+
search: quanti((step) => step.kind === 'search'),
|
|
150
|
+
// ⛔ Dalle PROVE, non dai tipi di passo. Vedi la nota sopra:
|
|
151
|
+
// il runtime non emette mai `read` né `verify`, e contarli
|
|
152
|
+
// faceva dire al registro «0 pagine lette» su un rapporto
|
|
153
|
+
// costruito leggendo le pagine.
|
|
154
|
+
read: (evidence.sources ?? []).filter((s) => s.obtained === 'page').length,
|
|
155
|
+
synthesise: quanti((step) => step.kind === 'synthesise'),
|
|
156
|
+
verify: (evidence.claims ?? []).filter((c) => Boolean(c.checks?.judge)).length,
|
|
157
|
+
failed: quanti((step) => step.state === 'failed'),
|
|
158
|
+
interrupted: quanti((step) => step.state === 'interrupted'),
|
|
159
|
+
workedSeconds: steps.reduce(
|
|
160
|
+
(somma, step) => somma + (secondi(step.startedAt, step.finishedAt) ?? 0),
|
|
161
|
+
0,
|
|
162
|
+
),
|
|
163
|
+
},
|
|
164
|
+
entries,
|
|
165
|
+
}
|
|
166
|
+
}
|