agim-cli 1.3.5 → 1.3.8
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 +30 -6
- package/dist/cli-ui/tui/app.js +2 -2
- package/dist/cli-ui/tui/app.js.map +1 -1
- package/dist/cli-ui/tui/markdown.d.ts +46 -2
- package/dist/cli-ui/tui/markdown.d.ts.map +1 -1
- package/dist/cli-ui/tui/markdown.js +362 -34
- package/dist/cli-ui/tui/markdown.js.map +1 -1
- package/dist/cli-ui/tui/markdown.test.d.ts +2 -0
- package/dist/cli-ui/tui/markdown.test.d.ts.map +1 -0
- package/dist/cli-ui/tui/markdown.test.js +240 -0
- package/dist/cli-ui/tui/markdown.test.js.map +1 -0
- package/dist/cli.js +25 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/a2a.d.ts.map +1 -1
- package/dist/core/a2a.js +6 -0
- package/dist/core/a2a.js.map +1 -1
- package/dist/core/access-token.d.ts.map +1 -1
- package/dist/core/access-token.js +16 -4
- package/dist/core/access-token.js.map +1 -1
- package/dist/core/approval-bus.d.ts +5 -0
- package/dist/core/approval-bus.d.ts.map +1 -1
- package/dist/core/approval-bus.js +32 -0
- package/dist/core/approval-bus.js.map +1 -1
- package/dist/core/commands/job.d.ts.map +1 -1
- package/dist/core/commands/job.js +10 -3
- package/dist/core/commands/job.js.map +1 -1
- package/dist/core/goal-rpc.d.ts +7 -0
- package/dist/core/goal-rpc.d.ts.map +1 -1
- package/dist/core/goal-rpc.js +47 -3
- package/dist/core/goal-rpc.js.map +1 -1
- package/dist/core/llm/exec-dispatcher.d.ts +2 -0
- package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/exec-dispatcher.js +60 -6
- package/dist/core/llm/exec-dispatcher.js.map +1 -1
- package/dist/core/llm/fs-dispatcher.d.ts +3 -0
- package/dist/core/llm/fs-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/fs-dispatcher.js +31 -12
- package/dist/core/llm/fs-dispatcher.js.map +1 -1
- package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/imhub-dispatcher.js +9 -5
- package/dist/core/llm/imhub-dispatcher.js.map +1 -1
- package/dist/core/llm/model-catalog.js +1 -1
- package/dist/core/llm/model-catalog.js.map +1 -1
- package/dist/core/llm/policy-approval-gate.d.ts.map +1 -1
- package/dist/core/llm/policy-approval-gate.js +17 -4
- package/dist/core/llm/policy-approval-gate.js.map +1 -1
- package/dist/core/llm/registry.d.ts +2 -2
- package/dist/core/llm/registry.js +1 -1
- package/dist/core/llm/web-dispatcher.d.ts +20 -0
- package/dist/core/llm/web-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/web-dispatcher.js +70 -5
- package/dist/core/llm/web-dispatcher.js.map +1 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +5 -19
- package/dist/core/registry.js.map +1 -1
- package/dist/core/router.js +1 -1
- package/dist/core/router.js.map +1 -1
- package/dist/core/schedule.d.ts.map +1 -1
- package/dist/core/schedule.js +6 -2
- package/dist/core/schedule.js.map +1 -1
- package/dist/core/skills/loader.js +3 -3
- package/dist/core/skills/loader.js.map +1 -1
- package/dist/core/types.d.ts +3 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.d.ts +0 -146
- package/dist/plugins/agents/native/index.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.js +41 -1291
- package/dist/plugins/agents/native/index.js.map +1 -1
- package/dist/plugins/agents/pi-native/approval.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/approval.js +2 -3
- package/dist/plugins/agents/pi-native/approval.js.map +1 -1
- package/dist/plugins/agents/pi-native/factory.d.ts +3 -4
- package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/factory.js +8 -14
- package/dist/plugins/agents/pi-native/factory.js.map +1 -1
- package/dist/plugins/agents/pi-native/index.d.ts +8 -8
- package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/index.js +78 -13
- package/dist/plugins/agents/pi-native/index.js.map +1 -1
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts +4 -4
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/provider-resolver.js +1 -1
- package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
- package/dist/plugins/agents/pi-native/tools.d.ts +3 -4
- package/dist/plugins/agents/pi-native/tools.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/tools.js +7 -9
- package/dist/plugins/agents/pi-native/tools.js.map +1 -1
- package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -1
- package/dist/plugins/messengers/discord/discord-adapter.js +14 -2
- package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -1
- package/dist/web/public/assets/{a2a-Bk51ozUt.js → a2a-D_I9ZX8i.js} +2 -2
- package/dist/web/public/assets/{a2a-Bk51ozUt.js.map → a2a-D_I9ZX8i.js.map} +1 -1
- package/dist/web/public/assets/{activity-DzKONPpA.js → activity-ZxWknBf9.js} +2 -2
- package/dist/web/public/assets/{activity-DzKONPpA.js.map → activity-ZxWknBf9.js.map} +1 -1
- package/dist/web/public/assets/{admins-CmZ4eQnt.js → admins-DFZcKgq0.js} +2 -2
- package/dist/web/public/assets/{admins-CmZ4eQnt.js.map → admins-DFZcKgq0.js.map} +1 -1
- package/dist/web/public/assets/{agents-lj76gn9U.js → agents-DTONSU0R.js} +2 -2
- package/dist/web/public/assets/{agents-lj76gn9U.js.map → agents-DTONSU0R.js.map} +1 -1
- package/dist/web/public/assets/{approvals-C5-3WBcb.js → approvals-BdDJvH8b.js} +2 -2
- package/dist/web/public/assets/{approvals-C5-3WBcb.js.map → approvals-BdDJvH8b.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-DAjYgwW2.js → arrow-down-Bhl7hNwa.js} +2 -2
- package/dist/web/public/assets/{arrow-down-DAjYgwW2.js.map → arrow-down-Bhl7hNwa.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-Cba9TuAO.js → arrow-up-DZLw3qr1.js} +2 -2
- package/dist/web/public/assets/{arrow-up-Cba9TuAO.js.map → arrow-up-DZLw3qr1.js.map} +1 -1
- package/dist/web/public/assets/{asks-qlttx_de.js → asks-Cj2QazUD.js} +2 -2
- package/dist/web/public/assets/{asks-qlttx_de.js.map → asks-Cj2QazUD.js.map} +1 -1
- package/dist/web/public/assets/{audit-CSjpfK6P.js → audit-sxS7UUa6.js} +2 -2
- package/dist/web/public/assets/{audit-CSjpfK6P.js.map → audit-sxS7UUa6.js.map} +1 -1
- package/dist/web/public/assets/{bell-Dm9oEZR5.js → bell-CqimaF3k.js} +2 -2
- package/dist/web/public/assets/{bell-Dm9oEZR5.js.map → bell-CqimaF3k.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-IOX_MrKV.js → bgjobs-BnXdz4TP.js} +2 -2
- package/dist/web/public/assets/{bgjobs-IOX_MrKV.js.map → bgjobs-BnXdz4TP.js.map} +1 -1
- package/dist/web/public/assets/{brain-D24bSBeM.js → brain-4TIClaVZ.js} +2 -2
- package/dist/web/public/assets/{brain-D24bSBeM.js.map → brain-4TIClaVZ.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BrIzC9EZ.js → briefcase-iKF60CJd.js} +2 -2
- package/dist/web/public/assets/{briefcase-BrIzC9EZ.js.map → briefcase-iKF60CJd.js.map} +1 -1
- package/dist/web/public/assets/{chat-DXki5zbL.js → chat-Cjp0ECm5.js} +2 -2
- package/dist/web/public/assets/{chat-DXki5zbL.js.map → chat-Cjp0ECm5.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js → chevron-left-sZyMkeG-.js} +2 -2
- package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js.map → chevron-left-sZyMkeG-.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-LF_j8BGd.js → chevron-right-CPHPRLSX.js} +2 -2
- package/dist/web/public/assets/{chevron-right-LF_j8BGd.js.map → chevron-right-CPHPRLSX.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-CpSR3rJi.js → circle-check-BB11MxVm.js} +2 -2
- package/dist/web/public/assets/{circle-check-CpSR3rJi.js.map → circle-check-BB11MxVm.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js → circle-check-big-Sj-6H_3x.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js.map → circle-check-big-Sj-6H_3x.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-XWMjbfp5.js → circle-x-DYcD4BUu.js} +2 -2
- package/dist/web/public/assets/{circle-x-XWMjbfp5.js.map → circle-x-DYcD4BUu.js.map} +1 -1
- package/dist/web/public/assets/{clock-BjVFYz37.js → clock-BVXa81yB.js} +2 -2
- package/dist/web/public/assets/{clock-BjVFYz37.js.map → clock-BVXa81yB.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js → confirm-dialog-C2melodU.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js.map → confirm-dialog-C2melodU.js.map} +1 -1
- package/dist/web/public/assets/{copy-BUxvUnbP.js → copy-D1OIgfLU.js} +2 -2
- package/dist/web/public/assets/{copy-BUxvUnbP.js.map → copy-D1OIgfLU.js.map} +1 -1
- package/dist/web/public/assets/{data-table-BHctKsHM.js → data-table-BYJ2qMyY.js} +2 -2
- package/dist/web/public/assets/{data-table-BHctKsHM.js.map → data-table-BYJ2qMyY.js.map} +1 -1
- package/dist/web/public/assets/{download-C0hikBL7.js → download-BChufhnl.js} +2 -2
- package/dist/web/public/assets/{download-C0hikBL7.js.map → download-BChufhnl.js.map} +1 -1
- package/dist/web/public/assets/{email-D940p9kF.js → email-exon2FvQ.js} +2 -2
- package/dist/web/public/assets/{email-D940p9kF.js.map → email-exon2FvQ.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-BzzUgjlL.js → empty-state-De5ls0uC.js} +2 -2
- package/dist/web/public/assets/{empty-state-BzzUgjlL.js.map → empty-state-De5ls0uC.js.map} +1 -1
- package/dist/web/public/assets/{external-link-Cjuz11n7.js → external-link-CiJZi5YL.js} +2 -2
- package/dist/web/public/assets/{external-link-Cjuz11n7.js.map → external-link-CiJZi5YL.js.map} +1 -1
- package/dist/web/public/assets/{eye-DVQjbb2Z.js → eye-DowB5M1R.js} +2 -2
- package/dist/web/public/assets/{eye-DVQjbb2Z.js.map → eye-DowB5M1R.js.map} +1 -1
- package/dist/web/public/assets/{facts-C4hVaO6t.js → facts-BdnrzWfV.js} +2 -2
- package/dist/web/public/assets/{facts-C4hVaO6t.js.map → facts-BdnrzWfV.js.map} +1 -1
- package/dist/web/public/assets/{goals-89sYO75m.js → goals-D6ibCBqb.js} +2 -2
- package/dist/web/public/assets/{goals-89sYO75m.js.map → goals-D6ibCBqb.js.map} +1 -1
- package/dist/web/public/assets/{health-CKfZBddX.js → health-BA8ydz1A.js} +2 -2
- package/dist/web/public/assets/{health-CKfZBddX.js.map → health-BA8ydz1A.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js → heart-pulse-ClrbGrB7.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js.map → heart-pulse-ClrbGrB7.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-oKkyHWgV.js → heartbeat-j03zupAy.js} +2 -2
- package/dist/web/public/assets/{heartbeat-oKkyHWgV.js.map → heartbeat-j03zupAy.js.map} +1 -1
- package/dist/web/public/assets/{hot-Cas_nZv9.js → hot-D3bwuObi.js} +2 -2
- package/dist/web/public/assets/{hot-Cas_nZv9.js.map → hot-D3bwuObi.js.map} +1 -1
- package/dist/web/public/assets/{index-B795P_3p.js → index-DvWldAJY.js} +15 -15
- package/dist/web/public/assets/{index-B795P_3p.js.map → index-DvWldAJY.js.map} +1 -1
- package/dist/web/public/assets/{injection-DksSjIsi.js → injection-C89g9123.js} +2 -2
- package/dist/web/public/assets/{injection-DksSjIsi.js.map → injection-C89g9123.js.map} +1 -1
- package/dist/web/public/assets/{installed-DWq0Eluy.js → installed-1Hal8dxW.js} +2 -2
- package/dist/web/public/assets/{installed-DWq0Eluy.js.map → installed-1Hal8dxW.js.map} +1 -1
- package/dist/web/public/assets/{jobs-CqY-xtBr.js → jobs-cQ7V-7ec.js} +2 -2
- package/dist/web/public/assets/{jobs-CqY-xtBr.js.map → jobs-cQ7V-7ec.js.map} +1 -1
- package/dist/web/public/assets/{layout-DsoDxB0i.js → layout-BbRAk_tA.js} +2 -2
- package/dist/web/public/assets/{layout-DsoDxB0i.js.map → layout-BbRAk_tA.js.map} +1 -1
- package/dist/web/public/assets/{layout-CqgDOB5t.js → layout-CXGgZCd2.js} +2 -2
- package/dist/web/public/assets/{layout-CqgDOB5t.js.map → layout-CXGgZCd2.js.map} +1 -1
- package/dist/web/public/assets/{layout-Cltp3ikG.js → layout-CZ9hb8_a.js} +2 -2
- package/dist/web/public/assets/{layout-Cltp3ikG.js.map → layout-CZ9hb8_a.js.map} +1 -1
- package/dist/web/public/assets/{layout-BiAVhWgU.js → layout-U5o6RgqN.js} +2 -2
- package/dist/web/public/assets/{layout-BiAVhWgU.js.map → layout-U5o6RgqN.js.map} +1 -1
- package/dist/web/public/assets/{layout-BodTIhhE.js → layout-Y9JSZczb.js} +2 -2
- package/dist/web/public/assets/{layout-BodTIhhE.js.map → layout-Y9JSZczb.js.map} +1 -1
- package/dist/web/public/assets/{llm-D3Kd9gqa.js → llm-CumYZM83.js} +2 -2
- package/dist/web/public/assets/{llm-D3Kd9gqa.js.map → llm-CumYZM83.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-DsLQMvHE.js → loader-circle-CZQXsfz7.js} +2 -2
- package/dist/web/public/assets/{loader-circle-DsLQMvHE.js.map → loader-circle-CZQXsfz7.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-e694Eet6.js → map-pin-CYj0xBbt.js} +2 -2
- package/dist/web/public/assets/{map-pin-e694Eet6.js.map → map-pin-CYj0xBbt.js.map} +1 -1
- package/dist/web/public/assets/{mcp-BoWJqog4.js → mcp-DP4Vj1Nh.js} +2 -2
- package/dist/web/public/assets/{mcp-BoWJqog4.js.map → mcp-DP4Vj1Nh.js.map} +1 -1
- package/dist/web/public/assets/{memos-C81bimPJ.js → memos-ZDpt1S28.js} +2 -2
- package/dist/web/public/assets/{memos-C81bimPJ.js.map → memos-ZDpt1S28.js.map} +1 -1
- package/dist/web/public/assets/{messengers-CGcjXUeJ.js → messengers-B007J8et.js} +2 -2
- package/dist/web/public/assets/{messengers-CGcjXUeJ.js.map → messengers-B007J8et.js.map} +1 -1
- package/dist/web/public/assets/{mobile-Duy_If5A.js → mobile-Crm0YJ36.js} +2 -2
- package/dist/web/public/assets/{mobile-Duy_If5A.js.map → mobile-Crm0YJ36.js.map} +1 -1
- package/dist/web/public/assets/{network-DnBhCncp.js → network-BYbGwOEp.js} +2 -2
- package/dist/web/public/assets/{network-DnBhCncp.js.map → network-BYbGwOEp.js.map} +1 -1
- package/dist/web/public/assets/{outbox-DrReVtHr.js → outbox-D7xZ5y2T.js} +2 -2
- package/dist/web/public/assets/{outbox-DrReVtHr.js.map → outbox-D7xZ5y2T.js.map} +1 -1
- package/dist/web/public/assets/{pagination-DgS8vaZM.js → pagination-bzSoQOAd.js} +2 -2
- package/dist/web/public/assets/{pagination-DgS8vaZM.js.map → pagination-bzSoQOAd.js.map} +1 -1
- package/dist/web/public/assets/{persona-NTg-RuPa.js → persona-VT6A3VYL.js} +2 -2
- package/dist/web/public/assets/{persona-NTg-RuPa.js.map → persona-VT6A3VYL.js.map} +1 -1
- package/dist/web/public/assets/{plans-CUsr4aMb.js → plans-b4DAc_3a.js} +2 -2
- package/dist/web/public/assets/{plans-CUsr4aMb.js.map → plans-b4DAc_3a.js.map} +1 -1
- package/dist/web/public/assets/{play-G96k2QBR.js → play-SPYhVFeC.js} +2 -2
- package/dist/web/public/assets/{play-G96k2QBR.js.map → play-SPYhVFeC.js.map} +1 -1
- package/dist/web/public/assets/{plus-6RZ3XScp.js → plus-D__n9IVW.js} +2 -2
- package/dist/web/public/assets/{plus-6RZ3XScp.js.map → plus-D__n9IVW.js.map} +1 -1
- package/dist/web/public/assets/{policy-BFlQnPo5.js → policy-CWeiR9UO.js} +2 -2
- package/dist/web/public/assets/{policy-BFlQnPo5.js.map → policy-CWeiR9UO.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-L7ClZ31U.js → qr-code-BqDQw03Z.js} +2 -2
- package/dist/web/public/assets/{qr-code-L7ClZ31U.js.map → qr-code-BqDQw03Z.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js → refresh-ccw-CW2loqyz.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js.map → refresh-ccw-CW2loqyz.js.map} +1 -1
- package/dist/web/public/assets/{reminders-DVzHdBpK.js → reminders-BAl8NC0R.js} +2 -2
- package/dist/web/public/assets/{reminders-DVzHdBpK.js.map → reminders-BAl8NC0R.js.map} +1 -1
- package/dist/web/public/assets/{save-DetwgDjo.js → save-DzWp78MC.js} +2 -2
- package/dist/web/public/assets/{save-DetwgDjo.js.map → save-DzWp78MC.js.map} +1 -1
- package/dist/web/public/assets/{schedules-CslP2Ntr.js → schedules-6cyfjv0O.js} +2 -2
- package/dist/web/public/assets/{schedules-CslP2Ntr.js.map → schedules-6cyfjv0O.js.map} +1 -1
- package/dist/web/public/assets/{search-ByHc__pY.js → search-Bh7gD1Aq.js} +2 -2
- package/dist/web/public/assets/{search-ByHc__pY.js.map → search-Bh7gD1Aq.js.map} +1 -1
- package/dist/web/public/assets/{search-Bx2TNvqF.js → search-DVWPME2t.js} +2 -2
- package/dist/web/public/assets/{search-Bx2TNvqF.js.map → search-DVWPME2t.js.map} +1 -1
- package/dist/web/public/assets/{security-B4dw2-ZU.js → security-DlZ_rDwC.js} +2 -2
- package/dist/web/public/assets/{security-B4dw2-ZU.js.map → security-DlZ_rDwC.js.map} +1 -1
- package/dist/web/public/assets/{service-LujRx8DT.js → service-DKkji52r.js} +2 -2
- package/dist/web/public/assets/{service-LujRx8DT.js.map → service-DKkji52r.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-BM2sbwiD.js → shield-alert-5pYX52s1.js} +2 -2
- package/dist/web/public/assets/{shield-alert-BM2sbwiD.js.map → shield-alert-5pYX52s1.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-Bz0a-nE1.js → status-badge-W8PRNBT2.js} +2 -2
- package/dist/web/public/assets/{status-badge-Bz0a-nE1.js.map → status-badge-W8PRNBT2.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-BEAppda9.js → subtasks-DSvOTpF0.js} +2 -2
- package/dist/web/public/assets/{subtasks-BEAppda9.js.map → subtasks-DSvOTpF0.js.map} +1 -1
- package/dist/web/public/assets/{table-Dl8Faxz-.js → table-B695Fh_p.js} +2 -2
- package/dist/web/public/assets/{table-Dl8Faxz-.js.map → table-B695Fh_p.js.map} +1 -1
- package/dist/web/public/assets/{topn-CXTn3Qdn.js → topn-DqUC9bYh.js} +2 -2
- package/dist/web/public/assets/{topn-CXTn3Qdn.js.map → topn-DqUC9bYh.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-DUSLukqd.js → trash-2-DH4UNSUm.js} +2 -2
- package/dist/web/public/assets/{trash-2-DUSLukqd.js.map → trash-2-DH4UNSUm.js.map} +1 -1
- package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js → use-agim-skills-BD17YQCK.js} +2 -2
- package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js.map → use-agim-skills-BD17YQCK.js.map} +1 -1
- package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js → use-background-tasks-Clyo1IGE.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js.map → use-background-tasks-Clyo1IGE.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-4xOyJX4L.js → use-memory-BGvVWIQX.js} +2 -2
- package/dist/web/public/assets/{use-memory-4xOyJX4L.js.map → use-memory-BGvVWIQX.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-DMebP5-1.js → use-observability-IlURblVq.js} +2 -2
- package/dist/web/public/assets/{use-observability-DMebP5-1.js.map → use-observability-IlURblVq.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-GPajsGBB.js → use-settings-DFTGCq8J.js} +2 -2
- package/dist/web/public/assets/{use-settings-GPajsGBB.js.map → use-settings-DFTGCq8J.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-C6qix-sY.js → use-workspace-DaXX6QdK.js} +2 -2
- package/dist/web/public/assets/{use-workspace-C6qix-sY.js.map → use-workspace-DaXX6QdK.js.map} +1 -1
- package/dist/web/public/assets/{vector-hGc2RFNQ.js → vector-CKUwZBiK.js} +2 -2
- package/dist/web/public/assets/{vector-hGc2RFNQ.js.map → vector-CKUwZBiK.js.map} +1 -1
- package/dist/web/public/assets/{viewer-YkLMRkmd.js → viewer-edlHJiVg.js} +2 -2
- package/dist/web/public/assets/{viewer-YkLMRkmd.js.map → viewer-edlHJiVg.js.map} +1 -1
- package/dist/web/public/assets/{workspace-0GRMLd5j.js → workspace-B0jlv7Gj.js} +2 -2
- package/dist/web/public/assets/{workspace-0GRMLd5j.js.map → workspace-B0jlv7Gj.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-DPa7ByRm.js → workspaces-_Ho1uiD-.js} +2 -2
- package/dist/web/public/assets/{workspaces-DPa7ByRm.js.map → workspaces-_Ho1uiD-.js.map} +1 -1
- package/dist/web/public/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
// Tests for the TUI markdown table formatter. We test the pure
|
|
2
|
+
// buildTableLines / displayWidth helpers directly (no ink runtime needed,
|
|
3
|
+
// and ink-testing-library isn't a dependency). The regression these guard
|
|
4
|
+
// against: GFM tables used to be dropped entirely because table tokens have
|
|
5
|
+
// no `.text` field.
|
|
6
|
+
import { describe, it, expect } from 'bun:test';
|
|
7
|
+
import { marked } from 'marked';
|
|
8
|
+
import { buildTableLines, displayWidth, Markdown, renderInlineCell, inlineCellText, highlightCode } from './markdown.js';
|
|
9
|
+
// Walk a React element tree and concatenate all string/number leaves. Lets
|
|
10
|
+
// us assert on rendered text without an ink runtime (ink-testing-library is
|
|
11
|
+
// not a dependency). We call Markdown() directly to get its element tree.
|
|
12
|
+
// biome-ignore lint/suspicious/noExplicitAny: test-only tree walk
|
|
13
|
+
function flatten(node) {
|
|
14
|
+
if (node == null || node === false || node === true)
|
|
15
|
+
return '';
|
|
16
|
+
if (typeof node === 'string' || typeof node === 'number')
|
|
17
|
+
return String(node);
|
|
18
|
+
if (Array.isArray(node))
|
|
19
|
+
return node.map(flatten).join('');
|
|
20
|
+
if (node.props && 'children' in node.props)
|
|
21
|
+
return flatten(node.props.children);
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
function renderText(md, width = 120) {
|
|
25
|
+
return flatten(Markdown({ source: md, width }));
|
|
26
|
+
}
|
|
27
|
+
// Helper: tokenize a markdown table and pull header/rows/align like the
|
|
28
|
+
// renderer does, so the tests exercise the real marked token shape.
|
|
29
|
+
function tableParts(md) {
|
|
30
|
+
const tok = marked.lexer(md).find((t) => t.type === 'table');
|
|
31
|
+
return {
|
|
32
|
+
header: tok.header.map((c) => c.text),
|
|
33
|
+
rows: tok.rows.map((r) => r.map((c) => c.text)),
|
|
34
|
+
align: tok.align,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const SAMPLE = [
|
|
38
|
+
'| Name | Score |',
|
|
39
|
+
'|------|------:|',
|
|
40
|
+
'| Ann | 10 |',
|
|
41
|
+
'| Bob | 7 |',
|
|
42
|
+
].join('\n');
|
|
43
|
+
describe('displayWidth', () => {
|
|
44
|
+
it('counts ASCII as 1 and CJK as 2', () => {
|
|
45
|
+
expect(displayWidth('a')).toBe(1);
|
|
46
|
+
expect(displayWidth('ab')).toBe(2);
|
|
47
|
+
expect(displayWidth('中')).toBe(2);
|
|
48
|
+
expect(displayWidth('中文')).toBe(4);
|
|
49
|
+
expect(displayWidth('中a')).toBe(3);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('buildTableLines — grid mode', () => {
|
|
53
|
+
it('renders header, separator and every row when it fits', () => {
|
|
54
|
+
const { header, rows, align } = tableParts(SAMPLE);
|
|
55
|
+
const { mode, lines } = buildTableLines(header, rows, align, 80);
|
|
56
|
+
expect(mode).toBe('grid');
|
|
57
|
+
// header + separator + 2 data rows
|
|
58
|
+
expect(lines.length).toBe(4);
|
|
59
|
+
expect(lines[0]).toContain('Name');
|
|
60
|
+
expect(lines[0]).toContain('Score');
|
|
61
|
+
expect(lines[1]).toMatch(/─.*┼.*─/);
|
|
62
|
+
expect(lines.some((l) => l.includes('Ann') && l.includes('10'))).toBe(true);
|
|
63
|
+
expect(lines.some((l) => l.includes('Bob') && l.includes('7'))).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
it('pads columns to equal display width (rows align)', () => {
|
|
66
|
+
const { header, rows, align } = tableParts(SAMPLE);
|
|
67
|
+
const { lines } = buildTableLines(header, rows, align, 80);
|
|
68
|
+
const widths = lines.map((l) => displayWidth(l));
|
|
69
|
+
// header + all data rows share one width; the separator may differ by
|
|
70
|
+
// the ┼ vs │ glyph, so compare the data rows + header only.
|
|
71
|
+
const dataWidths = [widths[0], ...widths.slice(2)];
|
|
72
|
+
expect(new Set(dataWidths).size).toBe(1);
|
|
73
|
+
});
|
|
74
|
+
it('never drops rows (5-row table keeps all 5)', () => {
|
|
75
|
+
const md = [
|
|
76
|
+
'| K | V |',
|
|
77
|
+
'|---|---|',
|
|
78
|
+
...Array.from({ length: 5 }, (_, i) => `| k${i} | v${i} |`),
|
|
79
|
+
].join('\n');
|
|
80
|
+
const { header, rows, align } = tableParts(md);
|
|
81
|
+
const { lines } = buildTableLines(header, rows, align, 80);
|
|
82
|
+
for (let i = 0; i < 5; i++) {
|
|
83
|
+
expect(lines.some((l) => l.includes(`k${i}`) && l.includes(`v${i}`))).toBe(true);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('buildTableLines — list fallback (too wide)', () => {
|
|
88
|
+
it('degrades to header: value records without dropping data', () => {
|
|
89
|
+
const { header, rows, align } = tableParts(SAMPLE);
|
|
90
|
+
const { mode, lines } = buildTableLines(header, rows, align, 8); // tiny width
|
|
91
|
+
expect(mode).toBe('list');
|
|
92
|
+
const joined = lines.join('\n');
|
|
93
|
+
// every header:value pair present
|
|
94
|
+
expect(joined).toContain('Name: Ann');
|
|
95
|
+
expect(joined).toContain('Score: 10');
|
|
96
|
+
expect(joined).toContain('Name: Bob');
|
|
97
|
+
expect(joined).toContain('Score: 7');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('list rendering', () => {
|
|
101
|
+
it('renders inline formatting in items WITHOUT literal markdown', () => {
|
|
102
|
+
const text = renderText('- **bold** and `code` here');
|
|
103
|
+
expect(text).toContain('bold');
|
|
104
|
+
expect(text).toContain('code');
|
|
105
|
+
expect(text).not.toContain('**'); // no literal asterisks leaking through
|
|
106
|
+
});
|
|
107
|
+
it('keeps nested sub-list items', () => {
|
|
108
|
+
const text = renderText('- parent\n - nested child\n - second child');
|
|
109
|
+
expect(text).toContain('parent');
|
|
110
|
+
expect(text).toContain('nested child');
|
|
111
|
+
expect(text).toContain('second child');
|
|
112
|
+
});
|
|
113
|
+
it('shows task checkboxes', () => {
|
|
114
|
+
const text = renderText('- [ ] todo\n- [x] done');
|
|
115
|
+
expect(text).toContain('☐');
|
|
116
|
+
expect(text).toContain('☑');
|
|
117
|
+
expect(text).toContain('todo');
|
|
118
|
+
expect(text).toContain('done');
|
|
119
|
+
});
|
|
120
|
+
it('honours ordered-list start offset', () => {
|
|
121
|
+
const text = renderText('3. third\n4. fourth');
|
|
122
|
+
expect(text).toContain('3.');
|
|
123
|
+
expect(text).toContain('4.');
|
|
124
|
+
expect(text).toContain('third');
|
|
125
|
+
expect(text).toContain('fourth');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('blockquote rendering', () => {
|
|
129
|
+
it('renders quoted bold without literal markup and keeps a quoted list', () => {
|
|
130
|
+
const text = renderText('> quoted **strong**\n> - quoted item');
|
|
131
|
+
expect(text).toContain('quoted');
|
|
132
|
+
expect(text).toContain('strong');
|
|
133
|
+
expect(text).not.toContain('**');
|
|
134
|
+
expect(text).toContain('quoted item'); // nested list inside the quote survives
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('table rendering via <Markdown>', () => {
|
|
138
|
+
it('renders a table (regression: tables used to vanish)', () => {
|
|
139
|
+
const text = renderText('| A | B |\n|---|---|\n| 1 | 2 |');
|
|
140
|
+
expect(text).toContain('A');
|
|
141
|
+
expect(text).toContain('B');
|
|
142
|
+
expect(text).toContain('1');
|
|
143
|
+
expect(text).toContain('2');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
// Helper: inline tokens of the first paragraph of `md`.
|
|
147
|
+
function inlineTokens(md) {
|
|
148
|
+
const p = marked.lexer(md).find((t) => t.type === 'paragraph');
|
|
149
|
+
return p.tokens;
|
|
150
|
+
}
|
|
151
|
+
describe('renderInlineCell — width-preserving inline (table cells)', () => {
|
|
152
|
+
it('emits styled content with the SAME characters as cell.text (no markup chars)', () => {
|
|
153
|
+
const toks = inlineTokens('**b** `c` [x](http://u)');
|
|
154
|
+
// marked produces a `text` token " " between inline spans; flattened text
|
|
155
|
+
// must equal the visible plain form with NO **, backticks or URL.
|
|
156
|
+
const flat = flatten(renderInlineCell(toks, 'k'));
|
|
157
|
+
expect(flat).toBe('b c x');
|
|
158
|
+
expect(flat).not.toContain('*');
|
|
159
|
+
expect(flat).not.toContain('`');
|
|
160
|
+
expect(flat).not.toContain('http');
|
|
161
|
+
});
|
|
162
|
+
it('rendered width matches inlineCellText (keeps columns aligned)', () => {
|
|
163
|
+
const md = '| H |\n|---|\n| **b** `c` |';
|
|
164
|
+
const tok = marked.lexer(md).find((t) => t.type === 'table');
|
|
165
|
+
const c = tok.rows[0][0];
|
|
166
|
+
// marked keeps raw markup in c.text ("**b** `c`"); the rendered/visible
|
|
167
|
+
// form is "b c" and that is what width math must use.
|
|
168
|
+
expect(flatten(renderInlineCell(c.tokens, 'k'))).toBe('b c');
|
|
169
|
+
expect(displayWidth(flatten(renderInlineCell(c.tokens, 'k')))).toBe(displayWidth(inlineCellText(c.tokens)));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('styled table via <Markdown>', () => {
|
|
173
|
+
it('renders bold/code cell values fully and without literal markup', () => {
|
|
174
|
+
const text = renderText('| Name | Note |\n|------|------|\n| **Ann** | `ok` |\n| Bob | done |');
|
|
175
|
+
expect(text).toContain('Ann');
|
|
176
|
+
expect(text).toContain('ok');
|
|
177
|
+
expect(text).toContain('Bob');
|
|
178
|
+
expect(text).toContain('done');
|
|
179
|
+
expect(text).not.toContain('**');
|
|
180
|
+
expect(text).not.toContain('`');
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
describe('highlightCode — strings / comments / numbers / keywords', () => {
|
|
184
|
+
const kindOf = (spans, substr) => spans.find((s) => s.text.includes(substr))?.kind;
|
|
185
|
+
it('does not colour keywords inside strings or comments', () => {
|
|
186
|
+
const spans = highlightCode('const s = "return 1" // return', 'js');
|
|
187
|
+
// the string span carries the inner `return`, not a keyword span
|
|
188
|
+
expect(kindOf(spans, '"return 1"')).toBe('string');
|
|
189
|
+
expect(kindOf(spans, '// return')).toBe('comment');
|
|
190
|
+
expect(kindOf(spans, 'const')).toBe('keyword');
|
|
191
|
+
// no standalone keyword span equal to 'return'
|
|
192
|
+
expect(spans.some((s) => s.kind === 'keyword' && s.text === 'return')).toBe(false);
|
|
193
|
+
});
|
|
194
|
+
it('colours numbers', () => {
|
|
195
|
+
const spans = highlightCode('let x = 42', 'ts');
|
|
196
|
+
expect(spans.some((s) => s.kind === 'number' && s.text === '42')).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
it('python uses # line comments', () => {
|
|
199
|
+
const spans = highlightCode('x = 1 # note', 'py');
|
|
200
|
+
expect(kindOf(spans, '# note')).toBe('comment');
|
|
201
|
+
});
|
|
202
|
+
it('reconstructs the exact source (no characters lost)', () => {
|
|
203
|
+
const src = 'const s = "a" // b\nreturn 3';
|
|
204
|
+
expect(highlightCode(src, 'js').map((s) => s.text).join('')).toBe(src);
|
|
205
|
+
});
|
|
206
|
+
it('unknown language → single plain span', () => {
|
|
207
|
+
const spans = highlightCode('whatever 123', 'made-up-lang');
|
|
208
|
+
expect(spans).toEqual([{ text: 'whatever 123' }]);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe('minor token cleanups', () => {
|
|
212
|
+
it('drops link-reference definitions (no raw leak)', () => {
|
|
213
|
+
expect(renderText('[id]: https://example.com').trim()).toBe('');
|
|
214
|
+
});
|
|
215
|
+
it('renders images as alt + url', () => {
|
|
216
|
+
const text = renderText('');
|
|
217
|
+
expect(text).toContain('alt text');
|
|
218
|
+
expect(text).toContain('http://u/x.png');
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('buildTableLines — robustness', () => {
|
|
222
|
+
it('CJK header/cells align by display width', () => {
|
|
223
|
+
const md = [
|
|
224
|
+
'| 名称 | 值 |',
|
|
225
|
+
'|------|----|',
|
|
226
|
+
'| ab | x |',
|
|
227
|
+
].join('\n');
|
|
228
|
+
const { header, rows, align } = tableParts(md);
|
|
229
|
+
const { mode, lines } = buildTableLines(header, rows, align, 80);
|
|
230
|
+
expect(mode).toBe('grid');
|
|
231
|
+
expect(displayWidth(lines[0])).toBe(displayWidth(lines[2]));
|
|
232
|
+
});
|
|
233
|
+
it('ragged rows (fewer cells than header) do not throw and pad out', () => {
|
|
234
|
+
const { mode, lines } = buildTableLines(['A', 'B', 'C'], [['1']], [null, null, null], 80);
|
|
235
|
+
expect(mode).toBe('grid');
|
|
236
|
+
expect(lines.length).toBe(3); // header, sep, 1 row
|
|
237
|
+
expect(lines[2]).toContain('1');
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=markdown.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../../src/cli-ui/tui/markdown.test.tsx"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -600,8 +600,25 @@ program
|
|
|
600
600
|
// (default-open; boot log warns OPEN_IM_ACCESS).
|
|
601
601
|
try {
|
|
602
602
|
const { isSenderAllowlistConfigured, isSenderAllowed, senderDenialMessage } = await import('./core/sender-allowlist.js');
|
|
603
|
-
|
|
604
|
-
|
|
603
|
+
const configured = isSenderAllowlistConfigured();
|
|
604
|
+
let allowed = true;
|
|
605
|
+
if (configured) {
|
|
606
|
+
try {
|
|
607
|
+
allowed = isSenderAllowed(ctx.platform, ctx.message.userId);
|
|
608
|
+
}
|
|
609
|
+
catch (err) {
|
|
610
|
+
// v1.3.7 (F6) — a deny-gate must NOT fail open. If the
|
|
611
|
+
// allowlist is configured but we can't evaluate it, treat the
|
|
612
|
+
// sender as NOT allowed rather than silently letting them in.
|
|
613
|
+
ctx.logger.error({
|
|
614
|
+
event: 'sender.allowlist.eval_failed',
|
|
615
|
+
platform: ctx.platform,
|
|
616
|
+
err: err instanceof Error ? err.message : String(err),
|
|
617
|
+
}, 'sender allowlist evaluation failed while configured — failing CLOSED (deny)');
|
|
618
|
+
allowed = false;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
if (configured && !allowed) {
|
|
605
622
|
ctx.logger.warn({
|
|
606
623
|
event: 'sender.allowlist.denied',
|
|
607
624
|
platform: ctx.platform,
|
|
@@ -623,10 +640,14 @@ program
|
|
|
623
640
|
}
|
|
624
641
|
}
|
|
625
642
|
catch (err) {
|
|
626
|
-
|
|
643
|
+
// v1.3.7 (F6) — the module failed to load, so we genuinely cannot
|
|
644
|
+
// tell whether a restriction is configured. Surface LOUDLY (was a
|
|
645
|
+
// quiet fail-open warn). Open posture is preserved only because we
|
|
646
|
+
// can't prove a restriction exists.
|
|
647
|
+
ctx.logger.error({
|
|
627
648
|
event: 'sender.allowlist.error',
|
|
628
649
|
err: err instanceof Error ? err.message : String(err),
|
|
629
|
-
}, 'sender allowlist
|
|
650
|
+
}, 'sender allowlist module failed to load; cannot enforce — review IMHUB_ALLOWED_USERS');
|
|
630
651
|
}
|
|
631
652
|
// Phase 3 — interrupted-job recovery reply. If the user has a
|
|
632
653
|
// pending "retry / cancel" prompt outstanding on this thread AND
|