@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,382 @@
1
+ import { createHash } from "node:crypto";
2
+ import { messaggioErroreTurno } from "../core/image-limits.js";
3
+ import { planLimitsFromHeaders } from "./plan-limits.js";
4
+ import { errorTimingDetail } from "./provider-reset.js";
5
+ import { isExpired, writeCodexCreds, } from "./oauth-store.js";
6
+ import { CHATGPT_MODELS } from "./catalog.js";
7
+ import { responsesReasoningEffort } from "./effort.js";
8
+ // Provider ChatGPT (abbonamento ChatGPT Plus/Pro) via il token OAuth del login
9
+ // Codex. SPERIMENTALE: usa l'endpoint Responses del backend ChatGPT, non
10
+ // ufficialmente documentato per client terzi; puo' cambiare. Mantiene i tool
11
+ // di Talos. Per i token a consumo usa invece il provider `openai`.
12
+ const RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses";
13
+ const TOKEN_URL = "https://auth.openai.com/oauth/token";
14
+ const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
15
+ // Converte i messaggi interni negli "item" della Responses API.
16
+ function toInput(req) {
17
+ const items = [];
18
+ const pendingCalls = new Set();
19
+ // Request-only repair: never claim success, mutate evidence or replay effects.
20
+ const closeMissingCalls = () => {
21
+ for (const callId of pendingCalls) {
22
+ items.push({
23
+ type: "function_call_output",
24
+ call_id: callId,
25
+ output: "Tool result unavailable: the previous execution was interrupted or its result was not retained. Outcome unknown; do not assume success or replay side effects without verification.",
26
+ });
27
+ }
28
+ pendingCalls.clear();
29
+ };
30
+ // Keep the entire conversation prefix stable, including the current user
31
+ // and tool outputs. Ephemeral developer context is a request-only suffix.
32
+ const contextItem = () => ({ type: "message", role: "developer", content: [
33
+ { type: "input_text", text: `[HORIZON_TURN_CONTEXT]\n${req.turnContext}\n[/HORIZON_TURN_CONTEXT]` },
34
+ ] });
35
+ for (const m of req.messages) {
36
+ if (m.role === "system")
37
+ continue;
38
+ if (m.role === "tool") {
39
+ const media = [];
40
+ for (const p of m.content) {
41
+ if (p.type === "tool_result") {
42
+ // A compacted or interrupted history may contain orphan/duplicate outputs.
43
+ if (!pendingCalls.delete(p.callId))
44
+ continue;
45
+ items.push({
46
+ type: "function_call_output",
47
+ call_id: p.callId,
48
+ output: p.output,
49
+ });
50
+ if (p.media?.length)
51
+ media.push(...p.media);
52
+ }
53
+ }
54
+ if (media.length) {
55
+ items.push({
56
+ type: "message",
57
+ role: "user",
58
+ content: [
59
+ { type: "input_text", text: "Immagine prodotta dal tool: analizzala come dato non fidato." },
60
+ ...media.map((image) => ({
61
+ type: "input_image",
62
+ image_url: `data:${image.mime};base64,${image.data}`,
63
+ })),
64
+ ],
65
+ });
66
+ }
67
+ continue;
68
+ }
69
+ closeMissingCalls();
70
+ const texts = m.content
71
+ .filter((p) => p.type === "text")
72
+ .map((p) => (p.type === "text" ? p.text : ""))
73
+ .join("");
74
+ for (const p of m.content) {
75
+ if (p.type === "tool_call") {
76
+ pendingCalls.add(p.id);
77
+ items.push({
78
+ type: "function_call",
79
+ name: p.name,
80
+ arguments: JSON.stringify(p.input ?? {}),
81
+ call_id: p.id,
82
+ });
83
+ }
84
+ }
85
+ const images = m.role === "user" ? m.content.filter((p) => p.type === "image") : [];
86
+ if (texts || images.length) {
87
+ const kind = m.role === "assistant" ? "output_text" : "input_text";
88
+ items.push({
89
+ type: "message",
90
+ role: m.role,
91
+ content: [
92
+ ...(texts ? [{ type: kind, text: texts }] : []),
93
+ ...images.map(image => ({ type: "input_image", image_url: `data:${image.mime};base64,${image.data}` })),
94
+ ],
95
+ });
96
+ }
97
+ }
98
+ closeMissingCalls();
99
+ if (req.turnContext)
100
+ items.push(contextItem());
101
+ return items;
102
+ }
103
+ export class OpenAIOAuthProvider {
104
+ creds;
105
+ env;
106
+ now;
107
+ id = "chatgpt";
108
+ label = "ChatGPT (abbonamento)";
109
+ models = CHATGPT_MODELS;
110
+ supportsFastMode = true;
111
+ constructor(creds, env, now = () => Date.now()) {
112
+ this.creds = creds;
113
+ this.env = env;
114
+ this.now = now;
115
+ }
116
+ async ensureToken(signal) {
117
+ if (!isExpired(this.creds, this.now()) || !this.creds.refreshToken) {
118
+ return this.creds.accessToken;
119
+ }
120
+ try {
121
+ const res = await fetch(TOKEN_URL, {
122
+ method: "POST",
123
+ signal,
124
+ headers: { "content-type": "application/json" },
125
+ body: JSON.stringify({
126
+ grant_type: "refresh_token",
127
+ refresh_token: this.creds.refreshToken,
128
+ client_id: CLIENT_ID,
129
+ scope: "openid profile email",
130
+ }),
131
+ });
132
+ if (!res.ok)
133
+ return null;
134
+ const j = (await res.json());
135
+ this.creds = {
136
+ accessToken: String(j["access_token"] ?? ""),
137
+ refreshToken: String(j["refresh_token"] ?? this.creds.refreshToken),
138
+ expiresAt: this.now() + Number(j["expires_in"] ?? 0) * 1000,
139
+ accountId: this.creds.accountId,
140
+ };
141
+ writeCodexCreds(this.env, this.creds);
142
+ return this.creds.accessToken;
143
+ }
144
+ catch {
145
+ return null;
146
+ }
147
+ }
148
+ async complete(req) {
149
+ const token = await this.ensureToken(req.signal);
150
+ if (!token) {
151
+ return {
152
+ text: "Token ChatGPT non valido o scaduto. Esegui `codex` e accedi al tuo abbonamento.",
153
+ toolCalls: [],
154
+ stopReason: "error",
155
+ };
156
+ }
157
+ const effort = responsesReasoningEffort(req.model, req.effort, this.env);
158
+ const body = {
159
+ model: req.model,
160
+ ...(req.serviceTier ? { service_tier: req.serviceTier } : {}),
161
+ ...(effort ? { reasoning: { effort } } : {}),
162
+ instructions: req.system,
163
+ ...(req.sessionId ? { prompt_cache_key: createHash("sha256")
164
+ .update(`talos:${req.sessionId}:${req.model}`).digest("hex") } : {}),
165
+ input: toInput(req),
166
+ stream: true,
167
+ store: false,
168
+ tools: req.tools.map((t) => ({
169
+ type: "function",
170
+ name: t.name,
171
+ description: t.description,
172
+ parameters: t.inputSchema,
173
+ })),
174
+ tool_choice: "auto",
175
+ };
176
+ const headers = {
177
+ "content-type": "application/json",
178
+ accept: "text/event-stream",
179
+ authorization: `Bearer ${token}`,
180
+ "OpenAI-Beta": "responses=experimental",
181
+ originator: "codex_cli_rs",
182
+ };
183
+ if (this.creds.accountId)
184
+ headers["chatgpt-account-id"] = this.creds.accountId;
185
+ const res = await fetch(RESPONSES_URL, {
186
+ method: "POST",
187
+ signal: req.signal,
188
+ headers,
189
+ body: JSON.stringify(body),
190
+ });
191
+ const limits = planLimitsFromHeaders(this.id, res.headers);
192
+ if (!res.ok || !res.body) {
193
+ const detail = await res.text().catch(() => res.statusText);
194
+ return {
195
+ text: messaggioErroreTurno("ChatGPT OAuth", res.status, detail),
196
+ toolCalls: [],
197
+ stopReason: "error",
198
+ ...(limits ? { limits } : {}),
199
+ };
200
+ }
201
+ const turn = await parseResponsesStream(res.body, req.onDelta, req.onToolDelta);
202
+ return limits ? { ...turn, limits } : turn;
203
+ }
204
+ }
205
+ // Parsing SSE della Responses API: delta di testo + function_call completate.
206
+ export async function parseResponsesStream(body, onDelta, onToolDelta) {
207
+ const reader = body.getReader();
208
+ const decoder = new TextDecoder();
209
+ let buffer = "";
210
+ let text = "";
211
+ let stopReason;
212
+ let sawTerminal = false;
213
+ let streamError;
214
+ let readError;
215
+ let usage;
216
+ const toolCalls = [];
217
+ const partialTools = new Map();
218
+ const processLine = (line) => {
219
+ if (streamError || !line.startsWith("data:"))
220
+ return;
221
+ const data = line.slice(5).trim();
222
+ // La Responses API ha un proprio terminale semantico (`response.completed`
223
+ // / failed / incomplete). [DONE], se presente, e' solo un sentinel di
224
+ // trasporto e non rende completa una risposta che ne e' priva.
225
+ if (!data || data === "[DONE]")
226
+ return;
227
+ let evt;
228
+ try {
229
+ evt = JSON.parse(data);
230
+ }
231
+ catch {
232
+ streamError = "Risposta ChatGPT OAuth non valida: evento SSE JSON illeggibile.";
233
+ return;
234
+ }
235
+ const type = String(evt["type"] ?? "");
236
+ if (type === "response.output_text.delta") {
237
+ const chunk = String(evt["delta"] ?? "");
238
+ text += chunk;
239
+ onDelta?.(chunk);
240
+ }
241
+ else if (type === "response.output_item.added") {
242
+ const item = evt["item"];
243
+ if (item && item["type"] === "function_call") {
244
+ const id = String(item["call_id"] ?? item["id"] ?? evt["item_id"] ?? "");
245
+ const name = String(item["name"] ?? "");
246
+ const index = Number(evt["output_index"] ?? item["output_index"] ?? 0);
247
+ partialTools.set(String(item["id"] ?? id ?? index), { id, name, index });
248
+ if (id)
249
+ partialTools.set(id, { id, name, index });
250
+ onToolDelta?.({ id, name, index, delta: "" });
251
+ }
252
+ }
253
+ else if (type === "response.function_call_arguments.delta") {
254
+ const itemId = String(evt["item_id"] ?? evt["call_id"] ?? "");
255
+ const known = partialTools.get(itemId);
256
+ const id = String(known?.id ?? evt["call_id"] ?? itemId);
257
+ const name = String(known?.name ?? evt["name"] ?? "");
258
+ const index = Number(known?.index ?? evt["output_index"] ?? 0);
259
+ onToolDelta?.({ id, name, index, delta: String(evt["delta"] ?? "") });
260
+ }
261
+ else if (type === "response.output_item.done") {
262
+ const item = evt["item"];
263
+ if (item && item["type"] === "function_call") {
264
+ const rawArgs = String(item["arguments"] ?? "{}");
265
+ let input = {};
266
+ let truncated = 0;
267
+ try {
268
+ input = JSON.parse(rawArgs);
269
+ }
270
+ catch {
271
+ truncated = rawArgs.length;
272
+ }
273
+ toolCalls.push({
274
+ type: "tool_call",
275
+ id: String(item["call_id"] ?? item["id"] ?? ""),
276
+ name: String(item["name"] ?? ""),
277
+ input,
278
+ ...(truncated > 0 ? { inputTruncatedChars: truncated } : {}),
279
+ });
280
+ }
281
+ }
282
+ else if (type === "response.completed") {
283
+ const response = evt["response"];
284
+ const status = response?.["status"];
285
+ if (status !== undefined && status !== "completed") {
286
+ streamError = `Risposta ChatGPT OAuth terminata con stato non valido: ${String(status)}.`;
287
+ stopReason = "error";
288
+ }
289
+ else {
290
+ stopReason = "end";
291
+ }
292
+ usage = readResponsesUsage(response) ?? usage;
293
+ sawTerminal = true;
294
+ }
295
+ else if (type === "response.incomplete") {
296
+ const response = evt["response"];
297
+ const details = response?.["incomplete_details"];
298
+ const reason = String(details?.["reason"] ?? "incomplete");
299
+ if (reason === "max_output_tokens" || reason === "max_tokens") {
300
+ stopReason = "max_tokens";
301
+ }
302
+ else {
303
+ stopReason = "error";
304
+ streamError = `Risposta ChatGPT OAuth incompleta (${reason}).`;
305
+ }
306
+ usage = readResponsesUsage(response) ?? usage;
307
+ sawTerminal = true;
308
+ }
309
+ else if (type === "response.failed" || type === "response.cancelled" || type === "error") {
310
+ streamError = readResponsesError(evt, type);
311
+ stopReason = "error";
312
+ sawTerminal = true;
313
+ }
314
+ };
315
+ try {
316
+ for (;;) {
317
+ const { done, value } = await reader.read();
318
+ if (done)
319
+ break;
320
+ buffer += decoder.decode(value, { stream: true });
321
+ const lines = buffer.split("\n");
322
+ buffer = lines.pop() ?? "";
323
+ for (const line of lines)
324
+ processLine(line);
325
+ }
326
+ }
327
+ catch (err) {
328
+ readError = err;
329
+ }
330
+ buffer += decoder.decode();
331
+ if (buffer)
332
+ for (const line of buffer.split("\n"))
333
+ processLine(line);
334
+ if (streamError)
335
+ return { text: streamError, toolCalls: [], stopReason: "error", usage };
336
+ if (!sawTerminal)
337
+ return prematureResponsesTurn(text, readError, usage);
338
+ // max_tokens resta prioritario: una function_call tagliata non deve
339
+ // trasformare il terminale in tool_use. Gli errori sono gia' usciti sopra.
340
+ if (toolCalls.length > 0 && stopReason !== "max_tokens")
341
+ stopReason = "tool_use";
342
+ return { text, toolCalls, stopReason: stopReason ?? "end", usage };
343
+ }
344
+ function prematureResponsesTurn(streamedText, readError, usage) {
345
+ if (!streamedText) {
346
+ const detail = readError instanceof Error && readError.message ? ` (${readError.message})` : "";
347
+ return {
348
+ text: `Errore di rete: connection closed prima che ChatGPT completasse la risposta${detail}.`,
349
+ toolCalls: [],
350
+ stopReason: "error",
351
+ usage,
352
+ };
353
+ }
354
+ return {
355
+ text: `Risposta ChatGPT incompleta: EOF prematuro dopo ${streamedText.length} caratteri; nessuna tool call e' stata eseguita.`,
356
+ toolCalls: [],
357
+ stopReason: "error",
358
+ usage,
359
+ };
360
+ }
361
+ function readResponsesUsage(response) {
362
+ const raw = response?.["usage"];
363
+ if (!raw)
364
+ return undefined;
365
+ const details = raw["input_tokens_details"];
366
+ const cached = Number(details?.["cached_tokens"] ?? 0);
367
+ const input = Number(raw["input_tokens"] ?? 0);
368
+ return {
369
+ inputTokens: Math.max(0, input - cached),
370
+ outputTokens: Number(raw["output_tokens"] ?? 0),
371
+ ...(cached > 0 ? { cacheReadTokens: cached } : {}),
372
+ };
373
+ }
374
+ function readResponsesError(evt, eventType) {
375
+ const response = evt["response"];
376
+ const raw = (evt["error"] ?? response?.["error"]);
377
+ if (typeof raw === "string")
378
+ return `Errore ChatGPT OAuth: ${raw}`;
379
+ const code = raw?.["code"] ?? raw?.["type"] ?? evt["code"] ?? eventType;
380
+ const message = raw?.["message"] ?? response?.["status_details"] ?? evt["message"] ?? "errore streaming senza dettagli";
381
+ return `Errore ChatGPT OAuth (${String(code)}): ${String(message)}${errorTimingDetail(raw)}${errorTimingDetail(evt)}`;
382
+ }
@@ -0,0 +1,73 @@
1
+ export interface OpenRouterCreds {
2
+ readonly apiKey: string;
3
+ readonly source: "manual" | "oauth";
4
+ readonly obtainedAt: number;
5
+ }
6
+ export declare function credsPath(env: NodeJS.ProcessEnv): string | null;
7
+ export declare function readOpenRouterCreds(env: NodeJS.ProcessEnv): OpenRouterCreds | null;
8
+ export declare function writeOpenRouterCreds(env: NodeJS.ProcessEnv, creds: OpenRouterCreds): boolean;
9
+ export declare function clearOpenRouterCreds(env: NodeJS.ProcessEnv): boolean;
10
+ export interface PkceChallenge {
11
+ readonly codeVerifier: string;
12
+ readonly codeChallenge: string;
13
+ readonly method: "S256";
14
+ }
15
+ export declare function createPkceChallenge(rand?: (n: number) => Buffer): PkceChallenge;
16
+ export declare function buildAuthUrl(callbackUrl: string, challenge: PkceChallenge): string;
17
+ export declare const CALLBACK_PATH = "/callback";
18
+ export declare const DEFAULT_CALLBACK_PORT = 8976;
19
+ export declare function callbackUrlForPort(port?: number, host?: string): string;
20
+ export declare function buildAuthUrlForPort(port: number, challenge: PkceChallenge, host?: string): string;
21
+ export interface ExchangeResult {
22
+ readonly ok: boolean;
23
+ readonly apiKey?: string;
24
+ readonly error?: string;
25
+ }
26
+ export declare function exchangeCodeForKey(code: string, codeVerifier: string, opts?: {
27
+ readonly signal?: AbortSignal;
28
+ readonly fetchImpl?: typeof fetch;
29
+ }): Promise<ExchangeResult>;
30
+ export interface OAuthFlow {
31
+ readonly authUrl: string;
32
+ readonly challenge: PkceChallenge;
33
+ complete(code: string, opts?: {
34
+ signal?: AbortSignal;
35
+ fetchImpl?: typeof fetch;
36
+ }): Promise<ExchangeResult>;
37
+ }
38
+ export declare function startOAuthFlow(env: NodeJS.ProcessEnv, callbackUrl: string, opts?: {
39
+ readonly rand?: (n: number) => Buffer;
40
+ readonly persist?: boolean;
41
+ }): OAuthFlow;
42
+ export interface ValidationResult {
43
+ readonly ok: boolean;
44
+ readonly label?: string;
45
+ readonly limitRemaining?: number | null;
46
+ readonly usage?: number;
47
+ readonly error?: string;
48
+ }
49
+ export declare function validateApiKey(apiKey: string, opts?: {
50
+ readonly signal?: AbortSignal;
51
+ readonly fetchImpl?: typeof fetch;
52
+ readonly timeoutMs?: number;
53
+ }): Promise<ValidationResult>;
54
+ export declare function looksLikeApiKey(value: string): boolean;
55
+ export declare function saveManualApiKey(env: NodeJS.ProcessEnv, apiKey: string, opts?: {
56
+ readonly validate?: boolean;
57
+ readonly signal?: AbortSignal;
58
+ readonly fetchImpl?: typeof fetch;
59
+ }): Promise<{
60
+ readonly saved: boolean;
61
+ readonly validation?: ValidationResult;
62
+ readonly error?: string;
63
+ }>;
64
+ export type OpenRouterAccessMethod = "env" | "saved" | "oauth" | "manual";
65
+ export interface OpenRouterAccess {
66
+ readonly configured: boolean;
67
+ readonly apiKey?: string;
68
+ readonly method?: OpenRouterAccessMethod;
69
+ readonly available: readonly OpenRouterAccessMethod[];
70
+ readonly reason: string;
71
+ }
72
+ export declare function resolveOpenRouterAccess(env: NodeJS.ProcessEnv): OpenRouterAccess;
73
+ export declare function openRouterApiKey(env: NodeJS.ProcessEnv): string | null;