@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,213 @@
1
+ import { tr } from "./i18n.js";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { basename, dirname, join, resolve } from "node:path";
4
+ import { formatCost, formatTokenCount } from "./cost-tracker.js";
5
+ import { activeActivity } from "../vascend/activity-status.js";
6
+ import { fitLine, oneLine, terminalWidth, wrapText } from "./terminal-text.js";
7
+ // Modello, provider, workspace, branch e modalita' vivono nella testata fissa.
8
+ // La riga inferiore resta una telemetria operativa e non ripete gli stessi dati.
9
+ export const DEFAULT_ORDER = ["usage", "ctx", "cost", "bg", "improve", "regno"];
10
+ // Glyph di spinner per le attivita' "vive" nella status line. La status line
11
+ // si ridisegna a ogni frame dello spinner: ruotando in base al tempo si ottiene
12
+ // un indicatore animato senza alcun timer dedicato.
13
+ const SPIN = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
14
+ function spinGlyph() {
15
+ return SPIN[Math.floor(Date.now() / 90) % SPIN.length];
16
+ }
17
+ // Cronometro compatto mm:ss (o ss s) da un istante di inizio.
18
+ function elapsed(since) {
19
+ const s = Math.max(0, Math.floor((Date.now() - since) / 1000));
20
+ if (s < 60)
21
+ return `${s}s`;
22
+ const m = Math.floor(s / 60);
23
+ return `${m}m${String(s % 60).padStart(2, "0")}s`;
24
+ }
25
+ function visibleLength(value) {
26
+ return terminalWidth(value);
27
+ }
28
+ function shortModel(model) {
29
+ const slash = model.lastIndexOf("/");
30
+ return (slash >= 0 ? model.slice(slash + 1) : model).replace(/-\d{8}$/, "");
31
+ }
32
+ function fmtTokens(n) {
33
+ if (n >= 1_000_000) {
34
+ const v = n / 1_000_000;
35
+ return `${Number.isInteger(v) ? v : v.toFixed(1)}M`;
36
+ }
37
+ return n >= 1000 ? `${Math.round(n / 1000)}k` : `${n}`;
38
+ }
39
+ // Trova il ".git" piu' vicino RISALENDO dai parent: cosi' la status line mostra
40
+ // il ramo del repo che CONTIENE il cwd anche quando si lavora in una sottodir,
41
+ // e segue il progetto seguito (config.cwd) e non il path di lancio. Restituisce
42
+ // il path del .git (dir o file) oppure null se nessun repo lo contiene.
43
+ function findGitEntry(start) {
44
+ let cur = resolve(start);
45
+ for (;;) {
46
+ const g = join(cur, ".git");
47
+ if (existsSync(g))
48
+ return g;
49
+ const parent = dirname(cur);
50
+ if (parent === cur)
51
+ return null; // raggiunta la radice del filesystem
52
+ cur = parent;
53
+ }
54
+ }
55
+ // Branch git da .git/HEAD (nessun subprocess), con cache breve.
56
+ let gitCache = null;
57
+ function gitBranch(cwd) {
58
+ const now = Date.now();
59
+ if (gitCache && gitCache.cwd === cwd && now - gitCache.at < 4000)
60
+ return gitCache.branch;
61
+ let branch = null;
62
+ try {
63
+ const dir = findGitEntry(cwd);
64
+ if (dir) {
65
+ let headFile = join(dir, "HEAD");
66
+ if (!existsSync(headFile)) {
67
+ // ".git" e' un FILE (worktree/submodule): punta al gitdir reale.
68
+ const m = /gitdir:\s*(.+)/.exec(readFileSync(dir, "utf8"));
69
+ if (m && m[1])
70
+ headFile = join(m[1].trim(), "HEAD");
71
+ }
72
+ if (existsSync(headFile)) {
73
+ const txt = readFileSync(headFile, "utf8").trim();
74
+ const ref = /^ref:\s*refs\/heads\/(.+)$/.exec(txt);
75
+ branch = ref && ref[1] ? ref[1] : txt.slice(0, 7);
76
+ }
77
+ }
78
+ }
79
+ catch {
80
+ branch = null;
81
+ }
82
+ gitCache = { cwd, branch, at: now };
83
+ return branch;
84
+ }
85
+ // Registry dei segmenti built-in: id -> renderer.
86
+ export const BUILTIN_SEGMENTS = {
87
+ model: (d, t) => t.accent("◇ ") + t.silver(shortModel(d.model)) + (d.fast ? t.accent(" fast") : ""),
88
+ provider: (d, t) => (d.provider ? t.muted(d.provider) : null),
89
+ dir: (d, t) => t.muted(basename(d.cwd) || d.cwd),
90
+ git: (d, t) => { const b = gitBranch(d.cwd); return b ? t.dark("⎇ ") + t.muted(b) : null; },
91
+ branch: (d, t) => BUILTIN_SEGMENTS["git"](d, t),
92
+ effort: (d, t) => (d.effort ? t.muted(`effort ${d.effort}`) : null),
93
+ vibe: (d, t) => (d.vibeMode ? t.accent("~ ") + t.muted(d.vibeMode) : null),
94
+ ctx: (d, t) => {
95
+ if (d.contextTokens === undefined || !d.contextWindow)
96
+ return null;
97
+ const pct = Math.round((d.contextTokens / d.contextWindow) * 100);
98
+ return t.muted(`ctx~ ${formatTokenCount(d.contextTokens)}/${fmtTokens(d.contextWindow)}`) + t.dark(` ${pct}%`);
99
+ },
100
+ regno: (d, t) => {
101
+ if (!d.regno || !d.regno.total)
102
+ return null;
103
+ const r = d.regno;
104
+ const head = r.castles > 1 ? `◆ ${r.castles} gruppi · ${r.done}/${r.total}` : `◆ ${r.done}/${r.total}`;
105
+ return t.silver(head) + t.dark(" Ctrl+G");
106
+ },
107
+ // Task shell in background (Ctrl+B): mostra quanti sono in esecuzione sul
108
+ // totale. Nascosto quando non ci sono task. Live: si aggiorna a ogni frame
109
+ // perche' StatusData.bg viene ricalcolato dal backgroundManager.
110
+ bg: (d, t) => {
111
+ const b = d.bg;
112
+ if (!b || !b.total)
113
+ return null;
114
+ const head = b.running > 0
115
+ ? t.accent("⚙ ") + t.silver(`${b.running}/${b.total} bg`)
116
+ : t.dark("⚙ ") + t.muted(`${b.total} bg`);
117
+ return head + t.dark(" /bg");
118
+ },
119
+ time: (_d, t) => {
120
+ const dt = new Date();
121
+ const hh = String(dt.getHours()).padStart(2, "0");
122
+ const mm = String(dt.getMinutes()).padStart(2, "0");
123
+ return t.dark(`${hh}:${mm}`);
124
+ },
125
+ // Costo accumulato di sessione (USD). Mostra il totale, e tra parentesi il
126
+ // costo del modello attualmente selezionato se differisce dal totale (cioe'
127
+ // sono stati usati piu' modelli).
128
+ cost: (d, t) => {
129
+ const c = d.cost;
130
+ if (!c || !c.anyPriced || c.totalCost <= 0)
131
+ return null;
132
+ const head = t.accent("$ ") + t.silver(formatCost(c.totalCost).slice(1));
133
+ const cur = c.current;
134
+ if (cur && cur.priced && c.perModel.length > 1 && cur.cost > 0) {
135
+ return head + t.dark(` (${formatCost(cur.cost)} cur)`);
136
+ }
137
+ return head;
138
+ },
139
+ // Indicatore di AUTO-MIGLIORAMENTO attivo. Compare SOLO quando un'attivita'
140
+ // "improve" e' viva (accesa dal tool self_improve_deep mentre esplora). Mostra
141
+ // uno spinner animato, l'etichetta e da quanto e' in corso. Sparisce a fine.
142
+ improve: (_d, t) => {
143
+ const a = activeActivity("improve");
144
+ if (!a)
145
+ return null;
146
+ const label = a.label || "auto-miglioramento";
147
+ const head = t.accent(spinGlyph() + " ") + t.silver(label);
148
+ return head + t.dark(` ${elapsed(a.since)}`);
149
+ },
150
+ // Token accumulati di sessione (input/output) su tutti i modelli.
151
+ usage: (d, t) => {
152
+ const c = d.cost;
153
+ if (!c || (c.totalPromptTokens === 0 && c.totalOutputTokens === 0))
154
+ return null;
155
+ const cache = c.totalCacheReadTokens + c.totalCacheWriteTokens;
156
+ let line = t.muted(`API nuovo ${formatTokenCount(c.totalInputTokens)}`);
157
+ if (cache > 0)
158
+ line += t.dark(` · cache ${formatTokenCount(cache)}`);
159
+ return line + t.dark(` · out ${formatTokenCount(c.totalOutputTokens)}`);
160
+ },
161
+ };
162
+ export function buildStatusLine(d, theme, opts = {}) {
163
+ // Override totale dall'estensione.
164
+ if (opts.render) {
165
+ const s = opts.render(d, theme);
166
+ return s == null ? "" : fitLine(" " + s, Math.max(0, d.width - 1));
167
+ }
168
+ const order = opts.order && opts.order.length ? opts.order : DEFAULT_ORDER;
169
+ const reg = { ...BUILTIN_SEGMENTS, ...(opts.custom ?? {}) };
170
+ const segs = order
171
+ .map((id) => { try {
172
+ return reg[id]?.(d, theme) ?? null;
173
+ }
174
+ catch {
175
+ return null;
176
+ } })
177
+ .filter((x) => Boolean(x));
178
+ if (!segs.length)
179
+ return "";
180
+ const sep = theme.dark(" · ");
181
+ // Se non entra, scarta dalla CODA (i segmenti meno importanti sono a destra),
182
+ // ma tieni sempre il primo.
183
+ const vis = [...segs];
184
+ while (vis.length > 1 && visibleLength(" " + vis.join(sep)) > d.width - 2)
185
+ vis.pop();
186
+ return fitLine(" " + vis.join(sep), Math.max(0, d.width - 1));
187
+ }
188
+ // Identita' e contesto su due righe; i permessi non vengono sacrificati
189
+ // ai nomi lunghi. Modello ed effort restano nel footer operativo.
190
+ export function buildTerminalHeader(d, theme) {
191
+ const width = Math.max(0, d.width - 3);
192
+ const project = oneLine(basename(d.cwd) || d.cwd);
193
+ const labels = {
194
+ normal: tr("Conferma azioni", "Ask before actions"),
195
+ acceptEdits: tr("Modifiche automatiche", "Automatic edits"),
196
+ auto: tr("Senza conferme", "No confirmations"),
197
+ };
198
+ const mode = labels[d.permissions ?? "normal"] ?? tr("Conferma azioni", "Ask before actions");
199
+ const brand = theme.accent(theme.bold("TALOS"));
200
+ const permission = d.permissions === "auto"
201
+ ? theme.yellow(mode) : theme.muted(mode);
202
+ const gap = width - terminalWidth("TALOS") - terminalWidth(mode);
203
+ const identity = gap >= 2 ? [brand + " ".repeat(gap) + permission] : [brand, permission];
204
+ const chat = d.sessionLabel ? ` · Chat: ${oneLine(d.sessionLabel)}` : "";
205
+ const context = theme.muted(tr("Progetto ", "Project ")) + theme.silver(project) + theme.muted(chat);
206
+ return [...identity, context].map((line) => " " + fitLine(line, width));
207
+ }
208
+ export function buildTerminalWelcome(width, theme) {
209
+ const lines = [
210
+ { text: tr("Suggerimento: /help guida · /chats chat recenti", "Tip: /help commands · /chats recent chats"), paint: theme.muted },
211
+ ];
212
+ return "\n" + lines.flatMap(({ text, paint }) => wrapText(text, Math.max(2, width - 3), true).map((line) => " " + paint(line))).join("\n") + "\n\n";
213
+ }
@@ -0,0 +1,8 @@
1
+ import { type Language } from "./locales.js";
2
+ interface SystemLanguageOptions {
3
+ readonly platform?: NodeJS.Platform;
4
+ readonly readNative?: () => readonly string[];
5
+ readonly intlLocale?: () => string;
6
+ }
7
+ export declare function systemLanguage(env: NodeJS.ProcessEnv, options?: SystemLanguageOptions): Language;
8
+ export {};
@@ -0,0 +1,41 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { detectLanguage } from "./locales.js";
3
+ // Read display-language preferences, not the Windows regional number/date
4
+ // format. A bounded, hidden subprocess runs once at startup, never per frame.
5
+ function nativeLanguages(platform) {
6
+ try {
7
+ if (platform === "win32") {
8
+ const script = "$override = Get-WinUILanguageOverride; if ($override) { $override.Name }; (Get-WinUserLanguageList).LanguageTag; (Get-UICulture).Name";
9
+ return execFileSync("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script], { encoding: "utf8", timeout: 2000, windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }).trim().split(/\s+/);
10
+ }
11
+ if (platform === "darwin") {
12
+ return execFileSync("defaults", ["read", "-g", "AppleLanguages"], { encoding: "utf8", timeout: 1500, stdio: ["ignore", "pipe", "ignore"] }).match(/[a-z]{2,3}(?:-[A-Za-z0-9]+)*/g) ?? [];
13
+ }
14
+ }
15
+ catch { /* Minimal shells and unavailable native APIs use the locale fallback. */ }
16
+ return [];
17
+ }
18
+ export function systemLanguage(env, options = {}) {
19
+ const explicit = env["LC_ALL"] || env["LC_MESSAGES"] || env["LANGUAGE"];
20
+ if (explicit)
21
+ return detectLanguage(explicit.split(":"));
22
+ const platform = options.platform ?? process.platform;
23
+ // Unix shells expose display language through LANG; Windows/macOS can
24
+ // distinguish it from regional formatting through their native preferences.
25
+ if (platform !== "win32" && platform !== "darwin" && env["LANG"])
26
+ return detectLanguage([env["LANG"]]);
27
+ try {
28
+ const native = (options.readNative ?? (() => nativeLanguages(platform)))().filter(value => value.trim());
29
+ if (native.length)
30
+ return detectLanguage(native);
31
+ }
32
+ catch { /* Fall through to the process locale. */ }
33
+ if (env["LANG"])
34
+ return detectLanguage([env["LANG"]]);
35
+ try {
36
+ return detectLanguage([(options.intlLocale ?? (() => Intl.DateTimeFormat().resolvedOptions().locale))()]);
37
+ }
38
+ catch {
39
+ return "en";
40
+ }
41
+ }
@@ -0,0 +1,2 @@
1
+ import type { VascendTaskStatus } from "../vascend/runtime.js";
2
+ export declare const TASK_STATUS_LABELS: Readonly<Record<VascendTaskStatus, string>>;
@@ -0,0 +1,7 @@
1
+ import { tr } from "./i18n.js";
2
+ export const TASK_STATUS_LABELS = {
3
+ get pending() { return tr("da fare", "pending"); },
4
+ get running() { return tr("in corso", "running"); },
5
+ get completed() { return tr("completata", "completed"); },
6
+ get failed() { return tr("fallita", "failed"); },
7
+ };
@@ -0,0 +1,4 @@
1
+ import type { ThemeMode } from "./theme.js";
2
+ export declare function backgroundModeFromRgb(r: string, g: string, b: string): ThemeMode;
3
+ export declare function parseOsc11(response: string): ThemeMode | null;
4
+ export declare function queryBackgroundMode(timeoutMs?: number): Promise<ThemeMode | null>;
@@ -0,0 +1,67 @@
1
+ import { stdin, stdout } from "node:process";
2
+ // Rilevamento del background reale del terminale via query OSC 11. Piu' preciso
3
+ // dell'euristica su COLORFGBG/env: si chiede al terminale il colore di sfondo
4
+ // (`ESC ] 11 ; ? BEL`) e si calcola la luminanza dalla risposta
5
+ // (`ESC ] 11 ; rgb:RRRR/GGGG/BBBB`). Va chiamato quando nessun altro sta
6
+ // leggendo stdin (es. all'avvio, prima dell'editor di input).
7
+ // Luminanza relativa -> dark/light. I componenti possono essere a 2 o 4 cifre
8
+ // esadecimali per canale; si usa il byte alto.
9
+ export function backgroundModeFromRgb(r, g, b) {
10
+ const norm = (h) => parseInt(h.slice(0, 2).padEnd(2, h.slice(0, 1) || "0"), 16) / 255;
11
+ const lum = 0.2126 * norm(r) + 0.7152 * norm(g) + 0.0722 * norm(b);
12
+ return lum > 0.5 ? "light" : "dark";
13
+ }
14
+ export function parseOsc11(response) {
15
+ const m = /\x1b\]11;rgb:([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)/.exec(response);
16
+ if (!m)
17
+ return null;
18
+ return backgroundModeFromRgb(m[1] ?? "0", m[2] ?? "0", m[3] ?? "0");
19
+ }
20
+ // Interroga il terminale e ritorna dark/light, o null se non TTY / nessuna
21
+ // risposta entro il timeout (terminale che non supporta OSC 11).
22
+ export function queryBackgroundMode(timeoutMs = 200) {
23
+ if (!stdout.isTTY || !stdin.isTTY || typeof stdin.setRawMode !== "function") {
24
+ return Promise.resolve(null);
25
+ }
26
+ return new Promise((resolve) => {
27
+ const wasRaw = stdin.isRaw;
28
+ const wasPaused = stdin.isPaused();
29
+ let buf = "";
30
+ let done = false;
31
+ const cleanup = () => {
32
+ clearTimeout(timer);
33
+ stdin.off("data", onData);
34
+ try {
35
+ stdin.setRawMode(Boolean(wasRaw));
36
+ }
37
+ catch {
38
+ // best effort
39
+ }
40
+ if (wasPaused)
41
+ stdin.pause();
42
+ };
43
+ const finish = (mode) => {
44
+ if (done)
45
+ return;
46
+ done = true;
47
+ cleanup();
48
+ resolve(mode);
49
+ };
50
+ const onData = (chunk) => {
51
+ buf += chunk.toString("latin1");
52
+ const mode = parseOsc11(buf);
53
+ if (mode)
54
+ finish(mode);
55
+ };
56
+ const timer = setTimeout(() => finish(null), timeoutMs);
57
+ try {
58
+ stdin.setRawMode(true);
59
+ }
60
+ catch {
61
+ // best effort
62
+ }
63
+ stdin.resume();
64
+ stdin.on("data", onData);
65
+ stdout.write("\x1b]11;?\x07");
66
+ });
67
+ }
@@ -0,0 +1,12 @@
1
+ export interface ScreenKey {
2
+ readonly name?: string;
3
+ readonly ctrl?: boolean;
4
+ readonly meta?: boolean;
5
+ readonly shift?: boolean;
6
+ }
7
+ export interface TerminalScreen {
8
+ render(width: number, height: number): readonly string[];
9
+ key(text: string, key: ScreenKey): "close" | void;
10
+ scroll(delta: number): void;
11
+ paste?(text: string): void;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ export declare function plainText(value: string): string;
2
+ export declare function terminalWidth(value: string): number;
3
+ export declare function exceedsTerminalWidth(value: string, width: number): boolean;
4
+ export declare function fitLine(value: string, width: number, ellipsis?: boolean): string;
5
+ export declare function padLine(value: string, width: number): string;
6
+ export declare function wrapText(value: string, width: number, wordWrap?: boolean): string[];
7
+ export declare function oneLine(value: string): string;
@@ -0,0 +1,123 @@
1
+ import { stripVTControlCharacters } from "node:util";
2
+ // Misure in celle, condivise dai pannelli. Il testo dei tool non puo' inviare
3
+ // comandi al terminale; colori e collegamenti sono aggiunti solo dal renderer.
4
+ export function plainText(value) {
5
+ return stripVTControlCharacters(value).replace(/\r\n?/g, "\n")
6
+ .replace(/[\x00-\x08\x0b-\x1f\x7f-\x9f]/g, "").replace(/\t/g, " ");
7
+ }
8
+ const graphemes = new Intl.Segmenter(undefined, { granularity: "grapheme" });
9
+ const printableAscii = /^[\x20-\x7e]*$/;
10
+ const ansi = /\x1b\[[0-9;]*m|\x1b\][\s\S]*?(?:\x07|\x1b\\)/g;
11
+ function cellWidth(s) {
12
+ const cp = s.codePointAt(0) ?? 0;
13
+ if (/^[\p{Mark}\p{Cf}]+$/u.test(s) || cp < 32)
14
+ return 0;
15
+ if (/\p{Extended_Pictographic}|\p{Regional_Indicator}/u.test(s))
16
+ return 2;
17
+ return cp >= 0x1100 && (cp <= 0x115f || cp === 0x2329 || cp === 0x232a ||
18
+ (cp >= 0x2e80 && cp <= 0xa4cf && cp !== 0x303f) ||
19
+ (cp >= 0xac00 && cp <= 0xd7a3) || (cp >= 0xf900 && cp <= 0xfaff) ||
20
+ (cp >= 0xfe10 && cp <= 0xfe19) || (cp >= 0xfe30 && cp <= 0xfe6f) ||
21
+ (cp >= 0xff00 && cp <= 0xff60) || (cp >= 0xffe0 && cp <= 0xffe6) ||
22
+ (cp >= 0x20000 && cp <= 0x3fffd)) ? 2 : 1;
23
+ }
24
+ export function terminalWidth(value) {
25
+ const clean = plainText(value);
26
+ if (printableAscii.test(clean))
27
+ return clean.length;
28
+ let width = 0;
29
+ for (const { segment } of graphemes.segment(clean))
30
+ width += cellWidth(segment);
31
+ return width;
32
+ }
33
+ // Le anteprime devono fermare la segmentazione appena superano il viewport,
34
+ // non misurare anche megabyte di contenuto che non saranno visualizzati.
35
+ export function exceedsTerminalWidth(value, width) {
36
+ const clean = plainText(value);
37
+ if (printableAscii.test(clean))
38
+ return clean.length > 0 && clean.length > width;
39
+ let used = 0;
40
+ for (const { segment } of graphemes.segment(clean)) {
41
+ used += cellWidth(segment);
42
+ if (used > width)
43
+ return true;
44
+ }
45
+ return false;
46
+ }
47
+ export function fitLine(value, width, ellipsis = true) {
48
+ const max = Math.max(0, Math.floor(width));
49
+ if (!max)
50
+ return "";
51
+ if (printableAscii.test(value)) {
52
+ if (value.length <= max)
53
+ return value;
54
+ return value.slice(0, Math.max(0, max - (ellipsis ? 1 : 0)))
55
+ + (ellipsis ? "…" : "") + "\x1b[0m\x1b]8;;\x1b\\";
56
+ }
57
+ if (!exceedsTerminalWidth(value, max))
58
+ return value;
59
+ const limit = Math.max(0, max - (ellipsis ? 1 : 0));
60
+ let used = 0;
61
+ let out = "";
62
+ // SGR e OSC sono atomici: non spezzare una sequenza a meta'.
63
+ const parts = value.split(new RegExp(`(${ansi.source})`, "g"));
64
+ outer: for (const part of parts) {
65
+ if (part.startsWith("\x1b")) {
66
+ out += part;
67
+ continue;
68
+ }
69
+ for (const { segment } of graphemes.segment(part)) {
70
+ const size = cellWidth(segment);
71
+ if (used + size > limit)
72
+ break outer;
73
+ out += segment;
74
+ used += size;
75
+ }
76
+ }
77
+ return out + (ellipsis ? "…" : "") + "\x1b[0m\x1b]8;;\x1b\\";
78
+ }
79
+ export function padLine(value, width) {
80
+ const fitted = fitLine(value, width);
81
+ return fitted + " ".repeat(Math.max(0, width - terminalWidth(fitted)));
82
+ }
83
+ export function wrapText(value, width, wordWrap = false) {
84
+ const max = Math.max(2, width);
85
+ const lines = [];
86
+ for (const line of plainText(value).split("\n")) {
87
+ if (!wordWrap && printableAscii.test(line)) {
88
+ const chunk = Math.max(1, Math.floor(max));
89
+ if (!line.length)
90
+ lines.push("");
91
+ for (let i = 0; i < line.length; i += chunk)
92
+ lines.push(line.slice(i, i + chunk));
93
+ continue;
94
+ }
95
+ let row = "";
96
+ let used = 0;
97
+ for (const { segment } of graphemes.segment(line)) {
98
+ const size = cellWidth(segment);
99
+ if (used + size > max) {
100
+ const split = wordWrap ? row.lastIndexOf(" ") : -1;
101
+ if (split > 0 && terminalWidth(row.slice(split + 1) + segment) <= max) {
102
+ lines.push(row.slice(0, split).trimEnd());
103
+ row = row.slice(split + 1);
104
+ used = terminalWidth(row);
105
+ }
106
+ else {
107
+ lines.push(row);
108
+ row = "";
109
+ used = 0;
110
+ }
111
+ if (wordWrap && !row && segment === " ")
112
+ continue;
113
+ }
114
+ row += segment;
115
+ used += size;
116
+ }
117
+ lines.push(row);
118
+ }
119
+ return lines;
120
+ }
121
+ export function oneLine(value) {
122
+ return plainText(value).replace(/\s+/g, " ").trim();
123
+ }
@@ -0,0 +1,25 @@
1
+ export declare const THEME_TOKENS: readonly ["accent", "border", "borderAccent", "borderMuted", "success", "error", "warning", "muted", "dim", "text", "thinkingText", "selectedBg", "userMessageBg", "userMessageText", "attachmentRef", "customMessageBg", "customMessageText", "customMessageLabel", "toolPendingBg", "toolSuccessBg", "toolErrorBg", "toolTitle", "toolOutput", "mdHeading", "mdLink", "mdLinkUrl", "mdCode", "mdCodeBlock", "mdCodeBlockBorder", "mdQuote", "mdQuoteBorder", "mdHr", "mdListBullet", "toolDiffAdded", "toolDiffAddedBg", "toolDiffRemoved", "toolDiffRemovedBg", "toolDiffContext", "toolDiffContextBg", "toolDiffHeaderBg", "toolDiffBorder", "syntaxComment", "syntaxKeyword", "syntaxFunction", "syntaxVariable", "syntaxString", "syntaxNumber", "syntaxType", "syntaxOperator", "syntaxPunctuation", "thinkingOff", "thinkingMinimal", "thinkingLow", "thinkingMedium", "thinkingHigh", "thinkingXhigh", "bashMode"];
2
+ export type ThemeToken = (typeof THEME_TOKENS)[number];
3
+ export type ThemeMode = "dark" | "light";
4
+ export interface ThemeSpec {
5
+ readonly name: string;
6
+ readonly mode: ThemeMode;
7
+ readonly vars: Readonly<Record<string, string | number>>;
8
+ readonly colors: Readonly<Record<ThemeToken, string | number>>;
9
+ }
10
+ export declare const VASCEND_DARK: ThemeSpec;
11
+ export declare const VASCEND_LIGHT: ThemeSpec;
12
+ export declare const VASCEND_LIME: ThemeSpec;
13
+ export declare const BUILTIN_THEMES: readonly ThemeSpec[];
14
+ export declare function ansiFor(spec: ThemeSpec, value: string | number, background?: boolean): string;
15
+ export declare function tokenAnsi(spec: ThemeSpec, token: ThemeToken, background?: boolean): string;
16
+ export declare function painter(spec: ThemeSpec): (token: ThemeToken, s: string, background?: boolean) => string;
17
+ export declare function parseThemeFile(path: string): ThemeSpec | null;
18
+ export interface LoadedThemes {
19
+ readonly themes: readonly ThemeSpec[];
20
+ readonly paths: Readonly<Record<string, string>>;
21
+ }
22
+ export declare function loadThemes(cwd: string, env: NodeJS.ProcessEnv, projectTrusted?: boolean, extraDirs?: readonly string[]): LoadedThemes;
23
+ export declare function findTheme(themes: readonly ThemeSpec[], name: string): ThemeSpec | undefined;
24
+ export declare function detectTerminalMode(env: NodeJS.ProcessEnv): ThemeMode;
25
+ export declare function defaultThemeName(env: NodeJS.ProcessEnv): string;