@jini-ai/agent-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +43 -0
  3. package/dist/acp-model-probe.d.ts +48 -0
  4. package/dist/acp-model-probe.d.ts.map +1 -0
  5. package/dist/acp-model-probe.js +15 -0
  6. package/dist/acp-model-probe.js.map +1 -0
  7. package/dist/agent-protocol/acp/account-failure.d.ts +54 -0
  8. package/dist/agent-protocol/acp/account-failure.d.ts.map +1 -0
  9. package/dist/agent-protocol/acp/account-failure.js +37 -0
  10. package/dist/agent-protocol/acp/account-failure.js.map +1 -0
  11. package/dist/agent-protocol/acp/constants.d.ts +26 -0
  12. package/dist/agent-protocol/acp/constants.d.ts.map +1 -0
  13. package/dist/agent-protocol/acp/constants.js +39 -0
  14. package/dist/agent-protocol/acp/constants.js.map +1 -0
  15. package/dist/agent-protocol/acp/index.d.ts +14 -0
  16. package/dist/agent-protocol/acp/index.d.ts.map +1 -0
  17. package/dist/agent-protocol/acp/index.js +14 -0
  18. package/dist/agent-protocol/acp/index.js.map +1 -0
  19. package/dist/agent-protocol/acp/json.d.ts +82 -0
  20. package/dist/agent-protocol/acp/json.d.ts.map +1 -0
  21. package/dist/agent-protocol/acp/json.js +144 -0
  22. package/dist/agent-protocol/acp/json.js.map +1 -0
  23. package/dist/agent-protocol/acp/models.d.ts +112 -0
  24. package/dist/agent-protocol/acp/models.d.ts.map +1 -0
  25. package/dist/agent-protocol/acp/models.js +293 -0
  26. package/dist/agent-protocol/acp/models.js.map +1 -0
  27. package/dist/agent-protocol/acp/rpc.d.ts +107 -0
  28. package/dist/agent-protocol/acp/rpc.d.ts.map +1 -0
  29. package/dist/agent-protocol/acp/rpc.js +162 -0
  30. package/dist/agent-protocol/acp/rpc.js.map +1 -0
  31. package/dist/agent-protocol/acp/session-params.d.ts +55 -0
  32. package/dist/agent-protocol/acp/session-params.d.ts.map +1 -0
  33. package/dist/agent-protocol/acp/session-params.js +81 -0
  34. package/dist/agent-protocol/acp/session-params.js.map +1 -0
  35. package/dist/agent-protocol/acp/session.d.ts +101 -0
  36. package/dist/agent-protocol/acp/session.d.ts.map +1 -0
  37. package/dist/agent-protocol/acp/session.js +832 -0
  38. package/dist/agent-protocol/acp/session.js.map +1 -0
  39. package/dist/agent-protocol/acp/text-suppression.d.ts +73 -0
  40. package/dist/agent-protocol/acp/text-suppression.d.ts.map +1 -0
  41. package/dist/agent-protocol/acp/text-suppression.js +229 -0
  42. package/dist/agent-protocol/acp/text-suppression.js.map +1 -0
  43. package/dist/agent-protocol/acp/types.d.ts +27 -0
  44. package/dist/agent-protocol/acp/types.d.ts.map +1 -0
  45. package/dist/agent-protocol/acp/types.js +2 -0
  46. package/dist/agent-protocol/acp/types.js.map +1 -0
  47. package/dist/agent-protocol/acp/updates.d.ts +166 -0
  48. package/dist/agent-protocol/acp/updates.d.ts.map +1 -0
  49. package/dist/agent-protocol/acp/updates.js +268 -0
  50. package/dist/agent-protocol/acp/updates.js.map +1 -0
  51. package/dist/agent-protocol/core/index.d.ts +6 -0
  52. package/dist/agent-protocol/core/index.d.ts.map +1 -0
  53. package/dist/agent-protocol/core/index.js +6 -0
  54. package/dist/agent-protocol/core/index.js.map +1 -0
  55. package/dist/agent-protocol/core/json-line-stream.d.ts +42 -0
  56. package/dist/agent-protocol/core/json-line-stream.d.ts.map +1 -0
  57. package/dist/agent-protocol/core/json-line-stream.js +333 -0
  58. package/dist/agent-protocol/core/json-line-stream.js.map +1 -0
  59. package/dist/agent-protocol/index.d.ts +8 -0
  60. package/dist/agent-protocol/index.d.ts.map +1 -0
  61. package/dist/agent-protocol/index.js +8 -0
  62. package/dist/agent-protocol/index.js.map +1 -0
  63. package/dist/agent-protocol/pi-rpc/events.d.ts +26 -0
  64. package/dist/agent-protocol/pi-rpc/events.d.ts.map +1 -0
  65. package/dist/agent-protocol/pi-rpc/events.js +167 -0
  66. package/dist/agent-protocol/pi-rpc/events.js.map +1 -0
  67. package/dist/agent-protocol/pi-rpc/index.d.ts +11 -0
  68. package/dist/agent-protocol/pi-rpc/index.d.ts.map +1 -0
  69. package/dist/agent-protocol/pi-rpc/index.js +11 -0
  70. package/dist/agent-protocol/pi-rpc/index.js.map +1 -0
  71. package/dist/agent-protocol/pi-rpc/internal.d.ts +45 -0
  72. package/dist/agent-protocol/pi-rpc/internal.d.ts.map +1 -0
  73. package/dist/agent-protocol/pi-rpc/internal.js +41 -0
  74. package/dist/agent-protocol/pi-rpc/internal.js.map +1 -0
  75. package/dist/agent-protocol/pi-rpc/models.d.ts +21 -0
  76. package/dist/agent-protocol/pi-rpc/models.d.ts.map +1 -0
  77. package/dist/agent-protocol/pi-rpc/models.js +48 -0
  78. package/dist/agent-protocol/pi-rpc/models.js.map +1 -0
  79. package/dist/agent-protocol/pi-rpc/session.d.ts +106 -0
  80. package/dist/agent-protocol/pi-rpc/session.d.ts.map +1 -0
  81. package/dist/agent-protocol/pi-rpc/session.js +371 -0
  82. package/dist/agent-protocol/pi-rpc/session.js.map +1 -0
  83. package/dist/amr-model-cache.d.ts +40 -0
  84. package/dist/amr-model-cache.d.ts.map +1 -0
  85. package/dist/amr-model-cache.js +79 -0
  86. package/dist/amr-model-cache.js.map +1 -0
  87. package/dist/amr-profile-resolver.d.ts +21 -0
  88. package/dist/amr-profile-resolver.d.ts.map +1 -0
  89. package/dist/amr-profile-resolver.js +4 -0
  90. package/dist/amr-profile-resolver.js.map +1 -0
  91. package/dist/artifact-taxonomy.d.ts +27 -0
  92. package/dist/artifact-taxonomy.d.ts.map +1 -0
  93. package/dist/artifact-taxonomy.js +5 -0
  94. package/dist/artifact-taxonomy.js.map +1 -0
  95. package/dist/auth.d.ts +25 -0
  96. package/dist/auth.d.ts.map +1 -0
  97. package/dist/auth.js +332 -0
  98. package/dist/auth.js.map +1 -0
  99. package/dist/capabilities.d.ts +9 -0
  100. package/dist/capabilities.d.ts.map +1 -0
  101. package/dist/capabilities.js +2 -0
  102. package/dist/capabilities.js.map +1 -0
  103. package/dist/claude-stream.d.ts +37 -0
  104. package/dist/claude-stream.d.ts.map +1 -0
  105. package/dist/claude-stream.js +660 -0
  106. package/dist/claude-stream.js.map +1 -0
  107. package/dist/copilot-stream.d.ts +37 -0
  108. package/dist/copilot-stream.d.ts.map +1 -0
  109. package/dist/copilot-stream.js +136 -0
  110. package/dist/copilot-stream.js.map +1 -0
  111. package/dist/defs/aider.d.ts +13 -0
  112. package/dist/defs/aider.d.ts.map +1 -0
  113. package/dist/defs/aider.js +63 -0
  114. package/dist/defs/aider.js.map +1 -0
  115. package/dist/defs/amp.d.ts +12 -0
  116. package/dist/defs/amp.d.ts.map +1 -0
  117. package/dist/defs/amp.js +56 -0
  118. package/dist/defs/amp.js.map +1 -0
  119. package/dist/defs/amr.d.ts +37 -0
  120. package/dist/defs/amr.d.ts.map +1 -0
  121. package/dist/defs/amr.js +303 -0
  122. package/dist/defs/amr.js.map +1 -0
  123. package/dist/defs/antigravity.d.ts +25 -0
  124. package/dist/defs/antigravity.d.ts.map +1 -0
  125. package/dist/defs/antigravity.js +213 -0
  126. package/dist/defs/antigravity.js.map +1 -0
  127. package/dist/defs/claude.d.ts +30 -0
  128. package/dist/defs/claude.d.ts.map +1 -0
  129. package/dist/defs/claude.js +130 -0
  130. package/dist/defs/claude.js.map +1 -0
  131. package/dist/defs/codebuddy.d.ts +26 -0
  132. package/dist/defs/codebuddy.d.ts.map +1 -0
  133. package/dist/defs/codebuddy.js +124 -0
  134. package/dist/defs/codebuddy.js.map +1 -0
  135. package/dist/defs/codex.d.ts +30 -0
  136. package/dist/defs/codex.d.ts.map +1 -0
  137. package/dist/defs/codex.js +196 -0
  138. package/dist/defs/codex.js.map +1 -0
  139. package/dist/defs/copilot.d.ts +12 -0
  140. package/dist/defs/copilot.d.ts.map +1 -0
  141. package/dist/defs/copilot.js +88 -0
  142. package/dist/defs/copilot.js.map +1 -0
  143. package/dist/defs/cursor-agent.d.ts +27 -0
  144. package/dist/defs/cursor-agent.d.ts.map +1 -0
  145. package/dist/defs/cursor-agent.js +93 -0
  146. package/dist/defs/cursor-agent.js.map +1 -0
  147. package/dist/defs/deepseek.d.ts +12 -0
  148. package/dist/defs/deepseek.d.ts.map +1 -0
  149. package/dist/defs/deepseek.js +53 -0
  150. package/dist/defs/deepseek.js.map +1 -0
  151. package/dist/defs/devin.d.ts +12 -0
  152. package/dist/defs/devin.d.ts.map +1 -0
  153. package/dist/defs/devin.js +45 -0
  154. package/dist/defs/devin.js.map +1 -0
  155. package/dist/defs/grok-build.d.ts +26 -0
  156. package/dist/defs/grok-build.d.ts.map +1 -0
  157. package/dist/defs/grok-build.js +105 -0
  158. package/dist/defs/grok-build.js.map +1 -0
  159. package/dist/defs/hermes.d.ts +13 -0
  160. package/dist/defs/hermes.d.ts.map +1 -0
  161. package/dist/defs/hermes.js +51 -0
  162. package/dist/defs/hermes.js.map +1 -0
  163. package/dist/defs/index.d.ts +33 -0
  164. package/dist/defs/index.d.ts.map +1 -0
  165. package/dist/defs/index.js +33 -0
  166. package/dist/defs/index.js.map +1 -0
  167. package/dist/defs/kilo.d.ts +12 -0
  168. package/dist/defs/kilo.d.ts.map +1 -0
  169. package/dist/defs/kilo.js +20 -0
  170. package/dist/defs/kilo.js.map +1 -0
  171. package/dist/defs/kimi.d.ts +13 -0
  172. package/dist/defs/kimi.d.ts.map +1 -0
  173. package/dist/defs/kimi.js +26 -0
  174. package/dist/defs/kimi.js.map +1 -0
  175. package/dist/defs/kiro.d.ts +12 -0
  176. package/dist/defs/kiro.d.ts.map +1 -0
  177. package/dist/defs/kiro.js +20 -0
  178. package/dist/defs/kiro.js.map +1 -0
  179. package/dist/defs/mimo.d.ts +13 -0
  180. package/dist/defs/mimo.d.ts.map +1 -0
  181. package/dist/defs/mimo.js +26 -0
  182. package/dist/defs/mimo.js.map +1 -0
  183. package/dist/defs/opencode.d.ts +27 -0
  184. package/dist/defs/opencode.d.ts.map +1 -0
  185. package/dist/defs/opencode.js +89 -0
  186. package/dist/defs/opencode.js.map +1 -0
  187. package/dist/defs/pi.d.ts +18 -0
  188. package/dist/defs/pi.d.ts.map +1 -0
  189. package/dist/defs/pi.js +94 -0
  190. package/dist/defs/pi.js.map +1 -0
  191. package/dist/defs/qoder.d.ts +11 -0
  192. package/dist/defs/qoder.d.ts.map +1 -0
  193. package/dist/defs/qoder.js +50 -0
  194. package/dist/defs/qoder.js.map +1 -0
  195. package/dist/defs/qwen.d.ts +11 -0
  196. package/dist/defs/qwen.d.ts.map +1 -0
  197. package/dist/defs/qwen.js +28 -0
  198. package/dist/defs/qwen.js.map +1 -0
  199. package/dist/defs/reasonix.d.ts +20 -0
  200. package/dist/defs/reasonix.d.ts.map +1 -0
  201. package/dist/defs/reasonix.js +60 -0
  202. package/dist/defs/reasonix.js.map +1 -0
  203. package/dist/defs/shared.d.ts +23 -0
  204. package/dist/defs/shared.d.ts.map +1 -0
  205. package/dist/defs/shared.js +58 -0
  206. package/dist/defs/shared.js.map +1 -0
  207. package/dist/defs/trae-cli.d.ts +14 -0
  208. package/dist/defs/trae-cli.d.ts.map +1 -0
  209. package/dist/defs/trae-cli.js +22 -0
  210. package/dist/defs/trae-cli.js.map +1 -0
  211. package/dist/defs/vibe.d.ts +12 -0
  212. package/dist/defs/vibe.d.ts.map +1 -0
  213. package/dist/defs/vibe.js +20 -0
  214. package/dist/defs/vibe.js.map +1 -0
  215. package/dist/detection.d.ts +14 -0
  216. package/dist/detection.d.ts.map +1 -0
  217. package/dist/detection.js +266 -0
  218. package/dist/detection.js.map +1 -0
  219. package/dist/diagnostics.d.ts +8 -0
  220. package/dist/diagnostics.d.ts.map +1 -0
  221. package/dist/diagnostics.js +95 -0
  222. package/dist/diagnostics.js.map +1 -0
  223. package/dist/env.d.ts +19 -0
  224. package/dist/env.d.ts.map +1 -0
  225. package/dist/env.js +95 -0
  226. package/dist/env.js.map +1 -0
  227. package/dist/executables.d.ts +24 -0
  228. package/dist/executables.d.ts.map +1 -0
  229. package/dist/executables.js +349 -0
  230. package/dist/executables.js.map +1 -0
  231. package/dist/index.d.ts +74 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +102 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/invocation.d.ts +6 -0
  236. package/dist/invocation.d.ts.map +1 -0
  237. package/dist/invocation.js +47 -0
  238. package/dist/invocation.js.map +1 -0
  239. package/dist/json-event-stream.d.ts +9 -0
  240. package/dist/json-event-stream.d.ts.map +1 -0
  241. package/dist/json-event-stream.js +856 -0
  242. package/dist/json-event-stream.js.map +1 -0
  243. package/dist/launch.d.ts +12 -0
  244. package/dist/launch.d.ts.map +1 -0
  245. package/dist/launch.js +221 -0
  246. package/dist/launch.js.map +1 -0
  247. package/dist/mcp.d.ts +44 -0
  248. package/dist/mcp.d.ts.map +1 -0
  249. package/dist/mcp.js +12 -0
  250. package/dist/mcp.js.map +1 -0
  251. package/dist/metadata.d.ts +24 -0
  252. package/dist/metadata.d.ts.map +1 -0
  253. package/dist/metadata.js +100 -0
  254. package/dist/metadata.js.map +1 -0
  255. package/dist/mmd-routes.d.ts +12 -0
  256. package/dist/mmd-routes.d.ts.map +1 -0
  257. package/dist/mmd-routes.js +146 -0
  258. package/dist/mmd-routes.js.map +1 -0
  259. package/dist/model-registry.d.ts +120 -0
  260. package/dist/model-registry.d.ts.map +1 -0
  261. package/dist/model-registry.js +77 -0
  262. package/dist/model-registry.js.map +1 -0
  263. package/dist/models.d.ts +16 -0
  264. package/dist/models.d.ts.map +1 -0
  265. package/dist/models.js +93 -0
  266. package/dist/models.js.map +1 -0
  267. package/dist/opencode-log.d.ts +16 -0
  268. package/dist/opencode-log.d.ts.map +1 -0
  269. package/dist/opencode-log.js +163 -0
  270. package/dist/opencode-log.js.map +1 -0
  271. package/dist/paths.d.ts +3 -0
  272. package/dist/paths.d.ts.map +1 -0
  273. package/dist/paths.js +29 -0
  274. package/dist/paths.js.map +1 -0
  275. package/dist/pi-models.d.ts +13 -0
  276. package/dist/pi-models.d.ts.map +1 -0
  277. package/dist/pi-models.js +36 -0
  278. package/dist/pi-models.js.map +1 -0
  279. package/dist/prompt-augmenter.d.ts +60 -0
  280. package/dist/prompt-augmenter.d.ts.map +1 -0
  281. package/dist/prompt-augmenter.js +26 -0
  282. package/dist/prompt-augmenter.js.map +1 -0
  283. package/dist/prompt-budget.d.ts +20 -0
  284. package/dist/prompt-budget.d.ts.map +1 -0
  285. package/dist/prompt-budget.js +226 -0
  286. package/dist/prompt-budget.js.map +1 -0
  287. package/dist/prompt-file.d.ts +7 -0
  288. package/dist/prompt-file.d.ts.map +1 -0
  289. package/dist/prompt-file.js +27 -0
  290. package/dist/prompt-file.js.map +1 -0
  291. package/dist/providers/aihubmix.d.ts +99 -0
  292. package/dist/providers/aihubmix.d.ts.map +1 -0
  293. package/dist/providers/aihubmix.js +239 -0
  294. package/dist/providers/aihubmix.js.map +1 -0
  295. package/dist/providers/anthropic-messages.d.ts +116 -0
  296. package/dist/providers/anthropic-messages.d.ts.map +1 -0
  297. package/dist/providers/anthropic-messages.js +313 -0
  298. package/dist/providers/anthropic-messages.js.map +1 -0
  299. package/dist/providers/azure-chat.d.ts +99 -0
  300. package/dist/providers/azure-chat.d.ts.map +1 -0
  301. package/dist/providers/azure-chat.js +164 -0
  302. package/dist/providers/azure-chat.js.map +1 -0
  303. package/dist/providers/connection-guard.d.ts +67 -0
  304. package/dist/providers/connection-guard.d.ts.map +1 -0
  305. package/dist/providers/connection-guard.js +211 -0
  306. package/dist/providers/connection-guard.js.map +1 -0
  307. package/dist/providers/elevenlabs.d.ts +28 -0
  308. package/dist/providers/elevenlabs.d.ts.map +1 -0
  309. package/dist/providers/elevenlabs.js +138 -0
  310. package/dist/providers/elevenlabs.js.map +1 -0
  311. package/dist/providers/google-messages.d.ts +108 -0
  312. package/dist/providers/google-messages.d.ts.map +1 -0
  313. package/dist/providers/google-messages.js +284 -0
  314. package/dist/providers/google-messages.js.map +1 -0
  315. package/dist/providers/google.d.ts +20 -0
  316. package/dist/providers/google.d.ts.map +1 -0
  317. package/dist/providers/google.js +42 -0
  318. package/dist/providers/google.js.map +1 -0
  319. package/dist/providers/index.d.ts +39 -0
  320. package/dist/providers/index.d.ts.map +1 -0
  321. package/dist/providers/index.js +39 -0
  322. package/dist/providers/index.js.map +1 -0
  323. package/dist/providers/model-catalog.d.ts +32 -0
  324. package/dist/providers/model-catalog.d.ts.map +1 -0
  325. package/dist/providers/model-catalog.js +394 -0
  326. package/dist/providers/model-catalog.js.map +1 -0
  327. package/dist/providers/oauth-callback-server.d.ts +35 -0
  328. package/dist/providers/oauth-callback-server.d.ts.map +1 -0
  329. package/dist/providers/oauth-callback-server.js +217 -0
  330. package/dist/providers/oauth-callback-server.js.map +1 -0
  331. package/dist/providers/oauth-credentials.d.ts +29 -0
  332. package/dist/providers/oauth-credentials.d.ts.map +1 -0
  333. package/dist/providers/oauth-credentials.js +70 -0
  334. package/dist/providers/oauth-credentials.js.map +1 -0
  335. package/dist/providers/oauth-provider.d.ts +95 -0
  336. package/dist/providers/oauth-provider.d.ts.map +1 -0
  337. package/dist/providers/oauth-provider.js +130 -0
  338. package/dist/providers/oauth-provider.js.map +1 -0
  339. package/dist/providers/oauth-tokens.d.ts +35 -0
  340. package/dist/providers/oauth-tokens.d.ts.map +1 -0
  341. package/dist/providers/oauth-tokens.js +136 -0
  342. package/dist/providers/oauth-tokens.js.map +1 -0
  343. package/dist/providers/ollama-chat.d.ts +106 -0
  344. package/dist/providers/ollama-chat.d.ts.map +1 -0
  345. package/dist/providers/ollama-chat.js +292 -0
  346. package/dist/providers/ollama-chat.js.map +1 -0
  347. package/dist/providers/openai-chat.d.ts +147 -0
  348. package/dist/providers/openai-chat.d.ts.map +1 -0
  349. package/dist/providers/openai-chat.js +302 -0
  350. package/dist/providers/openai-chat.js.map +1 -0
  351. package/dist/providers/pkce.d.ts +81 -0
  352. package/dist/providers/pkce.d.ts.map +1 -0
  353. package/dist/providers/pkce.js +176 -0
  354. package/dist/providers/pkce.js.map +1 -0
  355. package/dist/providers/sse-decode.d.ts +47 -0
  356. package/dist/providers/sse-decode.d.ts.map +1 -0
  357. package/dist/providers/sse-decode.js +109 -0
  358. package/dist/providers/sse-decode.js.map +1 -0
  359. package/dist/providers/token-params.d.ts +29 -0
  360. package/dist/providers/token-params.d.ts.map +1 -0
  361. package/dist/providers/token-params.js +41 -0
  362. package/dist/providers/token-params.js.map +1 -0
  363. package/dist/providers/turn-end-guard.d.ts +37 -0
  364. package/dist/providers/turn-end-guard.d.ts.map +1 -0
  365. package/dist/providers/turn-end-guard.js +42 -0
  366. package/dist/providers/turn-end-guard.js.map +1 -0
  367. package/dist/providers/types.d.ts +36 -0
  368. package/dist/providers/types.d.ts.map +1 -0
  369. package/dist/providers/types.js +13 -0
  370. package/dist/providers/types.js.map +1 -0
  371. package/dist/qoder-stream.d.ts +19 -0
  372. package/dist/qoder-stream.d.ts.map +1 -0
  373. package/dist/qoder-stream.js +167 -0
  374. package/dist/qoder-stream.js.map +1 -0
  375. package/dist/registry.d.ts +5 -0
  376. package/dist/registry.d.ts.map +1 -0
  377. package/dist/registry.js +58 -0
  378. package/dist/registry.js.map +1 -0
  379. package/dist/resolution.d.ts +2 -0
  380. package/dist/resolution.d.ts.map +1 -0
  381. package/dist/resolution.js +19 -0
  382. package/dist/resolution.js.map +1 -0
  383. package/dist/role-marker-guard.d.ts +53 -0
  384. package/dist/role-marker-guard.d.ts.map +1 -0
  385. package/dist/role-marker-guard.js +280 -0
  386. package/dist/role-marker-guard.js.map +1 -0
  387. package/dist/telemetry-sink.d.ts +35 -0
  388. package/dist/telemetry-sink.d.ts.map +1 -0
  389. package/dist/telemetry-sink.js +5 -0
  390. package/dist/telemetry-sink.js.map +1 -0
  391. package/dist/terminal-launch.d.ts +11 -0
  392. package/dist/terminal-launch.d.ts.map +1 -0
  393. package/dist/terminal-launch.js +123 -0
  394. package/dist/terminal-launch.js.map +1 -0
  395. package/dist/types.d.ts +185 -0
  396. package/dist/types.d.ts.map +1 -0
  397. package/dist/types.js +2 -0
  398. package/dist/types.js.map +1 -0
  399. package/package.json +47 -0
@@ -0,0 +1,303 @@
1
+ /** Ported from OD's `apps/daemon/src/runtimes/defs/amr.ts` (two de-branded comments; see `source-map.md`). */
2
+ import { execAgentFile } from './shared.js';
3
+ const AMR_MODELS_TIMEOUT_MS = 10_000;
4
+ const AMR_MODELS_RETRY_DELAYS_MS = [250, 750];
5
+ const PREFERRED_AMR_CHAT_MODEL_ORDER = [
6
+ 'deepseek-v4-flash',
7
+ 'deepseek-v3.2',
8
+ 'glm-5.1',
9
+ 'gemini-2.5-flash',
10
+ ];
11
+ const PREFERRED_AMR_CHAT_MODEL_RANK = new Map(PREFERRED_AMR_CHAT_MODEL_ORDER.map((id, index) => [id, index]));
12
+ // AMR is the vela CLI's ACP stdio mode. `vela agent run --runtime opencode`
13
+ // starts a private OpenCode server and forwards stream-json over ACP JSON-RPC.
14
+ // Required env (set on the daemon process or via Settings → CLI env):
15
+ // VELA_RUNTIME_KEY — OpenRouter (or compatible) API key
16
+ // VELA_LINK_URL — OpenAI-compatible endpoint, e.g. https://openrouter.ai/api/v1
17
+ // VELA_OPENCODE_BIN — optional; absolute path to opencode when not on PATH
18
+ // See docs/new-agent-runtime-acp.md and the vela
19
+ // `specs/current/runtime/manual-agent-run-openrouter.md`.
20
+ //
21
+ // Model wiring notes:
22
+ //
23
+ // 1. vela rejects `session/prompt` until `session/set_model` has been
24
+ // called, so AMR cannot accept the synthetic `default` model id —
25
+ // attachAcpSession skips set_model whenever model === 'default'.
26
+ //
27
+ // 2. Vela 0.0.1 exposes the current link-supported catalog through
28
+ // `vela models`, but that command prints public ids such as
29
+ // `public_model_deepseek_v3_2`. The ACP `session/set_model` call accepts
30
+ // the link-facing slug (`deepseek-v3.2` / `glm-5.1`), so this adapter
31
+ // normalizes those public ids at the spawn boundary until Vela exposes
32
+ // canonical ACP ids directly.
33
+ export function normalizeVelaModelId(rawId) {
34
+ const trimmed = rawId.trim();
35
+ if (!trimmed)
36
+ return null;
37
+ const withoutProvider = trimmed.startsWith('vela/')
38
+ ? trimmed.slice('vela/'.length)
39
+ : trimmed;
40
+ const withoutPrefix = withoutProvider.startsWith('public_model_')
41
+ ? withoutProvider.slice('public_model_'.length)
42
+ : withoutProvider;
43
+ if (!withoutPrefix)
44
+ return null;
45
+ if (/^deepseek_v3_2$/i.test(withoutPrefix))
46
+ return 'deepseek-v3.2';
47
+ if (/^deepseek-v3-2$/i.test(withoutPrefix))
48
+ return 'deepseek-v3.2';
49
+ if (/^kimi_k2_6$/i.test(withoutPrefix))
50
+ return 'kimi-k2.6';
51
+ if (/^kimi_k2_7_code$/i.test(withoutPrefix))
52
+ return 'kimi-k2.7-code';
53
+ if (/^glm_5_1$/i.test(withoutPrefix))
54
+ return 'glm-5.1';
55
+ if (/^glm_5$/i.test(withoutPrefix))
56
+ return 'glm-5';
57
+ const versioned = normalizeKnownVelaVersionId(withoutPrefix);
58
+ if (versioned)
59
+ return versioned;
60
+ return withoutPrefix.replace(/_/g, '-');
61
+ }
62
+ // Every capture group below is a mandatory (non-optional) part of its
63
+ // pattern — `(haiku|opus|sonnet)` is a required alternation and `(\d+)`
64
+ // requires 1+ digit characters — so none can be empty/undefined when the
65
+ // overall regex matches. `family` needs an explicit assertion because it's
66
+ // the only capture with a method called on it directly; the others type-check
67
+ // fine interpolated bare (`noUncheckedIndexedAccess` types them
68
+ // `string | undefined`, but TypeScript doesn't restrict template-literal
69
+ // interpolation the way it restricts a method call on a possibly-undefined
70
+ // value).
71
+ function normalizeKnownVelaVersionId(rawId) {
72
+ const claude = /^claude[_-](haiku|opus|sonnet)[_-](\d+)[_-](\d+)(.*)$/i.exec(rawId);
73
+ if (claude) {
74
+ const [, family, major, minor, suffix = ''] = claude;
75
+ return `claude-${family.toLowerCase()}-${major}.${minor}${suffix.replace(/_/g, '-')}`;
76
+ }
77
+ const gpt = /^gpt_(\d+)_(\d+)(.*)$/i.exec(rawId);
78
+ if (gpt) {
79
+ const [, major, minor, suffix = ''] = gpt;
80
+ return `gpt-${major}.${minor}${suffix.replace(/_/g, '-')}`;
81
+ }
82
+ const gemini = /^gemini_(\d+)_(\d+)(.*)$/i.exec(rawId);
83
+ if (gemini) {
84
+ const [, major, minor, suffix = ''] = gemini;
85
+ return `gemini-${major}.${minor}${suffix.replace(/_/g, '-')}`;
86
+ }
87
+ const minimax = /^minimax_m(\d+)_(\d+)(.*)$/i.exec(rawId);
88
+ if (minimax) {
89
+ const [, major, minor, suffix = ''] = minimax;
90
+ return `minimax-m${major}.${minor}${suffix.replace(/_/g, '-')}`;
91
+ }
92
+ return null;
93
+ }
94
+ function isVelaChatModelId(modelId) {
95
+ // Temporary chat-surface guard: Vela already lists media-generation models,
96
+ // but this AMR runtime adapter currently drives only chat completions.
97
+ // Remove this filter when AMR grows first-class image/video execution.
98
+ const id = modelId.toLowerCase();
99
+ if (id.startsWith('gpt-image-'))
100
+ return false;
101
+ if (id.startsWith('seedance-'))
102
+ return false;
103
+ if (id.startsWith('doubao-seedance-'))
104
+ return false;
105
+ if (id.startsWith('veo-'))
106
+ return false;
107
+ if (id.startsWith('imagen-'))
108
+ return false;
109
+ return true;
110
+ }
111
+ export function parseVelaModels(stdout) {
112
+ const seen = new Set();
113
+ const models = [];
114
+ for (const line of String(stdout || '').split('\n')) {
115
+ const trimmed = line.trim();
116
+ if (!trimmed || trimmed.startsWith('#'))
117
+ continue;
118
+ // `trimmed` is already non-empty and has no leading whitespace (checked
119
+ // above), so its first whitespace-split token is always non-empty too.
120
+ const rawId = trimmed.split(/\s+/)[0];
121
+ const id = normalizeVelaModelId(rawId);
122
+ if (!id || seen.has(id) || !isVelaChatModelId(id))
123
+ continue;
124
+ seen.add(id);
125
+ models.push({ id, label: id });
126
+ }
127
+ return orderAmrChatModels(models);
128
+ }
129
+ export function parseVelaModelJson(stdout, expectedSource) {
130
+ let parsed;
131
+ try {
132
+ parsed = JSON.parse(stdout);
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Invalid vela model JSON: ${error instanceof Error ? error.message : String(error)}`);
136
+ }
137
+ if (!parsed || typeof parsed !== 'object') {
138
+ throw new Error('Invalid vela model JSON: expected object');
139
+ }
140
+ const source = parsed.source;
141
+ if (source !== expectedSource) {
142
+ throw new Error(`Invalid vela model JSON source: expected ${expectedSource}, got ${String(source)}`);
143
+ }
144
+ const data = parsed.data;
145
+ if (!Array.isArray(data)) {
146
+ throw new Error('Invalid vela model JSON: expected data array');
147
+ }
148
+ const seen = new Set();
149
+ const models = [];
150
+ for (const item of data) {
151
+ const rawId = item && typeof item === 'object'
152
+ ? item.id
153
+ : null;
154
+ const id = typeof rawId === 'string' ? rawId.trim() : '';
155
+ if (!id || seen.has(id) || !isVelaChatModelId(id))
156
+ continue;
157
+ seen.add(id);
158
+ models.push({ id, label: id });
159
+ }
160
+ return orderAmrChatModels(models);
161
+ }
162
+ function orderAmrChatModels(models) {
163
+ return models
164
+ .map((model, index) => ({ model, index }))
165
+ .sort((a, b) => {
166
+ const aRank = PREFERRED_AMR_CHAT_MODEL_RANK.get(a.model.id) ?? Number.MAX_SAFE_INTEGER;
167
+ const bRank = PREFERRED_AMR_CHAT_MODEL_RANK.get(b.model.id) ?? Number.MAX_SAFE_INTEGER;
168
+ return aRank - bRank || a.index - b.index;
169
+ })
170
+ .map(({ model }) => model);
171
+ }
172
+ function sleep(ms) {
173
+ return new Promise((resolve) => setTimeout(resolve, ms));
174
+ }
175
+ function velaModelsErrorMessage(error) {
176
+ if (error instanceof Error)
177
+ return error.message;
178
+ return String(error ?? '');
179
+ }
180
+ function isRetriableVelaModelsError(error) {
181
+ const message = velaModelsErrorMessage(error).toLowerCase();
182
+ return [
183
+ 'deadline exceeded',
184
+ 'timed out',
185
+ 'timeout',
186
+ 'temporarily unavailable',
187
+ 'temporary failure',
188
+ 'econnreset',
189
+ 'econnrefused',
190
+ 'enotfound',
191
+ '502',
192
+ '503',
193
+ '504',
194
+ ].some((pattern) => message.includes(pattern));
195
+ }
196
+ export async function fetchVelaPresetModels(resolvedBin, env) {
197
+ const { stdout } = await execAgentFile(resolvedBin, ['model', 'preset', '--format', 'json'], {
198
+ env,
199
+ timeout: AMR_MODELS_TIMEOUT_MS,
200
+ maxBuffer: 1024 * 1024,
201
+ });
202
+ return parseVelaModelJson(String(stdout), 'preset');
203
+ }
204
+ export async function fetchVelaRemoteModelsWithRetry(resolvedBin, env) {
205
+ // The internal exhaustion check below (`attempt === AMR_MODELS_RETRY_DELAYS_MS.length`)
206
+ // always throws on the last allowed attempt — strictly before the `for`
207
+ // condition itself would ever end the loop — so there's no way to fall
208
+ // through normally; no trailing fallback throw is needed. That same check
209
+ // also means `attempt` is always a valid in-bounds index into
210
+ // `AMR_MODELS_RETRY_DELAYS_MS` whenever we reach the `sleep()` call below
211
+ // (the assertion just satisfies `noUncheckedIndexedAccess`).
212
+ //
213
+ // Coverage note (re-derived, not merely restated from the paragraph
214
+ // above): `for (let attempt = 0; ; attempt += 1)` has an empty middle
215
+ // clause — an unconditional, infinite loop — and its body contains no
216
+ // `break` (grepped: none). The only two ways out are the `return` on a
217
+ // successful parse and the `throw` in the catch arm, and the `throw` is
218
+ // unconditionally forced once `attempt === AMR_MODELS_RETRY_DELAYS_MS.length`
219
+ // (`AMR_MODELS_RETRY_DELAYS_MS` is the literal 2-element `[250, 750]`
220
+ // above, so that's guaranteed after at most 3 attempts). So this
221
+ // function's implicit end-of-body statement (the closing `}` two lines
222
+ // below) can never execute — v8/istanbul still instruments it because
223
+ // it can't prove an arbitrary `for(;;)` terminates, but the real control
224
+ // flow genuinely never reaches it. Documented here (and in
225
+ // `source-map.md`'s 2026-07-22 entry) instead of forced via a test,
226
+ // per this repo's no-`/* v8 ignore */` standard.
227
+ for (let attempt = 0;; attempt += 1) {
228
+ try {
229
+ const { stdout } = await execAgentFile(resolvedBin, ['model', 'list', '--format', 'json'], {
230
+ env,
231
+ timeout: AMR_MODELS_TIMEOUT_MS,
232
+ maxBuffer: 1024 * 1024,
233
+ });
234
+ return parseVelaModelJson(String(stdout), 'remote');
235
+ }
236
+ catch (error) {
237
+ if (attempt === AMR_MODELS_RETRY_DELAYS_MS.length ||
238
+ !isRetriableVelaModelsError(error)) {
239
+ throw error;
240
+ }
241
+ await sleep(AMR_MODELS_RETRY_DELAYS_MS[attempt]);
242
+ }
243
+ }
244
+ }
245
+ /**
246
+ * Read the signed-in account's billing summary via the vela CLI — the same
247
+ * data source used for models, so balance/tier come through the versioned CLI
248
+ * contract rather than a separate HTTP call. Returns total available balance
249
+ * and the real membership tier.
250
+ */
251
+ export async function fetchVelaBillingSummary(resolvedBin, env) {
252
+ const { stdout } = await execAgentFile(resolvedBin, ['billing', 'summary', '--format', 'json'], { env, timeout: AMR_MODELS_TIMEOUT_MS, maxBuffer: 1024 * 1024 });
253
+ const data = JSON.parse(String(stdout));
254
+ // Use `balanceUsd` — the same field the console wallet page renders as the
255
+ // headline "余额" — so the two surfaces always agree. Fall back to the total
256
+ // available only if `balanceUsd` is missing.
257
+ const balanceUsd = typeof data.balanceUsd === 'string'
258
+ ? data.balanceUsd
259
+ : typeof data.totalAvailableCreditsUsd === 'string'
260
+ ? data.totalAvailableCreditsUsd
261
+ : null;
262
+ // `membershipTier` is omitted for free accounts. A SUCCESSFUL summary with no
263
+ // tier therefore means "free" — normalize to the explicit sentinel so the UI
264
+ // shows the plan and the Upgrade CTA for free users. "Unknown" (billing
265
+ // unavailable) is signalled separately by the fetch rejecting → null account,
266
+ // never by an absent tier on a successful read.
267
+ const tier = typeof data.membershipTier === 'string' && data.membershipTier.trim()
268
+ ? data.membershipTier.trim()
269
+ : 'free';
270
+ return { plan: tier, balanceUsd };
271
+ }
272
+ export const amrAgentDef = {
273
+ id: 'amr',
274
+ name: 'AMR',
275
+ bin: 'vela',
276
+ versionArgs: ['--version'],
277
+ fetchModels: fetchVelaRemoteModelsWithRetry,
278
+ // Fail closed when Vela's live catalog is unavailable. Stale static
279
+ // fallbacks let users select models that link/opencode no longer accepts.
280
+ fallbackModels: [],
281
+ buildArgs: () => ['agent', 'run', '--runtime', 'opencode'],
282
+ streamFormat: 'acp-json-rpc',
283
+ // vela resumes the upstream OpenCode session via ACP session/load across
284
+ // turns (the OpenCode session store persists per conversation), so the daemon
285
+ // captures the durable handle, skips the transcript resend on resume, and
286
+ // maps vela's resume_failed onto the reseed path. See resumesSessionViaAcpLoad.
287
+ resumesSessionViaAcpLoad: true,
288
+ // Vela routes model selection through ACP's `session/set_model` and only
289
+ // accepts ids that survived the `vela models` preflight check, so a
290
+ // free-text "Custom" id silently fails at spawn. The model picker
291
+ // surfaces the live Vela catalog instead.
292
+ supportsCustomModel: false,
293
+ supportsImagePaths: true,
294
+ // Daemon-process env override for emergency operator pinning. Normal UI
295
+ // selection comes from the live `vela models` catalog and is preflighted
296
+ // before spawn.
297
+ defaultModelEnvVar: 'VELA_DEFAULT_MODEL',
298
+ // Vela/OpenCode can spend extended stretches silent while the upstream
299
+ // provider is still working. Keep the outer chat watchdog aligned with the
300
+ // 30-minute ACP stage timeout so the daemon does not fail the run first.
301
+ inactivityTimeoutMs: 30 * 60 * 1000,
302
+ };
303
+ //# sourceMappingURL=amr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amr.js","sourceRoot":"","sources":["../../src/defs/amr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare function writeAntigravityModelSelection(label: string, settingsPath?: string): void;
2
+ export declare function acquireAntigravityModelLock(): Promise<() => void>;
3
+ export declare function _resetAntigravityModelLockForTests(): void;
4
+ export interface WaitForAgyModelOptions {
5
+ timeoutMs?: number;
6
+ pollIntervalMs?: number;
7
+ readFile?: (path: string) => Promise<string>;
8
+ now?: () => number;
9
+ abortSignal?: AbortSignal;
10
+ }
11
+ export declare function waitForAgyToReadModel(logFilePath: string, expectedModel: string, options?: WaitForAgyModelOptions): Promise<boolean>;
12
+ export declare const antigravityAgentDef: {
13
+ id: string;
14
+ name: string;
15
+ bin: string;
16
+ versionArgs: string[];
17
+ fallbackModels: import("../types.js").RuntimeModelOption[];
18
+ supportsCustomModel: false;
19
+ buildArgs: (_prompt: string, _imagePaths: string[], _extra?: string[] | undefined, options?: import("../types.js").RuntimeBuildOptions | undefined, runtimeContext?: import("../types.js").RuntimeContext | undefined) => string[];
20
+ promptViaStdin: true;
21
+ streamFormat: string;
22
+ installUrl: string;
23
+ docsUrl: string;
24
+ };
25
+ //# sourceMappingURL=antigravity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/defs/antigravity.ts"],"names":[],"mappings":"AAgDA,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,MAAkC,GAC/C,IAAI,CAgBN;AAeD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAevE;AAKD,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IASnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAgBD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,OAAO,CAAC,CAgClB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAqFL,CAAC"}
@@ -0,0 +1,213 @@
1
+ /** Ported verbatim from OD's `apps/daemon/src/runtimes/defs/antigravity.ts` (import path adjusted only). See `source-map.md`. */
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from 'node:fs';
3
+ import { readFile as fsReadFile } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { DEFAULT_MODEL_OPTION } from './shared.js';
7
+ // `agy` v1.0.3 still has no `--model` flag (upstream issue #35), but the
8
+ // TUI's Switch-Model picker writes the choice to its settings.json, and
9
+ // every `agy -p` invocation re-reads that file on startup — verified by
10
+ // capturing the `--log-file` line `Propagating selected model override to
11
+ // backend: label="<model>"`. So we can route OD's model picker through
12
+ // settings.json: when the user picks a concrete model in Settings, the
13
+ // daemon writes the label into agy's settings.json right before spawn,
14
+ // and the resulting print-mode run uses that model.
15
+ //
16
+ // Two ids the picker exposes are special:
17
+ // - 'default' : leave settings.json untouched, so agy keeps
18
+ // whatever the user last picked in its own TUI.
19
+ // (Respects user choice when they switch models
20
+ // from `agy` directly.)
21
+ // - any other id : the literal display label agy expects (e.g.
22
+ // "Gemini 3.1 Pro (High)", "Claude Sonnet 4.6
23
+ // (Thinking)"). We persist it before spawn.
24
+ //
25
+ // `supportsCustomModel: false` because the label set is a server-side
26
+ // enum — a typed id agy doesn't recognise resolves to a silent
27
+ // `availableModels` cache miss + empty print-mode output, which surfaces
28
+ // to the user as a generic "empty response" error.
29
+ //
30
+ // The 8 model labels mirror what `Switch Model` in agy's TUI lists for
31
+ // consumer-tier accounts as of 2026-05-28. The set is small and stable
32
+ // enough to ship statically until upstream adds a programmatic
33
+ // `agy models` subcommand (also tracked under issue #35).
34
+ const ANTIGRAVITY_SETTINGS_PATH = join(homedir(), '.gemini', 'antigravity-cli', 'settings.json');
35
+ export function writeAntigravityModelSelection(label, settingsPath = ANTIGRAVITY_SETTINGS_PATH) {
36
+ let existing = {};
37
+ if (existsSync(settingsPath)) {
38
+ try {
39
+ const parsed = JSON.parse(readFileSync(settingsPath, 'utf8'));
40
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
41
+ existing = parsed;
42
+ }
43
+ }
44
+ catch {
45
+ // Corrupt JSON — fall through and rewrite the file from scratch so
46
+ // the next spawn starts from a known-good state.
47
+ }
48
+ }
49
+ existing.model = label;
50
+ mkdirSync(dirname(settingsPath), { recursive: true });
51
+ writeFileSync(settingsPath, `${JSON.stringify(existing, null, 2)}\n`);
52
+ }
53
+ // Per-process serialization for write-settings → spawn → agy-reads
54
+ // cycles on antigravity. `~/.gemini/antigravity-cli/settings.json` is
55
+ // process-global, so two OD runs that both pick concrete (non-default)
56
+ // models can race: run A writes model A, spawn A starts, run B writes
57
+ // model B before A's agy has read settings.json — A then executes on
58
+ // model B. The daemon serialises non-default antigravity spawns
59
+ // through this chain: each acquire awaits the previous release, and
60
+ // each release fires only after the spawned agy actually emits
61
+ // `Propagating selected model override to backend: label="<X>"` in
62
+ // its `--log-file` (which is the upstream signal that settings.json
63
+ // has been read).
64
+ let antigravityLockChain = Promise.resolve();
65
+ export async function acquireAntigravityModelLock() {
66
+ const previous = antigravityLockChain;
67
+ // Definite-assignment assertion (`!`), not a `() => {}` fallback default:
68
+ // the ECMAScript spec guarantees a `Promise` executor runs synchronously,
69
+ // immediately, during construction — `release = resolve` below has
70
+ // already run by the time `new Promise(...)` returns, so a fallback
71
+ // no-op default would be assigned, coverage-instrumented, and never once
72
+ // invoked. Removing it drops that dead function instead of padding a
73
+ // test around code that cannot execute.
74
+ let release;
75
+ antigravityLockChain = new Promise((resolve) => {
76
+ release = resolve;
77
+ });
78
+ await previous;
79
+ return release;
80
+ }
81
+ // Visible for tests. Resets the module-level lock chain so a test that
82
+ // installed a hanging acquirer can release it without leaking state to
83
+ // subsequent test cases. Production code never calls this.
84
+ export function _resetAntigravityModelLockForTests() {
85
+ antigravityLockChain = Promise.resolve();
86
+ }
87
+ // Polls agy's `--log-file` for the line
88
+ // `Propagating selected model override to backend: label="<expectedModel>"`
89
+ // which `model_config_manager.go` emits once agy has finished reading
90
+ // `~/.gemini/antigravity-cli/settings.json` and sent the model
91
+ // override to the upstream backend. Returns true on observed signal,
92
+ // false on timeout OR abort. Never throws — a missing log file is
93
+ // treated as "not yet seen" so the polling loop keeps retrying until
94
+ // either the deadline or the abort signal fires.
95
+ //
96
+ // IMPORTANT: callers MUST NOT use a `false` return as a "go ahead and
97
+ // release the settings.json lock" signal — false means "I gave up
98
+ // polling," not "agy definitely didn't read this." Release the lock
99
+ // only on (a) a `true` return, OR (b) child exit. See server.ts for
100
+ // the wiring.
101
+ export async function waitForAgyToReadModel(logFilePath, expectedModel, options = {}) {
102
+ const timeoutMs = options.timeoutMs ?? 15_000;
103
+ const pollIntervalMs = options.pollIntervalMs ?? 250;
104
+ const readFile = options.readFile ?? ((path) => fsReadFile(path, 'utf8'));
105
+ const now = options.now ?? Date.now;
106
+ const abortSignal = options.abortSignal;
107
+ if (abortSignal?.aborted)
108
+ return false;
109
+ const escaped = expectedModel.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
110
+ const pattern = new RegExp(`Propagating selected model override to backend: label="${escaped}"`);
111
+ const deadline = now() + timeoutMs;
112
+ while (now() < deadline) {
113
+ if (abortSignal?.aborted)
114
+ return false;
115
+ try {
116
+ const content = await readFile(logFilePath);
117
+ if (pattern.test(content))
118
+ return true;
119
+ }
120
+ catch {
121
+ // Log file may not have appeared yet; keep polling.
122
+ }
123
+ if (now() >= deadline)
124
+ break;
125
+ await new Promise((resolve) => {
126
+ const timer = setTimeout(resolve, pollIntervalMs);
127
+ const onAbort = () => {
128
+ clearTimeout(timer);
129
+ resolve();
130
+ };
131
+ abortSignal?.addEventListener('abort', onAbort, { once: true });
132
+ });
133
+ }
134
+ return false;
135
+ }
136
+ export const antigravityAgentDef = {
137
+ id: 'antigravity',
138
+ name: 'Antigravity',
139
+ bin: 'agy',
140
+ versionArgs: ['--version'],
141
+ fallbackModels: [
142
+ DEFAULT_MODEL_OPTION,
143
+ { id: 'Gemini 3.1 Pro (High)', label: 'Gemini 3.1 Pro (High)' },
144
+ { id: 'Gemini 3.1 Pro (Low)', label: 'Gemini 3.1 Pro (Low)' },
145
+ { id: 'Gemini 3.5 Flash (High)', label: 'Gemini 3.5 Flash (High)' },
146
+ { id: 'Gemini 3.5 Flash (Medium)', label: 'Gemini 3.5 Flash (Medium)' },
147
+ { id: 'Gemini 3.5 Flash (Low)', label: 'Gemini 3.5 Flash (Low)' },
148
+ {
149
+ id: 'Claude Sonnet 4.6 (Thinking)',
150
+ label: 'Claude Sonnet 4.6 (Thinking)',
151
+ },
152
+ { id: 'Claude Opus 4.6 (Thinking)', label: 'Claude Opus 4.6 (Thinking)' },
153
+ { id: 'GPT-OSS 120B (Medium)', label: 'GPT-OSS 120B (Medium)' },
154
+ ],
155
+ supportsCustomModel: false,
156
+ // We deliberately do NOT opt into `resumesSessionViaCli` / agy's `-c`
157
+ // resume flag on follow-up turns. Tested both shapes; `-c` activates
158
+ // agy's internal agentic loop (multi-step model retries, tool calls,
159
+ // fallback-to-cached-response on tool errors) which can't be steered
160
+ // from OD's system-prompt OVERRIDE — even with the strongest wording
161
+ // we got an identical byte-for-byte form re-emission on turn 2 when
162
+ // turn 1's tool-call retry path returned the cached form response.
163
+ //
164
+ // Instead we treat agy as a stateless plain adapter like qwen /
165
+ // deepseek: every spawn gets the full OD-rendered transcript via
166
+ // `buildDaemonTranscript`, and that transcript's prior assistant
167
+ // turns are sanitized to strip `<question-form>` markup + form-schema
168
+ // JSON fences (see `sanitizePriorAssistantTurnForTranscript` in
169
+ // apps/web/src/providers/daemon.ts). The stronger OVERRIDE block
170
+ // composed in server.ts gives a second line of defense for weak
171
+ // plain-stream models like Gemini 3.5 Flash.
172
+ buildArgs: (_prompt, _imagePaths, _extra = [], options = {}, runtimeContext = {}) => {
173
+ if (options.model && options.model !== DEFAULT_MODEL_OPTION.id) {
174
+ writeAntigravityModelSelection(options.model, runtimeContext.antigravitySettingsPath);
175
+ }
176
+ // We invoke agy via `-p -` (print mode + stdin sentinel), NOT
177
+ // `chat -`. Verified against `agy --help` on v1.0.3 — the
178
+ // `Available subcommands` list is `changelog / help / install /
179
+ // plugin / update`, and `chat` is NOT among them. `-p` is the
180
+ // documented print-mode flag (`Short alias for --print`) and
181
+ // `agy -p -` reads the prompt from stdin. The looper reviewer
182
+ // bot's environment runs a different agy build that may have
183
+ // renamed the entry point; until upstream confirms a stable
184
+ // headless subcommand (see google-antigravity/antigravity-cli#119)
185
+ // and the change actually ships in the auto-update channel that
186
+ // packaged OD users get, `-p -` is the contract that actually
187
+ // produces a print-mode reply on the installed CLI.
188
+ const args = [];
189
+ // Always opt into `--log-file` when the daemon supplied a path so
190
+ // it can post-exit grep for the actual upstream failure shape
191
+ // (auth missing vs quota reached vs upstream error) — without it
192
+ // the chat surfaces a generic "empty response" because print mode
193
+ // never echoes those errors on stdout. See server.ts empty-output
194
+ // guard for the consumer.
195
+ //
196
+ // Flag order is load-bearing on agy v1.0.3: `agy -p --log-file
197
+ // /tmp/x -` runs successfully but leaves /tmp/x empty, while `agy
198
+ // --log-file /tmp/x -p -` captures the diagnostic log, including
199
+ // `Propagating selected model override to backend: label="<model>"`
200
+ // and auth/quota failures.
201
+ if (runtimeContext.agentLogFilePath) {
202
+ args.push('--log-file', runtimeContext.agentLogFilePath);
203
+ }
204
+ args.push('-p');
205
+ args.push('-');
206
+ return args;
207
+ },
208
+ promptViaStdin: true,
209
+ streamFormat: 'plain',
210
+ installUrl: 'https://antigravity.google/cli',
211
+ docsUrl: 'https://antigravity.google/docs/cli-overview',
212
+ };
213
+ //# sourceMappingURL=antigravity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/defs/antigravity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const claudeAgentDef: {
2
+ id: string;
3
+ name: string;
4
+ bin: string;
5
+ fallbackBins: string[];
6
+ versionArgs: string[];
7
+ authProbe: {
8
+ args: string[];
9
+ timeoutMs: number;
10
+ };
11
+ helpArgs: string[];
12
+ capabilityFlags: {
13
+ '--include-partial-messages': string;
14
+ '--add-dir': string;
15
+ '--effort': string;
16
+ };
17
+ fallbackModels: import("../types.js").RuntimeModelOption[];
18
+ fetchModels: (_resolvedBin: string, env: import("../types.js").RuntimeEnv) => Promise<import("../types.js").RuntimeModelOption[] | null>;
19
+ reasoningOptions: {
20
+ id: string;
21
+ label: string;
22
+ }[];
23
+ buildArgs: (_prompt: string, _imagePaths: string[], extraAllowedDirs?: string[] | undefined, options?: import("../types.js").RuntimeBuildOptions | undefined, runtimeContext?: import("../types.js").RuntimeContext | undefined) => string[];
24
+ promptViaStdin: true;
25
+ promptInputFormat: "stream-json";
26
+ streamFormat: string;
27
+ externalMcpInjection: "claude-mcp-json";
28
+ resumesSessionViaCli: true;
29
+ };
30
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/defs/claude.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GA,CAAC"}