@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,184 @@
1
+ // Phase 182: auto-compact — summarize earlier messages so the next
2
+ // turn fits under the model's context window. The expensive bit
3
+ // (running a cheap LLM to write the summary) lives here as a pure
4
+ // helper; the tab/session manipulation that consumes the summary lives
5
+ // in cli/compactor.ts so this module stays free of CLI types.
6
+ import { makeAdapter } from "../orchestration/orchestrator.js";
7
+ /** Below this fraction of the window we don't bother. 0.8 leaves room
8
+ * for the next turn's input + response before we hit the hard cap. */
9
+ export const DEFAULT_COMPACT_THRESHOLD = 0.8;
10
+ /** Phase 333 (W5): codex compacts earlier than claude. GPT-family context
11
+ * degrades noticeably in the back half of the window (opencode triggers
12
+ * ~latest, but Gemini at 50% and the research consensus is that GPT/codex
13
+ * benefits from earlier condensing), and codex `exec` can't recover once
14
+ * it overflows (#16033) — so leave more headroom. */
15
+ export const CODEX_COMPACT_THRESHOLD = 0.7;
16
+ function isCodex(provider) {
17
+ return provider === "codex-cli" || provider === "codex";
18
+ }
19
+ /** Phase 322 (T2) → 333 (W5): the auto-compact threshold. Overridable via
20
+ * OMG_AUTOCOMPACT_PCT (a percent, 5–98); the env value wins for every
21
+ * provider. Absent an override, codex gets the earlier CODEX threshold
22
+ * and everything else the default. Invalid values fall back to default. */
23
+ export function compactThreshold(provider) {
24
+ const raw = process.env.OMG_AUTOCOMPACT_PCT;
25
+ if (raw !== undefined && raw !== "") {
26
+ const pct = Number(raw);
27
+ if (Number.isFinite(pct))
28
+ return Math.min(0.98, Math.max(0.05, pct / 100));
29
+ }
30
+ return isCodex(provider) ? CODEX_COMPACT_THRESHOLD : DEFAULT_COMPACT_THRESHOLD;
31
+ }
32
+ /** Decide whether the running tokensIn warrants an auto-compact. */
33
+ export function shouldAutoCompact(tokensIn, contextWindow, threshold = compactThreshold()) {
34
+ if (!contextWindow || contextWindow <= 0)
35
+ return false;
36
+ if (tokensIn <= 0)
37
+ return false;
38
+ return tokensIn / contextWindow >= threshold;
39
+ }
40
+ /** Worst-case auto-compact budget. A 200K-token history through
41
+ * claude-cli/haiku has been observed taking ~5 min, so the normal cap
42
+ * is generous. */
43
+ export const COMPACT_TIMEOUT_MS = 300_000;
44
+ /** Phase 313: a compact spawns a *second* CLI that shares the provider's
45
+ * quota. While the provider is rate-limited that call gets throttled to
46
+ * a crawl (observed: ~26 output tokens in 4.5 min) and would otherwise
47
+ * burn the full COMPACT_TIMEOUT_MS before falling through. Cap it far
48
+ * lower so the user waits seconds, not minutes, for the inevitable
49
+ * fall-through to full context. */
50
+ export const RATE_LIMITED_COMPACT_TIMEOUT_MS = 45_000;
51
+ /** Auto-compact timeout for the current tab. Shortened when the provider
52
+ * last reported a non-normal rate-limit status (any non-empty string —
53
+ * "allowed_warning" / "rejected" / …); undefined means normal. */
54
+ export function compactTimeoutMs(rateLimitStatus) {
55
+ return rateLimitStatus
56
+ ? RATE_LIMITED_COMPACT_TIMEOUT_MS
57
+ : COMPACT_TIMEOUT_MS;
58
+ }
59
+ /** Pick the cheapest model the provider is known to expose for a
60
+ * one-shot summary task. Falls back to the tab's current model when
61
+ * there's no known cheap alias (an empty model would crash adapters
62
+ * that require one). Mirrors predictNext's choice. */
63
+ export function cheapestSummaryModel(provider, currentModel) {
64
+ if (provider === "claude-cli" || provider === "claude")
65
+ return "haiku";
66
+ return currentModel || "";
67
+ }
68
+ // Phase 306: which provider/model actually RUNS a summary. The codex /
69
+ // gemini CLI summary streams hang (no stream_end) — that timed out
70
+ // compaction on codex tabs ("[compact] cancelled — proceeding with full
71
+ // context" after the 5-min cap). Redirect those to claude-cli/haiku,
72
+ // which is fast, cheap, and doesn't hang. claude tabs already get haiku;
73
+ // stub/unknown keep their own model so headless + tests stay self
74
+ // contained. OMG_SUMMARY_PROVIDER / OMG_SUMMARY_MODEL override everything
75
+ // (e.g. a codex-only user with no Claude login can point it back).
76
+ export function summaryTarget(provider, currentModel) {
77
+ const envProvider = process.env.OMG_SUMMARY_PROVIDER;
78
+ if (envProvider) {
79
+ return {
80
+ provider: envProvider,
81
+ model: process.env.OMG_SUMMARY_MODEL ??
82
+ cheapestSummaryModel(envProvider, currentModel),
83
+ };
84
+ }
85
+ if (provider === "codex-cli" ||
86
+ provider === "gemini-cli" ||
87
+ provider === "codex" ||
88
+ provider === "gemini") {
89
+ return { provider: "claude-cli", model: "haiku" };
90
+ }
91
+ return { provider, model: cheapestSummaryModel(provider, currentModel) };
92
+ }
93
+ // Phase 333 (W5): structured briefing (was a flat "preserve X, Y, Z" line).
94
+ // The research consensus (Claude Code / Roo 9-section prompts) is that a
95
+ // sectioned summary with VERBATIM quotes of key user instructions resists
96
+ // the post-compaction "task amnesia" that hits codex hardest (#5957) —
97
+ // codex confidently forgot edits it had made after its own compaction.
98
+ // Helps every provider; the labels are cheap and the next turn resumes
99
+ // from a real briefing instead of a paraphrase.
100
+ const SUMMARY_PROMPT = "You are condensing the conversation so it can replace the earlier turns " +
101
+ "as a single briefing the assistant will continue from. Preserve, under " +
102
+ "brief labels:\n" +
103
+ "1. User intent — what they asked for, quoting key instructions VERBATIM " +
104
+ "(do not paraphrase away specifics, numbers, or names).\n" +
105
+ "2. Decisions & constraints settled — and approaches explicitly abandoned, " +
106
+ "with why.\n" +
107
+ "3. Files/paths touched and any code being iterated on.\n" +
108
+ "4. Errors encountered and how they were fixed.\n" +
109
+ "5. Current state — what was just completed and what is in progress.\n" +
110
+ "6. Next steps / outstanding TODOs.\n" +
111
+ "Drop small talk and tool output that isn't load-bearing. Be specific over " +
112
+ "comprehensive — a future turn must resume WITHOUT re-reading the " +
113
+ "transcript. Output ONLY the briefing. Match the user's language.";
114
+ /** Run the cheap model over `messages` and return the summary text.
115
+ * Empty string on failure or empty output.
116
+ *
117
+ * Phase 259: caller may pass `onCancel` to receive a cancel handle
118
+ * that SIGTERMs the spawned summarizer child. Used by compactTab
119
+ * to wire Esc → cancel.
120
+ */
121
+ export async function summarizeMessages(messages, provider, model, baseOpts, opts = {}) {
122
+ if (messages.length === 0)
123
+ return "";
124
+ // Phase 306: run the summary on the reliable target (claude-cli/haiku
125
+ // for codex/gemini tabs), not the tab's own — possibly hanging — CLI.
126
+ const target = summaryTarget(provider, model);
127
+ let adapter;
128
+ try {
129
+ adapter = await makeAdapter(target.provider, target.model, {
130
+ ...baseOpts,
131
+ disableTools: true,
132
+ enableSessionResume: false,
133
+ });
134
+ }
135
+ catch {
136
+ return "";
137
+ }
138
+ // Phase 259: expose the adapter's cancel through the caller's
139
+ // callback. The adapter object exists now (post-makeAdapter), so
140
+ // a cancel landing during the actual stream() will SIGTERM the
141
+ // child immediately. We use a flag to swallow late cancels.
142
+ let cancelled = false;
143
+ opts.onCancel?.({
144
+ cancel: () => {
145
+ cancelled = true;
146
+ adapter?.cancel?.();
147
+ },
148
+ });
149
+ // Phase 322 (T2): a full systemPrompt override (e.g. /handoff) wins;
150
+ // otherwise the default prompt, optionally extended with /compact focus.
151
+ const baseSystem = opts.systemPrompt ?? SUMMARY_PROMPT;
152
+ const system = !opts.systemPrompt && opts.focus && opts.focus.trim().length > 0
153
+ ? `${baseSystem}\n\nPay special attention to and preserve in detail: ${opts.focus.trim()}`
154
+ : baseSystem;
155
+ const conv = {
156
+ system,
157
+ messages: messages.map((m) => m.role === "assistant"
158
+ ? { role: "assistant", text: m.text, toolCalls: [] }
159
+ : { role: "user", text: m.text }),
160
+ };
161
+ const parts = [];
162
+ let chars = 0;
163
+ try {
164
+ const stream = adapter.stream(conv);
165
+ for await (const c of stream) {
166
+ if (cancelled)
167
+ return "";
168
+ if (c.type === "text" && typeof c.text === "string") {
169
+ parts.push(c.text);
170
+ chars += c.text.length;
171
+ opts.onProgress?.(chars);
172
+ }
173
+ if (c.type === "stream_end")
174
+ break;
175
+ }
176
+ }
177
+ catch {
178
+ return "";
179
+ }
180
+ if (cancelled)
181
+ return "";
182
+ return parts.join("").trim();
183
+ }
184
+ //# sourceMappingURL=summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../../src/core/context/summarizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface WindowUsage {
2
+ used?: number;
3
+ limit?: number;
4
+ resetsAt?: number;
5
+ }
6
+ export interface UsageSnapshot {
7
+ fiveHour?: WindowUsage;
8
+ weekly?: WindowUsage;
9
+ session?: WindowUsage;
10
+ }
11
+ /** Read the usage cache pointed to by OMG_USAGE_CACHE (or the explicit
12
+ * path). Returns null when the env var is unset, the file is missing,
13
+ * the JSON is unparseable, or the file's mtime is older than the TTL
14
+ * — callers fall back to raw "~" usage instead of rendering a stale
15
+ * percentage from a dead producer. */
16
+ export declare function loadUsageCache(path?: string | undefined): UsageSnapshot | null;
17
+ /** Flatten a UsageSnapshot into the status-bar fields the gauge reads. */
18
+ export declare function usageStatusFields(snap: UsageSnapshot): Record<string, number>;
19
+ //# sourceMappingURL=usageCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageCache.d.ts","sourceRoot":"","sources":["../../../src/core/context/usageCache.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AA8ED;;;;uCAIuC;AACvC,wBAAgB,cAAc,CAC5B,IAAI,GAAE,MAAM,GAAG,SAAuC,GACrD,aAAa,GAAG,IAAI,CA0BtB;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe7E"}
@@ -0,0 +1,157 @@
1
+ // Phase 112: opt-in usage cache reader.
2
+ //
3
+ // omg never touches a provider OAuth token — it delegates to the CLIs
4
+ // (claude-cli / codex-cli / gemini-cli), and the CLI stream exposes
5
+ // no plan-quota numbers (only a reset deadline + allow/deny status).
6
+ // So omg can't compute a real 5h/wk/sn usage percentage on its own.
7
+ //
8
+ // But other tools (e.g. the oh-my-claudecode statusline) already call
9
+ // the provider's usage endpoint with their own token and cache the
10
+ // result to a JSON file. Point omg at that file via OMG_USAGE_CACHE
11
+ // and it reads the cap + used numbers from it — credential-free,
12
+ // fully opt-in.
13
+ //
14
+ // Canonical omg schema (the form we document):
15
+ //
16
+ // {
17
+ // "five_hour": { "used": 34000, "limit": 100000, "resetsAt": <ms-epoch> },
18
+ // "weekly": { "used": 1500000, "limit": 5000000 },
19
+ // "session": { "used": 0, "limit": 50000 }
20
+ // }
21
+ //
22
+ // The reader is tolerant: window keys accept aliases (5h / fiveHour /
23
+ // five_hour, wk / week / weekly, sn / session), each window accepts
24
+ // either used+limit OR a direct percentage field (utilization /
25
+ // percent / used_pct), and resetsAt may be ms or seconds.
26
+ import { existsSync, readFileSync, statSync } from "node:fs";
27
+ const WINDOW_ALIASES = {
28
+ fiveHour: ["five_hour", "fiveHour", "5h", "fivehour"],
29
+ weekly: ["weekly", "week", "wk"],
30
+ session: ["session", "sn"],
31
+ };
32
+ function num(v) {
33
+ const n = Number(v);
34
+ return Number.isFinite(n) ? n : undefined;
35
+ }
36
+ /** Normalise a possibly-seconds epoch to ms. Values below ~1e12 are
37
+ * treated as seconds. */
38
+ function toMs(v) {
39
+ const n = num(v);
40
+ if (n === undefined || n <= 0)
41
+ return undefined;
42
+ return n < 1e12 ? Math.round(n * 1000) : Math.round(n);
43
+ }
44
+ /** Pull a window's usage out of a record, trying used+limit first,
45
+ * then a direct percentage (mapped to used=pct, limit=100). */
46
+ function parseWindow(obj) {
47
+ if (!obj || typeof obj !== "object")
48
+ return undefined;
49
+ const o = obj;
50
+ const resetsAt = toMs(o.resetsAt ?? o.resets_at ?? o.reset ?? o.resetTime);
51
+ const used = num(o.used ?? o.consumed ?? o.tokensUsed ?? o.tokens_used);
52
+ const limit = num(o.limit ?? o.cap ?? o.max ?? o.quota);
53
+ if (used !== undefined && limit !== undefined && limit > 0) {
54
+ return { used, limit, resetsAt };
55
+ }
56
+ // Direct percentage form.
57
+ const pct = num(o.utilization ?? o.percent ?? o.used_pct ?? o.usedPct ?? o.pct);
58
+ if (pct !== undefined) {
59
+ return { used: Math.max(0, Math.min(100, pct)), limit: 100, resetsAt };
60
+ }
61
+ // Reset-only (no usage) still useful for the countdown.
62
+ if (resetsAt !== undefined)
63
+ return { resetsAt };
64
+ return undefined;
65
+ }
66
+ function findWindow(root, aliases) {
67
+ for (const a of aliases) {
68
+ if (a in root)
69
+ return root[a];
70
+ }
71
+ // Some caches nest windows under a "windows" key.
72
+ const nested = root.windows;
73
+ if (nested && typeof nested === "object") {
74
+ const n = nested;
75
+ for (const a of aliases) {
76
+ if (a in n)
77
+ return n[a];
78
+ }
79
+ }
80
+ return undefined;
81
+ }
82
+ /** Phase 214 (F4.5): cache file is considered stale (and the snapshot
83
+ * is dropped) when mtime is older than this many milliseconds.
84
+ * 10 minutes is the audit's recommended default — long enough for a
85
+ * cooperating tool to refresh on a normal cadence, short enough that
86
+ * the user doesn't make decisions on usage numbers from an hour ago
87
+ * if the producer crashed. Override via OMG_USAGE_CACHE_TTL_MS for
88
+ * tools with a different refresh cycle. */
89
+ const DEFAULT_TTL_MS = 10 * 60 * 1000;
90
+ function resolvedTtlMs() {
91
+ const raw = process.env.OMG_USAGE_CACHE_TTL_MS;
92
+ if (!raw)
93
+ return DEFAULT_TTL_MS;
94
+ const n = Number(raw);
95
+ return Number.isFinite(n) && n > 0 ? n : DEFAULT_TTL_MS;
96
+ }
97
+ /** Read the usage cache pointed to by OMG_USAGE_CACHE (or the explicit
98
+ * path). Returns null when the env var is unset, the file is missing,
99
+ * the JSON is unparseable, or the file's mtime is older than the TTL
100
+ * — callers fall back to raw "~" usage instead of rendering a stale
101
+ * percentage from a dead producer. */
102
+ export function loadUsageCache(path = process.env.OMG_USAGE_CACHE) {
103
+ if (!path)
104
+ return null;
105
+ if (!existsSync(path))
106
+ return null;
107
+ // Phase 214: drop snapshots whose producer hasn't refreshed within
108
+ // the TTL window — a stale chip ("ctx 67%") is worse than no chip
109
+ // because the user might make decisions on it.
110
+ try {
111
+ const st = statSync(path);
112
+ if (Date.now() - st.mtimeMs > resolvedTtlMs())
113
+ return null;
114
+ }
115
+ catch {
116
+ // stat failed — let the read path handle the error; if statSync
117
+ // fails the read almost certainly will too.
118
+ }
119
+ try {
120
+ const raw = readFileSync(path, "utf-8");
121
+ const parsed = JSON.parse(raw);
122
+ if (!parsed || typeof parsed !== "object")
123
+ return null;
124
+ const snap = {};
125
+ for (const key of Object.keys(WINDOW_ALIASES)) {
126
+ const w = parseWindow(findWindow(parsed, WINDOW_ALIASES[key]));
127
+ if (w)
128
+ snap[key] = w;
129
+ }
130
+ return Object.keys(snap).length > 0 ? snap : null;
131
+ }
132
+ catch {
133
+ return null;
134
+ }
135
+ }
136
+ /** Flatten a UsageSnapshot into the status-bar fields the gauge reads. */
137
+ export function usageStatusFields(snap) {
138
+ const out = {};
139
+ const map = [
140
+ ["fiveHour", "tokensUsed5h", "capFiveHour", "fiveHourResetsAt"],
141
+ ["weekly", "tokensUsedWeekly", "capWeekly", "weeklyResetsAt"],
142
+ ["session", "tokensUsedSession", "capSession", "sessionResetsAt"],
143
+ ];
144
+ for (const [key, usedField, capField, resetField] of map) {
145
+ const w = snap[key];
146
+ if (!w)
147
+ continue;
148
+ if (w.used !== undefined)
149
+ out[usedField] = w.used;
150
+ if (w.limit !== undefined)
151
+ out[capField] = w.limit;
152
+ if (w.resetsAt !== undefined)
153
+ out[resetField] = w.resetsAt;
154
+ }
155
+ return out;
156
+ }
157
+ //# sourceMappingURL=usageCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageCache.js","sourceRoot":"","sources":["../../../src/core/context/usageCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare class RollingUsage {
2
+ private readonly windowMs;
3
+ /** Entries of [ms-epoch, tokens] — old ones drop on prune. */
4
+ private entries;
5
+ constructor(windowMs: number);
6
+ record(ts: number, tokens: number): void;
7
+ /** Total tokens within the trailing windowMs ending at `now`. */
8
+ sum(now: number): number;
9
+ /** Visible for tests. */
10
+ get size(): number;
11
+ private prune;
12
+ }
13
+ /** Resolve a user-supplied plan cap. Env vars override the persisted
14
+ * ~/.omg/plan.json (Phase 82); both override "no cap". Returns
15
+ * undefined when neither is set, so the bar falls back to raw
16
+ * "Nk used" with no percent. */
17
+ export declare function planCapFor(kind: "five_hour" | "weekly" | "session"): number | undefined;
18
+ export declare function setPlanCapResolver(fn: (kind: "five_hour" | "weekly" | "session") => number | undefined): void;
19
+ //# sourceMappingURL=usageWindow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageWindow.d.ts","sourceRoot":"","sources":["../../../src/core/context/usageWindow.ts"],"names":[],"mappings":"AAaA,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,8DAA8D;IAC9D,OAAO,CAAC,OAAO,CAA+B;gBAEjB,QAAQ,EAAE,MAAM;IAI7C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMxC,iEAAiE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOxB,yBAAyB;IACzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,KAAK;CAMd;AAED;;;iCAGiC;AACjC,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAGpB;AAoBD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,GACnE,IAAI,CAEN"}
@@ -0,0 +1,73 @@
1
+ // Phase 45: rolling token-usage windows.
2
+ //
3
+ // claude's rate_limit_event tells us *when* the next 5h / weekly /
4
+ // session reset lands, but not *how much* of the quota is left.
5
+ // omg can't read the user's actual plan limits, so the best we can
6
+ // do is track tokens spent in each rolling window and surface them
7
+ // as an approximate number. If the caller knows their plan's cap
8
+ // (via env vars), the bar also shows a percent.
9
+ //
10
+ // Metric: model output_tokens (additive, one number per turn). We
11
+ // could use input_tokens, but those grow with conversation history
12
+ // and double-count every turn — output_tokens reads as "model work".
13
+ export class RollingUsage {
14
+ windowMs;
15
+ /** Entries of [ms-epoch, tokens] — old ones drop on prune. */
16
+ entries = [];
17
+ constructor(windowMs) {
18
+ this.windowMs = windowMs;
19
+ if (windowMs <= 0)
20
+ throw new Error("windowMs must be positive");
21
+ }
22
+ record(ts, tokens) {
23
+ if (tokens <= 0)
24
+ return;
25
+ this.entries.push([ts, tokens]);
26
+ this.prune(ts);
27
+ }
28
+ /** Total tokens within the trailing windowMs ending at `now`. */
29
+ sum(now) {
30
+ this.prune(now);
31
+ let total = 0;
32
+ for (const [, t] of this.entries)
33
+ total += t;
34
+ return total;
35
+ }
36
+ /** Visible for tests. */
37
+ get size() {
38
+ return this.entries.length;
39
+ }
40
+ prune(now) {
41
+ const cutoff = now - this.windowMs;
42
+ while (this.entries.length > 0 && this.entries[0][0] < cutoff) {
43
+ this.entries.shift();
44
+ }
45
+ }
46
+ }
47
+ /** Resolve a user-supplied plan cap. Env vars override the persisted
48
+ * ~/.omg/plan.json (Phase 82); both override "no cap". Returns
49
+ * undefined when neither is set, so the bar falls back to raw
50
+ * "Nk used" with no percent. */
51
+ export function planCapFor(kind) {
52
+ // Lazy import to avoid a node:fs dependency cycle.
53
+ return planCapResolvedRef(kind);
54
+ }
55
+ // Default resolver: env-only, identical to the pre-Phase-82 behaviour.
56
+ // cli.ts overrides via setPlanCapResolver() to also consult
57
+ // ~/.omg/plan.json (Phase 82). Tests that don't import planConfig
58
+ // still see the original env semantics.
59
+ let planCapResolvedRef = (kind) => {
60
+ const env = kind === "five_hour"
61
+ ? process.env.OMG_PLAN_5H_TOKENS
62
+ : kind === "weekly"
63
+ ? process.env.OMG_PLAN_WEEKLY_TOKENS
64
+ : process.env.OMG_PLAN_SESSION_TOKENS;
65
+ if (!env)
66
+ return undefined;
67
+ const n = Number(env);
68
+ return Number.isFinite(n) && n > 0 ? n : undefined;
69
+ };
70
+ export function setPlanCapResolver(fn) {
71
+ planCapResolvedRef = fn;
72
+ }
73
+ //# sourceMappingURL=usageWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageWindow.js","sourceRoot":"","sources":["../../../src/core/context/usageWindow.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,mEAAmE;AACnE,gEAAgE;AAChE,mEAAmE;AACnE,mEAAmE;AACnE,iEAAiE;AACjE,gDAAgD;AAChD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,qEAAqE;AAErE,MAAM,OAAO,YAAY;IAIM;IAH7B,8DAA8D;IACtD,OAAO,GAA4B,EAAE,CAAC;IAE9C,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAC3C,IAAI,QAAQ,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,MAAc;QAC/B,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,iEAAiE;IACjE,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yBAAyB;IACzB,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,GAAW;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAED;;;iCAGiC;AACjC,MAAM,UAAU,UAAU,CACxB,IAAwC;IAExC,mDAAmD;IACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,uEAAuE;AACvE,4DAA4D;AAC5D,kEAAkE;AAClE,wCAAwC;AACxC,IAAI,kBAAkB,GAEI,CAAC,IAAI,EAAE,EAAE;IACjC,MAAM,GAAG,GACP,IAAI,KAAK,WAAW;QAClB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChC,CAAC,CAAC,IAAI,KAAK,QAAQ;YACjB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB;YACpC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,EAAoE;IAEpE,kBAAkB,GAAG,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type Bundle, type PackResult } from "./types.js";
2
+ import type { RoleRouter } from "./roleRouter.js";
3
+ export declare function renderBundle(b: Bundle): string;
4
+ export declare function renderElision(b: Bundle, reason: string): string;
5
+ export declare class ContextCompressor {
6
+ private readonly router;
7
+ constructor(router: RoleRouter);
8
+ pack(bundles: readonly Bundle[], role: string): PackResult;
9
+ }
10
+ //# sourceMappingURL=contextCompressor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextCompressor.d.ts","sourceRoot":"","sources":["../../src/core/contextCompressor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAkB,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAE/C,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;CAmC3D"}
@@ -0,0 +1,54 @@
1
+ // ContextCompressor — bundle-aware packing (G2).
2
+ //
3
+ // Mirror of legacy/omg/core/context_compressor.py. Marker format kept
4
+ // byte-identical so wire dumps and elision detection in tests carry over.
5
+ import { bundleByteSize } from "./types.js";
6
+ export function renderBundle(b) {
7
+ const header = `<<< bundle kind=${b.kind} source=${b.source} bytes=${bundleByteSize(b)} >>>`;
8
+ const footer = `<<< end ${b.source} >>>`;
9
+ return `${header}\n${b.body}\n${footer}`;
10
+ }
11
+ export function renderElision(b, reason) {
12
+ return (`<<< elided kind=${b.kind} source=${b.source} ` +
13
+ `bytes=${bundleByteSize(b)} reason=${reason} >>>`);
14
+ }
15
+ export class ContextCompressor {
16
+ router;
17
+ constructor(router) {
18
+ this.router = router;
19
+ }
20
+ pack(bundles, role) {
21
+ const budget = this.router.budgetFor(role);
22
+ const chunks = [];
23
+ const included = [];
24
+ const elided = [];
25
+ let used = 0;
26
+ for (const b of bundles) {
27
+ const rendered = renderBundle(b);
28
+ const sepCost = chunks.length > 0 ? 1 : 0;
29
+ const cost = Buffer.byteLength(rendered, "utf8") + sepCost;
30
+ if (used + cost <= budget) {
31
+ chunks.push(rendered);
32
+ included.push(b);
33
+ used += cost;
34
+ continue;
35
+ }
36
+ const marker = renderElision(b, "budget");
37
+ chunks.push(marker);
38
+ elided.push(b);
39
+ used += Buffer.byteLength(marker, "utf8") + sepCost;
40
+ }
41
+ const text = chunks.join("\n");
42
+ const utf8Used = Buffer.byteLength(text, "utf8");
43
+ return {
44
+ role,
45
+ budget,
46
+ text,
47
+ included,
48
+ elided,
49
+ used: utf8Used,
50
+ overBudget: utf8Used > budget,
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=contextCompressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextCompressor.js","sourceRoot":"","sources":["../../src/core/contextCompressor.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAE1E,OAAO,EAAgC,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1E,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,MAAM,UAAU,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7F,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC;IACzC,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,MAAc;IACrD,OAAO,CACL,mBAAmB,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,MAAM,GAAG;QAC/C,SAAS,cAAc,CAAC,CAAC,CAAC,WAAW,MAAM,MAAM,CAClD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,IAAI,CAAC,OAA0B,EAAE,IAAY;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;YAC3D,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,IAAI,IAAI,CAAC;gBACb,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,QAAQ;YACR,MAAM;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,QAAQ,GAAG,MAAM;SAC9B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /** Return the input-token capacity for a model alias, or undefined
2
+ * when the alias isn't recognized. Suffixes like `[1m]` are honored
3
+ * before the exact-table lookup. */
4
+ export declare function contextWindowFor(model: string | undefined): number | undefined;
5
+ //# sourceMappingURL=contextWindows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextWindows.d.ts","sourceRoot":"","sources":["../../src/core/contextWindows.ts"],"names":[],"mappings":"AAmCA;;qCAEqC;AACrC,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAepB"}
@@ -0,0 +1,60 @@
1
+ // Phase 36: model-name → context window (input tokens cap).
2
+ //
3
+ // Used by the status bar to show how much of the model's input
4
+ // capacity the running conversation has filled up. Each provider's
5
+ // usage envelope reports input_tokens for the most recent request,
6
+ // which equals "history packed into this turn" — i.e. context-window
7
+ // occupancy.
8
+ //
9
+ // Adding a model: drop a literal in the map, or extend `inferWindow`
10
+ // when the alias deserves substring matching (the major families
11
+ // each carry a stable prefix).
12
+ const EXACT = {
13
+ // Claude — Anthropic publishes 200K context for the 3.5/4.x families.
14
+ // The 1M variant is opt-in (`claude-opus-4-7[1m]` etc.); detected by
15
+ // the "[1m]" suffix below.
16
+ haiku: 200_000,
17
+ sonnet: 200_000,
18
+ opus: 200_000,
19
+ // Codex — `gpt-5-codex` is the current default; older models keep
20
+ // 128K-200K. Codex's config.toml lets users widen via
21
+ // `model_context_window`, so this is a conservative default.
22
+ "gpt-5-codex": 256_000,
23
+ "gpt-5": 256_000,
24
+ o3: 200_000,
25
+ "o3-mini": 200_000,
26
+ o4: 200_000,
27
+ // Gemini — 1M-context flash/pro models are the headline.
28
+ "gemini-3-flash-preview": 1_000_000,
29
+ "gemini-3-flash": 1_000_000,
30
+ "gemini-2-flash": 1_000_000,
31
+ "gemini-2-pro": 1_000_000,
32
+ "gemini-2.5-pro": 1_000_000,
33
+ };
34
+ /** Return the input-token capacity for a model alias, or undefined
35
+ * when the alias isn't recognized. Suffixes like `[1m]` are honored
36
+ * before the exact-table lookup. */
37
+ export function contextWindowFor(model) {
38
+ if (!model)
39
+ return undefined;
40
+ // 1M opt-in suffix (Anthropic).
41
+ if (/\[1m\]$/i.test(model))
42
+ return 1_000_000;
43
+ // Strip a trailing variant tag (e.g. claude-opus-4-7-20250101) and
44
+ // peel toward the family name.
45
+ const lower = model.toLowerCase();
46
+ if (EXACT[lower] !== undefined)
47
+ return EXACT[lower];
48
+ // Phase 165: match longest key first, and prefer a prefix match over a
49
+ // looser substring match — otherwise a short key (e.g. "gpt-5") could
50
+ // win over a more specific one ("gpt-5-codex") just by appearing first.
51
+ const keys = Object.keys(EXACT).sort((a, b) => b.length - a.length);
52
+ for (const key of keys)
53
+ if (lower.startsWith(key))
54
+ return EXACT[key];
55
+ for (const key of keys)
56
+ if (lower.includes(key))
57
+ return EXACT[key];
58
+ return undefined;
59
+ }
60
+ //# sourceMappingURL=contextWindows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextWindows.js","sourceRoot":"","sources":["../../src/core/contextWindows.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,+DAA+D;AAC/D,mEAAmE;AACnE,mEAAmE;AACnE,qEAAqE;AACrE,aAAa;AACb,EAAE;AACF,qEAAqE;AACrE,iEAAiE;AACjE,+BAA+B;AAE/B,MAAM,KAAK,GAA2B;IACpC,sEAAsE;IACtE,qEAAqE;IACrE,2BAA2B;IAC3B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,OAAO;IACb,kEAAkE;IAClE,sDAAsD;IACtD,6DAA6D;IAC7D,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,OAAO;IAChB,EAAE,EAAE,OAAO;IACX,SAAS,EAAE,OAAO;IAClB,EAAE,EAAE,OAAO;IACX,yDAAyD;IACzD,wBAAwB,EAAE,SAAS;IACnC,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAEF;;qCAEqC;AACrC,MAAM,UAAU,gBAAgB,CAC9B,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,gCAAgC;IAChC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,mEAAmE;IACnE,+BAA+B;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACpE,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,SAAS,CAAC;AACnB,CAAC"}