@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,65 @@
1
+ // Phase 72: persist the list of open tabs across omg restarts.
2
+ //
3
+ // Scope is *layout*, not content — name, provider, model, cwd, and
4
+ // (when the CLI emitted one) sessionId. Conversation messages are
5
+ // deliberately excluded; if the user wants to revive a conversation
6
+ // they /resume the saved sessionId.
7
+ //
8
+ // State lives at `~/.omg/tabs/<pid-or-host>.json`. We use a single
9
+ // canonical filename per host so a second omg launching on the same
10
+ // machine picks up the previous run's tabs. The pid suffix is only
11
+ // used during writes (atomic rename) to avoid two omg instances
12
+ // racing each other.
13
+ import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ import { join } from "node:path";
16
+ import { atomicWriteSync } from "./atomicWrite.js";
17
+ const DEFAULT_HOME = () => process.env.HOME ?? homedir();
18
+ export function tabsFile(home = DEFAULT_HOME()) {
19
+ return join(home, ".omg", "tabs", "state.json");
20
+ }
21
+ function ensureDir(file) {
22
+ const dir = file.slice(0, file.lastIndexOf("/"));
23
+ if (!existsSync(dir))
24
+ mkdirSync(dir, { recursive: true });
25
+ }
26
+ /** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
27
+ export function saveTabs(state, home = DEFAULT_HOME()) {
28
+ const file = tabsFile(home);
29
+ ensureDir(file);
30
+ atomicWriteSync(file, JSON.stringify(state, null, 2));
31
+ }
32
+ /** Load the snapshot, or null if there isn't one (or it's malformed
33
+ * / a version we don't recognise). Never throws. */
34
+ export function loadTabs(home = DEFAULT_HOME()) {
35
+ const file = tabsFile(home);
36
+ if (!existsSync(file))
37
+ return null;
38
+ try {
39
+ const raw = readFileSync(file, "utf-8");
40
+ const parsed = JSON.parse(raw);
41
+ if (parsed.version !== 1)
42
+ return null;
43
+ if (!Array.isArray(parsed.tabs))
44
+ return null;
45
+ return parsed;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /** Drop the saved file. Kept exported so tests + future slash
52
+ * commands (`/tabs reset`) can wipe layout; the legacy
53
+ * `--reset-tabs` flag was removed in Phase 264. Idempotent. */
54
+ export function clearTabs(home = DEFAULT_HOME()) {
55
+ const file = tabsFile(home);
56
+ if (existsSync(file)) {
57
+ try {
58
+ unlinkSync(file);
59
+ }
60
+ catch {
61
+ /* best-effort */
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=tabPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabPersistence.js","sourceRoot":"","sources":["../../../src/core/state/tabPersistence.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,oEAAoE;AACpE,oCAAoC;AACpC,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,gEAAgE;AAChE,qBAAqB;AAErB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsBnD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CACtB,KAAqB,EACrB,OAAe,YAAY,EAAE;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;qDACqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,SAAS,CAAC,OAAe,YAAY,EAAE;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface PersistedTab {
2
+ name: string;
3
+ provider: string;
4
+ model: string;
5
+ cwd: string;
6
+ sessionId?: string;
7
+ autoNamed: boolean;
8
+ }
9
+ export interface PersistedState {
10
+ /** Schema version. Bump when the shape changes incompatibly so
11
+ * older / newer omg can refuse to load instead of crashing. */
12
+ version: 1;
13
+ /** Saved at (ms epoch). For debugging only. */
14
+ savedAt: number;
15
+ /** Active tab when the snapshot was taken. */
16
+ activeTab: string;
17
+ tabs: PersistedTab[];
18
+ }
19
+ export declare function tabsFile(home?: string): string;
20
+ /** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
21
+ export declare function saveTabs(state: PersistedState, home?: string): void;
22
+ /** Load the snapshot, or null if there isn't one (or it's malformed
23
+ * / a version we don't recognise). Never throws. */
24
+ export declare function loadTabs(home?: string): PersistedState | null;
25
+ /** Drop the saved file. Kept exported so tests + future slash
26
+ * commands (`/tabs reset`) can wipe layout; the legacy
27
+ * `--reset-tabs` flag was removed in Phase 264. Idempotent. */
28
+ export declare function clearTabs(home?: string): void;
29
+ //# sourceMappingURL=tabPersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabPersistence.d.ts","sourceRoot":"","sources":["../../src/core/tabPersistence.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B;oEACgE;IAChE,OAAO,EAAE,CAAC,CAAC;IACX,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAID,wBAAgB,QAAQ,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAE9D;AAOD,oEAAoE;AACpE,wBAAgB,QAAQ,CACtB,KAAK,EAAE,cAAc,EACrB,IAAI,GAAE,MAAuB,GAC5B,IAAI,CAIN;AAED;qDACqD;AACrD,wBAAgB,QAAQ,CAAC,IAAI,GAAE,MAAuB,GAAG,cAAc,GAAG,IAAI,CAY7E;AAED;;gEAEgE;AAChE,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAuB,GAAG,IAAI,CAS7D"}
@@ -0,0 +1,65 @@
1
+ // Phase 72: persist the list of open tabs across omg restarts.
2
+ //
3
+ // Scope is *layout*, not content — name, provider, model, cwd, and
4
+ // (when the CLI emitted one) sessionId. Conversation messages are
5
+ // deliberately excluded; if the user wants to revive a conversation
6
+ // they /resume the saved sessionId.
7
+ //
8
+ // State lives at `~/.omg/tabs/<pid-or-host>.json`. We use a single
9
+ // canonical filename per host so a second omg launching on the same
10
+ // machine picks up the previous run's tabs. The pid suffix is only
11
+ // used during writes (atomic rename) to avoid two omg instances
12
+ // racing each other.
13
+ import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ import { join } from "node:path";
16
+ import { atomicWriteSync } from "./atomicWrite.js";
17
+ const DEFAULT_HOME = () => process.env.HOME ?? homedir();
18
+ export function tabsFile(home = DEFAULT_HOME()) {
19
+ return join(home, ".omg", "tabs", "state.json");
20
+ }
21
+ function ensureDir(file) {
22
+ const dir = file.slice(0, file.lastIndexOf("/"));
23
+ if (!existsSync(dir))
24
+ mkdirSync(dir, { recursive: true });
25
+ }
26
+ /** Write the snapshot atomically (Phase 72 / Phase 200b helper). */
27
+ export function saveTabs(state, home = DEFAULT_HOME()) {
28
+ const file = tabsFile(home);
29
+ ensureDir(file);
30
+ atomicWriteSync(file, JSON.stringify(state, null, 2));
31
+ }
32
+ /** Load the snapshot, or null if there isn't one (or it's malformed
33
+ * / a version we don't recognise). Never throws. */
34
+ export function loadTabs(home = DEFAULT_HOME()) {
35
+ const file = tabsFile(home);
36
+ if (!existsSync(file))
37
+ return null;
38
+ try {
39
+ const raw = readFileSync(file, "utf-8");
40
+ const parsed = JSON.parse(raw);
41
+ if (parsed.version !== 1)
42
+ return null;
43
+ if (!Array.isArray(parsed.tabs))
44
+ return null;
45
+ return parsed;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /** Drop the saved file. Kept exported so tests + future slash
52
+ * commands (`/tabs reset`) can wipe layout; the legacy
53
+ * `--reset-tabs` flag was removed in Phase 264. Idempotent. */
54
+ export function clearTabs(home = DEFAULT_HOME()) {
55
+ const file = tabsFile(home);
56
+ if (existsSync(file)) {
57
+ try {
58
+ unlinkSync(file);
59
+ }
60
+ catch {
61
+ /* best-effort */
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=tabPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabPersistence.js","sourceRoot":"","sources":["../../src/core/tabPersistence.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,oEAAoE;AACpE,oCAAoC;AACpC,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,gEAAgE;AAChE,qBAAqB;AAErB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsBnD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CACtB,KAAqB,EACrB,OAAe,YAAY,EAAE;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;qDACqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe,YAAY,EAAE;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,SAAS,CAAC,OAAe,YAAY,EAAE;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { ConsensusOutcome, Verdict } from "./types.js";
2
+ import type { LLMAdapter } from "./adapter.js";
3
+ import { RoleRouter } from "./roleRouter.js";
4
+ import { type ConsensusStrategy } from "./consensusEngine.js";
5
+ import type { ToolGate } from "./tools/toolGate.js";
6
+ import type { ToolRegistry } from "./tools/tools.js";
7
+ import { type WriterFn } from "../ipc/dispatcher.js";
8
+ export type AdapterFactory = (role: string) => LLMAdapter;
9
+ export interface TeamRunOpts {
10
+ implementerRole?: string;
11
+ reviewerRoles?: readonly string[];
12
+ strategy?: ConsensusStrategy;
13
+ maxIterations?: number;
14
+ /** Phase 102: when set, run this role first to break the task into
15
+ * a numbered plan, then hand the plan to the implementer as extra
16
+ * context. Typically "planner". Omit to keep the straight
17
+ * implementer→review loop. */
18
+ plannerRole?: string;
19
+ /** Phase 149: abort the pipeline between role turns. The caller also
20
+ * SIGTERMs the in-flight adapter so the current role stops now; this
21
+ * signal stops the loop from starting the next role. */
22
+ signal?: AbortSignal;
23
+ }
24
+ export declare class TeamRunner {
25
+ private readonly router;
26
+ private readonly writer;
27
+ private readonly adapterFor;
28
+ private readonly opts;
29
+ private readonly compressor;
30
+ constructor(router: RoleRouter, writer: WriterFn, adapterFor: AdapterFactory, opts?: {
31
+ toolRegistry?: ToolRegistry;
32
+ toolGate?: ToolGate;
33
+ });
34
+ runTeam(prompt: string, opts?: TeamRunOpts): Promise<ConsensusOutcome>;
35
+ private captureTurn;
36
+ private captureTurnInto;
37
+ private banner;
38
+ private emitRole;
39
+ private emitVerdict;
40
+ }
41
+ export declare function parseVerdictFromText(text: string): Verdict;
42
+ //# sourceMappingURL=teamRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teamRunner.d.ts","sourceRoot":"","sources":["../../src/core/teamRunner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,OAAO,EACR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQtE,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;mCAG+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;6DAEyD;IACzD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG5B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,cAAc,EAC1B,IAAI,GAAE;QACrB,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;KAChB;IAKF,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,gBAAgB,CAAC;YAmKd,WAAW;YAWX,eAAe;YAqCf,MAAM;YASN,QAAQ;YAmBR,WAAW;CAa1B;AAQD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiB1D"}
@@ -0,0 +1,248 @@
1
+ // TeamRunner — multi-role orchestration (implementer → reviewers → director).
2
+ // Mirror of legacy/omg/core/team_runner.py (phase 8 + 8.5 + 14).
3
+ import { ContextCompressor } from "./context/contextCompressor.js";
4
+ import { Director } from "./director.js";
5
+ import { DirectorEscalateStrategy, } from "./consensusEngine.js";
6
+ import { interceptToolCalls } from "./tools/toolInterceptor.js";
7
+ import { EventDispatcher } from "../ipc/dispatcher.js";
8
+ import { METHOD_TEXT, roleStatusEvent, verdictEvent, } from "../ipc/events.js";
9
+ export class TeamRunner {
10
+ router;
11
+ writer;
12
+ adapterFor;
13
+ opts;
14
+ compressor;
15
+ constructor(router, writer, adapterFor, opts = {}) {
16
+ this.router = router;
17
+ this.writer = writer;
18
+ this.adapterFor = adapterFor;
19
+ this.opts = opts;
20
+ this.compressor = new ContextCompressor(router);
21
+ }
22
+ async runTeam(prompt, opts = {}) {
23
+ const implementerRole = opts.implementerRole ?? "implementer";
24
+ const reviewerRoles = opts.reviewerRoles ?? ["reviewer"];
25
+ const maxIterations = opts.maxIterations ?? 3;
26
+ if (reviewerRoles.length === 0) {
27
+ throw new Error("reviewerRoles must contain at least one role");
28
+ }
29
+ const strategy = opts.strategy ?? new DirectorEscalateStrategy();
30
+ const director = new Director(strategy);
31
+ // Phase 149: bail between role turns when the caller cancels.
32
+ const abortIfCancelled = () => {
33
+ if (opts.signal?.aborted)
34
+ throw new Error("team run cancelled");
35
+ };
36
+ // Phase 102: optional planning pass. The planner role decomposes
37
+ // the task into a numbered plan, which becomes a Bundle handed to
38
+ // the implementer on every iteration — so the implementer works
39
+ // from an explicit plan rather than the raw prompt alone.
40
+ let planBundle = null;
41
+ if (opts.plannerRole) {
42
+ abortIfCancelled();
43
+ await this.banner(`◆ planning · ${opts.plannerRole}\n`);
44
+ const planPrompt = "Break the following task into a short numbered plan " +
45
+ "(steps, files to touch, risks). Keep it tight — this guides " +
46
+ "the implementer, it is not the implementation.\n\n" +
47
+ `Task:\n${prompt}`;
48
+ await this.emitRole(opts.plannerRole, "running");
49
+ const plannerStart = Date.now();
50
+ const planText = await this.captureTurn(opts.plannerRole, planPrompt);
51
+ await this.emitRole(opts.plannerRole, "done", Date.now() - plannerStart);
52
+ planBundle = {
53
+ kind: "plan",
54
+ source: `${opts.plannerRole}-plan.txt`,
55
+ body: planText,
56
+ };
57
+ }
58
+ let workingPrompt = prompt;
59
+ let lastOutcome = null;
60
+ for (let iteration = 0; iteration < maxIterations; iteration++) {
61
+ abortIfCancelled();
62
+ await this.banner(`◆ iteration ${iteration + 1}/${maxIterations} · implementer\n`);
63
+ // Phase 102: hand the plan (if any) to the implementer as a
64
+ // bundle so it's compressed/packed alongside the prompt.
65
+ const implBundles = planBundle ? [planBundle] : [];
66
+ await this.emitRole(implementerRole, "running");
67
+ const implStart = Date.now();
68
+ const implText = await this.captureTurn(implementerRole, workingPrompt, implBundles);
69
+ await this.emitRole(implementerRole, "done", Date.now() - implStart);
70
+ const reviewBundle = {
71
+ kind: "impl_output",
72
+ source: `impl-iter-${iteration + 1}.txt`,
73
+ body: implText,
74
+ };
75
+ const reviewPrompt = "Review the following implementation. Reply with one of " +
76
+ "APPROVE, REJECT, REQUEST_REWORK, or ESCALATE as the first word, " +
77
+ "followed by your reasoning.";
78
+ // Parallel reviewer execution. Each lane's events are buffered
79
+ // into its own bucket so stdout/UI doesn't interleave. After all
80
+ // reviewers complete, buffers flush in declared role order.
81
+ abortIfCancelled();
82
+ const buckets = reviewerRoles.map(() => []);
83
+ const tasks = reviewerRoles.map((role, i) => (async () => {
84
+ // Phase 142: role_status goes to the LIVE writer so each
85
+ // parallel reviewer's running/done shows individually, even
86
+ // though its text output stays buffered until all finish.
87
+ await this.emitRole(role, "running");
88
+ const start = Date.now();
89
+ const text = await this.captureTurnInto(role, reviewPrompt, [reviewBundle], async (msg) => {
90
+ buckets[i].push(msg);
91
+ });
92
+ await this.emitRole(role, "done", Date.now() - start);
93
+ return text;
94
+ })());
95
+ const reviewTextResults = await Promise.all(tasks);
96
+ const lanes = [];
97
+ const reviewTexts = [];
98
+ for (let i = 0; i < reviewerRoles.length; i++) {
99
+ const role = reviewerRoles[i];
100
+ const reviewText = reviewTextResults[i];
101
+ await this.banner(`◆ iteration ${iteration + 1} · ${role}\n`);
102
+ for (const msg of buckets[i]) {
103
+ await this.writer(msg);
104
+ }
105
+ // Phase 223 → 233 (hotfix): when reviewer's text comes back
106
+ // empty, surface a diagnostic line so the user knows WHY the
107
+ // verdict defaulted instead of accepting "escalate" out of
108
+ // thin air. Phase 233 adds the role's adapter info + first
109
+ // emitted event (if any) so the cause is easier to pin —
110
+ // e.g. "codex-cli emitted 0 events; check `codex login`" vs.
111
+ // "codex-cli emitted reasoning only; ask it to include the
112
+ // verdict word in the agent_message".
113
+ if (!reviewText.trim()) {
114
+ const llm = this.router.llmFor(role);
115
+ const events = buckets[i].length;
116
+ const kinds = new Set(buckets[i].map((m) => m.method));
117
+ const hadOnlyEnd = events <= 1 && kinds.has("event/end");
118
+ const detail = hadOnlyEnd
119
+ ? `${llm.provider}/${llm.model} returned no body. Run \`${llm.provider.replace("-cli", "")} login\` if the auth expired, or run \`OMG_VERBOSE_STDERR=1 omg\` to see the host CLI's stderr.`
120
+ : `${llm.provider}/${llm.model} emitted ${events} event(s) but no APPROVE/REJECT/REQUEST_REWORK/ESCALATE word.`;
121
+ await this.writer({
122
+ jsonrpc: "2.0",
123
+ method: "event/text",
124
+ params: {
125
+ text: ` [${role}] no verdict found — defaulting to escalate. ${detail}\n`,
126
+ },
127
+ });
128
+ }
129
+ lanes.push({
130
+ lane: role,
131
+ verdict: parseVerdictFromText(reviewText),
132
+ reason: reviewText,
133
+ });
134
+ reviewTexts.push([role, reviewText]);
135
+ }
136
+ const outcome = director.adjudicate(lanes);
137
+ lastOutcome = outcome;
138
+ await this.emitVerdict(iteration + 1, outcome);
139
+ if (outcome.final === "approve" || outcome.final === "escalate") {
140
+ return outcome;
141
+ }
142
+ const feedbackBlock = reviewTexts
143
+ .map(([role, text]) => ` [${role}]: ${text}`)
144
+ .join("\n");
145
+ workingPrompt =
146
+ `Original task:\n${prompt}\n\n` +
147
+ `Reviewer feedback (iteration ${iteration + 1}):\n${feedbackBlock}\n\n` +
148
+ `Address the feedback above and try again.`;
149
+ }
150
+ const final = {
151
+ final: "escalate",
152
+ strategy: strategy.name,
153
+ lanes: lastOutcome !== null ? lastOutcome.lanes : [],
154
+ rationale: `max_iterations=${maxIterations} exhausted without APPROVE`,
155
+ };
156
+ await this.emitVerdict(maxIterations, final);
157
+ return final;
158
+ }
159
+ async captureTurn(role, prompt, bundles = []) {
160
+ return this.captureTurnInto(role, prompt, bundles, (m) => this.writer(m));
161
+ }
162
+ // Phase 16-prep: variant that lets the caller substitute the live
163
+ // writer with a buffer. Parallel reviewer execution uses this to
164
+ // capture each lane's events without interleaving on stdout.
165
+ async captureTurnInto(role, prompt, bundles, sink) {
166
+ const packed = this.compressor.pack(bundles, role);
167
+ const fullPrompt = packed.text ? `${packed.text}\n\n${prompt}` : prompt;
168
+ const adapter = this.adapterFor(role);
169
+ const captured = [];
170
+ // Phase 223 (hotfix): also fold `event/thinking` into the captured
171
+ // text. Some providers (codex-cli's `reasoning` items, claude's
172
+ // extended-thinking chunks) emit the reviewer's actual verdict
173
+ // rationale as a thinking chunk rather than an `agent_message`.
174
+ // Pre-Phase-223, captured stayed empty in that case →
175
+ // `parseVerdictFromText("")` defaulted to "escalate" without the
176
+ // user seeing why. Including thinking text lets parseVerdict find
177
+ // the verdict word and gives non-empty review text to surface.
178
+ const tee = async (msg) => {
179
+ await sink(msg);
180
+ if (msg.method === METHOD_TEXT || msg.method === "event/thinking") {
181
+ const t = msg.params.text;
182
+ if (typeof t === "string")
183
+ captured.push(t);
184
+ }
185
+ };
186
+ let stream = adapter.stream(fullPrompt);
187
+ if (this.opts.toolRegistry !== undefined) {
188
+ stream = interceptToolCalls(stream, this.opts.toolRegistry, {
189
+ gate: this.opts.toolGate,
190
+ });
191
+ }
192
+ await new EventDispatcher(tee).run(stream);
193
+ return captured.join("");
194
+ }
195
+ async banner(text) {
196
+ await this.writer({
197
+ jsonrpc: "2.0",
198
+ method: METHOD_TEXT,
199
+ params: { text },
200
+ });
201
+ }
202
+ // Phase 142: announce a role's lifecycle on the live writer.
203
+ async emitRole(role, status, elapsedMs) {
204
+ // Phase 173: tag the event with the role's provider/model from
205
+ // team.yaml so the status panel shows which engine ran each role.
206
+ const llm = this.router.llmFor(role);
207
+ await this.writer(roleStatusEvent({
208
+ role,
209
+ status,
210
+ elapsedMs,
211
+ provider: llm.provider,
212
+ model: llm.model,
213
+ }));
214
+ }
215
+ async emitVerdict(iteration, outcome) {
216
+ await this.writer(verdictEvent({
217
+ iteration,
218
+ verdict: outcome.final,
219
+ strategy: outcome.strategy,
220
+ rationale: outcome.rationale,
221
+ }));
222
+ }
223
+ }
224
+ // Reviewers are told to lead with one of APPROVE / REJECT /
225
+ // REQUEST_REWORK / ESCALATE. We match those as WHOLE WORDS and take the
226
+ // EARLIEST one by position, so the stated verdict wins and an incidental
227
+ // mention can't flip it. Phase 145: the old substring scan read "REJECT"
228
+ // inside the URL "/orders/rejected" and turned every APPROVE into a
229
+ // reject — three wasted iterations, then escalate.
230
+ export function parseVerdictFromText(text) {
231
+ const upper = text.toUpperCase();
232
+ const patterns = [
233
+ [/\bREQUEST[_ ]?REWORK\b/, "request_rework"],
234
+ [/\bREWORK\b/, "request_rework"],
235
+ [/\bREJECT\b/, "reject"],
236
+ [/\bESCALATE\b/, "escalate"],
237
+ [/\bAPPROVE\b/, "approve"],
238
+ ];
239
+ let best = null;
240
+ for (const [re, verdict] of patterns) {
241
+ const m = re.exec(upper);
242
+ if (m && (best === null || m.index < best.idx)) {
243
+ best = { idx: m.index, verdict };
244
+ }
245
+ }
246
+ return best?.verdict ?? "escalate";
247
+ }
248
+ //# sourceMappingURL=teamRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teamRunner.js","sourceRoot":"","sources":["../../src/core/teamRunner.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iEAAiE;AASjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAiB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACL,WAAW,EAEX,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAoB1B,MAAM,OAAO,UAAU;IAIF;IACA;IACA;IACA;IANF,UAAU,CAAoB;IAE/C,YACmB,MAAkB,EAClB,MAAgB,EAChB,UAA0B,EAC1B,OAGb,EAAE;QANW,WAAM,GAAN,MAAM,CAAY;QAClB,WAAM,GAAN,MAAM,CAAU;QAChB,eAAU,GAAV,UAAU,CAAgB;QAC1B,SAAI,GAAJ,IAAI,CAGf;QAEN,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAc,EACd,OAAoB,EAAE;QAEtB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,aAAa,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QAC9C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,wBAAwB,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,GAAS,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClE,CAAC,CAAC;QAEF,iEAAiE;QACjE,kEAAkE;QAClE,gEAAgE;QAChE,0DAA0D;QAC1D,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,gBAAgB,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACxD,MAAM,UAAU,GACd,sDAAsD;gBACtD,8DAA8D;gBAC9D,oDAAoD;gBACpD,UAAU,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC;YACzE,UAAU,GAAG;gBACX,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,WAAW;gBACtC,IAAI,EAAE,QAAQ;aACf,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,IAAI,WAAW,GAA4B,IAAI,CAAC;QAEhD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC;YAC/D,gBAAgB,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,MAAM,CACf,eAAe,SAAS,GAAG,CAAC,IAAI,aAAa,kBAAkB,CAChE,CAAC;YACF,4DAA4D;YAC5D,yDAAyD;YACzD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,eAAe,EACf,aAAa,EACb,WAAW,CACZ,CAAC;YACF,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAErE,MAAM,YAAY,GAAW;gBAC3B,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,aAAa,SAAS,GAAG,CAAC,MAAM;gBACxC,IAAI,EAAE,QAAQ;aACf,CAAC;YAEF,MAAM,YAAY,GAChB,yDAAyD;gBACzD,kEAAkE;gBAClE,6BAA6B,CAAC;YAEhC,+DAA+D;YAC/D,iEAAiE;YACjE,4DAA4D;YAC5D,gBAAgB,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAA2B,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,KAAK,IAAI,EAAE;gBACV,yDAAyD;gBACzD,4DAA4D;gBAC5D,0DAA0D;gBAC1D,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CACrC,IAAI,EACJ,YAAY,EACZ,CAAC,YAAY,CAAC,EACd,KAAK,EAAE,GAAG,EAAE,EAAE;oBACZ,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CACF,CAAC;gBACF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,EAAE,CACL,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEnD,MAAM,KAAK,GAAkB,EAAE,CAAC;YAChC,MAAM,WAAW,GAA4B,EAAE,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,SAAS,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;gBAC9D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBACD,4DAA4D;gBAC5D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,2DAA2D;gBAC3D,yDAAyD;gBACzD,6DAA6D;gBAC7D,2DAA2D;gBAC3D,sCAAsC;gBACtC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;oBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBACjC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACzD,MAAM,MAAM,GAAG,UAAU;wBACvB,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,4BAA4B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,iGAAiG;wBAC3L,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,YAAY,MAAM,+DAA+D,CAAC;oBAClH,MAAM,IAAI,CAAC,MAAM,CAAC;wBAChB,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,YAAY;wBACpB,MAAM,EAAE;4BACN,IAAI,EAAE,MAAM,IAAI,gDAAgD,MAAM,IAAI;yBAC3E;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,oBAAoB,CAAC,UAAU,CAAC;oBACzC,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;gBACH,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3C,WAAW,GAAG,OAAO,CAAC;YACtB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAE/C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChE,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,aAAa,GAAG,WAAW;iBAC9B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,IAAI,EAAE,CAAC;iBAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,aAAa;gBACX,mBAAmB,MAAM,MAAM;oBAC/B,gCAAgC,SAAS,GAAG,CAAC,OAAO,aAAa,MAAM;oBACvE,2CAA2C,CAAC;QAChD,CAAC;QAED,MAAM,KAAK,GAAqB;YAC9B,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACpD,SAAS,EAAE,kBAAkB,aAAa,4BAA4B;SACvE,CAAC;QACF,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,IAAY,EACZ,MAAc,EACd,UAA6B,EAAE;QAE/B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,kEAAkE;IAClE,iEAAiE;IACjE,6DAA6D;IACrD,KAAK,CAAC,eAAe,CAC3B,IAAY,EACZ,MAAc,EACd,OAA0B,EAC1B,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,mEAAmE;QACnE,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,sDAAsD;QACtD,iEAAiE;QACjE,kEAAkE;QAClE,+DAA+D;QAC/D,MAAM,GAAG,GAAa,KAAK,EAAE,GAAwB,EAAE,EAAE;YACvD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;gBAClE,MAAM,CAAC,GAAI,GAAG,CAAC,MAA6B,CAAC,IAAI,CAAC;gBAClD,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1D,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,EAAE,IAAI,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IACrD,KAAK,CAAC,QAAQ,CACpB,IAAY,EACZ,MAAoC,EACpC,SAAkB;QAElB,+DAA+D;QAC/D,kEAAkE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,MAAM,CACf,eAAe,CAAC;YACd,IAAI;YACJ,MAAM;YACN,SAAS;YACT,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,SAAiB,EACjB,OAAyB;QAEzB,MAAM,IAAI,CAAC,MAAM,CACf,YAAY,CAAC;YACX,SAAS;YACT,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAED,4DAA4D;AAC5D,wEAAwE;AACxE,yEAAyE;AACzE,yEAAyE;AACzE,oEAAoE;AACpE,mDAAmD;AACnD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,QAAQ,GAA6B;QACzC,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;QAC5C,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAChC,CAAC,YAAY,EAAE,QAAQ,CAAC;QACxB,CAAC,cAAc,EAAE,UAAU,CAAC;QAC5B,CAAC,aAAa,EAAE,SAAS,CAAC;KAC3B,CAAC;IACF,IAAI,IAAI,GAA6C,IAAI,CAAC;IAC1D,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC;AACrC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { JsonRpcClient } from "../ipc/rpc.js";
2
+ export interface ToolGate {
3
+ allow(name: string, args: Record<string, unknown>): Promise<boolean>;
4
+ }
5
+ export declare class AllowAllGate implements ToolGate {
6
+ allow(_name: string, _args: Record<string, unknown>): Promise<boolean>;
7
+ }
8
+ export declare class DenyAllGate implements ToolGate {
9
+ allow(_name: string, _args: Record<string, unknown>): Promise<boolean>;
10
+ }
11
+ export interface RpcGateOpts {
12
+ method?: string;
13
+ timeoutMs?: number;
14
+ }
15
+ export declare class RpcGate implements ToolGate {
16
+ private readonly client;
17
+ private readonly method;
18
+ private readonly timeoutMs;
19
+ private readonly remembered;
20
+ constructor(client: JsonRpcClient, opts?: RpcGateOpts);
21
+ allow(name: string, args: Record<string, unknown>): Promise<boolean>;
22
+ }
23
+ //# sourceMappingURL=toolGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolGate.d.ts","sourceRoot":"","sources":["../../src/core/toolGate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA0B,MAAM,eAAe,CAAC;AAEtE,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED,qBAAa,YAAa,YAAW,QAAQ;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7E;AAED,qBAAa,WAAY,YAAW,QAAQ;IACpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7E;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,OAAQ,YAAW,QAAQ;IAQpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAG7B,MAAM,EAAE,aAAa,EACtC,IAAI,GAAE,WAAgB;IAMlB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB3E"}
@@ -0,0 +1,51 @@
1
+ // Tool permission gates. Mirror of legacy/omg/core/tool_gate.py.
2
+ import { RpcError, TimeoutError } from "../ipc/rpc.js";
3
+ export class AllowAllGate {
4
+ async allow(_name, _args) {
5
+ return true;
6
+ }
7
+ }
8
+ export class DenyAllGate {
9
+ async allow(_name, _args) {
10
+ return false;
11
+ }
12
+ }
13
+ export class RpcGate {
14
+ client;
15
+ method;
16
+ timeoutMs;
17
+ // Phase 134: tools the user chose to "allow & remember" this session.
18
+ // A remembered tool short-circuits to allow without re-prompting.
19
+ remembered = new Set();
20
+ constructor(client, opts = {}) {
21
+ this.client = client;
22
+ this.method = opts.method ?? "request/tool_permission";
23
+ this.timeoutMs = opts.timeoutMs ?? 30_000;
24
+ }
25
+ async allow(name, args) {
26
+ if (this.remembered.has(name))
27
+ return true;
28
+ let result;
29
+ try {
30
+ result = await this.client.request(this.method, {
31
+ name,
32
+ input: { ...args },
33
+ }, { timeoutMs: this.timeoutMs });
34
+ }
35
+ catch (e) {
36
+ if (e instanceof RpcError || e instanceof TimeoutError)
37
+ return false;
38
+ return false;
39
+ }
40
+ if (typeof result !== "object" || result === null)
41
+ return false;
42
+ const r = result;
43
+ const ok = r.allow === true;
44
+ // Honor the prompt's "remember" answer so the same tool isn't
45
+ // re-asked for the rest of the session.
46
+ if (ok && r.remember === true)
47
+ this.remembered.add(name);
48
+ return ok;
49
+ }
50
+ }
51
+ //# sourceMappingURL=toolGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolGate.js","sourceRoot":"","sources":["../../src/core/toolGate.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAiB,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAMtE,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAA8B;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,KAA8B;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAOD,MAAM,OAAO,OAAO;IAQC;IAPF,MAAM,CAAS;IACf,SAAS,CAAS;IACnC,sEAAsE;IACtE,kEAAkE;IACjD,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhD,YACmB,MAAqB,EACtC,OAAoB,EAAE;QADL,WAAM,GAAN,MAAM,CAAe;QAGtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,yBAAyB,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,IAA6B;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAChC,IAAI,CAAC,MAAM,EACX;gBACE,IAAI;gBACJ,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE;aACnB,EACD,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,YAAY,YAAY;gBAAE,OAAO,KAAK,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,CAAC,GAAG,MAAiD,CAAC;QAC5D,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;QAC5B,8DAA8D;QAC9D,wCAAwC;QACxC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { Chunk } from "./types.js";
2
+ import type { ToolGate } from "./toolGate.js";
3
+ import type { ToolRegistry } from "./tools.js";
4
+ export declare function interceptToolCalls(stream: AsyncIterable<Chunk>, registry: ToolRegistry, opts?: {
5
+ gate?: ToolGate;
6
+ }): AsyncIterable<Chunk>;
7
+ //# sourceMappingURL=toolInterceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolInterceptor.d.ts","sourceRoot":"","sources":["../../src/core/toolInterceptor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAA+B,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAuB,kBAAkB,CACvC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAC5B,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAO,GAC7B,aAAa,CAAC,KAAK,CAAC,CAoBtB"}