@yjjeong/omg 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 (702) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/LICENSE +21 -0
  3. package/README.md +153 -0
  4. package/dist/cli/args.d.ts +39 -0
  5. package/dist/cli/args.d.ts.map +1 -0
  6. package/dist/cli/args.js +129 -0
  7. package/dist/cli/args.js.map +1 -0
  8. package/dist/cli/autoCommit.d.ts +20 -0
  9. package/dist/cli/autoCommit.d.ts.map +1 -0
  10. package/dist/cli/autoCommit.js +121 -0
  11. package/dist/cli/autoCommit.js.map +1 -0
  12. package/dist/cli/bgTasks.d.ts +57 -0
  13. package/dist/cli/bgTasks.d.ts.map +1 -0
  14. package/dist/cli/bgTasks.js +193 -0
  15. package/dist/cli/bgTasks.js.map +1 -0
  16. package/dist/cli/compactor.d.ts +48 -0
  17. package/dist/cli/compactor.d.ts.map +1 -0
  18. package/dist/cli/compactor.js +73 -0
  19. package/dist/cli/compactor.js.map +1 -0
  20. package/dist/cli/doctor.d.ts +77 -0
  21. package/dist/cli/doctor.d.ts.map +1 -0
  22. package/dist/cli/doctor.js +279 -0
  23. package/dist/cli/doctor.js.map +1 -0
  24. package/dist/cli/gitStatus.d.ts +7 -0
  25. package/dist/cli/gitStatus.d.ts.map +1 -0
  26. package/dist/cli/gitStatus.js +70 -0
  27. package/dist/cli/gitStatus.js.map +1 -0
  28. package/dist/cli/handoff.d.ts +36 -0
  29. package/dist/cli/handoff.d.ts.map +1 -0
  30. package/dist/cli/handoff.js +60 -0
  31. package/dist/cli/handoff.js.map +1 -0
  32. package/dist/cli/interactive/brokers.d.ts +31 -0
  33. package/dist/cli/interactive/brokers.d.ts.map +1 -0
  34. package/dist/cli/interactive/brokers.js +259 -0
  35. package/dist/cli/interactive/brokers.js.map +1 -0
  36. package/dist/cli/interactive/index.d.ts +8 -0
  37. package/dist/cli/interactive/index.d.ts.map +1 -0
  38. package/dist/cli/interactive/index.js +731 -0
  39. package/dist/cli/interactive/index.js.map +1 -0
  40. package/dist/cli/interactive/proxyQuestions.d.ts +15 -0
  41. package/dist/cli/interactive/proxyQuestions.d.ts.map +1 -0
  42. package/dist/cli/interactive/proxyQuestions.js +48 -0
  43. package/dist/cli/interactive/proxyQuestions.js.map +1 -0
  44. package/dist/cli/interactive/tabManager.d.ts +32 -0
  45. package/dist/cli/interactive/tabManager.d.ts.map +1 -0
  46. package/dist/cli/interactive/tabManager.js +244 -0
  47. package/dist/cli/interactive/tabManager.js.map +1 -0
  48. package/dist/cli/interactive/teamHint.d.ts +2 -0
  49. package/dist/cli/interactive/teamHint.d.ts.map +1 -0
  50. package/dist/cli/interactive/teamHint.js +14 -0
  51. package/dist/cli/interactive/teamHint.js.map +1 -0
  52. package/dist/cli/login.d.ts +13 -0
  53. package/dist/cli/login.d.ts.map +1 -0
  54. package/dist/cli/login.js +53 -0
  55. package/dist/cli/login.js.map +1 -0
  56. package/dist/cli/modes/demo.d.ts +12 -0
  57. package/dist/cli/modes/demo.d.ts.map +1 -0
  58. package/dist/cli/modes/demo.js +48 -0
  59. package/dist/cli/modes/demo.js.map +1 -0
  60. package/dist/cli/modes/doctor.d.ts +28 -0
  61. package/dist/cli/modes/doctor.d.ts.map +1 -0
  62. package/dist/cli/modes/doctor.js +79 -0
  63. package/dist/cli/modes/doctor.js.map +1 -0
  64. package/dist/cli/modes/login.d.ts +5 -0
  65. package/dist/cli/modes/login.d.ts.map +1 -0
  66. package/dist/cli/modes/login.js +40 -0
  67. package/dist/cli/modes/login.js.map +1 -0
  68. package/dist/cli/modes/mcpServe.d.ts +9 -0
  69. package/dist/cli/modes/mcpServe.d.ts.map +1 -0
  70. package/dist/cli/modes/mcpServe.js +112 -0
  71. package/dist/cli/modes/mcpServe.js.map +1 -0
  72. package/dist/cli/modes/orchestrator.d.ts +14 -0
  73. package/dist/cli/modes/orchestrator.d.ts.map +1 -0
  74. package/dist/cli/modes/orchestrator.js +64 -0
  75. package/dist/cli/modes/orchestrator.js.map +1 -0
  76. package/dist/cli/modes/team.d.ts +14 -0
  77. package/dist/cli/modes/team.d.ts.map +1 -0
  78. package/dist/cli/modes/team.js +87 -0
  79. package/dist/cli/modes/team.js.map +1 -0
  80. package/dist/cli/registry.d.ts +3 -0
  81. package/dist/cli/registry.d.ts.map +1 -0
  82. package/dist/cli/registry.js +15 -0
  83. package/dist/cli/registry.js.map +1 -0
  84. package/dist/cli/slash/core.d.ts +3 -0
  85. package/dist/cli/slash/core.d.ts.map +1 -0
  86. package/dist/cli/slash/core.js +509 -0
  87. package/dist/cli/slash/core.js.map +1 -0
  88. package/dist/cli/slash/index.d.ts +3 -0
  89. package/dist/cli/slash/index.d.ts.map +1 -0
  90. package/dist/cli/slash/index.js +28 -0
  91. package/dist/cli/slash/index.js.map +1 -0
  92. package/dist/cli/slash/modes.d.ts +3 -0
  93. package/dist/cli/slash/modes.d.ts.map +1 -0
  94. package/dist/cli/slash/modes.js +530 -0
  95. package/dist/cli/slash/modes.js.map +1 -0
  96. package/dist/cli/slash/session.d.ts +3 -0
  97. package/dist/cli/slash/session.d.ts.map +1 -0
  98. package/dist/cli/slash/session.js +376 -0
  99. package/dist/cli/slash/session.js.map +1 -0
  100. package/dist/cli/slash/shared.d.ts +43 -0
  101. package/dist/cli/slash/shared.d.ts.map +1 -0
  102. package/dist/cli/slash/shared.js +6 -0
  103. package/dist/cli/slash/shared.js.map +1 -0
  104. package/dist/cli/slash/tabs.d.ts +3 -0
  105. package/dist/cli/slash/tabs.d.ts.map +1 -0
  106. package/dist/cli/slash/tabs.js +497 -0
  107. package/dist/cli/slash/tabs.js.map +1 -0
  108. package/dist/cli/slash/team.d.ts +3 -0
  109. package/dist/cli/slash/team.d.ts.map +1 -0
  110. package/dist/cli/slash/team.js +85 -0
  111. package/dist/cli/slash/team.js.map +1 -0
  112. package/dist/cli/slash.d.ts +3 -0
  113. package/dist/cli/slash.d.ts.map +1 -0
  114. package/dist/cli/slash.js +8 -0
  115. package/dist/cli/slash.js.map +1 -0
  116. package/dist/cli/teamPipeline.d.ts +42 -0
  117. package/dist/cli/teamPipeline.d.ts.map +1 -0
  118. package/dist/cli/teamPipeline.js +406 -0
  119. package/dist/cli/teamPipeline.js.map +1 -0
  120. package/dist/cli/touchedFiles.d.ts +14 -0
  121. package/dist/cli/touchedFiles.d.ts.map +1 -0
  122. package/dist/cli/touchedFiles.js +66 -0
  123. package/dist/cli/touchedFiles.js.map +1 -0
  124. package/dist/cli/turn.d.ts +47 -0
  125. package/dist/cli/turn.d.ts.map +1 -0
  126. package/dist/cli/turn.js +626 -0
  127. package/dist/cli/turn.js.map +1 -0
  128. package/dist/cli/types.d.ts +47 -0
  129. package/dist/cli/types.d.ts.map +1 -0
  130. package/dist/cli/types.js +5 -0
  131. package/dist/cli/types.js.map +1 -0
  132. package/dist/cli/uiSession.d.ts +10 -0
  133. package/dist/cli/uiSession.d.ts.map +1 -0
  134. package/dist/cli/uiSession.js +66 -0
  135. package/dist/cli/uiSession.js.map +1 -0
  136. package/dist/cli.d.ts +3 -0
  137. package/dist/cli.d.ts.map +1 -0
  138. package/dist/cli.js +128 -0
  139. package/dist/cli.js.map +1 -0
  140. package/dist/core/adapter.d.ts +47 -0
  141. package/dist/core/adapter.d.ts.map +1 -0
  142. package/dist/core/adapter.js +48 -0
  143. package/dist/core/adapter.js.map +1 -0
  144. package/dist/core/adapters/anthropic.d.ts +35 -0
  145. package/dist/core/adapters/anthropic.d.ts.map +1 -0
  146. package/dist/core/adapters/anthropic.js +203 -0
  147. package/dist/core/adapters/anthropic.js.map +1 -0
  148. package/dist/core/adapters/claudeCli.d.ts +126 -0
  149. package/dist/core/adapters/claudeCli.d.ts.map +1 -0
  150. package/dist/core/adapters/claudeCli.js +584 -0
  151. package/dist/core/adapters/claudeCli.js.map +1 -0
  152. package/dist/core/adapters/cliAdapterBase.d.ts +48 -0
  153. package/dist/core/adapters/cliAdapterBase.d.ts.map +1 -0
  154. package/dist/core/adapters/cliAdapterBase.js +105 -0
  155. package/dist/core/adapters/cliAdapterBase.js.map +1 -0
  156. package/dist/core/adapters/cliStderr.d.ts +35 -0
  157. package/dist/core/adapters/cliStderr.d.ts.map +1 -0
  158. package/dist/core/adapters/cliStderr.js +87 -0
  159. package/dist/core/adapters/cliStderr.js.map +1 -0
  160. package/dist/core/adapters/codexCli.d.ts +113 -0
  161. package/dist/core/adapters/codexCli.d.ts.map +1 -0
  162. package/dist/core/adapters/codexCli.js +424 -0
  163. package/dist/core/adapters/codexCli.js.map +1 -0
  164. package/dist/core/adapters/gemini.d.ts +17 -0
  165. package/dist/core/adapters/gemini.d.ts.map +1 -0
  166. package/dist/core/adapters/gemini.js +133 -0
  167. package/dist/core/adapters/gemini.js.map +1 -0
  168. package/dist/core/adapters/geminiCli.d.ts +91 -0
  169. package/dist/core/adapters/geminiCli.d.ts.map +1 -0
  170. package/dist/core/adapters/geminiCli.js +276 -0
  171. package/dist/core/adapters/geminiCli.js.map +1 -0
  172. package/dist/core/adapters/nudges.d.ts +21 -0
  173. package/dist/core/adapters/nudges.d.ts.map +1 -0
  174. package/dist/core/adapters/nudges.js +75 -0
  175. package/dist/core/adapters/nudges.js.map +1 -0
  176. package/dist/core/adapters/openai.d.ts +17 -0
  177. package/dist/core/adapters/openai.d.ts.map +1 -0
  178. package/dist/core/adapters/openai.js +138 -0
  179. package/dist/core/adapters/openai.js.map +1 -0
  180. package/dist/core/adapters/parseFailures.d.ts +10 -0
  181. package/dist/core/adapters/parseFailures.d.ts.map +1 -0
  182. package/dist/core/adapters/parseFailures.js +35 -0
  183. package/dist/core/adapters/parseFailures.js.map +1 -0
  184. package/dist/core/adapters/utils.d.ts +11 -0
  185. package/dist/core/adapters/utils.d.ts.map +1 -0
  186. package/dist/core/adapters/utils.js +33 -0
  187. package/dist/core/adapters/utils.js.map +1 -0
  188. package/dist/core/askBroker.d.ts +11 -0
  189. package/dist/core/askBroker.d.ts.map +1 -0
  190. package/dist/core/askBroker.js +78 -0
  191. package/dist/core/askBroker.js.map +1 -0
  192. package/dist/core/atomicWrite.d.ts +5 -0
  193. package/dist/core/atomicWrite.d.ts.map +1 -0
  194. package/dist/core/atomicWrite.js +18 -0
  195. package/dist/core/atomicWrite.js.map +1 -0
  196. package/dist/core/brokers/askBroker.d.ts +11 -0
  197. package/dist/core/brokers/askBroker.d.ts.map +1 -0
  198. package/dist/core/brokers/askBroker.js +78 -0
  199. package/dist/core/brokers/askBroker.js.map +1 -0
  200. package/dist/core/brokers/permissionBroker.d.ts +7 -0
  201. package/dist/core/brokers/permissionBroker.d.ts.map +1 -0
  202. package/dist/core/brokers/permissionBroker.js +63 -0
  203. package/dist/core/brokers/permissionBroker.js.map +1 -0
  204. package/dist/core/brokers/socketBroker.d.ts +35 -0
  205. package/dist/core/brokers/socketBroker.d.ts.map +1 -0
  206. package/dist/core/brokers/socketBroker.js +74 -0
  207. package/dist/core/brokers/socketBroker.js.map +1 -0
  208. package/dist/core/clipboard.d.ts +4 -0
  209. package/dist/core/clipboard.d.ts.map +1 -0
  210. package/dist/core/clipboard.js +46 -0
  211. package/dist/core/clipboard.js.map +1 -0
  212. package/dist/core/compactor.d.ts +32 -0
  213. package/dist/core/compactor.d.ts.map +1 -0
  214. package/dist/core/compactor.js +91 -0
  215. package/dist/core/compactor.js.map +1 -0
  216. package/dist/core/consensusEngine.d.ts +21 -0
  217. package/dist/core/consensusEngine.d.ts.map +1 -0
  218. package/dist/core/consensusEngine.js +116 -0
  219. package/dist/core/consensusEngine.js.map +1 -0
  220. package/dist/core/context/contextCompressor.d.ts +10 -0
  221. package/dist/core/context/contextCompressor.d.ts.map +1 -0
  222. package/dist/core/context/contextCompressor.js +54 -0
  223. package/dist/core/context/contextCompressor.js.map +1 -0
  224. package/dist/core/context/contextWindows.d.ts +25 -0
  225. package/dist/core/context/contextWindows.d.ts.map +1 -0
  226. package/dist/core/context/contextWindows.js +101 -0
  227. package/dist/core/context/contextWindows.js.map +1 -0
  228. package/dist/core/context/summarizer.d.ts +65 -0
  229. package/dist/core/context/summarizer.d.ts.map +1 -0
  230. package/dist/core/context/summarizer.js +184 -0
  231. package/dist/core/context/summarizer.js.map +1 -0
  232. package/dist/core/context/usageCache.d.ts +19 -0
  233. package/dist/core/context/usageCache.d.ts.map +1 -0
  234. package/dist/core/context/usageCache.js +157 -0
  235. package/dist/core/context/usageCache.js.map +1 -0
  236. package/dist/core/context/usageWindow.d.ts +19 -0
  237. package/dist/core/context/usageWindow.d.ts.map +1 -0
  238. package/dist/core/context/usageWindow.js +73 -0
  239. package/dist/core/context/usageWindow.js.map +1 -0
  240. package/dist/core/contextCompressor.d.ts +10 -0
  241. package/dist/core/contextCompressor.d.ts.map +1 -0
  242. package/dist/core/contextCompressor.js +54 -0
  243. package/dist/core/contextCompressor.js.map +1 -0
  244. package/dist/core/contextWindows.d.ts +5 -0
  245. package/dist/core/contextWindows.d.ts.map +1 -0
  246. package/dist/core/contextWindows.js +60 -0
  247. package/dist/core/contextWindows.js.map +1 -0
  248. package/dist/core/continuum/digest.d.ts +35 -0
  249. package/dist/core/continuum/digest.d.ts.map +1 -0
  250. package/dist/core/continuum/digest.js +91 -0
  251. package/dist/core/continuum/digest.js.map +1 -0
  252. package/dist/core/continuum/index.d.ts +6 -0
  253. package/dist/core/continuum/index.d.ts.map +1 -0
  254. package/dist/core/continuum/index.js +7 -0
  255. package/dist/core/continuum/index.js.map +1 -0
  256. package/dist/core/continuum/inject.d.ts +9 -0
  257. package/dist/core/continuum/inject.d.ts.map +1 -0
  258. package/dist/core/continuum/inject.js +78 -0
  259. package/dist/core/continuum/inject.js.map +1 -0
  260. package/dist/core/continuum/projectId.d.ts +10 -0
  261. package/dist/core/continuum/projectId.d.ts.map +1 -0
  262. package/dist/core/continuum/projectId.js +60 -0
  263. package/dist/core/continuum/projectId.js.map +1 -0
  264. package/dist/core/continuum/store.d.ts +24 -0
  265. package/dist/core/continuum/store.d.ts.map +1 -0
  266. package/dist/core/continuum/store.js +144 -0
  267. package/dist/core/continuum/store.js.map +1 -0
  268. package/dist/core/continuum/types.d.ts +87 -0
  269. package/dist/core/continuum/types.d.ts.map +1 -0
  270. package/dist/core/continuum/types.js +9 -0
  271. package/dist/core/continuum/types.js.map +1 -0
  272. package/dist/core/dag.d.ts +21 -0
  273. package/dist/core/dag.d.ts.map +1 -0
  274. package/dist/core/dag.js +71 -0
  275. package/dist/core/dag.js.map +1 -0
  276. package/dist/core/director.d.ts +11 -0
  277. package/dist/core/director.d.ts.map +1 -0
  278. package/dist/core/director.js +37 -0
  279. package/dist/core/director.js.map +1 -0
  280. package/dist/core/hookedToolBroker.d.ts +25 -0
  281. package/dist/core/hookedToolBroker.d.ts.map +1 -0
  282. package/dist/core/hookedToolBroker.js +95 -0
  283. package/dist/core/hookedToolBroker.js.map +1 -0
  284. package/dist/core/langHint.d.ts +9 -0
  285. package/dist/core/langHint.d.ts.map +1 -0
  286. package/dist/core/langHint.js +33 -0
  287. package/dist/core/langHint.js.map +1 -0
  288. package/dist/core/mcp/mcpClient.d.ts +42 -0
  289. package/dist/core/mcp/mcpClient.d.ts.map +1 -0
  290. package/dist/core/mcp/mcpClient.js +134 -0
  291. package/dist/core/mcp/mcpClient.js.map +1 -0
  292. package/dist/core/mcp/mcpConfig.d.ts +58 -0
  293. package/dist/core/mcp/mcpConfig.d.ts.map +1 -0
  294. package/dist/core/mcp/mcpConfig.js +148 -0
  295. package/dist/core/mcp/mcpConfig.js.map +1 -0
  296. package/dist/core/mcp/mcpManager.d.ts +31 -0
  297. package/dist/core/mcp/mcpManager.d.ts.map +1 -0
  298. package/dist/core/mcp/mcpManager.js +83 -0
  299. package/dist/core/mcp/mcpManager.js.map +1 -0
  300. package/dist/core/mcpClient.d.ts +42 -0
  301. package/dist/core/mcpClient.d.ts.map +1 -0
  302. package/dist/core/mcpClient.js +134 -0
  303. package/dist/core/mcpClient.js.map +1 -0
  304. package/dist/core/mcpConfig.d.ts +24 -0
  305. package/dist/core/mcpConfig.d.ts.map +1 -0
  306. package/dist/core/mcpConfig.js +74 -0
  307. package/dist/core/mcpConfig.js.map +1 -0
  308. package/dist/core/mcpManager.d.ts +31 -0
  309. package/dist/core/mcpManager.d.ts.map +1 -0
  310. package/dist/core/mcpManager.js +83 -0
  311. package/dist/core/mcpManager.js.map +1 -0
  312. package/dist/core/memory.d.ts +22 -0
  313. package/dist/core/memory.d.ts.map +1 -0
  314. package/dist/core/memory.js +102 -0
  315. package/dist/core/memory.js.map +1 -0
  316. package/dist/core/omgToolManifest.d.ts +34 -0
  317. package/dist/core/omgToolManifest.d.ts.map +1 -0
  318. package/dist/core/omgToolManifest.js +59 -0
  319. package/dist/core/omgToolManifest.js.map +1 -0
  320. package/dist/core/orchestration/consensusEngine.d.ts +21 -0
  321. package/dist/core/orchestration/consensusEngine.d.ts.map +1 -0
  322. package/dist/core/orchestration/consensusEngine.js +116 -0
  323. package/dist/core/orchestration/consensusEngine.js.map +1 -0
  324. package/dist/core/orchestration/dag.d.ts +21 -0
  325. package/dist/core/orchestration/dag.d.ts.map +1 -0
  326. package/dist/core/orchestration/dag.js +71 -0
  327. package/dist/core/orchestration/dag.js.map +1 -0
  328. package/dist/core/orchestration/director.d.ts +11 -0
  329. package/dist/core/orchestration/director.d.ts.map +1 -0
  330. package/dist/core/orchestration/director.js +37 -0
  331. package/dist/core/orchestration/director.js.map +1 -0
  332. package/dist/core/orchestration/orchestrator.d.ts +32 -0
  333. package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
  334. package/dist/core/orchestration/orchestrator.js +214 -0
  335. package/dist/core/orchestration/orchestrator.js.map +1 -0
  336. package/dist/core/orchestration/roleRouter.d.ts +28 -0
  337. package/dist/core/orchestration/roleRouter.d.ts.map +1 -0
  338. package/dist/core/orchestration/roleRouter.js +64 -0
  339. package/dist/core/orchestration/roleRouter.js.map +1 -0
  340. package/dist/core/orchestration/teamRunner.d.ts +69 -0
  341. package/dist/core/orchestration/teamRunner.d.ts.map +1 -0
  342. package/dist/core/orchestration/teamRunner.js +477 -0
  343. package/dist/core/orchestration/teamRunner.js.map +1 -0
  344. package/dist/core/orchestration/types.d.ts +115 -0
  345. package/dist/core/orchestration/types.d.ts.map +1 -0
  346. package/dist/core/orchestration/types.js +71 -0
  347. package/dist/core/orchestration/types.js.map +1 -0
  348. package/dist/core/orchestrator.d.ts +32 -0
  349. package/dist/core/orchestrator.d.ts.map +1 -0
  350. package/dist/core/orchestrator.js +214 -0
  351. package/dist/core/orchestrator.js.map +1 -0
  352. package/dist/core/permissionBroker.d.ts +7 -0
  353. package/dist/core/permissionBroker.d.ts.map +1 -0
  354. package/dist/core/permissionBroker.js +63 -0
  355. package/dist/core/permissionBroker.js.map +1 -0
  356. package/dist/core/planConfig.d.ts +15 -0
  357. package/dist/core/planConfig.d.ts.map +1 -0
  358. package/dist/core/planConfig.js +98 -0
  359. package/dist/core/planConfig.js.map +1 -0
  360. package/dist/core/presetPersistence.d.ts +4 -0
  361. package/dist/core/presetPersistence.d.ts.map +1 -0
  362. package/dist/core/presetPersistence.js +64 -0
  363. package/dist/core/presetPersistence.js.map +1 -0
  364. package/dist/core/roleRouter.d.ts +26 -0
  365. package/dist/core/roleRouter.d.ts.map +1 -0
  366. package/dist/core/roleRouter.js +62 -0
  367. package/dist/core/roleRouter.js.map +1 -0
  368. package/dist/core/sessionList.d.ts +26 -0
  369. package/dist/core/sessionList.d.ts.map +1 -0
  370. package/dist/core/sessionList.js +278 -0
  371. package/dist/core/sessionList.js.map +1 -0
  372. package/dist/core/slugify.d.ts +2 -0
  373. package/dist/core/slugify.d.ts.map +1 -0
  374. package/dist/core/slugify.js +17 -0
  375. package/dist/core/slugify.js.map +1 -0
  376. package/dist/core/socketBroker.d.ts +19 -0
  377. package/dist/core/socketBroker.d.ts.map +1 -0
  378. package/dist/core/socketBroker.js +48 -0
  379. package/dist/core/socketBroker.js.map +1 -0
  380. package/dist/core/state/agentsMdScaffold.d.ts +15 -0
  381. package/dist/core/state/agentsMdScaffold.d.ts.map +1 -0
  382. package/dist/core/state/agentsMdScaffold.js +118 -0
  383. package/dist/core/state/agentsMdScaffold.js.map +1 -0
  384. package/dist/core/state/atomicWrite.d.ts +5 -0
  385. package/dist/core/state/atomicWrite.d.ts.map +1 -0
  386. package/dist/core/state/atomicWrite.js +18 -0
  387. package/dist/core/state/atomicWrite.js.map +1 -0
  388. package/dist/core/state/handoff.d.ts +20 -0
  389. package/dist/core/state/handoff.d.ts.map +1 -0
  390. package/dist/core/state/handoff.js +71 -0
  391. package/dist/core/state/handoff.js.map +1 -0
  392. package/dist/core/state/mcpCatalog.d.ts +11 -0
  393. package/dist/core/state/mcpCatalog.d.ts.map +1 -0
  394. package/dist/core/state/mcpCatalog.js +51 -0
  395. package/dist/core/state/mcpCatalog.js.map +1 -0
  396. package/dist/core/state/mcpRecommendations.d.ts +7 -0
  397. package/dist/core/state/mcpRecommendations.d.ts.map +1 -0
  398. package/dist/core/state/mcpRecommendations.js +57 -0
  399. package/dist/core/state/mcpRecommendations.js.map +1 -0
  400. package/dist/core/state/memory.d.ts +22 -0
  401. package/dist/core/state/memory.d.ts.map +1 -0
  402. package/dist/core/state/memory.js +102 -0
  403. package/dist/core/state/memory.js.map +1 -0
  404. package/dist/core/state/planConfig.d.ts +15 -0
  405. package/dist/core/state/planConfig.d.ts.map +1 -0
  406. package/dist/core/state/planConfig.js +98 -0
  407. package/dist/core/state/planConfig.js.map +1 -0
  408. package/dist/core/state/presetPersistence.d.ts +4 -0
  409. package/dist/core/state/presetPersistence.d.ts.map +1 -0
  410. package/dist/core/state/presetPersistence.js +67 -0
  411. package/dist/core/state/presetPersistence.js.map +1 -0
  412. package/dist/core/state/sessionList.d.ts +26 -0
  413. package/dist/core/state/sessionList.d.ts.map +1 -0
  414. package/dist/core/state/sessionList.js +278 -0
  415. package/dist/core/state/sessionList.js.map +1 -0
  416. package/dist/core/state/stackDetect.d.ts +8 -0
  417. package/dist/core/state/stackDetect.d.ts.map +1 -0
  418. package/dist/core/state/stackDetect.js +40 -0
  419. package/dist/core/state/stackDetect.js.map +1 -0
  420. package/dist/core/state/tabPersistence.d.ts +29 -0
  421. package/dist/core/state/tabPersistence.d.ts.map +1 -0
  422. package/dist/core/state/tabPersistence.js +65 -0
  423. package/dist/core/state/tabPersistence.js.map +1 -0
  424. package/dist/core/tabPersistence.d.ts +29 -0
  425. package/dist/core/tabPersistence.d.ts.map +1 -0
  426. package/dist/core/tabPersistence.js +65 -0
  427. package/dist/core/tabPersistence.js.map +1 -0
  428. package/dist/core/teamRunner.d.ts +42 -0
  429. package/dist/core/teamRunner.d.ts.map +1 -0
  430. package/dist/core/teamRunner.js +248 -0
  431. package/dist/core/teamRunner.js.map +1 -0
  432. package/dist/core/toolGate.d.ts +23 -0
  433. package/dist/core/toolGate.d.ts.map +1 -0
  434. package/dist/core/toolGate.js +51 -0
  435. package/dist/core/toolGate.js.map +1 -0
  436. package/dist/core/toolInterceptor.d.ts +7 -0
  437. package/dist/core/toolInterceptor.d.ts.map +1 -0
  438. package/dist/core/toolInterceptor.js +108 -0
  439. package/dist/core/toolInterceptor.js.map +1 -0
  440. package/dist/core/tools/hookedToolBroker.d.ts +25 -0
  441. package/dist/core/tools/hookedToolBroker.d.ts.map +1 -0
  442. package/dist/core/tools/hookedToolBroker.js +95 -0
  443. package/dist/core/tools/hookedToolBroker.js.map +1 -0
  444. package/dist/core/tools/omgToolManifest.d.ts +42 -0
  445. package/dist/core/tools/omgToolManifest.d.ts.map +1 -0
  446. package/dist/core/tools/omgToolManifest.js +66 -0
  447. package/dist/core/tools/omgToolManifest.js.map +1 -0
  448. package/dist/core/tools/toolGate.d.ts +23 -0
  449. package/dist/core/tools/toolGate.d.ts.map +1 -0
  450. package/dist/core/tools/toolGate.js +51 -0
  451. package/dist/core/tools/toolGate.js.map +1 -0
  452. package/dist/core/tools/toolInterceptor.d.ts +7 -0
  453. package/dist/core/tools/toolInterceptor.d.ts.map +1 -0
  454. package/dist/core/tools/toolInterceptor.js +108 -0
  455. package/dist/core/tools/toolInterceptor.js.map +1 -0
  456. package/dist/core/tools/tools.d.ts +34 -0
  457. package/dist/core/tools/tools.d.ts.map +1 -0
  458. package/dist/core/tools/tools.js +328 -0
  459. package/dist/core/tools/tools.js.map +1 -0
  460. package/dist/core/tools.d.ts +34 -0
  461. package/dist/core/tools.d.ts.map +1 -0
  462. package/dist/core/tools.js +300 -0
  463. package/dist/core/tools.js.map +1 -0
  464. package/dist/core/types.d.ts +107 -0
  465. package/dist/core/types.d.ts.map +1 -0
  466. package/dist/core/types.js +55 -0
  467. package/dist/core/types.js.map +1 -0
  468. package/dist/core/usageCache.d.ts +19 -0
  469. package/dist/core/usageCache.d.ts.map +1 -0
  470. package/dist/core/usageCache.js +157 -0
  471. package/dist/core/usageCache.js.map +1 -0
  472. package/dist/core/usageWindow.d.ts +19 -0
  473. package/dist/core/usageWindow.d.ts.map +1 -0
  474. package/dist/core/usageWindow.js +73 -0
  475. package/dist/core/usageWindow.js.map +1 -0
  476. package/dist/core/util/bgProtocol.d.ts +5 -0
  477. package/dist/core/util/bgProtocol.d.ts.map +1 -0
  478. package/dist/core/util/bgProtocol.js +20 -0
  479. package/dist/core/util/bgProtocol.js.map +1 -0
  480. package/dist/core/util/clipboard.d.ts +4 -0
  481. package/dist/core/util/clipboard.d.ts.map +1 -0
  482. package/dist/core/util/clipboard.js +46 -0
  483. package/dist/core/util/clipboard.js.map +1 -0
  484. package/dist/core/util/clipboardImage.d.ts +3 -0
  485. package/dist/core/util/clipboardImage.d.ts.map +1 -0
  486. package/dist/core/util/clipboardImage.js +58 -0
  487. package/dist/core/util/clipboardImage.js.map +1 -0
  488. package/dist/core/util/langHint.d.ts +9 -0
  489. package/dist/core/util/langHint.d.ts.map +1 -0
  490. package/dist/core/util/langHint.js +33 -0
  491. package/dist/core/util/langHint.js.map +1 -0
  492. package/dist/core/util/slugify.d.ts +2 -0
  493. package/dist/core/util/slugify.d.ts.map +1 -0
  494. package/dist/core/util/slugify.js +28 -0
  495. package/dist/core/util/slugify.js.map +1 -0
  496. package/dist/hooks/hookedToolProxy.mjs +118 -0
  497. package/dist/index.d.ts +2 -0
  498. package/dist/index.d.ts.map +1 -0
  499. package/dist/index.js +8 -0
  500. package/dist/index.js.map +1 -0
  501. package/dist/ipc/dispatcher.d.ts +21 -0
  502. package/dist/ipc/dispatcher.d.ts.map +1 -0
  503. package/dist/ipc/dispatcher.js +160 -0
  504. package/dist/ipc/dispatcher.js.map +1 -0
  505. package/dist/ipc/events.d.ts +33 -0
  506. package/dist/ipc/events.d.ts.map +1 -0
  507. package/dist/ipc/events.js +42 -0
  508. package/dist/ipc/events.js.map +1 -0
  509. package/dist/ipc/rpc.d.ts +31 -0
  510. package/dist/ipc/rpc.d.ts.map +1 -0
  511. package/dist/ipc/rpc.js +110 -0
  512. package/dist/ipc/rpc.js.map +1 -0
  513. package/dist/ipc/stdio.d.ts +11 -0
  514. package/dist/ipc/stdio.d.ts.map +1 -0
  515. package/dist/ipc/stdio.js +52 -0
  516. package/dist/ipc/stdio.js.map +1 -0
  517. package/dist/mcp/askClient.d.ts +9 -0
  518. package/dist/mcp/askClient.d.ts.map +1 -0
  519. package/dist/mcp/askClient.js +70 -0
  520. package/dist/mcp/askClient.js.map +1 -0
  521. package/dist/mcp/constants.d.ts +6 -0
  522. package/dist/mcp/constants.d.ts.map +1 -0
  523. package/dist/mcp/constants.js +8 -0
  524. package/dist/mcp/constants.js.map +1 -0
  525. package/dist/mcp/permissionClient.d.ts +5 -0
  526. package/dist/mcp/permissionClient.d.ts.map +1 -0
  527. package/dist/mcp/permissionClient.js +71 -0
  528. package/dist/mcp/permissionClient.js.map +1 -0
  529. package/dist/mcp/schemas.d.ts +9 -0
  530. package/dist/mcp/schemas.d.ts.map +1 -0
  531. package/dist/mcp/schemas.js +121 -0
  532. package/dist/mcp/schemas.js.map +1 -0
  533. package/dist/mcp/server.d.ts +41 -0
  534. package/dist/mcp/server.d.ts.map +1 -0
  535. package/dist/mcp/server.js +204 -0
  536. package/dist/mcp/server.js.map +1 -0
  537. package/dist/policy/loader.d.ts +27 -0
  538. package/dist/policy/loader.d.ts.map +1 -0
  539. package/dist/policy/loader.js +89 -0
  540. package/dist/policy/loader.js.map +1 -0
  541. package/dist/policy/team-claude-only.yaml +46 -0
  542. package/dist/policy/team-codex-only.yaml +46 -0
  543. package/dist/policy/team-codex.yaml +54 -0
  544. package/dist/policy/team.yaml +104 -0
  545. package/dist/toolhook/hookedToolProxy.mjs +118 -0
  546. package/dist/ui/components/App.d.ts +14 -0
  547. package/dist/ui/components/App.d.ts.map +1 -0
  548. package/dist/ui/components/App.js +803 -0
  549. package/dist/ui/components/App.js.map +1 -0
  550. package/dist/ui/components/AskPicker.d.ts +8 -0
  551. package/dist/ui/components/AskPicker.d.ts.map +1 -0
  552. package/dist/ui/components/AskPicker.js +202 -0
  553. package/dist/ui/components/AskPicker.js.map +1 -0
  554. package/dist/ui/components/CommandInput.d.ts +63 -0
  555. package/dist/ui/components/CommandInput.d.ts.map +1 -0
  556. package/dist/ui/components/CommandInput.js +994 -0
  557. package/dist/ui/components/CommandInput.js.map +1 -0
  558. package/dist/ui/components/DiffView.d.ts +19 -0
  559. package/dist/ui/components/DiffView.d.ts.map +1 -0
  560. package/dist/ui/components/DiffView.js +93 -0
  561. package/dist/ui/components/DiffView.js.map +1 -0
  562. package/dist/ui/components/Dock.d.ts +49 -0
  563. package/dist/ui/components/Dock.d.ts.map +1 -0
  564. package/dist/ui/components/Dock.js +52 -0
  565. package/dist/ui/components/Dock.js.map +1 -0
  566. package/dist/ui/components/EventLog.d.ts +42 -0
  567. package/dist/ui/components/EventLog.d.ts.map +1 -0
  568. package/dist/ui/components/EventLog.js +450 -0
  569. package/dist/ui/components/EventLog.js.map +1 -0
  570. package/dist/ui/components/FileSuggest.d.ts +8 -0
  571. package/dist/ui/components/FileSuggest.d.ts.map +1 -0
  572. package/dist/ui/components/FileSuggest.js +19 -0
  573. package/dist/ui/components/FileSuggest.js.map +1 -0
  574. package/dist/ui/components/HRule.d.ts +27 -0
  575. package/dist/ui/components/HRule.d.ts.map +1 -0
  576. package/dist/ui/components/HRule.js +75 -0
  577. package/dist/ui/components/HRule.js.map +1 -0
  578. package/dist/ui/components/HintBar.d.ts +2 -0
  579. package/dist/ui/components/HintBar.d.ts.map +1 -0
  580. package/dist/ui/components/HintBar.js +19 -0
  581. package/dist/ui/components/HintBar.js.map +1 -0
  582. package/dist/ui/components/MarkdownText.d.ts +13 -0
  583. package/dist/ui/components/MarkdownText.d.ts.map +1 -0
  584. package/dist/ui/components/MarkdownText.js +255 -0
  585. package/dist/ui/components/MarkdownText.js.map +1 -0
  586. package/dist/ui/components/PermissionPrompt.d.ts +8 -0
  587. package/dist/ui/components/PermissionPrompt.d.ts.map +1 -0
  588. package/dist/ui/components/PermissionPrompt.js +37 -0
  589. package/dist/ui/components/PermissionPrompt.js.map +1 -0
  590. package/dist/ui/components/SessionPicker.d.ts +16 -0
  591. package/dist/ui/components/SessionPicker.d.ts.map +1 -0
  592. package/dist/ui/components/SessionPicker.js +116 -0
  593. package/dist/ui/components/SessionPicker.js.map +1 -0
  594. package/dist/ui/components/SlashPalette.d.ts +8 -0
  595. package/dist/ui/components/SlashPalette.d.ts.map +1 -0
  596. package/dist/ui/components/SlashPalette.js +41 -0
  597. package/dist/ui/components/SlashPalette.js.map +1 -0
  598. package/dist/ui/components/Spinner.d.ts +37 -0
  599. package/dist/ui/components/Spinner.d.ts.map +1 -0
  600. package/dist/ui/components/Spinner.js +139 -0
  601. package/dist/ui/components/Spinner.js.map +1 -0
  602. package/dist/ui/components/StatusBar.d.ts +92 -0
  603. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  604. package/dist/ui/components/StatusBar.js +268 -0
  605. package/dist/ui/components/StatusBar.js.map +1 -0
  606. package/dist/ui/components/TabChip.d.ts +11 -0
  607. package/dist/ui/components/TabChip.d.ts.map +1 -0
  608. package/dist/ui/components/TabChip.js +23 -0
  609. package/dist/ui/components/TabChip.js.map +1 -0
  610. package/dist/ui/components/TeamIndicator.d.ts +6 -0
  611. package/dist/ui/components/TeamIndicator.d.ts.map +1 -0
  612. package/dist/ui/components/TeamIndicator.js +17 -0
  613. package/dist/ui/components/TeamIndicator.js.map +1 -0
  614. package/dist/ui/components/TeamStatusPanel.d.ts +14 -0
  615. package/dist/ui/components/TeamStatusPanel.d.ts.map +1 -0
  616. package/dist/ui/components/TeamStatusPanel.js +65 -0
  617. package/dist/ui/components/TeamStatusPanel.js.map +1 -0
  618. package/dist/ui/components/ThinkingBlock.d.ts +10 -0
  619. package/dist/ui/components/ThinkingBlock.d.ts.map +1 -0
  620. package/dist/ui/components/ThinkingBlock.js +21 -0
  621. package/dist/ui/components/ThinkingBlock.js.map +1 -0
  622. package/dist/ui/components/TodoIndicator.d.ts +11 -0
  623. package/dist/ui/components/TodoIndicator.d.ts.map +1 -0
  624. package/dist/ui/components/TodoIndicator.js +37 -0
  625. package/dist/ui/components/TodoIndicator.js.map +1 -0
  626. package/dist/ui/components/ToolCallCard.d.ts +16 -0
  627. package/dist/ui/components/ToolCallCard.d.ts.map +1 -0
  628. package/dist/ui/components/ToolCallCard.js +195 -0
  629. package/dist/ui/components/ToolCallCard.js.map +1 -0
  630. package/dist/ui/components/Welcome.d.ts +8 -0
  631. package/dist/ui/components/Welcome.d.ts.map +1 -0
  632. package/dist/ui/components/Welcome.js +53 -0
  633. package/dist/ui/components/Welcome.js.map +1 -0
  634. package/dist/ui/cursorState.d.ts +29 -0
  635. package/dist/ui/cursorState.d.ts.map +1 -0
  636. package/dist/ui/cursorState.js +49 -0
  637. package/dist/ui/cursorState.js.map +1 -0
  638. package/dist/ui/diff.d.ts +34 -0
  639. package/dist/ui/diff.d.ts.map +1 -0
  640. package/dist/ui/diff.js +184 -0
  641. package/dist/ui/diff.js.map +1 -0
  642. package/dist/ui/diffLang.d.ts +2 -0
  643. package/dist/ui/diffLang.d.ts.map +1 -0
  644. package/dist/ui/diffLang.js +36 -0
  645. package/dist/ui/diffLang.js.map +1 -0
  646. package/dist/ui/emoji.d.ts +4 -0
  647. package/dist/ui/emoji.d.ts.map +1 -0
  648. package/dist/ui/emoji.js +73 -0
  649. package/dist/ui/emoji.js.map +1 -0
  650. package/dist/ui/fileMentions.d.ts +41 -0
  651. package/dist/ui/fileMentions.d.ts.map +1 -0
  652. package/dist/ui/fileMentions.js +135 -0
  653. package/dist/ui/fileMentions.js.map +1 -0
  654. package/dist/ui/hooks/useLineEditor.d.ts +44 -0
  655. package/dist/ui/hooks/useLineEditor.d.ts.map +1 -0
  656. package/dist/ui/hooks/useLineEditor.js +142 -0
  657. package/dist/ui/hooks/useLineEditor.js.map +1 -0
  658. package/dist/ui/inputHistory.d.ts +8 -0
  659. package/dist/ui/inputHistory.d.ts.map +1 -0
  660. package/dist/ui/inputHistory.js +56 -0
  661. package/dist/ui/inputHistory.js.map +1 -0
  662. package/dist/ui/jsonrpc.d.ts +17 -0
  663. package/dist/ui/jsonrpc.d.ts.map +1 -0
  664. package/dist/ui/jsonrpc.js +41 -0
  665. package/dist/ui/jsonrpc.js.map +1 -0
  666. package/dist/ui/launcher.d.ts +20 -0
  667. package/dist/ui/launcher.d.ts.map +1 -0
  668. package/dist/ui/launcher.js +185 -0
  669. package/dist/ui/launcher.js.map +1 -0
  670. package/dist/ui/markdown.d.ts +104 -0
  671. package/dist/ui/markdown.d.ts.map +1 -0
  672. package/dist/ui/markdown.js +449 -0
  673. package/dist/ui/markdown.js.map +1 -0
  674. package/dist/ui/mouse.d.ts +22 -0
  675. package/dist/ui/mouse.d.ts.map +1 -0
  676. package/dist/ui/mouse.js +31 -0
  677. package/dist/ui/mouse.js.map +1 -0
  678. package/dist/ui/outbound.d.ts +20 -0
  679. package/dist/ui/outbound.d.ts.map +1 -0
  680. package/dist/ui/outbound.js +49 -0
  681. package/dist/ui/outbound.js.map +1 -0
  682. package/dist/ui/screenMode.d.ts +25 -0
  683. package/dist/ui/screenMode.d.ts.map +1 -0
  684. package/dist/ui/screenMode.js +43 -0
  685. package/dist/ui/screenMode.js.map +1 -0
  686. package/dist/ui/slashCatalog.d.ts +18 -0
  687. package/dist/ui/slashCatalog.d.ts.map +1 -0
  688. package/dist/ui/slashCatalog.js +243 -0
  689. package/dist/ui/slashCatalog.js.map +1 -0
  690. package/dist/ui/syntax.d.ts +11 -0
  691. package/dist/ui/syntax.d.ts.map +1 -0
  692. package/dist/ui/syntax.js +78 -0
  693. package/dist/ui/syntax.js.map +1 -0
  694. package/dist/ui/theme.d.ts +165 -0
  695. package/dist/ui/theme.d.ts.map +1 -0
  696. package/dist/ui/theme.js +394 -0
  697. package/dist/ui/theme.js.map +1 -0
  698. package/dist/ui/types.d.ts +203 -0
  699. package/dist/ui/types.d.ts.map +1 -0
  700. package/dist/ui/types.js +53 -0
  701. package/dist/ui/types.js.map +1 -0
  702. package/package.json +104 -0
@@ -0,0 +1,91 @@
1
+ import { type ParseFailuresHolder } from "./parseFailures.js";
2
+ import { type OmgToolsConfig } from "../tools/omgToolManifest.js";
3
+ import { type AdapterInput, type Chunk } from "../orchestration/types.js";
4
+ import type { LLMAdapter } from "../adapter.js";
5
+ export interface GeminiCliAdapterOpts {
6
+ command?: string;
7
+ model?: string;
8
+ /** Phase 17-e: any non-empty value enables `--yolo` (auto-approve
9
+ * all CLI-native tool calls). For finer control, use extraArgs to
10
+ * pass --allowed-tools or --approval-mode directly. */
11
+ cliTools?: string;
12
+ /** When true, every stderr line passes through. Default false
13
+ * filters known noise ("YOLO mode is enabled", "Ripgrep is not
14
+ * available", deprecation warnings). */
15
+ verboseStderr?: boolean;
16
+ /** Phase 19: when true, capture `session_id` from the init envelope
17
+ * on the first call, and pass `--resume <id>` plus only the last
18
+ * user message on subsequent calls. */
19
+ enableSessionResume?: boolean;
20
+ /** Phase 37: invoked when a stderr line announces a rate-limit
21
+ * retry (gemini emits "Retrying after Nms..." regularly). The
22
+ * UI surfaces this as a countdown in the status bar. */
23
+ onThrottle?: (info: {
24
+ resetMs: number;
25
+ reason: string;
26
+ }) => void;
27
+ /** Phase 54: per-spawn working directory. */
28
+ cwd?: string;
29
+ /** Phase 17-f follow-up: ensure omg is registered as an MCP server
30
+ * in `~/.gemini/settings.json` (user scope) before each call and
31
+ * switch the CLI to yolo so the model can call the MCP tool
32
+ * without an approval prompt. Tier is picked by .writable /
33
+ * .shell. The settings entry is idempotent — once written, it
34
+ * stays put.
35
+ *
36
+ * We deliberately don't use the project-local
37
+ * `<cwd>/.gemini/settings.json`: gemini's trust gate ignores
38
+ * project mcpServers unless the directory is permanently marked
39
+ * trusted, which `--skip-trust` does not flip on. User scope is
40
+ * the only path that works headlessly.
41
+ *
42
+ * `settingsPath` overrides the location (used by tests). */
43
+ omgTools?: OmgToolsConfig & {
44
+ settingsPath?: string;
45
+ };
46
+ extraArgs?: readonly string[];
47
+ }
48
+ export declare class GeminiCliAdapter implements LLMAdapter {
49
+ private readonly opts;
50
+ readonly provider = "gemini-cli";
51
+ /** Phase 19: captured from the init envelope on the first call. */
52
+ private sessionId;
53
+ /** Phase 21: live child handle for cancel(). */
54
+ private currentChild;
55
+ constructor(opts?: GeminiCliAdapterOpts);
56
+ get currentSessionId(): string | undefined;
57
+ setCwd(cwd: string): void;
58
+ restoreSession(sessionId: string): void;
59
+ setModel(model: string): void;
60
+ resetSession(): void;
61
+ cancel(): void;
62
+ private promptFor;
63
+ stream(input: AdapterInput): AsyncIterable<Chunk>;
64
+ /** Public for testing. With resume on and a captured id, adds
65
+ * `--resume <id>`; without an id, leaves it off and the init
66
+ * envelope's session_id is captured for next time. */
67
+ buildArgs(prompt: string): string[];
68
+ }
69
+ /** Merge `mcpServers.omg = { command, args }` into the project's
70
+ * `.gemini/settings.json`. Idempotent: if the existing entry
71
+ * matches the desired shape, no write. */
72
+ export declare function ensureGeminiOmgServer(opts: OmgToolsConfig & {
73
+ settingsPath?: string;
74
+ }): void;
75
+ /** Transform Gemini CLI envelope lines into omg Chunks.
76
+ *
77
+ * Envelope variants:
78
+ * init — informational
79
+ * message role:user — echo of prompt; dropped
80
+ * message role:assistant delta:true — TextChunk
81
+ * tool_use {tool_name, tool_id, parameters} — ToolUseStart
82
+ * tool_result {tool_id, status, output} — ToolUseEnd
83
+ * result {status, stats} — StreamEnd
84
+ *
85
+ * Non-JSON lines (Gemini sometimes prints "Ripgrep is not available...")
86
+ * are dropped silently.
87
+ */
88
+ export declare function translateGeminiCliLines(lines: AsyncIterable<string>, sessionHolder?: {
89
+ value: string | undefined;
90
+ }, parseFailures?: ParseFailuresHolder): AsyncIterable<Chunk>;
91
+ //# sourceMappingURL=geminiCli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geminiCli.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/geminiCli.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EAKX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;4DAEwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;6CAEyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;4CAEwC;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;6DAEyD;IACzD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;iEAa6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,qBAAa,gBAAiB,YAAW,UAAU;IAQrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,QAAQ,CAAC,QAAQ,gBAAgB;IAEjC,mEAAmE;IACnE,OAAO,CAAC,SAAS,CAAiC;IAClD,gDAAgD;IAChD,OAAO,CAAC,YAAY,CAA0D;gBAEjD,IAAI,GAAE,oBAAyB;IAE5D,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEzC;IACD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAGzB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAGvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAG7B,YAAY,IAAI,IAAI;IAIpB,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,SAAS;IAeV,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IAgCxD;;2DAEuD;IACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAiBpC;AAED;;2CAE2C;AAC3C,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,IAAI,CA+CN;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAuB,uBAAuB,CAC5C,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,aAAa,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,CAAC,EAAE,mBAAmB,GAClC,aAAa,CAAC,KAAK,CAAC,CAyFtB"}
@@ -0,0 +1,276 @@
1
+ // Gemini CLI adapter (Phase 17-b).
2
+ //
3
+ // Spawns `gemini -p <prompt> --output-format stream-json --skip-trust`
4
+ // and parses the JSONL envelope. Auth: the CLI's own OAuth session
5
+ // (Google account + Gemini subscription). No API key, no per-request
6
+ // credit (subject to the user's plan's quota).
7
+ //
8
+ // Gemini's envelope:
9
+ // {type:"init", session_id, model}
10
+ // {type:"message", role:"user", content}
11
+ // {type:"message", role:"assistant", content, delta:true}
12
+ // {type:"result", status, stats}
13
+ //
14
+ // `delta:true` on assistant messages indicates each one is an incremental
15
+ // chunk. We emit a TextChunk per non-empty assistant message and a
16
+ // StreamEnd on `result`.
17
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
18
+ import { dirname, join } from "node:path";
19
+ import { homedir } from "node:os";
20
+ import { GEMINI_NOISE_PATTERNS } from "./cliStderr.js";
21
+ import { recordParseFailure, } from "./parseFailures.js";
22
+ import { runCliAdapterStream } from "./cliAdapterBase.js";
23
+ import { buildOmgServerSpec, } from "../tools/omgToolManifest.js";
24
+ import { flattenConversation, streamEnd, text as textChunk, usage, } from "../orchestration/types.js";
25
+ import { isObject } from "./utils.js";
26
+ export class GeminiCliAdapter {
27
+ opts;
28
+ provider = "gemini-cli";
29
+ /** Phase 19: captured from the init envelope on the first call. */
30
+ sessionId = undefined;
31
+ /** Phase 21: live child handle for cancel(). */
32
+ currentChild = null;
33
+ constructor(opts = {}) {
34
+ this.opts = opts;
35
+ }
36
+ get currentSessionId() {
37
+ return this.sessionId;
38
+ }
39
+ setCwd(cwd) {
40
+ this.opts.cwd = cwd;
41
+ }
42
+ restoreSession(sessionId) {
43
+ this.sessionId = sessionId;
44
+ }
45
+ setModel(model) {
46
+ this.opts.model = model;
47
+ }
48
+ resetSession() {
49
+ this.sessionId = undefined;
50
+ }
51
+ cancel() {
52
+ if (this.currentChild && !this.currentChild.killed) {
53
+ this.currentChild.kill("SIGTERM");
54
+ }
55
+ }
56
+ promptFor(input) {
57
+ if (this.opts.enableSessionResume &&
58
+ this.sessionId !== undefined &&
59
+ typeof input !== "string") {
60
+ const messages = input.messages;
61
+ for (let i = messages.length - 1; i >= 0; i--) {
62
+ const m = messages[i];
63
+ if (m.role === "user")
64
+ return m.text;
65
+ }
66
+ }
67
+ return inputToPrompt(input);
68
+ }
69
+ async *stream(input) {
70
+ if (this.opts.omgTools) {
71
+ // Gemini doesn't accept an inline MCP config on the command
72
+ // line — it reads `<cwd>/.gemini/settings.json`. Touch the
73
+ // file before spawning so the registration is in place when
74
+ // gemini boots.
75
+ ensureGeminiOmgServer(this.opts.omgTools);
76
+ }
77
+ const prompt = this.promptFor(input);
78
+ const args = this.buildArgs(prompt);
79
+ const childEnv = this.opts.cwd
80
+ ? { ...process.env, OMG_TAB_CWD: this.opts.cwd }
81
+ : process.env;
82
+ yield* runCliAdapterStream({
83
+ command: this.opts.command ?? "gemini",
84
+ args,
85
+ cwd: this.opts.cwd,
86
+ env: childEnv,
87
+ noisePatterns: GEMINI_NOISE_PATTERNS,
88
+ verboseStderr: this.opts.verboseStderr === true,
89
+ onThrottle: this.opts.onThrottle,
90
+ provider: "gemini-cli",
91
+ translate: (rl, sh, pf) => translateGeminiCliLines(rl, sh, pf),
92
+ setChild: (c) => {
93
+ this.currentChild = c;
94
+ },
95
+ onSession: (sid) => {
96
+ if (this.opts.enableSessionResume && sid)
97
+ this.sessionId = sid;
98
+ },
99
+ });
100
+ }
101
+ /** Public for testing. With resume on and a captured id, adds
102
+ * `--resume <id>`; without an id, leaves it off and the init
103
+ * envelope's session_id is captured for next time. */
104
+ buildArgs(prompt) {
105
+ const args = [
106
+ "-p",
107
+ prompt,
108
+ "--output-format",
109
+ "stream-json",
110
+ "--skip-trust",
111
+ ];
112
+ if (this.opts.enableSessionResume && this.sessionId !== undefined) {
113
+ args.push("--resume", this.sessionId);
114
+ }
115
+ if (this.opts.cliTools || this.opts.omgTools)
116
+ args.push("--yolo");
117
+ if (this.opts.omgTools)
118
+ args.push("--allowed-mcp-server-names", "omg");
119
+ if (this.opts.model)
120
+ args.push("--model", this.opts.model);
121
+ if (this.opts.extraArgs)
122
+ args.push(...this.opts.extraArgs);
123
+ return args;
124
+ }
125
+ }
126
+ /** Merge `mcpServers.omg = { command, args }` into the project's
127
+ * `.gemini/settings.json`. Idempotent: if the existing entry
128
+ * matches the desired shape, no write. */
129
+ export function ensureGeminiOmgServer(opts) {
130
+ // Phase 210: canonical manifest. The {command, args} shape is
131
+ // shared with claude + codex; gemini's only addition is the
132
+ // settings.json file location.
133
+ const spec = buildOmgServerSpec(opts);
134
+ const cmd = spec.command;
135
+ const serveArgs = spec.args;
136
+ const path = opts.settingsPath ?? join(homedir(), ".gemini", "settings.json");
137
+ let existing = {};
138
+ if (existsSync(path)) {
139
+ try {
140
+ existing = JSON.parse(readFileSync(path, "utf-8"));
141
+ }
142
+ catch {
143
+ // Corrupt — back up and start fresh so we don't lose the user's
144
+ // file silently.
145
+ try {
146
+ const backup = `${path}.omg-bak`;
147
+ writeFileSync(backup, readFileSync(path));
148
+ }
149
+ catch {
150
+ /* best-effort */
151
+ }
152
+ existing = {};
153
+ }
154
+ }
155
+ const servers = existing.mcpServers && typeof existing.mcpServers === "object"
156
+ ? existing.mcpServers
157
+ : {};
158
+ const current = servers.omg;
159
+ const matches = current !== undefined &&
160
+ current.command === cmd &&
161
+ Array.isArray(current.args) &&
162
+ current.args.length === serveArgs.length &&
163
+ current.args.every((a, i) => a === serveArgs[i]);
164
+ if (matches)
165
+ return;
166
+ servers.omg = { command: cmd, args: serveArgs };
167
+ existing.mcpServers = servers;
168
+ mkdirSync(dirname(path), { recursive: true });
169
+ writeFileSync(path, JSON.stringify(existing, null, 2));
170
+ }
171
+ function inputToPrompt(input) {
172
+ return typeof input === "string" ? input : flattenConversation(input);
173
+ }
174
+ /** Transform Gemini CLI envelope lines into omg Chunks.
175
+ *
176
+ * Envelope variants:
177
+ * init — informational
178
+ * message role:user — echo of prompt; dropped
179
+ * message role:assistant delta:true — TextChunk
180
+ * tool_use {tool_name, tool_id, parameters} — ToolUseStart
181
+ * tool_result {tool_id, status, output} — ToolUseEnd
182
+ * result {status, stats} — StreamEnd
183
+ *
184
+ * Non-JSON lines (Gemini sometimes prints "Ripgrep is not available...")
185
+ * are dropped silently.
186
+ */
187
+ export async function* translateGeminiCliLines(lines, sessionHolder, parseFailures) {
188
+ let endEmitted = false;
189
+ let stopReason = "stop";
190
+ for await (const line of lines) {
191
+ const trimmed = line.trim();
192
+ if (!trimmed)
193
+ continue;
194
+ let msg;
195
+ try {
196
+ msg = JSON.parse(trimmed);
197
+ }
198
+ catch {
199
+ recordParseFailure(parseFailures, trimmed);
200
+ continue;
201
+ }
202
+ const type = msg.type;
203
+ if (type === "init") {
204
+ const sid = msg.session_id;
205
+ if (sessionHolder && typeof sid === "string" && sid) {
206
+ sessionHolder.value = sid;
207
+ }
208
+ continue;
209
+ }
210
+ if (type === "message") {
211
+ const role = msg.role;
212
+ if (role === "assistant") {
213
+ const content = msg.content;
214
+ if (typeof content === "string" && content)
215
+ yield textChunk(content);
216
+ }
217
+ continue;
218
+ }
219
+ if (type === "tool_use") {
220
+ const toolId = String(msg.tool_id ?? "");
221
+ const toolName = String(msg.tool_name ?? "");
222
+ const params = msg.parameters;
223
+ yield {
224
+ type: "tool_use_start",
225
+ toolId,
226
+ toolName,
227
+ toolInput: isObject(params)
228
+ ? { ...params }
229
+ : {},
230
+ };
231
+ continue;
232
+ }
233
+ if (type === "tool_result") {
234
+ const toolId = String(msg.tool_id ?? "");
235
+ const status = msg.status;
236
+ const output = msg.output;
237
+ const ok = status === "success";
238
+ // Phase 163: a structured (object) output must be stringified, or
239
+ // `value` becomes a raw object that breaks when fed back to the
240
+ // model as the tool_result text / rendered in the tool card.
241
+ const value = typeof output === "string"
242
+ ? output
243
+ : output === undefined || output === null
244
+ ? null
245
+ : JSON.stringify(output);
246
+ yield {
247
+ type: "tool_use_end",
248
+ toolId,
249
+ result: {
250
+ ok,
251
+ value,
252
+ error: ok ? "" : `status: ${status ?? "unknown"}`,
253
+ },
254
+ };
255
+ continue;
256
+ }
257
+ if (type === "result") {
258
+ const status = msg.status;
259
+ if (typeof status === "string" && status)
260
+ stopReason = status;
261
+ const stats = msg.stats;
262
+ if (isObject(stats)) {
263
+ const tin = Number(stats.input_tokens ?? 0);
264
+ const tout = Number(stats.output_tokens ?? 0);
265
+ if (tin > 0 || tout > 0)
266
+ yield usage(tin, tout);
267
+ }
268
+ yield streamEnd(stopReason);
269
+ endEmitted = true;
270
+ continue;
271
+ }
272
+ }
273
+ if (!endEmitted)
274
+ yield streamEnd(stopReason);
275
+ }
276
+ //# sourceMappingURL=geminiCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geminiCli.js","sourceRoot":"","sources":["../../../src/core/adapters/geminiCli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** claude variant — references the built-in AskUserQuestion tool that the
2
+ * PreToolUse proxy makes reliable. */
3
+ export declare const ASK_USER_NUDGE: string;
4
+ /** codex variant — references the `ask_user` omg-MCP tool. Codex has no
5
+ * built-in AskUserQuestion; the ask_user broker round-trips to the same
6
+ * TUI picker and blocks until the user answers, so it is reliable. */
7
+ export declare const ASK_USER_NUDGE_CODEX: string;
8
+ /** Shared — record_decision is the same omg-MCP tool on both providers. */
9
+ export declare const RECORD_DECISION_NUDGE: string;
10
+ /** claude variant — its native Bash tool timeout is generous (Phase 331),
11
+ * so bounded work runs in the foreground; only indefinite processes go to
12
+ * run_in_background with the completion marker. */
13
+ export declare const BACKGROUND_TASK_NUDGE: string;
14
+ /** codex variant — codex's built-in shell is capped at ~30s upstream
15
+ * (openai/codex#3287, closed "not planned"), which kills any slow build
16
+ * and strands the turn. omg's `run_shell` tool runs in the omg process
17
+ * with a timeout omg controls (up to 30 min, Phase 333/W3), so route
18
+ * bounded long commands through it. Only emit when the shell tier is on
19
+ * (run_shell is exposed). */
20
+ export declare const BACKGROUND_TASK_NUDGE_CODEX: string;
21
+ //# sourceMappingURL=nudges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nudges.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/nudges.ts"],"names":[],"mappings":"AAyBA;uCACuC;AACvC,eAAO,MAAM,cAAc,QAKf,CAAC;AAEb;;uEAEuE;AACvE,eAAO,MAAM,oBAAoB,QAKhB,CAAC;AAElB,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,QAOnB,CAAC;AAEhB;;oDAEoD;AACpD,eAAO,MAAM,qBAAqB,QAY+B,CAAC;AAElE;;;;;8BAK8B;AAC9B,eAAO,MAAM,2BAA2B,QAOoC,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Phase 333: behavioral nudges shared across CLI adapters.
2
+ //
3
+ // These short system-prompt fragments steer the wrapped model toward the
4
+ // behaviors omg's UX depends on: surfacing decisions instead of bailing,
5
+ // keeping bounded long-running work in-turn, and recording durable
6
+ // decisions. They used to live only in claudeCli.ts (gated on the
7
+ // PreToolUse-hooked AskUserQuestion + omgTools), so `via codex` got NONE
8
+ // of them — interactive codex ran with zero omg behavioral guidance and
9
+ // felt materially worse than `via claude`. The external research (Aider's
10
+ // reminder=sys, opencode's structured-output enforcement) confirms GPT/
11
+ // codex needs equal-or-stronger behavioral prompting than Claude, so this
12
+ // is a parity necessity, not a nicety.
13
+ //
14
+ // claude and codex reach the same intent through different tools:
15
+ // - claude calls the built-in `AskUserQuestion` (hooked via PreToolUse);
16
+ // codex calls the `ask_user` omg-MCP tool (provider-neutral broker).
17
+ // - claude runs bounded builds in its native Bash tool (timeout raised
18
+ // in Phase 331); codex's native shell is capped at ~30s upstream
19
+ // (openai/codex#3287, "not planned") so it must route long commands
20
+ // through omg's `run_shell` tool instead (omg owns that timeout).
21
+ // Hence the per-provider ASK / BACKGROUND variants below; RECORD_DECISION
22
+ // is identical for both (same `record_decision` omg-MCP tool).
23
+ import { BG_DONE_MARKER } from "../util/bgProtocol.js";
24
+ /** claude variant — references the built-in AskUserQuestion tool that the
25
+ * PreToolUse proxy makes reliable. */
26
+ export const ASK_USER_NUDGE = "When a step needs interactive user input (a sudo password, an OAuth " +
27
+ "flow, a yes/no decision, picking between options), do NOT abandon the " +
28
+ "step or tell the user to run it themselves. Call AskUserQuestion with " +
29
+ "concrete options to surface the decision, then continue once the user " +
30
+ "answers.";
31
+ /** codex variant — references the `ask_user` omg-MCP tool. Codex has no
32
+ * built-in AskUserQuestion; the ask_user broker round-trips to the same
33
+ * TUI picker and blocks until the user answers, so it is reliable. */
34
+ export const ASK_USER_NUDGE_CODEX = "When a step needs interactive user input (a sudo password, an OAuth " +
35
+ "flow, a yes/no decision, picking between options), do NOT abandon the " +
36
+ "step or tell the user to run it themselves. Call the `ask_user` tool " +
37
+ "with concrete options to surface the decision, then continue once the " +
38
+ "user answers.";
39
+ /** Shared — record_decision is the same omg-MCP tool on both providers. */
40
+ export const RECORD_DECISION_NUDGE = "When the conversation reaches a durable conclusion — abandoning an " +
41
+ "approach, settling on a library, accepting a constraint — call the " +
42
+ "record_decision MCP tool with a single-line summary. These persist " +
43
+ "in the project's continuum so future turns (and future provider " +
44
+ "switches) see them without re-reading the whole transcript. Use it " +
45
+ "sparingly; only for outcomes a future session would otherwise have to " +
46
+ "rediscover.";
47
+ /** claude variant — its native Bash tool timeout is generous (Phase 331),
48
+ * so bounded work runs in the foreground; only indefinite processes go to
49
+ * run_in_background with the completion marker. */
50
+ export const BACKGROUND_TASK_NUDGE = "Long but BOUNDED commands (build, test suite, deploy — they finish in " +
51
+ "minutes) should run in the FOREGROUND and wait for the result: the Bash " +
52
+ "timeout is generous here (set an explicit `timeout` up to ~30 min for a " +
53
+ "slow one). You get the output and continue in the SAME turn — do NOT " +
54
+ "background a bounded task. " +
55
+ "Use `run_in_background: true` ONLY for INDEFINITE processes that never " +
56
+ "exit on their own (dev server, file watcher, `tail -f`). For those, make " +
57
+ `the last step echo ${BG_DONE_MARKER} (e.g. \`<cmd> ; echo ${BG_DONE_MARKER} rc=$?\`) ` +
58
+ "so omg can auto-continue when it settles, and never background at the " +
59
+ "shell level (`cmd &`, `nohup`, `disown`) — omg can't watch that. " +
60
+ 'Never end a turn with "I\'ll wait" / "I\'ll notify you" and no foreground ' +
61
+ "result or run_in_background task — there is no other channel.";
62
+ /** codex variant — codex's built-in shell is capped at ~30s upstream
63
+ * (openai/codex#3287, closed "not planned"), which kills any slow build
64
+ * and strands the turn. omg's `run_shell` tool runs in the omg process
65
+ * with a timeout omg controls (up to 30 min, Phase 333/W3), so route
66
+ * bounded long commands through it. Only emit when the shell tier is on
67
+ * (run_shell is exposed). */
68
+ export const BACKGROUND_TASK_NUDGE_CODEX = "For any command that may take more than ~20 seconds (build, test suite, " +
69
+ "deploy, install), use the `run_shell` tool with an explicit " +
70
+ "`timeout_ms` up to 1800000 (30 min) — do NOT use your built-in shell " +
71
+ "for these: it is capped at ~30s and will kill a slow build mid-run. " +
72
+ "`run_shell` returns the full output and you continue in the SAME turn. " +
73
+ 'Never end a turn with "I\'ll wait" / "I\'ll notify you" — there is no ' +
74
+ "other channel; finish the command via run_shell or report what you have.";
75
+ //# sourceMappingURL=nudges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nudges.js","sourceRoot":"","sources":["../../../src/core/adapters/nudges.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,mEAAmE;AACnE,kEAAkE;AAClE,yEAAyE;AACzE,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,uCAAuC;AACvC,EAAE;AACF,kEAAkE;AAClE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,+DAA+D;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;uCACuC;AACvC,MAAM,CAAC,MAAM,cAAc,GACzB,sEAAsE;IACtE,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,UAAU,CAAC;AAEb;;uEAEuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,eAAe,CAAC;AAElB,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAChC,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,wEAAwE;IACxE,aAAa,CAAC;AAEhB;;oDAEoD;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAChC,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,6BAA6B;IAC7B,yEAAyE;IACzE,2EAA2E;IAC3E,sBAAsB,cAAc,yBAAyB,cAAc,YAAY;IACvF,wEAAwE;IACxE,mEAAmE;IACnE,4EAA4E;IAC5E,+DAA+D,CAAC;AAElE;;;;;8BAK8B;AAC9B,MAAM,CAAC,MAAM,2BAA2B,GACtC,0EAA0E;IAC1E,8DAA8D;IAC9D,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type AdapterInput, type Chunk, type ConversationMessage } from "../orchestration/types.js";
2
+ import type { LLMAdapter } from "../adapter.js";
3
+ export declare function translateOpenAIEvents(events: AsyncIterable<unknown>): AsyncIterable<Chunk>;
4
+ export declare function openaiMessage(msg: ConversationMessage): Record<string, unknown> | Record<string, unknown>[];
5
+ export declare class OpenAIAdapter implements LLMAdapter {
6
+ private readonly opts;
7
+ readonly provider = "codex";
8
+ constructor(opts: {
9
+ model: string;
10
+ client?: unknown;
11
+ system?: string;
12
+ });
13
+ stream(input: AdapterInput): AsyncIterable<Chunk>;
14
+ buildArgs(input: AdapterInput): Record<string, unknown>;
15
+ private lazyClient;
16
+ }
17
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/openai.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,mBAAmB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAShD,wBAAuB,qBAAqB,CAC1C,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,aAAa,CAAC,KAAK,CAAC,CAiDtB;AAOD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAwBrD;AAGD,qBAAa,aAAc,YAAW,UAAU;IAI5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,QAAQ,CAAC,QAAQ,WAAW;gBAGT,IAAI,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAGI,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IAiBxD,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;YAwBzC,UAAU;CAmBzB"}
@@ -0,0 +1,138 @@
1
+ // OpenAI adapter — Chat Completions streaming chunks → omg Chunks.
2
+ //
3
+ // Mirror of legacy/omg/core/adapters/openai.py. Tool calls accumulate
4
+ // per choices[0].delta.tool_calls[].index until finish_reason; the end
5
+ // of the stream emits a ToolUseStart per accumulated entry + StreamEnd.
6
+ import { streamEnd, text as textChunk, toolUseStart, } from "../orchestration/types.js";
7
+ import { isObject, parseJsonOrEmpty } from "./utils.js";
8
+ export async function* translateOpenAIEvents(events) {
9
+ const pendingTools = new Map();
10
+ let stopReason = null;
11
+ for await (const ev of events) {
12
+ if (!isObject(ev))
13
+ continue;
14
+ const choices = ev.choices;
15
+ if (!Array.isArray(choices) || choices.length === 0)
16
+ continue;
17
+ const choice = choices[0];
18
+ const delta = choice.delta;
19
+ if (isObject(delta)) {
20
+ const content = delta.content;
21
+ if (typeof content === "string" && content.length > 0) {
22
+ yield textChunk(content);
23
+ }
24
+ const toolCalls = delta.tool_calls;
25
+ if (Array.isArray(toolCalls)) {
26
+ for (const tc of toolCalls) {
27
+ if (!isObject(tc))
28
+ continue;
29
+ const idx = typeof tc.index === "number" ? tc.index : 0;
30
+ let slot = pendingTools.get(idx);
31
+ if (slot === undefined) {
32
+ slot = { id: "", name: "", buf: "" };
33
+ pendingTools.set(idx, slot);
34
+ }
35
+ if (typeof tc.id === "string" && tc.id)
36
+ slot.id = tc.id;
37
+ const fn = tc.function;
38
+ if (isObject(fn)) {
39
+ if (typeof fn.name === "string" && fn.name)
40
+ slot.name = fn.name;
41
+ if (typeof fn.arguments === "string" && fn.arguments) {
42
+ slot.buf += fn.arguments;
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ const fr = choice.finish_reason;
49
+ if (typeof fr === "string" && fr.length > 0)
50
+ stopReason = fr;
51
+ }
52
+ const indices = [...pendingTools.keys()].sort((a, b) => a - b);
53
+ for (const idx of indices) {
54
+ const slot = pendingTools.get(idx);
55
+ if (!slot.id && !slot.name)
56
+ continue;
57
+ yield toolUseStart(slot.id, slot.name, parseJsonOrEmpty(slot.buf));
58
+ }
59
+ yield streamEnd(stopReason ?? "stop");
60
+ }
61
+ // Render one ConversationMessage as OpenAI chat.completions messages.
62
+ // - user → { role: "user", content }
63
+ // - assistant → { role: "assistant", content, tool_calls: [...] }
64
+ // - tool_result → { role: "tool", tool_call_id, content }
65
+ export function openaiMessage(msg) {
66
+ if (msg.role === "user") {
67
+ return { role: "user", content: msg.text };
68
+ }
69
+ if (msg.role === "assistant") {
70
+ const out = {
71
+ role: "assistant",
72
+ content: msg.text,
73
+ };
74
+ if (msg.toolCalls.length > 0) {
75
+ out.tool_calls = msg.toolCalls.map((call) => ({
76
+ id: call.toolId,
77
+ type: "function",
78
+ function: {
79
+ name: call.toolName,
80
+ arguments: JSON.stringify(call.toolInput),
81
+ },
82
+ }));
83
+ }
84
+ return out;
85
+ }
86
+ const content = typeof msg.result === "string" ? msg.result : JSON.stringify(msg.result);
87
+ return { role: "tool", tool_call_id: msg.toolId, content };
88
+ }
89
+ export class OpenAIAdapter {
90
+ opts;
91
+ provider = "codex";
92
+ constructor(opts) {
93
+ this.opts = opts;
94
+ }
95
+ async *stream(input) {
96
+ const client = this.opts.client ?? (await this.lazyClient());
97
+ const stream = (await client.chat.completions.create(this.buildArgs(input)));
98
+ yield* translateOpenAIEvents(stream);
99
+ }
100
+ buildArgs(input) {
101
+ const messages = [];
102
+ const system = typeof input === "string"
103
+ ? this.opts.system
104
+ : (input.system ?? this.opts.system);
105
+ if (system !== undefined)
106
+ messages.push({ role: "system", content: system });
107
+ if (typeof input === "string") {
108
+ messages.push({ role: "user", content: input });
109
+ }
110
+ else {
111
+ for (const msg of input.messages) {
112
+ const rendered = openaiMessage(msg);
113
+ if (Array.isArray(rendered))
114
+ messages.push(...rendered);
115
+ else
116
+ messages.push(rendered);
117
+ }
118
+ }
119
+ return {
120
+ model: this.opts.model,
121
+ messages,
122
+ stream: true,
123
+ };
124
+ }
125
+ async lazyClient() {
126
+ const name = "openai";
127
+ let mod;
128
+ try {
129
+ mod = (await import(name));
130
+ }
131
+ catch {
132
+ throw new Error("openai not installed; run `npm install openai`");
133
+ }
134
+ const OpenAI = mod.default;
135
+ return new OpenAI();
136
+ }
137
+ }
138
+ //# sourceMappingURL=openai.js.map