@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,167 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { extname, isAbsolute, resolve } from "node:path";
3
+ import { isImageDataUri, isImagePath, parseImageDataUri, unquotePath } from "./images.js";
4
+ import { IMAGE_REF } from "./attachment-refs.js";
5
+ // MIME del media dedotto dall'estensione (fallback png). Allineato ai formati
6
+ // immagine supportati dai provider.
7
+ const MIME_BY_EXT = {
8
+ ".png": "image/png",
9
+ ".jpg": "image/jpeg",
10
+ ".jpeg": "image/jpeg",
11
+ ".webp": "image/webp",
12
+ ".gif": "image/gif",
13
+ };
14
+ // Riconosce se una stringa incollata e' un riferimento a un'immagine allegabile:
15
+ // data URI immagine, oppure path a un file immagine ESISTENTE sul disco.
16
+ export function detectImageSource(raw, cwd) {
17
+ const s = raw.trim();
18
+ if (!s)
19
+ return null;
20
+ if (isImageDataUri(s)) {
21
+ const parsed = parseImageDataUri(s);
22
+ return parsed ? { kind: "data", bytes: parsed.bytes, mime: parsed.mime } : null;
23
+ }
24
+ const candidate = unquotePath(s);
25
+ // Una sola "parola" plausibile come path (niente spazi a meno che fosse quotato).
26
+ if (!isImagePath(candidate))
27
+ return null;
28
+ const abs = isAbsolute(candidate) ? candidate : resolve(cwd, candidate);
29
+ try {
30
+ if (existsSync(abs) && statSync(abs).isFile())
31
+ return { kind: "file", path: abs };
32
+ }
33
+ catch {
34
+ // permessi/path non valido: non e' un allegato
35
+ }
36
+ return null;
37
+ }
38
+ export class ImageRegistry {
39
+ items = [];
40
+ seq = 0;
41
+ // Aggiunge un file immagine. Ritorna l'allegato (con ref "img #N").
42
+ addFile(path, label) {
43
+ const index = ++this.seq;
44
+ const att = {
45
+ index,
46
+ ref: `[Image #${index}]`,
47
+ kind: "file",
48
+ path,
49
+ label: label || basename(path),
50
+ };
51
+ this.items.push(att);
52
+ return att;
53
+ }
54
+ // Aggiunge byte da data URI. Ritorna l'allegato (con ref "img #N").
55
+ addData(bytes, mime, label) {
56
+ const index = ++this.seq;
57
+ const att = {
58
+ index,
59
+ ref: `[Image #${index}]`,
60
+ kind: "data",
61
+ bytes,
62
+ mime,
63
+ label: label || "incollata",
64
+ };
65
+ this.items.push(att);
66
+ return att;
67
+ }
68
+ // Registra una sorgente gia' rilevata (detectImageSource).
69
+ add(src) {
70
+ return src.kind === "file" ? this.addFile(src.path) : this.addData(src.bytes, src.mime);
71
+ }
72
+ get(index) {
73
+ return this.items.find((a) => a.index === index);
74
+ }
75
+ // Risolve un riferimento testuale "img #N" (case-insensitive, spazi opzionali).
76
+ resolveRef(ref) {
77
+ const m = new RegExp(IMAGE_REF, "i").exec(ref);
78
+ return m ? this.get(Number(m[1])) : undefined;
79
+ }
80
+ all() {
81
+ return this.items;
82
+ }
83
+ // Costruisce le parti immagine (ImagePart, base64 inline) per tutti i ref
84
+ // "img #N" PRESENTI nel testo e RISOLVIBILI in questo registro. I byte dei
85
+ // file vengono riletti dal disco; le immagini incollate hanno gia' i byte.
86
+ // Non inviare il solo segnaposto quando un allegato non e' piu' disponibile.
87
+ imagePartsFor(text, opts = {}) {
88
+ const maxTotal = opts.maxTotalBytes ?? 16 * 1024 * 1024;
89
+ const parts = [];
90
+ const seen = new Set();
91
+ let used = 0;
92
+ for (const idx of findImageRefs(text)) {
93
+ if (seen.has(idx))
94
+ continue;
95
+ seen.add(idx);
96
+ const att = this.get(idx);
97
+ if (!att)
98
+ throw new Error(`Allegato img #${idx} non disponibile in questa chat. Incolla nuovamente l'immagine.`);
99
+ let bytes;
100
+ let mime = att.mime;
101
+ if (att.kind === "data") {
102
+ bytes = att.bytes;
103
+ }
104
+ else if (att.path) {
105
+ try {
106
+ bytes = readFileSync(att.path);
107
+ }
108
+ catch {
109
+ throw new Error(`Allegato ${att.ref} non leggibile. Il file potrebbe essere stato spostato: incolla nuovamente l'immagine.`);
110
+ }
111
+ mime = mime || MIME_BY_EXT[extname(att.path).toLowerCase()] || "image/png";
112
+ }
113
+ if (!bytes || !bytes.length)
114
+ throw new Error(`Allegato ${att.ref} vuoto. Incolla nuovamente l'immagine.`);
115
+ if (used + bytes.length > maxTotal)
116
+ throw new Error(`Allegati oltre il limite di ${Math.round(maxTotal / 1024 / 1024)} MB. Riduci le dimensioni o invia meno immagini insieme.`);
117
+ used += bytes.length;
118
+ parts.push({
119
+ type: "image",
120
+ data: bytes.toString("base64"),
121
+ mime: mime || "image/png",
122
+ source: att.ref,
123
+ });
124
+ }
125
+ return parts;
126
+ }
127
+ get count() {
128
+ return this.items.length;
129
+ }
130
+ // Nuova/ripresa sessione: i riferimenti img #N non devono attraversare il
131
+ // confine e allegare accidentalmente byte della conversazione precedente.
132
+ clear() {
133
+ this.items.length = 0;
134
+ this.seq = 0;
135
+ }
136
+ }
137
+ function basename(p) {
138
+ const parts = p.split(/[\\/]/);
139
+ return parts[parts.length - 1] || p;
140
+ }
141
+ // Trova tutti i riferimenti "img #N" presenti in un testo (per l'anteprima).
142
+ export function findImageRefs(text) {
143
+ const out = [];
144
+ const re = new RegExp(IMAGE_REF, "gi");
145
+ let m;
146
+ while ((m = re.exec(text)) !== null)
147
+ out.push(Number(m[1]));
148
+ return out;
149
+ }
150
+ // Span di un token "img #N" che TOCCA la posizione del cursore (1 char a
151
+ // sinistra, come per il backspace). Ritorna {start, end, index} se il cursore
152
+ // e' all'interno o subito dopo un token, altrimenti null. Serve per la
153
+ // cancellazione ATOMICA: cancellando un carattere del token, sparisce tutto il
154
+ // riferimento (l'allegato si scollega), stile Claude Code.
155
+ export function imageTokenSpanAt(text, cursor) {
156
+ const re = new RegExp(IMAGE_REF, "gi");
157
+ let m;
158
+ while ((m = re.exec(text)) !== null) {
159
+ const start = m.index;
160
+ const end = m.index + m[0].length;
161
+ // Il backspace agisce sul carattere a sinistra del cursore: il token e'
162
+ // "toccato" se il cursore cade dentro (start, end] -> cancelliamo tutto.
163
+ if (cursor > start && cursor <= end)
164
+ return { start, end, index: Number(m[1]) };
165
+ }
166
+ return null;
167
+ }
@@ -0,0 +1,12 @@
1
+ export type ImageSupport = "kitty" | "iterm" | "none";
2
+ export declare function imageSupport(env: NodeJS.ProcessEnv): ImageSupport;
3
+ export declare function isImagePath(path: string): boolean;
4
+ export declare function isImageDataUri(s: string): boolean;
5
+ export declare function parseImageDataUri(s: string): {
6
+ bytes: Buffer;
7
+ mime: string;
8
+ } | null;
9
+ export declare function unquotePath(s: string): string;
10
+ export declare function encodeImage(bytes: Buffer, support: ImageSupport): string;
11
+ export declare function renderImageFile(absPath: string, env: NodeJS.ProcessEnv): string | null;
12
+ export declare function renderImageBytes(bytes: Buffer, env: NodeJS.ProcessEnv): string | null;
@@ -0,0 +1,87 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { extname } from "node:path";
3
+ // Rileva il supporto grafico dall'ambiente del terminale.
4
+ export function imageSupport(env) {
5
+ if (env["TERM"] === "xterm-kitty" || env["KITTY_WINDOW_ID"])
6
+ return "kitty";
7
+ const prog = env["TERM_PROGRAM"];
8
+ // iTerm2 e Warp implementano il protocollo immagini di iTerm2.
9
+ if (prog === "iTerm.app" || prog === "WarpTerminal" || env["LC_TERMINAL"] === "iTerm2")
10
+ return "iterm";
11
+ return "none";
12
+ }
13
+ const IMAGE_EXT = new Set([".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp"]);
14
+ export function isImagePath(path) {
15
+ return IMAGE_EXT.has(extname(path).toLowerCase());
16
+ }
17
+ // Data URI immagine (es. "data:image/png;base64,iVBOR..."): alcuni terminali e
18
+ // strumenti incollano l'immagine cosi'. Rilevato per estrarre il mime.
19
+ const DATA_URI_RE = /^data:image\/([a-z0-9.+-]+);base64,([A-Za-z0-9+/=\s]+)$/i;
20
+ export function isImageDataUri(s) {
21
+ return DATA_URI_RE.test(s.trim());
22
+ }
23
+ // Estrae bytes + mime da un data URI immagine, o null se non valido.
24
+ export function parseImageDataUri(s) {
25
+ const m = DATA_URI_RE.exec(s.trim());
26
+ if (!m)
27
+ return null;
28
+ try {
29
+ const bytes = Buffer.from(m[2].replace(/\s+/g, ""), "base64");
30
+ if (bytes.length === 0)
31
+ return null;
32
+ return { bytes, mime: `image/${m[1].toLowerCase()}` };
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ // Toglie eventuali apici/virgolette attorno a un path incollato (i file manager
39
+ // spesso copiano il path quotato, es. "C:\foto\img.png" o 'foto.png').
40
+ export function unquotePath(s) {
41
+ const t = s.trim();
42
+ if (t.length >= 2 && ((t[0] === '"' && t.at(-1) === '"') || (t[0] === "'" && t.at(-1) === "'"))) {
43
+ return t.slice(1, -1);
44
+ }
45
+ return t;
46
+ }
47
+ // Codifica i byte immagine nella sequenza di escape del protocollo.
48
+ export function encodeImage(bytes, support) {
49
+ if (support === "iterm") {
50
+ const b64 = bytes.toString("base64");
51
+ return `\x1b]1337;File=inline=1;size=${bytes.length}:${b64}\x07`;
52
+ }
53
+ if (support === "kitty") {
54
+ const b64 = bytes.toString("base64");
55
+ const chunkSize = 4096;
56
+ let out = "";
57
+ for (let i = 0; i < b64.length; i += chunkSize) {
58
+ const chunk = b64.slice(i, i + chunkSize);
59
+ const more = i + chunkSize < b64.length ? 1 : 0;
60
+ // f=100: PNG/auto; a=T: trasmetti e mostra; m: continua se ci sono altri chunk.
61
+ const ctrl = i === 0 ? `a=T,f=100,m=${more}` : `m=${more}`;
62
+ out += `\x1b_G${ctrl};${chunk}\x1b\\`;
63
+ }
64
+ return out;
65
+ }
66
+ return "";
67
+ }
68
+ // Rende un file immagine come sequenza inline, o null se non supportato/illeggibile.
69
+ export function renderImageFile(absPath, env) {
70
+ const support = imageSupport(env);
71
+ if (support === "none")
72
+ return null;
73
+ try {
74
+ return encodeImage(readFileSync(absPath), support);
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ // Rende byte immagine gia' in memoria (es. da un data URI) come sequenza inline,
81
+ // o null se il terminale non supporta grafica.
82
+ export function renderImageBytes(bytes, env) {
83
+ const support = imageSupport(env);
84
+ if (support === "none")
85
+ return null;
86
+ return encodeImage(bytes, support) || null;
87
+ }
@@ -0,0 +1,13 @@
1
+ import type { PiConfig } from "../core/config.js";
2
+ import type { ThemeSpec } from "./theme.js";
3
+ import type { StartupMeta } from "./branding.js";
4
+ export interface IntroOptions {
5
+ readonly columns?: number;
6
+ readonly write: (s: string) => void;
7
+ readonly replaceTail?: (lines: readonly string[], count: number) => void;
8
+ readonly animate?: boolean;
9
+ readonly durationMs?: number;
10
+ readonly fps?: number;
11
+ readonly sweeps?: number;
12
+ }
13
+ export declare function playIntro(config: PiConfig, meta: StartupMeta, opts: IntroOptions, spec?: ThemeSpec): Promise<void>;
@@ -0,0 +1,109 @@
1
+ import { frostSilver, fgRgb, renderStartup, renderStartupLines } from "./branding.js";
2
+ const RESET = "\x1b[0m";
3
+ // Converte una riga ANSI del banner in celle, leggendo l'intensita' dal colore
4
+ // SGR attivo a ogni carattere.
5
+ function toCells(line) {
6
+ const cells = [];
7
+ let i = 0;
8
+ let intensity = 0.62;
9
+ while (i < line.length) {
10
+ if (line[i] === "\x1b" && line[i + 1] === "[") {
11
+ const end = line.indexOf("m", i);
12
+ if (end !== -1) {
13
+ intensity = intensityFromSgr(line.slice(i + 2, end), intensity);
14
+ i = end + 1;
15
+ continue;
16
+ }
17
+ }
18
+ const ch = line[i] ?? " ";
19
+ cells.push({ ch, base: ch === " " ? 0 : intensity });
20
+ i += 1;
21
+ }
22
+ return cells;
23
+ }
24
+ // Stima l'intensita' (0..1) da una sequenza SGR (truecolor -> luminanza; reset
25
+ // -> default; dim -> basso).
26
+ function intensityFromSgr(body, current) {
27
+ const parts = body.split(";").map((p) => Number(p));
28
+ if (body === "" || parts[0] === 0)
29
+ return 0.62;
30
+ if (parts[0] === 2)
31
+ return 0.4;
32
+ const idx = parts.indexOf(38);
33
+ if (idx !== -1 && parts[idx + 1] === 2) {
34
+ const r = parts[idx + 2] ?? 200;
35
+ const g = parts[idx + 3] ?? 200;
36
+ const b = parts[idx + 4] ?? 200;
37
+ const lum = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
38
+ return Math.max(0.25, Math.min(1, lum));
39
+ }
40
+ return current;
41
+ }
42
+ // Disegna un frame: ogni cella usa l'argento-gelido al livello dato
43
+ // dall'intensita' base modulata da un'onda di luce diagonale (sweep) che si
44
+ // muove con `phase`. `settle` (0->1) attenua il riflesso verso lo stato fisso.
45
+ function paintFrame(grid, width, phase, settle) {
46
+ const lines = [];
47
+ const height = grid.length;
48
+ const denom = width + height * 0.6 || 1;
49
+ for (let y = 0; y < height; y += 1) {
50
+ const row = grid[y] ?? [];
51
+ let out = "";
52
+ let lastEsc = "";
53
+ for (let x = 0; x < row.length; x += 1) {
54
+ const cell = row[x];
55
+ if (cell.ch === " " || cell.base <= 0) {
56
+ out += " ";
57
+ lastEsc = "";
58
+ continue;
59
+ }
60
+ const diag = (x + y * 0.6) / denom;
61
+ const d = diag - phase;
62
+ const glow = Math.exp(-(d * d) / 0.012);
63
+ const lift = glow * (0.45 + 0.55 * (1 - settle));
64
+ const t = Math.min(1, cell.base * (0.72 + 0.28 * settle) + lift * (1 - cell.base * 0.4));
65
+ const esc = fgRgb(frostSilver(t));
66
+ out += esc === lastEsc ? cell.ch : esc + cell.ch;
67
+ lastEsc = esc;
68
+ }
69
+ lines.push(out + RESET);
70
+ }
71
+ return lines;
72
+ }
73
+ function sleep(ms) {
74
+ return new Promise((resolve) => setTimeout(resolve, ms));
75
+ }
76
+ // Riproduce l'intro animata "argento gelido". Senza replaceTail o con
77
+ // animate=false scrive il banner statico. Con animazione: scrive il blocco una
78
+ // volta, poi ne aggiorna le righe frame per frame fino allo stato fisso.
79
+ export async function playIntro(config, meta, opts, spec) {
80
+ const columns = opts.columns ?? 100;
81
+ const lines = renderStartupLines(config, meta, { columns }, spec);
82
+ const grid = lines.map((l) => toCells(l));
83
+ const width = Math.max(1, ...grid.map((row) => row.length));
84
+ const count = lines.length;
85
+ if (opts.animate === false || !opts.replaceTail) {
86
+ opts.write(renderStartup(config, meta, { columns }, spec));
87
+ return;
88
+ }
89
+ const fps = Math.max(12, Math.min(60, opts.fps ?? 28));
90
+ const duration = Math.max(300, opts.durationMs ?? 850);
91
+ const sweeps = Math.max(1, opts.sweeps ?? 2);
92
+ const frameMs = 1000 / fps;
93
+ const totalFrames = Math.max(1, Math.round(duration / frameMs));
94
+ // Primo frame (riflesso fuori scena) per riservare le righe nel log.
95
+ opts.write(paintFrame(grid, width, -0.3, 0).join("\n") + "\n");
96
+ for (let f = 1; f <= totalFrames; f += 1) {
97
+ const p = f / totalFrames;
98
+ const phase = ((p * sweeps) % 1) * 1.4 - 0.2;
99
+ const settle = Math.min(1, Math.max(0, (p - 0.55) / 0.45));
100
+ opts.replaceTail(paintFrame(grid, width, phase, settle), count);
101
+ await sleep(frameMs);
102
+ }
103
+ // Stato finale: le righe ORIGINALI del banner, non un frame ridipinto.
104
+ // paintFrame emette solo colori di foreground: sui mezzi-blocchi del logo
105
+ // (che usano coppie fg+bg per il dettaglio) il ridisegno perdeva meta' dei
106
+ // pixel e il logo restava "bucato", diverso da quello dell'avvio dev di
107
+ // Horizon. Il riflesso e' l'effetto; il banner vero e' lo stato stabile.
108
+ opts.replaceTail([...lines], count);
109
+ }
@@ -0,0 +1,6 @@
1
+ import { type Language, type LanguagePreference } from "./locales.js";
2
+ import { type StatoOnboarding } from "./onboarding.js";
3
+ export declare function languagePreference(state: StatoOnboarding, env: NodeJS.ProcessEnv): LanguagePreference;
4
+ export declare function initializeLanguage(env: NodeJS.ProcessEnv): Language;
5
+ export declare function saveLanguagePreference(env: NodeJS.ProcessEnv, preference: LanguagePreference): boolean;
6
+ export declare function onboardingLanguage(state: StatoOnboarding, env: NodeJS.ProcessEnv): StatoOnboarding;
@@ -0,0 +1,24 @@
1
+ import { getLanguage, setLanguage, systemLanguage } from "./i18n.js";
2
+ import { normalizePreference } from "./locales.js";
3
+ import { leggiOnboarding, salvaOnboarding } from "./onboarding.js";
4
+ export function languagePreference(state, env) {
5
+ return normalizePreference(env["TALOS_LANGUAGE"]) ?? state.languagePreference ?? state.lingua ?? "system";
6
+ }
7
+ export function initializeLanguage(env) {
8
+ const preference = languagePreference(leggiOnboarding(env), env);
9
+ const language = preference === "system" ? systemLanguage(env) : preference;
10
+ setLanguage(language);
11
+ return language;
12
+ }
13
+ export function saveLanguagePreference(env, preference) {
14
+ const language = preference === "system" ? systemLanguage(env) : preference;
15
+ if (!salvaOnboarding(env, { ...leggiOnboarding(env), lingua: language, languagePreference: preference }))
16
+ return false;
17
+ setLanguage(language);
18
+ return true;
19
+ }
20
+ // Persisting terms must retain automatic system selection, rather than turn
21
+ // the currently detected language into a permanent explicit preference.
22
+ export function onboardingLanguage(state, env) {
23
+ return { ...state, lingua: getLanguage(), languagePreference: languagePreference(state, env) };
24
+ }
@@ -0,0 +1,2 @@
1
+ export declare function livePreview(value: string, cells: number): string;
2
+ export declare function liveResultSummary(output: string, summary: string | null, columns: number): string;
@@ -0,0 +1,18 @@
1
+ import { exceedsTerminalWidth, fitLine, oneLine, plainText, terminalWidth } from "./terminal-text.js";
2
+ import { tr } from "./i18n.js";
3
+ // Una riga di log deve restare una riga anche con input multilinea o ANSI
4
+ // esterno. Il dato originale resta nel ReviewStore, non in questa anteprima.
5
+ export function livePreview(value, cells) {
6
+ return fitLine(oneLine(value), Math.max(0, cells));
7
+ }
8
+ export function liveResultSummary(output, summary, columns) {
9
+ const rows = plainText(output).trim().split("\n");
10
+ const first = summary ?? rows.find(row => row.trim()) ?? tr("nessun output", "no output");
11
+ const width = Math.max(1, columns - 7);
12
+ const hidden = rows.length > 1 || exceedsTerminalWidth(oneLine(first), width);
13
+ const hint = columns >= 48 ? tr(" · Ctrl+R dettagli", " · Ctrl+R details") : " · Ctrl+R";
14
+ if (!hidden)
15
+ return livePreview(first, width);
16
+ const suffix = (rows.length > 1 ? " · " + tr("{count} righe", "{count} lines", { count: rows.length }) : "") + hint;
17
+ return livePreview(first, Math.max(1, width - terminalWidth(suffix))) + fitLine(suffix, Math.max(0, width - 1));
18
+ }
@@ -0,0 +1,19 @@
1
+ export declare const SUPPORTED_LANGUAGES: readonly ["it", "en", "es", "de"];
2
+ export type Language = typeof SUPPORTED_LANGUAGES[number];
3
+ export type LanguagePreference = Language | "system";
4
+ export declare const LANGUAGES: readonly [{
5
+ readonly id: "it";
6
+ readonly nome: "Italiano";
7
+ }, {
8
+ readonly id: "en";
9
+ readonly nome: "English";
10
+ }, {
11
+ readonly id: "es";
12
+ readonly nome: "Español";
13
+ }, {
14
+ readonly id: "de";
15
+ readonly nome: "Deutsch";
16
+ }];
17
+ export declare function normalizeLanguage(value: unknown): Language | undefined;
18
+ export declare function normalizePreference(value: unknown): LanguagePreference | undefined;
19
+ export declare function detectLanguage(languages: readonly string[]): Language;
@@ -0,0 +1,22 @@
1
+ export const SUPPORTED_LANGUAGES = ["it", "en", "es", "de"];
2
+ export const LANGUAGES = [
3
+ { id: "it", nome: "Italiano" }, { id: "en", nome: "English" },
4
+ { id: "es", nome: "Español" }, { id: "de", nome: "Deutsch" },
5
+ ];
6
+ export function normalizeLanguage(value) {
7
+ if (typeof value !== "string")
8
+ return undefined;
9
+ const base = value.trim().toLowerCase().split(/[-_.@]/)[0];
10
+ return SUPPORTED_LANGUAGES.find(language => language === base);
11
+ }
12
+ export function normalizePreference(value) {
13
+ return value === "system" || value === "auto" ? "system" : normalizeLanguage(value);
14
+ }
15
+ export function detectLanguage(languages) {
16
+ for (const locale of languages) {
17
+ const language = normalizeLanguage(locale);
18
+ if (language)
19
+ return language;
20
+ }
21
+ return "en";
22
+ }
@@ -0,0 +1,17 @@
1
+ import type { ProviderRegistry } from "../providers/registry.js";
2
+ export type LoginMethodId = "claude-code" | "chatgpt" | "openrouter" | "api-keys";
3
+ export interface LoginRow {
4
+ readonly id: LoginMethodId;
5
+ readonly label: string;
6
+ readonly configured: boolean;
7
+ readonly needsRefresh: boolean;
8
+ readonly detail: string;
9
+ readonly command?: readonly string[];
10
+ }
11
+ /**
12
+ * Stato non sensibile dei metodi di accesso supportati da Talos.
13
+ * Le credenziali non lasciano mai i rispettivi store; qui arrivano soltanto
14
+ * presenza e scadenza, utili al menu `/login`.
15
+ */
16
+ export declare function loginRows(env: NodeJS.ProcessEnv, registry: ProviderRegistry, now?: number): readonly LoginRow[];
17
+ export declare function loginStatusLabel(row: LoginRow): string;
@@ -0,0 +1,58 @@
1
+ import { tr } from "./i18n.js";
2
+ import { isExpired, readClaudeCreds, readCodexCreds } from "../providers/oauth-store.js";
3
+ /**
4
+ * Stato non sensibile dei metodi di accesso supportati da Talos.
5
+ * Le credenziali non lasciano mai i rispettivi store; qui arrivano soltanto
6
+ * presenza e scadenza, utili al menu `/login`.
7
+ */
8
+ export function loginRows(env, registry, now = Date.now()) {
9
+ const claude = readClaudeCreds(env);
10
+ const codex = readCodexCreds(env);
11
+ const claudeExpired = Boolean(claude && isExpired(claude, now));
12
+ const codexExpired = Boolean(codex && isExpired(codex, now));
13
+ const openRouterConfigured = Boolean(registry.get("openrouter"));
14
+ return [
15
+ {
16
+ id: "claude-code",
17
+ label: "Claude Code",
18
+ configured: Boolean(claude),
19
+ needsRefresh: claudeExpired,
20
+ detail: claude
21
+ ? (claudeExpired ? tr("sessione scaduta, accedi di nuovo", "session expired, sign in again") : tr("abbonamento rilevato", "subscription detected"))
22
+ : tr("accedi con Claude Pro o Max", "sign in with Claude Pro or Max"),
23
+ command: ["claude", "auth", "login"],
24
+ },
25
+ {
26
+ id: "chatgpt",
27
+ label: "ChatGPT / Codex",
28
+ configured: Boolean(codex),
29
+ needsRefresh: codexExpired,
30
+ detail: codex
31
+ ? (codexExpired ? tr("sessione scaduta, accedi di nuovo", "session expired, sign in again") : tr("abbonamento rilevato", "subscription detected"))
32
+ : tr("accedi con ChatGPT Plus o Pro", "sign in with ChatGPT Plus or Pro"),
33
+ command: ["codex", "login"],
34
+ },
35
+ {
36
+ id: "openrouter",
37
+ label: "OpenRouter",
38
+ configured: openRouterConfigured,
39
+ needsRefresh: false,
40
+ detail: openRouterConfigured ? tr("account o API key collegati", "account or API key connected") : tr("OAuth nel browser o API key", "browser OAuth or API key"),
41
+ },
42
+ {
43
+ id: "api-keys",
44
+ label: tr("Altri provider", "Other providers"),
45
+ configured: registry.list().some((provider) => provider.id !== "ollama" &&
46
+ provider.id !== "claude-code" &&
47
+ provider.id !== "chatgpt" &&
48
+ provider.id !== "openrouter"),
49
+ needsRefresh: false,
50
+ detail: tr("Anthropic, OpenAI, Gemini, Grok e altri via API key", "Anthropic, OpenAI, Gemini, Grok and others via API key"),
51
+ },
52
+ ];
53
+ }
54
+ export function loginStatusLabel(row) {
55
+ if (row.needsRefresh)
56
+ return tr("da rinnovare", "renew sign-in");
57
+ return row.configured ? tr("collegato", "connected") : tr("non collegato", "not connected");
58
+ }
@@ -0,0 +1,8 @@
1
+ export interface LogoRenderOptions {
2
+ readonly columns?: number;
3
+ readonly rows?: number;
4
+ readonly samples?: number;
5
+ readonly ansi?: boolean;
6
+ }
7
+ export declare function renderVascendTerminalLogo(options?: LogoRenderOptions): readonly string[];
8
+ export declare function renderBlockLogo(svg: string, options?: LogoRenderOptions): readonly string[];