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,123 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ export const CARTELLA_ASSISTENZA_PREDEFINITA = fileURLToPath(new URL('../../docs/assistenza/', import.meta.url));
6
+ export const MAX_DOMANDA_ASSISTENZA = 500;
7
+ const MAX_FILE_BYTES = 256 * 1024;
8
+ const MAX_RISPOSTA = 1200;
9
+ const CACHE = new Map();
10
+ const PAROLE_VUOTE = new Set([
11
+ 'che', 'chi', 'cosa', 'come', 'con', 'cui', 'dal', 'del', 'della', 'delle', 'degli', 'dei',
12
+ 'dove', 'fare', 'faccio', 'fanno', 'gli', 'nel', 'nella', 'nelle', 'per', 'puo', 'puoi', 'sono',
13
+ 'sul', 'sulla', 'tra', 'una', 'uno', 'questa', 'questo', 'funziona',
14
+ ]);
15
+
16
+ export function normalizzaDomandaAssistenza(value) {
17
+ return String(value ?? '').normalize('NFD').replace(/\p{Diacritic}/gu, '').toLocaleLowerCase('it')
18
+ .replace(/[^a-z0-9]+/gu, ' ').trim().replace(/\s+/gu, ' ');
19
+ }
20
+
21
+ function ancora(titolo) {
22
+ return normalizzaDomandaAssistenza(titolo).replace(/\s+/gu, '-');
23
+ }
24
+
25
+ function testoLeggibile(markdown) {
26
+ return String(markdown ?? '')
27
+ .replace(/```[\s\S]*?```/gu, '')
28
+ .replace(/!\[([^\]]*)\]\([^)]*\)/gu, '$1')
29
+ .replace(/\[([^\]]+)\]\([^)]*\)/gu, '$1')
30
+ .replace(/^>\s?/gmu, '')
31
+ .replace(/^\s*\|?(?:\s*:?-{3,}:?\s*\|)+\s*$/gmu, '')
32
+ .replace(/^[-*+]\s+/gmu, '• ')
33
+ .replace(/^\d+\.\s+/gmu, '')
34
+ .replace(/[*_`#]/gu, '')
35
+ .replace(/\|/gu, ' ')
36
+ .replace(/[ \t]+/gu, ' ')
37
+ .replace(/\n{3,}/gu, '\n\n')
38
+ .trim();
39
+ }
40
+
41
+ function estrattoRilevante(testo, parole, massimo) {
42
+ const passaggi = String(testo).split(/\n{2,}|(?=\n• )/gu).map((passaggio) => passaggio.trim()).filter(Boolean);
43
+ const ordinati = passaggi.map((passaggio, indice) => {
44
+ const normalizzato = normalizzaDomandaAssistenza(passaggio);
45
+ const trovate = parole.filter((parola) => normalizzato.includes(parola)).length;
46
+ return { passaggio, indice, punteggio: (trovate * 10) + (trovate > 0 && passaggio.startsWith('• ') ? 20 : 0) };
47
+ }).filter(({ punteggio }) => punteggio > 0)
48
+ .sort((a, b) => b.punteggio - a.punteggio || a.indice - b.indice);
49
+ const scelti = [];
50
+ let usati = 0;
51
+ for (const candidato of ordinati) {
52
+ const costo = candidato.passaggio.length + (scelti.length ? 2 : 0);
53
+ if (costo > massimo - usati) continue;
54
+ scelti.push(candidato.passaggio);
55
+ usati += costo;
56
+ if (scelti.length === 4) break;
57
+ }
58
+ if (scelti.length) return scelti.join('\n\n');
59
+ return String(testo).slice(0, massimo).trim();
60
+ }
61
+
62
+ function sezioniDi(nomeFile, markdown) {
63
+ const righe = String(markdown).split(/\r?\n/u);
64
+ const titolo = righe.find((riga) => /^#\s+/u.test(riga))?.replace(/^#\s+/u, '').trim() || nomeFile.replace(/\.md$/iu, '');
65
+ const sezioni = [];
66
+ let nome = titolo;
67
+ let corpo = [];
68
+ const salva = () => {
69
+ const testo = testoLeggibile(corpo.join('\n'));
70
+ if (testo) sezioni.push({ titolo, sezione: nome, testo, nomeFile });
71
+ };
72
+ for (const riga of righe) {
73
+ const match = /^##\s+(.+)$/u.exec(riga);
74
+ if (match) { salva(); nome = match[1].trim(); corpo = []; }
75
+ else if (!/^#\s+/u.test(riga)) corpo.push(riga);
76
+ }
77
+ salva();
78
+ return sezioni;
79
+ }
80
+
81
+ export async function indicizzaAssistenza({ cartella = CARTELLA_ASSISTENZA_PREDEFINITA } = {}) {
82
+ const chiave = String(cartella);
83
+ if (!CACHE.has(chiave)) {
84
+ CACHE.set(chiave, (async () => {
85
+ const nomi = (await readdir(cartella))
86
+ .filter((nome) => nome.toLowerCase().endsWith('.md') && nome.toLowerCase() !== 'readme.md')
87
+ .sort();
88
+ const sezioni = [];
89
+ for (const nome of nomi) {
90
+ const percorso = join(cartella, nome);
91
+ if ((await stat(percorso)).size > MAX_FILE_BYTES) continue;
92
+ sezioni.push(...sezioniDi(nome, await readFile(percorso, 'utf8')));
93
+ }
94
+ return sezioni;
95
+ })());
96
+ }
97
+ return CACHE.get(chiave);
98
+ }
99
+
100
+ export async function cercaAssistenza({ domanda, cartella = CARTELLA_ASSISTENZA_PREDEFINITA } = {}) {
101
+ const normalizzata = normalizzaDomandaAssistenza(domanda);
102
+ const parole = [...new Set(normalizzata.split(' ').filter((parola) => parola.length >= 3 && !PAROLE_VUOTE.has(parola)))];
103
+ if (!normalizzata || normalizzata.length > MAX_DOMANDA_ASSISTENZA || parole.length === 0) return { risposta: 'non lo so', fonti: [] };
104
+ const candidati = (await indicizzaAssistenza({ cartella })).map((voce) => {
105
+ const titolo = normalizzaDomandaAssistenza(voce.titolo);
106
+ const sezione = normalizzaDomandaAssistenza(voce.sezione);
107
+ const testo = normalizzaDomandaAssistenza(voce.testo);
108
+ const trovate = parole.filter((parola) => titolo.includes(parola) || sezione.includes(parola) || testo.includes(parola));
109
+ const punteggio = (testo.includes(normalizzata) || sezione.includes(normalizzata) ? 8 : 0)
110
+ + trovate.reduce((somma, parola) => somma + (sezione.includes(parola) ? 5 : titolo.includes(parola) ? 3 : 1), 0);
111
+ return { ...voce, trovate: trovate.length, punteggio };
112
+ }).filter((voce) => voce.punteggio >= 4 && voce.trovate >= Math.ceil(parole.length / 2))
113
+ .sort((a, b) => b.punteggio - a.punteggio || a.nomeFile.localeCompare(b.nomeFile, 'it'));
114
+ const migliore = candidati[0];
115
+ if (!migliore) return { risposta: 'non lo so', fonti: [] };
116
+ const intestazione = `${migliore.titolo} — ${migliore.sezione}`;
117
+ const corpo = estrattoRilevante(migliore.testo, parole, MAX_RISPOSTA - intestazione.length - 2);
118
+ const risposta = `${intestazione}\n\n${corpo}`.slice(0, MAX_RISPOSTA).trim();
119
+ return {
120
+ risposta,
121
+ fonti: [{ titolo: migliore.titolo, sezione: migliore.sezione, percorso: `docs/assistenza/${migliore.nomeFile}#${ancora(migliore.sezione)}` }],
122
+ };
123
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * automation-scheduler.mjs — il tick che fa partire un'automazione DA SOLA,
3
+ * senza che l'owner prema nulla. La seconda metà del blocco 7, dopo
4
+ * `automation-store.mjs` (persistenza + guardie). Owner, 27/8: "hai il mio
5
+ * via libera" sulla vera schedulazione.
6
+ *
7
+ * ⛔ `unTick()` è la funzione PURA che fa tutto il lavoro — nessun timer al
8
+ * suo interno, `clock` e `sessionRegistry.avvia` iniettabili. `avvia()`/
9
+ * `ferma()` sotto sono il SOLO punto che tocca `setInterval` per davvero,
10
+ * e restano fuori da qualunque test: "mai un vero timer nei test unitari"
11
+ * è la stessa disciplina già in uso in tutto il progetto per il tempo.
12
+ */
13
+ export function createAutomationScheduler({
14
+ store, sessionRegistry, clock = () => new Date(), onEsecuzione = () => {},
15
+ }) {
16
+ /**
17
+ * Un giro su TUTTE le automazioni: quelle attive, con `prossimaEsecuzione`
18
+ * già passata, e sotto il loro `limiteAlGiorno`, fanno partire una
19
+ * sessione vera — esattamente come "Esegui ora", solo senza il click.
20
+ *
21
+ * ⛔ Il limite raggiunto NON fa ritentare a ogni giro (sarebbe spam):
22
+ * l'automazione resta ferma fino a domani, quando `registraEsecuzione`
23
+ * (chiamata dal PROSSIMO avvio riuscito) azzera il contatore da sola.
24
+ */
25
+ async function eseguiTick() {
26
+ const automazioni = await store.elenca();
27
+ const ora = clock();
28
+ const oggi = ora.toISOString().slice(0, 10);
29
+ for (const voce of automazioni) {
30
+ if (!voce.attiva) continue;
31
+ if (!voce.prossimaEsecuzione) continue;
32
+ if (ora < new Date(voce.prossimaEsecuzione)) continue;
33
+ const eseguiteOggi = voce.giornoContatore === oggi ? voce.eseguiteOggi : 0;
34
+ if (eseguiteOggi >= voce.limiteAlGiorno) continue; // limite raggiunto: si tace fino a domani, non si ritenta ogni giro
35
+
36
+ const esito = sessionRegistry.avvia(voce.taskId);
37
+ await store.registraEsecuzione(voce.id);
38
+ onEsecuzione({ automazione: voce, esito });
39
+ }
40
+ }
41
+
42
+ /*
43
+ * ⛔ 14/09 (F06 della review, riprodotto): due giri sovrapposti facevano partire DUE VOLTE la stessa automazione — il
44
+ * secondo giro leggeva l'elenco prima che il primo avesse scritto `registraEsecuzione`, e una sessione vera costa.
45
+ * Un giro alla volta per questo scheduler: chi arriva mentre uno è in corso riceve lo STESSO giro, non ne apre un altro.
46
+ * ⛔ Non è un «esattamente una volta» fra processi diversi né a prova di crash: è la guardia locale di questa istanza,
47
+ * e non pretende di essere altro.
48
+ */
49
+ let tickInCorso = null;
50
+ async function unTick() {
51
+ if (tickInCorso) return tickInCorso;
52
+ tickInCorso = eseguiTick().finally(() => { tickInCorso = null; });
53
+ return tickInCorso;
54
+ }
55
+
56
+ let timer = null;
57
+ /** Mai chiamata nei test — questa È la linea che separa "logica provata" da "timer vero", vedi doc in testa al file. */
58
+ function avvia(intervalloControlloMs = 30_000) {
59
+ if (timer) return;
60
+ timer = setInterval(() => { unTick().catch(() => {}); }, intervalloControlloMs);
61
+ if (timer.unref) timer.unref(); // ⛔ non deve tenere il processo vivo da solo — stesso principio di ogni altro timer di servizio in questo progetto
62
+ }
63
+ function ferma() {
64
+ if (timer) clearInterval(timer);
65
+ timer = null;
66
+ }
67
+
68
+ return Object.freeze({ unTick, avvia, ferma });
69
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * automation-store.mjs — la parte del blocco 7 (Automazioni) lasciata
3
+ * dichiaratamente fuori scope finché l'owner non ha dato il via libera
4
+ * esplicito, 27/8: *"hai il mio via libera"* sulla vera schedulazione.
5
+ *
6
+ * ⛔⛔ Diverso da `session-registry.mjs` apposta: le sessioni vivono SOLO in
7
+ * memoria (dichiarato lì, accettabile per un run-to-completion owner-only).
8
+ * Un'automazione no — deve ricordare "quando ho girato l'ultima volta" e
9
+ * "quante volte oggi" ANCHE dopo un riavvio del server (frequente in
10
+ * sviluppo con `node --watch`), altrimenti un riavvio a metà giornata
11
+ * azzera il contatore e il limite di sicurezza sotto smette di contare.
12
+ * Persistenza su disco, un file JSON per automazione — stesso stile
13
+ * "niente database" già in uso in tutto il progetto (TALOS-BANCO è JSONL).
14
+ *
15
+ * ⛔⛔⛔ LA GUARDIA DI SICUREZZA NON È UN DETTAGLIO: questo store fa partire
16
+ * sessioni reali (credito vero) SENZA che l'owner prema nulla, nel momento
17
+ * in cui accade. Due tetti duri, non solo default consigliati:
18
+ * `INTERVALLO_MINIMO_MINUTI` impedisce un'automazione che gira più spesso
19
+ * di così, `LIMITE_MASSIMO_AL_GIORNO` impedisce un limite-per-automazione
20
+ * assurdo — ENTRAMBI validati alla creazione, non solo suggeriti in UI.
21
+ * E ogni automazione nuova nasce `attiva: false`: il meccanismo è vero,
22
+ * ma non parte mai senza un'azione esplicita successiva di chi la crea.
23
+ */
24
+ import { randomUUID } from 'node:crypto';
25
+ import { mkdir, readFile, readdir, rm, writeFile } from 'node:fs/promises';
26
+ import { join } from 'node:path';
27
+
28
+ export const INTERVALLO_MINIMO_MINUTI = 5;
29
+ export const LIMITE_MASSIMO_AL_GIORNO = 10;
30
+
31
+ export class AutomationStoreError extends Error {
32
+ constructor(message, code = 'AUTOMATION_INVALID') {
33
+ super(message);
34
+ this.name = 'AutomationStoreError';
35
+ this.code = code;
36
+ }
37
+ }
38
+
39
+ export function createAutomationStore({
40
+ cartella,
41
+ fsAdapter = { mkdir, readFile, readdir, rm, writeFile },
42
+ clock = () => new Date(),
43
+ } = {}) {
44
+ if (typeof cartella !== 'string' || cartella.length === 0) {
45
+ throw new AutomationStoreError('cartella obbligatoria', 'AUTOMATION_STORE_MISCONFIGURED');
46
+ }
47
+
48
+ const percorsoDi = (id) => join(cartella, `${id}.json`);
49
+
50
+ async function scrivi(voce) {
51
+ await fsAdapter.mkdir(cartella, { recursive: true });
52
+ await fsAdapter.writeFile(percorsoDi(voce.id), JSON.stringify(voce, null, 2), 'utf8');
53
+ return voce;
54
+ }
55
+
56
+ async function leggi(id) {
57
+ try {
58
+ return JSON.parse(await fsAdapter.readFile(percorsoDi(id), 'utf8'));
59
+ } catch {
60
+ return null; // ⛔ assente o corrotta a metà scrittura: mai un throw, chi chiama vede "non esiste"
61
+ }
62
+ }
63
+
64
+ async function elenca() {
65
+ let nomi;
66
+ try {
67
+ nomi = await fsAdapter.readdir(cartella);
68
+ } catch {
69
+ return []; // ⛔ la cartella non esiste ancora: zero automazioni, non un errore
70
+ }
71
+ const voci = [];
72
+ for (const nome of nomi) {
73
+ if (!nome.endsWith('.json')) continue;
74
+ try {
75
+ voci.push(JSON.parse(await fsAdapter.readFile(join(cartella, nome), 'utf8')));
76
+ } catch { /* una voce corrotta non deve nascondere le altre */ }
77
+ }
78
+ return voci.sort((a, b) => a.creataAlle.localeCompare(b.creataAlle));
79
+ }
80
+
81
+ /**
82
+ * @returns la voce creata, sempre `attiva: false` — vedi la guardia in
83
+ * testa al file. Lancia `AutomationStoreError` su un parametro fuori dai
84
+ * tetti duri, mai un valore silenziosamente corretto (un limite "aggiustato
85
+ * da solo" nasconderebbe all'owner cosa ha davvero chiesto).
86
+ */
87
+ async function crea({ taskId, nome, intervalloMinuti, limiteAlGiorno = 3 }) {
88
+ if (typeof taskId !== 'string' || taskId.length === 0) {
89
+ throw new AutomationStoreError('taskId mancante');
90
+ }
91
+ if (!Number.isInteger(intervalloMinuti) || intervalloMinuti < INTERVALLO_MINIMO_MINUTI) {
92
+ throw new AutomationStoreError(`intervalloMinuti deve essere un intero >= ${INTERVALLO_MINIMO_MINUTI}`);
93
+ }
94
+ if (!Number.isInteger(limiteAlGiorno) || limiteAlGiorno < 1 || limiteAlGiorno > LIMITE_MASSIMO_AL_GIORNO) {
95
+ throw new AutomationStoreError(`limiteAlGiorno deve essere un intero fra 1 e ${LIMITE_MASSIMO_AL_GIORNO}`);
96
+ }
97
+ const voce = {
98
+ id: randomUUID(),
99
+ taskId,
100
+ nome: typeof nome === 'string' && nome.length > 0 ? nome : taskId,
101
+ intervalloMinuti,
102
+ limiteAlGiorno,
103
+ attiva: false,
104
+ creataAlle: clock().toISOString(),
105
+ ultimaEsecuzione: null,
106
+ prossimaEsecuzione: null,
107
+ eseguiteOggi: 0,
108
+ giornoContatore: null,
109
+ };
110
+ return scrivi(voce);
111
+ }
112
+
113
+ /** Accende/spegne — quando accende, calcola SUBITO la prossima esecuzione da ORA, non da un'esecuzione passata mai avvenuta. */
114
+ async function imposta(id, attivaValore) {
115
+ const voce = await leggi(id);
116
+ if (!voce) return null;
117
+ voce.attiva = Boolean(attivaValore);
118
+ voce.prossimaEsecuzione = voce.attiva
119
+ ? new Date(clock().getTime() + voce.intervalloMinuti * 60_000).toISOString()
120
+ : null;
121
+ return scrivi(voce);
122
+ }
123
+
124
+ /** Chiamata dallo scheduler dopo un avvio reale: azzera il contatore al cambio di giorno, sposta la prossima esecuzione in avanti. */
125
+ async function registraEsecuzione(id) {
126
+ const voce = await leggi(id);
127
+ if (!voce) return null;
128
+ const ora = clock();
129
+ const giornoOggi = ora.toISOString().slice(0, 10);
130
+ if (voce.giornoContatore !== giornoOggi) {
131
+ voce.giornoContatore = giornoOggi;
132
+ voce.eseguiteOggi = 0;
133
+ }
134
+ voce.eseguiteOggi += 1;
135
+ voce.ultimaEsecuzione = ora.toISOString();
136
+ voce.prossimaEsecuzione = new Date(ora.getTime() + voce.intervalloMinuti * 60_000).toISOString();
137
+ return scrivi(voce);
138
+ }
139
+
140
+ async function elimina(id) {
141
+ await fsAdapter.rm(percorsoDi(id), { force: true });
142
+ }
143
+
144
+ return Object.freeze({ elenca, leggi, crea, imposta, registraEsecuzione, elimina });
145
+ }