@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,90 @@
1
+ import { fitLine, plainText, terminalWidth, wrapText } from "./terminal-text.js";
2
+ import { tr } from "./i18n.js";
3
+ const PREVIEW_ROWS = 2;
4
+ // Execution wrappers are unwrapped only from their declared arguments. Never
5
+ // parse or evaluate generated JavaScript to guess which commands it will run.
6
+ export function commandSource(call) {
7
+ if (call.name === "bash" && typeof call.input["command"] === "string")
8
+ return call.input["command"];
9
+ if (call.name === "run_program" && typeof call.input["code"] === "string")
10
+ return call.input["code"];
11
+ if (call.name === "execute" && call.input["mode"] === "program" && typeof call.input["code"] === "string")
12
+ return call.input["code"];
13
+ const name = call.name === "execute" && call.input["mode"] === "call" ? call.input["tool"]
14
+ : call.name === "tool_invoke" ? call.input["name"] : undefined;
15
+ const args = call.input["args"];
16
+ if ((name === "bash" || name === "run_program") && args && typeof args === "object" && !Array.isArray(args)) {
17
+ return commandSource({ name, input: args });
18
+ }
19
+ return undefined;
20
+ }
21
+ // Small display lexer, shared by shell and program previews. Theme syntax
22
+ // tokens keep both light and dark palettes readable, without dependencies.
23
+ export function highlightCommand(source, t) {
24
+ return plainText(source).split(/('(?:[^']|'')*'|"(?:\\.|[^"\\])*"|`[^`]*`|#[^\n]*|\$[\w:]+|--?[\w-]+|\b\d+(?:\.\d+)?\b|[|;&=<>]+|\b[\w]+(?:-[\w]+)+\b|\b(?:await|return|const|let|import|from|async|function|git|rg|bun|node|python|npm|npx|cd|cat|echo)\b)/g)
25
+ .map(token => {
26
+ if (/^["'`]/.test(token))
27
+ return t.danValue(token);
28
+ if (token.startsWith("#"))
29
+ return t.dim(token);
30
+ if (/^\$/.test(token))
31
+ return t.danId(token);
32
+ if (/^--?|^[|;&=<>]+$/.test(token))
33
+ return t.danArrow(token);
34
+ if (/^\d/.test(token))
35
+ return t.danNum(token);
36
+ if (/^[\w]+(?:-[\w]+)+$/.test(token) || /^(?:await|return|const|let|import|from|async|function|git|rg|bun|node|python|npm|npx|cd|cat|echo)$/.test(token))
37
+ return t.danTag(token);
38
+ return token;
39
+ }).join("");
40
+ }
41
+ function label(state, columns) {
42
+ return columns < 40
43
+ ? ({ running: "…", ok: "OK", error: "×", background: "BG", stopped: "–" })[state].padEnd(2)
44
+ : ({ running: tr("Esegue", "Running"), ok: tr("Eseguito", "Executed"), error: tr("Errore", "Error"),
45
+ background: tr("Avviato", "Started"), stopped: tr("Fermato", "Stopped") })[state].padEnd(8);
46
+ }
47
+ export function commandHeader(firstRow, state, t, columns) {
48
+ const color = state === "ok" ? t.green : state === "error" ? t.red : state === "stopped" ? t.yellow : t.accent;
49
+ return fitLine(" " + color(state === "error" ? "× " : "● ") + t.bold(label(state, columns)) + " "
50
+ + highlightCommand(firstRow, t), Math.max(1, columns - 1));
51
+ }
52
+ function moreRows(count, t, width) {
53
+ const full = tr("… +{count} righe · Ctrl+R dettagli", "… +{count} lines · Ctrl+R details", { count });
54
+ const text = terminalWidth(full) <= width ? full : `… +${count} · Ctrl+R`;
55
+ return t.dim(terminalWidth(text) <= width ? text : "… Ctrl+R");
56
+ }
57
+ export function commandPreview(source, t, columns, state = "running") {
58
+ const width = Math.max(2, columns - 1);
59
+ const prefix = columns < 40 ? " " : " │ ";
60
+ const bodyWidth = Math.max(2, width - terminalWidth(prefix));
61
+ const firstWidth = Math.max(2, width - terminalWidth(" ● " + label(state, columns) + " "));
62
+ const sourceRows = plainText(source).trimEnd().split("\n");
63
+ const firstLine = sourceRows.shift() || tr("(comando vuoto)", "(empty command)");
64
+ const firstRow = fitLine(firstLine, firstWidth, false);
65
+ const firstPlain = plainText(firstRow);
66
+ const rest = firstLine.slice(firstPlain.length);
67
+ const rows = [...(rest ? wrapText(rest, bodyWidth) : []), ...sourceRows.flatMap(row => wrapText(row, bodyWidth))];
68
+ const lines = [commandHeader(firstPlain, state, t, columns),
69
+ ...rows.slice(0, PREVIEW_ROWS - 1).map(row => t.dim(prefix) + highlightCommand(row, t))];
70
+ if (rows.length >= PREVIEW_ROWS)
71
+ lines.push(t.dim(prefix) + moreRows(rows.length - PREVIEW_ROWS + 1, t, bodyWidth));
72
+ return { firstRow: firstPlain, lines };
73
+ }
74
+ export function commandOutput(output, t, columns, isError = false) {
75
+ const width = Math.max(2, columns - 1);
76
+ const prefix = columns < 40 ? " " : " │ ";
77
+ const bodyWidth = Math.max(2, width - terminalWidth(prefix));
78
+ const rows = wrapText(plainText(output).trim() || tr("(nessun output)", "(no output)"), bodyWidth);
79
+ const shown = rows.slice(0, PREVIEW_ROWS);
80
+ const more = rows.length - shown.length;
81
+ return [...shown.map((row, index) => {
82
+ const gutter = !more && index === shown.length - 1 && columns >= 40 ? " └ " : prefix;
83
+ return t.dim(gutter) + (isError ? t.red(row) : t.dim(row));
84
+ }), ...(more ? [t.dim(prefix) + moreRows(more, t, bodyWidth)] : [])].map(row => fitLine(row, width));
85
+ }
86
+ export function commandResultState(output, isError) {
87
+ if (isError)
88
+ return "error";
89
+ return /^comando in background \[/i.test(plainText(output).trimStart()) ? "background" : "ok";
90
+ }
@@ -0,0 +1,20 @@
1
+ export type CommandCategory = "sessione" | "modello" | "vibe" | "vascend" | "attivita" | "interfaccia" | "sistema";
2
+ export interface BuiltinCommand {
3
+ readonly name: string;
4
+ readonly hint: string;
5
+ readonly desc: string;
6
+ readonly category: CommandCategory;
7
+ readonly aliases?: readonly string[];
8
+ }
9
+ export declare const CATEGORY_LABELS: Readonly<Record<CommandCategory, string>>;
10
+ export declare const CATEGORY_ORDER: readonly CommandCategory[];
11
+ export declare const BUILTIN_COMMANDS: readonly BuiltinCommand[];
12
+ export declare function builtinNames(): readonly string[];
13
+ export declare function visibleBuiltinNames(): readonly string[];
14
+ export declare function commandsByCategory(): ReadonlyArray<{
15
+ category: CommandCategory;
16
+ label: string;
17
+ commands: readonly BuiltinCommand[];
18
+ }>;
19
+ export declare function levenshtein(a: string, b: string): number;
20
+ export declare function suggestCommands(input: string, candidates: readonly string[], max?: number): readonly string[];
@@ -0,0 +1,131 @@
1
+ import { tr } from "./i18n.js";
2
+ // Etichette leggibili delle categorie (per le intestazioni dell'help).
3
+ export const CATEGORY_LABELS = {
4
+ get sessione() { return tr("sessione", "session"); },
5
+ get modello() { return tr("modello e provider", "model and provider"); },
6
+ get vibe() { return tr("vibecoding e contesto", "workflow and context"); },
7
+ get vascend() { return tr("metodo Vascend", "Vascend workflow"); },
8
+ get attivita() { return tr("lista delle attività", "task list"); },
9
+ get interfaccia() { return tr("interfaccia", "interface"); },
10
+ get sistema() { return tr("sistema", "system"); },
11
+ };
12
+ // Ordine di presentazione delle categorie nell'help.
13
+ export const CATEGORY_ORDER = [
14
+ "sessione",
15
+ "interfaccia",
16
+ "modello",
17
+ "vibe",
18
+ "vascend",
19
+ "attivita",
20
+ "sistema",
21
+ ];
22
+ // Comandi slash builtin (per autocomplete, help navigabile, suggerimenti).
23
+ export const BUILTIN_COMMANDS = [
24
+ { name: "help", hint: "", get desc() { return tr("Sfoglia i comandi con frecce o mouse", "Browse commands with arrow keys or the mouse"); }, category: "sistema" },
25
+ { name: "copy", hint: "[testo]", get desc() { return tr("Copia l’ultima risposta o il testo indicato", "Copy the last response or the specified text"); }, category: "interfaccia" },
26
+ { name: "queue", hint: "", get desc() { return tr("Gestisci la coda · Alt+Q; da 3 richieste, Alt+T invia al team", "Manage queued messages; Alt+Q; Alt+T sends 3 or more requests to a team"); }, category: "interfaccia", aliases: ["coda"] },
27
+ { name: "rename", hint: "<titolo>", get desc() { return tr("Dai un nome alla chat corrente", "Name the current chat"); }, category: "sessione" },
28
+ { name: "commands", hint: "", get desc() { return tr("Cerca e apri tutti i comandi", "Search and open all commands"); }, category: "sistema", aliases: ["cmd"] },
29
+ { name: "model", hint: "[prov/modello]", get desc() { return tr("Scegli o imposta il modello", "Choose or set the model"); }, category: "modello" },
30
+ { name: "models", hint: "", get desc() { return tr("Esplora i modelli disponibili", "Browse available models"); }, category: "modello" },
31
+ { name: "provider", hint: "", get desc() { return tr("Gestisci i provider configurati", "Manage configured providers"); }, category: "modello", aliases: ["providers"] },
32
+ { name: "login", hint: "", get desc() { return tr("Gestisci accessi e abbonamenti", "Manage sign-ins and subscriptions"); }, category: "modello" },
33
+ { name: "usage", hint: "", get desc() { return tr("Token della sessione, quote dell'abbonamento e reset", "Session tokens, subscription limits and resets"); }, category: "modello", aliases: ["tokens"] },
34
+ { name: "effort", hint: "[default|none|minimal|low|medium|high|xhigh|max]", get desc() { return tr("Scegli l'effort disponibile per il modello corrente", "Choose a supported effort for the current model"); }, category: "modello" },
35
+ { name: "fast", hint: "[on|off|status]", get desc() { return tr("Gestisci la modalità veloce e il relativo indicatore", "Manage fast mode and its indicator"); }, category: "modello" },
36
+ { name: "vibe", hint: "[auto|modalita]", get desc() { return tr("Scegli il profilo di lavoro", "Choose a work profile"); }, category: "vibe", aliases: ["profile"] },
37
+ { name: "context", hint: "[pin|unpin|reset|close]", get desc() { return tr("Gestisci contesto e informazioni da conservare", "Manage context and pinned information"); }, category: "vibe", aliases: ["ctx"] },
38
+ { name: "arch", hint: "[depth|close]", get desc() { return tr("Esplora moduli e dipendenze del progetto", "Explore project modules and dependencies"); }, category: "vibe", aliases: ["architettura"] },
39
+ { name: "theme", hint: "[nome]", get desc() { return tr("Personalizza l'aspetto del terminale", "Customize terminal appearance"); }, category: "interfaccia", aliases: ["themes"] },
40
+ { name: "language", hint: "[system|it|en|es|de]", get desc() { return tr("Scegli la lingua dell'interfaccia o segui il sistema", "Choose the interface language or follow the system"); }, category: "interfaccia", aliases: ["lang", "lingua", "idioma", "sprache"] },
41
+ { name: "review", hint: "[attivita|modifiche|team|problemi]", get desc() { return tr("Esamina attività e modifiche · Ctrl+R", "Review tasks and changes; Ctrl+R"); }, category: "interfaccia", aliases: ["revisione"] },
42
+ { name: "compact", hint: "[istruzioni]", get desc() { return tr("Compatta conservando obiettivo, attivita aperte e lavoro recente; salva un checkpoint", "Compact while preserving the goal, open tasks and recent work; save a checkpoint"); }, category: "vascend", aliases: ["vascend-compact"] },
43
+ { name: "vascend", hint: "[on|off|goal]", get desc() { return tr("Configura il metodo di lavoro Vascend", "Configure the Vascend workflow"); }, category: "vascend" },
44
+ { name: "todo", hint: "", get desc() { return tr("Lista delle attività: da fare, in corso, completate e fallite · Ctrl+G", "Task list: pending, running, completed and failed; Ctrl+G"); }, category: "attivita", aliases: ["piano", "tasks", "attivita", "regno", "castello", "castelli"] },
45
+ { name: "collaboratori", hint: "<attività1; attività2; ...>", get desc() { return tr("Assegna attività a collaboratori in parallelo", "Assign parallel tasks to collaborators"); }, category: "attivita", aliases: ["kingdoms", "warm"] },
46
+ { name: "bg", hint: "[id|kill <id>]", get desc() { return tr("task shell in background (Ctrl+B); mostra output o termina", "Background shell tasks (Ctrl+B); view output or stop a task"); }, category: "sistema" },
47
+ { name: "reload", hint: "", get desc() { return tr("ricarica le estensioni da .talos/extensions a caldo", "Reload extensions from .talos/extensions"); }, category: "sistema", aliases: ["reload-ext"] },
48
+ { name: "extensions", hint: "[on|off <id> | set <id> <chiave> <valore>]", get desc() { return tr("lista e gestione estensioni (abilita/disabilita, impostazioni)", "List and manage extensions and settings"); }, category: "sistema", aliases: ["ext"] },
49
+ { name: "expand", hint: "[all]", get desc() { return tr("Apri i dettagli delle ultime operazioni", "Expand recent operation details"); }, category: "interfaccia" },
50
+ { name: "img", hint: "<path>", get desc() { return tr("Allega un'immagine · Ctrl+V per incollare", "Attach an image; Ctrl+V to paste"); }, category: "interfaccia" },
51
+ { name: "config", hint: "[details|close]", get desc() { return tr("Personalizza le impostazioni", "Customize settings"); }, category: "sistema" },
52
+ { name: "cwd", hint: "[path]", get desc() { return tr("mostra il progetto; un cambio sicuro richiede riavvio con talos -C", "Show the project; safely switch with talos -C after restarting"); }, category: "sistema", aliases: ["cd"] },
53
+ { name: "tree", hint: "[id|close]", get desc() { return tr("albero sessione collassabile; con id sposta la testa; /tree close lo nasconde", "Browse the session tree; use an ID to move the head, or /tree close to hide it"); }, category: "sessione" },
54
+ { name: "sessions", hint: "[close]", get desc() { return tr("elenco sessioni salvate (collassabile, /sessions close lo nasconde)", "List saved sessions; /sessions close hides the list"); }, category: "sessione" },
55
+ { name: "resume", hint: "[id]", get desc() { return tr("Cerca e riapri le chat salvate", "Find and reopen saved chats"); }, category: "sessione", aliases: ["chats"] },
56
+ { name: "new", hint: "", get desc() { return tr("Apri una chat vuota; la precedente resta salvata", "Start an empty chat; the previous chat stays saved"); }, category: "sessione", aliases: ["clear"] },
57
+ { name: "logout", hint: "", get desc() { return tr("esci dall'account Vascend (al prossimo avvio serve di nuovo l'accesso)", "Sign out of Vascend; sign-in is required on the next start"); }, category: "sistema" },
58
+ { name: "quit", hint: "", get desc() { return tr("esci", "Exit Talos"); }, category: "sistema", aliases: ["exit"] },
59
+ ];
60
+ // Tutti i nomi+alias dei comandi builtin (per il matching del dispatch).
61
+ export function builtinNames() {
62
+ return BUILTIN_COMMANDS.flatMap((c) => [c.name, ...(c.aliases ?? [])]);
63
+ }
64
+ // I vecchi comandi restano accettati, ma non compaiono nei suggerimenti.
65
+ export function visibleBuiltinNames() {
66
+ const legacy = new Set(["regno", "castello", "castelli", "kingdoms", "warm"]);
67
+ return builtinNames().filter((name) => !legacy.has(name));
68
+ }
69
+ // Raggruppa i comandi builtin per categoria, nell'ordine di CATEGORY_ORDER.
70
+ export function commandsByCategory() {
71
+ return CATEGORY_ORDER.map((category) => ({
72
+ category,
73
+ label: CATEGORY_LABELS[category],
74
+ commands: BUILTIN_COMMANDS.filter((c) => c.category === category),
75
+ })).filter((g) => g.commands.length > 0);
76
+ }
77
+ // Distanza di Levenshtein (edit distance) fra due stringhe. Iterativa, O(n*m),
78
+ // usata per suggerire il comando piu' vicino su input sconosciuto.
79
+ export function levenshtein(a, b) {
80
+ if (a === b)
81
+ return 0;
82
+ if (!a.length)
83
+ return b.length;
84
+ if (!b.length)
85
+ return a.length;
86
+ let prev = Array.from({ length: b.length + 1 }, (_, i) => i);
87
+ let curr = new Array(b.length + 1);
88
+ for (let i = 1; i <= a.length; i++) {
89
+ curr[0] = i;
90
+ for (let j = 1; j <= b.length; j++) {
91
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
92
+ curr[j] = Math.min((curr[j - 1] ?? 0) + 1, // inserzione
93
+ (prev[j] ?? 0) + 1, // cancellazione
94
+ (prev[j - 1] ?? 0) + cost);
95
+ }
96
+ [prev, curr] = [curr, prev];
97
+ }
98
+ return prev[b.length] ?? 0;
99
+ }
100
+ // Suggerisce i comandi piu' vicini a `input` fra i `candidates` noti. Ritorna
101
+ // fino a `max` nomi entro una soglia di distanza proporzionale alla lunghezza
102
+ // (cosi' "modl" -> "model", ma input totalmente diverso non suggerisce nulla).
103
+ export function suggestCommands(input, candidates, max = 3) {
104
+ const needle = input.trim().toLowerCase();
105
+ if (!needle)
106
+ return [];
107
+ // Soglia: meta' della lunghezza (min 2, max 4). Tollerante ma non casuale.
108
+ const threshold = Math.min(4, Math.max(2, Math.ceil(needle.length / 2)));
109
+ const scored = candidates
110
+ .map((name) => {
111
+ const lower = name.toLowerCase();
112
+ // I prefissi sono match forti (distanza 0) anche se piu' lunghi.
113
+ if (lower.startsWith(needle) || needle.startsWith(lower))
114
+ return { name, dist: 0 };
115
+ return { name, dist: levenshtein(needle, lower) };
116
+ })
117
+ .filter((s) => s.dist <= threshold)
118
+ .sort((a, b) => a.dist - b.dist || a.name.length - b.name.length);
119
+ // Dedup preservando l'ordine.
120
+ const seen = new Set();
121
+ const out = [];
122
+ for (const s of scored) {
123
+ if (seen.has(s.name))
124
+ continue;
125
+ seen.add(s.name);
126
+ out.push(s.name);
127
+ if (out.length >= max)
128
+ break;
129
+ }
130
+ return out;
131
+ }
@@ -0,0 +1,4 @@
1
+ import type { TuiTheme } from "./branding.js";
2
+ import type { ContextArchiveBlock } from "./context-meter.js";
3
+ export declare function compactContextTokens(tokens: number, short?: boolean): string;
4
+ export declare function buildContextBar(tokens: number, window: number, archive: readonly ContextArchiveBlock[], width: number, t: TuiTheme, warning?: string): string;
@@ -0,0 +1,74 @@
1
+ import { tr } from "./i18n.js";
2
+ import { fitLine, terminalWidth } from "./terminal-text.js";
3
+ const percentage = (ratio) => {
4
+ const n = ratio * 100;
5
+ return `${n > 0 && n < 10 ? n.toFixed(1) : Math.round(n)}%`;
6
+ };
7
+ export function compactContextTokens(tokens, short = false) {
8
+ const n = Math.max(0, Math.round(tokens));
9
+ if (n >= 999_950)
10
+ return `${Number((n / 1_000_000).toFixed(short ? 1 : 2))}M`;
11
+ if (n >= 1000)
12
+ return `${Number((n / 1000).toFixed(short ? 0 : 1))}k`;
13
+ return String(n);
14
+ }
15
+ function archiveBar(blocks, cells, total, t) {
16
+ if (!cells || !blocks.length)
17
+ return "";
18
+ // I blocchi seguono l'ordine della conversazione; il colore dipende dalla
19
+ // posizione temporale, non dal numero di frame o dalla data dell'archiviazione.
20
+ const oldest = blocks[0].at, newest = blocks[blocks.length - 1].at;
21
+ const colored = t.dark("x") !== "x";
22
+ let index = 0, end = blocks[0].tokens, result = "";
23
+ for (let cell = 0; cell < cells; cell++) {
24
+ const token = (cell + 0.5) / cells * total;
25
+ while (index < blocks.length - 1 && token > end)
26
+ end += blocks[++index].tokens;
27
+ const recency = newest > oldest ? (blocks[index].at - oldest) / (newest - oldest)
28
+ : blocks.length > 1 ? index / (blocks.length - 1) : 0.65;
29
+ const gray = Math.round(72 + 120 * Math.max(0, Math.min(1, recency)));
30
+ result += colored ? `\x1b[38;2;${gray};${gray};${gray}m▰\x1b[0m` : "▰";
31
+ }
32
+ return result;
33
+ }
34
+ export function buildContextBar(tokens, window, archive, width, t, warning = "") {
35
+ const blocks = archive.filter(block => Number.isFinite(block.tokens) && block.tokens > 0);
36
+ const archived = blocks.reduce((sum, block) => sum + block.tokens, 0);
37
+ const activeRatio = tokens / window, archiveRatio = archived / window;
38
+ // L'archivio puo' crescere oltre una finestra. Cambia la scala grafica,
39
+ // dichiarata con ×N; entrambe le percentuali restano rapportate al modello.
40
+ const scale = Math.max(1, Math.ceil((archived + tokens) / window));
41
+ const scaleLabel = scale > 1 ? `×${scale}` : "";
42
+ const pressure = activeRatio >= 0.9 ? t.red : activeRatio >= 0.7 ? t.yellow : t.accent;
43
+ const short = width < 55;
44
+ let label = t.muted(`${width >= 72 ? tr("Contesto~", "Context~") : "Ctx~"}${scaleLabel} `);
45
+ const counts = (activeLabel, archiveLabel, separator) => pressure(`${activeLabel}${compactContextTokens(tokens, short)} ${percentage(activeRatio)}`)
46
+ + t.dark(separator) + t.muted(`${archiveLabel}${compactContextTokens(archived, short)} ${percentage(archiveRatio)}`);
47
+ let values = counts(short ? tr("att ", "act ") : tr("attivo ", "active "), short ? "arc " : "arch. ", " · ");
48
+ if (terminalWidth(label + values + warning) > width)
49
+ label = t.muted(`~${scaleLabel} `);
50
+ if (terminalWidth(label + values + warning) > width)
51
+ values = counts("a", "r", " ");
52
+ const capacity = t.dark(` / ${compactContextTokens(window)}`);
53
+ if (width >= 64 && terminalWidth(label + values + capacity + warning) + 13 <= width)
54
+ values += capacity;
55
+ // Una barra breve lascia leggibili i due conteggi e non domina il footer.
56
+ const cells = Math.min(14, Math.max(0, width - terminalWidth(label + values + warning) - 1));
57
+ let grayCells = Math.round(archiveRatio / scale * cells);
58
+ let liveCells = Math.round(activeRatio / scale * cells);
59
+ if (cells >= 2) {
60
+ if (archived > 0)
61
+ grayCells = Math.max(1, grayCells);
62
+ if (tokens > 0)
63
+ liveCells = Math.max(1, liveCells);
64
+ }
65
+ if (grayCells + liveCells > cells) {
66
+ if (grayCells > liveCells)
67
+ grayCells = Math.max(0, cells - liveCells);
68
+ else
69
+ liveCells = Math.max(0, cells - grayCells);
70
+ }
71
+ const bar = archiveBar(blocks, grayCells, archived, t) + t.accent("▰".repeat(liveCells))
72
+ + t.dim("▱".repeat(Math.max(0, cells - grayCells - liveCells)));
73
+ return fitLine(label + (cells ? bar + " " : "") + values + warning, width);
74
+ }
@@ -0,0 +1,25 @@
1
+ import type { Harness } from "../core/bootstrap.js";
2
+ import { type ContextLedger } from "../core/context-ledger.js";
3
+ type ContextSource = Pick<Harness, "config" | "env" | "session" | "tools">;
4
+ export interface ContextArchiveBlock {
5
+ readonly tokens: number;
6
+ readonly at: number;
7
+ }
8
+ export interface ContextReading {
9
+ readonly tokens: number;
10
+ readonly window: number;
11
+ readonly archived: readonly ContextArchiveBlock[];
12
+ readonly nodes: number;
13
+ readonly workingTarget?: number;
14
+ readonly checkpointAt?: number;
15
+ }
16
+ export declare class ContextMeter {
17
+ private cache?;
18
+ private observed?;
19
+ reset(): void;
20
+ observe(source: ContextSource, ledger: ContextLedger): void;
21
+ read(source: ContextSource): ContextReading;
22
+ private baseline;
23
+ }
24
+ export declare function contextDetails(reading: ContextReading): readonly string[];
25
+ export {};
@@ -0,0 +1,81 @@
1
+ import { buildContextLedger } from "../core/context-ledger.js";
2
+ import { contextWindowFor, estimateMessagesTokens } from "../core/compaction.js";
3
+ import { applyToolResultDemotion, planToolResultDemotion, toolIndexPolicy, applyMediaEviction, mediaBudgetPolicy, planMediaEviction } from "../core/tool-result-index.js";
4
+ import { ToolOutputStore } from "../core/tool-result-store.js";
5
+ import { contextPolicy, workingContextLimits } from "../core/context-policy.js";
6
+ // La cronologia su disco contiene ancora gli output integrali. Il contatore
7
+ // usa la stessa proiezione del loop; il registro della richiesta aggiunge il
8
+ // system effettivo e i blocchi di contesto compilati. Fra due richieste si
9
+ // aggiorna la stima solo quando cambia la cronologia, non a ogni tasto.
10
+ export class ContextMeter {
11
+ cache;
12
+ observed;
13
+ reset() { this.cache = undefined; this.observed = undefined; }
14
+ observe(source, ledger) {
15
+ if (ledger.model !== source.config.model)
16
+ return;
17
+ this.cache = undefined;
18
+ const baseline = this.baseline(source);
19
+ this.observed = { session: source.session, model: ledger.model, system: source.config.system,
20
+ window: ledger.window, offset: ledger.tokens - baseline.tokens };
21
+ }
22
+ read(source) {
23
+ const base = this.baseline(source);
24
+ const last = this.observed;
25
+ if (!last || last.session !== source.session || last.model !== source.config.model
26
+ || last.system !== source.config.system || last.window !== base.window)
27
+ return base;
28
+ return { ...base, tokens: Math.max(0, base.tokens + last.offset) };
29
+ }
30
+ baseline(source) {
31
+ const { session, config, tools, env } = source;
32
+ const history = session.history(), defs = tools.defs();
33
+ const scaledPolicy = toolIndexPolicy(env, contextWindowFor(config.model, config.contextWindow));
34
+ const mediaPolicy = mediaBudgetPolicy(env);
35
+ const limits = workingContextLimits(contextPolicy(env), contextWindowFor(config.model, config.contextWindow), config.compaction.reserveTokens);
36
+ const key = JSON.stringify([config.model, config.contextWindow, config.sessionDir, config.roomStoreId, scaledPolicy, mediaPolicy,
37
+ limits, config.compaction.enabled, config.compaction.perRoom, contextPolicy(env).roomCompaction]);
38
+ const cached = this.cache;
39
+ if (cached && cached.session === session && cached.history === history && cached.defs === defs
40
+ && cached.key === key && cached.system === config.system)
41
+ return cached.reading;
42
+ const store = scaledPolicy.enabled && config.sessionDir ? ToolOutputStore.open(config.sessionDir, config.roomStoreId ?? session.id) : null;
43
+ let messages = applyMediaEviction(history, planMediaEviction({ messages: history, policy: mediaPolicy }));
44
+ const demotion = planToolResultDemotion({ messages, policy: scaledPolicy, archivedId: id => store?.byCallId(id)?.id ?? null });
45
+ messages = applyToolResultDemotion(messages, demotion);
46
+ const ledger = buildContextLedger({ model: config.model, contextWindow: config.contextWindow,
47
+ system: config.system, tools: defs, messages });
48
+ const demoted = new Map(demotion.refs.map(ref => [ref.callId, ref.tokens]));
49
+ const chain = session.nodeChain();
50
+ const kept = session.lastCompaction ? chain.findIndex(node => node.id === session.lastCompaction.firstKeptId) : -1;
51
+ const archived = [];
52
+ for (const [index, node] of chain.entries()) {
53
+ // Le due porzioni sono disgiunte: un risultato gia' dentro il prefisso
54
+ // riassunto non si riconta come risultato retrocesso nella parte viva.
55
+ const tokens = index < kept ? estimateMessagesTokens([node.message]) : node.message.content.reduce((sum, part) => sum + (part.type === "tool_result" ? demoted.get(part.callId) ?? 0 : 0), 0);
56
+ if (tokens > 0)
57
+ archived.push({ tokens, at: node.ts });
58
+ }
59
+ const reading = { tokens: ledger.tokens, window: ledger.window, archived, nodes: session.tree().length,
60
+ ...(config.compaction.enabled ? { workingTarget: limits.active,
61
+ ...(config.compaction.perRoom && contextPolicy(env).roomCompaction !== "never" ? { checkpointAt: limits.checkpoint } : {}),
62
+ } : {}),
63
+ };
64
+ this.cache = { session, history, defs, key, system: config.system, reading };
65
+ return reading;
66
+ }
67
+ }
68
+ export function contextDetails(reading) {
69
+ const archived = reading.archived.reduce((sum, block) => sum + block.tokens, 0);
70
+ const fmt = (tokens) => `~${Math.round(tokens).toLocaleString("it-IT")} token (${(100 * tokens / reading.window).toFixed(1)}%)`;
71
+ return [
72
+ `Attivo: ${fmt(reading.tokens)} · finestra ${reading.window.toLocaleString("it-IT")}`,
73
+ `Archiviato originale: ${fmt(archived)}`,
74
+ ...(reading.workingTarget ? [`Budget operativo: ~${Math.round(reading.workingTarget).toLocaleString("it-IT")} token attivi`
75
+ + (reading.checkpointAt ? ` · checkpoint da ~${Math.round(reading.checkpointAt).toLocaleString("it-IT")}` : "")
76
+ + ". Soglie di compattazione, non limiti rigidi del singolo messaggio."] : []),
77
+ "Lime: contesto inviato al modello, inclusi riassunti e riferimenti. Grigio: materiale originale conservato fuori dalla finestra viva.",
78
+ "Blocchi grigi da scuro (più vecchio) a chiaro (più recente). Le due percentuali sono riferite alla finestra del modello.",
79
+ "Se archivio + attivo superano una finestra, ×N indica la scala della barra; le percentuali mantengono la stessa base.",
80
+ ];
81
+ }
@@ -0,0 +1,8 @@
1
+ import { CostTracker, type CostEstimate } from "./cost-tracker.js";
2
+ type Env = Record<string, string | undefined>;
3
+ interface RegistryLike {
4
+ estimateCost(modelId: string, inputTokens: number, outputTokens: number): CostEstimate;
5
+ }
6
+ type LoadRegistry = (env: Env) => Promise<RegistryLike | null>;
7
+ export declare function createCostTracker(env: Env, load?: LoadRegistry): CostTracker;
8
+ export {};
@@ -0,0 +1,43 @@
1
+ // Aggancio tra il CostTracker (UI status line) e il model-registry (pricing).
2
+ // Il registry e' un modulo peer (src/providers/model-registry.ts) consegnato da
3
+ // un altro vassallo; per essere resilienti all'ordine di merge lo carichiamo in
4
+ // modo LAZY/dinamico. Se non e' (ancora) disponibile, la stima ritorna
5
+ // known=false e la UI mostra solo i token, mai un crash.
6
+ import { CostTracker } from "./cost-tracker.js";
7
+ // Specifier del modulo peer, costruito a runtime cosi' l'assenza pre-merge non
8
+ // blocca la risoluzione statica del type-checker.
9
+ const REGISTRY_MODULE = "../providers/model-registry.js";
10
+ // Caricatore di default: import dinamico del model-registry peer. Tollera
11
+ // l'assenza del modulo (pre-merge) e differenze di firma minori.
12
+ const defaultLoad = async (env) => {
13
+ try {
14
+ const mod = (await import(REGISTRY_MODULE));
15
+ if (typeof mod.loadModelRegistry !== "function")
16
+ return null;
17
+ return await mod.loadModelRegistry(env, {});
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ };
23
+ // Crea un CostTracker la cui funzione di stima delega al registry caricato in
24
+ // modo lazy. Finche' il registry non e' pronto, le stime sono known=false.
25
+ // L'inizializzazione (fire-and-forget) popola il riferimento appena pronto.
26
+ export function createCostTracker(env, load = defaultLoad) {
27
+ let registry = null;
28
+ const unknown = { inputCost: 0, outputCost: 0, totalCost: 0, known: false };
29
+ const estimate = (modelId, inputTokens, outputTokens) => {
30
+ if (!registry)
31
+ return unknown;
32
+ try {
33
+ return registry.estimateCost(modelId, inputTokens, outputTokens);
34
+ }
35
+ catch {
36
+ return unknown;
37
+ }
38
+ };
39
+ // Carica il registry in background; i turni registrati PRIMA che sia pronto
40
+ // resteranno senza costo (known=false), ma i successivi avranno il pricing.
41
+ void load(env).then((r) => { registry = r; }).catch(() => { registry = null; });
42
+ return new CostTracker(estimate);
43
+ }
@@ -0,0 +1,49 @@
1
+ export interface TurnUsage {
2
+ readonly inputTokens: number;
3
+ readonly outputTokens: number;
4
+ readonly cacheReadTokens?: number;
5
+ readonly cacheWriteTokens?: number;
6
+ readonly costUsd?: number;
7
+ }
8
+ export declare function promptTokens(usage: TurnUsage): number;
9
+ export declare function formatTokenCount(value: number): string;
10
+ export interface CostEstimate {
11
+ readonly inputCost: number;
12
+ readonly outputCost: number;
13
+ readonly totalCost: number;
14
+ readonly known: boolean;
15
+ }
16
+ export type EstimateCostFn = (modelId: string, inputTokens: number, outputTokens: number) => CostEstimate;
17
+ export interface ModelUsage {
18
+ readonly modelId: string;
19
+ readonly inputTokens: number;
20
+ readonly outputTokens: number;
21
+ readonly cacheReadTokens: number;
22
+ readonly cacheWriteTokens: number;
23
+ readonly cost: number;
24
+ readonly priced: boolean;
25
+ readonly turns: number;
26
+ }
27
+ export interface CostSnapshot {
28
+ readonly totalCost: number;
29
+ readonly totalInputTokens: number;
30
+ readonly totalOutputTokens: number;
31
+ readonly totalCacheReadTokens: number;
32
+ readonly totalCacheWriteTokens: number;
33
+ readonly totalPromptTokens: number;
34
+ readonly totalProviderTokens: number;
35
+ readonly totalTurns: number;
36
+ readonly current?: ModelUsage;
37
+ readonly perModel: readonly ModelUsage[];
38
+ readonly anyPriced: boolean;
39
+ }
40
+ export declare class CostTracker {
41
+ private readonly byModel;
42
+ private readonly estimate;
43
+ constructor(estimate: EstimateCostFn);
44
+ record(modelId: string, usage: TurnUsage, subscription?: boolean): void;
45
+ snapshot(currentModel?: string): CostSnapshot;
46
+ reset(): void;
47
+ isEmpty(): boolean;
48
+ }
49
+ export declare function formatCost(usd: number): string;