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.
Files changed (401) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +111 -3
  3. package/THIRD_PARTY_NOTICES.md +40 -0
  4. package/dist/archive/zip.js +73 -0
  5. package/dist/args.js +97 -0
  6. package/dist/automations/history-store.js +34 -0
  7. package/dist/automations/policy-store.js +43 -0
  8. package/dist/automations/runner.js +107 -0
  9. package/dist/automations/schedule.js +85 -0
  10. package/dist/automations/windows-task.js +53 -0
  11. package/dist/commands/advanced-cli.js +233 -0
  12. package/dist/commands/checkpoint-cli.js +45 -0
  13. package/dist/commands/config-cli.js +107 -0
  14. package/dist/commands/context.js +17 -0
  15. package/dist/commands/extensions-cli.js +207 -0
  16. package/dist/commands/project-cli.js +74 -0
  17. package/dist/commands/project-commands.js +143 -0
  18. package/dist/commands/provider-cli.js +185 -0
  19. package/dist/commands/services-cli.js +248 -0
  20. package/dist/commands/session-cli.js +171 -0
  21. package/dist/commands/system-cli.js +405 -0
  22. package/dist/config/commands.js +60 -0
  23. package/dist/config/load.js +382 -0
  24. package/dist/config/migrations.js +48 -0
  25. package/dist/config/types.js +11 -0
  26. package/dist/diagnostics/development-log.js +154 -0
  27. package/dist/diagnostics/doctor.js +104 -0
  28. package/dist/diagnostics/redact.js +80 -0
  29. package/dist/diagnostics/zip.js +52 -0
  30. package/dist/errors.js +156 -0
  31. package/dist/events/bridge.js +130 -0
  32. package/dist/extensions/installer.js +178 -0
  33. package/dist/extensions/package-schema.js +24 -0
  34. package/dist/headless/result.js +84 -0
  35. package/dist/headless/run.js +230 -0
  36. package/dist/i18n/en/approval.js +43 -0
  37. package/dist/i18n/en/common.js +9 -0
  38. package/dist/i18n/en/credentials.js +82 -0
  39. package/dist/i18n/en/errors.js +246 -0
  40. package/dist/i18n/en/firstrun.js +89 -0
  41. package/dist/i18n/en/providers.js +37 -0
  42. package/dist/i18n/en/screen.js +736 -0
  43. package/dist/i18n/en/tools.js +127 -0
  44. package/dist/i18n/en.js +14 -0
  45. package/dist/i18n/error-view.js +307 -0
  46. package/dist/i18n/index.js +19 -0
  47. package/dist/i18n/kernel-map.js +139 -0
  48. package/dist/io.js +45 -0
  49. package/dist/main.js +330 -0
  50. package/dist/paths.js +41 -0
  51. package/dist/protocol/v2/codec.js +9 -0
  52. package/dist/protocol/v2/events.js +555 -0
  53. package/dist/protocol/v2/index.js +4 -0
  54. package/dist/protocol/v2/replay.js +28 -0
  55. package/dist/protocol/v2/types.js +1 -0
  56. package/dist/provider/control-plane.js +135 -0
  57. package/dist/provider/environment-keys.js +275 -0
  58. package/dist/provider/health.js +110 -0
  59. package/dist/provider/missing-key.js +48 -0
  60. package/dist/provider/model-catalog.js +168 -0
  61. package/dist/provider/provider-text.js +13 -0
  62. package/dist/provider/store.js +95 -0
  63. package/dist/provider/system-keyring.js +214 -0
  64. package/dist/runtime/active-run.js +63 -0
  65. package/dist/runtime/agent-tree.js +74 -0
  66. package/dist/runtime/attachments.js +84 -0
  67. package/dist/runtime/brokered-executor.js +395 -0
  68. package/dist/runtime/context-status.js +76 -0
  69. package/dist/runtime/create-runtime.js +111 -0
  70. package/dist/runtime/model-profile.js +361 -0
  71. package/dist/runtime/output-store.js +137 -0
  72. package/dist/runtime/provider-attempts.js +185 -0
  73. package/dist/runtime/replay-buffer.js +153 -0
  74. package/dist/runtime/repo.js +95 -0
  75. package/dist/runtime/session-facade.js +135 -0
  76. package/dist/runtime/session-summary.js +125 -0
  77. package/dist/runtime/supervisor.js +262 -0
  78. package/dist/runtime/talos-composition.js +1006 -0
  79. package/dist/runtime/types.js +5 -0
  80. package/dist/runtime/usage-snapshot.js +82 -0
  81. package/dist/security/auto-classifier.js +38 -0
  82. package/dist/security/credential-free-environment.js +54 -0
  83. package/dist/security/evaluate.js +243 -0
  84. package/dist/security/execution-backends.js +236 -0
  85. package/dist/security/execution-broker.js +102 -0
  86. package/dist/security/forge-scan.js +74 -0
  87. package/dist/security/from-approval.js +39 -0
  88. package/dist/security/mxc-execution-backend.js +281 -0
  89. package/dist/security/permission-engine.js +138 -0
  90. package/dist/security/permission-explanation.js +54 -0
  91. package/dist/security/persist.js +179 -0
  92. package/dist/security/plugin-guard.js +230 -0
  93. package/dist/security/process-tree-evidence-store.js +74 -0
  94. package/dist/security/process-tree-probe.js +554 -0
  95. package/dist/security/project-resource-inventory.js +186 -0
  96. package/dist/security/project-trust-gate.js +38 -0
  97. package/dist/security/project-trust.js +367 -0
  98. package/dist/security/rule-parser.js +201 -0
  99. package/dist/security/shell-segmentation.js +68 -0
  100. package/dist/security/trust-authority.js +324 -0
  101. package/dist/security/types.js +1 -0
  102. package/dist/security/workspace-identity.js +102 -0
  103. package/dist/services/automation-facade.js +59 -0
  104. package/dist/services/forge-facade.js +77 -0
  105. package/dist/services/hook-facade.js +240 -0
  106. package/dist/services/index.js +16 -0
  107. package/dist/services/library-facade.js +174 -0
  108. package/dist/services/mcp-facade.js +348 -0
  109. package/dist/services/memory-facade.js +126 -0
  110. package/dist/services/notes-facade.js +157 -0
  111. package/dist/services/plugin-facade.js +308 -0
  112. package/dist/services/research-facade.js +110 -0
  113. package/dist/services/task-board-facade.js +236 -0
  114. package/dist/services/workflow-catalog.js +246 -0
  115. package/dist/sessions/export-format.js +98 -0
  116. package/dist/sessions/metadata-store.js +160 -0
  117. package/dist/sessions/share.js +122 -0
  118. package/dist/sessions/transfer.js +16 -0
  119. package/dist/subcommands.js +62 -0
  120. package/dist/tui/agent-roster.js +36 -0
  121. package/dist/tui/app.js +3761 -0
  122. package/dist/tui/approval.js +36 -0
  123. package/dist/tui/boot/boot-sequence.js +76 -0
  124. package/dist/tui/boot/cinematic.js +243 -0
  125. package/dist/tui/boot/desktop-logo.js +82 -0
  126. package/dist/tui/boot.js +3 -0
  127. package/dist/tui/busy-input.js +58 -0
  128. package/dist/tui/catalog-service.js +559 -0
  129. package/dist/tui/components/assistant-stream.js +1 -0
  130. package/dist/tui/components/command-menu.js +68 -0
  131. package/dist/tui/components/composer.js +219 -0
  132. package/dist/tui/components/diff.js +35 -0
  133. package/dist/tui/components/footer.js +48 -0
  134. package/dist/tui/components/header.js +6 -0
  135. package/dist/tui/components/markdown.js +305 -0
  136. package/dist/tui/components/status-indicator.js +32 -0
  137. package/dist/tui/components/terminal-shell.js +205 -0
  138. package/dist/tui/components/thinking-row.js +19 -0
  139. package/dist/tui/components/tool-row.js +97 -0
  140. package/dist/tui/components/transcript-virtualizer.js +165 -0
  141. package/dist/tui/components/transcript.js +43 -0
  142. package/dist/tui/diff-model.js +77 -0
  143. package/dist/tui/editor-history.js +21 -0
  144. package/dist/tui/editor.js +210 -0
  145. package/dist/tui/event-adapter.js +436 -0
  146. package/dist/tui/exit-output.js +58 -0
  147. package/dist/tui/external-editor.js +53 -0
  148. package/dist/tui/file-completion.js +89 -0
  149. package/dist/tui/focus-manager.js +5 -0
  150. package/dist/tui/highlight.js +30 -0
  151. package/dist/tui/input-router.js +18 -0
  152. package/dist/tui/interrupt.js +99 -0
  153. package/dist/tui/keybindings.js +194 -0
  154. package/dist/tui/keymap-resolver.js +91 -0
  155. package/dist/tui/launch-state.js +139 -0
  156. package/dist/tui/line-diff.js +57 -0
  157. package/dist/tui/live-activity.js +45 -0
  158. package/dist/tui/metrics.js +123 -0
  159. package/dist/tui/onboarding.js +36 -0
  160. package/dist/tui/overlays/agent-tree.js +39 -0
  161. package/dist/tui/overlays/approval-dialog.js +640 -0
  162. package/dist/tui/overlays/automation-center.js +51 -0
  163. package/dist/tui/overlays/checkpoint-picker.js +47 -0
  164. package/dist/tui/overlays/context-inspector.js +36 -0
  165. package/dist/tui/overlays/effort-line.js +110 -0
  166. package/dist/tui/overlays/forge-center.js +46 -0
  167. package/dist/tui/overlays/help-dialog.js +16 -0
  168. package/dist/tui/overlays/history-picker.js +37 -0
  169. package/dist/tui/overlays/hook-center.js +70 -0
  170. package/dist/tui/overlays/library-center.js +55 -0
  171. package/dist/tui/overlays/mcp-center.js +60 -0
  172. package/dist/tui/overlays/memory-center.js +63 -0
  173. package/dist/tui/overlays/model-picker.js +72 -0
  174. package/dist/tui/overlays/notes-center.js +53 -0
  175. package/dist/tui/overlays/overlay-host.js +8 -0
  176. package/dist/tui/overlays/plugin-center.js +76 -0
  177. package/dist/tui/overlays/provider-picker.js +145 -0
  178. package/dist/tui/overlays/queue-editor.js +32 -0
  179. package/dist/tui/overlays/research-center.js +59 -0
  180. package/dist/tui/overlays/scroll-window.js +234 -0
  181. package/dist/tui/overlays/session-picker.js +115 -0
  182. package/dist/tui/overlays/tasks-center.js +83 -0
  183. package/dist/tui/overlays/theme-picker.js +21 -0
  184. package/dist/tui/overlays/transcript-search.js +58 -0
  185. package/dist/tui/overlays/trust-center.js +29 -0
  186. package/dist/tui/overlays/workflow-center.js +46 -0
  187. package/dist/tui/project-file-index.js +214 -0
  188. package/dist/tui/project-references.js +85 -0
  189. package/dist/tui/project-trust-prompt.js +287 -0
  190. package/dist/tui/prompt-history-store.js +116 -0
  191. package/dist/tui/queue-store.js +110 -0
  192. package/dist/tui/regions/budget.js +59 -0
  193. package/dist/tui/regions/views.js +96 -0
  194. package/dist/tui/render-coordinator.js +148 -0
  195. package/dist/tui/render-scheduler.js +4 -0
  196. package/dist/tui/run.js +69 -0
  197. package/dist/tui/selection-list.js +29 -0
  198. package/dist/tui/session-controller.js +778 -0
  199. package/dist/tui/session-export.js +54 -0
  200. package/dist/tui/shell-input.js +35 -0
  201. package/dist/tui/shell-layout.js +48 -0
  202. package/dist/tui/shell-model.js +98 -0
  203. package/dist/tui/slash-commands.js +80 -0
  204. package/dist/tui/state.js +151 -0
  205. package/dist/tui/status-bar.js +125 -0
  206. package/dist/tui/status-view.js +40 -0
  207. package/dist/tui/terminal-capabilities.js +9 -0
  208. package/dist/tui/terminal-session.js +11 -0
  209. package/dist/tui/text-width.js +66 -0
  210. package/dist/tui/theme-catalog.js +25 -0
  211. package/dist/tui/theme-store.js +23 -0
  212. package/dist/tui/theme.js +23 -0
  213. package/dist/tui/tool-display.js +135 -0
  214. package/dist/tui/tool-facts.js +1 -0
  215. package/dist/tui/tools/bash-renderer.js +32 -0
  216. package/dist/tui/tools/change.js +61 -0
  217. package/dist/tui/tools/edit-renderer.js +17 -0
  218. package/dist/tui/tools/generic-renderer.js +13 -0
  219. package/dist/tui/tools/list-renderer.js +14 -0
  220. package/dist/tui/tools/read-renderer.js +13 -0
  221. package/dist/tui/tools/registry.js +20 -0
  222. package/dist/tui/tools/row-format.js +187 -0
  223. package/dist/tui/tools/search-renderer.js +38 -0
  224. package/dist/tui/tools/shared.js +97 -0
  225. package/dist/tui/tools/write-renderer.js +15 -0
  226. package/dist/tui/transcript-model.js +441 -0
  227. package/dist/tui/ui-preferences.js +79 -0
  228. package/dist/tui/usage-view.js +77 -0
  229. package/dist/tui/vim-mode.js +99 -0
  230. package/dist/update/check.js +15 -0
  231. package/dist/update/npm.js +51 -0
  232. package/dist/update/run.js +129 -0
  233. package/dist/version.js +2 -0
  234. package/dist/workspace/checkpoint-store.js +210 -0
  235. package/dist/workspace/checkpoint.js +413 -0
  236. package/dist/workspace/restore.js +232 -0
  237. package/package.json +63 -5
  238. package/vendor/context-engine/package.json +11 -0
  239. package/vendor/context-engine/src/compaction-planner.mjs +57 -0
  240. package/vendor/context-engine/src/contracts.mjs +48 -0
  241. package/vendor/context-engine/src/engine.mjs +445 -0
  242. package/vendor/context-engine/src/node/context-export.mjs +164 -0
  243. package/vendor/context-engine/src/node/legacy-import.mjs +92 -0
  244. package/vendor/context-engine/src/node/migrations/001-context.sql +126 -0
  245. package/vendor/context-engine/src/node/sqlite-store.mjs +85 -0
  246. package/vendor/context-engine/src/node/sqlite-worker.mjs +559 -0
  247. package/vendor/context-engine/src/profiles.mjs +10 -0
  248. package/vendor/context-engine/src/retrieval.mjs +104 -0
  249. package/vendor/context-engine/src/summary.mjs +97 -0
  250. package/vendor/context-engine/src/usage.mjs +34 -0
  251. package/vendor/harness-ui/package.json +38 -0
  252. package/vendor/harness-ui/src/acp-agent.mjs +350 -0
  253. package/vendor/harness-ui/src/agent-service.mjs +2188 -0
  254. package/vendor/harness-ui/src/agui-events.mjs +452 -0
  255. package/vendor/harness-ui/src/ambiente-solo-server.mjs +121 -0
  256. package/vendor/harness-ui/src/artifact-store.mjs +39 -0
  257. package/vendor/harness-ui/src/assistenza.mjs +123 -0
  258. package/vendor/harness-ui/src/automation-scheduler.mjs +69 -0
  259. package/vendor/harness-ui/src/automation-store.mjs +145 -0
  260. package/vendor/harness-ui/src/browser-annota.mjs +639 -0
  261. package/vendor/harness-ui/src/browser-frame.mjs +211 -0
  262. package/vendor/harness-ui/src/browser-proxy-universale.mjs +519 -0
  263. package/vendor/harness-ui/src/browser-proxy.mjs +87 -0
  264. package/vendor/harness-ui/src/browser-sessione-viva.mjs +329 -0
  265. package/vendor/harness-ui/src/browser-stream.mjs +445 -0
  266. package/vendor/harness-ui/src/browser-vivo.mjs +694 -0
  267. package/vendor/harness-ui/src/chat-image-attachments.mjs +72 -0
  268. package/vendor/harness-ui/src/config.mjs +697 -0
  269. package/vendor/harness-ui/src/contesto-del-progetto.mjs +385 -0
  270. package/vendor/harness-ui/src/context-asset-adapter.mjs +72 -0
  271. package/vendor/harness-ui/src/context-desktop-service.mjs +253 -0
  272. package/vendor/harness-ui/src/context-embedding-runtime.mjs +252 -0
  273. package/vendor/harness-ui/src/context-inference-scheduler.mjs +81 -0
  274. package/vendor/harness-ui/src/context-native-compaction.mjs +75 -0
  275. package/vendor/harness-ui/src/context-provider-adapter.mjs +141 -0
  276. package/vendor/harness-ui/src/context-runtime.mjs +118 -0
  277. package/vendor/harness-ui/src/context-token-counters.mjs +184 -0
  278. package/vendor/harness-ui/src/context-tool-catalog.mjs +86 -0
  279. package/vendor/harness-ui/src/context-tool-output.mjs +72 -0
  280. package/vendor/harness-ui/src/costo-elenco.mjs +252 -0
  281. package/vendor/harness-ui/src/custom-task.mjs +171 -0
  282. package/vendor/harness-ui/src/doctor.mjs +142 -0
  283. package/vendor/harness-ui/src/document-filename.mjs +97 -0
  284. package/vendor/harness-ui/src/document-generator.mjs +493 -0
  285. package/vendor/harness-ui/src/document-report.mjs +331 -0
  286. package/vendor/harness-ui/src/duckduckgo-search.mjs +155 -0
  287. package/vendor/harness-ui/src/elenco-profondo.mjs +337 -0
  288. package/vendor/harness-ui/src/favicon-proxy.mjs +113 -0
  289. package/vendor/harness-ui/src/forge-contract.mjs +221 -0
  290. package/vendor/harness-ui/src/frequent-dirs.mjs +134 -0
  291. package/vendor/harness-ui/src/generated-image-store.mjs +147 -0
  292. package/vendor/harness-ui/src/generation-idle.mjs +332 -0
  293. package/vendor/harness-ui/src/gguf-header.mjs +207 -0
  294. package/vendor/harness-ui/src/git-service.mjs +626 -0
  295. package/vendor/harness-ui/src/gitignore-elenco.mjs +604 -0
  296. package/vendor/harness-ui/src/harness-receipt-keypair.mjs +207 -0
  297. package/vendor/harness-ui/src/hf-direct-transfer.mjs +170 -0
  298. package/vendor/harness-ui/src/hf-hub-client.mjs +106 -0
  299. package/vendor/harness-ui/src/hf-image-proxy.mjs +105 -0
  300. package/vendor/harness-ui/src/hf-model-transfer.mjs +245 -0
  301. package/vendor/harness-ui/src/hook-registry.mjs +186 -0
  302. package/vendor/harness-ui/src/http-app.mjs +6259 -0
  303. package/vendor/harness-ui/src/http-lifecycle.mjs +132 -0
  304. package/vendor/harness-ui/src/id-archivio.mjs +27 -0
  305. package/vendor/harness-ui/src/image-generator.mjs +143 -0
  306. package/vendor/harness-ui/src/istruzioni-di-progetto.mjs +234 -0
  307. package/vendor/harness-ui/src/kernel/dist/kernelPerIlBanco.js +518 -0
  308. package/vendor/harness-ui/src/kernel/talosHarness.mjs +10437 -0
  309. package/vendor/harness-ui/src/library-policy-store.mjs +175 -0
  310. package/vendor/harness-ui/src/library-store.mjs +652 -0
  311. package/vendor/harness-ui/src/llama-server-supervisor.mjs +629 -0
  312. package/vendor/harness-ui/src/local-model-store.mjs +339 -0
  313. package/vendor/harness-ui/src/local-runtime-contract.mjs +66 -0
  314. package/vendor/harness-ui/src/local-runtime-events.mjs +44 -0
  315. package/vendor/harness-ui/src/local-runtime-llama-server.mjs +244 -0
  316. package/vendor/harness-ui/src/local-runtime-probe.mjs +401 -0
  317. package/vendor/harness-ui/src/machine-capacity.mjs +66 -0
  318. package/vendor/harness-ui/src/mappa-cartelle.mjs +491 -0
  319. package/vendor/harness-ui/src/mcp-client.mjs +98 -0
  320. package/vendor/harness-ui/src/mcp-registry.mjs +157 -0
  321. package/vendor/harness-ui/src/mcp-session.mjs +177 -0
  322. package/vendor/harness-ui/src/memory-store.mjs +227 -0
  323. package/vendor/harness-ui/src/model-catalog-models-dev.mjs +276 -0
  324. package/vendor/harness-ui/src/model-catalog.mjs +129 -0
  325. package/vendor/harness-ui/src/model-destination.mjs +189 -0
  326. package/vendor/harness-ui/src/modifica-ancorata.mjs +177 -0
  327. package/vendor/harness-ui/src/native-provider-adapter.mjs +205 -0
  328. package/vendor/harness-ui/src/notes-store.mjs +250 -0
  329. package/vendor/harness-ui/src/openai-compatible-runtime.mjs +428 -0
  330. package/vendor/harness-ui/src/openrouter-oauth.mjs +339 -0
  331. package/vendor/harness-ui/src/path-policy.mjs +442 -0
  332. package/vendor/harness-ui/src/plugin-registry.mjs +780 -0
  333. package/vendor/harness-ui/src/plugin-session.mjs +180 -0
  334. package/vendor/harness-ui/src/process-policy.mjs +345 -0
  335. package/vendor/harness-ui/src/prompt-enhancer-provider.mjs +94 -0
  336. package/vendor/harness-ui/src/provider-auth-cloud.mjs +95 -0
  337. package/vendor/harness-ui/src/provider-credential-store.mjs +541 -0
  338. package/vendor/harness-ui/src/provider-probe.mjs +582 -0
  339. package/vendor/harness-ui/src/provider-registry.mjs +1633 -0
  340. package/vendor/harness-ui/src/pty-terminal.mjs +312 -0
  341. package/vendor/harness-ui/src/public-problem.mjs +109 -0
  342. package/vendor/harness-ui/src/research/card.mjs +235 -0
  343. package/vendor/harness-ui/src/research/citations.mjs +142 -0
  344. package/vendor/harness-ui/src/research/collector.mjs +275 -0
  345. package/vendor/harness-ui/src/research/deposito-a-pezzi.mjs +139 -0
  346. package/vendor/harness-ui/src/research/dossier.mjs +114 -0
  347. package/vendor/harness-ui/src/research/esportazioni.mjs +560 -0
  348. package/vendor/harness-ui/src/research/fetch-cache.mjs +465 -0
  349. package/vendor/harness-ui/src/research/fidelity.mjs +122 -0
  350. package/vendor/harness-ui/src/research/independence.mjs +159 -0
  351. package/vendor/harness-ui/src/research/ledger.mjs +166 -0
  352. package/vendor/harness-ui/src/research/markdown-server.mjs +565 -0
  353. package/vendor/harness-ui/src/research/narration.mjs +181 -0
  354. package/vendor/harness-ui/src/research/open-cards.mjs +131 -0
  355. package/vendor/harness-ui/src/research/opposing.mjs +305 -0
  356. package/vendor/harness-ui/src/research/outline.mjs +111 -0
  357. package/vendor/harness-ui/src/research/page-budget.mjs +209 -0
  358. package/vendor/harness-ui/src/research/pdf.mjs +291 -0
  359. package/vendor/harness-ui/src/research/plan.mjs +301 -0
  360. package/vendor/harness-ui/src/research/raccolta-viva.mjs +452 -0
  361. package/vendor/harness-ui/src/research/recheck-document.mjs +69 -0
  362. package/vendor/harness-ui/src/research/recheck-history.mjs +192 -0
  363. package/vendor/harness-ui/src/research/recheck.mjs +194 -0
  364. package/vendor/harness-ui/src/research/report.mjs +203 -0
  365. package/vendor/harness-ui/src/research/run.mjs +527 -0
  366. package/vendor/harness-ui/src/research/synthesis.mjs +318 -0
  367. package/vendor/harness-ui/src/research/verification.mjs +572 -0
  368. package/vendor/harness-ui/src/research-orchestrator.mjs +2679 -0
  369. package/vendor/harness-ui/src/research-store.mjs +1133 -0
  370. package/vendor/harness-ui/src/runtime-build-manifest.mjs +26 -0
  371. package/vendor/harness-ui/src/runtime-contract.mjs +59 -0
  372. package/vendor/harness-ui/src/runtime-owner-adapter.mjs +1348 -0
  373. package/vendor/harness-ui/src/runtime-owner-contract.mjs +32 -0
  374. package/vendor/harness-ui/src/scheda-di-lavoro.mjs +249 -0
  375. package/vendor/harness-ui/src/search-source-store.mjs +172 -0
  376. package/vendor/harness-ui/src/session-registry.mjs +6095 -0
  377. package/vendor/harness-ui/src/session-store.mjs +220 -0
  378. package/vendor/harness-ui/src/sessione-pronta.mjs +73 -0
  379. package/vendor/harness-ui/src/setup-stato.mjs +31 -0
  380. package/vendor/harness-ui/src/sezioni-istruzioni.mjs +204 -0
  381. package/vendor/harness-ui/src/skill-registry.mjs +120 -0
  382. package/vendor/harness-ui/src/sse-replay-coalescente.mjs +0 -0
  383. package/vendor/harness-ui/src/static-files.mjs +96 -0
  384. package/vendor/harness-ui/src/stream-partition.mjs +123 -0
  385. package/vendor/harness-ui/src/subagent-orchestrator.mjs +453 -0
  386. package/vendor/harness-ui/src/task-catalog.mjs +65 -0
  387. package/vendor/harness-ui/src/tasks-store.mjs +220 -0
  388. package/vendor/harness-ui/src/terminal-registry.mjs +312 -0
  389. package/vendor/harness-ui/src/terminal-ws.mjs +170 -0
  390. package/vendor/harness-ui/src/tool-forge-store.mjs +299 -0
  391. package/vendor/harness-ui/src/tool-schema-normalize.mjs +100 -0
  392. package/vendor/harness-ui/src/usage-cache.mjs +315 -0
  393. package/vendor/harness-ui/src/workspace-browser.mjs +213 -0
  394. package/vendor/harness-ui/src/workspace-context.mjs +124 -0
  395. package/vendor/harness-ui/src/workspace-disk.mjs +62 -0
  396. package/vendor/harness-ui/src/workspace-files.mjs +589 -0
  397. package/vendor/harness-ui/src/workspace-info.mjs +189 -0
  398. package/vendor/harness-ui/src/workspace-launch-store.mjs +150 -0
  399. package/vendor/harness-ui/src/workspace-tree.mjs +67 -0
  400. package/vendor/harness-ui/src/workspace-watcher.mjs +161 -0
  401. package/vendor/manifest.json +170 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * browser-frame.mjs — K-I (06/09). Dice se una pagina PUÒ essere mostrata dentro
3
+ * TALOS in una cornice (`<iframe>`), prima di provarci: il browser non espone al
4
+ * codice della pagina il motivo per cui una cornice resta vuota, quindi la
5
+ * risposta la dà il server leggendo le intestazioni della pagina.
6
+ *
7
+ * Fonti (lette il 06/09/2026): MDN «X-Frame-Options» — `DENY` e `SAMEORIGIN`
8
+ * vietano la cornice da un'altra origine, `ALLOW-FROM` è deprecato e i browser
9
+ * lo ignorano; MDN «CSP frame-ancestors» — se presente PREVALE su X-Frame-Options,
10
+ * e una lista che non contiene la nostra origine (né `*`) vieta la cornice.
11
+ * Una webview Electron eviterebbe il problema; qui il guscio è un
12
+ * browser, e la regola dei siti si rispetta, non si aggira.
13
+ *
14
+ * ⛔ Solo `http:`/`https:`, mai credenziali nell'URL, un tempo massimo, e il corpo
15
+ * della risposta si butta: servono le intestazioni, non la pagina.
16
+ */
17
+
18
+ export const MILLISECONDI_MASSIMI = 6_000;
19
+
20
+ /*
21
+ * ⛔⛔⛔ 16/09/2026, P0 corsia B punto 4 — IL MOTIVO DEL GUASTO SI CLASSIFICA, non si schiaccia.
22
+ *
23
+ * Prima di oggi qui c'erano DUE frasi per tutti i guasti del mondo: «Nessuna risposta entro 6
24
+ * secondi» per l'abort e «La pagina non risponde» per qualunque altra cosa. Il danno non era la
25
+ * genericità: era che `components/browser.js` sceglie il RIMEDIO leggendo questo motivo
26
+ * (`rimedioPerIlMotivo`, quattro espressioni regolari) e nessuna delle due frasi ne incrociava
27
+ * una ⇒ per un indirizzo scritto male usciva «chiedi all'agente di leggerla», che è un consiglio
28
+ * falso: un nome che non esiste non lo risolve nemmeno l'agente.
29
+ *
30
+ * Ricerca 16/09/2026:
31
+ * · nodejs/undici #1603 e #2362 — con `fetch` di Node il guasto vero NON sta in `errore.message`
32
+ * ('fetch failed' per tutti) ma in `errore.cause.code`: ENOTFOUND/EAI_AGAIN (nome), ECONNREFUSED
33
+ * (porta chiusa), UND_ERR_CONNECT_TIMEOUT/ETIMEDOUT (scadenza), ECONNRESET (caduta);
34
+ * · MDN «AbortSignal» — `AbortError` (annullato da noi) e `TimeoutError` sono due fatti distinti;
35
+ * · AWS Architecture Blog «Exponential Backoff And Jitter» — si ritenta ciò che è TRANSITORIO.
36
+ *
37
+ * ⛔ Le frasi qui sotto sono scritte per INCROCIARE i rimedi del client: cambiarle senza guardare
38
+ * `rimedioPerIlMotivo` rimette il difetto. La prova le tiene ferme da tutt'e due i lati.
39
+ */
40
+ const CODICI = [
41
+ [/^(ENOTFOUND|EAI_AGAIN|ERR_NAME_NOT_RESOLVED)$/i, 'dns', 'Questo indirizzo non esiste'],
42
+ [/^(ECONNREFUSED)$/i, 'rifiuto', 'Nessuno risponde a questo indirizzo'],
43
+ [/^(UND_ERR_CONNECT_TIMEOUT|UND_ERR_HEADERS_TIMEOUT|UND_ERR_BODY_TIMEOUT|ETIMEDOUT)$/i, 'timeout', null],
44
+ [/CERT|SELF_SIGNED|TLS|SSL|ERR_SSL/i, 'certificato', 'Il sito ha un certificato non valido'],
45
+ [/^(ECONNRESET|EPIPE|EHOSTUNREACH|ENETUNREACH|EPROTO|UND_ERR_SOCKET)$/i, 'rete', 'Non sono riuscito a raggiungere il sito'],
46
+ ];
47
+
48
+ /*
49
+ * ⛔⛔⛔ 16/09/2026, GIRO DI RIPARAZIONE — LA FRASE NON È IL DATO: IL DATO È `genere` + `dettagli`.
50
+ *
51
+ * Bocciatura del controllore, con la prova in mano: le foto consegnate mostravano il pannello
52
+ * dello stato con il titolo in INGLESE («I could not open this page») sopra il motivo in ITALIANO
53
+ * («Il sito non ha risposto in tempo (6 secondi)»). Il commit dichiarava quel difetto riparato, e
54
+ * le foto lo smentivano.
55
+ *
56
+ * La causa NON era una riga dimenticata nel dizionario: era qui. Questa funzione componeva la
57
+ * frase interpolando un NUMERO, e il client la passava a `t()`, che è un dizionario a chiavi
58
+ * fisse. Una chiave che contiene «6» non ci sarà mai — e nemmeno quella con «11», e nemmeno
59
+ * nessun'altra: il difetto era strutturale e nessuna traduzione lo avrebbe chiuso.
60
+ *
61
+ * Ricerca 16/09/2026 — api-craft «Shall REST API error messages be internationalized?»:
62
+ * «locale-neutral errors with well-defined error values… allows the consumer to localize the
63
+ * message and reduces the pain of trying to match up strings between systems». ⇒ Il server manda
64
+ * ciò che SA (il genere del guasto e i suoi parametri); la frase per chi guarda la compone chi
65
+ * disegna, nella lingua di chi guarda.
66
+ *
67
+ * ⛔ `motivo` resta, e resta in italiano: è la DIAGNOSTICA (log, rotta, taccuino) e la rete di
68
+ * sicurezza per un client vecchio. Non è più ciò che finisce a schermo — quello lo decide
69
+ * `frasePerGenere` in `components/browser.js`, e una prova lo tiene fermo dai due lati.
70
+ */
71
+
72
+ /**
73
+ * Dice CHE COSA è andato storto: un genere stabile, i suoi parametri, e una frase di diagnostica.
74
+ * @param {unknown} errore l'errore di `fetch` (il codice vero sta in `errore.cause.code`)
75
+ * @param {{millisecondi?:number}} [opzioni]
76
+ * @returns {{genere:'timeout'|'dns'|'rifiuto'|'certificato'|'rete', motivo:string, dettagli:object}}
77
+ */
78
+ export function classificaGuasto(errore, { millisecondi = MILLISECONDI_MASSIMI } = {}) {
79
+ const secondi = Math.round(millisecondi / 1000);
80
+ const scaduto = { genere: 'timeout', motivo: `Il sito non ha risposto in tempo (${secondi} secondi)`, dettagli: { secondi } };
81
+ const nome = String(errore?.name || '');
82
+ if (nome === 'AbortError' || nome === 'TimeoutError') return scaduto;
83
+ const codice = String(errore?.cause?.code || errore?.code || '');
84
+ for (const [prova, genere, motivo] of CODICI) {
85
+ if (prova.test(codice)) return genere === 'timeout' ? scaduto : { genere, motivo, dettagli: {} };
86
+ }
87
+ return { genere: 'rete', motivo: 'Non sono riuscito a raggiungere il sito', dettagli: {} };
88
+ }
89
+
90
+ /*
91
+ * ⛔⛔⛔ 16/09/2026, GIRO DI RIPARAZIONE — «C'È UN GENERE» NON VUOL DIRE «NON CI SONO ARRIVATO».
92
+ *
93
+ * Trovato rileggendo la cura, non da un rosso. Dando un `genere` anche ai RIFIUTI (che serviva per
94
+ * poterli dire in due lingue), le due righe del client che decidono lo stato diventavano sbagliate:
95
+ * dicevano `esito?.genere ? 'irraggiungibile' : …`, cioè leggevano la PRESENZA di un genere come
96
+ * «non ci sono arrivato». Un sito che risponde benissimo e dice soltanto «non mi far vedere dentro
97
+ * una cornice» sarebbe diventato «non sono riuscito ad aprire questa pagina», con «Riprova» acceso
98
+ * su una cosa che riprovare non cambia — invece di ripiegare sul testo dell'agente, che è la cosa
99
+ * giusta e non è un guasto.
100
+ *
101
+ * ⇒ La distinzione si NOMINA qui, una volta sola, accanto a chi assegna i generi. Chi aggiunge un
102
+ * genere nuovo deve passare da questo elenco, e la prova gliene chiede conto dai due lati.
103
+ */
104
+ const GUASTI = new Set(['timeout', 'dns', 'rifiuto', 'certificato', 'rete', 'indirizzo']);
105
+
106
+ /**
107
+ * Vero se il genere dice «non ci sono arrivato» (guasto), falso se dice «il sito ha risposto e ha
108
+ * detto di no» (rifiuto della cornice) o se non c'è nessun genere.
109
+ * @param {string|null|undefined} genere
110
+ */
111
+ export function eUnGuasto(genere) { return GUASTI.has(String(genere || '')); }
112
+
113
+ /**
114
+ * Un guasto TRANSITORIO si ritenta; un nome che non esiste o un certificato scaduto no — riprovare
115
+ * non li cambia, e un ritentativo inutile è tempo tolto a chi guarda lo schermo.
116
+ * @param {string|null} genere
117
+ */
118
+ export function siRitenta(genere) {
119
+ return genere === 'timeout' || genere === 'rete' || genere === 'rifiuto';
120
+ }
121
+
122
+ /**
123
+ * @param {URL} url
124
+ * @returns {{ok:true}|{ok:false, motivo:string}}
125
+ */
126
+ export function urlAmmesso(url) {
127
+ if (!(url instanceof URL)) return { ok: false, motivo: 'URL non valido' };
128
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') return { ok: false, motivo: 'Solo http e https' };
129
+ if (url.username || url.password) return { ok: false, motivo: 'Niente credenziali nell\'indirizzo' };
130
+ return { ok: true };
131
+ }
132
+
133
+ /**
134
+ * Valuta le intestazioni di una risposta per un'origine che vuole incorniciarla.
135
+ *
136
+ * ⛔ 16/09, giro di riparazione — anche un RIFIUTO porta il suo `genere`. Prima il genere esisteva
137
+ * solo per i guasti di rete, e il client, per un rifiuto, non aveva altro che la frase italiana
138
+ * del server: la mostrava così com'era anche a chi guarda in inglese. Un rifiuto è un esito
139
+ * nominabile quanto un timeout, e nominarlo è ciò che permette di dirlo in due lingue.
140
+ * @param {{get(nome:string):string|null}} headers
141
+ * @param {string} origineNostra es. `http://127.0.0.1:4174`
142
+ * @returns {{incorniciabile:boolean, motivo:string|null, genere:string|null}}
143
+ */
144
+ export function valutaIntestazioni(headers, origineNostra) {
145
+ const csp = String(headers.get('content-security-policy') || '');
146
+ const direttiva = csp.split(';').map((d) => d.trim()).find((d) => /^frame-ancestors\b/i.test(d));
147
+ if (direttiva) {
148
+ const sorgenti = direttiva.replace(/^frame-ancestors\s*/i, '').split(/\s+/).filter(Boolean).map((s) => s.replace(/^'|'$/g, '').toLowerCase());
149
+ if (sorgenti.includes('*')) return { incorniciabile: true, motivo: null, genere: null };
150
+ const nostra = (() => { try { return new URL(origineNostra); } catch { return null; } })();
151
+ const ammessa = sorgenti.some((s) => {
152
+ if (s === 'none') return false;
153
+ if (s === 'self') return false; // «self» è l'origine della pagina, non la nostra
154
+ if (!nostra) return false;
155
+ if (s === nostra.origin.toLowerCase()) return true;
156
+ if (s === `${nostra.protocol}` || s === `${nostra.protocol}//*`) return true;
157
+ return s.startsWith('*.') && nostra.hostname.toLowerCase().endsWith(s.slice(1));
158
+ });
159
+ return ammessa
160
+ ? { incorniciabile: true, motivo: null, genere: null }
161
+ : { incorniciabile: false, motivo: 'La pagina dichiara «frame-ancestors» e non include TALOS', genere: 'frame-ancestors' };
162
+ }
163
+ const xfo = String(headers.get('x-frame-options') || '').trim().toUpperCase();
164
+ if (xfo === 'DENY') return { incorniciabile: false, motivo: 'La pagina vieta ogni cornice (X-Frame-Options: DENY)', genere: 'xfo-deny' };
165
+ if (xfo === 'SAMEORIGIN') return { incorniciabile: false, motivo: 'La pagina si mostra solo dentro il suo stesso sito (X-Frame-Options: SAMEORIGIN)', genere: 'xfo-sameorigin' };
166
+ return { incorniciabile: true, motivo: null, genere: null };
167
+ }
168
+
169
+ /**
170
+ * @param {string} indirizzo
171
+ * @param {{fetchFn?:typeof fetch, origineNostra:string, millisecondi?:number}} deps
172
+ * @returns {Promise<{url:string, incorniciabile:boolean, motivo:string|null, stato:number|null, titolo:string|null, genere:string|null, dettagli:object}>}
173
+ */
174
+ export async function verificaIncorniciabile(indirizzo, { fetchFn = globalThis.fetch, origineNostra, millisecondi = MILLISECONDI_MASSIMI } = {}) {
175
+ let url;
176
+ // ⛔ 16/09 — `genere: 'indirizzo'`: non è un guasto di rete, non si ritenta, e il rimedio è guardare ciò che si è scritto.
177
+ try { url = new URL(String(indirizzo)); } catch { return { url: String(indirizzo), incorniciabile: false, motivo: 'URL non valido', stato: null, titolo: null, genere: 'indirizzo', dettagli: {} }; }
178
+ const ammesso = urlAmmesso(url);
179
+ if (!ammesso.ok) return { url: url.href, incorniciabile: false, motivo: ammesso.motivo, stato: null, titolo: null, genere: 'indirizzo', dettagli: {} };
180
+ const controller = new AbortController();
181
+ const timer = setTimeout(() => controller.abort(), millisecondi);
182
+ try {
183
+ const risposta = await fetchFn(url.href, { method: 'GET', redirect: 'follow', signal: controller.signal, headers: { accept: 'text/html,*/*;q=0.5', 'user-agent': 'TALOS-Harness-Desktop/0.1 (anteprima)' } });
184
+ const esito = valutaIntestazioni(risposta.headers, origineNostra);
185
+ let titolo = null;
186
+ if (esito.incorniciabile && /text\/html/i.test(String(risposta.headers.get('content-type') || ''))) {
187
+ /* il titolo per la scheda: si legge solo l'inizio del documento, mai la pagina intera */
188
+ try {
189
+ const lettore = risposta.body?.getReader?.();
190
+ if (lettore) {
191
+ let testo = ''; const decoder = new TextDecoder();
192
+ while (testo.length < 16_000) { const { value, done } = await lettore.read(); if (done) break; testo += decoder.decode(value, { stream: true }); if (/<\/title>/i.test(testo)) break; }
193
+ await lettore.cancel().catch(() => {});
194
+ const m = /<title[^>]*>([^<]{1,200})<\/title>/i.exec(testo);
195
+ if (m) titolo = m[1].replace(/\s+/g, ' ').trim() || null;
196
+ }
197
+ } catch { /* il titolo è un di più */ }
198
+ } else {
199
+ try { await risposta.body?.cancel?.(); } catch { /* niente da liberare */ }
200
+ }
201
+ return { url: risposta.url || url.href, incorniciabile: esito.incorniciabile, motivo: esito.motivo, stato: risposta.status, titolo, genere: esito.genere ?? null, dettagli: {} };
202
+ } catch (errore) {
203
+ // ⛔ 16/09 — il guasto si NOMINA (vedi `classificaGuasto` in testa al file): timeout, nome
204
+ // inesistente, porta chiusa e certificato portano rimedi diversi, e ritentarli ha senso solo
205
+ // per due di loro. Prima uscivano tutti con la stessa frase, che non incrociava nessun rimedio.
206
+ const { genere, motivo, dettagli } = classificaGuasto(errore, { millisecondi });
207
+ return { url: url.href, incorniciabile: false, motivo, stato: null, titolo: null, genere, dettagli };
208
+ } finally {
209
+ clearTimeout(timer);
210
+ }
211
+ }