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,329 @@
1
+ /**
2
+ * Il browser VIVO di una sessione: un Chromium di sistema pilotato dal nostro server.
3
+ *
4
+ * ⛔ 07/09/2026, owner: «bisogna trovare un modo per visualizzare ogni fottuta pagina web —
5
+ * dobbiamo fare meglio degli altri». Il tag `iframe` non può farlo: un sito che vieta la cornice
6
+ * lascia un rettangolo grigio, e Chrome ci carica dentro la propria pagina d'errore sparando un
7
+ * `load` regolare, così nemmeno il ripiego scatta. Tutti i concorrenti diretti usano un browser
8
+ * VERO — Hermes un `webview` di Electron, altri il Chrome dell'utente via estensione oppure
9
+ * un browser in-app — e i servizi che lo fanno da server (Browserbase, Steel, Cloudflare
10
+ * Browser Run) ne trasmettono lo schermo via CDP invece di incorniciarlo.
11
+ *
12
+ * ⭐ Il nostro vantaggio, e non è estetico: il browser lo apre il SERVER, cioè lo stesso posto dove
13
+ * gira l'agente e dove vive il dev server. `localhost:5173` è vero per tutti e due, senza tunnel.
14
+ * Hermes dichiara nel proprio `preview-reach.ts` che col gateway cloud quel problema non ha
15
+ * soluzione: qui non si pone.
16
+ *
17
+ * Questo modulo è il COLLANTE fra i tre pezzi già provati, e non ne duplica nessuno:
18
+ * `browser-vivo.mjs` trova e avvia il Chromium, parla CDP
19
+ * `browser-stream.mjs` trasmette i fotogrammi e riporta indietro i gesti
20
+ * `browser-annota.mjs` mette l'overlay nella pagina e descrive un elemento
21
+ *
22
+ * ── I tre vincoli che la ricerca ha aggiunto, e che dal nostro codice non si vedevano ───────────
23
+ *
24
+ * 1. ⛔ UNA SCHEDA NON È UN CONFINE. Le schede aperte nel contesto predefinito **si scambiano
25
+ * cookie, localStorage e sessionStorage**: due sessioni TALOS che aprono due pagine si
26
+ * vedrebbero i dati a vicenda. Il confine è il BrowserContext, che è un confine di *storage*,
27
+ * non di finestra — schede di contesti diversi stanno nella stessa finestra senza problemi.
28
+ * ⇒ Un contesto per sessione, creato con `Target.createBrowserContext` e buttato con
29
+ * `Target.disposeBrowserContext` quando la sessione chiude.
30
+ * (vercel-labs/agent-browser #1068 e la guida CDP di browser-use, lette il 07/09/2026.)
31
+ *
32
+ * 2. ⛔ UNA SCHEDA PUÒ MORIRE SENZA DIRCELO (crash del renderer, la persona che la chiude nella
33
+ * finestra vera). Senza ascoltare `Target.detachedFromTarget` il gestore continua a credere
34
+ * viva una scheda che non c'è più, e ogni comando successivo fallisce in un modo che non
35
+ * somiglia alla causa. ⇒ Si ascolta, e la scheda morta si toglie dalla mappa subito.
36
+ * (Il pattern «SessionManager come unica fonte di verità», stessa guida.)
37
+ *
38
+ * 3. ⛔ LA DURATA È IL COSTO. Sui servizi in cloud si paga al minuto («optimizing your agent to
39
+ * close sessions promptly is the largest cost lever», Steel, 07/09/2026); qui non si paga in
40
+ * denaro ma in RAM sul computer di chi ci lavora — una scheda dimenticata tiene vivo un
41
+ * Chromium intero. ⇒ Una scadenza per inattività: niente gesti, niente trasmissione, niente
42
+ * navigazioni per un tempo dichiarato ⇒ la scheda si chiude da sé.
43
+ *
44
+ * ── E la regola che vale su tutto ───────────────────────────────────────────────────────────────
45
+ * ⛔ Una sola finestra per tutto il server: aprire un browser per sessione vorrebbe dire N processi
46
+ * Chrome sul computer di chi ci lavora.
47
+ * ⛔ Il profilo è NOSTRO e sta fuori dal progetto: TALOS non tocca mai il profilo personale, non
48
+ * vede le tue schede e non eredita i tuoi cookie.
49
+ * ⛔ Ciò che arriva dalla pagina (testo, HTML, errori di console) è contenuto NON AFFIDABILE:
50
+ * diventa un dato dentro un pacchetto, mai un'istruzione per il modello.
51
+ */
52
+ import { join } from 'node:path';
53
+ import { tmpdir } from 'node:os';
54
+ import { avviaBrowserVivo, trovaChromium, creaClientCdp, apriSchedaVuota, vaiA } from './browser-vivo.mjs';
55
+ import { avviaTrasmissione, fermaTrasmissione, mandaClic, mandaTasto, mandaRotella, ridimensiona } from './browser-stream.mjs';
56
+ import { installaOverlay, descriviElemento, raccogliErrori } from './browser-annota.mjs';
57
+
58
+ /** Dove vive il profilo del browser pilotato: fuori dal progetto, dentro i temporanei di sistema. */
59
+ export function cartellaProfiloPredefinita(base = tmpdir()) {
60
+ return join(base, 'talos-browser-vivo');
61
+ }
62
+
63
+ /** Quanto può restare aperta una scheda che nessuno tocca. Dieci minuti: il tempo di leggere una pagina. */
64
+ export const INATTIVITA_MS = 10 * 60 * 1000;
65
+
66
+ export function errorePagina(codice, messaggio, causa) {
67
+ const e = new Error(messaggio);
68
+ e.code = codice;
69
+ if (causa) e.cause = causa;
70
+ return e;
71
+ }
72
+
73
+ export function creaGestoreBrowserVivo({
74
+ trovaFn = trovaChromium,
75
+ avviaFn = avviaBrowserVivo,
76
+ clientFn = creaClientCdp,
77
+ connettiFn = null, // (wsUrl) => Promise<socket ws>, iniettata da chi crea il gestore
78
+ cartellaProfilo = cartellaProfiloPredefinita(),
79
+ schedeMassime = 6,
80
+ inattivitaMs = INATTIVITA_MS,
81
+ orologio = () => Date.now(),
82
+ } = {}) {
83
+ let finestra = null; // {browser, cdp, socket, canale, staccaMorte}
84
+ const schede = new Map(); // sessionId → {cdpSessionId, targetId, contestoId, url, ferma, errori, staccaErrori, toccataA}
85
+
86
+ function tocca(scheda) { scheda.toccataA = orologio(); }
87
+
88
+ /** La scheda è morta là fuori: si toglie dalla mappa, senza provare a parlarle. */
89
+ function dimentica(targetId) {
90
+ for (const [sessionId, scheda] of schede) {
91
+ if (scheda.targetId !== targetId) continue;
92
+ if (scheda.staccaErrori) { try { scheda.staccaErrori(); } catch { /* già staccati */ } }
93
+ scheda.ferma = null;
94
+ schede.delete(sessionId);
95
+ return sessionId;
96
+ }
97
+ return null;
98
+ }
99
+
100
+ async function assicuraFinestra() {
101
+ if (finestra) return finestra;
102
+ const trovato = trovaFn();
103
+ if (!trovato) {
104
+ throw errorePagina('BROWSER_VIVO_ASSENTE',
105
+ 'Non trovo un browser Chromium su questo computer. TALOS ne usa uno già installato — Chrome o Edge — e non ne scarica uno suo.');
106
+ }
107
+ const browser = await avviaFn({ percorso: trovato.percorso, cartellaProfilo });
108
+ if (typeof connettiFn !== 'function') {
109
+ await browser.chiudi();
110
+ throw errorePagina('BROWSER_VIVO_SENZA_CONNESSIONE', 'Manca il modo di collegarsi al browser (connettiFn)');
111
+ }
112
+ let socket;
113
+ try {
114
+ socket = await connettiFn(browser.wsUrl);
115
+ } catch (causa) {
116
+ await browser.chiudi();
117
+ throw errorePagina('BROWSER_VIVO_CONNESSIONE_FALLITA', 'Il browser è partito ma non risponde al protocollo di controllo', causa);
118
+ }
119
+ const cdp = clientFn(socket);
120
+ // vincolo 2: la verità su chi è vivo la dice il browser, non la nostra mappa
121
+ const staccaMorte = cdp.su('Target.detachedFromTarget', (evento) => { if (evento?.targetId) dimentica(evento.targetId); });
122
+ /*
123
+ * ⛔ 07/9, trovato dalla prova C25: cliccando un link DENTRO la pagina, TALOS continuava a
124
+ * credere di stare all'indirizzo di prima — la barra mostrava il vecchio, e chi rileggeva la
125
+ * pagina rileggeva quella sbagliata. Una pagina viva naviga per conto suo (un clic, un
126
+ * redirect, un `history.pushState`): l'indirizzo lo dice il browser, non la nostra memoria.
127
+ */
128
+ const segnaIndirizzo = (sessione, url) => {
129
+ if (!url) return;
130
+ for (const scheda of schede.values()) {
131
+ if (scheda.cdpSessionId === sessione) { scheda.url = url; tocca(scheda); }
132
+ }
133
+ };
134
+ const daContesto = (contesto) => (typeof contesto === 'string' ? contesto : contesto?.sessionId);
135
+ const staccaNavigazione = cdp.su('Page.frameNavigated', (evento, contesto) => {
136
+ const frame = evento?.frame;
137
+ if (!frame || frame.parentId) return; // solo il frame principale: un iframe dentro la pagina non è «la pagina»
138
+ segnaIndirizzo(daContesto(contesto), frame.url);
139
+ });
140
+ /*
141
+ * ⛔⛔ 07/9 — misurato sul 4174 cliccando «Issues» dentro github: la pagina cambiava DAVVERO
142
+ * (l'annotazione leggeva «Issues Search Issues…») e l'indirizzo di TALOS restava quello di
143
+ * prima. Causa: i siti moderni navigano SENZA ricaricare il documento (`history.pushState`,
144
+ * Turbo, i router delle SPA), e `Page.frameNavigated` non scatta — è il limite che il modulo
145
+ * del motore aveva dichiarato e lasciato aperto. `Page.navigatedWithinDocument` è l'evento che
146
+ * racconta proprio quel caso: senza, la barra mente su metà del web.
147
+ */
148
+ const staccaDentroDocumento = cdp.su('Page.navigatedWithinDocument', (evento, contesto) => {
149
+ segnaIndirizzo(daContesto(contesto), evento?.url);
150
+ });
151
+ finestra = { browser, cdp, socket, canale: trovato.canale, staccaMorte, staccaNavigazione, staccaDentroDocumento };
152
+ return finestra;
153
+ }
154
+
155
+ async function chiudiFinestraSeVuota() {
156
+ if (!finestra || schede.size > 0) return;
157
+ const f = finestra;
158
+ finestra = null;
159
+ try { f.staccaMorte?.(); } catch { /* l'ascoltatore può essere già andato */ }
160
+ try { f.staccaNavigazione?.(); } catch { /* idem */ }
161
+ try { f.staccaDentroDocumento?.(); } catch { /* idem */ }
162
+ try { f.cdp.chiudi(); } catch { /* il socket può essere già andato */ }
163
+ try { await f.browser.chiudi(); } catch { /* idem per il processo */ }
164
+ }
165
+
166
+ function schedaDi(sessionId) {
167
+ const scheda = schede.get(sessionId);
168
+ if (!scheda) throw errorePagina('BROWSER_VIVO_SCHEDA_ASSENTE', 'Questa sessione non ha una pagina aperta');
169
+ return scheda;
170
+ }
171
+
172
+ const gestore = {
173
+ /** Apre (o riusa) la scheda di questa sessione e ci porta l'indirizzo. */
174
+ async apri(sessionId, url, { larghezza = 1280, altezza = 800 } = {}) {
175
+ if (!sessionId) throw errorePagina('BROWSER_VIVO_SENZA_SESSIONE', 'Serve la sessione a cui appartiene la scheda');
176
+ await gestore.raccogliScadute();
177
+ if (!schede.has(sessionId) && schede.size >= schedeMassime) {
178
+ throw errorePagina('BROWSER_VIVO_TROPPE_SCHEDE', `Troppe pagine aperte insieme: il massimo è ${schedeMassime}`);
179
+ }
180
+ const { cdp } = await assicuraFinestra();
181
+ let scheda = schede.get(sessionId);
182
+ if (!scheda) {
183
+ // vincolo 1: un contesto per sessione, così i cookie di una non finiscono nell'altra
184
+ let contestoId = null;
185
+ try {
186
+ const contesto = await cdp.invia('Target.createBrowserContext', { disposeOnDetach: true });
187
+ contestoId = contesto?.browserContextId ?? null;
188
+ } catch { contestoId = null; } // un Chromium che non lo offre non deve impedire di navigare
189
+ const aperta = await apriSchedaVuota(cdp, contestoId ? { browserContextId: contestoId } : {});
190
+ scheda = {
191
+ cdpSessionId: aperta.sessionId, targetId: aperta.targetId, contestoId,
192
+ url: null, ferma: null, errori: null, staccaErrori: null, toccataA: orologio(),
193
+ };
194
+ schede.set(sessionId, scheda);
195
+ await ridimensiona(cdp, scheda.cdpSessionId, { larghezza, altezza });
196
+ /*
197
+ * ⛔ L'overlay serve ad ANNOTARE, non a vedere: se non si installa (un frame che non c'è
198
+ * ancora, un mondo isolato rifiutato) la pagina deve aprirsi lo stesso, senza gli spilli.
199
+ * Trovato da un test, non da una lettura: la prima versione faceva fallire l'apertura
200
+ * INTERA perché il mondo isolato non era pronto — cioè rompeva la cosa principale per la
201
+ * cosa accessoria. Chi non ha l'overlay lo dichiara (`annotabile: false`), non lo finge.
202
+ */
203
+ try {
204
+ await installaOverlay(cdp, scheda.cdpSessionId);
205
+ scheda.annotabile = true;
206
+ } catch (causa) {
207
+ scheda.annotabile = false;
208
+ scheda.motivoNonAnnotabile = causa instanceof Error ? causa.message : String(causa);
209
+ }
210
+ try {
211
+ const errori = raccogliErrori(cdp, scheda.cdpSessionId);
212
+ scheda.errori = errori;
213
+ scheda.staccaErrori = errori.smetti;
214
+ } catch { scheda.errori = null; scheda.staccaErrori = null; }
215
+ }
216
+ const esito = await vaiA(cdp, scheda.cdpSessionId, url);
217
+ scheda.url = esito.url || url;
218
+ tocca(scheda);
219
+ return { ok: esito.ok, stato: esito.stato, errore: esito.errore ?? null, url: scheda.url, canale: finestra?.canale ?? null, isolata: Boolean(scheda.contestoId), annotabile: Boolean(scheda.annotabile) };
220
+ },
221
+
222
+ /** Comincia a trasmettere: `onFrame` riceve un fotogramma per volta. Torna la funzione per smettere. */
223
+ async segui(sessionId, onFrame, opzioni = {}) {
224
+ const scheda = schedaDi(sessionId);
225
+ if (scheda.ferma) await scheda.ferma();
226
+ /*
227
+ * ⛔ 07/9 — il fotogramma porta anche l'INDIRIZZO corrente. Misurato sul 4174: cliccando
228
+ * «Issues» dentro github la pagina navigava davvero, il server lo sapeva (`frameNavigated` e
229
+ * `navigatedWithinDocument`) e la barra dell'indirizzo di TALOS mostrava ancora la pagina di
230
+ * prima — visto nello screenshot. Chi guarda deve poter fidarsi di quella barra: dire dove
231
+ * sei è metà del mestiere di un browser.
232
+ */
233
+ const trasmissione = await avviaTrasmissione(finestra.cdp, scheda.cdpSessionId, opzioni, (frame) => {
234
+ tocca(scheda); // chi guarda sta usando la pagina: non è inattiva
235
+ onFrame({ ...frame, url: scheda.url });
236
+ });
237
+ scheda.ferma = async () => {
238
+ scheda.ferma = null;
239
+ trasmissione.sgancia();
240
+ await fermaTrasmissione(finestra.cdp, scheda.cdpSessionId).catch(() => {});
241
+ };
242
+ return scheda.ferma;
243
+ },
244
+
245
+ /** Un gesto della persona: clic, tasto o rotella, già in coordinate della PAGINA. */
246
+ async gesto(sessionId, gesto = {}) {
247
+ const scheda = schedaDi(sessionId);
248
+ tocca(scheda);
249
+ const cdp = finestra.cdp;
250
+ const s = scheda.cdpSessionId;
251
+ if (gesto.tipo === 'clic') return mandaClic(cdp, s, gesto);
252
+ if (gesto.tipo === 'tasto') return mandaTasto(cdp, s, gesto);
253
+ if (gesto.tipo === 'rotella') return mandaRotella(cdp, s, gesto);
254
+ throw errorePagina('BROWSER_VIVO_GESTO_IGNOTO', `Gesto non riconosciuto: ${gesto?.tipo}`);
255
+ },
256
+
257
+ /*
258
+ * ⛔ 08/09/2026, owner: «non si estende a tutto schermo». La misura della finestra pilotata era
259
+ * fissa a 1280x800 e non c'entrava niente col riquadro che la persona ha davanti: la pagina
260
+ * arrivava con la forma sbagliata e restavano bande vuote ai lati. Qui la vista dice quanto
261
+ * e' grande DAVVERO, all'apertura e a ogni ridimensionamento, e la pagina prende quella forma.
262
+ *
263
+ * ⛔ Non ricarica niente: `Emulation.setDeviceMetricsOverride` cambia il viewport della pagina
264
+ * gia' aperta. Ricaricare per un ridimensionamento perderebbe lo scorrimento, i moduli
265
+ * compilati a meta' e — su una pagina che l'agente sta leggendo — il lavoro fatto.
266
+ */
267
+ async misura(sessionId, { larghezza, altezza } = {}) {
268
+ const scheda = schedaDi(sessionId);
269
+ tocca(scheda);
270
+ const esito = await ridimensiona(finestra.cdp, scheda.cdpSessionId, { larghezza, altezza });
271
+ return { larghezza: esito?.larghezza ?? null, altezza: esito?.altezza ?? null, url: scheda.url };
272
+ },
273
+
274
+ /** Il pacchetto di un elemento sotto un punto: selettore, HTML, stili, antenati, errori. */
275
+ async descrivi(sessionId, punto) {
276
+ const scheda = schedaDi(sessionId);
277
+ tocca(scheda);
278
+ const pacchetto = await descriviElemento(finestra.cdp, scheda.cdpSessionId, punto);
279
+ return { ...pacchetto, url: scheda.url, errori: scheda.errori?.errori ?? [] };
280
+ },
281
+
282
+ /** Chiude la scheda di questa sessione; l'ultima porta via anche il browser. */
283
+ async chiudi(sessionId) {
284
+ const scheda = schede.get(sessionId);
285
+ if (!scheda) return { chiusa: false };
286
+ if (scheda.ferma) await scheda.ferma().catch(() => {});
287
+ if (scheda.staccaErrori) { try { scheda.staccaErrori(); } catch { /* già staccati */ } }
288
+ schede.delete(sessionId);
289
+ if (finestra) {
290
+ await finestra.cdp.invia('Target.closeTarget', { targetId: scheda.targetId }).catch(() => {});
291
+ // il contesto se ne va con la scheda: è lui a tenere i cookie, e nessun altro lo usa
292
+ if (scheda.contestoId) await finestra.cdp.invia('Target.disposeBrowserContext', { browserContextId: scheda.contestoId }).catch(() => {});
293
+ }
294
+ await chiudiFinestraSeVuota();
295
+ return { chiusa: true };
296
+ },
297
+
298
+ /** vincolo 3: chi non viene toccato da un pezzo se ne va, e col suo Chromium. */
299
+ async raccogliScadute() {
300
+ const adesso = orologio();
301
+ const scadute = [...schede.entries()].filter(([, s]) => adesso - s.toccataA > inattivitaMs).map(([id]) => id);
302
+ for (const sessionId of scadute) await gestore.chiudi(sessionId).catch(() => {});
303
+ return scadute;
304
+ },
305
+
306
+ /** Cosa c'è di vivo adesso — per Doctor e per le prove. */
307
+ stato() {
308
+ const adesso = orologio();
309
+ return {
310
+ finestraAperta: Boolean(finestra),
311
+ canale: finestra?.canale ?? null,
312
+ schede: [...schede.entries()].map(([sessionId, s]) => ({
313
+ sessionId, url: s.url, trasmette: Boolean(s.ferma), isolata: Boolean(s.contestoId), annotabile: Boolean(s.annotabile), fermaDaMs: adesso - s.toccataA,
314
+ })),
315
+ cartellaProfilo,
316
+ inattivitaMs,
317
+ };
318
+ },
319
+
320
+ /** Spegne tutto: si chiama quando il server chiude. */
321
+ async spegni() {
322
+ for (const sessionId of [...schede.keys()]) await gestore.chiudi(sessionId).catch(() => {});
323
+ schede.clear();
324
+ await chiudiFinestraSeVuota();
325
+ },
326
+ };
327
+
328
+ return gestore;
329
+ }