@alan-ai-hq/agent-manager 0.1.113 → 0.1.115

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 (655) hide show
  1. package/LICENSE +88 -0
  2. package/dist/__tests__/binding-switch-git.test.d.ts +2 -0
  3. package/dist/__tests__/binding-switch-git.test.d.ts.map +1 -0
  4. package/dist/__tests__/binding-switch-git.test.js +555 -0
  5. package/dist/__tests__/binding-switch-git.test.js.map +1 -0
  6. package/dist/__tests__/cli-ensure-install.test.d.ts +2 -0
  7. package/dist/__tests__/cli-ensure-install.test.d.ts.map +1 -0
  8. package/dist/__tests__/cli-ensure-install.test.js +177 -0
  9. package/dist/__tests__/cli-ensure-install.test.js.map +1 -0
  10. package/dist/__tests__/cli-executable.test.d.ts +2 -0
  11. package/dist/__tests__/cli-executable.test.d.ts.map +1 -0
  12. package/dist/__tests__/cli-executable.test.js +155 -0
  13. package/dist/__tests__/cli-executable.test.js.map +1 -0
  14. package/dist/__tests__/cli-executable.windows.test.d.ts +2 -0
  15. package/dist/__tests__/cli-executable.windows.test.d.ts.map +1 -0
  16. package/dist/__tests__/cli-executable.windows.test.js +123 -0
  17. package/dist/__tests__/cli-executable.windows.test.js.map +1 -0
  18. package/dist/__tests__/cli-help.test.d.ts +2 -0
  19. package/dist/__tests__/cli-help.test.d.ts.map +1 -0
  20. package/dist/__tests__/cli-help.test.js +47 -0
  21. package/dist/__tests__/cli-help.test.js.map +1 -0
  22. package/dist/__tests__/computer-readiness.test.d.ts +2 -0
  23. package/dist/__tests__/computer-readiness.test.d.ts.map +1 -0
  24. package/dist/__tests__/computer-readiness.test.js +63 -0
  25. package/dist/__tests__/computer-readiness.test.js.map +1 -0
  26. package/dist/__tests__/core-agent-provider-auth-env.test.d.ts +2 -0
  27. package/dist/__tests__/core-agent-provider-auth-env.test.d.ts.map +1 -0
  28. package/dist/__tests__/core-agent-provider-auth-env.test.js +93 -0
  29. package/dist/__tests__/core-agent-provider-auth-env.test.js.map +1 -0
  30. package/dist/__tests__/core-agent-workflow-context.test.d.ts +2 -0
  31. package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +1 -0
  32. package/dist/__tests__/core-agent-workflow-context.test.js +139 -0
  33. package/dist/__tests__/core-agent-workflow-context.test.js.map +1 -0
  34. package/dist/__tests__/daemon-native-hooks.test.d.ts +2 -0
  35. package/dist/__tests__/daemon-native-hooks.test.d.ts.map +1 -0
  36. package/dist/__tests__/daemon-native-hooks.test.js +94 -0
  37. package/dist/__tests__/daemon-native-hooks.test.js.map +1 -0
  38. package/dist/__tests__/daemon-reconcile-ask.test.d.ts +2 -0
  39. package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +1 -0
  40. package/dist/__tests__/daemon-reconcile-ask.test.js +100 -0
  41. package/dist/__tests__/daemon-reconcile-ask.test.js.map +1 -0
  42. package/dist/__tests__/daemon-runner-status.test.d.ts +2 -0
  43. package/dist/__tests__/daemon-runner-status.test.d.ts.map +1 -0
  44. package/dist/__tests__/daemon-runner-status.test.js +102 -0
  45. package/dist/__tests__/daemon-runner-status.test.js.map +1 -0
  46. package/dist/__tests__/daemon-socket.integration.test.d.ts +2 -0
  47. package/dist/__tests__/daemon-socket.integration.test.d.ts.map +1 -0
  48. package/dist/__tests__/daemon-socket.integration.test.js +435 -0
  49. package/dist/__tests__/daemon-socket.integration.test.js.map +1 -0
  50. package/dist/__tests__/daemon.test.d.ts +2 -0
  51. package/dist/__tests__/daemon.test.d.ts.map +1 -0
  52. package/dist/__tests__/daemon.test.js +4884 -0
  53. package/dist/__tests__/daemon.test.js.map +1 -0
  54. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +2 -0
  55. package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +1 -0
  56. package/dist/__tests__/ensure-shared-checkout-branch.test.js +129 -0
  57. package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +1 -0
  58. package/dist/__tests__/event-journal-stress.test.d.ts +2 -0
  59. package/dist/__tests__/event-journal-stress.test.d.ts.map +1 -0
  60. package/dist/__tests__/event-journal-stress.test.js +124 -0
  61. package/dist/__tests__/event-journal-stress.test.js.map +1 -0
  62. package/dist/__tests__/event-journal.test.d.ts +2 -0
  63. package/dist/__tests__/event-journal.test.d.ts.map +1 -0
  64. package/dist/__tests__/event-journal.test.js +264 -0
  65. package/dist/__tests__/event-journal.test.js.map +1 -0
  66. package/dist/__tests__/event-outbox-persist-failure.test.d.ts +2 -0
  67. package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +1 -0
  68. package/dist/__tests__/event-outbox-persist-failure.test.js +143 -0
  69. package/dist/__tests__/event-outbox-persist-failure.test.js.map +1 -0
  70. package/dist/__tests__/event-outbox.test.d.ts +2 -0
  71. package/dist/__tests__/event-outbox.test.d.ts.map +1 -0
  72. package/dist/__tests__/event-outbox.test.js +602 -0
  73. package/dist/__tests__/event-outbox.test.js.map +1 -0
  74. package/dist/__tests__/execution-activity-tracker.test.d.ts +2 -0
  75. package/dist/__tests__/execution-activity-tracker.test.d.ts.map +1 -0
  76. package/dist/__tests__/execution-activity-tracker.test.js +64 -0
  77. package/dist/__tests__/execution-activity-tracker.test.js.map +1 -0
  78. package/dist/__tests__/execution-lease-client.test.d.ts +2 -0
  79. package/dist/__tests__/execution-lease-client.test.d.ts.map +1 -0
  80. package/dist/__tests__/execution-lease-client.test.js +274 -0
  81. package/dist/__tests__/execution-lease-client.test.js.map +1 -0
  82. package/dist/__tests__/fake-provider-cli.test.d.ts +2 -0
  83. package/dist/__tests__/fake-provider-cli.test.d.ts.map +1 -0
  84. package/dist/__tests__/fake-provider-cli.test.js +46 -0
  85. package/dist/__tests__/fake-provider-cli.test.js.map +1 -0
  86. package/dist/__tests__/generated-images.test.d.ts +2 -0
  87. package/dist/__tests__/generated-images.test.d.ts.map +1 -0
  88. package/dist/__tests__/generated-images.test.js +132 -0
  89. package/dist/__tests__/generated-images.test.js.map +1 -0
  90. package/dist/__tests__/helpers/sandbox-outbox.d.ts +3 -0
  91. package/dist/__tests__/helpers/sandbox-outbox.d.ts.map +1 -0
  92. package/dist/__tests__/helpers/sandbox-outbox.js +23 -0
  93. package/dist/__tests__/helpers/sandbox-outbox.js.map +1 -0
  94. package/dist/__tests__/install-command.test.d.ts +2 -0
  95. package/dist/__tests__/install-command.test.d.ts.map +1 -0
  96. package/dist/__tests__/install-command.test.js +185 -0
  97. package/dist/__tests__/install-command.test.js.map +1 -0
  98. package/dist/__tests__/integration-cli.test.d.ts +2 -0
  99. package/dist/__tests__/integration-cli.test.d.ts.map +1 -0
  100. package/dist/__tests__/integration-cli.test.js +150 -0
  101. package/dist/__tests__/integration-cli.test.js.map +1 -0
  102. package/dist/__tests__/lifecycle-contracts.test.d.ts +2 -0
  103. package/dist/__tests__/lifecycle-contracts.test.d.ts.map +1 -0
  104. package/dist/__tests__/lifecycle-contracts.test.js +66 -0
  105. package/dist/__tests__/lifecycle-contracts.test.js.map +1 -0
  106. package/dist/__tests__/lifecycle-logger.test.d.ts +2 -0
  107. package/dist/__tests__/lifecycle-logger.test.d.ts.map +1 -0
  108. package/dist/__tests__/lifecycle-logger.test.js +49 -0
  109. package/dist/__tests__/lifecycle-logger.test.js.map +1 -0
  110. package/dist/__tests__/local-daemon-lifecycle.test.d.ts +2 -0
  111. package/dist/__tests__/local-daemon-lifecycle.test.d.ts.map +1 -0
  112. package/dist/__tests__/local-daemon-lifecycle.test.js +594 -0
  113. package/dist/__tests__/local-daemon-lifecycle.test.js.map +1 -0
  114. package/dist/__tests__/local-git-status.test.d.ts +2 -0
  115. package/dist/__tests__/local-git-status.test.d.ts.map +1 -0
  116. package/dist/__tests__/local-git-status.test.js +31 -0
  117. package/dist/__tests__/local-git-status.test.js.map +1 -0
  118. package/dist/__tests__/mcp-config-adapters-files.test.d.ts +2 -0
  119. package/dist/__tests__/mcp-config-adapters-files.test.d.ts.map +1 -0
  120. package/dist/__tests__/mcp-config-adapters-files.test.js +486 -0
  121. package/dist/__tests__/mcp-config-adapters-files.test.js.map +1 -0
  122. package/dist/__tests__/mcp-config-adapters.test.d.ts +2 -0
  123. package/dist/__tests__/mcp-config-adapters.test.d.ts.map +1 -0
  124. package/dist/__tests__/mcp-config-adapters.test.js +492 -0
  125. package/dist/__tests__/mcp-config-adapters.test.js.map +1 -0
  126. package/dist/__tests__/mcp-sync.test.d.ts +2 -0
  127. package/dist/__tests__/mcp-sync.test.d.ts.map +1 -0
  128. package/dist/__tests__/mcp-sync.test.js +21 -0
  129. package/dist/__tests__/mcp-sync.test.js.map +1 -0
  130. package/dist/__tests__/model-scan-runner.test.d.ts +2 -0
  131. package/dist/__tests__/model-scan-runner.test.d.ts.map +1 -0
  132. package/dist/__tests__/model-scan-runner.test.js +80 -0
  133. package/dist/__tests__/model-scan-runner.test.js.map +1 -0
  134. package/dist/__tests__/native-hook-command.test.d.ts +2 -0
  135. package/dist/__tests__/native-hook-command.test.d.ts.map +1 -0
  136. package/dist/__tests__/native-hook-command.test.js +386 -0
  137. package/dist/__tests__/native-hook-command.test.js.map +1 -0
  138. package/dist/__tests__/native-hook-config.test.d.ts +2 -0
  139. package/dist/__tests__/native-hook-config.test.d.ts.map +1 -0
  140. package/dist/__tests__/native-hook-config.test.js +374 -0
  141. package/dist/__tests__/native-hook-config.test.js.map +1 -0
  142. package/dist/__tests__/native-hook-drain.test.d.ts +2 -0
  143. package/dist/__tests__/native-hook-drain.test.d.ts.map +1 -0
  144. package/dist/__tests__/native-hook-drain.test.js +197 -0
  145. package/dist/__tests__/native-hook-drain.test.js.map +1 -0
  146. package/dist/__tests__/native-hook-inbox.test.d.ts +2 -0
  147. package/dist/__tests__/native-hook-inbox.test.d.ts.map +1 -0
  148. package/dist/__tests__/native-hook-inbox.test.js +139 -0
  149. package/dist/__tests__/native-hook-inbox.test.js.map +1 -0
  150. package/dist/__tests__/native-session.test.d.ts +2 -0
  151. package/dist/__tests__/native-session.test.d.ts.map +1 -0
  152. package/dist/__tests__/native-session.test.js +41 -0
  153. package/dist/__tests__/native-session.test.js.map +1 -0
  154. package/dist/__tests__/native-stream-outbox.test.d.ts +2 -0
  155. package/dist/__tests__/native-stream-outbox.test.d.ts.map +1 -0
  156. package/dist/__tests__/native-stream-outbox.test.js +231 -0
  157. package/dist/__tests__/native-stream-outbox.test.js.map +1 -0
  158. package/dist/__tests__/native-stream-platform.test.d.ts +2 -0
  159. package/dist/__tests__/native-stream-platform.test.d.ts.map +1 -0
  160. package/dist/__tests__/native-stream-platform.test.js +20 -0
  161. package/dist/__tests__/native-stream-platform.test.js.map +1 -0
  162. package/dist/__tests__/native-transcript-cursor.test.d.ts +2 -0
  163. package/dist/__tests__/native-transcript-cursor.test.d.ts.map +1 -0
  164. package/dist/__tests__/native-transcript-cursor.test.js +60 -0
  165. package/dist/__tests__/native-transcript-cursor.test.js.map +1 -0
  166. package/dist/__tests__/native-transcript-stream.test.d.ts +2 -0
  167. package/dist/__tests__/native-transcript-stream.test.d.ts.map +1 -0
  168. package/dist/__tests__/native-transcript-stream.test.js +378 -0
  169. package/dist/__tests__/native-transcript-stream.test.js.map +1 -0
  170. package/dist/__tests__/network-diagnostics.test.d.ts +2 -0
  171. package/dist/__tests__/network-diagnostics.test.d.ts.map +1 -0
  172. package/dist/__tests__/network-diagnostics.test.js +26 -0
  173. package/dist/__tests__/network-diagnostics.test.js.map +1 -0
  174. package/dist/__tests__/observable-map.test.d.ts +2 -0
  175. package/dist/__tests__/observable-map.test.d.ts.map +1 -0
  176. package/dist/__tests__/observable-map.test.js +54 -0
  177. package/dist/__tests__/observable-map.test.js.map +1 -0
  178. package/dist/__tests__/outbox-baseline.bench.test.d.ts +2 -0
  179. package/dist/__tests__/outbox-baseline.bench.test.d.ts.map +1 -0
  180. package/dist/__tests__/outbox-baseline.bench.test.js +108 -0
  181. package/dist/__tests__/outbox-baseline.bench.test.js.map +1 -0
  182. package/dist/__tests__/provider-auth-preflight.test.d.ts +2 -0
  183. package/dist/__tests__/provider-auth-preflight.test.d.ts.map +1 -0
  184. package/dist/__tests__/provider-auth-preflight.test.js +123 -0
  185. package/dist/__tests__/provider-auth-preflight.test.js.map +1 -0
  186. package/dist/__tests__/provider-model-discovery.test.d.ts +2 -0
  187. package/dist/__tests__/provider-model-discovery.test.d.ts.map +1 -0
  188. package/dist/__tests__/provider-model-discovery.test.js +1071 -0
  189. package/dist/__tests__/provider-model-discovery.test.js.map +1 -0
  190. package/dist/__tests__/resource-diagnostics.test.d.ts +2 -0
  191. package/dist/__tests__/resource-diagnostics.test.d.ts.map +1 -0
  192. package/dist/__tests__/resource-diagnostics.test.js +138 -0
  193. package/dist/__tests__/resource-diagnostics.test.js.map +1 -0
  194. package/dist/__tests__/resume-fallback-env.test.d.ts +2 -0
  195. package/dist/__tests__/resume-fallback-env.test.d.ts.map +1 -0
  196. package/dist/__tests__/resume-fallback-env.test.js +28 -0
  197. package/dist/__tests__/resume-fallback-env.test.js.map +1 -0
  198. package/dist/__tests__/run-journal.test.d.ts +2 -0
  199. package/dist/__tests__/run-journal.test.d.ts.map +1 -0
  200. package/dist/__tests__/run-journal.test.js +121 -0
  201. package/dist/__tests__/run-journal.test.js.map +1 -0
  202. package/dist/__tests__/run-start-gate.test.d.ts +2 -0
  203. package/dist/__tests__/run-start-gate.test.d.ts.map +1 -0
  204. package/dist/__tests__/run-start-gate.test.js +18 -0
  205. package/dist/__tests__/run-start-gate.test.js.map +1 -0
  206. package/dist/__tests__/runtime-capabilities-sync.test.d.ts +2 -0
  207. package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +1 -0
  208. package/dist/__tests__/runtime-capabilities-sync.test.js +66 -0
  209. package/dist/__tests__/runtime-capabilities-sync.test.js.map +1 -0
  210. package/dist/__tests__/runtime-config.test.d.ts +2 -0
  211. package/dist/__tests__/runtime-config.test.d.ts.map +1 -0
  212. package/dist/__tests__/runtime-config.test.js +137 -0
  213. package/dist/__tests__/runtime-config.test.js.map +1 -0
  214. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +2 -0
  215. package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +1 -0
  216. package/dist/__tests__/runtime-presenter-heartbeat.test.js +253 -0
  217. package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +1 -0
  218. package/dist/__tests__/runtime-registration.test.d.ts +2 -0
  219. package/dist/__tests__/runtime-registration.test.d.ts.map +1 -0
  220. package/dist/__tests__/runtime-registration.test.js +109 -0
  221. package/dist/__tests__/runtime-registration.test.js.map +1 -0
  222. package/dist/__tests__/sandbox-outbox-storage.test.d.ts +2 -0
  223. package/dist/__tests__/sandbox-outbox-storage.test.d.ts.map +1 -0
  224. package/dist/__tests__/sandbox-outbox-storage.test.js +81 -0
  225. package/dist/__tests__/sandbox-outbox-storage.test.js.map +1 -0
  226. package/dist/__tests__/sandbox-outbox.test.d.ts +2 -0
  227. package/dist/__tests__/sandbox-outbox.test.d.ts.map +1 -0
  228. package/dist/__tests__/sandbox-outbox.test.js +300 -0
  229. package/dist/__tests__/sandbox-outbox.test.js.map +1 -0
  230. package/dist/__tests__/sandbox-workflow-context.test.d.ts +2 -0
  231. package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +1 -0
  232. package/dist/__tests__/sandbox-workflow-context.test.js +600 -0
  233. package/dist/__tests__/sandbox-workflow-context.test.js.map +1 -0
  234. package/dist/__tests__/service-manager-deadline.test.d.ts +2 -0
  235. package/dist/__tests__/service-manager-deadline.test.d.ts.map +1 -0
  236. package/dist/__tests__/service-manager-deadline.test.js +36 -0
  237. package/dist/__tests__/service-manager-deadline.test.js.map +1 -0
  238. package/dist/__tests__/service-manager.test.d.ts +2 -0
  239. package/dist/__tests__/service-manager.test.d.ts.map +1 -0
  240. package/dist/__tests__/service-manager.test.js +769 -0
  241. package/dist/__tests__/service-manager.test.js.map +1 -0
  242. package/dist/__tests__/service-stop-ownership.test.d.ts +2 -0
  243. package/dist/__tests__/service-stop-ownership.test.d.ts.map +1 -0
  244. package/dist/__tests__/service-stop-ownership.test.js +89 -0
  245. package/dist/__tests__/service-stop-ownership.test.js.map +1 -0
  246. package/dist/__tests__/skill-invocation.test.d.ts +2 -0
  247. package/dist/__tests__/skill-invocation.test.d.ts.map +1 -0
  248. package/dist/__tests__/skill-invocation.test.js +40 -0
  249. package/dist/__tests__/skill-invocation.test.js.map +1 -0
  250. package/dist/__tests__/sleep-inhibitor-real.test.d.ts +2 -0
  251. package/dist/__tests__/sleep-inhibitor-real.test.d.ts.map +1 -0
  252. package/dist/__tests__/sleep-inhibitor-real.test.js +68 -0
  253. package/dist/__tests__/sleep-inhibitor-real.test.js.map +1 -0
  254. package/dist/__tests__/sleep-inhibitor.test.d.ts +2 -0
  255. package/dist/__tests__/sleep-inhibitor.test.d.ts.map +1 -0
  256. package/dist/__tests__/sleep-inhibitor.test.js +236 -0
  257. package/dist/__tests__/sleep-inhibitor.test.js.map +1 -0
  258. package/dist/__tests__/status-local-workspace.test.d.ts +2 -0
  259. package/dist/__tests__/status-local-workspace.test.d.ts.map +1 -0
  260. package/dist/__tests__/status-local-workspace.test.js +121 -0
  261. package/dist/__tests__/status-local-workspace.test.js.map +1 -0
  262. package/dist/__tests__/suspension-detector.test.d.ts +2 -0
  263. package/dist/__tests__/suspension-detector.test.d.ts.map +1 -0
  264. package/dist/__tests__/suspension-detector.test.js +112 -0
  265. package/dist/__tests__/suspension-detector.test.js.map +1 -0
  266. package/dist/__tests__/web-presenter-parent-events.test.d.ts +2 -0
  267. package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +1 -0
  268. package/dist/__tests__/web-presenter-parent-events.test.js +168 -0
  269. package/dist/__tests__/web-presenter-parent-events.test.js.map +1 -0
  270. package/dist/__tests__/workspace-probe-concurrency.test.d.ts +2 -0
  271. package/dist/__tests__/workspace-probe-concurrency.test.d.ts.map +1 -0
  272. package/dist/__tests__/workspace-probe-concurrency.test.js +54 -0
  273. package/dist/__tests__/workspace-probe-concurrency.test.js.map +1 -0
  274. package/dist/__tests__/workspace-relocation.test.d.ts +2 -0
  275. package/dist/__tests__/workspace-relocation.test.d.ts.map +1 -0
  276. package/dist/__tests__/workspace-relocation.test.js +66 -0
  277. package/dist/__tests__/workspace-relocation.test.js.map +1 -0
  278. package/dist/__tests__/workspace-rpc.test.d.ts +2 -0
  279. package/dist/__tests__/workspace-rpc.test.d.ts.map +1 -0
  280. package/dist/__tests__/workspace-rpc.test.js +90 -0
  281. package/dist/__tests__/workspace-rpc.test.js.map +1 -0
  282. package/dist/__tests__/workspace-run-lease.test.d.ts +2 -0
  283. package/dist/__tests__/workspace-run-lease.test.d.ts.map +1 -0
  284. package/dist/__tests__/workspace-run-lease.test.js +331 -0
  285. package/dist/__tests__/workspace-run-lease.test.js.map +1 -0
  286. package/dist/__tests__/ws-client-connection.test.d.ts +2 -0
  287. package/dist/__tests__/ws-client-connection.test.d.ts.map +1 -0
  288. package/dist/__tests__/ws-client-connection.test.js +295 -0
  289. package/dist/__tests__/ws-client-connection.test.js.map +1 -0
  290. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +2 -0
  291. package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +1 -0
  292. package/dist/__tests__/ws-client-heartbeat-volatile.test.js +63 -0
  293. package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +1 -0
  294. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +2 -0
  295. package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +1 -0
  296. package/dist/__tests__/ws-client-heartbeat.integration.test.js +236 -0
  297. package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +1 -0
  298. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +2 -0
  299. package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +1 -0
  300. package/dist/__tests__/ws-client-user-message-ack.integration.test.js +211 -0
  301. package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +1 -0
  302. package/dist/antigravity-api-key-config.d.ts +2 -0
  303. package/dist/antigravity-api-key-config.d.ts.map +1 -0
  304. package/dist/antigravity-api-key-config.js +79 -0
  305. package/dist/antigravity-api-key-config.js.map +1 -0
  306. package/dist/binding-switch-git.d.ts +26 -0
  307. package/dist/binding-switch-git.d.ts.map +1 -0
  308. package/dist/binding-switch-git.js +871 -0
  309. package/dist/binding-switch-git.js.map +1 -0
  310. package/dist/cli-ensure-install.d.ts +34 -0
  311. package/dist/cli-ensure-install.d.ts.map +1 -0
  312. package/dist/cli-ensure-install.js +154 -0
  313. package/dist/cli-ensure-install.js.map +1 -0
  314. package/dist/cli-executable.d.ts +44 -0
  315. package/dist/cli-executable.d.ts.map +1 -0
  316. package/dist/cli-executable.js +435 -0
  317. package/dist/cli-executable.js.map +1 -0
  318. package/dist/cli-help.d.ts +11 -0
  319. package/dist/cli-help.d.ts.map +1 -0
  320. package/dist/cli-help.js +65 -0
  321. package/dist/cli-help.js.map +1 -0
  322. package/dist/computer-readiness.d.ts +41 -0
  323. package/dist/computer-readiness.d.ts.map +1 -0
  324. package/dist/computer-readiness.js +191 -0
  325. package/dist/computer-readiness.js.map +1 -0
  326. package/dist/core-agent.d.ts +32 -0
  327. package/dist/core-agent.d.ts.map +1 -0
  328. package/dist/core-agent.js +331 -0
  329. package/dist/core-agent.js.map +1 -0
  330. package/dist/daemon-execute.d.ts +42 -0
  331. package/dist/daemon-execute.d.ts.map +1 -0
  332. package/dist/daemon-execute.js +666 -0
  333. package/dist/daemon-execute.js.map +1 -0
  334. package/dist/daemon-helpers.d.ts +150 -0
  335. package/dist/daemon-helpers.d.ts.map +1 -0
  336. package/dist/daemon-helpers.js +157 -0
  337. package/dist/daemon-helpers.js.map +1 -0
  338. package/dist/daemon-local-control.d.ts +208 -0
  339. package/dist/daemon-local-control.d.ts.map +1 -0
  340. package/dist/daemon-local-control.js +826 -0
  341. package/dist/daemon-local-control.js.map +1 -0
  342. package/dist/daemon-local-http.d.ts +57 -0
  343. package/dist/daemon-local-http.d.ts.map +1 -0
  344. package/dist/daemon-local-http.js +375 -0
  345. package/dist/daemon-local-http.js.map +1 -0
  346. package/dist/daemon-native-hooks.d.ts +17 -0
  347. package/dist/daemon-native-hooks.d.ts.map +1 -0
  348. package/dist/daemon-native-hooks.js +54 -0
  349. package/dist/daemon-native-hooks.js.map +1 -0
  350. package/dist/daemon-provider-scan.d.ts +33 -0
  351. package/dist/daemon-provider-scan.d.ts.map +1 -0
  352. package/dist/daemon-provider-scan.js +187 -0
  353. package/dist/daemon-provider-scan.js.map +1 -0
  354. package/dist/daemon-runner-status.d.ts +164 -0
  355. package/dist/daemon-runner-status.d.ts.map +1 -0
  356. package/dist/daemon-runner-status.js +424 -0
  357. package/dist/daemon-runner-status.js.map +1 -0
  358. package/dist/daemon-start.d.ts +5 -0
  359. package/dist/daemon-start.d.ts.map +1 -0
  360. package/dist/daemon-start.js +1313 -0
  361. package/dist/daemon-start.js.map +1 -0
  362. package/dist/daemon-workspace.d.ts +36 -0
  363. package/dist/daemon-workspace.d.ts.map +1 -0
  364. package/dist/daemon-workspace.js +154 -0
  365. package/dist/daemon-workspace.js.map +1 -0
  366. package/dist/daemon.d.ts +59 -0
  367. package/dist/daemon.d.ts.map +1 -0
  368. package/dist/daemon.js +681 -0
  369. package/dist/daemon.js.map +1 -0
  370. package/dist/event-journal-crypto.d.ts +14 -0
  371. package/dist/event-journal-crypto.d.ts.map +1 -0
  372. package/dist/event-journal-crypto.js +89 -0
  373. package/dist/event-journal-crypto.js.map +1 -0
  374. package/dist/event-journal-paths.d.ts +10 -0
  375. package/dist/event-journal-paths.d.ts.map +1 -0
  376. package/dist/event-journal-paths.js +29 -0
  377. package/dist/event-journal-paths.js.map +1 -0
  378. package/dist/event-journal-recovery.d.ts +83 -0
  379. package/dist/event-journal-recovery.d.ts.map +1 -0
  380. package/dist/event-journal-recovery.js +333 -0
  381. package/dist/event-journal-recovery.js.map +1 -0
  382. package/dist/event-journal-types.d.ts +54 -0
  383. package/dist/event-journal-types.d.ts.map +1 -0
  384. package/dist/event-journal-types.js +10 -0
  385. package/dist/event-journal-types.js.map +1 -0
  386. package/dist/event-journal-writer.d.ts +44 -0
  387. package/dist/event-journal-writer.d.ts.map +1 -0
  388. package/dist/event-journal-writer.js +182 -0
  389. package/dist/event-journal-writer.js.map +1 -0
  390. package/dist/event-outbox.d.ts +113 -0
  391. package/dist/event-outbox.d.ts.map +1 -0
  392. package/dist/event-outbox.js +707 -0
  393. package/dist/event-outbox.js.map +1 -0
  394. package/dist/execution-activity-tracker.d.ts +43 -0
  395. package/dist/execution-activity-tracker.d.ts.map +1 -0
  396. package/dist/execution-activity-tracker.js +116 -0
  397. package/dist/execution-activity-tracker.js.map +1 -0
  398. package/dist/execution-lease-client.d.ts +62 -0
  399. package/dist/execution-lease-client.d.ts.map +1 -0
  400. package/dist/execution-lease-client.js +271 -0
  401. package/dist/execution-lease-client.js.map +1 -0
  402. package/dist/fake-provider-cli.d.ts +13 -0
  403. package/dist/fake-provider-cli.d.ts.map +1 -0
  404. package/dist/fake-provider-cli.js +53 -0
  405. package/dist/fake-provider-cli.js.map +1 -0
  406. package/dist/generated-images.d.ts +2 -0
  407. package/dist/generated-images.d.ts.map +1 -0
  408. package/dist/generated-images.js +2 -0
  409. package/dist/generated-images.js.map +1 -0
  410. package/dist/index.cjs +47033 -45514
  411. package/dist/index.d.ts +2 -0
  412. package/dist/index.d.ts.map +1 -0
  413. package/dist/index.js +224 -0
  414. package/dist/index.js.map +1 -0
  415. package/dist/install-command.d.ts +2 -0
  416. package/dist/install-command.d.ts.map +1 -0
  417. package/dist/install-command.js +96 -0
  418. package/dist/install-command.js.map +1 -0
  419. package/dist/integration-cli.d.ts +14 -0
  420. package/dist/integration-cli.d.ts.map +1 -0
  421. package/dist/integration-cli.js +80 -0
  422. package/dist/integration-cli.js.map +1 -0
  423. package/dist/lifecycle-logger.d.ts +25 -0
  424. package/dist/lifecycle-logger.d.ts.map +1 -0
  425. package/dist/lifecycle-logger.js +73 -0
  426. package/dist/lifecycle-logger.js.map +1 -0
  427. package/dist/local-daemon-lifecycle.d.ts +112 -0
  428. package/dist/local-daemon-lifecycle.d.ts.map +1 -0
  429. package/dist/local-daemon-lifecycle.js +433 -0
  430. package/dist/local-daemon-lifecycle.js.map +1 -0
  431. package/dist/local-git-status.d.ts +14 -0
  432. package/dist/local-git-status.d.ts.map +1 -0
  433. package/dist/local-git-status.js +43 -0
  434. package/dist/local-git-status.js.map +1 -0
  435. package/dist/managed-mcp.d.ts +7 -0
  436. package/dist/managed-mcp.d.ts.map +1 -0
  437. package/dist/managed-mcp.js +16 -0
  438. package/dist/managed-mcp.js.map +1 -0
  439. package/dist/mcp-config-adapters.d.ts +57 -0
  440. package/dist/mcp-config-adapters.d.ts.map +1 -0
  441. package/dist/mcp-config-adapters.js +929 -0
  442. package/dist/mcp-config-adapters.js.map +1 -0
  443. package/dist/mcp-sync.d.ts +44 -0
  444. package/dist/mcp-sync.d.ts.map +1 -0
  445. package/dist/mcp-sync.js +68 -0
  446. package/dist/mcp-sync.js.map +1 -0
  447. package/dist/model-scan-runner.d.ts +15 -0
  448. package/dist/model-scan-runner.d.ts.map +1 -0
  449. package/dist/model-scan-runner.js +56 -0
  450. package/dist/model-scan-runner.js.map +1 -0
  451. package/dist/native-hook-command.d.ts +31 -0
  452. package/dist/native-hook-command.d.ts.map +1 -0
  453. package/dist/native-hook-command.js +289 -0
  454. package/dist/native-hook-command.js.map +1 -0
  455. package/dist/native-hook-config.d.ts +43 -0
  456. package/dist/native-hook-config.d.ts.map +1 -0
  457. package/dist/native-hook-config.js +601 -0
  458. package/dist/native-hook-config.js.map +1 -0
  459. package/dist/native-hook-drain.d.ts +34 -0
  460. package/dist/native-hook-drain.d.ts.map +1 -0
  461. package/dist/native-hook-drain.js +83 -0
  462. package/dist/native-hook-drain.js.map +1 -0
  463. package/dist/native-hook-inbox.d.ts +40 -0
  464. package/dist/native-hook-inbox.d.ts.map +1 -0
  465. package/dist/native-hook-inbox.js +217 -0
  466. package/dist/native-hook-inbox.js.map +1 -0
  467. package/dist/native-project-config.d.ts +11 -0
  468. package/dist/native-project-config.d.ts.map +1 -0
  469. package/dist/native-project-config.js +49 -0
  470. package/dist/native-project-config.js.map +1 -0
  471. package/dist/native-session.d.ts +20 -0
  472. package/dist/native-session.d.ts.map +1 -0
  473. package/dist/native-session.js +213 -0
  474. package/dist/native-session.js.map +1 -0
  475. package/dist/native-stream-journal.d.ts +22 -0
  476. package/dist/native-stream-journal.d.ts.map +1 -0
  477. package/dist/native-stream-journal.js +98 -0
  478. package/dist/native-stream-journal.js.map +1 -0
  479. package/dist/native-stream-outbox.d.ts +40 -0
  480. package/dist/native-stream-outbox.d.ts.map +1 -0
  481. package/dist/native-stream-outbox.js +358 -0
  482. package/dist/native-stream-outbox.js.map +1 -0
  483. package/dist/native-stream-platform.d.ts +4 -0
  484. package/dist/native-stream-platform.d.ts.map +1 -0
  485. package/dist/native-stream-platform.js +11 -0
  486. package/dist/native-stream-platform.js.map +1 -0
  487. package/dist/native-transcript-cursor.d.ts +33 -0
  488. package/dist/native-transcript-cursor.d.ts.map +1 -0
  489. package/dist/native-transcript-cursor.js +108 -0
  490. package/dist/native-transcript-cursor.js.map +1 -0
  491. package/dist/native-transcript-stream.d.ts +20 -0
  492. package/dist/native-transcript-stream.d.ts.map +1 -0
  493. package/dist/native-transcript-stream.js +438 -0
  494. package/dist/native-transcript-stream.js.map +1 -0
  495. package/dist/network-diagnostics.d.ts +8 -0
  496. package/dist/network-diagnostics.d.ts.map +1 -0
  497. package/dist/network-diagnostics.js +56 -0
  498. package/dist/network-diagnostics.js.map +1 -0
  499. package/dist/observable-map.d.ts +13 -0
  500. package/dist/observable-map.d.ts.map +1 -0
  501. package/dist/observable-map.js +30 -0
  502. package/dist/observable-map.js.map +1 -0
  503. package/dist/provider-auth-preflight.d.ts +19 -0
  504. package/dist/provider-auth-preflight.d.ts.map +1 -0
  505. package/dist/provider-auth-preflight.js +107 -0
  506. package/dist/provider-auth-preflight.js.map +1 -0
  507. package/dist/provider-model-discovery.d.ts +33 -0
  508. package/dist/provider-model-discovery.d.ts.map +1 -0
  509. package/dist/provider-model-discovery.js +731 -0
  510. package/dist/provider-model-discovery.js.map +1 -0
  511. package/dist/resource-diagnostics.d.ts +21 -0
  512. package/dist/resource-diagnostics.d.ts.map +1 -0
  513. package/dist/resource-diagnostics.js +161 -0
  514. package/dist/resource-diagnostics.js.map +1 -0
  515. package/dist/resume-fallback-env.d.ts +3 -0
  516. package/dist/resume-fallback-env.d.ts.map +1 -0
  517. package/dist/resume-fallback-env.js +14 -0
  518. package/dist/resume-fallback-env.js.map +1 -0
  519. package/dist/run-journal.d.ts +51 -0
  520. package/dist/run-journal.d.ts.map +1 -0
  521. package/dist/run-journal.js +193 -0
  522. package/dist/run-journal.js.map +1 -0
  523. package/dist/runtime-backends.d.ts +2 -0
  524. package/dist/runtime-backends.d.ts.map +1 -0
  525. package/dist/runtime-backends.js +2 -0
  526. package/dist/runtime-backends.js.map +1 -0
  527. package/dist/runtime-capabilities-sync.d.ts +40 -0
  528. package/dist/runtime-capabilities-sync.d.ts.map +1 -0
  529. package/dist/runtime-capabilities-sync.js +56 -0
  530. package/dist/runtime-capabilities-sync.js.map +1 -0
  531. package/dist/runtime-config.d.ts +26 -0
  532. package/dist/runtime-config.d.ts.map +1 -0
  533. package/dist/runtime-config.js +170 -0
  534. package/dist/runtime-config.js.map +1 -0
  535. package/dist/runtime-presenter.d.ts +81 -0
  536. package/dist/runtime-presenter.d.ts.map +1 -0
  537. package/dist/runtime-presenter.js +422 -0
  538. package/dist/runtime-presenter.js.map +1 -0
  539. package/dist/runtime-registration.d.ts +40 -0
  540. package/dist/runtime-registration.d.ts.map +1 -0
  541. package/dist/runtime-registration.js +143 -0
  542. package/dist/runtime-registration.js.map +1 -0
  543. package/dist/sandbox-outbox-storage.d.ts +13 -0
  544. package/dist/sandbox-outbox-storage.d.ts.map +1 -0
  545. package/dist/sandbox-outbox-storage.js +98 -0
  546. package/dist/sandbox-outbox-storage.js.map +1 -0
  547. package/dist/sandbox-outbox.d.ts +115 -0
  548. package/dist/sandbox-outbox.d.ts.map +1 -0
  549. package/dist/sandbox-outbox.js +213 -0
  550. package/dist/sandbox-outbox.js.map +1 -0
  551. package/dist/sandbox.d.ts +34 -0
  552. package/dist/sandbox.d.ts.map +1 -0
  553. package/dist/sandbox.js +469 -0
  554. package/dist/sandbox.js.map +1 -0
  555. package/dist/service-manager.d.ts +113 -0
  556. package/dist/service-manager.d.ts.map +1 -0
  557. package/dist/service-manager.js +1065 -0
  558. package/dist/service-manager.js.map +1 -0
  559. package/dist/skills/__tests__/local-skill-source.test.d.ts +2 -0
  560. package/dist/skills/__tests__/local-skill-source.test.d.ts.map +1 -0
  561. package/dist/skills/__tests__/local-skill-source.test.js +373 -0
  562. package/dist/skills/__tests__/local-skill-source.test.js.map +1 -0
  563. package/dist/skills/__tests__/managed-skill-store.test.d.ts +2 -0
  564. package/dist/skills/__tests__/managed-skill-store.test.d.ts.map +1 -0
  565. package/dist/skills/__tests__/managed-skill-store.test.js +114 -0
  566. package/dist/skills/__tests__/managed-skill-store.test.js.map +1 -0
  567. package/dist/skills/__tests__/runtime-skill-coordinator.test.d.ts +2 -0
  568. package/dist/skills/__tests__/runtime-skill-coordinator.test.d.ts.map +1 -0
  569. package/dist/skills/__tests__/runtime-skill-coordinator.test.js +251 -0
  570. package/dist/skills/__tests__/runtime-skill-coordinator.test.js.map +1 -0
  571. package/dist/skills/__tests__/runtime-skill-manager.test.d.ts +2 -0
  572. package/dist/skills/__tests__/runtime-skill-manager.test.d.ts.map +1 -0
  573. package/dist/skills/__tests__/runtime-skill-manager.test.js +664 -0
  574. package/dist/skills/__tests__/runtime-skill-manager.test.js.map +1 -0
  575. package/dist/skills/__tests__/skill-bundle.test.d.ts +2 -0
  576. package/dist/skills/__tests__/skill-bundle.test.d.ts.map +1 -0
  577. package/dist/skills/__tests__/skill-bundle.test.js +42 -0
  578. package/dist/skills/__tests__/skill-bundle.test.js.map +1 -0
  579. package/dist/skills/__tests__/skill-control-client.test.d.ts +2 -0
  580. package/dist/skills/__tests__/skill-control-client.test.d.ts.map +1 -0
  581. package/dist/skills/__tests__/skill-control-client.test.js +49 -0
  582. package/dist/skills/__tests__/skill-control-client.test.js.map +1 -0
  583. package/dist/skills/__tests__/skill-source-config.test.d.ts +2 -0
  584. package/dist/skills/__tests__/skill-source-config.test.d.ts.map +1 -0
  585. package/dist/skills/__tests__/skill-source-config.test.js +295 -0
  586. package/dist/skills/__tests__/skill-source-config.test.js.map +1 -0
  587. package/dist/skills/local-skill-source.d.ts +77 -0
  588. package/dist/skills/local-skill-source.d.ts.map +1 -0
  589. package/dist/skills/local-skill-source.js +660 -0
  590. package/dist/skills/local-skill-source.js.map +1 -0
  591. package/dist/skills/managed-skill-store.d.ts +44 -0
  592. package/dist/skills/managed-skill-store.d.ts.map +1 -0
  593. package/dist/skills/managed-skill-store.js +160 -0
  594. package/dist/skills/managed-skill-store.js.map +1 -0
  595. package/dist/skills/runtime-skill-coordinator.d.ts +35 -0
  596. package/dist/skills/runtime-skill-coordinator.d.ts.map +1 -0
  597. package/dist/skills/runtime-skill-coordinator.js +166 -0
  598. package/dist/skills/runtime-skill-coordinator.js.map +1 -0
  599. package/dist/skills/runtime-skill-manager.d.ts +89 -0
  600. package/dist/skills/runtime-skill-manager.d.ts.map +1 -0
  601. package/dist/skills/runtime-skill-manager.js +934 -0
  602. package/dist/skills/runtime-skill-manager.js.map +1 -0
  603. package/dist/skills/skill-bundle.d.ts +2 -0
  604. package/dist/skills/skill-bundle.d.ts.map +1 -0
  605. package/dist/skills/skill-bundle.js +2 -0
  606. package/dist/skills/skill-bundle.js.map +1 -0
  607. package/dist/skills/skill-cli.d.ts +2 -0
  608. package/dist/skills/skill-cli.d.ts.map +1 -0
  609. package/dist/skills/skill-cli.js +81 -0
  610. package/dist/skills/skill-cli.js.map +1 -0
  611. package/dist/skills/skill-control-client.d.ts +20 -0
  612. package/dist/skills/skill-control-client.d.ts.map +1 -0
  613. package/dist/skills/skill-control-client.js +56 -0
  614. package/dist/skills/skill-control-client.js.map +1 -0
  615. package/dist/skills/skill-invocation.d.ts +10 -0
  616. package/dist/skills/skill-invocation.d.ts.map +1 -0
  617. package/dist/skills/skill-invocation.js +24 -0
  618. package/dist/skills/skill-invocation.js.map +1 -0
  619. package/dist/sleep-inhibitor.d.ts +32 -0
  620. package/dist/sleep-inhibitor.d.ts.map +1 -0
  621. package/dist/sleep-inhibitor.js +297 -0
  622. package/dist/sleep-inhibitor.js.map +1 -0
  623. package/dist/suspension-detector.d.ts +24 -0
  624. package/dist/suspension-detector.d.ts.map +1 -0
  625. package/dist/suspension-detector.js +59 -0
  626. package/dist/suspension-detector.js.map +1 -0
  627. package/dist/types.d.ts +2 -0
  628. package/dist/types.d.ts.map +1 -0
  629. package/dist/types.js +2 -0
  630. package/dist/types.js.map +1 -0
  631. package/dist/version.d.ts +2 -0
  632. package/dist/version.d.ts.map +1 -0
  633. package/dist/version.js +2 -0
  634. package/dist/version.js.map +1 -0
  635. package/dist/web-presenter.d.ts +52 -0
  636. package/dist/web-presenter.d.ts.map +1 -0
  637. package/dist/web-presenter.js +264 -0
  638. package/dist/web-presenter.js.map +1 -0
  639. package/dist/workspace-relocation.d.ts +22 -0
  640. package/dist/workspace-relocation.d.ts.map +1 -0
  641. package/dist/workspace-relocation.js +90 -0
  642. package/dist/workspace-relocation.js.map +1 -0
  643. package/dist/workspace-rpc.d.ts +2 -0
  644. package/dist/workspace-rpc.d.ts.map +1 -0
  645. package/dist/workspace-rpc.js +15 -0
  646. package/dist/workspace-rpc.js.map +1 -0
  647. package/dist/workspace-run-lease.d.ts +116 -0
  648. package/dist/workspace-run-lease.d.ts.map +1 -0
  649. package/dist/workspace-run-lease.js +320 -0
  650. package/dist/workspace-run-lease.js.map +1 -0
  651. package/dist/ws-client.d.ts +168 -0
  652. package/dist/ws-client.d.ts.map +1 -0
  653. package/dist/ws-client.js +440 -0
  654. package/dist/ws-client.js.map +1 -0
  655. package/package.json +4 -3
@@ -0,0 +1,731 @@
1
+ import { readFileSync, realpathSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { AVAILABLE_MODELS, isEffortLevel, isOpenCodeProviderKind, normalizeDiscoveredModelVariants, OPENCODE_ZEN_MODELS, PROVIDER_MODELS, } from "@alan-ai/shared/frontend";
5
+ import { collapseCursorDiscoveredModelIds } from "@alan-ai/shared/runtime-discovered-models";
6
+ import { runCliProbeAsync } from "./cli-executable.js";
7
+ export const MODEL_DISCOVERY_TIMEOUT_MS = 8_000;
8
+ const ANTIGRAVITY_MODEL_DISCOVERY_TIMEOUT_MS = 12_000;
9
+ const OPENCODE_ZEN_MODEL_IDS = OPENCODE_ZEN_MODELS.map((model) => model.id);
10
+ /** Static billing fallback for Zen ids when a failed scan carries no live cost data. */
11
+ const OPENCODE_ZEN_STATIC_BILLING = new Map(OPENCODE_ZEN_MODELS.filter((model) => model.billing).map((model) => [model.id, model.billing]));
12
+ const CLAUDE_MODEL_ID_PATTERN = /claude-(?:sonnet|opus|haiku|fable)-[a-z0-9][a-z0-9-]*/g;
13
+ const CLAUDE_MODEL_ALIASES = ["sonnet", "opus", "haiku", "fable"];
14
+ const CLAUDE_MODEL_ALIAS_SET = new Set(CLAUDE_MODEL_ALIASES);
15
+ // Reject unknown alphabetic Claude id segments; scrape regex matched internal codenames like mythos.
16
+ const CLAUDE_MODEL_QUALIFIER_SEGMENTS = new Set(["fast", "thinking", "latest", "preview"]);
17
+ const PROTECTED_CATALOG_MODEL_IDS = new Set(AVAILABLE_MODELS.map((model) => model.id).filter((id) => id.length > 0));
18
+ const CATALOG_MODEL_IDS_BY_PROVIDER = Object.fromEntries(Object.entries(PROVIDER_MODELS).map(([provider, models]) => [
19
+ provider,
20
+ models.map((model) => model.id),
21
+ ]));
22
+ function readModelId(value) {
23
+ if (typeof value === "string") {
24
+ const trimmed = value.trim();
25
+ return trimmed.length > 0 ? trimmed : null;
26
+ }
27
+ if (!value || typeof value !== "object")
28
+ return null;
29
+ const record = value;
30
+ return (readModelId(record.slug) ??
31
+ readModelId(record.id) ??
32
+ readModelId(record.model) ??
33
+ readModelId(record.name) ??
34
+ readModelId(record.value));
35
+ }
36
+ export function extractModelIdsFromJson(value) {
37
+ if (Array.isArray(value)) {
38
+ return [...new Set(value.map(readModelId).filter((model) => Boolean(model)))];
39
+ }
40
+ if (!value || typeof value !== "object")
41
+ return [];
42
+ const record = value;
43
+ for (const key of ["models", "data", "items"]) {
44
+ const nested = extractModelIdsFromJson(record[key]);
45
+ if (nested.length > 0)
46
+ return nested;
47
+ }
48
+ const byProvider = record.opencode ?? record.providers;
49
+ if (byProvider) {
50
+ const nested = extractModelIdsFromJson(byProvider);
51
+ if (nested.length > 0)
52
+ return nested;
53
+ }
54
+ return [];
55
+ }
56
+ export function extractCodexModelSlugsFromDebugJson(value) {
57
+ if (!value || typeof value !== "object")
58
+ return [];
59
+ const models = value.models;
60
+ if (!Array.isArray(models))
61
+ return [];
62
+ const slugs = [];
63
+ for (const entry of models) {
64
+ if (!entry || typeof entry !== "object")
65
+ continue;
66
+ const record = entry;
67
+ const visibility = typeof record.visibility === "string" ? record.visibility.toLowerCase() : "list";
68
+ if (visibility === "hidden" || visibility === "hide")
69
+ continue;
70
+ const slug = readModelId(record.slug);
71
+ if (slug)
72
+ slugs.push(slug);
73
+ }
74
+ return [...new Set(slugs)];
75
+ }
76
+ function normalizeCodexReasoningEffort(effort) {
77
+ const normalized = effort.trim().toLowerCase();
78
+ if (!normalized)
79
+ return null;
80
+ // Codex/OpenAI use `none`; Alan's picker label is `minimal`.
81
+ if (normalized === "none")
82
+ return "minimal";
83
+ return isEffortLevel(normalized) ? normalized : null;
84
+ }
85
+ export function extractCodexDiscoveredModelIdsFromDebugJson(value) {
86
+ if (!value || typeof value !== "object")
87
+ return [];
88
+ const models = value.models;
89
+ if (!Array.isArray(models))
90
+ return [];
91
+ const ids = [];
92
+ for (const entry of models) {
93
+ if (!entry || typeof entry !== "object")
94
+ continue;
95
+ const record = entry;
96
+ const visibility = typeof record.visibility === "string" ? record.visibility.toLowerCase() : "list";
97
+ if (visibility === "hidden" || visibility === "hide")
98
+ continue;
99
+ const slug = readModelId(record.slug);
100
+ if (!slug)
101
+ continue;
102
+ const reasoningLevels = record.supported_reasoning_levels;
103
+ if (Array.isArray(reasoningLevels) && reasoningLevels.length > 0) {
104
+ for (const levelEntry of reasoningLevels) {
105
+ if (!levelEntry || typeof levelEntry !== "object")
106
+ continue;
107
+ const effort = typeof levelEntry.effort === "string"
108
+ ? levelEntry.effort
109
+ : null;
110
+ const normalized = effort ? normalizeCodexReasoningEffort(effort) : null;
111
+ if (normalized)
112
+ ids.push(`${slug}-${normalized}`);
113
+ }
114
+ continue;
115
+ }
116
+ ids.push(slug);
117
+ }
118
+ return [...new Set(ids)];
119
+ }
120
+ // OpenRouter ids need multi-slash pattern; single-slash regex dropped z-ai/glm-4.6 models.
121
+ const OPENCODE_MODEL_ID_LINE_PATTERN = /^[a-z0-9][\w.-]*(?:\/[\w.-]+)+$/i;
122
+ function parseOpenCodeVerboseModelOutput(text) {
123
+ const entries = [];
124
+ const lines = text.split(/\r?\n/);
125
+ let i = 0;
126
+ while (i < lines.length) {
127
+ const line = (lines[i] ?? "").trim();
128
+ i += 1;
129
+ if (!OPENCODE_MODEL_ID_LINE_PATTERN.test(line))
130
+ continue;
131
+ let jsonStart = i;
132
+ while (jsonStart < lines.length && (lines[jsonStart] ?? "").trim() === "")
133
+ jsonStart += 1;
134
+ if (jsonStart >= lines.length || !(lines[jsonStart] ?? "").trim().startsWith("{"))
135
+ continue;
136
+ let depth = 0;
137
+ let inString = false;
138
+ let escaped = false;
139
+ let endLineIdx = -1;
140
+ let buffer = "";
141
+ for (let j = jsonStart; j < lines.length; j += 1) {
142
+ const raw = lines[j] ?? "";
143
+ buffer += (buffer ? "\n" : "") + raw;
144
+ for (const ch of raw) {
145
+ if (escaped) {
146
+ escaped = false;
147
+ continue;
148
+ }
149
+ if (ch === "\\" && inString) {
150
+ escaped = true;
151
+ continue;
152
+ }
153
+ if (ch === '"') {
154
+ inString = !inString;
155
+ continue;
156
+ }
157
+ if (inString)
158
+ continue;
159
+ if (ch === "{")
160
+ depth += 1;
161
+ else if (ch === "}")
162
+ depth -= 1;
163
+ }
164
+ if (depth === 0) {
165
+ endLineIdx = j;
166
+ break;
167
+ }
168
+ }
169
+ if (endLineIdx === -1)
170
+ break; // truncated/malformed tail — stop parsing safely
171
+ try {
172
+ const obj = JSON.parse(buffer);
173
+ const inputCost = obj.cost?.input;
174
+ const outputCost = obj.cost?.output;
175
+ const hasNumericCost = typeof inputCost === "number" || typeof outputCost === "number";
176
+ entries.push({
177
+ id: line,
178
+ reasoning: obj.capabilities?.reasoning === true,
179
+ variants: obj.variants ? Object.keys(obj.variants) : [],
180
+ ...(hasNumericCost
181
+ ? {
182
+ billing: inputCost === 0 && outputCost === 0 ? "free" : "paid",
183
+ }
184
+ : {}),
185
+ });
186
+ }
187
+ catch {
188
+ // Skip this one malformed entry; keep scanning the rest of the stream.
189
+ }
190
+ i = endLineIdx + 1;
191
+ }
192
+ return entries;
193
+ }
194
+ export function extractOpenCodeModelCapabilitiesFromVerboseOutput(text) {
195
+ return openCodeCapabilitiesFromEntries(parseOpenCodeVerboseModelOutput(text));
196
+ }
197
+ function openCodeCapabilitiesFromEntries(entries) {
198
+ return entries.map((entry) => ({
199
+ id: entry.id,
200
+ variants: entry.reasoning ? normalizeDiscoveredModelVariants(entry.variants) : [],
201
+ }));
202
+ }
203
+ export function extractOpenCodeModelBillingFromVerboseOutput(text) {
204
+ return openCodeBillingFromEntries(parseOpenCodeVerboseModelOutput(text));
205
+ }
206
+ function openCodeBillingFromEntries(entries) {
207
+ const billing = {};
208
+ for (const entry of entries) {
209
+ if (entry.billing)
210
+ billing[entry.id] = entry.billing;
211
+ }
212
+ return billing;
213
+ }
214
+ // Variants stay in modelVariants, not id suffixes — OpenCode names do not match Alan's effort scale.
215
+ export function extractOpenCodeDiscoveredModelIdsFromVerboseOutput(text) {
216
+ return [...new Set(extractOpenCodeModelCapabilitiesFromVerboseOutput(text).map(({ id }) => id))];
217
+ }
218
+ export function extractModelIdsFromText(value) {
219
+ const ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
220
+ const ignoredLinePattern = /^(available models|models|usage|error|flag provided|try |agy\b|warning:)/i;
221
+ const ids = value
222
+ .split(/\r?\n/)
223
+ .map((line) => line
224
+ .replace(ansiPattern, "")
225
+ .replace(/^[-*•]\s*/, "")
226
+ .trim())
227
+ .filter((line) => line.length > 0 && !ignoredLinePattern.test(line));
228
+ return [...new Set(ids)];
229
+ }
230
+ export function extractModelIdsFromLabeledList(value) {
231
+ const ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
232
+ const ignoredLinePattern = /^(available models|fetching available models|models|usage|error|warning:)/i;
233
+ const ids = [];
234
+ for (const rawLine of value.split(/\r?\n/)) {
235
+ const line = rawLine.replace(ansiPattern, "").trim();
236
+ if (!line || ignoredLinePattern.test(line))
237
+ continue;
238
+ const dashIdx = line.indexOf(" - ");
239
+ const tabIdx = line.indexOf("\t");
240
+ const separatorIndexes = [dashIdx, tabIdx].filter((index) => index >= 0);
241
+ const separatorIdx = separatorIndexes.length > 0 ? Math.min(...separatorIndexes) : -1;
242
+ if (separatorIdx < 0)
243
+ continue;
244
+ const id = line.slice(0, separatorIdx).trim();
245
+ if (id)
246
+ ids.push(id);
247
+ }
248
+ return [...new Set(ids)];
249
+ }
250
+ export function isValidClaudeModelId(id) {
251
+ if (CLAUDE_MODEL_ALIAS_SET.has(id))
252
+ return true;
253
+ const match = id.match(/^claude-(sonnet|opus|haiku|fable)-([a-z0-9][a-z0-9-]*)$/);
254
+ if (!match)
255
+ return false;
256
+ if (id.includes("."))
257
+ return false;
258
+ if (/-\d{8}$/.test(id))
259
+ return false;
260
+ if (/-v\d+$/.test(id))
261
+ return false;
262
+ // Every segment after the family token must be a version number or a known qualifier.
263
+ // An unknown alphabetic segment (e.g. "mythos") is an internal binary codename that the
264
+ // greedy scrape regex ran into, not a real model id.
265
+ for (const segment of match[2].split("-")) {
266
+ if (/^\d+$/.test(segment))
267
+ continue;
268
+ if (CLAUDE_MODEL_QUALIFIER_SEGMENTS.has(segment))
269
+ continue;
270
+ return false;
271
+ }
272
+ return true;
273
+ }
274
+ export function filterClaudePrefixModelIds(ids) {
275
+ const set = new Set(ids);
276
+ return ids.filter((id) => {
277
+ // A curated catalogue id is never evicted by a longer scraped sibling — defense in
278
+ // depth so a future internal codename can't hide a real, shipped model.
279
+ if (PROTECTED_CATALOG_MODEL_IDS.has(id))
280
+ return true;
281
+ for (const other of set) {
282
+ if (other !== id && other.startsWith(`${id}-`))
283
+ return false;
284
+ }
285
+ return true;
286
+ });
287
+ }
288
+ export function filterClaudeDatedModelIds(ids) {
289
+ const set = new Set(ids);
290
+ return ids.filter((id) => {
291
+ const dated = id.match(/^(claude-(?:sonnet|opus|haiku|fable)-[a-z0-9][a-z0-9-]*)-\d{8}$/);
292
+ if (!dated)
293
+ return true;
294
+ return !set.has(dated[1]);
295
+ });
296
+ }
297
+ function resolveExecutableForModelScan(executable) {
298
+ try {
299
+ return realpathSync(executable);
300
+ }
301
+ catch {
302
+ return executable;
303
+ }
304
+ }
305
+ export function extractClaudeModelIdsFromExecutable(executable) {
306
+ try {
307
+ const resolved = resolveExecutableForModelScan(executable);
308
+ const text = readFileSync(resolved).toString("latin1");
309
+ const matches = text.match(CLAUDE_MODEL_ID_PATTERN) ?? [];
310
+ const unique = [
311
+ ...new Set(matches.map((id) => id.trim()).filter((id) => isValidClaudeModelId(id))),
312
+ ...CLAUDE_MODEL_ALIASES,
313
+ ];
314
+ return filterClaudeDatedModelIds(filterClaudePrefixModelIds(unique));
315
+ }
316
+ catch {
317
+ return [];
318
+ }
319
+ }
320
+ export function getCatalogModelIds(provider) {
321
+ const catalogProvider = provider === "opencode_serve" ? "opencode_cli" : provider;
322
+ return [...(CATALOG_MODEL_IDS_BY_PROVIDER[catalogProvider] ?? [])];
323
+ }
324
+ function withModelProbeEnv(env) {
325
+ const term = env.TERM;
326
+ if (term && term !== "dumb")
327
+ return env;
328
+ return { ...env, TERM: "xterm-256color" };
329
+ }
330
+ async function probeJsonOrTextModels(executable, env, argSets, options) {
331
+ const probeEnv = withModelProbeEnv(env);
332
+ const timeoutMs = options?.timeoutMs ?? MODEL_DISCOVERY_TIMEOUT_MS;
333
+ for (const args of argSets) {
334
+ const result = await runCliProbeAsync(executable, probeEnv, args, timeoutMs, options?.closeStdin || options?.maxOutputChars
335
+ ? { closeStdin: options?.closeStdin, maxOutputChars: options?.maxOutputChars }
336
+ : undefined);
337
+ if (!result || result.error || result.status !== 0 || !result.stdout.trim())
338
+ continue;
339
+ try {
340
+ const parsed = JSON.parse(result.stdout);
341
+ const codexModels = extractCodexDiscoveredModelIdsFromDebugJson(parsed);
342
+ if (codexModels.length > 0)
343
+ return codexModels;
344
+ const models = extractModelIdsFromJson(parsed);
345
+ if (models.length > 0)
346
+ return models;
347
+ }
348
+ catch {
349
+ // A capped JSON response is incomplete, not a single model id.
350
+ if (/^\s*[{[]/.test(result.stdout))
351
+ continue;
352
+ const labeled = extractModelIdsFromLabeledList(result.stdout);
353
+ if (labeled.length > 0)
354
+ return labeled;
355
+ const models = extractModelIdsFromText(result.stdout);
356
+ if (models.length > 0)
357
+ return models;
358
+ }
359
+ }
360
+ return [];
361
+ }
362
+ const OPENCODE_ZEN_MODELS_URL = "https://opencode.ai/zen/v1/models";
363
+ const ZEN_ENTITLEMENT_TIMEOUT_MS = 5_000;
364
+ /** Only the Zen slice is entitlement-checkable; `opencode-go/` and BYOK ids are not. */
365
+ const OPENCODE_ZEN_ID_PREFIX = "opencode/";
366
+ export function readOpenCodeZenCredential(env) {
367
+ const direct = env.OPENCODE_API_KEY?.trim();
368
+ if (direct)
369
+ return direct;
370
+ return readZenCredentialFromAuthDocument(readOpenCodeAuthDocument(env) ?? undefined);
371
+ }
372
+ function readOpenCodeAuthDocument(env) {
373
+ const injected = env.OPENCODE_AUTH_CONTENT?.trim();
374
+ if (injected)
375
+ return injected;
376
+ const dataHome = env.XDG_DATA_HOME?.trim() || join(homedir(), ".local", "share");
377
+ try {
378
+ return readFileSync(join(dataHome, "opencode", "auth.json"), "utf8");
379
+ }
380
+ catch {
381
+ return null;
382
+ }
383
+ }
384
+ // Explicit keys only — ambient AWS/GCP chains listed Bedrock models the user never configured.
385
+ const OPENCODE_PROVIDER_ENV_KEYS = [
386
+ ["OPENROUTER_API_KEY", "openrouter"],
387
+ ["ANTHROPIC_API_KEY", "anthropic"],
388
+ ["OPENAI_API_KEY", "openai"],
389
+ ["GEMINI_API_KEY", "google"],
390
+ ["GOOGLE_GENERATIVE_AI_API_KEY", "google"],
391
+ ["XAI_API_KEY", "xai"],
392
+ ["GROQ_API_KEY", "groq"],
393
+ ["MISTRAL_API_KEY", "mistral"],
394
+ ["DEEPSEEK_API_KEY", "deepseek"],
395
+ ];
396
+ export function readConfiguredOpenCodeProviders(env) {
397
+ const configured = new Set(["opencode", "opencode-go"]);
398
+ const document = readOpenCodeAuthDocument(env);
399
+ if (document) {
400
+ try {
401
+ const parsed = JSON.parse(document);
402
+ if (parsed && typeof parsed === "object") {
403
+ for (const providerId of Object.keys(parsed))
404
+ configured.add(providerId);
405
+ }
406
+ }
407
+ catch {
408
+ // Unreadable document contributes nothing; env keys below still apply.
409
+ }
410
+ }
411
+ for (const [envKey, namespace] of OPENCODE_PROVIDER_ENV_KEYS) {
412
+ if (env[envKey]?.trim())
413
+ configured.add(namespace);
414
+ }
415
+ return configured;
416
+ }
417
+ function readZenCredentialFromAuthDocument(content) {
418
+ const trimmed = content?.trim();
419
+ if (!trimmed)
420
+ return null;
421
+ try {
422
+ const entry = JSON.parse(trimmed).opencode;
423
+ if (!entry || typeof entry !== "object")
424
+ return null;
425
+ const { key, access } = entry;
426
+ for (const candidate of [key, access]) {
427
+ if (typeof candidate === "string" && candidate.trim())
428
+ return candidate.trim();
429
+ }
430
+ return null;
431
+ }
432
+ catch {
433
+ return null;
434
+ }
435
+ }
436
+ // Zen /models is per-key entitlement; null on failure keeps the unfiltered scan.
437
+ async function fetchZenEntitledModelIds(credential) {
438
+ try {
439
+ const response = await fetch(OPENCODE_ZEN_MODELS_URL, {
440
+ headers: credential ? { Authorization: `Bearer ${credential}` } : {},
441
+ signal: AbortSignal.timeout(ZEN_ENTITLEMENT_TIMEOUT_MS),
442
+ });
443
+ if (!response.ok)
444
+ return null;
445
+ const data = (await response.json())?.data;
446
+ if (!Array.isArray(data))
447
+ return null;
448
+ const ids = data
449
+ .map((entry) => entry?.id)
450
+ .filter((id) => typeof id === "string" && id.length > 0);
451
+ return ids.length > 0 ? new Set(ids) : null;
452
+ }
453
+ catch {
454
+ return null;
455
+ }
456
+ }
457
+ // Filter Zen ids to entitlement; add entitled ids missing from verbose scan (e.g. laguna-s-2.1-free).
458
+ export function applyZenEntitlement(discovery, entitled) {
459
+ const zenId = (id) => `${OPENCODE_ZEN_ID_PREFIX}${id}`;
460
+ const kept = discovery.models.filter((id) => !id.startsWith(OPENCODE_ZEN_ID_PREFIX) ||
461
+ entitled.has(id.slice(OPENCODE_ZEN_ID_PREFIX.length)));
462
+ const keptSet = new Set(kept);
463
+ const scannedSet = new Set(discovery.models);
464
+ const unscannedEntitled = [...entitled].map(zenId);
465
+ return {
466
+ ...discovery,
467
+ models: [...kept, ...unscannedEntitled.filter((id) => !keptSet.has(id))],
468
+ catalogModels: [
469
+ ...(discovery.catalogModels ?? discovery.models),
470
+ ...unscannedEntitled.filter((id) => !scannedSet.has(id)),
471
+ ],
472
+ };
473
+ }
474
+ const OPENCODE_CATALOGUE_CACHE_SEGMENTS = ["opencode", "models.json"];
475
+ /** Cache provider keys whose models map onto Alan's `<provider>/<model>` ids. */
476
+ const OPENCODE_CACHE_PROVIDER_KEYS = ["opencode", "opencode-go"];
477
+ // Hydrate from ~/.cache/opencode/models.json; skip empty variant lists (budget_tokens models).
478
+ function readOpenCodeCatalogueCache(env) {
479
+ const cacheHome = env.XDG_CACHE_HOME?.trim() || join(homedir(), ".cache");
480
+ let parsed;
481
+ try {
482
+ parsed = JSON.parse(readFileSync(join(cacheHome, ...OPENCODE_CATALOGUE_CACHE_SEGMENTS), "utf8"));
483
+ }
484
+ catch {
485
+ return null;
486
+ }
487
+ if (!parsed || typeof parsed !== "object")
488
+ return null;
489
+ const variants = {};
490
+ const billing = {};
491
+ const deprecated = new Set();
492
+ for (const providerKey of OPENCODE_CACHE_PROVIDER_KEYS) {
493
+ const models = parsed[providerKey]?.models;
494
+ if (!models || typeof models !== "object")
495
+ continue;
496
+ for (const [modelId, entry] of Object.entries(models)) {
497
+ if (!entry || typeof entry !== "object")
498
+ continue;
499
+ const id = `${providerKey}/${modelId}`;
500
+ const record = entry;
501
+ if (record.status === "deprecated")
502
+ deprecated.add(id);
503
+ const options = Array.isArray(record.reasoning_options) ? record.reasoning_options : [];
504
+ const effort = options.find((option) => option?.type === "effort");
505
+ const values = Array.isArray(effort?.values)
506
+ ? effort.values.filter((value) => typeof value === "string")
507
+ : [];
508
+ if (values.length > 0)
509
+ variants[id] = values;
510
+ const cost = record.cost;
511
+ if (typeof cost?.input === "number" && typeof cost?.output === "number") {
512
+ billing[id] = cost.input === 0 && cost.output === 0 ? "free" : "paid";
513
+ }
514
+ }
515
+ }
516
+ return Object.keys(variants).length > 0 || Object.keys(billing).length > 0
517
+ ? { variants, billing, deprecated }
518
+ : null;
519
+ }
520
+ function hydrateOpenCodeMetadata(discovery, cache) {
521
+ const ids = new Set([...discovery.models, ...(discovery.catalogModels ?? [])]);
522
+ const modelVariants = { ...discovery.modelVariants };
523
+ const modelBilling = { ...discovery.modelBilling };
524
+ for (const id of ids) {
525
+ if (!Object.hasOwn(modelVariants, id) && cache.variants[id]) {
526
+ modelVariants[id] = cache.variants[id];
527
+ }
528
+ if (!Object.hasOwn(modelBilling, id) && cache.billing[id]) {
529
+ modelBilling[id] = cache.billing[id];
530
+ }
531
+ }
532
+ return {
533
+ ...discovery,
534
+ ...(Object.keys(modelVariants).length > 0 ? { modelVariants } : {}),
535
+ ...(Object.keys(modelBilling).length > 0 ? { modelBilling } : {}),
536
+ };
537
+ }
538
+ async function discoverOpenCodeModels(executable, env) {
539
+ const credential = readOpenCodeZenCredential(env);
540
+ const [rawScan, entitled] = await Promise.all([
541
+ scanOpenCodeModels(executable, env),
542
+ fetchZenEntitledModelIds(credential),
543
+ ]);
544
+ // Providers the user never configured inside OpenCode (ambient AWS chain → Bedrock)
545
+ // are cut before anything downstream sees them, catalogue feed included.
546
+ const configured = readConfiguredOpenCodeProviders(env);
547
+ const inConfigured = (id) => {
548
+ const slash = id.indexOf("/");
549
+ return slash > 0 && configured.has(id.slice(0, slash));
550
+ };
551
+ const scanned = {
552
+ ...rawScan,
553
+ models: rawScan.models.filter(inConfigured),
554
+ ...(rawScan.catalogModels ? { catalogModels: rawScan.catalogModels.filter(inConfigured) } : {}),
555
+ };
556
+ const filtered = entitled ? applyZenEntitlement(scanned, entitled) : scanned;
557
+ // After the scan, never before: running it is what refreshes the cache file.
558
+ const cache = readOpenCodeCatalogueCache(env);
559
+ const hydrated = cache ? hydrateOpenCodeMetadata(filtered, cache) : filtered;
560
+ // Hide deprecated Zen ids except entitled ones (laguna-s-2.1-free still dispatches).
561
+ const keyEntitled = credential && entitled ? entitled : null;
562
+ const withoutDeprecated = cache
563
+ ? hydrated.models.filter((id) => !cache.deprecated.has(id) ||
564
+ (keyEntitled !== null &&
565
+ id.startsWith(OPENCODE_ZEN_ID_PREFIX) &&
566
+ keyEntitled.has(id.slice(OPENCODE_ZEN_ID_PREFIX.length))))
567
+ : hydrated.models;
568
+ return {
569
+ ...hydrated,
570
+ models: credential
571
+ ? withoutDeprecated
572
+ : filterZenToFreeModels(withoutDeprecated, hydrated.modelBilling),
573
+ };
574
+ }
575
+ // No credential: offer only free Zen ids; unknown billing is dropped, not guessed.
576
+ function filterZenToFreeModels(models, billing) {
577
+ return models.filter((id) => {
578
+ if (!id.startsWith("opencode/") && !id.startsWith("opencode-go/"))
579
+ return true;
580
+ return (billing?.[id] ?? OPENCODE_ZEN_STATIC_BILLING.get(id)) === "free";
581
+ });
582
+ }
583
+ async function scanOpenCodeModels(executable, env) {
584
+ // Real command (verified live): `opencode models --verbose` prints per-model
585
+ // reasoning/variant capability — see extractOpenCodeModelCapabilitiesFromVerboseOutput.
586
+ // `--json`/`list --json` variants below are NOT real opencode flags (they exit 1 with
587
+ // opencode's own --help text); kept only as a last-resort probe in case some other
588
+ // OpenCode-compatible CLI build genuinely supports them.
589
+ const verbose = await runCliProbeAsync(executable, withModelProbeEnv(env), ["models", "--verbose"], MODEL_DISCOVERY_TIMEOUT_MS);
590
+ if (verbose && !verbose.error && verbose.status === 0 && verbose.stdout.trim()) {
591
+ const entries = parseOpenCodeVerboseModelOutput(verbose.stdout);
592
+ const modelCapabilities = openCodeCapabilitiesFromEntries(entries);
593
+ if (modelCapabilities.length > 0) {
594
+ const modelBilling = openCodeBillingFromEntries(entries);
595
+ return {
596
+ models: modelCapabilities.map(({ id }) => id),
597
+ modelVariants: Object.fromEntries(modelCapabilities.map(({ id, variants }) => [id, variants])),
598
+ ...(Object.keys(modelBilling).length > 0 ? { modelBilling } : {}),
599
+ };
600
+ }
601
+ }
602
+ const plain = await probeJsonOrTextModels(executable, env, [["models"]]);
603
+ if (plain.length > 0)
604
+ return { models: plain };
605
+ const legacy = await probeJsonOrTextModels(executable, env, [
606
+ ["models", "--json"],
607
+ ["models", "list", "--json"],
608
+ ["model", "list", "--json"],
609
+ ]);
610
+ return { models: legacy.length > 0 ? legacy : OPENCODE_ZEN_MODEL_IDS };
611
+ }
612
+ async function discoverAntigravityModels(executable, env) {
613
+ return probeJsonOrTextModels(executable, env, [["models"]], {
614
+ closeStdin: true,
615
+ timeoutMs: ANTIGRAVITY_MODEL_DISCOVERY_TIMEOUT_MS,
616
+ });
617
+ }
618
+ async function discoverCursorAgentModels(executable, env) {
619
+ return probeJsonOrTextModels(executable, env, [
620
+ ["models", "--json"],
621
+ ["models"],
622
+ ["--list-models"],
623
+ ]);
624
+ }
625
+ async function discoverCodexModels(executable, env) {
626
+ // Codex embeds full model instructions in this JSON; current lists exceed 500 KB.
627
+ return probeJsonOrTextModels(executable, env, [["debug", "models"]], {
628
+ maxOutputChars: 1024 * 1024,
629
+ });
630
+ }
631
+ async function discoverClaudeModels(executable, env) {
632
+ const fromCli = await probeJsonOrTextModels(executable, env, [
633
+ ["model", "list", "--json"],
634
+ ["models", "--json"],
635
+ ["models", "list", "--json"],
636
+ ]);
637
+ if (fromCli.length > 0) {
638
+ return collapseCursorDiscoveredModelIds(fromCli);
639
+ }
640
+ return extractClaudeModelIdsFromExecutable(executable);
641
+ }
642
+ async function discoverGenericModels(executable, env) {
643
+ return probeJsonOrTextModels(executable, env, [
644
+ ["models", "--json"],
645
+ ["models", "list", "--json"],
646
+ ["models"],
647
+ ]);
648
+ }
649
+ // Parse grok bullet rows only; generic parser treated login banner lines as model ids.
650
+ export function extractGrokModelIdsFromModelsOutput(value) {
651
+ const ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
652
+ const ids = [];
653
+ let defaultId = null;
654
+ for (const rawLine of value.split(/\r?\n/)) {
655
+ const line = rawLine.replace(ansiPattern, "").trim();
656
+ if (!line)
657
+ continue;
658
+ const defaultMatch = /^Default model:\s*(grok[\w./-]*)\s*$/i.exec(line);
659
+ if (defaultMatch?.[1]) {
660
+ defaultId = defaultMatch[1];
661
+ continue;
662
+ }
663
+ // Bullet rows only — never scrape "You are logged in with grok.com."
664
+ const bullet = /^[*•-]\s+(grok[\w./-]*)(?:\s+\(.*\))?\s*$/i.exec(line);
665
+ if (!bullet?.[1])
666
+ continue;
667
+ const id = bullet[1];
668
+ if (!ids.includes(id))
669
+ ids.push(id);
670
+ if (/\(default\)/i.test(line))
671
+ defaultId = id;
672
+ }
673
+ if (ids.length === 0)
674
+ return defaultId ? [defaultId] : [];
675
+ if (defaultId && ids.includes(defaultId)) {
676
+ return [defaultId, ...ids.filter((id) => id !== defaultId)];
677
+ }
678
+ return ids;
679
+ }
680
+ async function discoverGrokModels(executable, env) {
681
+ const result = await runCliProbeAsync(executable, withModelProbeEnv(env), ["models"], MODEL_DISCOVERY_TIMEOUT_MS);
682
+ if (!result || result.error || result.status !== 0 || !result.stdout.trim())
683
+ return [];
684
+ return extractGrokModelIdsFromModelsOutput(result.stdout);
685
+ }
686
+ // copilot_cli has no non-interactive model list; probing only burns the timeout.
687
+ const CATALOG_ONLY_PROVIDERS = new Set([
688
+ "supatest_cli",
689
+ "droid_cli",
690
+ "copilot_cli",
691
+ "command_code_cli",
692
+ ]);
693
+ export function supportsProviderModelDiscovery(provider) {
694
+ return provider === "opencode_serve" || provider in CATALOG_MODEL_IDS_BY_PROVIDER;
695
+ }
696
+ export async function discoverProviderModels(provider, executable, env) {
697
+ return (await discoverProviderModelDetails(provider, executable, env)).models;
698
+ }
699
+ export async function discoverProviderModelDetails(provider, executable, env) {
700
+ if (CATALOG_ONLY_PROVIDERS.has(provider)) {
701
+ return { models: getCatalogModelIds(provider) };
702
+ }
703
+ let probed = [];
704
+ if (isOpenCodeProviderKind(provider)) {
705
+ const discovered = await discoverOpenCodeModels(executable, env);
706
+ if (discovered.models.length > 0)
707
+ return discovered;
708
+ }
709
+ else if (provider === "antigravity_cli") {
710
+ probed = await discoverAntigravityModels(executable, env);
711
+ }
712
+ else if (provider === "cursor_agent_cli") {
713
+ probed = await discoverCursorAgentModels(executable, env);
714
+ }
715
+ else if (provider === "codex_app_server") {
716
+ probed = await discoverCodexModels(executable, env);
717
+ }
718
+ else if (provider === "claude_cli") {
719
+ probed = await discoverClaudeModels(executable, env);
720
+ }
721
+ else if (provider === "grok_cli") {
722
+ probed = await discoverGrokModels(executable, env);
723
+ }
724
+ else if (provider === "kimi_cli") {
725
+ probed = await discoverGenericModels(executable, env);
726
+ }
727
+ if (probed.length > 0)
728
+ return { models: probed };
729
+ return { models: getCatalogModelIds(provider) };
730
+ }
731
+ //# sourceMappingURL=provider-model-discovery.js.map