@pentoshi/clai 4.11.29 → 4.12.1

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 (387) hide show
  1. package/README.md +49 -10
  2. package/dist/agent/compaction/summary-execution.js +19 -3
  3. package/dist/agent/compaction/summary-execution.js.map +1 -1
  4. package/dist/agent/confirm-port.d.ts +3 -5
  5. package/dist/agent/confirm-port.js +12 -6
  6. package/dist/agent/confirm-port.js.map +1 -1
  7. package/dist/agent/context/compact-with-summary.js +12 -5
  8. package/dist/agent/context/compact-with-summary.js.map +1 -1
  9. package/dist/agent/context/latest-user-message.d.ts +2 -0
  10. package/dist/agent/context/latest-user-message.js +10 -0
  11. package/dist/agent/context/latest-user-message.js.map +1 -0
  12. package/dist/agent/context/user-credentials.js +36 -7
  13. package/dist/agent/context/user-credentials.js.map +1 -1
  14. package/dist/agent/context-manager.js +4 -1
  15. package/dist/agent/context-manager.js.map +1 -1
  16. package/dist/agent/durable-envelope.d.ts +6 -0
  17. package/dist/agent/durable-envelope.js +50 -11
  18. package/dist/agent/durable-envelope.js.map +1 -1
  19. package/dist/agent/evidence/tool-budgets.js +4 -14
  20. package/dist/agent/evidence/tool-budgets.js.map +1 -1
  21. package/dist/agent/responder-context.d.ts +8 -0
  22. package/dist/agent/responder-context.js +35 -2
  23. package/dist/agent/responder-context.js.map +1 -1
  24. package/dist/agent/subagents/manager.d.ts +1 -1
  25. package/dist/agent/subagents/manager.js +7 -6
  26. package/dist/agent/subagents/manager.js.map +1 -1
  27. package/dist/agent/subagents/types.d.ts +1 -0
  28. package/dist/agent/tool-history.d.ts +2 -2
  29. package/dist/agent/tool-history.js +2 -1
  30. package/dist/agent/tool-history.js.map +1 -1
  31. package/dist/agent/turn/compaction-durable-envelope.d.ts +2 -1
  32. package/dist/agent/turn/compaction-durable-envelope.js +22 -11
  33. package/dist/agent/turn/compaction-durable-envelope.js.map +1 -1
  34. package/dist/agent/turn/history-writer.d.ts +1 -1
  35. package/dist/agent/turn/history-writer.js +1 -0
  36. package/dist/agent/turn/history-writer.js.map +1 -1
  37. package/dist/agent/turn/loop/completion-interpretation.d.ts +1 -1
  38. package/dist/agent/turn/loop/deps.d.ts +1 -1
  39. package/dist/agent/turn/loop/run-rounds.js +1 -1
  40. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  41. package/dist/agent/turn/responder-read-tool.d.ts +1 -0
  42. package/dist/agent/turn/responder-read-tool.js +13 -6
  43. package/dist/agent/turn/responder-read-tool.js.map +1 -1
  44. package/dist/agent/turn/tool-execution/authorization.js +3 -39
  45. package/dist/agent/turn/tool-execution/authorization.js.map +1 -1
  46. package/dist/agent/turn/tool-execution/single-tool.js +1 -1
  47. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  48. package/dist/app/commands/catalog.js +18 -3
  49. package/dist/app/commands/catalog.js.map +1 -1
  50. package/dist/app/controllers/session-compact-helper.js +1 -1
  51. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  52. package/dist/app/controllers/session-controller.d.ts +3 -1
  53. package/dist/app/controllers/session-controller.js +25 -12
  54. package/dist/app/controllers/session-controller.js.map +1 -1
  55. package/dist/app/controllers/session-usage-ledger.d.ts +5 -1
  56. package/dist/app/controllers/session-usage-ledger.js +19 -5
  57. package/dist/app/controllers/session-usage-ledger.js.map +1 -1
  58. package/dist/app/controllers/session-usage-source.d.ts +13 -0
  59. package/dist/app/controllers/session-usage-source.js +37 -0
  60. package/dist/app/controllers/session-usage-source.js.map +1 -0
  61. package/dist/app/operation-review.d.ts +7 -0
  62. package/dist/app/operation-review.js +61 -0
  63. package/dist/app/operation-review.js.map +1 -0
  64. package/dist/app/ports/confirm-port.d.ts +1 -1
  65. package/dist/app/ports/secret-port.d.ts +2 -0
  66. package/dist/classic/app/ClassicApp.js +1 -1
  67. package/dist/classic/app/ClassicApp.js.map +1 -1
  68. package/dist/classic/app/use-feed.js +2 -1
  69. package/dist/classic/app/use-feed.js.map +1 -1
  70. package/dist/classic/blocks/diff-lines.js +5 -8
  71. package/dist/classic/blocks/diff-lines.js.map +1 -1
  72. package/dist/classic/bootstrap/start-classic.js +3 -0
  73. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  74. package/dist/classic/chrome/subagents-row.js +1 -1
  75. package/dist/classic/chrome/subagents-row.js.map +1 -1
  76. package/dist/classic/input/paste-burst.d.ts +3 -12
  77. package/dist/classic/input/paste-burst.js +18 -110
  78. package/dist/classic/input/paste-burst.js.map +1 -1
  79. package/dist/classic/input/paste-decoder.js +2 -4
  80. package/dist/classic/input/paste-decoder.js.map +1 -1
  81. package/dist/classic/input/terminal-sequences.d.ts +1 -2
  82. package/dist/classic/input/terminal-sequences.js +1 -2
  83. package/dist/classic/input/terminal-sequences.js.map +1 -1
  84. package/dist/classic/panels/confirm-panel.js +9 -3
  85. package/dist/classic/panels/confirm-panel.js.map +1 -1
  86. package/dist/classic/panels/pager-diff.js +5 -7
  87. package/dist/classic/panels/pager-diff.js.map +1 -1
  88. package/dist/classic/panels/panel-controller.d.ts +1 -0
  89. package/dist/classic/panels/panel-controller.js +47 -13
  90. package/dist/classic/panels/panel-controller.js.map +1 -1
  91. package/dist/classic/panels/panel-effect.d.ts +2 -0
  92. package/dist/classic/panels/panel-effect.js.map +1 -1
  93. package/dist/classic/panels/panel-effects.js +3 -0
  94. package/dist/classic/panels/panel-effects.js.map +1 -1
  95. package/dist/classic/panels/secret-panel.d.ts +1 -0
  96. package/dist/classic/panels/secret-panel.js +8 -1
  97. package/dist/classic/panels/secret-panel.js.map +1 -1
  98. package/dist/classic/render/ink-theme.js +1 -1
  99. package/dist/classic/render/ink-theme.js.map +1 -1
  100. package/dist/commands/providers.d.ts +5 -0
  101. package/dist/commands/providers.js +57 -0
  102. package/dist/commands/providers.js.map +1 -1
  103. package/dist/commands/update/installers.js +1 -0
  104. package/dist/commands/update/installers.js.map +1 -1
  105. package/dist/index.js +24 -4
  106. package/dist/index.js.map +1 -1
  107. package/dist/llm/capabilities.js +5 -5
  108. package/dist/llm/capabilities.js.map +1 -1
  109. package/dist/llm/capability/state.d.ts +1 -1
  110. package/dist/llm/capability/tool-dialect.js +2 -0
  111. package/dist/llm/capability/tool-dialect.js.map +1 -1
  112. package/dist/llm/capability/vision-patterns.js +12 -0
  113. package/dist/llm/capability/vision-patterns.js.map +1 -1
  114. package/dist/llm/catalog-facts.js +25 -8
  115. package/dist/llm/catalog-facts.js.map +1 -1
  116. package/dist/llm/codex-auth.d.ts +3 -1
  117. package/dist/llm/codex-auth.js +41 -12
  118. package/dist/llm/codex-auth.js.map +1 -1
  119. package/dist/llm/codex-client.d.ts +1 -0
  120. package/dist/llm/codex-client.js +30 -0
  121. package/dist/llm/codex-client.js.map +1 -0
  122. package/dist/llm/codex-config.d.ts +3 -0
  123. package/dist/llm/codex-config.js +82 -0
  124. package/dist/llm/codex-config.js.map +1 -0
  125. package/dist/llm/codex-credential.d.ts +3 -0
  126. package/dist/llm/codex-credential.js +94 -0
  127. package/dist/llm/codex-credential.js.map +1 -0
  128. package/dist/llm/codex-models.d.ts +17 -0
  129. package/dist/llm/codex-models.js +171 -0
  130. package/dist/llm/codex-models.js.map +1 -0
  131. package/dist/llm/codex-request.d.ts +1 -0
  132. package/dist/llm/codex-request.js +61 -0
  133. package/dist/llm/codex-request.js.map +1 -0
  134. package/dist/llm/codex-usage.d.ts +4 -0
  135. package/dist/llm/codex-usage.js +96 -0
  136. package/dist/llm/codex-usage.js.map +1 -0
  137. package/dist/llm/codex.d.ts +1 -2
  138. package/dist/llm/codex.js +30 -217
  139. package/dist/llm/codex.js.map +1 -1
  140. package/dist/llm/context-windows.js +1 -0
  141. package/dist/llm/context-windows.js.map +1 -1
  142. package/dist/llm/freebuff-run.d.ts +3 -0
  143. package/dist/llm/freebuff-run.js +9 -1
  144. package/dist/llm/freebuff-run.js.map +1 -1
  145. package/dist/llm/freebuff-session-api.d.ts +3 -1
  146. package/dist/llm/freebuff-session-api.js +14 -1
  147. package/dist/llm/freebuff-session-api.js.map +1 -1
  148. package/dist/llm/freebuff-session.d.ts +2 -0
  149. package/dist/llm/freebuff-session.js +61 -28
  150. package/dist/llm/freebuff-session.js.map +1 -1
  151. package/dist/llm/freebuff-wire.d.ts +3 -0
  152. package/dist/llm/freebuff-wire.js +82 -0
  153. package/dist/llm/freebuff-wire.js.map +1 -0
  154. package/dist/llm/freebuff.js +61 -117
  155. package/dist/llm/freebuff.js.map +1 -1
  156. package/dist/llm/model-layers/model-rules.js +6 -0
  157. package/dist/llm/model-layers/model-rules.js.map +1 -1
  158. package/dist/llm/omnirush-auth.d.ts +40 -0
  159. package/dist/llm/omnirush-auth.js +264 -0
  160. package/dist/llm/omnirush-auth.js.map +1 -0
  161. package/dist/llm/omnirush-session-upload.d.ts +63 -0
  162. package/dist/llm/omnirush-session-upload.js +221 -0
  163. package/dist/llm/omnirush-session-upload.js.map +1 -0
  164. package/dist/llm/omnirush.d.ts +4 -0
  165. package/dist/llm/omnirush.js +221 -0
  166. package/dist/llm/omnirush.js.map +1 -0
  167. package/dist/llm/provider-balance.d.ts +10 -0
  168. package/dist/llm/provider-balance.js +22 -2
  169. package/dist/llm/provider-balance.js.map +1 -1
  170. package/dist/llm/provider-identity.js +11 -0
  171. package/dist/llm/provider-identity.js.map +1 -1
  172. package/dist/llm/provider-info-text.js +110 -4
  173. package/dist/llm/provider-info-text.js.map +1 -1
  174. package/dist/llm/provider-profile-layers.js +33 -3
  175. package/dist/llm/provider-profile-layers.js.map +1 -1
  176. package/dist/llm/reasoning-capability.js +16 -0
  177. package/dist/llm/reasoning-capability.js.map +1 -1
  178. package/dist/llm/reasoning-controls.d.ts +1 -0
  179. package/dist/llm/reasoning-controls.js +1 -0
  180. package/dist/llm/reasoning-controls.js.map +1 -1
  181. package/dist/llm/reasoning-errors.js +3 -1
  182. package/dist/llm/reasoning-errors.js.map +1 -1
  183. package/dist/llm/request-plan.js +18 -12
  184. package/dist/llm/request-plan.js.map +1 -1
  185. package/dist/llm/responses/item-events.js +2 -0
  186. package/dist/llm/responses/item-events.js.map +1 -1
  187. package/dist/llm/responses-config.d.ts +4 -1
  188. package/dist/llm/responses-config.js.map +1 -1
  189. package/dist/llm/responses-parse.d.ts +2 -1
  190. package/dist/llm/responses-parse.js +11 -45
  191. package/dist/llm/responses-parse.js.map +1 -1
  192. package/dist/llm/responses-replay.d.ts +3 -0
  193. package/dist/llm/responses-replay.js +48 -0
  194. package/dist/llm/responses-replay.js.map +1 -0
  195. package/dist/llm/responses-request.js +22 -8
  196. package/dist/llm/responses-request.js.map +1 -1
  197. package/dist/llm/responses-stream-accumulator.d.ts +4 -0
  198. package/dist/llm/responses-stream-accumulator.js +12 -1
  199. package/dist/llm/responses-stream-accumulator.js.map +1 -1
  200. package/dist/llm/responses-stream-events.js +14 -25
  201. package/dist/llm/responses-stream-events.js.map +1 -1
  202. package/dist/llm/responses-stream.js +1 -0
  203. package/dist/llm/responses-stream.js.map +1 -1
  204. package/dist/llm/responses-usage.d.ts +12 -0
  205. package/dist/llm/responses-usage.js +66 -0
  206. package/dist/llm/responses-usage.js.map +1 -0
  207. package/dist/llm/router.js +4 -4
  208. package/dist/llm/router.js.map +1 -1
  209. package/dist/llm/routing/attempt-complete.js +7 -2
  210. package/dist/llm/routing/attempt-complete.js.map +1 -1
  211. package/dist/llm/routing/attempt-request.js +4 -1
  212. package/dist/llm/routing/attempt-request.js.map +1 -1
  213. package/dist/llm/routing/attempt-stream.js +8 -2
  214. package/dist/llm/routing/attempt-stream.js.map +1 -1
  215. package/dist/llm/routing/error-classification.js +2 -2
  216. package/dist/llm/routing/error-classification.js.map +1 -1
  217. package/dist/llm/routing/provider-selection.js +6 -0
  218. package/dist/llm/routing/provider-selection.js.map +1 -1
  219. package/dist/llm/tokenharbor-cache.d.ts +4 -0
  220. package/dist/llm/tokenharbor-cache.js +10 -0
  221. package/dist/llm/tokenharbor-cache.js.map +1 -0
  222. package/dist/llm/tokenharbor.d.ts +8 -0
  223. package/dist/llm/tokenharbor.js +159 -0
  224. package/dist/llm/tokenharbor.js.map +1 -0
  225. package/dist/llm/wire/chat-body.d.ts +4 -3
  226. package/dist/llm/wire/chat-body.js +30 -5
  227. package/dist/llm/wire/chat-body.js.map +1 -1
  228. package/dist/llm/wire/effort-preflight.js +6 -10
  229. package/dist/llm/wire/effort-preflight.js.map +1 -1
  230. package/dist/llm/wire/openai-complete.d.ts +2 -1
  231. package/dist/llm/wire/openai-complete.js +1 -1
  232. package/dist/llm/wire/openai-complete.js.map +1 -1
  233. package/dist/llm/wire/openai-stream.d.ts +2 -1
  234. package/dist/llm/wire/openai-stream.js +1 -1
  235. package/dist/llm/wire/openai-stream.js.map +1 -1
  236. package/dist/llm/wire/responses-preflight.js +1 -0
  237. package/dist/llm/wire/responses-preflight.js.map +1 -1
  238. package/dist/modes/ask.js +2 -1
  239. package/dist/modes/ask.js.map +1 -1
  240. package/dist/noninteractive/readline-prompts.d.ts +2 -1
  241. package/dist/noninteractive/readline-prompts.js +34 -1
  242. package/dist/noninteractive/readline-prompts.js.map +1 -1
  243. package/dist/noninteractive/start-noninteractive.js +18 -0
  244. package/dist/noninteractive/start-noninteractive.js.map +1 -1
  245. package/dist/noninteractive/stdio-confirm-port.js +18 -6
  246. package/dist/noninteractive/stdio-confirm-port.js.map +1 -1
  247. package/dist/prompts/embedded.js +1 -1
  248. package/dist/prompts/embedded.js.map +1 -1
  249. package/dist/prompts/index.js +3 -2
  250. package/dist/prompts/index.js.map +1 -1
  251. package/dist/prompts/system.agent.md +8 -8
  252. package/dist/safety/filesystem-permissions.d.ts +4 -0
  253. package/dist/safety/filesystem-permissions.js +113 -0
  254. package/dist/safety/filesystem-permissions.js.map +1 -0
  255. package/dist/safety/permission-mode.d.ts +5 -0
  256. package/dist/safety/permission-mode.js +22 -0
  257. package/dist/safety/permission-mode.js.map +1 -0
  258. package/dist/safety/shell-filesystem-effects.d.ts +14 -0
  259. package/dist/safety/shell-filesystem-effects.js +172 -0
  260. package/dist/safety/shell-filesystem-effects.js.map +1 -0
  261. package/dist/safety/shell-permission-words.d.ts +16 -0
  262. package/dist/safety/shell-permission-words.js +102 -0
  263. package/dist/safety/shell-permission-words.js.map +1 -0
  264. package/dist/safety/tool-classification.js +1 -1
  265. package/dist/safety/tool-classification.js.map +1 -1
  266. package/dist/store/config/endpoints.d.ts +2 -1
  267. package/dist/store/config/endpoints.js +5 -1
  268. package/dist/store/config/endpoints.js.map +1 -1
  269. package/dist/store/config.js +3 -0
  270. package/dist/store/config.js.map +1 -1
  271. package/dist/store/history.js +3 -0
  272. package/dist/store/history.js.map +1 -1
  273. package/dist/store/subagents.js +3 -2
  274. package/dist/store/subagents.js.map +1 -1
  275. package/dist/tools/capabilities.js +2 -2
  276. package/dist/tools/command-intent.d.ts +0 -1
  277. package/dist/tools/command-intent.js +3 -10
  278. package/dist/tools/command-intent.js.map +1 -1
  279. package/dist/tools/definitions/aggregate.js +5 -1
  280. package/dist/tools/definitions/aggregate.js.map +1 -1
  281. package/dist/tools/definitions/orchestration.js +2 -2
  282. package/dist/tools/definitions/orchestration.js.map +1 -1
  283. package/dist/tools/definitions/shell.js +6 -3
  284. package/dist/tools/definitions/shell.js.map +1 -1
  285. package/dist/tools/elevated-shell.d.ts +1 -0
  286. package/dist/tools/elevated-shell.js +2 -0
  287. package/dist/tools/elevated-shell.js.map +1 -1
  288. package/dist/tools/fs/search.js +12 -8
  289. package/dist/tools/fs/search.js.map +1 -1
  290. package/dist/tools/fs.d.ts +1 -0
  291. package/dist/tools/fs.js +22 -3
  292. package/dist/tools/fs.js.map +1 -1
  293. package/dist/tools/handlers/shell-1.js +18 -33
  294. package/dist/tools/handlers/shell-1.js.map +1 -1
  295. package/dist/tools/interactive-session-tools.js +1 -0
  296. package/dist/tools/interactive-session-tools.js.map +1 -1
  297. package/dist/tools/jobs/types.d.ts +2 -1
  298. package/dist/tools/jobs.js +1 -0
  299. package/dist/tools/jobs.js.map +1 -1
  300. package/dist/tools/shell/internals.d.ts +1 -1
  301. package/dist/tools/shell/internals.js +2 -1
  302. package/dist/tools/shell/internals.js.map +1 -1
  303. package/dist/tools/shell/timeout.d.ts +1 -0
  304. package/dist/tools/shell/timeout.js +2 -0
  305. package/dist/tools/shell/timeout.js.map +1 -0
  306. package/dist/tools/sudo-session.d.ts +4 -5
  307. package/dist/tools/sudo-session.js +1 -0
  308. package/dist/tools/sudo-session.js.map +1 -1
  309. package/dist/tools/tool-types.d.ts +2 -4
  310. package/dist/tui-v2/app/App.js +5 -1
  311. package/dist/tui-v2/app/App.js.map +1 -1
  312. package/dist/tui-v2/bootstrap/start-tui-v2.js +6 -0
  313. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  314. package/dist/tui-v2/components/jobs/subagents-panel.js +15 -3
  315. package/dist/tui-v2/components/jobs/subagents-panel.js.map +1 -1
  316. package/dist/tui-v2/components/modal/confirm-modal.js +6 -2
  317. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
  318. package/dist/tui-v2/components/modal/secret-modal.d.ts +8 -0
  319. package/dist/tui-v2/components/modal/secret-modal.js +27 -18
  320. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  321. package/dist/tui-v2/components/overlay/overlay-host.js +14 -3
  322. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  323. package/dist/tui-v2/components/pager/pager.js +7 -3
  324. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  325. package/dist/tui-v2/components/picker/picker.js +17 -3
  326. package/dist/tui-v2/components/picker/picker.js.map +1 -1
  327. package/dist/tui-v2/components/transcript/intro-card.js +2 -1
  328. package/dist/tui-v2/components/transcript/intro-card.js.map +1 -1
  329. package/dist/tui-v2/composer/composer-editor.js +3 -2
  330. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  331. package/dist/tui-v2/input/paste-burst-guard.d.ts +22 -0
  332. package/dist/tui-v2/input/paste-burst-guard.js +123 -0
  333. package/dist/tui-v2/input/paste-burst-guard.js.map +1 -0
  334. package/dist/types.d.ts +8 -1
  335. package/dist/types.js +2 -0
  336. package/dist/types.js.map +1 -1
  337. package/dist/ui-core/bootstrap/composition-root.d.ts +2 -0
  338. package/dist/ui-core/bootstrap/composition-root.js +8 -0
  339. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  340. package/dist/ui-core/bootstrap/overlay-ports.js +14 -5
  341. package/dist/ui-core/bootstrap/overlay-ports.js.map +1 -1
  342. package/dist/ui-core/commands/command-handlers.js +4 -3
  343. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  344. package/dist/ui-core/commands/key-commands.d.ts +2 -0
  345. package/dist/ui-core/commands/key-commands.js +173 -0
  346. package/dist/ui-core/commands/key-commands.js.map +1 -1
  347. package/dist/ui-core/commands/picker-commands.js +15 -0
  348. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  349. package/dist/ui-core/commands/pickers/output-pager.js +19 -8
  350. package/dist/ui-core/commands/pickers/output-pager.js.map +1 -1
  351. package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -1
  352. package/dist/ui-core/commands/session-commands.d.ts +1 -1
  353. package/dist/ui-core/commands/session-commands.js +67 -32
  354. package/dist/ui-core/commands/session-commands.js.map +1 -1
  355. package/dist/ui-core/commands/subagent-commands.d.ts +1 -1
  356. package/dist/ui-core/commands/subagent-commands.js +9 -8
  357. package/dist/ui-core/commands/subagent-commands.js.map +1 -1
  358. package/dist/ui-core/composer/composer-meta.js +2 -5
  359. package/dist/ui-core/composer/composer-meta.js.map +1 -1
  360. package/dist/ui-core/controllers/overlay-controller.d.ts +6 -0
  361. package/dist/ui-core/controllers/overlay-controller.js +27 -6
  362. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  363. package/dist/ui-core/input/paste-burst.d.ts +45 -0
  364. package/dist/ui-core/input/paste-burst.js +170 -0
  365. package/dist/ui-core/input/paste-burst.js.map +1 -0
  366. package/dist/ui-core/input/paste-text.d.ts +1 -0
  367. package/dist/ui-core/input/paste-text.js +4 -0
  368. package/dist/ui-core/input/paste-text.js.map +1 -0
  369. package/dist/ui-core/rendering/duration.d.ts +2 -0
  370. package/dist/ui-core/rendering/duration.js +8 -0
  371. package/dist/ui-core/rendering/duration.js.map +1 -1
  372. package/dist/ui-core/rendering/exit-summary/table.js +4 -1
  373. package/dist/ui-core/rendering/exit-summary/table.js.map +1 -1
  374. package/dist/ui-core/rendering/format-usage.js +9 -2
  375. package/dist/ui-core/rendering/format-usage.js.map +1 -1
  376. package/dist/ui-core/rendering/intro-header.js +5 -6
  377. package/dist/ui-core/rendering/intro-header.js.map +1 -1
  378. package/dist/ui-core/rendering/subagent-source.d.ts +3 -2
  379. package/dist/ui-core/rendering/subagent-source.js +42 -6
  380. package/dist/ui-core/rendering/subagent-source.js.map +1 -1
  381. package/dist/ui-core/rendering/theme.js +4 -4
  382. package/dist/ui-core/rendering/usage-pager-source.js +6 -2
  383. package/dist/ui-core/rendering/usage-pager-source.js.map +1 -1
  384. package/dist/version.generated.d.ts +2 -2
  385. package/dist/version.generated.js +2 -2
  386. package/dist/version.generated.js.map +1 -1
  387. package/package.json +1 -1
@@ -0,0 +1,221 @@
1
+ import { defaultModels, } from "./provider.js";
2
+ import { ingestOpenAiModelCatalog, ProviderError, readJson } from "./http.js";
3
+ import { META_STREAM_TERMINAL } from "./stream-terminal.js";
4
+ import { mapResponsesEffort, responsesStream, } from "./responses-dialect.js";
5
+ import { importExistingOmnirushAuth, omnirushGatewayUrl, omnirushGatewayUserAgent, refreshOmnirushToken, } from "./omnirush-auth.js";
6
+ import { cacheAffinityKey, sessionCacheAffinityKey } from "./cache-affinity.js";
7
+ import { currentSessionAffinity } from "./session-affinity.js";
8
+ import { getProviderKeys, replaceProviderKey } from "../store/keys.js";
9
+ export const omnirushFallbackModels = [
10
+ "gpt-6-astra",
11
+ "gpt-6-sol",
12
+ "gpt-5.6-sol",
13
+ "meta-muse-spark",
14
+ "muse-spark-1.1",
15
+ "muse-spark-1.3",
16
+ "muse-spark-1.2-contributor",
17
+ ];
18
+ let cachedModels = null;
19
+ let lastFetchTime = 0;
20
+ const CACHE_TTL_MS = 30 * 60 * 1000;
21
+ export function resetOmnirushModelCache() {
22
+ cachedModels = null;
23
+ lastFetchTime = 0;
24
+ }
25
+ function requireKey(auth) {
26
+ if (!auth.apiKey) {
27
+ throw new Error("Omnirush authentication required. Run `clai auth omnirush` to sign in with the browser device flow, or `clai auth omnirush --import` to reuse the omnirush CLI login.");
28
+ }
29
+ return auth.apiKey;
30
+ }
31
+ function gatewayBase(auth) {
32
+ const override = auth.baseUrl?.trim();
33
+ if (override) {
34
+ const clean = override.replace(/\/+$/, "");
35
+ return /\/v1$/i.test(clean) ? clean : `${clean}/v1`;
36
+ }
37
+ return omnirushGatewayUrl();
38
+ }
39
+ function gatewayHeaders(apiKey, accept) {
40
+ return {
41
+ authorization: `Bearer ${apiKey}`,
42
+ accept,
43
+ "user-agent": omnirushGatewayUserAgent(),
44
+ };
45
+ }
46
+ function isOmnirushAuthFailure(error) {
47
+ const status = error instanceof ProviderError ? error.status : undefined;
48
+ const message = error instanceof Error ? error.message : "";
49
+ return (status === 401 ||
50
+ (status === 403 && /expired|invalid|unauthorized|not allowed|denied/i.test(message)));
51
+ }
52
+ async function findOmnirushRefreshToken(currentKey, auth) {
53
+ if (auth.refreshToken)
54
+ return auth.refreshToken;
55
+ const keys = await getProviderKeys("omnirush").catch(() => undefined);
56
+ const slot = keys?.keys.find((candidate) => candidate.value === currentKey);
57
+ if (slot?.refreshToken)
58
+ return slot.refreshToken;
59
+ const imported = await importExistingOmnirushAuth().catch(() => undefined);
60
+ if (imported && imported.accessToken === currentKey)
61
+ return imported.refreshToken;
62
+ return undefined;
63
+ }
64
+ async function replaceOmnirushKey(oldKey, fresh) {
65
+ const metadata = { refreshToken: fresh.refreshToken };
66
+ try {
67
+ if (await replaceProviderKey("omnirush", oldKey, fresh.accessToken, metadata))
68
+ return;
69
+ const keys = await getProviderKeys("omnirush");
70
+ if (keys.keys.some((key) => key.value === fresh.accessToken && key.refreshToken === fresh.refreshToken)) {
71
+ return;
72
+ }
73
+ }
74
+ catch {
75
+ throw new Error("Omnirush refreshed its credentials, but clai could not save the rotated tokens.");
76
+ }
77
+ throw new Error("Omnirush refreshed its credentials, but the matching clai account could not be found to save them.");
78
+ }
79
+ const refreshesInFlight = new Map();
80
+ async function refreshAndPersistOmnirushCredential(key, auth, refreshToken) {
81
+ const inFlight = refreshesInFlight.get(refreshToken);
82
+ if (inFlight) {
83
+ const fresh = await inFlight;
84
+ auth.apiKey = fresh.accessToken;
85
+ auth.refreshToken = fresh.refreshToken;
86
+ return fresh;
87
+ }
88
+ const refresh = (async () => {
89
+ const fresh = await refreshOmnirushToken(refreshToken);
90
+ auth.apiKey = fresh.accessToken;
91
+ auth.refreshToken = fresh.refreshToken;
92
+ await replaceOmnirushKey(key, fresh);
93
+ return fresh;
94
+ })();
95
+ refreshesInFlight.set(refreshToken, refresh);
96
+ try {
97
+ return await refresh;
98
+ }
99
+ finally {
100
+ if (refreshesInFlight.get(refreshToken) === refresh) {
101
+ refreshesInFlight.delete(refreshToken);
102
+ }
103
+ }
104
+ }
105
+ async function withOmnirushCredential(auth, run, onStatus) {
106
+ const key = requireKey(auth);
107
+ const refreshToken = await findOmnirushRefreshToken(key, auth);
108
+ try {
109
+ return await run(key);
110
+ }
111
+ catch (error) {
112
+ if (!isOmnirushAuthFailure(error))
113
+ throw error;
114
+ if (!refreshToken)
115
+ throw error;
116
+ onStatus?.("i Omnirush authentication rejected — refreshing token");
117
+ const fresh = await refreshAndPersistOmnirushCredential(key, auth, refreshToken);
118
+ onStatus?.("i Omnirush token refreshed — retrying request");
119
+ return run(fresh.accessToken);
120
+ }
121
+ }
122
+ function omnirushCacheKey(context) {
123
+ const affinity = currentSessionAffinity();
124
+ const key = affinity
125
+ ? sessionCacheAffinityKey(affinity)
126
+ : cacheAffinityKey("omnirush", context.model, context.messages);
127
+ return `${context.purpose === "auxiliary" ? "aux-" : ""}${key}`;
128
+ }
129
+ function omnirushConfigFor(baseUrl) {
130
+ return {
131
+ baseUrl,
132
+ providerId: "omnirush",
133
+ displayName: "Omnirush",
134
+ artifactDialect: "openai-compatible",
135
+ terminalPolicy: META_STREAM_TERMINAL,
136
+ omitSampling: true,
137
+ maxTokensField: "omit",
138
+ omitParallelToolCalls: true,
139
+ systemRole: "developer",
140
+ buildHeaders(auth, accept) {
141
+ return {
142
+ "content-type": "application/json",
143
+ accept,
144
+ ...(auth.apiKey ? { authorization: `Bearer ${auth.apiKey}` } : {}),
145
+ "user-agent": omnirushGatewayUserAgent(),
146
+ };
147
+ },
148
+ reasoningPayload(reasoning) {
149
+ if (!reasoning?.enabled)
150
+ return undefined;
151
+ return { effort: mapResponsesEffort(reasoning.effort), summary: "auto" };
152
+ },
153
+ bodyExtras(context) {
154
+ return {
155
+ store: false,
156
+ prompt_cache_key: omnirushCacheKey(context),
157
+ };
158
+ },
159
+ };
160
+ }
161
+ async function fetchOmnirushModels(apiKey, baseUrl) {
162
+ const response = await fetch(`${baseUrl}/models`, {
163
+ headers: gatewayHeaders(apiKey, "application/json"),
164
+ });
165
+ if (!response.ok) {
166
+ throw new ProviderError(`Omnirush model catalog request failed (HTTP ${response.status}).`, response.status);
167
+ }
168
+ const payload = await readJson(response);
169
+ return ingestOpenAiModelCatalog("omnirush", payload);
170
+ }
171
+ export const omnirushProvider = {
172
+ id: "omnirush",
173
+ displayName: "Omnirush",
174
+ reasoningStyle: "openai",
175
+ defaultModel: defaultModels.omnirush,
176
+ envVar: "OMNIRUSH_API_KEY",
177
+ validateKey: (key) => key.trim().length >= 16,
178
+ async listModels(auth) {
179
+ const now = Date.now();
180
+ if (cachedModels && now - lastFetchTime < CACHE_TTL_MS)
181
+ return cachedModels;
182
+ const baseUrl = gatewayBase(auth);
183
+ let models = [];
184
+ try {
185
+ models = auth.apiKey
186
+ ? await withOmnirushCredential(auth, (key) => fetchOmnirushModels(key, baseUrl))
187
+ : [];
188
+ }
189
+ catch {
190
+ models = [];
191
+ }
192
+ const result = models.length > 0 ? models : [...omnirushFallbackModels];
193
+ if (result.length > 0) {
194
+ cachedModels = result;
195
+ lastFetchTime = now;
196
+ }
197
+ return result;
198
+ },
199
+ async ping(auth) {
200
+ const baseUrl = gatewayBase(auth);
201
+ await withOmnirushCredential(auth, async (key) => {
202
+ const response = await fetch(`${baseUrl}/models`, {
203
+ headers: gatewayHeaders(key, "application/json"),
204
+ });
205
+ if (!response.ok) {
206
+ throw new ProviderError(`Omnirush authentication failed (HTTP ${response.status}). Run \`clai auth omnirush\` to sign in.`, response.status);
207
+ }
208
+ });
209
+ },
210
+ async complete(request, auth) {
211
+ const model = request.model ?? defaultModels.omnirush;
212
+ const config = omnirushConfigFor(gatewayBase(auth));
213
+ return withOmnirushCredential(auth, (key) => responsesStream(config, { ...request, provider: "omnirush", model }, { apiKey: key }, () => { }, model));
214
+ },
215
+ async stream(request, auth, onToken, onStatus) {
216
+ const model = request.model ?? defaultModels.omnirush;
217
+ const config = omnirushConfigFor(gatewayBase(auth));
218
+ return withOmnirushCredential(auth, (key) => responsesStream(config, { ...request, provider: "omnirush", model }, { apiKey: key }, onToken, model), onStatus);
219
+ },
220
+ };
221
+ //# sourceMappingURL=omnirush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omnirush.js","sourceRoot":"","sources":["../../src/llm/omnirush.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface BalanceBreakdown {
6
6
  readonly limit: number;
7
7
  readonly overages: number;
8
8
  readonly currency?: string | undefined;
9
+ readonly unit?: "percent" | undefined;
10
+ readonly nextResetAt?: number | undefined;
9
11
  }
10
12
  export interface ProviderBalance {
11
13
  readonly provider: ProviderId;
@@ -14,6 +16,13 @@ export interface ProviderBalance {
14
16
  readonly overageStatus?: string | undefined;
15
17
  readonly nextResetAt?: number | undefined;
16
18
  readonly fetchedAt: number;
19
+ readonly accountId?: string | undefined;
20
+ readonly credits?: {
21
+ readonly remaining?: number | undefined;
22
+ readonly unlimited: boolean;
23
+ readonly available: boolean;
24
+ } | undefined;
25
+ readonly limitReached?: boolean | undefined;
17
26
  }
18
27
  export type BalanceState = "idle" | "loading" | "ready" | "error";
19
28
  export interface BalanceSnapshot {
@@ -24,6 +33,7 @@ export declare const PROVIDER_BALANCE_REFRESH_MS = 60000;
24
33
  type Listener = () => void;
25
34
  export declare function subscribeProviderBalances(listener: Listener): () => void;
26
35
  export declare function getProviderBalanceSnapshot(provider: ProviderId): BalanceSnapshot;
36
+ export declare function setProviderBalanceAccount(provider: ProviderId, accountId: string): void;
27
37
  export declare function kiroBalanceFromLimits(limits: KiroUsageLimits): ProviderBalance;
28
38
  export declare function ensureProviderBalancePolling(provider: ProviderId, fetcher: () => Promise<ProviderBalance | undefined>, intervalMs?: number): void;
29
39
  export declare function stopProviderBalancePolling(): void;
@@ -1,13 +1,14 @@
1
1
  import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { homedir } from "node:os";
3
2
  import { join } from "node:path";
4
- const CACHE_DIR = join(homedir(), ".clai");
3
+ import { getDataDir } from "../store/paths.js";
4
+ const CACHE_DIR = getDataDir();
5
5
  const CACHE_PATH = join(CACHE_DIR, "provider-balance.json");
6
6
  export const PROVIDER_BALANCE_REFRESH_MS = 60_000;
7
7
  const listeners = new Set();
8
8
  const states = new Map();
9
9
  const timers = new Map();
10
10
  let cacheLoaded = false;
11
+ let pollingGeneration = 0;
11
12
  function loadCache() {
12
13
  if (cacheLoaded)
13
14
  return;
@@ -54,6 +55,12 @@ export function getProviderBalanceSnapshot(provider) {
54
55
  loadCache();
55
56
  return states.get(provider) ?? { state: "idle" };
56
57
  }
58
+ export function setProviderBalanceAccount(provider, accountId) {
59
+ loadCache();
60
+ const balance = states.get(provider)?.balance;
61
+ if (balance && balance.accountId !== accountId)
62
+ setState(provider, { state: "loading" });
63
+ }
57
64
  export function kiroBalanceFromLimits(limits) {
58
65
  const breakdowns = limits.breakdowns.map((b) => ({
59
66
  label: b.displayNamePlural ?? b.displayName ?? (b.resourceType ?? "usage").toLowerCase(),
@@ -81,9 +88,16 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
81
88
  if (!existing || existing.state === "idle") {
82
89
  setState(provider, { state: "loading", ...(existing?.balance ? { balance: existing.balance } : {}) });
83
90
  }
91
+ let refreshing = false;
92
+ const generation = pollingGeneration;
84
93
  const tick = async () => {
94
+ if (refreshing)
95
+ return;
96
+ refreshing = true;
85
97
  try {
86
98
  const balance = await fetcher();
99
+ if (generation !== pollingGeneration)
100
+ return;
87
101
  if (balance) {
88
102
  setState(provider, { state: "ready", balance });
89
103
  persistCache();
@@ -94,9 +108,14 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
94
108
  }
95
109
  }
96
110
  catch {
111
+ if (generation !== pollingGeneration)
112
+ return;
97
113
  const prev = states.get(provider);
98
114
  setState(provider, { state: "error", ...(prev?.balance ? { balance: prev.balance } : {}) });
99
115
  }
116
+ finally {
117
+ refreshing = false;
118
+ }
100
119
  };
101
120
  void tick();
102
121
  const timer = setInterval(() => void tick(), intervalMs);
@@ -105,6 +124,7 @@ export function ensureProviderBalancePolling(provider, fetcher, intervalMs = PRO
105
124
  timers.set(provider, timer);
106
125
  }
107
126
  export function stopProviderBalancePolling() {
127
+ pollingGeneration += 1;
108
128
  for (const timer of timers.values())
109
129
  clearInterval(timer);
110
130
  timers.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"provider-balance.js","sourceRoot":"","sources":["../../src/llm/provider-balance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-balance.js","sourceRoot":"","sources":["../../src/llm/provider-balance.ts"],"names":[],"mappings":"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"}
@@ -120,6 +120,13 @@ export const providerAliases = {
120
120
  "kiro.dev": "kiro",
121
121
  "kiro-desktop": "kiro",
122
122
  "aws-kiro": "kiro",
123
+ omnirush: "omnirush",
124
+ omni: "omnirush",
125
+ "omnirush-ai": "omnirush",
126
+ "omni-rush": "omnirush",
127
+ tokenharbor: "tokenharbor",
128
+ "token-harbor": "tokenharbor",
129
+ "tokenharbor.ai": "tokenharbor",
123
130
  };
124
131
  export const defaultModels = {
125
132
  free: "free-2/kilo-auto/free",
@@ -153,6 +160,8 @@ export const defaultModels = {
153
160
  codex: "gpt-5.6-luna",
154
161
  copilot: "gpt-4o",
155
162
  kiro: "claude-sonnet-4.5",
163
+ omnirush: "gpt-6-astra",
164
+ tokenharbor: "claude-sonnet-5.5",
156
165
  };
157
166
  export const retiredModelReplacements = {
158
167
  codex: {
@@ -219,5 +228,7 @@ export const envVars = {
219
228
  codex: "CODEX_API_KEY",
220
229
  copilot: "COPILOT_API_KEY",
221
230
  kiro: "KIRO_API_KEY",
231
+ omnirush: "OMNIRUSH_API_KEY",
232
+ tokenharbor: "TOKENHARBOR_API_KEY",
222
233
  };
223
234
  //# sourceMappingURL=provider-identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../../src/llm/provider-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../../src/llm/provider-identity.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,70 @@ GOOD TO KNOW
101
101
  - Env var: TOKENROUTER_API_KEY (used when nothing is stored).
102
102
 
103
103
  Docs: https://docs.tokenrouter.me`,
104
+ tokenharbor: `Token Harbor — one Universal Key for every frontier model
105
+
106
+ WHAT IT IS
107
+ An OpenAI- and Anthropic-compatible gateway that fronts Claude, GPT, Gemini,
108
+ Grok, Kimi, Qwen, GLM, DeepSeek and more behind a single thk_live_ key.
109
+ clai uses /v1/chat/completions with SSE streaming, native tool calling and
110
+ live reasoning streaming.
111
+
112
+ Base URL https://tokenharbor.ai/v1 (override — see ENDPOINTS below)
113
+ Auth Authorization: Bearer thk_live_…
114
+ Endpoints /models · /chat/completions
115
+
116
+ MODELS
117
+ /model reads the live catalog from /v1/models and lists chat-capable models
118
+ only (image generators and embeddings are filtered out). Context windows,
119
+ input modalities and the reasoning efforts each model accepts are taken
120
+ from that catalog whenever the gateway reports them, so /effort offers
121
+ exactly what the selected model supports and new models appear without a
122
+ clai update. Ids are case-sensitive, e.g. claude-sonnet-5.5, gpt-6-astra.
123
+
124
+ CACHING
125
+ - Claude models: clai places its own ephemeral cache marks on the system
126
+ prompt and the tail of the conversation (at most four, as content blocks)
127
+ so history is cached with certainty on every connection. Token Harbor
128
+ never rewrites a request that already carries a mark.
129
+ - Every other model caches upstream automatically; clai adds nothing.
130
+ - Gateway response caches (exact and semantic) are bypassed with
131
+ X-TH-Cache-Control: bypass so an agent never gets a stale answer to a
132
+ similar-looking question. Vendor prompt caching is unaffected.
133
+ - Cached tokens are read from usage.cache_read_input_tokens /
134
+ usage.cache_creation_input_tokens and shown in the usage totals.
135
+
136
+ COST
137
+ Metered per token at the upstream price (see /models on the site). Free
138
+ accounts are limited to 60 requests/minute and 1,800/hour; paid accounts
139
+ have no request-rate limit. Classed paid-cloud, so /freeonly on keeps it
140
+ out of the fallback chain.
141
+
142
+ SETUP
143
+ 1. Create a key at https://tokenharbor.ai/dashboard/api-keys
144
+ 2. clai set tokenharbor thk_live_yourKey
145
+ 3. clai use tokenharbor
146
+ 4. /model claude-sonnet-5.5 (or any id from /model)
147
+
148
+ MANAGING KEYS AND ENDPOINTS IN clai
149
+ clai set tokenharbor <key> add a key (up to 10, rotated on failure)
150
+ clai keys masked keys + the active endpoint
151
+ clai unset tokenharbor remove every stored key
152
+ /set tokenharbor TUI: endpoint editor, then key editor
153
+ /info tokenharbor this page
154
+
155
+ Base URL (optional — defaults to tokenharbor.ai):
156
+ clai set tokenharbor --url https://gateway.example.com/v1
157
+ clai unset tokenharbor --url back to the default
158
+ TOKENHARBOR_BASE_URL overrides the whole list.
159
+
160
+ GOOD TO KNOW
161
+ - A leaked key is billed to your wallet. Give each machine its own key and
162
+ set a spending cap on it in the dashboard; revoke one key without
163
+ touching the others.
164
+ - Rate limits answer HTTP 429 with Retry-After; clai waits and retries.
165
+ - Env var: TOKENHARBOR_API_KEY (used when nothing is stored).
166
+
167
+ Docs: https://tokenharbor.ai/docs`,
104
168
  lightning: `Lightning AI Model APIs — one key for OpenAI, Anthropic, Google
105
169
  and Lightning-hosted open models
106
170
 
@@ -953,12 +1017,13 @@ WHAT IT IS
953
1017
  Auth Sign in with ChatGPT — browser OAuth (auth.openai.com), headless
954
1018
  device code, or paste a token — or import an existing Codex CLI
955
1019
  sign-in
956
- Endpoints /responses · /models
1020
+ Endpoints /responses · /models · /wham/usage
957
1021
 
958
1022
  MODELS
959
- /model lists the account-visible catalog (cached for up to 30 minutes), e.g.
960
- gpt-5.1-codex agentic coding default
961
- gpt-5.1 general reasoning
1023
+ /model uses the live account catalog and the installed Codex client version.
1024
+ Models, context limits, reasoning levels, and verbosity follow the catalog.
1025
+ Account-scoped catalogs refresh every five minutes and persist for offline use.
1026
+ /usage shows subscription limits, reset times, credits, and session token usage.
962
1027
  Free-tier quota errors are shown exactly as the backend returns them.
963
1028
 
964
1029
  SETUP (pick one)
@@ -1062,5 +1127,46 @@ SETUP (pick one)
1062
1127
  with automatic failover and token refresh on expiration.
1063
1128
 
1064
1129
  Docs: https://kiro.dev`,
1130
+ omnirush: `Omnirush — free daily tokens for frontier OpenAI Responses models
1131
+
1132
+ WHAT IT IS
1133
+ A gateway that serves SOTA reasoning models through the OpenAI Responses
1134
+ API with a device-code sign-in and a daily free token allowance. Every
1135
+ model is reasoning-capable and accepts image input (vision).
1136
+
1137
+ AUTH
1138
+ Device flow (browser approval; works over SSH):
1139
+ clai auth omnirush
1140
+ Import an existing omnirush CLI login:
1141
+ clai auth omnirush --import
1142
+ Or set a token directly:
1143
+ clai set omnirush <access-token> env: OMNIRUSH_API_KEY
1144
+ Tokens live in ~/.omnirush/auth.json (OMNIRUSH_DIR overrides). The access
1145
+ token is rotated with its refresh token on a 401, and the rotated pair is
1146
+ saved against the same account in clai's multi-key store.
1147
+
1148
+ ENDPOINTS
1149
+ Manager https://omnirush.ai/omnirush device/authorize · token ·
1150
+ refresh · me
1151
+ Gateway https://omnirush.ai/omnirush/v1 /models · /responses
1152
+ Overrides: OMNIRUSH_ORIGIN, OMNIRUSH_GATEWAY_URL.
1153
+
1154
+ MODELS
1155
+ /model lists the live gateway catalog (cached up to 30 minutes) and falls
1156
+ back to the shipped ids offline. Default: gpt-6-astra. The catalog carries
1157
+ each model's reasoning levels (e.g. low/high/xhigh/max), context window
1158
+ (400000) and output limit (128000), so /effort and the context meter follow
1159
+ the gateway automatically.
1160
+
1161
+ LIMITS
1162
+ Free daily token allowance; when it is spent the gateway reports the scope
1163
+ (day/week) and the reset time. Earn more at https://omnirush.ai/console.
1164
+
1165
+ GOOD TO KNOW
1166
+ - Classed as free-cloud, so /freeonly keeps it in the fallback chain.
1167
+ - Reasoning streams as Responses reasoning events; clai folds them into the
1168
+ normal thinking block, so /think and /effort behave as usual.
1169
+ - Tool calls, vision, and web search are advertised per model by the
1170
+ gateway catalog.`,
1065
1171
  };
1066
1172
  //# sourceMappingURL=provider-info-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-info-text.js","sourceRoot":"","sources":["../../src/llm/provider-info-text.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+CmE;IACzE,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoDmB;IAChC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA4EuE;IAClF,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2H0B;IACjC,MAAM,EAAE;;;;;;;;;;;;;;;UAeA;IACR,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA+CuB;IAC7B,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA+C8C;IACzD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAgDgC;IACzC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA4DqE;IACjF,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA6D+C;IAEhE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DAgEoD;IAC7D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA8CqC;IAC7C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8BwB;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8B4B;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0CuB;IAC7B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BiB;IACtB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0BqB;IAC9B,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAgCoB;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+Ce;IACzB,KAAK,EAAE,GAAG,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAkCF;IACzC,OAAO,EAAE,GAAG,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAgCH;IACpC,IAAI,EAAE,GAAG,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAqDL;CACtB,CAAC"}
1
+ {"version":3,"file":"provider-info-text.js","sourceRoot":"","sources":["../../src/llm/provider-info-text.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+CmE;IACzE,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAoDmB;IAChC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA+DmB;IAChC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFA4EuE;IAClF,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA2H0B;IACjC,MAAM,EAAE;;;;;;;;;;;;;;;UAeA;IACR,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA+CuB;IAC7B,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DA+C8C;IACzD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAgDgC;IACzC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA4DqE;IACjF,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA6D+C;IAEhE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DAgEoD;IAC7D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA8CqC;IAC7C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8BwB;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA8B4B;IAClC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0CuB;IAC7B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BiB;IACtB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0BqB;IAC9B,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAgCoB;IAC3B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+Ce;IACzB,KAAK,EAAE,GAAG,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAmCF;IACzC,OAAO,EAAE,GAAG,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAgCH;IACpC,IAAI,EAAE,GAAG,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAqDL;IACrB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwCS;CACpB,CAAC"}
@@ -405,6 +405,34 @@ export const FAMILY_LAYERS = {
405
405
  naturalEofAccepted: false,
406
406
  },
407
407
  },
408
+ tokenharbor: {
409
+ evidence: providerDoc("tokenharbor-chat-completions"),
410
+ capabilities: { tools: "supported", images: "unknown" },
411
+ reasoning: {
412
+ control: {
413
+ dialect: "openai-effort",
414
+ status: "supported",
415
+ evidence: providerDoc("tokenharbor-chat-completions"),
416
+ },
417
+ outputShapes: ["reasoning-content", "reasoning-field", "structured-details"],
418
+ },
419
+ cache: {
420
+ kind: "explicit-breakpoint",
421
+ cacheAffectingFields: ["messages", "tools", "tool_choice", "cache_control"],
422
+ },
423
+ usage: {
424
+ cachedInput: [
425
+ "usage.cache_read_input_tokens",
426
+ "usage.prompt_tokens_details.cached_tokens",
427
+ ],
428
+ cacheWrite: ["usage.cache_creation_input_tokens"],
429
+ reasoningOutput: ["usage.completion_tokens_details.reasoning_tokens"],
430
+ },
431
+ terminal: {
432
+ proofs: CHAT_COMPLETIONS_TERMINAL_PROOFS,
433
+ naturalEofAccepted: false,
434
+ },
435
+ },
408
436
  fireworks: {
409
437
  evidence: providerDoc("fireworks-chat-completions"),
410
438
  capabilities: { tools: "supported" },
@@ -772,17 +800,19 @@ export const FAMILY_LAYERS = {
772
800
  capabilities: { tools: "supported", images: "supported" },
773
801
  reasoning: {
774
802
  control: {
775
- dialect: "openai-effort",
803
+ dialect: "openai-nested-reasoning",
776
804
  status: "supported",
777
805
  evidence: providerDoc("codex-responses-reasoning"),
778
806
  },
779
807
  generation: "optional",
780
808
  outputShapes: ["encrypted-reasoning-items"],
781
- replayScope: "tool-turn",
809
+ replayScope: "all-history",
810
+ finalTurnPreservation: "supported",
782
811
  },
783
812
  cache: {
784
813
  kind: "automatic-prefix",
785
- cacheAffectingFields: ["input", "tools"],
814
+ affinityField: "prompt_cache_key",
815
+ cacheAffectingFields: ["instructions", "input", "tools", "parallel_tool_calls", "reasoning.effort", "text.verbosity", "prompt_cache_key"],
786
816
  },
787
817
  usage: {
788
818
  cachedInput: [