@vascend/talos 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 (620) hide show
  1. package/README.md +202 -0
  2. package/dist/backend/asset-events.d.ts +31 -0
  3. package/dist/backend/asset-events.js +149 -0
  4. package/dist/backend/assets.d.ts +31 -0
  5. package/dist/backend/assets.js +210 -0
  6. package/dist/backend/auth.d.ts +18 -0
  7. package/dist/backend/auth.js +59 -0
  8. package/dist/backend/config.d.ts +14 -0
  9. package/dist/backend/config.js +41 -0
  10. package/dist/backend/conversations.d.ts +21 -0
  11. package/dist/backend/conversations.js +141 -0
  12. package/dist/backend/crypto.d.ts +9 -0
  13. package/dist/backend/crypto.js +68 -0
  14. package/dist/backend/engine.d.ts +13 -0
  15. package/dist/backend/engine.js +78 -0
  16. package/dist/backend/http.d.ts +25 -0
  17. package/dist/backend/http.js +112 -0
  18. package/dist/backend/index.d.ts +1 -0
  19. package/dist/backend/index.js +24 -0
  20. package/dist/backend/routes.d.ts +14 -0
  21. package/dist/backend/routes.js +169 -0
  22. package/dist/backend/sdk.d.ts +12 -0
  23. package/dist/backend/sdk.js +11 -0
  24. package/dist/backend/server.d.ts +12 -0
  25. package/dist/backend/server.js +91 -0
  26. package/dist/backend/temp-image-store.d.ts +46 -0
  27. package/dist/backend/temp-image-store.js +197 -0
  28. package/dist/backend/types.d.ts +103 -0
  29. package/dist/backend/types.js +29 -0
  30. package/dist/backend/users.d.ts +13 -0
  31. package/dist/backend/users.js +76 -0
  32. package/dist/backend/ws-handler.d.ts +14 -0
  33. package/dist/backend/ws-handler.js +72 -0
  34. package/dist/backend/ws.d.ts +19 -0
  35. package/dist/backend/ws.js +146 -0
  36. package/dist/core/agent.d.ts +56 -0
  37. package/dist/core/agent.js +1783 -0
  38. package/dist/core/background.d.ts +45 -0
  39. package/dist/core/background.js +140 -0
  40. package/dist/core/bootstrap.d.ts +45 -0
  41. package/dist/core/bootstrap.js +294 -0
  42. package/dist/core/cli-args.d.ts +41 -0
  43. package/dist/core/cli-args.js +282 -0
  44. package/dist/core/collapsible-output.d.ts +38 -0
  45. package/dist/core/collapsible-output.js +143 -0
  46. package/dist/core/compaction-checkpoint.d.ts +9 -0
  47. package/dist/core/compaction-checkpoint.js +58 -0
  48. package/dist/core/compaction.d.ts +42 -0
  49. package/dist/core/compaction.js +270 -0
  50. package/dist/core/config.d.ts +49 -0
  51. package/dist/core/config.js +417 -0
  52. package/dist/core/context-ledger.d.ts +99 -0
  53. package/dist/core/context-ledger.js +222 -0
  54. package/dist/core/context-policy.d.ts +17 -0
  55. package/dist/core/context-policy.js +81 -0
  56. package/dist/core/continuation-review.d.ts +23 -0
  57. package/dist/core/continuation-review.js +64 -0
  58. package/dist/core/crash-report.d.ts +3 -0
  59. package/dist/core/crash-report.js +27 -0
  60. package/dist/core/credentials.d.ts +11 -0
  61. package/dist/core/credentials.js +183 -0
  62. package/dist/core/doctor.d.ts +24 -0
  63. package/dist/core/doctor.js +125 -0
  64. package/dist/core/effort.d.ts +5 -0
  65. package/dist/core/effort.js +42 -0
  66. package/dist/core/env-paths.d.ts +3 -0
  67. package/dist/core/env-paths.js +38 -0
  68. package/dist/core/execution-guidance.d.ts +9 -0
  69. package/dist/core/execution-guidance.js +73 -0
  70. package/dist/core/execution-target.d.ts +41 -0
  71. package/dist/core/execution-target.js +69 -0
  72. package/dist/core/file-coordination.d.ts +66 -0
  73. package/dist/core/file-coordination.js +176 -0
  74. package/dist/core/file-lease-store.d.ts +14 -0
  75. package/dist/core/file-lease-store.js +89 -0
  76. package/dist/core/image-limits.d.ts +26 -0
  77. package/dist/core/image-limits.js +205 -0
  78. package/dist/core/interruptible-completion.d.ts +3 -0
  79. package/dist/core/interruptible-completion.js +42 -0
  80. package/dist/core/kingdoms-mode-state.d.ts +24 -0
  81. package/dist/core/kingdoms-mode-state.js +139 -0
  82. package/dist/core/licenza.d.ts +38 -0
  83. package/dist/core/licenza.js +125 -0
  84. package/dist/core/model-limits.d.ts +2 -0
  85. package/dist/core/model-limits.js +36 -0
  86. package/dist/core/output-lifecycle.d.ts +44 -0
  87. package/dist/core/output-lifecycle.js +190 -0
  88. package/dist/core/package-update.d.ts +15 -0
  89. package/dist/core/package-update.js +121 -0
  90. package/dist/core/permission-queue.d.ts +2 -0
  91. package/dist/core/permission-queue.js +20 -0
  92. package/dist/core/prompt-attachment.d.ts +21 -0
  93. package/dist/core/prompt-attachment.js +123 -0
  94. package/dist/core/request-plan.d.ts +16 -0
  95. package/dist/core/request-plan.js +36 -0
  96. package/dist/core/run-timing.d.ts +17 -0
  97. package/dist/core/run-timing.js +123 -0
  98. package/dist/core/self-update.d.ts +17 -0
  99. package/dist/core/self-update.js +54 -0
  100. package/dist/core/session-refs.d.ts +27 -0
  101. package/dist/core/session-refs.js +126 -0
  102. package/dist/core/session-storage.d.ts +4 -0
  103. package/dist/core/session-storage.js +48 -0
  104. package/dist/core/session-title.d.ts +1 -0
  105. package/dist/core/session-title.js +21 -0
  106. package/dist/core/session-usage.d.ts +17 -0
  107. package/dist/core/session-usage.js +74 -0
  108. package/dist/core/session.d.ts +58 -0
  109. package/dist/core/session.js +296 -0
  110. package/dist/core/settings.d.ts +17 -0
  111. package/dist/core/settings.js +107 -0
  112. package/dist/core/storage-retention.d.ts +21 -0
  113. package/dist/core/storage-retention.js +227 -0
  114. package/dist/core/text-sanitize.d.ts +1 -0
  115. package/dist/core/text-sanitize.js +35 -0
  116. package/dist/core/tool-artifacts.d.ts +6 -0
  117. package/dist/core/tool-artifacts.js +51 -0
  118. package/dist/core/tool-compress.d.ts +8 -0
  119. package/dist/core/tool-compress.js +111 -0
  120. package/dist/core/tool-executor.d.ts +16 -0
  121. package/dist/core/tool-executor.js +97 -0
  122. package/dist/core/tool-result-index.d.ts +52 -0
  123. package/dist/core/tool-result-index.js +327 -0
  124. package/dist/core/tool-result-store.d.ts +38 -0
  125. package/dist/core/tool-result-store.js +190 -0
  126. package/dist/core/tool-scheduler.d.ts +16 -0
  127. package/dist/core/tool-scheduler.js +35 -0
  128. package/dist/core/trust.d.ts +21 -0
  129. package/dist/core/trust.js +95 -0
  130. package/dist/core/types.d.ts +402 -0
  131. package/dist/core/types.js +1 -0
  132. package/dist/core/update-check.d.ts +26 -0
  133. package/dist/core/update-check.js +89 -0
  134. package/dist/core/update-process.d.ts +10 -0
  135. package/dist/core/update-process.js +31 -0
  136. package/dist/core/user-inbox.d.ts +23 -0
  137. package/dist/core/user-inbox.js +56 -0
  138. package/dist/core/user-input.d.ts +10 -0
  139. package/dist/core/user-input.js +35 -0
  140. package/dist/core/version.d.ts +1 -0
  141. package/dist/core/version.js +10 -0
  142. package/dist/core/vibe-modes.d.ts +38 -0
  143. package/dist/core/vibe-modes.js +383 -0
  144. package/dist/core/workspace-roots.d.ts +13 -0
  145. package/dist/core/workspace-roots.js +91 -0
  146. package/dist/core/workspace-sessions.d.ts +51 -0
  147. package/dist/core/workspace-sessions.js +243 -0
  148. package/dist/cowork/client.d.ts +29 -0
  149. package/dist/cowork/client.js +49 -0
  150. package/dist/cowork/engine-bridge.d.ts +22 -0
  151. package/dist/cowork/engine-bridge.js +98 -0
  152. package/dist/cowork/index.d.ts +11 -0
  153. package/dist/cowork/index.js +16 -0
  154. package/dist/cowork/ipc.d.ts +97 -0
  155. package/dist/cowork/ipc.js +96 -0
  156. package/dist/cowork/manager.d.ts +66 -0
  157. package/dist/cowork/manager.js +325 -0
  158. package/dist/cowork/store.d.ts +23 -0
  159. package/dist/cowork/store.js +182 -0
  160. package/dist/cowork/sync.d.ts +20 -0
  161. package/dist/cowork/sync.js +164 -0
  162. package/dist/cowork/types.d.ts +78 -0
  163. package/dist/cowork/types.js +21 -0
  164. package/dist/extensions/ext-tools.d.ts +3 -0
  165. package/dist/extensions/ext-tools.js +73 -0
  166. package/dist/extensions/loader.d.ts +91 -0
  167. package/dist/extensions/loader.js +474 -0
  168. package/dist/extensions/settings.d.ts +20 -0
  169. package/dist/extensions/settings.js +86 -0
  170. package/dist/extensions/types.d.ts +219 -0
  171. package/dist/extensions/types.js +1 -0
  172. package/dist/horizon/async-queue.d.ts +9 -0
  173. package/dist/horizon/async-queue.js +46 -0
  174. package/dist/horizon/engine.d.ts +85 -0
  175. package/dist/horizon/engine.js +603 -0
  176. package/dist/horizon/index.d.ts +4 -0
  177. package/dist/horizon/index.js +2 -0
  178. package/dist/horizon/main-team.d.ts +163 -0
  179. package/dist/horizon/main-team.js +774 -0
  180. package/dist/horizon/types.d.ts +233 -0
  181. package/dist/horizon/types.js +1 -0
  182. package/dist/index.d.ts +2 -0
  183. package/dist/index.js +233 -0
  184. package/dist/mcp/protocol.d.ts +81 -0
  185. package/dist/mcp/protocol.js +122 -0
  186. package/dist/package.json +1 -0
  187. package/dist/packages/packages.d.ts +12 -0
  188. package/dist/packages/packages.js +323 -0
  189. package/dist/prompts/templates.d.ts +13 -0
  190. package/dist/prompts/templates.js +139 -0
  191. package/dist/providers/anthropic-oauth.d.ts +13 -0
  192. package/dist/providers/anthropic-oauth.js +124 -0
  193. package/dist/providers/anthropic.d.ts +27 -0
  194. package/dist/providers/anthropic.js +526 -0
  195. package/dist/providers/catalog.d.ts +15 -0
  196. package/dist/providers/catalog.js +166 -0
  197. package/dist/providers/effort.d.ts +12 -0
  198. package/dist/providers/effort.js +102 -0
  199. package/dist/providers/model-catalog.d.ts +43 -0
  200. package/dist/providers/model-catalog.js +70 -0
  201. package/dist/providers/model-effort.d.ts +5 -0
  202. package/dist/providers/model-effort.js +43 -0
  203. package/dist/providers/model-registry.d.ts +39 -0
  204. package/dist/providers/model-registry.js +142 -0
  205. package/dist/providers/models-dev.d.ts +9 -0
  206. package/dist/providers/models-dev.js +97 -0
  207. package/dist/providers/oauth-callback-server.d.ts +28 -0
  208. package/dist/providers/oauth-callback-server.js +184 -0
  209. package/dist/providers/oauth-orchestrator.d.ts +58 -0
  210. package/dist/providers/oauth-orchestrator.js +159 -0
  211. package/dist/providers/oauth-store.d.ts +12 -0
  212. package/dist/providers/oauth-store.js +139 -0
  213. package/dist/providers/open-browser.d.ts +20 -0
  214. package/dist/providers/open-browser.js +92 -0
  215. package/dist/providers/openai-compat.d.ts +14 -0
  216. package/dist/providers/openai-compat.js +523 -0
  217. package/dist/providers/openai-oauth.d.ts +15 -0
  218. package/dist/providers/openai-oauth.js +382 -0
  219. package/dist/providers/openrouter-auth.d.ts +73 -0
  220. package/dist/providers/openrouter-auth.js +321 -0
  221. package/dist/providers/openrouter-manual-fallback.d.ts +25 -0
  222. package/dist/providers/openrouter-manual-fallback.js +161 -0
  223. package/dist/providers/openrouter.d.ts +15 -0
  224. package/dist/providers/openrouter.js +107 -0
  225. package/dist/providers/plan-limits.d.ts +6 -0
  226. package/dist/providers/plan-limits.js +175 -0
  227. package/dist/providers/provider-reset.d.ts +4 -0
  228. package/dist/providers/provider-reset.js +83 -0
  229. package/dist/providers/quota-limits.d.ts +4 -0
  230. package/dist/providers/quota-limits.js +33 -0
  231. package/dist/providers/registry.d.ts +33 -0
  232. package/dist/providers/registry.js +213 -0
  233. package/dist/providers/retry.d.ts +37 -0
  234. package/dist/providers/retry.js +347 -0
  235. package/dist/rpc/server.d.ts +23 -0
  236. package/dist/rpc/server.js +222 -0
  237. package/dist/sdk.d.ts +67 -0
  238. package/dist/sdk.js +64 -0
  239. package/dist/skills/skills.d.ts +17 -0
  240. package/dist/skills/skills.js +155 -0
  241. package/dist/text-sanitize.js +28 -0
  242. package/dist/tools/ask-user.d.ts +2 -0
  243. package/dist/tools/ask-user.js +60 -0
  244. package/dist/tools/builtin.d.ts +48 -0
  245. package/dist/tools/builtin.js +2494 -0
  246. package/dist/tools/capabilities.d.ts +5 -0
  247. package/dist/tools/capabilities.js +55 -0
  248. package/dist/tools/computer-capture.d.ts +2 -0
  249. package/dist/tools/computer-capture.js +91 -0
  250. package/dist/tools/computer-posix.d.ts +5 -0
  251. package/dist/tools/computer-posix.js +136 -0
  252. package/dist/tools/computer-use.d.ts +14 -0
  253. package/dist/tools/computer-use.js +108 -0
  254. package/dist/tools/discovery.d.ts +12 -0
  255. package/dist/tools/discovery.js +205 -0
  256. package/dist/tools/execute.d.ts +2 -0
  257. package/dist/tools/execute.js +73 -0
  258. package/dist/tools/normalize-input.d.ts +17 -0
  259. package/dist/tools/normalize-input.js +174 -0
  260. package/dist/tools/output-artifact.d.ts +3 -0
  261. package/dist/tools/output-artifact.js +80 -0
  262. package/dist/tools/pagination.d.ts +15 -0
  263. package/dist/tools/pagination.js +93 -0
  264. package/dist/tools/plan-status.d.ts +2 -0
  265. package/dist/tools/plan-status.js +109 -0
  266. package/dist/tools/program-input.d.ts +3 -0
  267. package/dist/tools/program-input.js +19 -0
  268. package/dist/tools/program.d.ts +3 -0
  269. package/dist/tools/program.js +567 -0
  270. package/dist/tools/protocol-catalog.d.ts +12 -0
  271. package/dist/tools/protocol-catalog.js +46 -0
  272. package/dist/tools/ramification-tools.d.ts +12 -0
  273. package/dist/tools/ramification-tools.js +528 -0
  274. package/dist/tools/regex-compat.d.ts +9 -0
  275. package/dist/tools/regex-compat.js +96 -0
  276. package/dist/tools/registry.d.ts +51 -0
  277. package/dist/tools/registry.js +185 -0
  278. package/dist/tools/resolve.d.ts +2 -0
  279. package/dist/tools/resolve.js +107 -0
  280. package/dist/tools/shell-env.d.ts +2 -0
  281. package/dist/tools/shell-env.js +7 -0
  282. package/dist/tools/team-input.d.ts +3 -0
  283. package/dist/tools/team-input.js +129 -0
  284. package/dist/tools/team-tools.d.ts +7 -0
  285. package/dist/tools/team-tools.js +348 -0
  286. package/dist/tools/workspace-sessions.d.ts +2 -0
  287. package/dist/tools/workspace-sessions.js +35 -0
  288. package/dist/tui/account-entry.d.ts +1 -0
  289. package/dist/tui/account-entry.js +93 -0
  290. package/dist/tui/attachment-highlight.d.ts +1 -0
  291. package/dist/tui/attachment-highlight.js +24 -0
  292. package/dist/tui/attachment-refs.d.ts +2 -0
  293. package/dist/tui/attachment-refs.js +3 -0
  294. package/dist/tui/bottom-input.d.ts +219 -0
  295. package/dist/tui/bottom-input.js +1958 -0
  296. package/dist/tui/branding.d.ts +107 -0
  297. package/dist/tui/branding.js +750 -0
  298. package/dist/tui/clipboard-image.d.ts +10 -0
  299. package/dist/tui/clipboard-image.js +163 -0
  300. package/dist/tui/clipboard-text.d.ts +9 -0
  301. package/dist/tui/clipboard-text.js +51 -0
  302. package/dist/tui/clipboard-windows.d.ts +8 -0
  303. package/dist/tui/clipboard-windows.js +84 -0
  304. package/dist/tui/collapsible-command.d.ts +15 -0
  305. package/dist/tui/collapsible-command.js +48 -0
  306. package/dist/tui/command-feedback.d.ts +10 -0
  307. package/dist/tui/command-feedback.js +46 -0
  308. package/dist/tui/command-output-registry.d.ts +28 -0
  309. package/dist/tui/command-output-registry.js +103 -0
  310. package/dist/tui/command-transcript.d.ts +12 -0
  311. package/dist/tui/command-transcript.js +90 -0
  312. package/dist/tui/commands.d.ts +20 -0
  313. package/dist/tui/commands.js +131 -0
  314. package/dist/tui/context-bar.d.ts +4 -0
  315. package/dist/tui/context-bar.js +74 -0
  316. package/dist/tui/context-meter.d.ts +25 -0
  317. package/dist/tui/context-meter.js +81 -0
  318. package/dist/tui/cost-binding.d.ts +8 -0
  319. package/dist/tui/cost-binding.js +43 -0
  320. package/dist/tui/cost-tracker.d.ts +49 -0
  321. package/dist/tui/cost-tracker.js +122 -0
  322. package/dist/tui/diff.d.ts +9 -0
  323. package/dist/tui/diff.js +119 -0
  324. package/dist/tui/i18n-catalog.d.ts +5 -0
  325. package/dist/tui/i18n-catalog.js +184 -0
  326. package/dist/tui/i18n.d.ts +6 -0
  327. package/dist/tui/i18n.js +10 -0
  328. package/dist/tui/image-attachments.d.ts +46 -0
  329. package/dist/tui/image-attachments.js +167 -0
  330. package/dist/tui/images.d.ts +12 -0
  331. package/dist/tui/images.js +87 -0
  332. package/dist/tui/intro.d.ts +13 -0
  333. package/dist/tui/intro.js +109 -0
  334. package/dist/tui/language-preference.d.ts +6 -0
  335. package/dist/tui/language-preference.js +24 -0
  336. package/dist/tui/live-output.d.ts +2 -0
  337. package/dist/tui/live-output.js +18 -0
  338. package/dist/tui/locales.d.ts +19 -0
  339. package/dist/tui/locales.js +22 -0
  340. package/dist/tui/login-menu.d.ts +17 -0
  341. package/dist/tui/login-menu.js +58 -0
  342. package/dist/tui/logo.d.ts +8 -0
  343. package/dist/tui/logo.js +305 -0
  344. package/dist/tui/markdown-inline.d.ts +3 -0
  345. package/dist/tui/markdown-inline.js +99 -0
  346. package/dist/tui/markdown-table.d.ts +4 -0
  347. package/dist/tui/markdown-table.js +63 -0
  348. package/dist/tui/markdown.d.ts +11 -0
  349. package/dist/tui/markdown.js +257 -0
  350. package/dist/tui/mcp-transcript.d.ts +7 -0
  351. package/dist/tui/mcp-transcript.js +40 -0
  352. package/dist/tui/model-details.d.ts +2 -0
  353. package/dist/tui/model-details.js +21 -0
  354. package/dist/tui/model-selection.d.ts +7 -0
  355. package/dist/tui/model-selection.js +41 -0
  356. package/dist/tui/native-scrollback.d.ts +27 -0
  357. package/dist/tui/native-scrollback.js +134 -0
  358. package/dist/tui/onboarding.d.ts +72 -0
  359. package/dist/tui/onboarding.js +207 -0
  360. package/dist/tui/paste-collapse.d.ts +39 -0
  361. package/dist/tui/paste-collapse.js +117 -0
  362. package/dist/tui/perm-mode.d.ts +8 -0
  363. package/dist/tui/perm-mode.js +41 -0
  364. package/dist/tui/prompt-queue-store.d.ts +26 -0
  365. package/dist/tui/prompt-queue-store.js +87 -0
  366. package/dist/tui/prompt-queue.d.ts +47 -0
  367. package/dist/tui/prompt-queue.js +187 -0
  368. package/dist/tui/provider-menu.d.ts +33 -0
  369. package/dist/tui/provider-menu.js +175 -0
  370. package/dist/tui/question.d.ts +24 -0
  371. package/dist/tui/question.js +32 -0
  372. package/dist/tui/queue-screen.d.ts +25 -0
  373. package/dist/tui/queue-screen.js +152 -0
  374. package/dist/tui/queue-team.d.ts +3 -0
  375. package/dist/tui/queue-team.js +28 -0
  376. package/dist/tui/queued-questions.d.ts +20 -0
  377. package/dist/tui/queued-questions.js +163 -0
  378. package/dist/tui/quick-help.d.ts +1 -0
  379. package/dist/tui/quick-help.js +53 -0
  380. package/dist/tui/repl.d.ts +78 -0
  381. package/dist/tui/repl.js +4130 -0
  382. package/dist/tui/restore-queued-input.d.ts +3 -0
  383. package/dist/tui/restore-queued-input.js +20 -0
  384. package/dist/tui/review-detail.d.ts +6 -0
  385. package/dist/tui/review-detail.js +56 -0
  386. package/dist/tui/review-files.d.ts +3 -0
  387. package/dist/tui/review-files.js +22 -0
  388. package/dist/tui/review-render.d.ts +22 -0
  389. package/dist/tui/review-render.js +98 -0
  390. package/dist/tui/review-screen.d.ts +38 -0
  391. package/dist/tui/review-screen.js +358 -0
  392. package/dist/tui/review-store.d.ts +60 -0
  393. package/dist/tui/review-store.js +270 -0
  394. package/dist/tui/review-team.d.ts +2 -0
  395. package/dist/tui/review-team.js +27 -0
  396. package/dist/tui/selector-mouse.d.ts +26 -0
  397. package/dist/tui/selector-mouse.js +65 -0
  398. package/dist/tui/selector.d.ts +51 -0
  399. package/dist/tui/selector.js +299 -0
  400. package/dist/tui/session-replay.d.ts +10 -0
  401. package/dist/tui/session-replay.js +78 -0
  402. package/dist/tui/session-usage.d.ts +22 -0
  403. package/dist/tui/session-usage.js +55 -0
  404. package/dist/tui/skill-transcript.d.ts +5 -0
  405. package/dist/tui/skill-transcript.js +31 -0
  406. package/dist/tui/startup.d.ts +5 -0
  407. package/dist/tui/startup.js +61 -0
  408. package/dist/tui/status-line-loader.d.ts +8 -0
  409. package/dist/tui/status-line-loader.js +33 -0
  410. package/dist/tui/status-line.d.ts +38 -0
  411. package/dist/tui/status-line.js +213 -0
  412. package/dist/tui/system-language.d.ts +8 -0
  413. package/dist/tui/system-language.js +41 -0
  414. package/dist/tui/task-labels.d.ts +2 -0
  415. package/dist/tui/task-labels.js +7 -0
  416. package/dist/tui/term-bg.d.ts +4 -0
  417. package/dist/tui/term-bg.js +67 -0
  418. package/dist/tui/terminal-screen.d.ts +12 -0
  419. package/dist/tui/terminal-screen.js +1 -0
  420. package/dist/tui/terminal-text.d.ts +7 -0
  421. package/dist/tui/terminal-text.js +123 -0
  422. package/dist/tui/theme.d.ts +25 -0
  423. package/dist/tui/theme.js +383 -0
  424. package/dist/tui/tool-style.d.ts +7 -0
  425. package/dist/tui/tool-style.js +119 -0
  426. package/dist/tui/update-prompt.d.ts +14 -0
  427. package/dist/tui/update-prompt.js +104 -0
  428. package/dist/tui/usage-footer.d.ts +9 -0
  429. package/dist/tui/usage-footer.js +123 -0
  430. package/dist/tui/vascend-login.d.ts +68 -0
  431. package/dist/tui/vascend-login.js +355 -0
  432. package/dist/tui/web-login.d.ts +28 -0
  433. package/dist/tui/web-login.js +115 -0
  434. package/dist/vascend/activity-status.d.ts +12 -0
  435. package/dist/vascend/activity-status.js +68 -0
  436. package/dist/vascend/architecture-map.d.ts +73 -0
  437. package/dist/vascend/architecture-map.js +424 -0
  438. package/dist/vascend/attention-layout.d.ts +19 -0
  439. package/dist/vascend/attention-layout.js +141 -0
  440. package/dist/vascend/budget-allocator.d.ts +31 -0
  441. package/dist/vascend/budget-allocator.js +79 -0
  442. package/dist/vascend/candidate-collector.d.ts +20 -0
  443. package/dist/vascend/candidate-collector.js +220 -0
  444. package/dist/vascend/code-events.d.ts +24 -0
  445. package/dist/vascend/code-events.js +304 -0
  446. package/dist/vascend/code-graph-memory.d.ts +38 -0
  447. package/dist/vascend/code-graph-memory.js +334 -0
  448. package/dist/vascend/code-graph-runtime.d.ts +19 -0
  449. package/dist/vascend/code-graph-runtime.js +190 -0
  450. package/dist/vascend/code-graph-types.d.ts +58 -0
  451. package/dist/vascend/code-graph-types.js +50 -0
  452. package/dist/vascend/code-parser.d.ts +4 -0
  453. package/dist/vascend/code-parser.js +257 -0
  454. package/dist/vascend/competitor-knowledge.d.ts +53 -0
  455. package/dist/vascend/competitor-knowledge.js +262 -0
  456. package/dist/vascend/completeness.d.ts +16 -0
  457. package/dist/vascend/completeness.js +90 -0
  458. package/dist/vascend/context-autotuner.d.ts +45 -0
  459. package/dist/vascend/context-autotuner.js +231 -0
  460. package/dist/vascend/context-candidate.d.ts +45 -0
  461. package/dist/vascend/context-candidate.js +150 -0
  462. package/dist/vascend/context-capsule.d.ts +51 -0
  463. package/dist/vascend/context-capsule.js +133 -0
  464. package/dist/vascend/context-fabric.d.ts +108 -0
  465. package/dist/vascend/context-fabric.js +480 -0
  466. package/dist/vascend/context-feedback-loop.d.ts +56 -0
  467. package/dist/vascend/context-feedback-loop.js +204 -0
  468. package/dist/vascend/context-learning-identity.d.ts +4 -0
  469. package/dist/vascend/context-learning-identity.js +8 -0
  470. package/dist/vascend/context-links.d.ts +14 -0
  471. package/dist/vascend/context-links.js +83 -0
  472. package/dist/vascend/context-lint.d.ts +22 -0
  473. package/dist/vascend/context-lint.js +91 -0
  474. package/dist/vascend/context-market-selection.d.ts +17 -0
  475. package/dist/vascend/context-market-selection.js +50 -0
  476. package/dist/vascend/context-metrics.d.ts +25 -0
  477. package/dist/vascend/context-metrics.js +57 -0
  478. package/dist/vascend/context-pack-render.d.ts +16 -0
  479. package/dist/vascend/context-pack-render.js +52 -0
  480. package/dist/vascend/context-pareto.d.ts +33 -0
  481. package/dist/vascend/context-pareto.js +165 -0
  482. package/dist/vascend/context-pattern-explorer.d.ts +41 -0
  483. package/dist/vascend/context-pattern-explorer.js +276 -0
  484. package/dist/vascend/context-regret.d.ts +32 -0
  485. package/dist/vascend/context-regret.js +93 -0
  486. package/dist/vascend/context-retriever.d.ts +22 -0
  487. package/dist/vascend/context-retriever.js +243 -0
  488. package/dist/vascend/context-scope-index.d.ts +5 -0
  489. package/dist/vascend/context-scope-index.js +96 -0
  490. package/dist/vascend/context-scorer.d.ts +35 -0
  491. package/dist/vascend/context-scorer.js +162 -0
  492. package/dist/vascend/context-search-index.d.ts +12 -0
  493. package/dist/vascend/context-search-index.js +25 -0
  494. package/dist/vascend/context-snapshot.d.ts +22 -0
  495. package/dist/vascend/context-snapshot.js +135 -0
  496. package/dist/vascend/context-window-compiler.d.ts +42 -0
  497. package/dist/vascend/context-window-compiler.js +237 -0
  498. package/dist/vascend/contract-memory.d.ts +61 -0
  499. package/dist/vascend/contract-memory.js +435 -0
  500. package/dist/vascend/council.d.ts +58 -0
  501. package/dist/vascend/council.js +337 -0
  502. package/dist/vascend/decision-promotion.d.ts +48 -0
  503. package/dist/vascend/decision-promotion.js +410 -0
  504. package/dist/vascend/delta-context.d.ts +12 -0
  505. package/dist/vascend/delta-context.js +36 -0
  506. package/dist/vascend/dev-context-compiler.d.ts +27 -0
  507. package/dist/vascend/dev-context-compiler.js +133 -0
  508. package/dist/vascend/dev-context-layout.d.ts +30 -0
  509. package/dist/vascend/dev-context-layout.js +262 -0
  510. package/dist/vascend/evidence-slots.d.ts +14 -0
  511. package/dist/vascend/evidence-slots.js +55 -0
  512. package/dist/vascend/expansion-levels.d.ts +15 -0
  513. package/dist/vascend/expansion-levels.js +178 -0
  514. package/dist/vascend/file-lock.d.ts +7 -0
  515. package/dist/vascend/file-lock.js +95 -0
  516. package/dist/vascend/granular-kingdom.d.ts +25 -0
  517. package/dist/vascend/granular-kingdom.js +259 -0
  518. package/dist/vascend/granular-launcher.d.ts +48 -0
  519. package/dist/vascend/granular-launcher.js +202 -0
  520. package/dist/vascend/kingdom-bus.d.ts +25 -0
  521. package/dist/vascend/kingdom-bus.js +54 -0
  522. package/dist/vascend/kingdom-channel.d.ts +22 -0
  523. package/dist/vascend/kingdom-channel.js +180 -0
  524. package/dist/vascend/kingdom-kpi.d.ts +48 -0
  525. package/dist/vascend/kingdom-kpi.js +172 -0
  526. package/dist/vascend/kingdom-live.d.ts +28 -0
  527. package/dist/vascend/kingdom-live.js +61 -0
  528. package/dist/vascend/kingdom-run.d.ts +18 -0
  529. package/dist/vascend/kingdom-run.js +506 -0
  530. package/dist/vascend/kingdom-scribe.d.ts +20 -0
  531. package/dist/vascend/kingdom-scribe.js +52 -0
  532. package/dist/vascend/kingdom.d.ts +79 -0
  533. package/dist/vascend/kingdom.js +870 -0
  534. package/dist/vascend/lexical-index.d.ts +10 -0
  535. package/dist/vascend/lexical-index.js +99 -0
  536. package/dist/vascend/lexical-search.d.ts +29 -0
  537. package/dist/vascend/lexical-search.js +262 -0
  538. package/dist/vascend/long-term-context.d.ts +51 -0
  539. package/dist/vascend/long-term-context.js +194 -0
  540. package/dist/vascend/mandate.d.ts +33 -0
  541. package/dist/vascend/mandate.js +107 -0
  542. package/dist/vascend/memory-packet.d.ts +13 -0
  543. package/dist/vascend/memory-packet.js +155 -0
  544. package/dist/vascend/memory-status.d.ts +22 -0
  545. package/dist/vascend/memory-status.js +73 -0
  546. package/dist/vascend/memory-store.d.ts +62 -0
  547. package/dist/vascend/memory-store.js +273 -0
  548. package/dist/vascend/objective-revision.d.ts +69 -0
  549. package/dist/vascend/objective-revision.js +319 -0
  550. package/dist/vascend/patch-plan-store.d.ts +33 -0
  551. package/dist/vascend/patch-plan-store.js +240 -0
  552. package/dist/vascend/patch-plan.d.ts +97 -0
  553. package/dist/vascend/patch-plan.js +345 -0
  554. package/dist/vascend/plan-progress.d.ts +11 -0
  555. package/dist/vascend/plan-progress.js +68 -0
  556. package/dist/vascend/plan-store.d.ts +64 -0
  557. package/dist/vascend/plan-store.js +460 -0
  558. package/dist/vascend/proof-chains.d.ts +19 -0
  559. package/dist/vascend/proof-chains.js +120 -0
  560. package/dist/vascend/ramification-store.d.ts +25 -0
  561. package/dist/vascend/ramification-store.js +94 -0
  562. package/dist/vascend/ramification.d.ts +193 -0
  563. package/dist/vascend/ramification.js +583 -0
  564. package/dist/vascend/recall-planner.d.ts +17 -0
  565. package/dist/vascend/recall-planner.js +109 -0
  566. package/dist/vascend/requirements.d.ts +31 -0
  567. package/dist/vascend/requirements.js +151 -0
  568. package/dist/vascend/reviewer.d.ts +9 -0
  569. package/dist/vascend/reviewer.js +93 -0
  570. package/dist/vascend/room-graph.d.ts +29 -0
  571. package/dist/vascend/room-graph.js +242 -0
  572. package/dist/vascend/room-memory.d.ts +57 -0
  573. package/dist/vascend/room-memory.js +631 -0
  574. package/dist/vascend/runtime.d.ts +84 -0
  575. package/dist/vascend/runtime.js +286 -0
  576. package/dist/vascend/self-improve.d.ts +104 -0
  577. package/dist/vascend/self-improve.js +396 -0
  578. package/dist/vascend/session-search.d.ts +52 -0
  579. package/dist/vascend/session-search.js +349 -0
  580. package/dist/vascend/supersession-graph.d.ts +14 -0
  581. package/dist/vascend/supersession-graph.js +70 -0
  582. package/dist/vascend/team-areas.d.ts +9 -0
  583. package/dist/vascend/team-areas.js +28 -0
  584. package/dist/vascend/team-handoff.d.ts +24 -0
  585. package/dist/vascend/team-handoff.js +37 -0
  586. package/dist/vascend/team-scheduler.d.ts +13 -0
  587. package/dist/vascend/team-scheduler.js +74 -0
  588. package/dist/vascend/team-session.d.ts +42 -0
  589. package/dist/vascend/team-session.js +142 -0
  590. package/dist/vascend/test-failure-memory.d.ts +76 -0
  591. package/dist/vascend/test-failure-memory.js +354 -0
  592. package/dist/vascend/token-market.d.ts +42 -0
  593. package/dist/vascend/token-market.js +144 -0
  594. package/dist/vascend/tuner-baseline-store.d.ts +52 -0
  595. package/dist/vascend/tuner-baseline-store.js +446 -0
  596. package/dist/vascend/user-profile.d.ts +44 -0
  597. package/dist/vascend/user-profile.js +131 -0
  598. package/dist/vascend/vision.d.ts +94 -0
  599. package/dist/vascend/vision.js +375 -0
  600. package/dist/vascend/work-agent.d.ts +12 -0
  601. package/dist/vascend/work-agent.js +83 -0
  602. package/dist/vascend/work-queue.d.ts +62 -0
  603. package/dist/vascend/work-queue.js +255 -0
  604. package/dist/vascend/work-runner.d.ts +64 -0
  605. package/dist/vascend/work-runner.js +137 -0
  606. package/dist/vascend/worktree.d.ts +38 -0
  607. package/dist/vascend/worktree.js +206 -0
  608. package/dist/vendor/computer-use/README.md +7 -0
  609. package/dist/vendor/computer-use/computer-desktop.js +211 -0
  610. package/dist/vendor/computer-use/computer-observe.js +315 -0
  611. package/dist/vendor/computer-use/computer-scripts.js +1230 -0
  612. package/dist/vendor/computer-use/computer-tools.js +2136 -0
  613. package/dist/vendor/computer-use/package.json +1 -0
  614. package/dist/vendor/computer-use/rac/atomic-input.js +91 -0
  615. package/dist/vendor/computer-use/rac/grammatica.js +101 -0
  616. package/dist/vendor/computer-use/rac/parser.js +185 -0
  617. package/dist/vendor/computer-use/rac/protocol.js +136 -0
  618. package/install.ps1 +30 -0
  619. package/install.sh +50 -0
  620. package/package.json +56 -0
@@ -0,0 +1,282 @@
1
+ import { parseVibeMode } from "./vibe-modes.js";
2
+ import { SessionIdError, validateSessionId } from "./session.js";
3
+ export class CliArgumentError extends Error {
4
+ exitCode = 2;
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "CliArgumentError";
8
+ }
9
+ }
10
+ export function parseCliArgs(argv) {
11
+ const args = {
12
+ mode: "tui",
13
+ json: false,
14
+ yolo: false,
15
+ addDirs: [],
16
+ promptTemplates: [],
17
+ skills: [],
18
+ noSkills: false,
19
+ excludeTools: [],
20
+ help: false,
21
+ version: false,
22
+ extensionFlags: [],
23
+ };
24
+ const positional = [];
25
+ let explicitMode = null;
26
+ let afterDoubleDash = false;
27
+ const requireValue = (index, flag) => {
28
+ const value = argv[index + 1];
29
+ if (!value || value.startsWith("-"))
30
+ throw new CliArgumentError(`${flag} richiede un valore`);
31
+ return value;
32
+ };
33
+ const requirePositive = (index, flag) => {
34
+ const raw = Number(requireValue(index, flag));
35
+ if (!Number.isFinite(raw) || raw <= 0)
36
+ throw new CliArgumentError(`${flag} richiede un numero maggiore di zero`);
37
+ return Math.trunc(raw);
38
+ };
39
+ const setMode = (mode, flag) => {
40
+ if (explicitMode && explicitMode !== mode) {
41
+ throw new CliArgumentError(`${flag} e la modalita' ${explicitMode} non possono essere usati insieme`);
42
+ }
43
+ explicitMode = mode;
44
+ args.mode = mode;
45
+ };
46
+ for (let i = 0; i < argv.length; i += 1) {
47
+ const token = argv[i];
48
+ if (afterDoubleDash) {
49
+ positional.push(token);
50
+ continue;
51
+ }
52
+ if (token === "--") {
53
+ afterDoubleDash = true;
54
+ continue;
55
+ }
56
+ switch (token) {
57
+ case "-h":
58
+ case "--help":
59
+ args.help = true;
60
+ break;
61
+ case "-V":
62
+ case "--version":
63
+ args.version = true;
64
+ break;
65
+ case "-p":
66
+ case "--print":
67
+ setMode("print", token);
68
+ break;
69
+ case "--rpc":
70
+ setMode("rpc", token);
71
+ break;
72
+ case "--doctor":
73
+ setMode("doctor", token);
74
+ break;
75
+ // Lavoro autonomo: il ciclo fuori dalla conversazione.
76
+ case "--work":
77
+ setMode("work", token);
78
+ break;
79
+ case "--work-list":
80
+ setMode("work", token);
81
+ args.workList = true;
82
+ break;
83
+ case "--work-scope":
84
+ setMode("work", token);
85
+ args.workScope = requireValue(i, token);
86
+ i += 1;
87
+ break;
88
+ case "--work-verify":
89
+ setMode("work", token);
90
+ args.workVerify = requireValue(i, token);
91
+ i += 1;
92
+ break;
93
+ case "--work-max":
94
+ setMode("work", token);
95
+ args.workMax = requirePositive(i, token);
96
+ i += 1;
97
+ break;
98
+ case "--work-minutes":
99
+ setMode("work", token);
100
+ args.workMinutes = requirePositive(i, token);
101
+ i += 1;
102
+ break;
103
+ case "--json":
104
+ args.json = true;
105
+ break;
106
+ case "--yolo":
107
+ args.yolo = true;
108
+ break;
109
+ case "-m":
110
+ case "--model":
111
+ args.model = requireValue(i, token);
112
+ i += 1;
113
+ break;
114
+ case "-C":
115
+ case "--cwd":
116
+ args.cwd = requireValue(i, token);
117
+ i += 1;
118
+ break;
119
+ case "--add-dir":
120
+ args.addDirs.push(requireValue(i, token));
121
+ i += 1;
122
+ break;
123
+ case "--config":
124
+ args.config = requireValue(i, token);
125
+ i += 1;
126
+ break;
127
+ case "--prompt-template":
128
+ args.promptTemplates.push(requireValue(i, token));
129
+ i += 1;
130
+ break;
131
+ case "--skill":
132
+ args.skills.push(requireValue(i, token));
133
+ i += 1;
134
+ break;
135
+ case "--no-skills":
136
+ args.noSkills = true;
137
+ break;
138
+ case "--approve":
139
+ args.approve = true;
140
+ break;
141
+ case "--no-approve":
142
+ args.noApprove = true;
143
+ break;
144
+ case "--session-id":
145
+ args.sessionId = requireValue(i, token);
146
+ i += 1;
147
+ break;
148
+ case "-c":
149
+ case "--continue":
150
+ args.continueLast = true;
151
+ break;
152
+ case "--resume": {
153
+ const next = argv[i + 1];
154
+ if (next && !next.startsWith("-")) {
155
+ args.sessionId = next;
156
+ i += 1;
157
+ }
158
+ else {
159
+ args.resumePicker = true;
160
+ }
161
+ break;
162
+ }
163
+ case "--name":
164
+ args.name = requireValue(i, token);
165
+ i += 1;
166
+ break;
167
+ case "--exclude-tools":
168
+ args.excludeTools.push(...requireValue(i, token).split(",").map((value) => value.trim()).filter(Boolean));
169
+ i += 1;
170
+ break;
171
+ case "--vibe":
172
+ case "--mode": {
173
+ const raw = requireValue(i, token);
174
+ const parsed = parseVibeMode(raw);
175
+ if (!parsed)
176
+ throw new CliArgumentError(`modalita' vibe sconosciuta: ${raw}`);
177
+ args.vibeMode = parsed;
178
+ i += 1;
179
+ break;
180
+ }
181
+ default: {
182
+ if (token.startsWith("--")) {
183
+ // Le estensioni vengono caricate dopo il parsing core. I flag custom
184
+ // con valore usano --nome=valore, evitando ambiguita' col prompt.
185
+ const eq = token.indexOf("=");
186
+ args.extensionFlags.push(eq > 2
187
+ ? { name: token.slice(0, eq), value: token.slice(eq + 1) }
188
+ : { name: token });
189
+ }
190
+ else if (token.startsWith("-")) {
191
+ throw new CliArgumentError(`flag sconosciuto: ${token}`);
192
+ }
193
+ else {
194
+ positional.push(token);
195
+ }
196
+ }
197
+ }
198
+ }
199
+ if (args.help || args.version)
200
+ return Object.freeze({ ...args });
201
+ if (args.sessionId) {
202
+ try {
203
+ args.sessionId = validateSessionId(args.sessionId);
204
+ }
205
+ catch (err) {
206
+ if (err instanceof SessionIdError)
207
+ throw new CliArgumentError(err.message);
208
+ throw err;
209
+ }
210
+ }
211
+ if (args.approve && args.noApprove)
212
+ throw new CliArgumentError("--approve e --no-approve sono incompatibili");
213
+ if (args.continueLast && (args.sessionId || args.resumePicker)) {
214
+ throw new CliArgumentError("--continue non puo' essere combinato con --resume/--session-id");
215
+ }
216
+ if (args.resumePicker && args.mode !== "tui") {
217
+ throw new CliArgumentError("--resume senza id richiede la TUI");
218
+ }
219
+ if (args.json && args.mode === "tui") {
220
+ throw new CliArgumentError("--json richiede --print, --rpc, --doctor o --work");
221
+ }
222
+ if (positional.length) {
223
+ if (args.mode !== "print") {
224
+ throw new CliArgumentError("un prompt posizionale richiede --print (-p)");
225
+ }
226
+ args.prompt = positional.join(" ");
227
+ }
228
+ return Object.freeze({ ...args });
229
+ }
230
+ export function cliHelp() {
231
+ return `Horizon - agente Vascend da terminale
232
+
233
+ USO
234
+ horizon [opzioni]
235
+ horizon --print [opzioni] "prompt"
236
+ horizon --rpc [opzioni]
237
+ horizon --doctor
238
+ horizon --work [--work-verify "npm test"] [--work-max N] [--work-minutes N]
239
+
240
+ MODALITA'
241
+ -p, --print esegue un prompt one-shot
242
+ --rpc protocollo JSONL su stdin/stdout
243
+ --doctor diagnostica ambiente (provider, modello, sessioni)
244
+ --json emette AgentEvent JSONL (print/RPC/work) o il report doctor
245
+
246
+ LAVORO AUTONOMO (il ciclo sta fuori dalla conversazione)
247
+ --work prende le unita' dalla coda, una per agente NUOVO
248
+ --work-list mostra la coda (stati, lease, tentativi) e esce
249
+ --work-scope <nome> coda e memoria condivisa del progetto (default: default)
250
+ --work-verify <cmd> comando che decide se un'unita' e' fatta (exit code)
251
+ --work-max <N> quante unita' al massimo in questo giro (default 25)
252
+ --work-minutes <N> smette di rivendicare dopo N minuti
253
+
254
+ MODELLO E CONTESTO
255
+ -m, --model <provider/id> seleziona provider e modello
256
+ -C, --cwd <path> workspace seguito
257
+ --add-dir <path> aggiunge una root allo stesso workspace (ripetibile)
258
+ --vibe <modalita> auto, flow, debug, architect, ui, ship,
259
+ migrate, security, swarm, ultracheck, ...
260
+ --config <path> config esplicita
261
+ --prompt-template <p> directory/file template aggiuntivo (ripetibile)
262
+ --skill <path> skill aggiuntiva (ripetibile)
263
+ --no-skills disabilita discovery skill
264
+
265
+ SESSIONE E SICUREZZA
266
+ -c, --continue riprende l'ultima sessione
267
+ --resume [id] riprende id; senza id apre il picker TUI
268
+ --session-id <id> usa una sessione specifica
269
+ --name <nome> assegna un nome alla sessione
270
+ --approve considera fidate le risorse locali
271
+ --no-approve nega le risorse locali
272
+ --yolo auto-approva i tool (anche in TUI; usare con cautela)
273
+ --exclude-tools <a,b> rimuove tool dal registry
274
+
275
+ ALTRO
276
+ -h, --help mostra questo aiuto
277
+ -V, --version mostra la versione
278
+ -- termina il parsing delle opzioni
279
+
280
+ I flag delle estensioni sono accettati dopo il bootstrap. Per un valore usa
281
+ la forma non ambigua --nome=valore.`;
282
+ }
@@ -0,0 +1,38 @@
1
+ export type CollapsibleState = "open" | "closed";
2
+ export type ContentSource = string | (() => string);
3
+ export interface CollapsibleOptions {
4
+ readonly summary: string;
5
+ readonly content: ContentSource;
6
+ readonly open?: boolean;
7
+ readonly onCleanup?: (id: string) => void;
8
+ }
9
+ export interface Collapsible {
10
+ readonly id: string;
11
+ summary: string;
12
+ state: CollapsibleState;
13
+ readonly createdAt: number;
14
+ readonly source: ContentSource;
15
+ materialized: string | null;
16
+ readonly onCleanup?: (id: string) => void;
17
+ }
18
+ export declare class CollapsibleRegistry {
19
+ private readonly items;
20
+ private readonly order;
21
+ private seq;
22
+ private readonly changeCbs;
23
+ register(opts: CollapsibleOptions): string;
24
+ get(id: string): Collapsible | undefined;
25
+ list(): readonly Collapsible[];
26
+ isOpen(id: string): boolean;
27
+ render(id: string): string;
28
+ open(id: string): boolean;
29
+ close(id: string): boolean;
30
+ toggle(id: string): CollapsibleState | null;
31
+ updateSummary(id: string, summary: string): boolean;
32
+ remove(id: string): boolean;
33
+ closeAll(): number;
34
+ size(): number;
35
+ onChange(cb: () => void): () => void;
36
+ private emitChange;
37
+ }
38
+ export declare const collapsibleRegistry: CollapsibleRegistry;
@@ -0,0 +1,143 @@
1
+ // Utility riutilizzabile per OUTPUT COLLASSABILI/ESPANDIBILI in chat.
2
+ //
3
+ // Modella un blocco di output (es. il risultato di un comando) che puo' essere
4
+ // mostrato in forma compatta (solo una riga di sintesi) oppure espanso (con il
5
+ // contenuto completo). Lo stato e' apri/chiudi (open/closed) e quando il blocco
6
+ // e' CHIUSO il suo contenuto pesante viene rilasciato (cleanup automatico), per
7
+ // non trattenere stringhe enormi in memoria piu' del necessario.
8
+ //
9
+ // E' deliberatamente DISACCOPPIATA da qualunque comando o dalla TUI: non importa
10
+ // nulla del rendering. Chi consuma (la TUI, un comando, un test) registra un
11
+ // blocco, riceve un id stabile e poi lo apre/chiude/interroga. Un callback
12
+ // onChange permette al consumatore di ri-renderizzare quando lo stato cambia.
13
+ // Stesso stile di BackgroundManager: classe pura, zero dipendenze a runtime.
14
+ // Registry dei blocchi collassabili. Gestisce id stabili, ordine d'inserimento,
15
+ // transizioni di stato con cleanup e notifiche di cambiamento. Riutilizzabile:
16
+ // se ne possono creare istanze separate (una per chat) o usarne una condivisa.
17
+ export class CollapsibleRegistry {
18
+ items = new Map();
19
+ order = [];
20
+ seq = 0;
21
+ changeCbs = new Set();
22
+ // Registra un nuovo blocco e ne ritorna l'id stabile.
23
+ register(opts) {
24
+ this.seq += 1;
25
+ const id = `co${this.seq}`;
26
+ const open = opts.open === true;
27
+ const item = {
28
+ id,
29
+ summary: opts.summary,
30
+ state: open ? "open" : "closed",
31
+ createdAt: Date.now(),
32
+ source: opts.content,
33
+ materialized: open ? resolveSource(opts.content) : null,
34
+ onCleanup: opts.onCleanup,
35
+ };
36
+ this.items.set(id, item);
37
+ this.order.push(id);
38
+ this.emitChange();
39
+ return id;
40
+ }
41
+ get(id) { return this.items.get(id); }
42
+ // Blocchi in ordine d'inserimento.
43
+ list() {
44
+ return this.order.map((id) => this.items.get(id)).filter((x) => Boolean(x));
45
+ }
46
+ // true se il blocco esiste ed e' aperto.
47
+ isOpen(id) { return this.items.get(id)?.state === "open"; }
48
+ // Contenuto da mostrare: la sintesi se chiuso, il contenuto completo se aperto.
49
+ // Materializza il contenuto lazy alla prima apertura.
50
+ render(id) {
51
+ const it = this.items.get(id);
52
+ if (!it)
53
+ return "";
54
+ if (it.state === "closed")
55
+ return it.summary;
56
+ if (it.materialized === null)
57
+ it.materialized = resolveSource(it.source);
58
+ return it.materialized;
59
+ }
60
+ // Apre (espande) un blocco. No-op se gia' aperto o inesistente. Ritorna true
61
+ // se lo stato e' cambiato.
62
+ open(id) {
63
+ const it = this.items.get(id);
64
+ if (!it || it.state === "open")
65
+ return false;
66
+ it.state = "open";
67
+ it.materialized = resolveSource(it.source);
68
+ this.emitChange();
69
+ return true;
70
+ }
71
+ // Chiude (collassa) un blocco: rilascia il contenuto materializzato (cleanup
72
+ // automatico della memoria) e invoca onCleanup. No-op se gia' chiuso. Ritorna
73
+ // true se lo stato e' cambiato.
74
+ close(id) {
75
+ const it = this.items.get(id);
76
+ if (!it || it.state === "closed")
77
+ return false;
78
+ it.state = "closed";
79
+ it.materialized = null; // cleanup: non trattenere il contenuto pesante
80
+ this.emitChange();
81
+ it.onCleanup?.(it.id);
82
+ return true;
83
+ }
84
+ // Inverte lo stato del blocco. Ritorna il nuovo stato, o null se inesistente.
85
+ toggle(id) {
86
+ const it = this.items.get(id);
87
+ if (!it)
88
+ return null;
89
+ if (it.state === "open") {
90
+ this.close(id);
91
+ return "closed";
92
+ }
93
+ this.open(id);
94
+ return "open";
95
+ }
96
+ // Aggiorna la riga di sintesi (es. mentre l'output cresce). No-op se assente.
97
+ updateSummary(id, summary) {
98
+ const it = this.items.get(id);
99
+ if (!it)
100
+ return false;
101
+ it.summary = summary;
102
+ this.emitChange();
103
+ return true;
104
+ }
105
+ // Rimuove un blocco dal registry. Se era aperto, scatta prima il cleanup.
106
+ remove(id) {
107
+ const it = this.items.get(id);
108
+ if (!it)
109
+ return false;
110
+ if (it.state === "open") {
111
+ it.state = "closed";
112
+ it.materialized = null;
113
+ it.onCleanup?.(it.id);
114
+ }
115
+ this.items.delete(id);
116
+ const i = this.order.indexOf(id);
117
+ if (i >= 0)
118
+ this.order.splice(i, 1);
119
+ this.emitChange();
120
+ return true;
121
+ }
122
+ // Chiude tutti i blocchi aperti (cleanup di massa). Ritorna quanti ne ha chiusi.
123
+ closeAll() {
124
+ let n = 0;
125
+ for (const id of this.order)
126
+ if (this.close(id))
127
+ n += 1;
128
+ return n;
129
+ }
130
+ // Numero di blocchi registrati.
131
+ size() { return this.items.size; }
132
+ // Sottoscrive ai cambi di stato. Ritorna una funzione di unsubscribe.
133
+ onChange(cb) { this.changeCbs.add(cb); return () => this.changeCbs.delete(cb); }
134
+ emitChange() { for (const cb of this.changeCbs)
135
+ cb(); }
136
+ }
137
+ // Risolve una ContentSource al suo valore stringa (invoca la funzione se lazy).
138
+ function resolveSource(src) {
139
+ return typeof src === "function" ? src() : src;
140
+ }
141
+ // Istanza condivisa di processo (comoda per la TUI; i test possono crearne di
142
+ // proprie per isolamento).
143
+ export const collapsibleRegistry = new CollapsibleRegistry();
@@ -0,0 +1,9 @@
1
+ import type { PiConfig } from "./config.js";
2
+ import type { Message } from "./types.js";
3
+ import { type PlanTask } from "../vascend/plan-store.js";
4
+ export interface CheckpointTask extends PlanTask {
5
+ readonly ref: string;
6
+ }
7
+ export declare function checkpointTasks(config: PiConfig, sessionId: string, owner?: string): readonly CheckpointTask[] | null;
8
+ export declare function completedWaypoints(before: readonly CheckpointTask[], after: readonly CheckpointTask[]): readonly CheckpointTask[];
9
+ export declare function compactionCheckpoint(tasks: readonly CheckpointTask[] | null, messages: readonly Message[], cutIndex: number): string;
@@ -0,0 +1,58 @@
1
+ import { VascendPlanStore } from "../vascend/plan-store.js";
2
+ import { hasTaskEvidence } from "../vascend/plan-progress.js";
3
+ // Read the same authoritative scope as the tool executor, including delegated
4
+ // task ownership. A failed read is not evidence that work has been completed.
5
+ export function checkpointTasks(config, sessionId, owner) {
6
+ try {
7
+ const scope = config.planStoreId ?? config.roomStoreId ?? sessionId;
8
+ const group = config.planCastle ?? owner?.trim();
9
+ return VascendPlanStore.open(config.sessionDir, scope, { strict: true }).castles()
10
+ .filter(plan => !group || plan.slug === group)
11
+ .flatMap(plan => plan.tasks
12
+ .filter(task => !config.planTasks?.length || config.planTasks.includes(task.id))
13
+ .map(task => ({ ...task, ref: `${plan.slug}/${task.id}` })));
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ export function completedWaypoints(before, after) {
20
+ const previous = new Map(before.map(task => [task.ref, task]));
21
+ return after.filter(task => {
22
+ const old = previous.get(task.ref);
23
+ return task.status === "completed" && hasTaskEvidence(task)
24
+ && (old?.status !== "completed" || old.title !== task.title);
25
+ });
26
+ }
27
+ const MAX_STATE_CHARS = 16_000;
28
+ const clip = (text, max) => text.length <= max ? text : `${text.slice(0, max - 3)}...`;
29
+ // Persist a small, deterministic continuation state alongside the model's
30
+ // summary. This is data, never a claim that unchecked work has been verified.
31
+ export function compactionCheckpoint(tasks, messages, cutIndex) {
32
+ const lines = [];
33
+ const requestIndex = messages.findLastIndex(message => message.role === "user"
34
+ && !message.content.some(part => part.type === "tool_result"));
35
+ if (requestIndex >= 0 && requestIndex < cutIndex) {
36
+ const request = messages[requestIndex].content.filter(part => part.type === "text").map(part => part.text).join("\n");
37
+ if (request)
38
+ lines.push(`Richiesta utente in corso: ${JSON.stringify(clip(request, 8_000))}`);
39
+ }
40
+ if (tasks?.length) {
41
+ lines.push("Stato del piano al checkpoint; prima di agire verifica lo stato corrente con vascend_status.");
42
+ const priority = { running: 0, failed: 1, pending: 2, completed: 3 };
43
+ const open = tasks.filter(task => task.status !== "completed")
44
+ .sort((a, b) => priority[a.status] - priority[b.status]);
45
+ const done = tasks.filter(task => task.status === "completed").slice(-8);
46
+ for (const task of [...open, ...done]) {
47
+ const line = JSON.stringify({ ref: task.ref, status: task.status, title: clip(task.title, 180),
48
+ ...(task.evidence?.length ? { evidence: clip(task.evidence.at(-1), 240) } : {}),
49
+ ...(task.notes?.length ? { notes: clip(task.notes.slice(-3).join(" | "), 480) } : {}), });
50
+ if (lines.join("\n").length + line.length > MAX_STATE_CHARS) {
51
+ lines.push("Altre attivita nel piano persistito: usa vascend_status con paginazione.");
52
+ break;
53
+ }
54
+ lines.push(line);
55
+ }
56
+ }
57
+ return lines.length ? `STATO DI RIPRESA (dati della sessione)\n${lines.join("\n")}` : "";
58
+ }
@@ -0,0 +1,42 @@
1
+ import type { Message, Provider, ToolDef } from "./types.js";
2
+ export interface CompactionConfig {
3
+ readonly enabled: boolean;
4
+ readonly reserveTokens: number;
5
+ readonly keepRecentTokens: number;
6
+ readonly perRoom: boolean;
7
+ readonly roomFanout: number;
8
+ }
9
+ export declare const DEFAULT_COMPACTION: CompactionConfig;
10
+ export declare function estimateTokens(text: string): number;
11
+ export declare const IMAGE_TOKEN_ESTIMATE = 1400;
12
+ export declare function estimateMessagesTokens(messages: readonly Message[]): number;
13
+ export declare function estimateToolDefinitionTokens(tools: readonly ToolDef[]): number;
14
+ export declare function contextWindowFor(model: string, override?: number): number;
15
+ export declare function shouldCompact(contextTokens: number, contextWindow: number, reserveTokens: number): boolean;
16
+ export type CompactionMove = "none" | "speculative" | "await" | "now";
17
+ export declare const SPECULATIVE_FRACTION = 0.8;
18
+ export declare function planCompactionMove(input: {
19
+ readonly enabled: boolean;
20
+ readonly tokens: number;
21
+ readonly contextWindow: number;
22
+ readonly reserveTokens: number;
23
+ readonly inFlight: boolean;
24
+ readonly speculativeFraction?: number;
25
+ }): CompactionMove;
26
+ export interface CompactionPlan {
27
+ readonly cutIndex: number;
28
+ readonly toSummarize: readonly Message[];
29
+ readonly toKeep: readonly Message[];
30
+ }
31
+ export declare function planCompaction(messages: readonly Message[], keepRecentTokens: number): CompactionPlan | null;
32
+ export declare function verifySummary(summary: string, anchors: readonly string[], preservedMessages?: readonly Message[]): readonly string[];
33
+ export declare function protectedExcerpts(messages: readonly Message[], anchors: readonly string[], maxChars?: number): readonly string[];
34
+ export declare function withProtectedExcerpts(summary: string, excerpts: readonly string[]): string;
35
+ export declare function repairInstructions(missing: readonly string[], base?: string): string;
36
+ export declare function summarizeMessages(provider: Provider, toSummarize: readonly Message[], opts: {
37
+ readonly model: string;
38
+ readonly maxTokens: number;
39
+ readonly signal: AbortSignal;
40
+ readonly previousSummary?: string;
41
+ readonly instructions?: string;
42
+ }): Promise<string>;