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.
Files changed (260) hide show
  1. package/CHANGELOG.md +30 -6
  2. package/dist/cli-ui/tui/app.js +2 -2
  3. package/dist/cli-ui/tui/app.js.map +1 -1
  4. package/dist/cli-ui/tui/markdown.d.ts +46 -2
  5. package/dist/cli-ui/tui/markdown.d.ts.map +1 -1
  6. package/dist/cli-ui/tui/markdown.js +362 -34
  7. package/dist/cli-ui/tui/markdown.js.map +1 -1
  8. package/dist/cli-ui/tui/markdown.test.d.ts +2 -0
  9. package/dist/cli-ui/tui/markdown.test.d.ts.map +1 -0
  10. package/dist/cli-ui/tui/markdown.test.js +240 -0
  11. package/dist/cli-ui/tui/markdown.test.js.map +1 -0
  12. package/dist/cli.js +25 -4
  13. package/dist/cli.js.map +1 -1
  14. package/dist/core/a2a.d.ts.map +1 -1
  15. package/dist/core/a2a.js +6 -0
  16. package/dist/core/a2a.js.map +1 -1
  17. package/dist/core/access-token.d.ts.map +1 -1
  18. package/dist/core/access-token.js +16 -4
  19. package/dist/core/access-token.js.map +1 -1
  20. package/dist/core/approval-bus.d.ts +5 -0
  21. package/dist/core/approval-bus.d.ts.map +1 -1
  22. package/dist/core/approval-bus.js +32 -0
  23. package/dist/core/approval-bus.js.map +1 -1
  24. package/dist/core/commands/job.d.ts.map +1 -1
  25. package/dist/core/commands/job.js +10 -3
  26. package/dist/core/commands/job.js.map +1 -1
  27. package/dist/core/goal-rpc.d.ts +7 -0
  28. package/dist/core/goal-rpc.d.ts.map +1 -1
  29. package/dist/core/goal-rpc.js +47 -3
  30. package/dist/core/goal-rpc.js.map +1 -1
  31. package/dist/core/llm/exec-dispatcher.d.ts +2 -0
  32. package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
  33. package/dist/core/llm/exec-dispatcher.js +60 -6
  34. package/dist/core/llm/exec-dispatcher.js.map +1 -1
  35. package/dist/core/llm/fs-dispatcher.d.ts +3 -0
  36. package/dist/core/llm/fs-dispatcher.d.ts.map +1 -1
  37. package/dist/core/llm/fs-dispatcher.js +31 -12
  38. package/dist/core/llm/fs-dispatcher.js.map +1 -1
  39. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
  40. package/dist/core/llm/imhub-dispatcher.js +9 -5
  41. package/dist/core/llm/imhub-dispatcher.js.map +1 -1
  42. package/dist/core/llm/model-catalog.js +1 -1
  43. package/dist/core/llm/model-catalog.js.map +1 -1
  44. package/dist/core/llm/policy-approval-gate.d.ts.map +1 -1
  45. package/dist/core/llm/policy-approval-gate.js +17 -4
  46. package/dist/core/llm/policy-approval-gate.js.map +1 -1
  47. package/dist/core/llm/registry.d.ts +2 -2
  48. package/dist/core/llm/registry.js +1 -1
  49. package/dist/core/llm/web-dispatcher.d.ts +20 -0
  50. package/dist/core/llm/web-dispatcher.d.ts.map +1 -1
  51. package/dist/core/llm/web-dispatcher.js +70 -5
  52. package/dist/core/llm/web-dispatcher.js.map +1 -1
  53. package/dist/core/registry.d.ts.map +1 -1
  54. package/dist/core/registry.js +5 -19
  55. package/dist/core/registry.js.map +1 -1
  56. package/dist/core/router.js +1 -1
  57. package/dist/core/router.js.map +1 -1
  58. package/dist/core/schedule.d.ts.map +1 -1
  59. package/dist/core/schedule.js +6 -2
  60. package/dist/core/schedule.js.map +1 -1
  61. package/dist/core/skills/loader.js +3 -3
  62. package/dist/core/skills/loader.js.map +1 -1
  63. package/dist/core/types.d.ts +3 -0
  64. package/dist/core/types.d.ts.map +1 -1
  65. package/dist/plugins/agents/native/index.d.ts +0 -146
  66. package/dist/plugins/agents/native/index.d.ts.map +1 -1
  67. package/dist/plugins/agents/native/index.js +41 -1291
  68. package/dist/plugins/agents/native/index.js.map +1 -1
  69. package/dist/plugins/agents/pi-native/approval.d.ts.map +1 -1
  70. package/dist/plugins/agents/pi-native/approval.js +2 -3
  71. package/dist/plugins/agents/pi-native/approval.js.map +1 -1
  72. package/dist/plugins/agents/pi-native/factory.d.ts +3 -4
  73. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  74. package/dist/plugins/agents/pi-native/factory.js +8 -14
  75. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  76. package/dist/plugins/agents/pi-native/index.d.ts +8 -8
  77. package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
  78. package/dist/plugins/agents/pi-native/index.js +78 -13
  79. package/dist/plugins/agents/pi-native/index.js.map +1 -1
  80. package/dist/plugins/agents/pi-native/provider-resolver.d.ts +4 -4
  81. package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
  82. package/dist/plugins/agents/pi-native/provider-resolver.js +1 -1
  83. package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
  84. package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
  85. package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
  86. package/dist/plugins/agents/pi-native/tools.d.ts +3 -4
  87. package/dist/plugins/agents/pi-native/tools.d.ts.map +1 -1
  88. package/dist/plugins/agents/pi-native/tools.js +7 -9
  89. package/dist/plugins/agents/pi-native/tools.js.map +1 -1
  90. package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -1
  91. package/dist/plugins/messengers/discord/discord-adapter.js +14 -2
  92. package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -1
  93. package/dist/web/public/assets/{a2a-Bk51ozUt.js → a2a-D_I9ZX8i.js} +2 -2
  94. package/dist/web/public/assets/{a2a-Bk51ozUt.js.map → a2a-D_I9ZX8i.js.map} +1 -1
  95. package/dist/web/public/assets/{activity-DzKONPpA.js → activity-ZxWknBf9.js} +2 -2
  96. package/dist/web/public/assets/{activity-DzKONPpA.js.map → activity-ZxWknBf9.js.map} +1 -1
  97. package/dist/web/public/assets/{admins-CmZ4eQnt.js → admins-DFZcKgq0.js} +2 -2
  98. package/dist/web/public/assets/{admins-CmZ4eQnt.js.map → admins-DFZcKgq0.js.map} +1 -1
  99. package/dist/web/public/assets/{agents-lj76gn9U.js → agents-DTONSU0R.js} +2 -2
  100. package/dist/web/public/assets/{agents-lj76gn9U.js.map → agents-DTONSU0R.js.map} +1 -1
  101. package/dist/web/public/assets/{approvals-C5-3WBcb.js → approvals-BdDJvH8b.js} +2 -2
  102. package/dist/web/public/assets/{approvals-C5-3WBcb.js.map → approvals-BdDJvH8b.js.map} +1 -1
  103. package/dist/web/public/assets/{arrow-down-DAjYgwW2.js → arrow-down-Bhl7hNwa.js} +2 -2
  104. package/dist/web/public/assets/{arrow-down-DAjYgwW2.js.map → arrow-down-Bhl7hNwa.js.map} +1 -1
  105. package/dist/web/public/assets/{arrow-up-Cba9TuAO.js → arrow-up-DZLw3qr1.js} +2 -2
  106. package/dist/web/public/assets/{arrow-up-Cba9TuAO.js.map → arrow-up-DZLw3qr1.js.map} +1 -1
  107. package/dist/web/public/assets/{asks-qlttx_de.js → asks-Cj2QazUD.js} +2 -2
  108. package/dist/web/public/assets/{asks-qlttx_de.js.map → asks-Cj2QazUD.js.map} +1 -1
  109. package/dist/web/public/assets/{audit-CSjpfK6P.js → audit-sxS7UUa6.js} +2 -2
  110. package/dist/web/public/assets/{audit-CSjpfK6P.js.map → audit-sxS7UUa6.js.map} +1 -1
  111. package/dist/web/public/assets/{bell-Dm9oEZR5.js → bell-CqimaF3k.js} +2 -2
  112. package/dist/web/public/assets/{bell-Dm9oEZR5.js.map → bell-CqimaF3k.js.map} +1 -1
  113. package/dist/web/public/assets/{bgjobs-IOX_MrKV.js → bgjobs-BnXdz4TP.js} +2 -2
  114. package/dist/web/public/assets/{bgjobs-IOX_MrKV.js.map → bgjobs-BnXdz4TP.js.map} +1 -1
  115. package/dist/web/public/assets/{brain-D24bSBeM.js → brain-4TIClaVZ.js} +2 -2
  116. package/dist/web/public/assets/{brain-D24bSBeM.js.map → brain-4TIClaVZ.js.map} +1 -1
  117. package/dist/web/public/assets/{briefcase-BrIzC9EZ.js → briefcase-iKF60CJd.js} +2 -2
  118. package/dist/web/public/assets/{briefcase-BrIzC9EZ.js.map → briefcase-iKF60CJd.js.map} +1 -1
  119. package/dist/web/public/assets/{chat-DXki5zbL.js → chat-Cjp0ECm5.js} +2 -2
  120. package/dist/web/public/assets/{chat-DXki5zbL.js.map → chat-Cjp0ECm5.js.map} +1 -1
  121. package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js → chevron-left-sZyMkeG-.js} +2 -2
  122. package/dist/web/public/assets/{chevron-left-C8Ha_lMZ.js.map → chevron-left-sZyMkeG-.js.map} +1 -1
  123. package/dist/web/public/assets/{chevron-right-LF_j8BGd.js → chevron-right-CPHPRLSX.js} +2 -2
  124. package/dist/web/public/assets/{chevron-right-LF_j8BGd.js.map → chevron-right-CPHPRLSX.js.map} +1 -1
  125. package/dist/web/public/assets/{circle-check-CpSR3rJi.js → circle-check-BB11MxVm.js} +2 -2
  126. package/dist/web/public/assets/{circle-check-CpSR3rJi.js.map → circle-check-BB11MxVm.js.map} +1 -1
  127. package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js → circle-check-big-Sj-6H_3x.js} +2 -2
  128. package/dist/web/public/assets/{circle-check-big-Dbz0XziN.js.map → circle-check-big-Sj-6H_3x.js.map} +1 -1
  129. package/dist/web/public/assets/{circle-x-XWMjbfp5.js → circle-x-DYcD4BUu.js} +2 -2
  130. package/dist/web/public/assets/{circle-x-XWMjbfp5.js.map → circle-x-DYcD4BUu.js.map} +1 -1
  131. package/dist/web/public/assets/{clock-BjVFYz37.js → clock-BVXa81yB.js} +2 -2
  132. package/dist/web/public/assets/{clock-BjVFYz37.js.map → clock-BVXa81yB.js.map} +1 -1
  133. package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js → confirm-dialog-C2melodU.js} +2 -2
  134. package/dist/web/public/assets/{confirm-dialog-C8nuBNh3.js.map → confirm-dialog-C2melodU.js.map} +1 -1
  135. package/dist/web/public/assets/{copy-BUxvUnbP.js → copy-D1OIgfLU.js} +2 -2
  136. package/dist/web/public/assets/{copy-BUxvUnbP.js.map → copy-D1OIgfLU.js.map} +1 -1
  137. package/dist/web/public/assets/{data-table-BHctKsHM.js → data-table-BYJ2qMyY.js} +2 -2
  138. package/dist/web/public/assets/{data-table-BHctKsHM.js.map → data-table-BYJ2qMyY.js.map} +1 -1
  139. package/dist/web/public/assets/{download-C0hikBL7.js → download-BChufhnl.js} +2 -2
  140. package/dist/web/public/assets/{download-C0hikBL7.js.map → download-BChufhnl.js.map} +1 -1
  141. package/dist/web/public/assets/{email-D940p9kF.js → email-exon2FvQ.js} +2 -2
  142. package/dist/web/public/assets/{email-D940p9kF.js.map → email-exon2FvQ.js.map} +1 -1
  143. package/dist/web/public/assets/{empty-state-BzzUgjlL.js → empty-state-De5ls0uC.js} +2 -2
  144. package/dist/web/public/assets/{empty-state-BzzUgjlL.js.map → empty-state-De5ls0uC.js.map} +1 -1
  145. package/dist/web/public/assets/{external-link-Cjuz11n7.js → external-link-CiJZi5YL.js} +2 -2
  146. package/dist/web/public/assets/{external-link-Cjuz11n7.js.map → external-link-CiJZi5YL.js.map} +1 -1
  147. package/dist/web/public/assets/{eye-DVQjbb2Z.js → eye-DowB5M1R.js} +2 -2
  148. package/dist/web/public/assets/{eye-DVQjbb2Z.js.map → eye-DowB5M1R.js.map} +1 -1
  149. package/dist/web/public/assets/{facts-C4hVaO6t.js → facts-BdnrzWfV.js} +2 -2
  150. package/dist/web/public/assets/{facts-C4hVaO6t.js.map → facts-BdnrzWfV.js.map} +1 -1
  151. package/dist/web/public/assets/{goals-89sYO75m.js → goals-D6ibCBqb.js} +2 -2
  152. package/dist/web/public/assets/{goals-89sYO75m.js.map → goals-D6ibCBqb.js.map} +1 -1
  153. package/dist/web/public/assets/{health-CKfZBddX.js → health-BA8ydz1A.js} +2 -2
  154. package/dist/web/public/assets/{health-CKfZBddX.js.map → health-BA8ydz1A.js.map} +1 -1
  155. package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js → heart-pulse-ClrbGrB7.js} +2 -2
  156. package/dist/web/public/assets/{heart-pulse-BfYs3KFD.js.map → heart-pulse-ClrbGrB7.js.map} +1 -1
  157. package/dist/web/public/assets/{heartbeat-oKkyHWgV.js → heartbeat-j03zupAy.js} +2 -2
  158. package/dist/web/public/assets/{heartbeat-oKkyHWgV.js.map → heartbeat-j03zupAy.js.map} +1 -1
  159. package/dist/web/public/assets/{hot-Cas_nZv9.js → hot-D3bwuObi.js} +2 -2
  160. package/dist/web/public/assets/{hot-Cas_nZv9.js.map → hot-D3bwuObi.js.map} +1 -1
  161. package/dist/web/public/assets/{index-B795P_3p.js → index-DvWldAJY.js} +15 -15
  162. package/dist/web/public/assets/{index-B795P_3p.js.map → index-DvWldAJY.js.map} +1 -1
  163. package/dist/web/public/assets/{injection-DksSjIsi.js → injection-C89g9123.js} +2 -2
  164. package/dist/web/public/assets/{injection-DksSjIsi.js.map → injection-C89g9123.js.map} +1 -1
  165. package/dist/web/public/assets/{installed-DWq0Eluy.js → installed-1Hal8dxW.js} +2 -2
  166. package/dist/web/public/assets/{installed-DWq0Eluy.js.map → installed-1Hal8dxW.js.map} +1 -1
  167. package/dist/web/public/assets/{jobs-CqY-xtBr.js → jobs-cQ7V-7ec.js} +2 -2
  168. package/dist/web/public/assets/{jobs-CqY-xtBr.js.map → jobs-cQ7V-7ec.js.map} +1 -1
  169. package/dist/web/public/assets/{layout-DsoDxB0i.js → layout-BbRAk_tA.js} +2 -2
  170. package/dist/web/public/assets/{layout-DsoDxB0i.js.map → layout-BbRAk_tA.js.map} +1 -1
  171. package/dist/web/public/assets/{layout-CqgDOB5t.js → layout-CXGgZCd2.js} +2 -2
  172. package/dist/web/public/assets/{layout-CqgDOB5t.js.map → layout-CXGgZCd2.js.map} +1 -1
  173. package/dist/web/public/assets/{layout-Cltp3ikG.js → layout-CZ9hb8_a.js} +2 -2
  174. package/dist/web/public/assets/{layout-Cltp3ikG.js.map → layout-CZ9hb8_a.js.map} +1 -1
  175. package/dist/web/public/assets/{layout-BiAVhWgU.js → layout-U5o6RgqN.js} +2 -2
  176. package/dist/web/public/assets/{layout-BiAVhWgU.js.map → layout-U5o6RgqN.js.map} +1 -1
  177. package/dist/web/public/assets/{layout-BodTIhhE.js → layout-Y9JSZczb.js} +2 -2
  178. package/dist/web/public/assets/{layout-BodTIhhE.js.map → layout-Y9JSZczb.js.map} +1 -1
  179. package/dist/web/public/assets/{llm-D3Kd9gqa.js → llm-CumYZM83.js} +2 -2
  180. package/dist/web/public/assets/{llm-D3Kd9gqa.js.map → llm-CumYZM83.js.map} +1 -1
  181. package/dist/web/public/assets/{loader-circle-DsLQMvHE.js → loader-circle-CZQXsfz7.js} +2 -2
  182. package/dist/web/public/assets/{loader-circle-DsLQMvHE.js.map → loader-circle-CZQXsfz7.js.map} +1 -1
  183. package/dist/web/public/assets/{map-pin-e694Eet6.js → map-pin-CYj0xBbt.js} +2 -2
  184. package/dist/web/public/assets/{map-pin-e694Eet6.js.map → map-pin-CYj0xBbt.js.map} +1 -1
  185. package/dist/web/public/assets/{mcp-BoWJqog4.js → mcp-DP4Vj1Nh.js} +2 -2
  186. package/dist/web/public/assets/{mcp-BoWJqog4.js.map → mcp-DP4Vj1Nh.js.map} +1 -1
  187. package/dist/web/public/assets/{memos-C81bimPJ.js → memos-ZDpt1S28.js} +2 -2
  188. package/dist/web/public/assets/{memos-C81bimPJ.js.map → memos-ZDpt1S28.js.map} +1 -1
  189. package/dist/web/public/assets/{messengers-CGcjXUeJ.js → messengers-B007J8et.js} +2 -2
  190. package/dist/web/public/assets/{messengers-CGcjXUeJ.js.map → messengers-B007J8et.js.map} +1 -1
  191. package/dist/web/public/assets/{mobile-Duy_If5A.js → mobile-Crm0YJ36.js} +2 -2
  192. package/dist/web/public/assets/{mobile-Duy_If5A.js.map → mobile-Crm0YJ36.js.map} +1 -1
  193. package/dist/web/public/assets/{network-DnBhCncp.js → network-BYbGwOEp.js} +2 -2
  194. package/dist/web/public/assets/{network-DnBhCncp.js.map → network-BYbGwOEp.js.map} +1 -1
  195. package/dist/web/public/assets/{outbox-DrReVtHr.js → outbox-D7xZ5y2T.js} +2 -2
  196. package/dist/web/public/assets/{outbox-DrReVtHr.js.map → outbox-D7xZ5y2T.js.map} +1 -1
  197. package/dist/web/public/assets/{pagination-DgS8vaZM.js → pagination-bzSoQOAd.js} +2 -2
  198. package/dist/web/public/assets/{pagination-DgS8vaZM.js.map → pagination-bzSoQOAd.js.map} +1 -1
  199. package/dist/web/public/assets/{persona-NTg-RuPa.js → persona-VT6A3VYL.js} +2 -2
  200. package/dist/web/public/assets/{persona-NTg-RuPa.js.map → persona-VT6A3VYL.js.map} +1 -1
  201. package/dist/web/public/assets/{plans-CUsr4aMb.js → plans-b4DAc_3a.js} +2 -2
  202. package/dist/web/public/assets/{plans-CUsr4aMb.js.map → plans-b4DAc_3a.js.map} +1 -1
  203. package/dist/web/public/assets/{play-G96k2QBR.js → play-SPYhVFeC.js} +2 -2
  204. package/dist/web/public/assets/{play-G96k2QBR.js.map → play-SPYhVFeC.js.map} +1 -1
  205. package/dist/web/public/assets/{plus-6RZ3XScp.js → plus-D__n9IVW.js} +2 -2
  206. package/dist/web/public/assets/{plus-6RZ3XScp.js.map → plus-D__n9IVW.js.map} +1 -1
  207. package/dist/web/public/assets/{policy-BFlQnPo5.js → policy-CWeiR9UO.js} +2 -2
  208. package/dist/web/public/assets/{policy-BFlQnPo5.js.map → policy-CWeiR9UO.js.map} +1 -1
  209. package/dist/web/public/assets/{qr-code-L7ClZ31U.js → qr-code-BqDQw03Z.js} +2 -2
  210. package/dist/web/public/assets/{qr-code-L7ClZ31U.js.map → qr-code-BqDQw03Z.js.map} +1 -1
  211. package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js → refresh-ccw-CW2loqyz.js} +2 -2
  212. package/dist/web/public/assets/{refresh-ccw-S3sFYfDb.js.map → refresh-ccw-CW2loqyz.js.map} +1 -1
  213. package/dist/web/public/assets/{reminders-DVzHdBpK.js → reminders-BAl8NC0R.js} +2 -2
  214. package/dist/web/public/assets/{reminders-DVzHdBpK.js.map → reminders-BAl8NC0R.js.map} +1 -1
  215. package/dist/web/public/assets/{save-DetwgDjo.js → save-DzWp78MC.js} +2 -2
  216. package/dist/web/public/assets/{save-DetwgDjo.js.map → save-DzWp78MC.js.map} +1 -1
  217. package/dist/web/public/assets/{schedules-CslP2Ntr.js → schedules-6cyfjv0O.js} +2 -2
  218. package/dist/web/public/assets/{schedules-CslP2Ntr.js.map → schedules-6cyfjv0O.js.map} +1 -1
  219. package/dist/web/public/assets/{search-ByHc__pY.js → search-Bh7gD1Aq.js} +2 -2
  220. package/dist/web/public/assets/{search-ByHc__pY.js.map → search-Bh7gD1Aq.js.map} +1 -1
  221. package/dist/web/public/assets/{search-Bx2TNvqF.js → search-DVWPME2t.js} +2 -2
  222. package/dist/web/public/assets/{search-Bx2TNvqF.js.map → search-DVWPME2t.js.map} +1 -1
  223. package/dist/web/public/assets/{security-B4dw2-ZU.js → security-DlZ_rDwC.js} +2 -2
  224. package/dist/web/public/assets/{security-B4dw2-ZU.js.map → security-DlZ_rDwC.js.map} +1 -1
  225. package/dist/web/public/assets/{service-LujRx8DT.js → service-DKkji52r.js} +2 -2
  226. package/dist/web/public/assets/{service-LujRx8DT.js.map → service-DKkji52r.js.map} +1 -1
  227. package/dist/web/public/assets/{shield-alert-BM2sbwiD.js → shield-alert-5pYX52s1.js} +2 -2
  228. package/dist/web/public/assets/{shield-alert-BM2sbwiD.js.map → shield-alert-5pYX52s1.js.map} +1 -1
  229. package/dist/web/public/assets/{status-badge-Bz0a-nE1.js → status-badge-W8PRNBT2.js} +2 -2
  230. package/dist/web/public/assets/{status-badge-Bz0a-nE1.js.map → status-badge-W8PRNBT2.js.map} +1 -1
  231. package/dist/web/public/assets/{subtasks-BEAppda9.js → subtasks-DSvOTpF0.js} +2 -2
  232. package/dist/web/public/assets/{subtasks-BEAppda9.js.map → subtasks-DSvOTpF0.js.map} +1 -1
  233. package/dist/web/public/assets/{table-Dl8Faxz-.js → table-B695Fh_p.js} +2 -2
  234. package/dist/web/public/assets/{table-Dl8Faxz-.js.map → table-B695Fh_p.js.map} +1 -1
  235. package/dist/web/public/assets/{topn-CXTn3Qdn.js → topn-DqUC9bYh.js} +2 -2
  236. package/dist/web/public/assets/{topn-CXTn3Qdn.js.map → topn-DqUC9bYh.js.map} +1 -1
  237. package/dist/web/public/assets/{trash-2-DUSLukqd.js → trash-2-DH4UNSUm.js} +2 -2
  238. package/dist/web/public/assets/{trash-2-DUSLukqd.js.map → trash-2-DH4UNSUm.js.map} +1 -1
  239. package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js → use-agim-skills-BD17YQCK.js} +2 -2
  240. package/dist/web/public/assets/{use-agim-skills-BD1AIi8d.js.map → use-agim-skills-BD17YQCK.js.map} +1 -1
  241. package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js → use-background-tasks-Clyo1IGE.js} +2 -2
  242. package/dist/web/public/assets/{use-background-tasks-FuodO-_C.js.map → use-background-tasks-Clyo1IGE.js.map} +1 -1
  243. package/dist/web/public/assets/{use-memory-4xOyJX4L.js → use-memory-BGvVWIQX.js} +2 -2
  244. package/dist/web/public/assets/{use-memory-4xOyJX4L.js.map → use-memory-BGvVWIQX.js.map} +1 -1
  245. package/dist/web/public/assets/{use-observability-DMebP5-1.js → use-observability-IlURblVq.js} +2 -2
  246. package/dist/web/public/assets/{use-observability-DMebP5-1.js.map → use-observability-IlURblVq.js.map} +1 -1
  247. package/dist/web/public/assets/{use-settings-GPajsGBB.js → use-settings-DFTGCq8J.js} +2 -2
  248. package/dist/web/public/assets/{use-settings-GPajsGBB.js.map → use-settings-DFTGCq8J.js.map} +1 -1
  249. package/dist/web/public/assets/{use-workspace-C6qix-sY.js → use-workspace-DaXX6QdK.js} +2 -2
  250. package/dist/web/public/assets/{use-workspace-C6qix-sY.js.map → use-workspace-DaXX6QdK.js.map} +1 -1
  251. package/dist/web/public/assets/{vector-hGc2RFNQ.js → vector-CKUwZBiK.js} +2 -2
  252. package/dist/web/public/assets/{vector-hGc2RFNQ.js.map → vector-CKUwZBiK.js.map} +1 -1
  253. package/dist/web/public/assets/{viewer-YkLMRkmd.js → viewer-edlHJiVg.js} +2 -2
  254. package/dist/web/public/assets/{viewer-YkLMRkmd.js.map → viewer-edlHJiVg.js.map} +1 -1
  255. package/dist/web/public/assets/{workspace-0GRMLd5j.js → workspace-B0jlv7Gj.js} +2 -2
  256. package/dist/web/public/assets/{workspace-0GRMLd5j.js.map → workspace-B0jlv7Gj.js.map} +1 -1
  257. package/dist/web/public/assets/{workspaces-DPa7ByRm.js → workspaces-_Ho1uiD-.js} +2 -2
  258. package/dist/web/public/assets/{workspaces-DPa7ByRm.js.map → workspaces-_Ho1uiD-.js.map} +1 -1
  259. package/dist/web/public/index.html +1 -1
  260. 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('![alt text](http://u/x.png)');
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
- if (isSenderAllowlistConfigured()
604
- && !isSenderAllowed(ctx.platform, ctx.message.userId)) {
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
- ctx.logger.warn({
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 check failed; continuing open (fail-open)');
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