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.
- package/CHANGELOG.md +151 -0
- package/README.md +8 -8
- package/README.zh-CN.md +6 -6
- package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
- package/dist/cli-ui/cmd-handlers.js +172 -13
- package/dist/cli-ui/cmd-handlers.js.map +1 -1
- package/dist/cli-ui/config-wizard.d.ts.map +1 -1
- package/dist/cli-ui/config-wizard.js +134 -24
- package/dist/cli-ui/config-wizard.js.map +1 -1
- package/dist/cli-ui/i18n.d.ts +33 -4
- package/dist/cli-ui/i18n.d.ts.map +1 -1
- package/dist/cli-ui/i18n.js +66 -8
- package/dist/cli-ui/i18n.js.map +1 -1
- package/dist/cli-ui/service.d.ts +44 -0
- package/dist/cli-ui/service.d.ts.map +1 -1
- package/dist/cli-ui/service.js +176 -8
- package/dist/cli-ui/service.js.map +1 -1
- package/dist/cli.js +193 -33
- package/dist/cli.js.map +1 -1
- package/dist/core/access-token.d.ts +51 -5
- package/dist/core/access-token.d.ts.map +1 -1
- package/dist/core/access-token.js +114 -15
- package/dist/core/access-token.js.map +1 -1
- package/dist/core/acp-server.d.ts.map +1 -1
- package/dist/core/acp-server.js +44 -3
- package/dist/core/acp-server.js.map +1 -1
- package/dist/core/admin-allowlist.d.ts +4 -1
- package/dist/core/admin-allowlist.d.ts.map +1 -1
- package/dist/core/admin-allowlist.js +14 -1
- package/dist/core/admin-allowlist.js.map +1 -1
- package/dist/core/admin-bootstrap.d.ts.map +1 -1
- package/dist/core/admin-bootstrap.js +8 -5
- package/dist/core/admin-bootstrap.js.map +1 -1
- package/dist/core/agent-base.d.ts.map +1 -1
- package/dist/core/agent-base.js +25 -0
- package/dist/core/agent-base.js.map +1 -1
- package/dist/core/agent-cwd.d.ts +1 -1
- package/dist/core/agent-cwd.d.ts.map +1 -1
- package/dist/core/agent-cwd.js +73 -2
- package/dist/core/agent-cwd.js.map +1 -1
- package/dist/core/agent-helper.d.ts +1 -1
- package/dist/core/agent-helper.js +4 -4
- package/dist/core/agent-helper.js.map +1 -1
- package/dist/core/approval-bus.d.ts +10 -0
- package/dist/core/approval-bus.d.ts.map +1 -1
- package/dist/core/approval-bus.js +130 -0
- package/dist/core/approval-bus.js.map +1 -1
- package/dist/core/approval-router.d.ts.map +1 -1
- package/dist/core/approval-router.js +18 -0
- package/dist/core/approval-router.js.map +1 -1
- package/dist/core/artifacts.d.ts +9 -1
- package/dist/core/artifacts.d.ts.map +1 -1
- package/dist/core/artifacts.js +22 -5
- package/dist/core/artifacts.js.map +1 -1
- package/dist/core/audit-log.d.ts +28 -0
- package/dist/core/audit-log.d.ts.map +1 -1
- package/dist/core/audit-log.js +100 -2
- package/dist/core/audit-log.js.map +1 -1
- package/dist/core/commands/coord.d.ts +4 -0
- package/dist/core/commands/coord.d.ts.map +1 -0
- package/dist/core/commands/coord.js +88 -0
- package/dist/core/commands/coord.js.map +1 -0
- package/dist/core/commands/service.d.ts +6 -5
- package/dist/core/commands/service.d.ts.map +1 -1
- package/dist/core/commands/service.js +59 -8
- package/dist/core/commands/service.js.map +1 -1
- package/dist/core/coord-systems.d.ts +10 -1
- package/dist/core/coord-systems.d.ts.map +1 -1
- package/dist/core/coord-systems.js +42 -17
- package/dist/core/coord-systems.js.map +1 -1
- package/dist/core/feature-flags.d.ts +10 -0
- package/dist/core/feature-flags.d.ts.map +1 -0
- package/dist/core/feature-flags.js +30 -0
- package/dist/core/feature-flags.js.map +1 -0
- package/dist/core/intent.d.ts.map +1 -1
- package/dist/core/intent.js +0 -4
- package/dist/core/intent.js.map +1 -1
- package/dist/core/logger.d.ts +31 -0
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +41 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/memo-rpc.d.ts.map +1 -1
- package/dist/core/memo-rpc.js +6 -0
- package/dist/core/memo-rpc.js.map +1 -1
- package/dist/core/memory-distill.js +1 -1
- package/dist/core/memory-distill.js.map +1 -1
- package/dist/core/memory-rpc.d.ts.map +1 -1
- package/dist/core/memory-rpc.js +55 -12
- package/dist/core/memory-rpc.js.map +1 -1
- package/dist/core/memory.d.ts +5 -0
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +151 -1
- package/dist/core/memory.js.map +1 -1
- package/dist/core/memos.d.ts.map +1 -1
- package/dist/core/memos.js +20 -2
- package/dist/core/memos.js.map +1 -1
- package/dist/core/onboarding.d.ts +6 -0
- package/dist/core/onboarding.d.ts.map +1 -1
- package/dist/core/onboarding.js +21 -10
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/outbox.d.ts +8 -1
- package/dist/core/outbox.d.ts.map +1 -1
- package/dist/core/outbox.js +46 -2
- package/dist/core/outbox.js.map +1 -1
- package/dist/core/persona.d.ts.map +1 -1
- package/dist/core/persona.js +1 -18
- package/dist/core/persona.js.map +1 -1
- package/dist/core/prompt-injection-guard.d.ts +23 -0
- package/dist/core/prompt-injection-guard.d.ts.map +1 -0
- package/dist/core/prompt-injection-guard.js +94 -0
- package/dist/core/prompt-injection-guard.js.map +1 -0
- package/dist/core/registry.d.ts +8 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +41 -7
- package/dist/core/registry.js.map +1 -1
- package/dist/core/restart-flow.d.ts.map +1 -1
- package/dist/core/restart-flow.js +27 -0
- package/dist/core/restart-flow.js.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +22 -0
- package/dist/core/router.js.map +1 -1
- package/dist/core/sensitive-paths.d.ts +28 -0
- package/dist/core/sensitive-paths.d.ts.map +1 -0
- package/dist/core/sensitive-paths.js +234 -0
- package/dist/core/sensitive-paths.js.map +1 -0
- package/dist/core/session.d.ts +9 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +35 -4
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +9 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/user-coord-prefs.d.ts +17 -0
- package/dist/core/user-coord-prefs.d.ts.map +1 -0
- package/dist/core/user-coord-prefs.js +86 -0
- package/dist/core/user-coord-prefs.js.map +1 -0
- package/dist/core/viewer-local.d.ts +4 -0
- package/dist/core/viewer-local.d.ts.map +1 -1
- package/dist/core/viewer-local.js +74 -0
- package/dist/core/viewer-local.js.map +1 -1
- package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts +49 -0
- package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts.map +1 -0
- package/dist/plugins/agents/antigravity/ensure-mcp-config.js +110 -0
- package/dist/plugins/agents/antigravity/ensure-mcp-config.js.map +1 -0
- package/dist/plugins/agents/antigravity/index.d.ts +34 -0
- package/dist/plugins/agents/antigravity/index.d.ts.map +1 -0
- package/dist/plugins/agents/antigravity/index.js +330 -0
- package/dist/plugins/agents/antigravity/index.js.map +1 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js +5 -5
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
- package/dist/plugins/messengers/feishu/card-builder.d.ts.map +1 -1
- package/dist/plugins/messengers/feishu/card-builder.js +0 -1
- package/dist/plugins/messengers/feishu/card-builder.js.map +1 -1
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -1
- package/dist/plugins/messengers/telegram/telegram-adapter.js +11 -2
- package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
- package/dist/utils/cross-platform.d.ts +0 -5
- package/dist/utils/cross-platform.d.ts.map +1 -1
- package/dist/utils/cross-platform.js +1 -21
- package/dist/utils/cross-platform.js.map +1 -1
- package/dist/web/public/assets/{a2a-Dk2fSs33.js → a2a-BFM2Ojvs.js} +2 -2
- package/dist/web/public/assets/{a2a-Dk2fSs33.js.map → a2a-BFM2Ojvs.js.map} +1 -1
- package/dist/web/public/assets/{activity-eiIPshcV.js → activity-DNe1vn9s.js} +2 -2
- package/dist/web/public/assets/{activity-eiIPshcV.js.map → activity-DNe1vn9s.js.map} +1 -1
- package/dist/web/public/assets/{admins-DlbQYdW_.js → admins-DtIF8yji.js} +2 -2
- package/dist/web/public/assets/{admins-DlbQYdW_.js.map → admins-DtIF8yji.js.map} +1 -1
- package/dist/web/public/assets/agents-BJ3jyH1u.js +12 -0
- package/dist/web/public/assets/agents-BJ3jyH1u.js.map +1 -0
- package/dist/web/public/assets/{approvals-DlXS_sKD.js → approvals-8ifx3_0b.js} +2 -2
- package/dist/web/public/assets/{approvals-DlXS_sKD.js.map → approvals-8ifx3_0b.js.map} +1 -1
- package/dist/web/public/assets/{audit-C8I8xC_6.js → audit-BiFOljMy.js} +2 -2
- package/dist/web/public/assets/{audit-C8I8xC_6.js.map → audit-BiFOljMy.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-PFYinH7D.js → bgjobs-Dve01ab0.js} +2 -2
- package/dist/web/public/assets/{bgjobs-PFYinH7D.js.map → bgjobs-Dve01ab0.js.map} +1 -1
- package/dist/web/public/assets/{brain-DEEJttEL.js → brain-BI78EY6_.js} +2 -2
- package/dist/web/public/assets/{brain-DEEJttEL.js.map → brain-BI78EY6_.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BlMy8gI6.js → briefcase-CuwoOW31.js} +2 -2
- package/dist/web/public/assets/{briefcase-BlMy8gI6.js.map → briefcase-CuwoOW31.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-DmABPvoA.js → chevron-right-D5JanEQ3.js} +2 -2
- package/dist/web/public/assets/{chevron-right-DmABPvoA.js.map → chevron-right-D5JanEQ3.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-C0Qpg1vL.js → circle-check-DXMzdFtD.js} +2 -2
- package/dist/web/public/assets/{circle-check-C0Qpg1vL.js.map → circle-check-DXMzdFtD.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-C8LG3beV.js → circle-check-big-CyJIIhiq.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-C8LG3beV.js.map → circle-check-big-CyJIIhiq.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-D_cRHcHK.js → circle-x-DTwfNpvp.js} +2 -2
- package/dist/web/public/assets/{circle-x-D_cRHcHK.js.map → circle-x-DTwfNpvp.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-Baz_xFle.js → confirm-dialog-F0sdcLGN.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-Baz_xFle.js.map → confirm-dialog-F0sdcLGN.js.map} +1 -1
- package/dist/web/public/assets/{data-table--I_ktDF4.js → data-table-DN_-VLbp.js} +2 -2
- package/dist/web/public/assets/{data-table--I_ktDF4.js.map → data-table-DN_-VLbp.js.map} +1 -1
- package/dist/web/public/assets/{dialog-DZpoEskO.js → dialog-CM16nfWK.js} +2 -2
- package/dist/web/public/assets/{dialog-DZpoEskO.js.map → dialog-CM16nfWK.js.map} +1 -1
- package/dist/web/public/assets/{download-DbFGHwZ5.js → download-tFqY3Zj6.js} +2 -2
- package/dist/web/public/assets/{download-DbFGHwZ5.js.map → download-tFqY3Zj6.js.map} +1 -1
- package/dist/web/public/assets/{email-BB1Hq8eE.js → email-By2-ARPV.js} +2 -2
- package/dist/web/public/assets/{email-BB1Hq8eE.js.map → email-By2-ARPV.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-DXNa90pP.js → empty-state-Dq9_8t-M.js} +2 -2
- package/dist/web/public/assets/{empty-state-DXNa90pP.js.map → empty-state-Dq9_8t-M.js.map} +1 -1
- package/dist/web/public/assets/{external-link-nhnJN0qg.js → external-link-amfAWSUX.js} +2 -2
- package/dist/web/public/assets/{external-link-nhnJN0qg.js.map → external-link-amfAWSUX.js.map} +1 -1
- package/dist/web/public/assets/{eye-IKkn_oUo.js → eye-BfgN09Lx.js} +2 -2
- package/dist/web/public/assets/{eye-IKkn_oUo.js.map → eye-BfgN09Lx.js.map} +1 -1
- package/dist/web/public/assets/{facts-C7Qy9vTw.js → facts-uvL__ilQ.js} +2 -2
- package/dist/web/public/assets/{facts-C7Qy9vTw.js.map → facts-uvL__ilQ.js.map} +1 -1
- package/dist/web/public/assets/{health-CMRdeNEW.js → health-fiU-ueEw.js} +2 -2
- package/dist/web/public/assets/{health-CMRdeNEW.js.map → health-fiU-ueEw.js.map} +1 -1
- package/dist/web/public/assets/{hot-Bh5Nrc7i.js → hot-Dt4V3jM_.js} +2 -2
- package/dist/web/public/assets/{hot-Bh5Nrc7i.js.map → hot-Dt4V3jM_.js.map} +1 -1
- package/dist/web/public/assets/{index-CpGWCLE5.js → index-6GMwymev.js} +8 -8
- package/dist/web/public/assets/index-6GMwymev.js.map +1 -0
- package/dist/web/public/assets/{index-GpceOxum.css → index-CDYTPZH0.css} +1 -1
- package/dist/web/public/assets/{installed-FYLkPij2.js → installed-B_x6no76.js} +2 -2
- package/dist/web/public/assets/{installed-FYLkPij2.js.map → installed-B_x6no76.js.map} +1 -1
- package/dist/web/public/assets/{jobs-BmqLUzHp.js → jobs-LqWH3CIe.js} +2 -2
- package/dist/web/public/assets/{jobs-BmqLUzHp.js.map → jobs-LqWH3CIe.js.map} +1 -1
- package/dist/web/public/assets/layout-CvxcdPD9.js +2 -0
- package/dist/web/public/assets/layout-CvxcdPD9.js.map +1 -0
- package/dist/web/public/assets/{layout-BZaHqf69.js → layout-DHUzlXrd.js} +2 -2
- package/dist/web/public/assets/{layout-BZaHqf69.js.map → layout-DHUzlXrd.js.map} +1 -1
- package/dist/web/public/assets/{layout-CXsUyEpG.js → layout-MNk0bLGe.js} +2 -2
- package/dist/web/public/assets/{layout-CXsUyEpG.js.map → layout-MNk0bLGe.js.map} +1 -1
- package/dist/web/public/assets/{layout-DFxtpNut.js → layout-WcrkE0es.js} +2 -2
- package/dist/web/public/assets/{layout-DFxtpNut.js.map → layout-WcrkE0es.js.map} +1 -1
- package/dist/web/public/assets/{layout-d8qxPKQk.js → layout-apvyE2JN.js} +2 -2
- package/dist/web/public/assets/{layout-d8qxPKQk.js.map → layout-apvyE2JN.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-JaKY-xMt.js → loader-circle-hxNy7hSm.js} +2 -2
- package/dist/web/public/assets/{loader-circle-JaKY-xMt.js.map → loader-circle-hxNy7hSm.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-hFFSWZ3B.js → map-pin-CCmA7ke2.js} +2 -2
- package/dist/web/public/assets/{map-pin-hFFSWZ3B.js.map → map-pin-CCmA7ke2.js.map} +1 -1
- package/dist/web/public/assets/{memos-EhjMUvVZ.js → memos-pEjDfEj3.js} +2 -2
- package/dist/web/public/assets/{memos-EhjMUvVZ.js.map → memos-pEjDfEj3.js.map} +1 -1
- package/dist/web/public/assets/messengers-Ba7opEc1.js +7 -0
- package/dist/web/public/assets/messengers-Ba7opEc1.js.map +1 -0
- package/dist/web/public/assets/{network-DtCI2ZUU.js → network-DJw-ei_k.js} +2 -2
- package/dist/web/public/assets/{network-DtCI2ZUU.js.map → network-DJw-ei_k.js.map} +1 -1
- package/dist/web/public/assets/{outbox-CxUbMp6o.js → outbox-Ckq-VT5C.js} +2 -2
- package/dist/web/public/assets/{outbox-CxUbMp6o.js.map → outbox-Ckq-VT5C.js.map} +1 -1
- package/dist/web/public/assets/{pagination-CkZY8YNa.js → pagination-DGS-TnI5.js} +2 -2
- package/dist/web/public/assets/{pagination-CkZY8YNa.js.map → pagination-DGS-TnI5.js.map} +1 -1
- package/dist/web/public/assets/{persona-B6TFMSnI.js → persona--LsrhCVU.js} +2 -2
- package/dist/web/public/assets/{persona-B6TFMSnI.js.map → persona--LsrhCVU.js.map} +1 -1
- package/dist/web/public/assets/{play-BxRcWaH5.js → play-Cb7co2DX.js} +2 -2
- package/dist/web/public/assets/{play-BxRcWaH5.js.map → play-Cb7co2DX.js.map} +1 -1
- package/dist/web/public/assets/{policy-ndE1Y8zD.js → policy-CbCotzr6.js} +2 -2
- package/dist/web/public/assets/{policy-ndE1Y8zD.js.map → policy-CbCotzr6.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-Bx817_KW.js → refresh-ccw-CINxCmwV.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-Bx817_KW.js.map → refresh-ccw-CINxCmwV.js.map} +1 -1
- package/dist/web/public/assets/{reminders-XynkGQc5.js → reminders-CSKrWre3.js} +2 -2
- package/dist/web/public/assets/{reminders-XynkGQc5.js.map → reminders-CSKrWre3.js.map} +1 -1
- package/dist/web/public/assets/{save-CqMcATrh.js → save-Bib9iAA-.js} +2 -2
- package/dist/web/public/assets/{save-CqMcATrh.js.map → save-Bib9iAA-.js.map} +1 -1
- package/dist/web/public/assets/{schedules-VM02w_Om.js → schedules-DUD_FfEX.js} +2 -2
- package/dist/web/public/assets/{schedules-VM02w_Om.js.map → schedules-DUD_FfEX.js.map} +1 -1
- package/dist/web/public/assets/{search-Ba-e1t1P.js → search-DZOHNA81.js} +2 -2
- package/dist/web/public/assets/{search-Ba-e1t1P.js.map → search-DZOHNA81.js.map} +1 -1
- package/dist/web/public/assets/{service-C-wnwJ-b.js → service-Cf7EQ4Sj.js} +3 -3
- package/dist/web/public/assets/{service-C-wnwJ-b.js.map → service-Cf7EQ4Sj.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-CsdJ6k8Q.js → status-badge-RpKtiHgj.js} +2 -2
- package/dist/web/public/assets/{status-badge-CsdJ6k8Q.js.map → status-badge-RpKtiHgj.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-mGRKpF0G.js → subtasks-xCHP5uI6.js} +2 -2
- package/dist/web/public/assets/{subtasks-mGRKpF0G.js.map → subtasks-xCHP5uI6.js.map} +1 -1
- package/dist/web/public/assets/{table-vmLMgj6_.js → table-S43AHY-3.js} +2 -2
- package/dist/web/public/assets/{table-vmLMgj6_.js.map → table-S43AHY-3.js.map} +1 -1
- package/dist/web/public/assets/{topn-nu66Fotx.js → topn-C2tcvmnB.js} +2 -2
- package/dist/web/public/assets/{topn-nu66Fotx.js.map → topn-C2tcvmnB.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-ZIitN_U3.js → trash-2-Ct7YJmZO.js} +2 -2
- package/dist/web/public/assets/{trash-2-ZIitN_U3.js.map → trash-2-Ct7YJmZO.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-DgEqHEca.js → use-memory-CCn0h8EP.js} +2 -2
- package/dist/web/public/assets/{use-memory-DgEqHEca.js.map → use-memory-CCn0h8EP.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-CQev_A8e.js → use-observability-Dbal-WXR.js} +2 -2
- package/dist/web/public/assets/{use-observability-CQev_A8e.js.map → use-observability-Dbal-WXR.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-CU-UcrVD.js → use-settings-erlkhPqn.js} +2 -2
- package/dist/web/public/assets/{use-settings-CU-UcrVD.js.map → use-settings-erlkhPqn.js.map} +1 -1
- package/dist/web/public/assets/{use-skills-Dr77CXLA.js → use-skills-C8Ukv8B4.js} +2 -2
- package/dist/web/public/assets/{use-skills-Dr77CXLA.js.map → use-skills-C8Ukv8B4.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-PNv9Z4de.js → use-workspace-8VZDPppc.js} +2 -2
- package/dist/web/public/assets/{use-workspace-PNv9Z4de.js.map → use-workspace-8VZDPppc.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-BTyugXYV.js → useQuery-BnCHQlxq.js} +2 -2
- package/dist/web/public/assets/{useQuery-BTyugXYV.js.map → useQuery-BnCHQlxq.js.map} +1 -1
- package/dist/web/public/assets/{vector-w-Ea3pg6.js → vector-DDnIidyp.js} +2 -2
- package/dist/web/public/assets/{vector-w-Ea3pg6.js.map → vector-DDnIidyp.js.map} +1 -1
- package/dist/web/public/assets/{viewer-DKA7QP9U.js → viewer-BV0Cux3V.js} +2 -2
- package/dist/web/public/assets/{viewer-DKA7QP9U.js.map → viewer-BV0Cux3V.js.map} +1 -1
- package/dist/web/public/assets/{workspace-DVLZca7t.js → workspace-DbLMyUTn.js} +2 -2
- package/dist/web/public/assets/{workspace-DVLZca7t.js.map → workspace-DbLMyUTn.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-DYZsMmY-.js → workspaces-BhF0IAJg.js} +2 -2
- package/dist/web/public/assets/{workspaces-DYZsMmY-.js.map → workspaces-BhF0IAJg.js.map} +1 -1
- package/dist/web/public/assets/{x-Ru3rHT82.js → x-BmgfwQRl.js} +2 -2
- package/dist/web/public/assets/{x-Ru3rHT82.js.map → x-BmgfwQRl.js.map} +1 -1
- package/dist/web/public/index.html +2 -2
- package/dist/web/public/settings.html +0 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +600 -16
- package/dist/web/server.js.map +1 -1
- package/package.json +3 -2
- package/dist/plugins/agents/copilot/index.d.ts +0 -35
- package/dist/plugins/agents/copilot/index.d.ts.map +0 -1
- package/dist/plugins/agents/copilot/index.js +0 -182
- package/dist/plugins/agents/copilot/index.js.map +0 -1
- package/dist/web/public/assets/agents-BMI1WbZj.js +0 -12
- package/dist/web/public/assets/agents-BMI1WbZj.js.map +0 -1
- package/dist/web/public/assets/env-Bqrb9XkC.js +0 -2
- package/dist/web/public/assets/env-Bqrb9XkC.js.map +0 -1
- package/dist/web/public/assets/index-CpGWCLE5.js.map +0 -1
- package/dist/web/public/assets/layout-9Gp_myEd.js +0 -2
- package/dist/web/public/assets/layout-9Gp_myEd.js.map +0 -1
- package/dist/web/public/assets/messengers-BRV1IVGX.js +0 -7
- 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":"
|
|
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":"AAAA,0EAA0E;AAC1E,4DAA4D;AAC5D,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,qBAAqB;AAErB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,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,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;AAE9C,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAA;AAED,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;AAEjE,MAAM,MAAM,GAAG,kBAAkB,CAAC;IAChC,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,cAAc;
|
|
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"}
|