agim-cli 1.2.22 → 1.2.35

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 (307) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +8 -8
  3. package/README.zh-CN.md +6 -6
  4. package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
  5. package/dist/cli-ui/cmd-handlers.js +172 -13
  6. package/dist/cli-ui/cmd-handlers.js.map +1 -1
  7. package/dist/cli-ui/config-wizard.d.ts.map +1 -1
  8. package/dist/cli-ui/config-wizard.js +134 -24
  9. package/dist/cli-ui/config-wizard.js.map +1 -1
  10. package/dist/cli-ui/i18n.d.ts +33 -4
  11. package/dist/cli-ui/i18n.d.ts.map +1 -1
  12. package/dist/cli-ui/i18n.js +66 -8
  13. package/dist/cli-ui/i18n.js.map +1 -1
  14. package/dist/cli-ui/service.d.ts +44 -0
  15. package/dist/cli-ui/service.d.ts.map +1 -1
  16. package/dist/cli-ui/service.js +176 -8
  17. package/dist/cli-ui/service.js.map +1 -1
  18. package/dist/cli.js +193 -33
  19. package/dist/cli.js.map +1 -1
  20. package/dist/core/access-token.d.ts +51 -5
  21. package/dist/core/access-token.d.ts.map +1 -1
  22. package/dist/core/access-token.js +114 -15
  23. package/dist/core/access-token.js.map +1 -1
  24. package/dist/core/acp-server.d.ts.map +1 -1
  25. package/dist/core/acp-server.js +44 -3
  26. package/dist/core/acp-server.js.map +1 -1
  27. package/dist/core/admin-allowlist.d.ts +4 -1
  28. package/dist/core/admin-allowlist.d.ts.map +1 -1
  29. package/dist/core/admin-allowlist.js +14 -1
  30. package/dist/core/admin-allowlist.js.map +1 -1
  31. package/dist/core/admin-bootstrap.d.ts.map +1 -1
  32. package/dist/core/admin-bootstrap.js +8 -5
  33. package/dist/core/admin-bootstrap.js.map +1 -1
  34. package/dist/core/agent-base.d.ts.map +1 -1
  35. package/dist/core/agent-base.js +25 -0
  36. package/dist/core/agent-base.js.map +1 -1
  37. package/dist/core/agent-cwd.d.ts +1 -1
  38. package/dist/core/agent-cwd.d.ts.map +1 -1
  39. package/dist/core/agent-cwd.js +73 -2
  40. package/dist/core/agent-cwd.js.map +1 -1
  41. package/dist/core/agent-helper.d.ts +1 -1
  42. package/dist/core/agent-helper.js +4 -4
  43. package/dist/core/agent-helper.js.map +1 -1
  44. package/dist/core/approval-bus.d.ts +10 -0
  45. package/dist/core/approval-bus.d.ts.map +1 -1
  46. package/dist/core/approval-bus.js +130 -0
  47. package/dist/core/approval-bus.js.map +1 -1
  48. package/dist/core/approval-router.d.ts.map +1 -1
  49. package/dist/core/approval-router.js +18 -0
  50. package/dist/core/approval-router.js.map +1 -1
  51. package/dist/core/artifacts.d.ts +9 -1
  52. package/dist/core/artifacts.d.ts.map +1 -1
  53. package/dist/core/artifacts.js +22 -5
  54. package/dist/core/artifacts.js.map +1 -1
  55. package/dist/core/audit-log.d.ts +28 -0
  56. package/dist/core/audit-log.d.ts.map +1 -1
  57. package/dist/core/audit-log.js +100 -2
  58. package/dist/core/audit-log.js.map +1 -1
  59. package/dist/core/commands/coord.d.ts +4 -0
  60. package/dist/core/commands/coord.d.ts.map +1 -0
  61. package/dist/core/commands/coord.js +88 -0
  62. package/dist/core/commands/coord.js.map +1 -0
  63. package/dist/core/commands/service.d.ts +6 -5
  64. package/dist/core/commands/service.d.ts.map +1 -1
  65. package/dist/core/commands/service.js +59 -8
  66. package/dist/core/commands/service.js.map +1 -1
  67. package/dist/core/coord-systems.d.ts +10 -1
  68. package/dist/core/coord-systems.d.ts.map +1 -1
  69. package/dist/core/coord-systems.js +42 -17
  70. package/dist/core/coord-systems.js.map +1 -1
  71. package/dist/core/feature-flags.d.ts +10 -0
  72. package/dist/core/feature-flags.d.ts.map +1 -0
  73. package/dist/core/feature-flags.js +30 -0
  74. package/dist/core/feature-flags.js.map +1 -0
  75. package/dist/core/intent.d.ts.map +1 -1
  76. package/dist/core/intent.js +0 -4
  77. package/dist/core/intent.js.map +1 -1
  78. package/dist/core/logger.d.ts +31 -0
  79. package/dist/core/logger.d.ts.map +1 -1
  80. package/dist/core/logger.js +41 -1
  81. package/dist/core/logger.js.map +1 -1
  82. package/dist/core/memo-rpc.d.ts.map +1 -1
  83. package/dist/core/memo-rpc.js +6 -0
  84. package/dist/core/memo-rpc.js.map +1 -1
  85. package/dist/core/memory-distill.js +1 -1
  86. package/dist/core/memory-distill.js.map +1 -1
  87. package/dist/core/memory-rpc.d.ts.map +1 -1
  88. package/dist/core/memory-rpc.js +55 -12
  89. package/dist/core/memory-rpc.js.map +1 -1
  90. package/dist/core/memory.d.ts +5 -0
  91. package/dist/core/memory.d.ts.map +1 -1
  92. package/dist/core/memory.js +151 -1
  93. package/dist/core/memory.js.map +1 -1
  94. package/dist/core/memos.d.ts.map +1 -1
  95. package/dist/core/memos.js +20 -2
  96. package/dist/core/memos.js.map +1 -1
  97. package/dist/core/onboarding.d.ts +6 -0
  98. package/dist/core/onboarding.d.ts.map +1 -1
  99. package/dist/core/onboarding.js +21 -10
  100. package/dist/core/onboarding.js.map +1 -1
  101. package/dist/core/outbox.d.ts +8 -1
  102. package/dist/core/outbox.d.ts.map +1 -1
  103. package/dist/core/outbox.js +46 -2
  104. package/dist/core/outbox.js.map +1 -1
  105. package/dist/core/persona.d.ts.map +1 -1
  106. package/dist/core/persona.js +1 -18
  107. package/dist/core/persona.js.map +1 -1
  108. package/dist/core/prompt-injection-guard.d.ts +23 -0
  109. package/dist/core/prompt-injection-guard.d.ts.map +1 -0
  110. package/dist/core/prompt-injection-guard.js +94 -0
  111. package/dist/core/prompt-injection-guard.js.map +1 -0
  112. package/dist/core/registry.d.ts +8 -0
  113. package/dist/core/registry.d.ts.map +1 -1
  114. package/dist/core/registry.js +41 -7
  115. package/dist/core/registry.js.map +1 -1
  116. package/dist/core/restart-flow.d.ts.map +1 -1
  117. package/dist/core/restart-flow.js +27 -0
  118. package/dist/core/restart-flow.js.map +1 -1
  119. package/dist/core/router.d.ts.map +1 -1
  120. package/dist/core/router.js +22 -0
  121. package/dist/core/router.js.map +1 -1
  122. package/dist/core/sensitive-paths.d.ts +28 -0
  123. package/dist/core/sensitive-paths.d.ts.map +1 -0
  124. package/dist/core/sensitive-paths.js +234 -0
  125. package/dist/core/sensitive-paths.js.map +1 -0
  126. package/dist/core/session.d.ts +9 -0
  127. package/dist/core/session.d.ts.map +1 -1
  128. package/dist/core/session.js +35 -4
  129. package/dist/core/session.js.map +1 -1
  130. package/dist/core/types.d.ts +9 -1
  131. package/dist/core/types.d.ts.map +1 -1
  132. package/dist/core/user-coord-prefs.d.ts +17 -0
  133. package/dist/core/user-coord-prefs.d.ts.map +1 -0
  134. package/dist/core/user-coord-prefs.js +86 -0
  135. package/dist/core/user-coord-prefs.js.map +1 -0
  136. package/dist/core/viewer-local.d.ts +4 -0
  137. package/dist/core/viewer-local.d.ts.map +1 -1
  138. package/dist/core/viewer-local.js +74 -0
  139. package/dist/core/viewer-local.js.map +1 -1
  140. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts +49 -0
  141. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts.map +1 -0
  142. package/dist/plugins/agents/antigravity/ensure-mcp-config.js +110 -0
  143. package/dist/plugins/agents/antigravity/ensure-mcp-config.js.map +1 -0
  144. package/dist/plugins/agents/antigravity/index.d.ts +34 -0
  145. package/dist/plugins/agents/antigravity/index.d.ts.map +1 -0
  146. package/dist/plugins/agents/antigravity/index.js +330 -0
  147. package/dist/plugins/agents/antigravity/index.js.map +1 -0
  148. package/dist/plugins/agents/claude-code/mcp-approval-server.js +5 -5
  149. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  150. package/dist/plugins/messengers/feishu/card-builder.d.ts.map +1 -1
  151. package/dist/plugins/messengers/feishu/card-builder.js +0 -1
  152. package/dist/plugins/messengers/feishu/card-builder.js.map +1 -1
  153. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -1
  154. package/dist/plugins/messengers/telegram/telegram-adapter.js +11 -2
  155. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
  156. package/dist/utils/cross-platform.d.ts +0 -5
  157. package/dist/utils/cross-platform.d.ts.map +1 -1
  158. package/dist/utils/cross-platform.js +1 -21
  159. package/dist/utils/cross-platform.js.map +1 -1
  160. package/dist/web/public/assets/{a2a-Dk2fSs33.js → a2a-BFM2Ojvs.js} +2 -2
  161. package/dist/web/public/assets/{a2a-Dk2fSs33.js.map → a2a-BFM2Ojvs.js.map} +1 -1
  162. package/dist/web/public/assets/{activity-eiIPshcV.js → activity-DNe1vn9s.js} +2 -2
  163. package/dist/web/public/assets/{activity-eiIPshcV.js.map → activity-DNe1vn9s.js.map} +1 -1
  164. package/dist/web/public/assets/{admins-DlbQYdW_.js → admins-DtIF8yji.js} +2 -2
  165. package/dist/web/public/assets/{admins-DlbQYdW_.js.map → admins-DtIF8yji.js.map} +1 -1
  166. package/dist/web/public/assets/agents-BJ3jyH1u.js +12 -0
  167. package/dist/web/public/assets/agents-BJ3jyH1u.js.map +1 -0
  168. package/dist/web/public/assets/{approvals-DlXS_sKD.js → approvals-8ifx3_0b.js} +2 -2
  169. package/dist/web/public/assets/{approvals-DlXS_sKD.js.map → approvals-8ifx3_0b.js.map} +1 -1
  170. package/dist/web/public/assets/{audit-C8I8xC_6.js → audit-BiFOljMy.js} +2 -2
  171. package/dist/web/public/assets/{audit-C8I8xC_6.js.map → audit-BiFOljMy.js.map} +1 -1
  172. package/dist/web/public/assets/{bgjobs-PFYinH7D.js → bgjobs-Dve01ab0.js} +2 -2
  173. package/dist/web/public/assets/{bgjobs-PFYinH7D.js.map → bgjobs-Dve01ab0.js.map} +1 -1
  174. package/dist/web/public/assets/{brain-DEEJttEL.js → brain-BI78EY6_.js} +2 -2
  175. package/dist/web/public/assets/{brain-DEEJttEL.js.map → brain-BI78EY6_.js.map} +1 -1
  176. package/dist/web/public/assets/{briefcase-BlMy8gI6.js → briefcase-CuwoOW31.js} +2 -2
  177. package/dist/web/public/assets/{briefcase-BlMy8gI6.js.map → briefcase-CuwoOW31.js.map} +1 -1
  178. package/dist/web/public/assets/{chevron-right-DmABPvoA.js → chevron-right-D5JanEQ3.js} +2 -2
  179. package/dist/web/public/assets/{chevron-right-DmABPvoA.js.map → chevron-right-D5JanEQ3.js.map} +1 -1
  180. package/dist/web/public/assets/{circle-check-C0Qpg1vL.js → circle-check-DXMzdFtD.js} +2 -2
  181. package/dist/web/public/assets/{circle-check-C0Qpg1vL.js.map → circle-check-DXMzdFtD.js.map} +1 -1
  182. package/dist/web/public/assets/{circle-check-big-C8LG3beV.js → circle-check-big-CyJIIhiq.js} +2 -2
  183. package/dist/web/public/assets/{circle-check-big-C8LG3beV.js.map → circle-check-big-CyJIIhiq.js.map} +1 -1
  184. package/dist/web/public/assets/{circle-x-D_cRHcHK.js → circle-x-DTwfNpvp.js} +2 -2
  185. package/dist/web/public/assets/{circle-x-D_cRHcHK.js.map → circle-x-DTwfNpvp.js.map} +1 -1
  186. package/dist/web/public/assets/{confirm-dialog-Baz_xFle.js → confirm-dialog-F0sdcLGN.js} +2 -2
  187. package/dist/web/public/assets/{confirm-dialog-Baz_xFle.js.map → confirm-dialog-F0sdcLGN.js.map} +1 -1
  188. package/dist/web/public/assets/{data-table--I_ktDF4.js → data-table-DN_-VLbp.js} +2 -2
  189. package/dist/web/public/assets/{data-table--I_ktDF4.js.map → data-table-DN_-VLbp.js.map} +1 -1
  190. package/dist/web/public/assets/{dialog-DZpoEskO.js → dialog-CM16nfWK.js} +2 -2
  191. package/dist/web/public/assets/{dialog-DZpoEskO.js.map → dialog-CM16nfWK.js.map} +1 -1
  192. package/dist/web/public/assets/{download-DbFGHwZ5.js → download-tFqY3Zj6.js} +2 -2
  193. package/dist/web/public/assets/{download-DbFGHwZ5.js.map → download-tFqY3Zj6.js.map} +1 -1
  194. package/dist/web/public/assets/{email-BB1Hq8eE.js → email-By2-ARPV.js} +2 -2
  195. package/dist/web/public/assets/{email-BB1Hq8eE.js.map → email-By2-ARPV.js.map} +1 -1
  196. package/dist/web/public/assets/{empty-state-DXNa90pP.js → empty-state-Dq9_8t-M.js} +2 -2
  197. package/dist/web/public/assets/{empty-state-DXNa90pP.js.map → empty-state-Dq9_8t-M.js.map} +1 -1
  198. package/dist/web/public/assets/{external-link-nhnJN0qg.js → external-link-amfAWSUX.js} +2 -2
  199. package/dist/web/public/assets/{external-link-nhnJN0qg.js.map → external-link-amfAWSUX.js.map} +1 -1
  200. package/dist/web/public/assets/{eye-IKkn_oUo.js → eye-BfgN09Lx.js} +2 -2
  201. package/dist/web/public/assets/{eye-IKkn_oUo.js.map → eye-BfgN09Lx.js.map} +1 -1
  202. package/dist/web/public/assets/{facts-C7Qy9vTw.js → facts-uvL__ilQ.js} +2 -2
  203. package/dist/web/public/assets/{facts-C7Qy9vTw.js.map → facts-uvL__ilQ.js.map} +1 -1
  204. package/dist/web/public/assets/{health-CMRdeNEW.js → health-fiU-ueEw.js} +2 -2
  205. package/dist/web/public/assets/{health-CMRdeNEW.js.map → health-fiU-ueEw.js.map} +1 -1
  206. package/dist/web/public/assets/{hot-Bh5Nrc7i.js → hot-Dt4V3jM_.js} +2 -2
  207. package/dist/web/public/assets/{hot-Bh5Nrc7i.js.map → hot-Dt4V3jM_.js.map} +1 -1
  208. package/dist/web/public/assets/{index-CpGWCLE5.js → index-6GMwymev.js} +8 -8
  209. package/dist/web/public/assets/index-6GMwymev.js.map +1 -0
  210. package/dist/web/public/assets/{index-GpceOxum.css → index-CDYTPZH0.css} +1 -1
  211. package/dist/web/public/assets/{installed-FYLkPij2.js → installed-B_x6no76.js} +2 -2
  212. package/dist/web/public/assets/{installed-FYLkPij2.js.map → installed-B_x6no76.js.map} +1 -1
  213. package/dist/web/public/assets/{jobs-BmqLUzHp.js → jobs-LqWH3CIe.js} +2 -2
  214. package/dist/web/public/assets/{jobs-BmqLUzHp.js.map → jobs-LqWH3CIe.js.map} +1 -1
  215. package/dist/web/public/assets/layout-CvxcdPD9.js +2 -0
  216. package/dist/web/public/assets/layout-CvxcdPD9.js.map +1 -0
  217. package/dist/web/public/assets/{layout-BZaHqf69.js → layout-DHUzlXrd.js} +2 -2
  218. package/dist/web/public/assets/{layout-BZaHqf69.js.map → layout-DHUzlXrd.js.map} +1 -1
  219. package/dist/web/public/assets/{layout-CXsUyEpG.js → layout-MNk0bLGe.js} +2 -2
  220. package/dist/web/public/assets/{layout-CXsUyEpG.js.map → layout-MNk0bLGe.js.map} +1 -1
  221. package/dist/web/public/assets/{layout-DFxtpNut.js → layout-WcrkE0es.js} +2 -2
  222. package/dist/web/public/assets/{layout-DFxtpNut.js.map → layout-WcrkE0es.js.map} +1 -1
  223. package/dist/web/public/assets/{layout-d8qxPKQk.js → layout-apvyE2JN.js} +2 -2
  224. package/dist/web/public/assets/{layout-d8qxPKQk.js.map → layout-apvyE2JN.js.map} +1 -1
  225. package/dist/web/public/assets/{loader-circle-JaKY-xMt.js → loader-circle-hxNy7hSm.js} +2 -2
  226. package/dist/web/public/assets/{loader-circle-JaKY-xMt.js.map → loader-circle-hxNy7hSm.js.map} +1 -1
  227. package/dist/web/public/assets/{map-pin-hFFSWZ3B.js → map-pin-CCmA7ke2.js} +2 -2
  228. package/dist/web/public/assets/{map-pin-hFFSWZ3B.js.map → map-pin-CCmA7ke2.js.map} +1 -1
  229. package/dist/web/public/assets/{memos-EhjMUvVZ.js → memos-pEjDfEj3.js} +2 -2
  230. package/dist/web/public/assets/{memos-EhjMUvVZ.js.map → memos-pEjDfEj3.js.map} +1 -1
  231. package/dist/web/public/assets/messengers-Ba7opEc1.js +7 -0
  232. package/dist/web/public/assets/messengers-Ba7opEc1.js.map +1 -0
  233. package/dist/web/public/assets/{network-DtCI2ZUU.js → network-DJw-ei_k.js} +2 -2
  234. package/dist/web/public/assets/{network-DtCI2ZUU.js.map → network-DJw-ei_k.js.map} +1 -1
  235. package/dist/web/public/assets/{outbox-CxUbMp6o.js → outbox-Ckq-VT5C.js} +2 -2
  236. package/dist/web/public/assets/{outbox-CxUbMp6o.js.map → outbox-Ckq-VT5C.js.map} +1 -1
  237. package/dist/web/public/assets/{pagination-CkZY8YNa.js → pagination-DGS-TnI5.js} +2 -2
  238. package/dist/web/public/assets/{pagination-CkZY8YNa.js.map → pagination-DGS-TnI5.js.map} +1 -1
  239. package/dist/web/public/assets/{persona-B6TFMSnI.js → persona--LsrhCVU.js} +2 -2
  240. package/dist/web/public/assets/{persona-B6TFMSnI.js.map → persona--LsrhCVU.js.map} +1 -1
  241. package/dist/web/public/assets/{play-BxRcWaH5.js → play-Cb7co2DX.js} +2 -2
  242. package/dist/web/public/assets/{play-BxRcWaH5.js.map → play-Cb7co2DX.js.map} +1 -1
  243. package/dist/web/public/assets/{policy-ndE1Y8zD.js → policy-CbCotzr6.js} +2 -2
  244. package/dist/web/public/assets/{policy-ndE1Y8zD.js.map → policy-CbCotzr6.js.map} +1 -1
  245. package/dist/web/public/assets/{refresh-ccw-Bx817_KW.js → refresh-ccw-CINxCmwV.js} +2 -2
  246. package/dist/web/public/assets/{refresh-ccw-Bx817_KW.js.map → refresh-ccw-CINxCmwV.js.map} +1 -1
  247. package/dist/web/public/assets/{reminders-XynkGQc5.js → reminders-CSKrWre3.js} +2 -2
  248. package/dist/web/public/assets/{reminders-XynkGQc5.js.map → reminders-CSKrWre3.js.map} +1 -1
  249. package/dist/web/public/assets/{save-CqMcATrh.js → save-Bib9iAA-.js} +2 -2
  250. package/dist/web/public/assets/{save-CqMcATrh.js.map → save-Bib9iAA-.js.map} +1 -1
  251. package/dist/web/public/assets/{schedules-VM02w_Om.js → schedules-DUD_FfEX.js} +2 -2
  252. package/dist/web/public/assets/{schedules-VM02w_Om.js.map → schedules-DUD_FfEX.js.map} +1 -1
  253. package/dist/web/public/assets/{search-Ba-e1t1P.js → search-DZOHNA81.js} +2 -2
  254. package/dist/web/public/assets/{search-Ba-e1t1P.js.map → search-DZOHNA81.js.map} +1 -1
  255. package/dist/web/public/assets/{service-C-wnwJ-b.js → service-Cf7EQ4Sj.js} +3 -3
  256. package/dist/web/public/assets/{service-C-wnwJ-b.js.map → service-Cf7EQ4Sj.js.map} +1 -1
  257. package/dist/web/public/assets/{status-badge-CsdJ6k8Q.js → status-badge-RpKtiHgj.js} +2 -2
  258. package/dist/web/public/assets/{status-badge-CsdJ6k8Q.js.map → status-badge-RpKtiHgj.js.map} +1 -1
  259. package/dist/web/public/assets/{subtasks-mGRKpF0G.js → subtasks-xCHP5uI6.js} +2 -2
  260. package/dist/web/public/assets/{subtasks-mGRKpF0G.js.map → subtasks-xCHP5uI6.js.map} +1 -1
  261. package/dist/web/public/assets/{table-vmLMgj6_.js → table-S43AHY-3.js} +2 -2
  262. package/dist/web/public/assets/{table-vmLMgj6_.js.map → table-S43AHY-3.js.map} +1 -1
  263. package/dist/web/public/assets/{topn-nu66Fotx.js → topn-C2tcvmnB.js} +2 -2
  264. package/dist/web/public/assets/{topn-nu66Fotx.js.map → topn-C2tcvmnB.js.map} +1 -1
  265. package/dist/web/public/assets/{trash-2-ZIitN_U3.js → trash-2-Ct7YJmZO.js} +2 -2
  266. package/dist/web/public/assets/{trash-2-ZIitN_U3.js.map → trash-2-Ct7YJmZO.js.map} +1 -1
  267. package/dist/web/public/assets/{use-memory-DgEqHEca.js → use-memory-CCn0h8EP.js} +2 -2
  268. package/dist/web/public/assets/{use-memory-DgEqHEca.js.map → use-memory-CCn0h8EP.js.map} +1 -1
  269. package/dist/web/public/assets/{use-observability-CQev_A8e.js → use-observability-Dbal-WXR.js} +2 -2
  270. package/dist/web/public/assets/{use-observability-CQev_A8e.js.map → use-observability-Dbal-WXR.js.map} +1 -1
  271. package/dist/web/public/assets/{use-settings-CU-UcrVD.js → use-settings-erlkhPqn.js} +2 -2
  272. package/dist/web/public/assets/{use-settings-CU-UcrVD.js.map → use-settings-erlkhPqn.js.map} +1 -1
  273. package/dist/web/public/assets/{use-skills-Dr77CXLA.js → use-skills-C8Ukv8B4.js} +2 -2
  274. package/dist/web/public/assets/{use-skills-Dr77CXLA.js.map → use-skills-C8Ukv8B4.js.map} +1 -1
  275. package/dist/web/public/assets/{use-workspace-PNv9Z4de.js → use-workspace-8VZDPppc.js} +2 -2
  276. package/dist/web/public/assets/{use-workspace-PNv9Z4de.js.map → use-workspace-8VZDPppc.js.map} +1 -1
  277. package/dist/web/public/assets/{useQuery-BTyugXYV.js → useQuery-BnCHQlxq.js} +2 -2
  278. package/dist/web/public/assets/{useQuery-BTyugXYV.js.map → useQuery-BnCHQlxq.js.map} +1 -1
  279. package/dist/web/public/assets/{vector-w-Ea3pg6.js → vector-DDnIidyp.js} +2 -2
  280. package/dist/web/public/assets/{vector-w-Ea3pg6.js.map → vector-DDnIidyp.js.map} +1 -1
  281. package/dist/web/public/assets/{viewer-DKA7QP9U.js → viewer-BV0Cux3V.js} +2 -2
  282. package/dist/web/public/assets/{viewer-DKA7QP9U.js.map → viewer-BV0Cux3V.js.map} +1 -1
  283. package/dist/web/public/assets/{workspace-DVLZca7t.js → workspace-DbLMyUTn.js} +2 -2
  284. package/dist/web/public/assets/{workspace-DVLZca7t.js.map → workspace-DbLMyUTn.js.map} +1 -1
  285. package/dist/web/public/assets/{workspaces-DYZsMmY-.js → workspaces-BhF0IAJg.js} +2 -2
  286. package/dist/web/public/assets/{workspaces-DYZsMmY-.js.map → workspaces-BhF0IAJg.js.map} +1 -1
  287. package/dist/web/public/assets/{x-Ru3rHT82.js → x-BmgfwQRl.js} +2 -2
  288. package/dist/web/public/assets/{x-Ru3rHT82.js.map → x-BmgfwQRl.js.map} +1 -1
  289. package/dist/web/public/index.html +2 -2
  290. package/dist/web/public/settings.html +0 -1
  291. package/dist/web/server.d.ts.map +1 -1
  292. package/dist/web/server.js +600 -16
  293. package/dist/web/server.js.map +1 -1
  294. package/package.json +3 -2
  295. package/dist/plugins/agents/copilot/index.d.ts +0 -35
  296. package/dist/plugins/agents/copilot/index.d.ts.map +0 -1
  297. package/dist/plugins/agents/copilot/index.js +0 -182
  298. package/dist/plugins/agents/copilot/index.js.map +0 -1
  299. package/dist/web/public/assets/agents-BMI1WbZj.js +0 -12
  300. package/dist/web/public/assets/agents-BMI1WbZj.js.map +0 -1
  301. package/dist/web/public/assets/env-Bqrb9XkC.js +0 -2
  302. package/dist/web/public/assets/env-Bqrb9XkC.js.map +0 -1
  303. package/dist/web/public/assets/index-CpGWCLE5.js.map +0 -1
  304. package/dist/web/public/assets/layout-9Gp_myEd.js +0 -2
  305. package/dist/web/public/assets/layout-9Gp_myEd.js.map +0 -1
  306. package/dist/web/public/assets/messengers-BRV1IVGX.js +0 -7
  307. package/dist/web/public/assets/messengers-BRV1IVGX.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ // user-coord-prefs.ts — per-user coord-system preference store.
2
+ //
3
+ // Why this file exists:
4
+ // coord-systems.ts uses a single env flag (IMHUB_TELEGRAM_COORDS_GCJ02)
5
+ // to decide whether to treat incoming Telegram coords as GCJ-02 or
6
+ // WGS-84. That's wrong for any deployment with mixed clients —
7
+ // iPhone (system location → GCJ-02), Android+GMS (WGS-84), Telegram
8
+ // Desktop (WGS-84), Apple Maps share (GCJ-02), Google Maps share
9
+ // (WGS-84) all flow through the same `message.location` payload with
10
+ // no source label.
11
+ //
12
+ // Plan C (2026-05-22): per-(platform, user_id) preference, learned
13
+ // from explicit user feedback. Default = in-China → GCJ-02 (covers
14
+ // the most common iOS path which is also the most common deployment
15
+ // shape we see). User replies `#wgs` / `#gcj` / `#bd` once → bot
16
+ // stores the choice → all future locations from that user are
17
+ // normalized accordingly.
18
+ //
19
+ // Storage: ~/.agim/user-prefs.db. Single small table, no migrations,
20
+ // fail-soft via sqlite-helper (bun-runtime safe).
21
+ import { join } from 'node:path';
22
+ import { logger as rootLogger } from './logger.js';
23
+ import { createSqliteHelper } from './sqlite-helper.js';
24
+ import { AGIM_HOME } from './agim-paths.js';
25
+ const log = rootLogger.child({ component: 'user-coord-prefs' });
26
+ const SCHEMA = `
27
+ CREATE TABLE IF NOT EXISTS user_coord_prefs (
28
+ platform TEXT NOT NULL,
29
+ user_id TEXT NOT NULL,
30
+ coord_system TEXT NOT NULL,
31
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
32
+ PRIMARY KEY (platform, user_id)
33
+ );
34
+ `;
35
+ const dbPath = join(AGIM_HOME, 'user-prefs.db');
36
+ const helper = createSqliteHelper({
37
+ file: dbPath,
38
+ schema: SCHEMA,
39
+ logger: rootLogger,
40
+ component: 'user-prefs-db',
41
+ });
42
+ /**
43
+ * Look up the coord-system preference for a given user. Returns null
44
+ * if the user has never set one — caller falls back to the in-China
45
+ * default (GCJ-02) or out-of-China pass-through (WGS-84).
46
+ */
47
+ export function getUserCoordPref(platform, userId) {
48
+ return helper.safe((d) => {
49
+ const row = d
50
+ .prepare('SELECT coord_system FROM user_coord_prefs WHERE platform = ? AND user_id = ?')
51
+ .get(platform, userId);
52
+ if (!row?.coord_system)
53
+ return null;
54
+ if (row.coord_system !== 'wgs84' && row.coord_system !== 'gcj02' && row.coord_system !== 'bd09') {
55
+ log.warn({ platform, userId, value: row.coord_system }, 'invalid coord_system in DB');
56
+ return null;
57
+ }
58
+ return row.coord_system;
59
+ }, null);
60
+ }
61
+ /**
62
+ * Set / overwrite the user's coord-system preference. Idempotent
63
+ * upsert. Returns true on success, false if the DB is unavailable.
64
+ */
65
+ export function setUserCoordPref(platform, userId, coordSystem) {
66
+ return helper.safe((d) => {
67
+ d.prepare(`INSERT INTO user_coord_prefs (platform, user_id, coord_system, updated_at)
68
+ VALUES (?, ?, ?, datetime('now'))
69
+ ON CONFLICT(platform, user_id) DO UPDATE SET
70
+ coord_system = excluded.coord_system,
71
+ updated_at = datetime('now')`).run(platform, userId, coordSystem);
72
+ return true;
73
+ }, false);
74
+ }
75
+ /** Remove the user's preference (back to default). */
76
+ export function clearUserCoordPref(platform, userId) {
77
+ return helper.safe((d) => {
78
+ d.prepare('DELETE FROM user_coord_prefs WHERE platform = ? AND user_id = ?').run(platform, userId);
79
+ return true;
80
+ }, false);
81
+ }
82
+ /** Test-only: close the underlying handle so a temp DB can be unlinked. */
83
+ export function closeUserCoordPrefsDb() {
84
+ helper.close();
85
+ }
86
+ //# sourceMappingURL=user-coord-prefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-coord-prefs.js","sourceRoot":"","sources":["../../src/core/user-coord-prefs.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,wBAAwB;AACxB,0EAA0E;AAC1E,qEAAqE;AACrE,iEAAiE;AACjE,sEAAsE;AACtE,mEAAmE;AACnE,uEAAuE;AACvE,qBAAqB;AACrB,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,mEAAmE;AACnE,gEAAgE;AAChE,4BAA4B;AAC5B,EAAE;AACF,uEAAuE;AACvE,oDAAoD;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAA;AAI/D,MAAM,MAAM,GAAG;;;;;;;;CAQd,CAAA;AAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;AAC/C,MAAM,MAAM,GAAG,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,CAAC;aACV,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,CAAC,QAAQ,EAAE,MAAM,CAA0C,CAAA;QACjE,IAAI,CAAC,GAAG,EAAE,YAAY;YAAE,OAAO,IAAI,CAAA;QACnC,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YAChG,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACrF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,CAAC,YAA2B,CAAA;IACxC,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,WAAwB;IACzF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,CAAC,CAAC,OAAO,CACP;;;;wCAIkC,CACnC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,MAAc;IACjE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,CAAC,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAClG,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,KAAK,EAAE,CAAA;AAChB,CAAC"}
@@ -30,5 +30,9 @@ export interface ListOpts {
30
30
  export declare function listPastes(opts?: ListOpts): PasteRow[];
31
31
  export declare function deletePaste(id: string): boolean;
32
32
  export declare function countPastes(): number;
33
+ /** Public retention API — used by tests + manual /api/viewer/prune. */
34
+ export declare function pruneExpiredPastes(): number;
35
+ /** Stop the periodic retention sweep (tests + graceful shutdown). */
36
+ export declare function stopViewerRetentionSweep(): void;
33
37
  export declare function closeViewerDb(): void;
34
38
  //# sourceMappingURL=viewer-local.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-local.d.ts","sourceRoot":"","sources":["../../src/core/viewer-local.ts"],"names":[],"mappings":"AA8CA,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAA;AAEnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,gBAAgB,CAAA;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAWD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CA8C5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQpD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAQ9C;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,QAAa,GAAG,QAAQ,EAAE,CAS1D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAK/C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
1
+ {"version":3,"file":"viewer-local.d.ts","sourceRoot":"","sources":["../../src/core/viewer-local.ts"],"names":[],"mappings":"AA2EA,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,CAAA;AAEnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,gBAAgB,CAAA;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAWD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CA8C5D;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQpD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAQ9C;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,QAAa,GAAG,QAAQ,EAAE,CAS1D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAK/C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAoBD,uEAAuE;AACvE,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
@@ -32,11 +32,47 @@ const SCHEMA = `
32
32
  CREATE INDEX IF NOT EXISTS idx_pastes_job ON pastes(job_id);
33
33
  `;
34
34
  const viewerLog = rootLogger.child({ component: 'viewer-local' });
35
+ /** Default 30-day TTL. 0 disables → permanent (back-compat for operators who
36
+ * treat pastes as long-term archive). LRU cap (IMHUB_VIEWER_MAX_PASTES) still
37
+ * applies on top of this. */
38
+ function resolvePasteRetentionDays() {
39
+ const raw = process.env.IMHUB_PASTE_RETENTION_DAYS;
40
+ if (raw === undefined)
41
+ return 30;
42
+ const n = parseInt(raw, 10);
43
+ if (!Number.isFinite(n) || n < 0)
44
+ return 30;
45
+ return n;
46
+ }
47
+ const RETENTION_SWEEP_INTERVAL_MS = 6 * 60 * 60 * 1000; // 6 hours
48
+ let sweepTimer = null;
35
49
  const helper = createSqliteHelper({
36
50
  file: VIEWER_DB,
37
51
  schema: SCHEMA,
38
52
  logger: viewerLog,
39
53
  component: 'viewer-local',
54
+ init: (d) => {
55
+ try {
56
+ pruneExpiredPastesInternal(d);
57
+ }
58
+ catch (err) {
59
+ viewerLog.warn({ event: 'viewer.prune_init_failed', err: String(err) });
60
+ }
61
+ if (RETENTION_SWEEP_INTERVAL_MS > 0 && sweepTimer === null) {
62
+ sweepTimer = setInterval(() => {
63
+ const live = helper.get();
64
+ if (!live)
65
+ return;
66
+ try {
67
+ pruneExpiredPastesInternal(live);
68
+ }
69
+ catch { /* logged inside */ }
70
+ }, RETENTION_SWEEP_INTERVAL_MS);
71
+ if (typeof sweepTimer === 'object' && sweepTimer && 'unref' in sweepTimer) {
72
+ sweepTimer.unref();
73
+ }
74
+ }
75
+ },
40
76
  });
41
77
  const DEFAULT_MAX_PASTES = 10_000;
42
78
  function maxPastes() {
@@ -134,7 +170,45 @@ export function countPastes() {
134
170
  const row = db.prepare('SELECT COUNT(*) AS n FROM pastes').get();
135
171
  return row.n;
136
172
  }
173
+ // ─── Retention sweep (R12 ②) ────────────────────────────────────────
174
+ //
175
+ // Time-based TTL on `created_at`. This runs *in addition to* the LRU
176
+ // capacity cap inside savePaste — so an operator who hits 10K pastes in
177
+ // a week still gets the LRU evict, and an operator with 100 pastes that
178
+ // have aged past 30 days gets the TTL evict.
179
+ function pruneExpiredPastesInternal(db) {
180
+ const days = resolvePasteRetentionDays();
181
+ if (days <= 0)
182
+ return 0;
183
+ const cutoff = Math.floor(Date.now() / 1000) - days * 86400;
184
+ const r = db.prepare('DELETE FROM pastes WHERE created_at < ?').run(cutoff);
185
+ if (r.changes > 0) {
186
+ viewerLog.info({ event: 'viewer.pruned', deleted: r.changes, days }, `Pruned ${r.changes} paste(s) older than ${days}d`);
187
+ }
188
+ return r.changes;
189
+ }
190
+ /** Public retention API — used by tests + manual /api/viewer/prune. */
191
+ export function pruneExpiredPastes() {
192
+ const db = helper.get();
193
+ if (!db)
194
+ return 0;
195
+ try {
196
+ return pruneExpiredPastesInternal(db);
197
+ }
198
+ catch (err) {
199
+ viewerLog.warn({ event: 'viewer.prune_failed', err: String(err) });
200
+ return 0;
201
+ }
202
+ }
203
+ /** Stop the periodic retention sweep (tests + graceful shutdown). */
204
+ export function stopViewerRetentionSweep() {
205
+ if (sweepTimer) {
206
+ clearInterval(sweepTimer);
207
+ sweepTimer = null;
208
+ }
209
+ }
137
210
  export function closeViewerDb() {
211
+ stopViewerRetentionSweep();
138
212
  helper.close();
139
213
  }
140
214
  //# sourceMappingURL=viewer-local.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-local.js","sourceRoot":"","sources":["../../src/core/viewer-local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewer-local.js","sourceRoot":"","sources":["../../src/core/viewer-local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Antigravity / agy MCP injector.
3
+ *
4
+ * `agy` auto-loads MCP servers declared in `~/.gemini/config/mcp_config.json`
5
+ * — the same shape Claude Code, Gemini CLI, and many other MCP hosts use:
6
+ *
7
+ * {
8
+ * "mcpServers": {
9
+ * "<name>": { "command": "...", "args": [...], "env": {...} }
10
+ * }
11
+ * }
12
+ *
13
+ * On adapter init we read-modify-write this file so the `imhub` entry
14
+ * is always pointed at the current approval-bus socket (which rotates
15
+ * every agim restart — see core/approval-bus.ts:defaultSocketPath).
16
+ * Other entries the operator already had stay untouched.
17
+ *
18
+ * Why a single shared config file (vs claude-code's per-spawn tmpdir):
19
+ * agy has no `--mcp-config <path>` flag; the only way to wire MCP is
20
+ * the global file. Concurrency-wise that's fine because the file just
21
+ * tells agy which sidecar to launch — the sidecar itself is stateless
22
+ * across runs (each run gets its own IMHUB_RUN_ID via process env).
23
+ */
24
+ /** Resolves to `${HOME}/.gemini/config/mcp_config.json`. Exported for tests
25
+ * that want to point this at a tmp dir instead of the real home. */
26
+ export declare function defaultMcpConfigPath(): string;
27
+ export interface McpServerSpec {
28
+ command: string;
29
+ args?: string[];
30
+ env?: Record<string, string>;
31
+ }
32
+ /**
33
+ * Ensure `~/.gemini/config/mcp_config.json` has the imhub MCP entry
34
+ * pointing at the current approval-bus socket. Preserves any other
35
+ * keys / mcpServers entries the operator already configured.
36
+ *
37
+ * Idempotent: safe to call on every adapter init or before every spawn.
38
+ */
39
+ export declare function ensureImhubMcp(spec: McpServerSpec, opts?: {
40
+ path?: string;
41
+ }): Promise<void>;
42
+ /**
43
+ * Remove the imhub MCP entry. Used by tests / uninstall flows; the
44
+ * normal adapter path just overwrites with a fresh socket.
45
+ */
46
+ export declare function removeImhubMcp(opts?: {
47
+ path?: string;
48
+ }): Promise<void>;
49
+ //# sourceMappingURL=ensure-mcp-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-mcp-config.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/antigravity/ensure-mcp-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH;qEACqE;AACrE,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B;AASD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CrG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAehF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Antigravity / agy MCP injector.
3
+ *
4
+ * `agy` auto-loads MCP servers declared in `~/.gemini/config/mcp_config.json`
5
+ * — the same shape Claude Code, Gemini CLI, and many other MCP hosts use:
6
+ *
7
+ * {
8
+ * "mcpServers": {
9
+ * "<name>": { "command": "...", "args": [...], "env": {...} }
10
+ * }
11
+ * }
12
+ *
13
+ * On adapter init we read-modify-write this file so the `imhub` entry
14
+ * is always pointed at the current approval-bus socket (which rotates
15
+ * every agim restart — see core/approval-bus.ts:defaultSocketPath).
16
+ * Other entries the operator already had stay untouched.
17
+ *
18
+ * Why a single shared config file (vs claude-code's per-spawn tmpdir):
19
+ * agy has no `--mcp-config <path>` flag; the only way to wire MCP is
20
+ * the global file. Concurrency-wise that's fine because the file just
21
+ * tells agy which sidecar to launch — the sidecar itself is stateless
22
+ * across runs (each run gets its own IMHUB_RUN_ID via process env).
23
+ */
24
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
25
+ import { homedir } from 'node:os';
26
+ import { dirname, join } from 'node:path';
27
+ import { logger as rootLogger } from '../../../core/logger.js';
28
+ const log = rootLogger.child({ component: 'agent.antigravity.mcp' });
29
+ /** Resolves to `${HOME}/.gemini/config/mcp_config.json`. Exported for tests
30
+ * that want to point this at a tmp dir instead of the real home. */
31
+ export function defaultMcpConfigPath() {
32
+ return join(homedir(), '.gemini', 'config', 'mcp_config.json');
33
+ }
34
+ /**
35
+ * Ensure `~/.gemini/config/mcp_config.json` has the imhub MCP entry
36
+ * pointing at the current approval-bus socket. Preserves any other
37
+ * keys / mcpServers entries the operator already configured.
38
+ *
39
+ * Idempotent: safe to call on every adapter init or before every spawn.
40
+ */
41
+ export async function ensureImhubMcp(spec, opts = {}) {
42
+ const filePath = opts.path ?? defaultMcpConfigPath();
43
+ let current = {};
44
+ try {
45
+ const raw = await readFile(filePath, 'utf8');
46
+ if (raw.trim()) {
47
+ try {
48
+ current = JSON.parse(raw);
49
+ }
50
+ catch {
51
+ // Empty / corrupt file — agy itself logs `unexpected end of JSON
52
+ // input` and proceeds without MCP, so rewriting from scratch is
53
+ // safer than refusing to update.
54
+ log.warn({ event: 'antigravity.mcp.parse_failed', filePath }, 'replacing unparseable mcp_config.json');
55
+ current = {};
56
+ }
57
+ }
58
+ }
59
+ catch (err) {
60
+ const e = err;
61
+ if (e.code !== 'ENOENT')
62
+ throw err;
63
+ // First-time setup: create directory + start from empty
64
+ }
65
+ if (!current.mcpServers || typeof current.mcpServers !== 'object') {
66
+ current.mcpServers = {};
67
+ }
68
+ const existing = current.mcpServers.imhub;
69
+ // Skip write if nothing changed — avoids touching mtime on every send.
70
+ if (existing
71
+ && existing.command === spec.command
72
+ && JSON.stringify(existing.args ?? []) === JSON.stringify(spec.args ?? [])
73
+ && JSON.stringify(existing.env ?? {}) === JSON.stringify(spec.env ?? {})) {
74
+ return;
75
+ }
76
+ current.mcpServers.imhub = spec;
77
+ try {
78
+ await mkdir(dirname(filePath), { recursive: true });
79
+ await writeFile(filePath, JSON.stringify(current, null, 2), 'utf8');
80
+ log.info({ event: 'antigravity.mcp.config_written', filePath }, 'wrote imhub MCP entry to agy global config');
81
+ }
82
+ catch (err) {
83
+ log.warn({ event: 'antigravity.mcp.write_failed', filePath, err: String(err) }, 'could not write mcp_config.json — agy will run without imhub MCP');
84
+ throw err;
85
+ }
86
+ }
87
+ /**
88
+ * Remove the imhub MCP entry. Used by tests / uninstall flows; the
89
+ * normal adapter path just overwrites with a fresh socket.
90
+ */
91
+ export async function removeImhubMcp(opts = {}) {
92
+ const filePath = opts.path ?? defaultMcpConfigPath();
93
+ let current = {};
94
+ try {
95
+ const raw = await readFile(filePath, 'utf8');
96
+ if (raw.trim())
97
+ current = JSON.parse(raw);
98
+ }
99
+ catch (err) {
100
+ const e = err;
101
+ if (e.code === 'ENOENT')
102
+ return;
103
+ throw err;
104
+ }
105
+ if (current.mcpServers && current.mcpServers.imhub) {
106
+ delete current.mcpServers.imhub;
107
+ await writeFile(filePath, JSON.stringify(current, null, 2), 'utf8');
108
+ }
109
+ }
110
+ //# sourceMappingURL=ensure-mcp-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-mcp-config.js","sourceRoot":"","sources":["../../../../src/plugins/agents/antigravity/ensure-mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { AgentBase, type SpawnPlan } from '../../../core/agent-base.js';
2
+ import type { AgentSendOpts } from '../../../core/types.js';
3
+ export declare class AntigravityAdapter extends AgentBase {
4
+ readonly name = "antigravity";
5
+ readonly aliases: string[];
6
+ /** Resolved once on first use — survives the process lifetime.
7
+ * null = "we haven't probed yet"; undefined = "probed and didn't find". */
8
+ private resolvedBin;
9
+ protected get commandName(): string;
10
+ /** Lazy mcp-config write guard. Without this, every send would touch
11
+ * the global mcp_config.json. Read-modify-write does a no-op fast-path
12
+ * when the file is already correct, but we still avoid the disk hit. */
13
+ private mcpReady;
14
+ /** Last conversation directory mtime we saw before launching a run.
15
+ * Used to identify the newly-created .pb after a fresh run finishes. */
16
+ private snapshotConversationMtimes;
17
+ /** Diff snapshots to find the newly-created .pb file. Returns the UUID
18
+ * portion (.pb stripped) of whichever file is new OR has a newer mtime
19
+ * than the snapshot, prioritising the freshest one. */
20
+ private detectNewConversation;
21
+ protected buildArgs(prompt: string, opts: AgentSendOpts): string[];
22
+ protected prepareCommand(prompt: string, opts: AgentSendOpts): Promise<SpawnPlan>;
23
+ /** agy --print emits plain stdout text, not JSONL. The base spawnStream
24
+ * passes non-JSON lines through verbatim — return '' here so we don't
25
+ * double-emit when the rare JSON-shaped line slips through. */
26
+ protected extractText(_event: unknown): string;
27
+ /** agy reports "Authentication required" when the OAuth token is missing
28
+ * or expired. Map that to a friendly hint pointing at `agy login`. */
29
+ protected handleError(_code: number, stderr: string, errorMessage: string): string | null;
30
+ protected notAvailableMessage(): string;
31
+ isAvailable(): Promise<boolean>;
32
+ }
33
+ export declare const antigravityAdapter: AntigravityAdapter;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/agents/antigravity/index.ts"],"names":[],"mappings":"AA6CA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAsB3D,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,QAAQ,CAAC,IAAI,iBAAgB;IAI7B,QAAQ,CAAC,OAAO,WAA0B;IAE1C;gFAC4E;IAC5E,OAAO,CAAC,WAAW,CAAkC;IAErD,SAAS,KAAK,WAAW,IAAI,MAAM,CA0ClC;IAED;;6EAEyE;IACzE,OAAO,CAAC,QAAQ,CAAQ;IAExB;6EACyE;YAC3D,0BAA0B;IAmBxC;;4DAEwD;YAC1C,qBAAqB;IA0BnC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;cASlD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAuHvF;;oEAEgE;IAChE,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM;IAI9C;2EACuE;IACvE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYzF,SAAS,CAAC,mBAAmB,IAAI,MAAM;IAQjC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAUtC;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAA"}