@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,85 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@yjjeong/omg` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-06-05
11
+
12
+ Initial public release.
13
+
14
+ ### Setup & multi-agent ergonomics
15
+
16
+ - **`omg doctor`** — diagnose provider setup in one command: per-provider
17
+ CLI-on-PATH, login signal, optional-SDK + API-key, and (Gemini) MCP-entry
18
+ status, with the exact fix command for each gap. Only flags providers the
19
+ active team preset actually requires. `--json` for scripting; exits
20
+ non-zero when a required provider is unusable.
21
+ - **First-run preflight nudge** — on TUI launch, if a required provider
22
+ isn't usable, the doctor report prints once (never blocks). Self-limiting;
23
+ suppress with `OMG_SKIP_PREFLIGHT=1`; skipped for the stub provider.
24
+ - **AGENTS.md / CLAUDE.md auto-scaffold** — `omg` writes the
25
+ AGENTS.md-as-source-of-truth + `@AGENTS.md`-importing-CLAUDE.md pair at the
26
+ git root when missing (additive only; never rewrites existing files;
27
+ suppress with `OMG_SKIP_AGENTS_MD=1`).
28
+ - **Shared MCP floor + per-role specialization** — first run detects the
29
+ project stack and writes a starter `<gitroot>/.omg/mcp.json` (safe baseline
30
+ enabled, extras opt-in; suppress with `OMG_SKIP_MCP_SCAFFOLD=1`). Project
31
+ config merges over `~/.omg/mcp.json`; per-server `enabled` + `providers`
32
+ tag; a `team.yaml` role may carry `mcp: [server, ...]` to expose only its
33
+ targeted servers. `/mcp enable|disable <name>` toggles them, and `omg
34
+ doctor` lists them. Tools reach all three CLIs through omg's existing MCP
35
+ proxy — configure once, every agent gets it; native provider skills are
36
+ untouched.
37
+ - **Team loop runs to completion** — the team no longer stops after a fixed
38
+ 3 rounds; with the verifier as a completion gate it keeps going until the
39
+ original request is fully satisfied, bounded by a safety cap
40
+ (`OMG_TEAM_MAX_ITERATIONS`, default 8).
41
+
42
+ ### Highlights
43
+
44
+ - Multi-LLM TUI orchestrator coordinating **Claude + Codex + Gemini** as a
45
+ team with explicit roles (planner / implementer / reviewer / verifier),
46
+ a shared context bus, and a consensus mechanism with director
47
+ adjudication.
48
+ - **Provider modes**: SDK adapters (`claude` / `codex` / `gemini`) plus
49
+ subscription-CLI adapters (`claude-cli` / `codex-cli` / `gemini-cli`) so
50
+ users can pick API-key or OAuth-subscription auth per role.
51
+ - **Tabbed Ink TUI** with per-tab provider, working directory, history,
52
+ predict ghost, and team status panel.
53
+ - **Continuum** — project-scoped, provider-neutral knowledge thread that
54
+ carries decisions and recent turns across provider switches and
55
+ sessions (`~/.omg/continuums/<project-id>.jsonl`).
56
+ - **PreToolUse hook generalization** — `AskUserQuestion` (and future
57
+ interactive tools) proxy through omg's TUI via a generic
58
+ `hookedToolBroker` so the picker actually works under piped stdio.
59
+ - **Built-in MCP server** (`omg --mcp-serve`) exposing read_file /
60
+ list_dir / write_file / run_shell / ask_user / record_decision /
61
+ delegate to external MCP clients.
62
+ - **Slash commands** for tab management, model switching, preset
63
+ hot-swap (claude-led vs codex-led teams), planner pass, ask-mode,
64
+ per-turn auto-commit, prediction toggle, and more.
65
+ - **Opt-in atomic commit per turn** (`/auto-commit on`) — `git commit`
66
+ fires after each successful turn with a summary derived from the
67
+ assistant reply.
68
+
69
+ ### Platform support
70
+
71
+ - Linux (x64 / ARM64)
72
+ - macOS (Intel / Apple Silicon)
73
+ - Windows (x64): experimental — named-pipe broker IPC; pending verification
74
+ on a Windows host. WSL also works.
75
+
76
+ ### Notes
77
+
78
+ - 1036 unit + integration + e2e tests passing.
79
+ - Build artifact ~470 kB packed / ~2 MB unpacked.
80
+ - Provider SDKs (`@anthropic-ai/sdk`, `openai`, `@google/genai`) are
81
+ optional peer dependencies — install only when using the matching
82
+ SDK provider.
83
+
84
+ [Unreleased]: https://github.com/jyj902/omg/compare/v0.1.0...HEAD
85
+ [0.1.0]: https://github.com/jyj902/omg/releases/tag/v0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 정영재 <yj.jeong@laonpeople.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # omg
2
+
3
+ > Multi-LLM team orchestrator for a single working directory.
4
+
5
+ `omg` coordinates **Claude, Codex, and Gemini** as a team — each LLM gets a
6
+ role (planner / implementer / reviewer / verifier), a single director resolves
7
+ their conflicts, and a shared context bus keeps their handoffs intact.
8
+
9
+ A TUI (Ink/React) sits on top, so the team's reasoning, tool calls, and
10
+ verdicts are visible at a glance.
11
+
12
+ ## Why
13
+
14
+ Most multi-LLM tools either pick one model per task or run them in isolation.
15
+ `omg` treats them as a **team with explicit roles and a consensus mechanism** —
16
+ a planning step from Claude actually informs the implementation step from
17
+ Codex, and a review verdict from Gemini doesn't silently stall the pipeline.
18
+
19
+ ## Prerequisites
20
+
21
+ - **Node ≥ 20**
22
+ - **Linux, macOS, or Windows.** The internal broker IPC uses a Unix-domain
23
+ socket on POSIX and a named pipe on Windows. Windows support is
24
+ **experimental** in v0.x — verify in your environment; WSL also works.
25
+ - **At least one provider CLI installed and logged in**, OR `--demo` /
26
+ `--provider stub` for a no-deps trial. Provider options:
27
+ - [`claude`](https://docs.claude.com/en/docs/claude-code/quickstart)
28
+ — Claude Code; run `claude /login` after install.
29
+ - [`codex`](https://github.com/openai/codex) — Codex CLI; `codex login`
30
+ after install.
31
+ - [`gemini`](https://github.com/google-gemini/gemini-cli) — Gemini CLI;
32
+ `gemini` once for first-time auth.
33
+
34
+ `omg` never sees your provider tokens; it spawns the CLIs you already
35
+ authed.
36
+
37
+ After install, run **`omg doctor`** to verify your providers are installed,
38
+ logged in, and (for Gemini) MCP-registered — it prints the exact fix command
39
+ for any gap, and only flags the providers your active team preset actually
40
+ uses. `omg login <provider>` re-runs a provider CLI's own login when its auth
41
+ has expired.
42
+
43
+ ## Quick Start
44
+
45
+ ```bash
46
+ npm install -g @yjjeong/omg
47
+
48
+ omg --demo # no external CLI required
49
+ omg --run "hi" --provider stub --headless # stubbed orchestrator turn
50
+ omg # full TUI (provider CLI required)
51
+ ```
52
+
53
+ `omg --demo` is the safest first-impression — it runs the full pipeline
54
+ against a built-in stub provider, no auth or external binary needed.
55
+
56
+ ## Usage examples
57
+
58
+ ```bash
59
+ # Real provider via OAuth subscription (no API credit consumed).
60
+ omg --run "draft a release note" --provider claude-cli
61
+ omg --run "draft a release note" --provider codex-cli
62
+ omg --run "draft a release note" --provider gemini-cli
63
+
64
+ # Real provider via API key (uses official SDK; installs on demand).
65
+ omg --run "draft a release note" --provider claude # @anthropic-ai/sdk
66
+ omg --run "draft a release note" --provider codex # openai
67
+ omg --run "draft a release note" --provider gemini # @google/genai
68
+
69
+ # Multi-role team with voting consensus.
70
+ omg --team-run "ship a python hello world" --provider claude-cli --headless \
71
+ --reviewers reviewer,verifier --strategy voting
72
+
73
+ # Agentic loop — tool results feed back into the next turn.
74
+ omg --run "demo" --provider stub --tools --loop --headless
75
+ ```
76
+
77
+ ## CLI surface
78
+
79
+ ```
80
+ omg [--version] [--help]
81
+ omg doctor [--json] # diagnose provider install / auth
82
+ omg login <claude|codex|gemini> # (re)authenticate a provider CLI
83
+ omg --demo [--headless] [--tools | --write-tools] [--ask]
84
+ omg --run <PROMPT> [--role <ROLE>] [--provider <P>] [--headless]
85
+ [--tools | --write-tools] [--loop --max-steps N]
86
+ omg --team-run <PROMPT> [--reviewers role1,role2,...] [--strategy S]
87
+ [--max-iterations N] [--provider <P>] [--headless]
88
+ [--tools | --write-tools]
89
+ ```
90
+
91
+ **Providers**: `policy` (read from `src/policy/team.yaml`), `stub`, `claude`
92
+ / `codex` / `gemini` (SDK), `claude-cli` / `codex-cli` / `gemini-cli`
93
+ (subscription CLIs).
94
+
95
+ **Consensus strategies**: `escalate` (default — severity-first veto),
96
+ `voting` (plurality), `hierarchy` (top reviewer wins).
97
+
98
+ ## Interactive TUI
99
+
100
+ Running `omg` with no flags opens the Ink TUI. Inside:
101
+
102
+ - `/help` shows the full slash command list (`/new`, `/switch`, `/team`,
103
+ `/preset`, `/auto-commit`, `/predict`, `/mcp`, `/memory`, `/clear`, etc.)
104
+ - `Ctrl-O` / `Ctrl-P` cycles tabs; `Opt-1..9` jumps to a tab by index
105
+ - `Ctrl-R` opens reverse history search
106
+ - `Ctrl-Z` / `Ctrl-Y` undo / redo the current input
107
+ - `/quit` or `Ctrl-C` to exit
108
+
109
+ State lives in `~/.omg/`:
110
+ `team-preset`, `plan.json`, `memory.md`, `tabs/`, `continuums/`, `mcp.json`.
111
+
112
+ ## Troubleshooting
113
+
114
+ - **Not sure what's misconfigured?** Run `omg doctor` — it reports
115
+ per-provider install / login / MCP status and the exact command to fix
116
+ each gap. `omg doctor --json` emits the same as machine-readable JSON.
117
+ - **"binary not found on PATH"** — install the provider CLI shown in the
118
+ error message, or try `omg --demo` to confirm omg itself works.
119
+ - **TUI doesn't render properly** — use a modern terminal (iTerm2,
120
+ Alacritty, Kitty, Wezterm, recent Terminal.app, recent Windows Terminal
121
+ via WSL). Legacy `xterm` with limited ANSI support may misrender.
122
+ - **Doesn't exit on `/quit`** — `Ctrl-C` twice escalates; please file an
123
+ issue if you hit this consistently.
124
+ - **"Cannot find module '@anthropic-ai/sdk'"** when using `--provider
125
+ claude` (the SDK, not `claude-cli`) — install it: `npm install -g
126
+ @anthropic-ai/sdk`. Provider SDKs are optional peer dependencies.
127
+
128
+ ## Platform support
129
+
130
+ | Platform | Status |
131
+ |---|---|
132
+ | Linux (x64 / ARM64) | ✅ Supported |
133
+ | macOS (Intel / Apple Silicon) | ✅ Supported |
134
+ | Windows (x64) | 🧪 Experimental — named-pipe IPC; verify locally. WSL also works. |
135
+
136
+ ## Development
137
+
138
+ ```bash
139
+ git clone https://github.com/jyj902/omg.git
140
+ cd omg
141
+ npm install
142
+ npm run build # tsc + copy-assets (verifies dist/cli.js --version)
143
+ npm test # full vitest suite
144
+ npm link # `omg` global symlink → dist/cli.js
145
+ ```
146
+
147
+ The repo's full design rationale lives in `AGENTS.md` (the single source of
148
+ truth for all agents; `CLAUDE.md` is a thin stub that imports it) and
149
+ `.omg/audit/` (the architectural audit + cleanup queue).
150
+
151
+ ## License
152
+
153
+ [MIT](LICENSE)
@@ -0,0 +1,39 @@
1
+ export interface CliOptions {
2
+ headless?: boolean;
3
+ demo?: boolean;
4
+ run?: string;
5
+ role: string;
6
+ provider: string;
7
+ teamRun?: string;
8
+ reviewers: string;
9
+ strategy: string;
10
+ maxIterations: string;
11
+ maxSteps: string;
12
+ tools?: boolean;
13
+ writeTools?: boolean;
14
+ shellTools?: boolean;
15
+ cliTools?: string;
16
+ defaultTools?: boolean;
17
+ cliPermissionMode?: string;
18
+ ask?: boolean;
19
+ altScreen?: boolean;
20
+ loop?: boolean;
21
+ mcpServe?: boolean;
22
+ mcpAllow?: string;
23
+ mcpProvider?: string;
24
+ exposeOmgTools?: boolean;
25
+ restoreTabs?: boolean;
26
+ login?: string;
27
+ doctor?: boolean;
28
+ doctorJson?: boolean;
29
+ json?: boolean;
30
+ }
31
+ export interface ParsedCli {
32
+ opts: CliOptions;
33
+ toolsEnabled: boolean;
34
+ writable: boolean;
35
+ shell: boolean;
36
+ adapterOpts: Record<string, unknown>;
37
+ }
38
+ export declare function parseArgs(argv: string[]): ParsedCli;
39
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IAItB,KAAK,CAAC,EAAE,MAAM,CAAC;IAKf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAoLnD"}
@@ -0,0 +1,129 @@
1
+ // omg — CLI argument parsing, extracted from cli.ts (pure move).
2
+ // Builds the Commander program, parses argv, applies the env side
3
+ // effects that gate runtime behaviour (OMG_RESTORE_TABS / OMG_ALT_SCREEN),
4
+ // and derives the tool-tier + adapter-opts blocks the run-modes consume.
5
+ // Behaviour is byte-identical to the pre-split inline parser.
6
+ import { Command } from "commander";
7
+ import { VERSION } from "../index.js";
8
+ export function parseArgs(argv) {
9
+ const program = new Command();
10
+ program
11
+ .name("omg")
12
+ .description("Multi-LLM team orchestrator")
13
+ .version(VERSION, "-V, --version")
14
+ .option("--headless", "Emit JSON-RPC events to stdout instead of launching the UI.")
15
+ .option("--demo", "Run a scripted demo pipeline.")
16
+ .option("--run <PROMPT>", "Run one orchestrator turn against PROMPT.")
17
+ .option("--role <ROLE>", "Role to invoke for --run.", "implementer")
18
+ .option("--provider <P>", "Adapter (policy|stub|claude|codex|gemini|claude-cli|codex-cli|gemini-cli).", "policy")
19
+ .option("--team-run <PROMPT>", "Run a multi-role team against PROMPT.")
20
+ .option("--reviewers <ROLES>", "Comma-separated reviewer roles.", "reviewer")
21
+ .option("--strategy <S>", "Consensus strategy (escalate|voting|hierarchy).", "escalate")
22
+ .option("--max-iterations <N>", "Max team iterations.", "3")
23
+ .option("--max-steps <N>", "Max steps for --run --loop.", "5")
24
+ .option("--tools", "Enable read-only tool execution.")
25
+ .option("--write-tools", "Enable write tools (implies --tools).")
26
+ .option("--shell-tools", "Enable run_shell + write tools. Privileged; pair with --ask.")
27
+ .option("--cli-tools <list>", "(claude-cli only) Activate CLI-native tools; comma- or space-separated, e.g. 'Read,Edit,Bash'. Tools execute inside the CLI; omg shows them but does not re-run.")
28
+ .option("--no-default-tools", "(interactive chat only) Disable the host CLI's native tools. Default is on for interactive chat so the model can actually read/edit files; pass this to chat tool-free.")
29
+ .option("--cli-permission-mode <mode>", "(claude-cli only) Permission mode for --cli-tools (acceptEdits|auto|bypassPermissions|default|dontAsk|plan).")
30
+ .option("--ask", "Require UI permission before each tool call (UI mode only).")
31
+ .option("--alt-screen", "Use Codex-style alternate screen mode. Default is normal-screen transcript mode, which keeps native terminal scrollback, search, and copy.")
32
+ .option("--loop", "Run an agentic multi-step loop with --run.")
33
+ .option("--mcp-serve", "Run omg as an MCP server over stdio. Exposes the registry chosen by --tools/--write-tools/--shell-tools.")
34
+ .option("--mcp-allow <names>", "(with --mcp-serve) Comma-separated external MCP server names to expose; others are withheld. Set per-role by the team pipeline.")
35
+ .option("--mcp-provider <p>", "(with --mcp-serve) Base provider this server child serves, so provider-tagged servers are scoped correctly.")
36
+ .option("--expose-omg-tools", "(claude-cli) Spawn omg's MCP server as a child of the CLI so omg's tools (echo / read_file / ask_user / etc.) are callable from the model alongside the CLI's native tools. On by default for interactive chat.")
37
+ .option("--no-expose-omg-tools", "Opt out of exposing omg's tools (disables the ask_user picker and omg's run_shell/delegate in chat).")
38
+ .option("--restore-tabs", "Re-open the tabs from the previous chat session (~/.omg/tabs/state.json). Conversation content is not restored; sessionId is, so /resume revives a thread.")
39
+ .option("--json", "(omg doctor) Emit the diagnosis as JSON.")
40
+ .allowExcessArguments(true)
41
+ .helpOption("-h, --help");
42
+ program.parse(argv, { from: "user" });
43
+ const opts = program.opts();
44
+ // Phase 293: `omg login [provider]` arrives as positional args (the
45
+ // program only declares options, and allowExcessArguments lets these
46
+ // through). argv "login codex" → program.args ["login", "codex"].
47
+ if (program.args[0] === "login") {
48
+ opts.login = (program.args[1] ?? "").toLowerCase();
49
+ }
50
+ // Phase 344: `omg doctor [--json]`. `--json` rides through as an excess
51
+ // arg (allowExcessArguments), so we read it off program.args directly.
52
+ if (program.args[0] === "doctor") {
53
+ opts.doctor = true;
54
+ opts.doctorJson = !!opts.json;
55
+ }
56
+ // Phase 264: --reset-tabs flag removed — wipe via
57
+ // `rm ~/.omg/tabs/state.json` when a persisted entry's provider is
58
+ // no longer installed. --inject-memory flag removed; runtime
59
+ // `/memory inject [on|off]` is the canonical toggle, with
60
+ // `OMG_INJECT_MEMORY=1` as the equivalent startup env var. The
61
+ // env var path here stays so existing shells/scripts that export
62
+ // it keep working.
63
+ if (opts.restoreTabs) {
64
+ process.env.OMG_RESTORE_TABS = "1";
65
+ }
66
+ if (opts.altScreen) {
67
+ process.env.OMG_ALT_SCREEN = "1";
68
+ }
69
+ const toolsEnabled = !!(opts.tools || opts.writeTools || opts.shellTools);
70
+ const writable = !!(opts.writeTools || opts.shellTools);
71
+ const shell = !!opts.shellTools;
72
+ // Adapter-specific opts threaded down through makeAdapter / make
73
+ // TeamStubAdapter. `cliTools` semantics are provider-specific:
74
+ // claude-cli : comma/space-separated tool whitelist
75
+ // codex-cli : sandbox mode (e.g. "read-only", "workspace-write")
76
+ // gemini-cli : any non-empty value enables --yolo
77
+ // Each adapter parses the raw string itself. Other adapters ignore
78
+ // unknown fields safely.
79
+ // "interactive" = not one of the scripting subcommands. Computed up
80
+ // front because the omg-tools default depends on it. Phase 264:
81
+ // `--chat` is gone; bare invocation always drops into chat, so
82
+ // "interactive" is just "no scripting flag set".
83
+ const scripting = !!opts.run ||
84
+ !!opts.teamRun ||
85
+ !!opts.demo ||
86
+ !!opts.mcpServe ||
87
+ !!opts.headless;
88
+ const interactive = !scripting;
89
+ // Phase 155: expose omg's tools (ask_user picker, run_shell, delegate,
90
+ // external MCP) by default in interactive chat. `--no-expose-omg-tools`
91
+ // opts out (commander sets exposeOmgTools=false). Scripting modes stay
92
+ // off unless explicitly enabled.
93
+ const exposeOmg = opts.exposeOmgTools !== false && interactive;
94
+ const adapterOpts = {};
95
+ if (opts.cliTools)
96
+ adapterOpts.cliTools = opts.cliTools;
97
+ if (opts.cliPermissionMode)
98
+ adapterOpts.permissionMode = opts.cliPermissionMode;
99
+ // Phase 264: --verbose-stderr flag removed; debug toggles belong in
100
+ // env vars. OMG_VERBOSE_STDERR=1 passes the CLI subprocess's full
101
+ // stderr through to omg's stderr (instead of the default filtered
102
+ // stream that drops Codex's "Reading additional input..." / Gemini's
103
+ // YOLO/Ripgrep banners / deprecation warnings).
104
+ if (process.env.OMG_VERBOSE_STDERR === "1") {
105
+ adapterOpts.verboseStderr = true;
106
+ }
107
+ if (exposeOmg) {
108
+ adapterOpts.omgTools = {
109
+ writable: !!opts.writeTools,
110
+ shell: !!opts.shellTools,
111
+ };
112
+ }
113
+ // Phase 91: interactive chat is a coding assistant. Without
114
+ // tools the model hallucinates them as XML text in its reply
115
+ // (claude-cli without --tools "" disabled emits "<tool_use>..."
116
+ // text-only fallbacks). Leave the host CLI's native tool set on
117
+ // by default for chat; explicit --cli-tools still takes precedence,
118
+ // and --no-default-tools opts out.
119
+ // commander turns --no-default-tools into defaultTools: false.
120
+ // Default is undefined (= treat as on) so chat enables tools.
121
+ if (interactive &&
122
+ !opts.cliTools &&
123
+ !exposeOmg &&
124
+ opts.defaultTools !== false) {
125
+ adapterOpts.disableTools = false;
126
+ }
127
+ return { opts, toolsEnabled, writable, shell, adapterOpts };
128
+ }
129
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type AutoCommitOutcome = {
2
+ kind: "committed";
3
+ sha: string;
4
+ message: string;
5
+ } | {
6
+ kind: "no-changes";
7
+ } | {
8
+ kind: "not-a-repo";
9
+ } | {
10
+ kind: "failed";
11
+ reason: string;
12
+ };
13
+ /** Run one auto-commit pass against `cwd`. Returns an outcome the
14
+ * caller can render as a one-line notification. Never throws. */
15
+ export declare function autoCommit(cwd: string, tabName: string, assistantText: string, paths?: readonly string[]): Promise<AutoCommitOutcome>;
16
+ /** Render an outcome as a one-line user-visible message. Returns null
17
+ * when the outcome is silent (no-changes / not-a-repo — auto-commit
18
+ * is opportunistic, so the absence of work isn't surfaced). */
19
+ export declare function formatAutoCommitOutcome(outcome: AutoCommitOutcome): string | null;
20
+ //# sourceMappingURL=autoCommit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoCommit.d.ts","sourceRoot":"","sources":["../../src/cli/autoCommit.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;kEACkE;AAClE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAKrB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAuE5B;AAQD;;gEAEgE;AAChE,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GACzB,MAAM,GAAG,IAAI,CAUf"}
@@ -0,0 +1,121 @@
1
+ // Phase 209: opt-in atomic commit per turn (Aider-style).
2
+ //
3
+ // When a tab has auto-commit enabled, the end of each successful turn
4
+ // fires a best-effort `git add -A && git commit -m "[omg/<tab>] <summary>"`
5
+ // against the tab's cwd. Surfaces the resulting short SHA + message as
6
+ // an `event/text` line in the log; failures (not a repo, no changes,
7
+ // pre-commit hook reject) surface a single warning line and never
8
+ // block the turn.
9
+ //
10
+ // Per [feedback_ui-restraint], default is OFF — auto-commit on a
11
+ // repo with conventional commit hooks would explode the history with
12
+ // "[omg/main] ok" rows.
13
+ import { execFile } from "node:child_process";
14
+ import { promisify } from "node:util";
15
+ // Phase 154 / Hotfix-post-Phase-218: `detached: true` + `unref()` so a
16
+ // slow pre-commit hook can't keep omg alive past `/quit`. The git
17
+ // child keeps running in the background; if the commit succeeds the
18
+ // user sees the notification on next omg invocation via the repo log,
19
+ // not via in-app event. If pre-commit rejects, the warning line just
20
+ // doesn't surface — acceptable for an opt-in tool that the user can
21
+ // always check with `git log`.
22
+ const execAsync = promisify(execFile);
23
+ const SPAWN_OPTS = { detached: true };
24
+ const SUMMARY_LIMIT = 70;
25
+ /** Run one auto-commit pass against `cwd`. Returns an outcome the
26
+ * caller can render as a one-line notification. Never throws. */
27
+ export async function autoCommit(cwd, tabName, assistantText,
28
+ // Phase 341: when provided, commit ONLY these paths (this tab's touched
29
+ // files) — `git add -- <paths>` + `git commit -- <paths>`, so other tabs'
30
+ // changes in the shared tree are left alone. An empty array means "this
31
+ // tab changed nothing" → no-changes. Omitted = legacy whole-tree `add -A`.
32
+ paths) {
33
+ const scoped = paths !== undefined;
34
+ if (scoped && paths.length === 0)
35
+ return { kind: "no-changes" };
36
+ // 1. Confirm we're in a git work tree. `rev-parse` is the cheapest
37
+ // "is this a repo?" probe and is silent on success.
38
+ try {
39
+ await execAsync("git", ["rev-parse", "--is-inside-work-tree"], {
40
+ cwd,
41
+ ...SPAWN_OPTS,
42
+ });
43
+ }
44
+ catch {
45
+ return { kind: "not-a-repo" };
46
+ }
47
+ // 2. Anything to commit? Scope the dirty-check to this tab's paths so a
48
+ // tab whose own files are clean reports no-changes even when other
49
+ // tabs left the tree dirty.
50
+ let dirty;
51
+ try {
52
+ const statusArgs = scoped
53
+ ? ["status", "--porcelain", "--", ...paths]
54
+ : ["status", "--porcelain"];
55
+ const { stdout } = await execAsync("git", statusArgs, {
56
+ cwd,
57
+ ...SPAWN_OPTS,
58
+ });
59
+ dirty = stdout.trim();
60
+ }
61
+ catch (e) {
62
+ return { kind: "failed", reason: e.message };
63
+ }
64
+ if (dirty.length === 0)
65
+ return { kind: "no-changes" };
66
+ // 3. Compose the message. First non-empty line of the assistant
67
+ // reply, collapsed whitespace, truncated. Fall back to "auto-commit"
68
+ // when the reply was tool-only with no prose.
69
+ const summary = buildSummary(assistantText);
70
+ const message = `[omg/${tabName}] ${summary || "auto-commit"}`;
71
+ // 4. Stage + commit. Pre-commit hooks run by default; if they reject
72
+ // we surface the failure. Never use --no-verify here — silently
73
+ // bypassing a project's hooks would surprise the user. Scoped mode
74
+ // stages only this tab's paths and commits with the same pathspec
75
+ // (`commit -- <paths>` = --only), so other staged/dirty files in the
76
+ // shared tree are NOT swept into this commit.
77
+ try {
78
+ if (scoped) {
79
+ await execAsync("git", ["add", "--", ...paths], { cwd, ...SPAWN_OPTS });
80
+ await execAsync("git", ["commit", "-m", message, "--", ...paths], {
81
+ cwd,
82
+ ...SPAWN_OPTS,
83
+ });
84
+ }
85
+ else {
86
+ await execAsync("git", ["add", "-A"], { cwd, ...SPAWN_OPTS });
87
+ await execAsync("git", ["commit", "-m", message], { cwd, ...SPAWN_OPTS });
88
+ }
89
+ }
90
+ catch (e) {
91
+ return { kind: "failed", reason: e.message.split("\n")[0] };
92
+ }
93
+ // 5. Short SHA for the notification.
94
+ try {
95
+ const { stdout } = await execAsync("git", ["rev-parse", "--short", "HEAD"], { cwd, ...SPAWN_OPTS });
96
+ return { kind: "committed", sha: stdout.trim(), message };
97
+ }
98
+ catch {
99
+ // Commit landed but we can't read the sha — still report success.
100
+ return { kind: "committed", sha: "?", message };
101
+ }
102
+ }
103
+ function buildSummary(assistantText) {
104
+ const line = assistantText.split("\n").find((l) => l.trim().length > 0) ?? "";
105
+ return line.replace(/\s+/g, " ").trim().slice(0, SUMMARY_LIMIT);
106
+ }
107
+ /** Render an outcome as a one-line user-visible message. Returns null
108
+ * when the outcome is silent (no-changes / not-a-repo — auto-commit
109
+ * is opportunistic, so the absence of work isn't surfaced). */
110
+ export function formatAutoCommitOutcome(outcome) {
111
+ switch (outcome.kind) {
112
+ case "committed":
113
+ return `[auto-commit] ${outcome.sha} ${outcome.message}`;
114
+ case "failed":
115
+ return `[auto-commit] failed: ${outcome.reason}`;
116
+ case "no-changes":
117
+ case "not-a-repo":
118
+ return null;
119
+ }
120
+ }
121
+ //# sourceMappingURL=autoCommit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoCommit.js","sourceRoot":"","sources":["../../src/cli/autoCommit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface BgTaskInfo {
2
+ /** Owning tab — captured at task-start so /switch doesn't re-route
3
+ * the continuation. */
4
+ tabName: string;
5
+ /** claude-cli's task id (the suffix in the output filename). */
6
+ toolId: string;
7
+ /** Absolute path to the background task's output file. */
8
+ outputPath: string;
9
+ /** The shell command claude asked us to run. Surfaced in the
10
+ * continuation prompt so the model can identify what finished. */
11
+ command: string;
12
+ /** ms-epoch when we registered the task. */
13
+ startedAt: number;
14
+ /** Internal: last observed file size. Used by the watcher to
15
+ * detect stabilization. */
16
+ lastSize: number;
17
+ /** Internal: ms-epoch when `lastSize` was first observed. */
18
+ stableSince: number;
19
+ }
20
+ export type BgTaskCallback = (task: BgTaskInfo, output: string) => void | Promise<void>;
21
+ /** Read the last `maxBytes` of a file as UTF-8 (the whole file when it's
22
+ * smaller). Used to cheaply scan a growing output tail for the
23
+ * completion marker. Exported for tests. */
24
+ export declare function readTail(path: string, maxBytes?: number): Promise<string>;
25
+ export declare class BgTaskWatcher {
26
+ private readonly onComplete;
27
+ private readonly tasks;
28
+ private timer;
29
+ constructor(onComplete: BgTaskCallback);
30
+ /** Register a task. The watcher polls until the task's output
31
+ * file size has been stable for STABLE_MS, then fires the
32
+ * callback once and forgets it. */
33
+ track(task: BgTaskInfo): void;
34
+ /** Drop a tracked task without firing — used when the owning tab
35
+ * is closed before the task settles. */
36
+ untrack(toolId: string): void;
37
+ /** Drop every tracked task for a given tab. Called on /close. */
38
+ untrackTab(tabName: string): void;
39
+ close(): void;
40
+ private poll;
41
+ }
42
+ /** Pull the task id + output path out of a Bash tool_use_end result.
43
+ *
44
+ * claude-cli's hint reads roughly:
45
+ * Command running in background with ID: <id>. Output is being
46
+ * written to: <path>. You will be notified when it completes.
47
+ *
48
+ * Both the leading text and the trailing punctuation are stable;
49
+ * the regex tolerates the trailing period plus optional whitespace.
50
+ * Returns null when the result doesn't match (a regular Bash result
51
+ * with command output) — caller treats null as "not a background
52
+ * task." */
53
+ export declare function parseBgTaskResult(result: unknown): {
54
+ taskId: string;
55
+ outputPath: string;
56
+ } | null;
57
+ //# sourceMappingURL=bgTasks.d.ts.map