@noxsoft/anima 7.0.0 → 7.0.2

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 (431) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/dist/{accounts-COxGcLGB.js → accounts-BDDwy6Zf.js} +3 -3
  3. package/dist/{accounts-DIES085e.js → accounts-BNxfCMUW.js} +5 -5
  4. package/dist/{accounts-B_2nt5Cd.js → accounts-BzjBXZYp.js} +2 -2
  5. package/dist/{accounts-TUsfghIW.js → accounts-PpT_kved.js} +11 -11
  6. package/dist/{acp-cli-CWgqDQQH.js → acp-cli-B4F3SojX.js} +12 -12
  7. package/dist/{acp-cli-D0wfP8-l.js → acp-cli-CtTTCUan.js} +15 -15
  8. package/dist/{active-listener-BKtsWhsb.js → active-listener-C3NdbMQD.js} +4 -4
  9. package/dist/{active-listener-gGCoq55D.js → active-listener-D78ohfOc.js} +6 -6
  10. package/dist/{active-listener-D2r8IO7g.js → active-listener-Z1MbDSH8.js} +4 -4
  11. package/dist/{agent-paths-niQrLbGc.js → agent-paths-DRAU6-8h.js} +2 -2
  12. package/dist/{agent-scope-Dm8IL1Ks.js → agent-scope-B1FoYHfj.js} +3 -3
  13. package/dist/{agent-scope-CxBzAozu.js → agent-scope-CENGF2NR.js} +2 -2
  14. package/dist/{agent-scope-CXxC8FFX.js → agent-scope-DQ0N_hof.js} +2 -2
  15. package/dist/{agent-scope-ByIGrCTT.js → agent-scope-DpgOQfBp.js} +2 -2
  16. package/dist/{agent-DuW0onwk.js → agent-viQL5eva.js} +18 -18
  17. package/dist/{agent-BoAAHGEA.js → agent-xPFmA8jO.js} +14 -14
  18. package/dist/{agents-BUXkSDns.js → agents-Cf9QArEB.js} +20 -20
  19. package/dist/{agents.config-BR5JLtud.js → agents.config-DrViQjgD.js} +1 -1
  20. package/dist/{agents.config-Br4ULmK0.js → agents.config-sfN0WxRg.js} +1 -1
  21. package/dist/{anthropic-direct-runner-DizCei79.js → anthropic-direct-runner-BNiXWmel.js} +257 -21
  22. package/dist/{anthropic-direct-runner-OjcTAH6g.js → anthropic-direct-runner-BgFOZS8B.js} +257 -21
  23. package/dist/{audit-DDz7UOIx.js → audit-CupURkPI.js} +15 -15
  24. package/dist/{audit-B05W5ckN.js → audit-jddM3B16.js} +13 -13
  25. package/dist/{auth-Cp__MMeO.js → auth-Bw3NUKcg.js} +2 -2
  26. package/dist/{auth-DsC5pZ_0.js → auth-CuGlMw6p.js} +2 -2
  27. package/dist/{auth-choice-B1iGnjuE.js → auth-choice-D3Gi-WXq.js} +7 -7
  28. package/dist/{auth-choice-HF9x6xk2.js → auth-choice-DmkqIhe6.js} +7 -7
  29. package/dist/{auth-health-Cc8-vy8y.js → auth-health-CIbz_YRs.js} +1 -1
  30. package/dist/{auth-health-Dhr8p2SD.js → auth-health-CPmz2ZaM.js} +1 -1
  31. package/dist/{auth-profiles-DKu7ZUzl.js → auth-profiles-D0T20ZZX.js} +4 -4
  32. package/dist/{auth-profiles-C-LuhW6c.js → auth-profiles-XI2YBb-w.js} +3 -3
  33. package/dist/{auth-profiles-Brxz2ojJ.js → auth-profiles-fjGcjhZ4.js} +5 -5
  34. package/dist/{auth-profiles-DtWUl1-k.js → auth-profiles-jK6n3-Cc.js} +4 -4
  35. package/dist/{auth-store-Bd0GoqEL.js → auth-store-B4pR_KvR.js} +3 -3
  36. package/dist/{auth-store-BEfSfCbW.js → auth-store-ChpmVcla.js} +3 -3
  37. package/dist/{auth-store-Jvgz2_l1.js → auth-store-CqgKZB5l.js} +2 -2
  38. package/dist/{auth-store-BpYI9t_y.js → auth-store-po566wly.js} +3 -3
  39. package/dist/{banner-Dpa5d1If.js → banner-C_CFUih5.js} +2 -2
  40. package/dist/{bonjour-discovery-D3HFfTyG.js → bonjour-discovery-B8gxGE91.js} +2 -2
  41. package/dist/{bonjour-discovery-Co-b97Dz.js → bonjour-discovery-CZGDX9Ac.js} +2 -2
  42. package/dist/build-info.json +3 -3
  43. package/dist/bundled/boot-md/handler.js +23 -23
  44. package/dist/bundled/bootstrap-extra-files/handler.js +3 -3
  45. package/dist/bundled/session-memory/handler.js +22 -22
  46. package/dist/{call-CDPbPDAr.js → call-Bn9iKzhX.js} +4 -4
  47. package/dist/{call-B4lhqS6H.js → call-CPfxv8yg.js} +5 -5
  48. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  49. package/dist/{catalog-CsXv59Tq.js → catalog-BqTvQqiq.js} +2 -2
  50. package/dist/{catalog-B-TAbJ2o.js → catalog-yCaNFdQz.js} +2 -2
  51. package/dist/{channel-web-C5mzsaa3.js → channel-web-CfKNWfmp.js} +14 -14
  52. package/dist/{channels-status-issues-WkG3Tmxk.js → channels-status-issues-4XxYhQ8S.js} +4 -4
  53. package/dist/{channels-status-issues-CklLFAsD.js → channels-status-issues-BhtWH-p2.js} +4 -4
  54. package/dist/{chrome-CmxIwwsr.js → chrome-CN17GbZN.js} +2 -2
  55. package/dist/{chrome-BaU-H9m7.js → chrome-CVb9kRv_.js} +3 -3
  56. package/dist/{chrome-DLUBPBPz.js → chrome-D1Jm1Bdq.js} +9 -9
  57. package/dist/{chrome-B8EnYGj1.js → chrome-Nb2mFwWK.js} +2 -2
  58. package/dist/{chunk-B4Kx-ocg.js → chunk-B5s6o9xI.js} +3 -3
  59. package/dist/{chunk-DJXDX69U.js → chunk-CTS4rIMF.js} +3 -3
  60. package/dist/{chunk-CFSle8n5.js → chunk-DXTTGmeb.js} +1 -1
  61. package/dist/{chunk-Cy0Bj0F3.js → chunk-isZGJq82.js} +1 -1
  62. package/dist/{clack-prompter-0JW5kry0.js → clack-prompter-ChmRN__Q.js} +5 -5
  63. package/dist/{clack-prompter-fZSmnHda.js → clack-prompter-CpLhDhPM.js} +5 -5
  64. package/dist/cli/daemon-cli.js +1 -1
  65. package/dist/{cli-Cuq4bIg4.js → cli-BzTZ8Gnp.js} +46 -46
  66. package/dist/{cli-X9ikywQ3.js → cli-DLYU8BVw.js} +47 -47
  67. package/dist/{client-CfLiulzK.js → client-DNDzi0CF.js} +3 -3
  68. package/dist/{client-BWkoTfOH.js → client-DOTb2PN6.js} +2 -2
  69. package/dist/{command-format-kLw3YIIu.js → command-format-JgYolX96.js} +1 -1
  70. package/dist/{command-registry-9V4uqrBV.js → command-registry-BQiM7sYY.js} +14 -14
  71. package/dist/{commands-Mekaw9WG.js → commands-CymFClS1.js} +2 -2
  72. package/dist/{common-DT_obM-k.js → common-C36MniDL.js} +2 -2
  73. package/dist/{common-Bf_TG87Y.js → common-Coq2knq6.js} +2 -2
  74. package/dist/{common-BCW6hLGI.js → common-c4ZysSLq.js} +2 -2
  75. package/dist/{common-CqIa2poH.js → common-fIXNXke2.js} +2 -2
  76. package/dist/{completion-cli-DNWDwhab.js → completion-cli-BP8IIlzX.js} +4 -4
  77. package/dist/{completion-cli-BtvcR-U5.js → completion-cli-DW87AQgF.js} +3 -3
  78. package/dist/{config-ZYN8tezd.js → config-C7s14LLE.js} +24 -6
  79. package/dist/{config-BrVuTQ8R.js → config-DmsfUvB0.js} +24 -6
  80. package/dist/{config-CweTwOtr.js → config-LS-6Xgqo.js} +25 -7
  81. package/dist/{config-DaD4FsAn.js → config-MZ5clMl4.js} +25 -7
  82. package/dist/config-cli-BAj5hoD-.js +15 -0
  83. package/dist/config-cli-C6WtFt5S.js +11 -0
  84. package/dist/{config-guard-C4b2dksv.js → config-guard-BAVhoqm4.js} +5 -5
  85. package/dist/{config-guard-CWhoBtB3.js → config-guard-Em1kJe5K.js} +19 -19
  86. package/dist/{configure-B2Mfnwy_.js → configure-CHPG13jf.js} +24 -24
  87. package/dist/{configure-SnvMHZPD.js → configure-Dd6zJb-q.js} +72 -72
  88. package/dist/{configure-ZWxixuRA.js → configure-DeLC66Op.js} +25 -25
  89. package/dist/{configure-lkozxQed.js → configure-i6y1krRa.js} +75 -75
  90. package/dist/{context-mdxDsO1v.js → context-C22AMgsc.js} +10 -2
  91. package/dist/{control-service-5YtMvm7D.js → control-service-BGnqY7vv.js} +5 -5
  92. package/dist/{control-service-3CI4vt1h.js → control-service-DxuB_IUw.js} +4 -4
  93. package/dist/control-ui/assets/{index-D4wqLVMN.js → index-XnQwXlLu.js} +2 -2
  94. package/dist/control-ui/assets/{index-D4wqLVMN.js.map → index-XnQwXlLu.js.map} +1 -1
  95. package/dist/control-ui/assets/index-tpHK2r2n.js +73 -0
  96. package/dist/control-ui/assets/index-tpHK2r2n.js.map +1 -0
  97. package/dist/control-ui/assets/{observers-B7MfWiIZ.js → observers-DqhQeBfm.js} +2 -2
  98. package/dist/control-ui/assets/{observers-B7MfWiIZ.js.map → observers-DqhQeBfm.js.map} +1 -1
  99. package/dist/control-ui/index.html +1 -1
  100. package/dist/{cron-cli-D9XrF-Gx.js → cron-cli-3VJy8n6n.js} +14 -14
  101. package/dist/{cron-cli-Cht6Itx6.js → cron-cli-C_B6qK9W.js} +16 -16
  102. package/dist/{daemon-cli-CrdPhSxr.js → daemon-cli-B0IaAuYH.js} +15 -15
  103. package/dist/{daemon-cli-9zrnYRjh.js → daemon-cli-BsY7ZPql.js} +17 -17
  104. package/dist/daemon-cli.js +19 -1
  105. package/dist/{daemon-runtime-BrUj88ZO.js → daemon-runtime-BoIX72LK.js} +2 -2
  106. package/dist/{daemon-runtime-DCqwraWR.js → daemon-runtime-DSPDxySK.js} +3 -3
  107. package/dist/{deliver-d-CaN0uL.js → deliver-BJ0JgwhN.js} +11 -11
  108. package/dist/{deliver-BKzX3YoN.js → deliver-BknvuSJz.js} +6 -6
  109. package/dist/{deliver-C1L5nO0K.js → deliver-D86kSZGn.js} +7 -7
  110. package/dist/{deliver-B-dPbUIs.js → deliver-bdH5itRb.js} +11 -11
  111. package/dist/{delivery-queue-BKQk1j0k.js → delivery-queue-B6Y3ea25.js} +1 -1
  112. package/dist/{deps-BKLIBKjK.js → deps-oUYlT5Sq.js} +1 -1
  113. package/dist/{diagnostics-BhSwKIcN.js → diagnostics-CXoISuYV.js} +1 -1
  114. package/dist/{diagnostics-Cu9pZAFn.js → diagnostics-aUz0rVDl.js} +1 -1
  115. package/dist/{dispatcher-BQQugU-7.js → dispatcher-DpEzmU7s.js} +2 -2
  116. package/dist/{dispatcher-DzwzLQRk.js → dispatcher-DwlzWX2u.js} +2 -2
  117. package/dist/{dns-cli-V2bo6vSt.js → dns-cli-D8tgv6zY.js} +10 -10
  118. package/dist/{dns-cli-C8KIX4P3.js → dns-cli-DawPrcXI.js} +12 -12
  119. package/dist/{docs-cli-D2cVJxjP.js → docs-cli-Bsx7Yd3w.js} +6 -6
  120. package/dist/{docs-cli-Bt-YV3xs.js → docs-cli-DnrE1Tqw.js} +7 -7
  121. package/dist/{doctor-D7kKyUVk.js → doctor-BNJ_edyo.js} +36 -36
  122. package/dist/{doctor-DmCnZ-jF.js → doctor-DY5SmosG.js} +38 -38
  123. package/dist/{doctor-completion-B9SBdMoR.js → doctor-completion-B6lgyLsC.js} +2 -2
  124. package/dist/{doctor-completion-BBvW4_J9.js → doctor-completion-mLt2Eo9P.js} +3 -3
  125. package/dist/{doctor-config-flow-Dxy7RIm0.js → doctor-config-flow-CvJDaN8t.js} +8 -8
  126. package/dist/{doctor-config-flow-Bgl0Cc20.js → doctor-config-flow-D7SJ61Ak.js} +6 -6
  127. package/dist/{engine-zmn3SOYa.js → engine-BDwYEVKi.js} +1 -1
  128. package/dist/{engine-DpbYPop7.js → engine-BrJ7eiEh.js} +2 -2
  129. package/dist/entry.js +18 -2
  130. package/dist/{env-DlTia1B4.js → env-ByZjwIJR.js} +1 -1
  131. package/dist/{exec-DUzVF5_D.js → exec-4nfFrGP7.js} +1 -1
  132. package/dist/{exec-BylR5qWS.js → exec-ChPERQB-.js} +1 -1
  133. package/dist/{exec-BtBJICHE.js → exec-CigQCGkt.js} +1 -1
  134. package/dist/{exec-C6tXfeqA.js → exec-Dn2S9A7x.js} +1 -1
  135. package/dist/{exec-approvals-cli-DYZVBnqS.js → exec-approvals-cli-DmdfF4o_.js} +17 -17
  136. package/dist/{exec-approvals-cli-CN2WeH7y.js → exec-approvals-cli-c5UsPAU1.js} +19 -19
  137. package/dist/extensionAPI.js +21 -21
  138. package/dist/{gateway-cli-iumkTohn.js → gateway-cli-C4FwPHzu.js} +95 -95
  139. package/dist/{gateway-cli-CEM1vBuk.js → gateway-cli-CkFzsHGb.js} +93 -93
  140. package/dist/{gateway-rpc-Cj_h2sVM.js → gateway-rpc-CgeNTQUV.js} +3 -3
  141. package/dist/{gateway-rpc-CnXMGsxp.js → gateway-rpc-DpVHyNFu.js} +3 -3
  142. package/dist/{gmail-setup-utils-BIXtKTpT.js → gmail-setup-utils-JWsjxDBV.js} +4 -4
  143. package/dist/{gmail-setup-utils-DaJoXV_3.js → gmail-setup-utils-lTV5KDPF.js} +3 -3
  144. package/dist/{health-Cndq9b7A.js → health-C6rAUaME.js} +13 -13
  145. package/dist/{health-B5N6_UOf.js → health-DrokrOLQ.js} +13 -13
  146. package/dist/{health-format-BLnFZCH_.js → health-format-CTOsgiTE.js} +2 -2
  147. package/dist/{health-format-D-JJ5_S4.js → health-format-CzNDrJ8Z.js} +2 -2
  148. package/dist/{heartbeat-visibility-BQL13ZBH.js → heartbeat-visibility-DZOi_4uV.js} +1 -1
  149. package/dist/{heartbeat-visibility-CwcYugaR.js → heartbeat-visibility-XbT4yJ3S.js} +1 -1
  150. package/dist/{help-format-ZKxl6UCb.js → help-format-D4k6gkpr.js} +1 -1
  151. package/dist/{help-format-Dt-I_Mls.js → help-format-DgCbU9Ow.js} +1 -1
  152. package/dist/{hooks-cli-DSlPBQSY.js → hooks-cli-CBDm7Rjw.js} +50 -50
  153. package/dist/{hooks-cli-BZcvdIwE.js → hooks-cli-DVNU2Cp_.js} +53 -53
  154. package/dist/{hooks-status-DdweuSIj.js → hooks-status-BQ7M6bIq.js} +3 -3
  155. package/dist/{hooks-status-DqfJDvYl.js → hooks-status-BlfmlpC0.js} +3 -3
  156. package/dist/{image-ops-Ct3GueyT.js → image-ops-flDr58qn.js} +2 -2
  157. package/dist/{image-ops-BdrMmiG4.js → image-ops-vj06APeW.js} +2 -2
  158. package/dist/index.js +62 -62
  159. package/dist/{installs-a4Vz_J08.js → installs-BeTulUkL.js} +4 -4
  160. package/dist/{installs-Bi6UipiE.js → installs-D1t93Dvw.js} +4 -4
  161. package/dist/{lifecycle-core-BTICG85s.js → lifecycle-core-DmxyMl5D.js} +5 -5
  162. package/dist/{lifecycle-core-B8PI1NZJ.js → lifecycle-core-OpMLwiRd.js} +3 -3
  163. package/dist/{links-DcilUrqq.js → links-NDZcSjct.js} +1 -1
  164. package/dist/{links-BjjDMNIq.js → links-RNygAKHu.js} +1 -1
  165. package/dist/llm-slug-generator.js +22 -22
  166. package/dist/{loader-C87TLS4J.js → loader-5Xm3Jxa-.js} +1 -1
  167. package/dist/{logging-Chc1Sj6N.js → logging-B0-OIfnO.js} +1 -1
  168. package/dist/{logging-_rCcBkls.js → logging-CX0bU2da.js} +2 -2
  169. package/dist/{login-DKkQ3Czu.js → login-BegD27g3.js} +5 -5
  170. package/dist/{login-MzVPMRxL.js → login-CSaeXIuW.js} +7 -7
  171. package/dist/{login-BTOKtSQN.js → login-WPS724ji.js} +5 -5
  172. package/dist/{login-qr-BGbHImRb.js → login-qr-BVzUWR4o.js} +8 -8
  173. package/dist/{login-qr-CxRI-tE2.js → login-qr-C0eNn9SV.js} +12 -12
  174. package/dist/{login-qr-OUAGpDsU.js → login-qr-DLLfBALk.js} +9 -9
  175. package/dist/{login-qr-BjpDVBJE.js → login-qr-updBsqHf.js} +10 -10
  176. package/dist/{login-BEaBOSnw.js → login-zlt00-k4.js} +6 -6
  177. package/dist/{logs-cli-BiAJbjnq.js → logs-cli-BDQoLnjr.js} +15 -15
  178. package/dist/{logs-cli-Bc6IOyHA.js → logs-cli-BPljn0BF.js} +14 -14
  179. package/dist/{manager-BYu34CX3.js → manager-B-8JFgek.js} +27 -11
  180. package/dist/{manager-C6L_DH0O.js → manager-CE4cPrH2.js} +7 -7
  181. package/dist/{manager-D8VCuzru.js → manager-DPojhf1D.js} +9 -9
  182. package/dist/{manager-b_aZwo00.js → manager-kKsAUV03.js} +27 -11
  183. package/dist/{manifest-registry-W_OfCIRP.js → manifest-registry-BAebAG4I.js} +1 -1
  184. package/dist/{manifest-registry-qF960vMH.js → manifest-registry-Cwvk5hu8.js} +1 -1
  185. package/dist/{memory-cli-B0kKl-9T.js → memory-cli-BJmQIQSw.js} +11 -11
  186. package/dist/{memory-cli-DLtBA6r5.js → memory-cli-DMJqELwh.js} +10 -10
  187. package/dist/{message-channel-CMsexA3K.js → message-channel-CfwNj8mC.js} +1 -1
  188. package/dist/{message-channel-DIHHKJhk.js → message-channel-qmDI9YoO.js} +1 -1
  189. package/dist/{model-auth-KpsOXKDc.js → model-auth-BCdRf282.js} +19 -3
  190. package/dist/{model-auth-CHB3EySM.js → model-auth-Bs6eoQ1l.js} +19 -3
  191. package/dist/{model-selection-CLcoOT3e.js → model-selection-BhIAjo3P.js} +1 -1
  192. package/dist/{model-selection-DjsJGv1R.js → model-selection-CVcwboE_.js} +1 -1
  193. package/dist/{model-selection-CY6r_3wt.js → model-selection-CeZMza3d.js} +1 -1
  194. package/dist/{model-selection-DcO3qJOu.js → model-selection-f7lJs3PI.js} +1 -1
  195. package/dist/{models-CdNeYfSp.js → models-DxRmPLiS.js} +97 -50
  196. package/dist/{models-cli-D7eSsPuk.js → models-cli-B9KClY_f.js} +137 -82
  197. package/dist/{models-cli-fTZXo1zx.js → models-cli-BFZLSACV.js} +66 -58
  198. package/dist/{node-cli-DU_oREff.js → node-cli-BetF7Xgf.js} +26 -26
  199. package/dist/{node-cli-BmuVEJ1C.js → node-cli-CLeoh03V.js} +25 -25
  200. package/dist/{node-service-qZXF7T7A.js → node-service-FcwxyU8p.js} +1 -1
  201. package/dist/{node-service-cOoW5hLa.js → node-service-zrXojq7t.js} +1 -1
  202. package/dist/{note-CeLGcHqv.js → note-BTIeG9az.js} +1 -1
  203. package/dist/{note-iMYVGjpA.js → note-D_tpPSPO.js} +2 -2
  204. package/dist/{noxsoft-bootstrap-CrlkSFzd.js → noxsoft-bootstrap-CPS7t3Sk.js} +3 -3
  205. package/dist/{noxsoft-bootstrap-C4dSx7K_.js → noxsoft-bootstrap-CqygYIJa.js} +2 -2
  206. package/dist/{npm-registry-spec-jf7Mowdn.js → npm-registry-spec-BeX9-fmS.js} +1 -1
  207. package/dist/{npm-registry-spec-Br4B4I_3.js → npm-registry-spec-DB6xqMfu.js} +1 -1
  208. package/dist/{onboard-C5K37NvY.js → onboard-BZORsTGE.js} +18 -18
  209. package/dist/{onboard-D-6QCnTi.js → onboard-Doq7UgRV.js} +19 -19
  210. package/dist/{onboard-channels-BsCq32Hn.js → onboard-channels-BREQ8Tyw.js} +9 -9
  211. package/dist/{onboard-channels-bx6oelzj.js → onboard-channels-CpM1Nwqf.js} +8 -8
  212. package/dist/{onboard-helpers-CJ3HzoUO.js → onboard-helpers-rHLFiSIc.js} +7 -7
  213. package/dist/{onboard-helpers-CFudIoX4.js → onboard-helpers-uf70JxTj.js} +9 -9
  214. package/dist/{onboarding-BeuMAyic.js → onboarding-BGXbXgds.js} +21 -21
  215. package/dist/{onboarding-CX1vIkcB.js → onboarding-DQplq13s.js} +22 -22
  216. package/dist/{orchestrator-C1nWKIJS.js → orchestrator-B2rNfH4K.js} +5 -4
  217. package/dist/{orchestrator-C2ypFiPL.js → orchestrator-CERtu86A.js} +6 -5
  218. package/dist/{outbound-Bmft-5um.js → outbound-Bii3QonX.js} +4 -4
  219. package/dist/{outbound-C577aWZp.js → outbound-BpcyR1eA.js} +4 -4
  220. package/dist/{outbound-fPqdCDR4.js → outbound-C1WShhf8.js} +4 -4
  221. package/dist/{outbound-DW2eod1S.js → outbound-DKY6oeyQ.js} +4 -4
  222. package/dist/{outbound-send-deps-Y9AxHeLG.js → outbound-send-deps-CtiCh8EY.js} +1 -1
  223. package/dist/{parse-timeout-D4UO8pY_.js → parse-timeout-Bp5yQ1yW.js} +3 -3
  224. package/dist/{parse-timeout-C4WLf3Qy.js → parse-timeout-Cn7M8c5R.js} +3 -3
  225. package/dist/{path-env-DLQPf9qj.js → path-env-BAjR_Xf_.js} +1 -1
  226. package/dist/{paths-DMk3Q7yD.js → paths-BM1wivAU.js} +1 -1
  227. package/dist/{paths-CAQJvbeZ.js → paths-BqA7F6bT.js} +2 -2
  228. package/dist/{paths-Q6h5HODL.js → paths-DAbvPUdJ.js} +1 -1
  229. package/dist/{pi-auth-json-B_lKNFK6.js → pi-auth-json-BhkzZgQz.js} +5 -5
  230. package/dist/{pi-auth-json-BmdBnmlZ.js → pi-auth-json-CM3QDr9_.js} +6 -6
  231. package/dist/{pi-auth-json-WTvcP2gz.js → pi-auth-json-Dry5jXVt.js} +6 -6
  232. package/dist/{pi-auth-json-DkYqdjrV.js → pi-auth-json-qHO_AF3h.js} +6 -6
  233. package/dist/{pi-embedded-D15iww51.js → pi-embedded-CrzqUkHv.js} +548 -67
  234. package/dist/{pi-embedded-DR8Pfd05.js → pi-embedded-Dn3Ip_VN.js} +552 -71
  235. package/dist/{pi-embedded-helpers-BZ9GspxK.js → pi-embedded-helpers-BPtBCnl-.js} +1 -1
  236. package/dist/{pi-embedded-helpers-D2SLlgS4.js → pi-embedded-helpers-BSFtS9Fl.js} +1 -1
  237. package/dist/{pi-tools.policy-WdTAfqbV.js → pi-tools.policy-DuWNVoem.js} +6 -6
  238. package/dist/{pi-tools.policy-D2FusuQa.js → pi-tools.policy-DyckzpRL.js} +7 -7
  239. package/dist/{plugin-auto-enable-DhuD30Je.js → plugin-auto-enable-Btd2iEwF.js} +5 -5
  240. package/dist/{plugin-auto-enable-CtYcdTju.js → plugin-auto-enable-DvYJhgJ2.js} +5 -5
  241. package/dist/{plugin-registry-Do2D1nDk.js → plugin-registry-BOuDey4w.js} +4 -4
  242. package/dist/{plugin-registry-ME2FQAi-.js → plugin-registry-ChWHnegS.js} +4 -4
  243. package/dist/plugin-sdk/agents/local-model-installer.d.ts +11 -0
  244. package/dist/plugin-sdk/agents/openai-direct-runner.d.ts +2 -1
  245. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +40 -0
  246. package/dist/plugin-sdk/config/types.models.d.ts +1 -1
  247. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +13 -0
  248. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +13 -0
  249. package/dist/plugin-sdk/config/zod-schema.core.d.ts +6 -6
  250. package/dist/plugin-sdk/config/zod-schema.d.ts +15 -2
  251. package/dist/plugin-sdk/index.js +19 -1
  252. package/dist/plugin-sdk/infra/architecture-awareness.d.ts +47 -0
  253. package/dist/{plugins-DYcg0qBW.js → plugins-BqPGs8w-.js} +1 -1
  254. package/dist/{plugins-BOMS6J5A.js → plugins-C8FLxXbd.js} +1 -1
  255. package/dist/{plugins-cli-CoVt2ewg.js → plugins-cli-CbOP5ml6.js} +51 -51
  256. package/dist/{plugins-cli-CVFzwdmI.js → plugins-cli-dH6LKRQM.js} +53 -53
  257. package/dist/{polls-DFISjV7H.js → polls-aumqIVob.js} +5 -5
  258. package/dist/{ports-BGLuwt2Z.js → ports--opAW6yN.js} +2 -2
  259. package/dist/{ports-q535r1PZ.js → ports-B20JTuiL.js} +2 -2
  260. package/dist/{ports-B_f42zcA.js → ports-C4ACB4MP.js} +2 -2
  261. package/dist/{ports-DaVrZDUq.js → ports-D6bjtvhF.js} +2 -2
  262. package/dist/{program-context-DP3qjW7A.js → program-context-7yQclqBT.js} +35 -35
  263. package/dist/{program-8rF4C_wd.js → program-pWHcYdeO.js} +58 -58
  264. package/dist/{progress-glCgu57m.js → progress-BveMw0-_.js} +1 -1
  265. package/dist/{progress-CVLvQV_t.js → progress-qMmjCvh9.js} +1 -1
  266. package/dist/{prompt-style-BI53UVgE.js → prompt-style-DWuEFbBO.js} +1 -1
  267. package/dist/{prompt-style-D6SRiiTV.js → prompt-style-zgo1vAG1.js} +1 -1
  268. package/dist/{prompts-BmgT_kkv.js → prompts-C4v0DSTU.js} +6 -6
  269. package/dist/{prompts-Bq4QGFQM.js → prompts-D6Xc1Ddb.js} +4 -4
  270. package/dist/{pw-ai-DxNrJcCA.js → pw-ai-2XnGTARu.js} +3 -3
  271. package/dist/{pw-ai-CB-zeR7h.js → pw-ai-BUnz28XN.js} +5 -5
  272. package/dist/{pw-ai-C_1-7IgH.js → pw-ai-CRnDr120.js} +3 -3
  273. package/dist/{pw-ai-B4u5FDqO.js → pw-ai-Dq14LFsx.js} +6 -6
  274. package/dist/{qmd-manager-C_XBZ_bT.js → qmd-manager-6nqaD-q9.js} +5 -5
  275. package/dist/{qmd-manager-CO795NK4.js → qmd-manager-B6-V0aC1.js} +6 -6
  276. package/dist/{qmd-manager-CpNYgSrx.js → qmd-manager-BNL9Pl2G.js} +6 -6
  277. package/dist/{qmd-manager-Q0OSDQ-e.js → qmd-manager-CpynR-al.js} +5 -5
  278. package/dist/{register.agent-BIrXCVtQ.js → register.agent-BMxuTqFN.js} +68 -68
  279. package/dist/{register.agent-DnkOx0U8.js → register.agent-BO6_QTx6.js} +65 -65
  280. package/dist/{register.anima-B36rTHUt.js → register.anima-5SAY6OxG.js} +6 -6
  281. package/dist/{register.anima-DXT9bM9A.js → register.anima-CLGhoqmw.js} +8 -8
  282. package/dist/register.configure-Bz9pap1L.js +106 -0
  283. package/dist/register.configure-dMfZ1zcY.js +107 -0
  284. package/dist/register.maintenance-CL2eIgmC.js +102 -0
  285. package/dist/register.maintenance-k1dBbjUg.js +103 -0
  286. package/dist/{register.message-CD7xV-jz.js → register.message-Cqlz-6uM.js} +52 -52
  287. package/dist/{register.message-Brtushvp.js → register.message-Cz34rs9W.js} +50 -50
  288. package/dist/{register.onboard-23Mra3LN.js → register.onboard-Cmh46n62.js} +70 -70
  289. package/dist/{register.onboard-6CbODzQ6.js → register.onboard-_4FOFCA2.js} +67 -67
  290. package/dist/{register.setup-CqQw13Ky.js → register.setup-CHgH1mdn.js} +70 -70
  291. package/dist/{register.setup-DlVH7FKe.js → register.setup-CKY65php.js} +67 -67
  292. package/dist/{register.status-health-sessions-CduFjFDB.js → register.status-health-sessions-CNX6wp0V.js} +60 -60
  293. package/dist/{register.status-health-sessions-CxtgPKu9.js → register.status-health-sessions-DNvtWNtb.js} +63 -63
  294. package/dist/{register.subclis-CtANqD5P.js → register.subclis-Br8nY-dd.js} +23 -23
  295. package/dist/{reply-93fMzde1.js → reply-DqXPXQ20.js} +322 -77
  296. package/dist/{reply-prefix-B7Fb3fO8.js → reply-prefix-CZy4g8SY.js} +1 -1
  297. package/dist/{reply-prefix-BzdhJDqP.js → reply-prefix-DuANpRN_.js} +1 -1
  298. package/dist/{routes-CWCAc8uJ.js → routes-CAjh83-X.js} +6 -6
  299. package/dist/{routes-FT0Us8Md.js → routes-DTjggbOR.js} +6 -6
  300. package/dist/{run-CF3kHOGH.js → run-0F-ZU2kW.js} +2251 -217
  301. package/dist/{run-Cq_iTGK_.js → run-Bu-fwhic.js} +2256 -222
  302. package/dist/{run-main-BiIRcc6s.js → run-main-BcC_mt4v.js} +72 -72
  303. package/dist/{runtime-guard-D14Z_QY6.js → runtime-guard-Ccc4Qj4K.js} +1 -1
  304. package/dist/{runtime-guard-DdP10b7Q.js → runtime-guard-E3CIN3Xo.js} +1 -1
  305. package/dist/{sandbox-D-N7M7lp.js → sandbox-DSHSoUHO.js} +6 -6
  306. package/dist/{sandbox-cli-CQKz2I1X.js → sandbox-cli-BiO-r7eU.js} +22 -22
  307. package/dist/{sandbox-cli-DHNFlTo-.js → sandbox-cli-D6ikivGS.js} +22 -22
  308. package/dist/{sandbox-pBHlfFdB.js → sandbox-mSWYRXFm.js} +6 -6
  309. package/dist/{security-cli-Bdi7MuP6.js → security-cli-Bqq5Klnm.js} +25 -25
  310. package/dist/{security-cli-C3aI09uy.js → security-cli-CcBxjHGL.js} +25 -25
  311. package/dist/{semantic-CQApJNO_.js → semantic-CPfLgc8S.js} +1 -1
  312. package/dist/{semantic-9rgWUrz3.js → semantic-DLW1Sflk.js} +1 -1
  313. package/dist/{semantic-C1UN3bb9.js → semantic-jL8x-DTZ.js} +1 -1
  314. package/dist/{server-context-Yx4pgBqJ.js → server-context-DTlBzMyD.js} +7 -7
  315. package/dist/{server-context-Clykq0XU.js → server-context-EPPcxp2p.js} +8 -8
  316. package/dist/{server-node-events-B3Serk9L.js → server-node-events-BGWQiInn.js} +52 -52
  317. package/dist/{server-node-events-DgvKcH5q.js → server-node-events-BuxYvQ0t.js} +50 -50
  318. package/dist/{service-4VfZwSv1.js → service-BoUEkrUm.js} +1 -1
  319. package/dist/{service-audit-KzOtcw_V.js → service-audit-B_BC6-F8.js} +3 -3
  320. package/dist/{service-audit-Bwpoc2LD.js → service-audit-CjH8ed-j.js} +3 -3
  321. package/dist/{service-Dd1DfPia.js → service-ho_k2vjr.js} +1 -1
  322. package/dist/{session-jljC5QVG.js → session-B4wJoEqn.js} +4 -4
  323. package/dist/{session-CSmfU0D3.js → session-BF7WjlT0.js} +1 -1
  324. package/dist/{session-BMDpwIJu.js → session-BnOV0y0e.js} +6 -6
  325. package/dist/{session-C_d9uvLf.js → session-CSgjW31i.js} +5 -5
  326. package/dist/{session-BiA6jrcs.js → session-DO_miKel.js} +1 -1
  327. package/dist/{session-5YO_H-Ra.js → session-DcRzV4l4.js} +1 -1
  328. package/dist/{session-BzrnfWQ2.js → session-DlMsi6dM.js} +5 -5
  329. package/dist/{session-cost-usage-DnxtnK1E.js → session-cost-usage-BNvno_kS.js} +1 -1
  330. package/dist/{sessions-C_3wTmSA.js → sessions-B2NwIaNC.js} +6 -6
  331. package/dist/{sessions-BOzeFzuL.js → sessions-DBQx8E1H.js} +5 -5
  332. package/dist/{sessions-BmE5Z_1i.js → sessions-DxAfgPEp.js} +6 -6
  333. package/dist/{settings-cli-CZdlEmNi.js → settings-cli-CHwTEE6P.js} +72 -72
  334. package/dist/{settings-cli-DsDqNpW_.js → settings-cli-DsUKlq8R.js} +74 -74
  335. package/dist/{setup-token-Lee4gM5w.js → setup-token-BX6QI7ce.js} +26 -26
  336. package/dist/{setup-token-C8Gg1P6T.js → setup-token-CU5mami5.js} +26 -26
  337. package/dist/{shared-C-rqLtIT.js → shared-BFzq0XE1.js} +2 -2
  338. package/dist/{shared-7KwLAyAq.js → shared-D3ZAXqdo.js} +3 -3
  339. package/dist/{shell-env-CMI9f7-7.js → shell-env-BR7Sbtw1.js} +1 -1
  340. package/dist/{shell-env-HkVWMh--.js → shell-env-BZ2Wha1e.js} +1 -1
  341. package/dist/{shell-env-iPnSIi-t.js → shell-env-Bgk3WFTi.js} +1 -1
  342. package/dist/{skills-DtoVe1dS.js → skills-BT0Lx09M.js} +2 -2
  343. package/dist/{skills-4v6-kw0C.js → skills-DjVFhlQY.js} +3 -3
  344. package/dist/{skills-cli-BoasNTpZ.js → skills-cli-BX5pL-D4.js} +15 -15
  345. package/dist/{skills-cli-TeAq3fRG.js → skills-cli-wKTnuQos.js} +14 -14
  346. package/dist/{skills-install-D6_qpRjW.js → skills-install-CVWWsOf2.js} +4 -4
  347. package/dist/{skills-install-Qw2oU8L8.js → skills-install-Ye1kjpCv.js} +4 -4
  348. package/dist/{skills-status-DuLjkX2E.js → skills-status-BUKnQ3ek.js} +2 -2
  349. package/dist/{skills-status-CvH7AUoY.js → skills-status-BmZufjT1.js} +3 -3
  350. package/dist/{soul-Bt8UNmTq.js → soul-C0oc6fbP.js} +1 -1
  351. package/dist/{soul-D9k5zulC.js → soul-DEsrpMAk.js} +1 -1
  352. package/dist/{soul-BiIdv3Wp.js → soul-Doq8As4R.js} +1 -1
  353. package/dist/{soul-DQSYs-4l.js → soul-DyLtQVJh.js} +1 -1
  354. package/dist/{sqlite-BMMt7osH.js → sqlite-CFCo1Ghe.js} +2 -2
  355. package/dist/{sqlite-Cm6OqTQB.js → sqlite-DVkTX4wZ.js} +1 -1
  356. package/dist/{sqlite-CZ1vD4VS.js → sqlite-DrhFRoal.js} +2 -2
  357. package/dist/{sqlite-CpAJt-JS.js → sqlite-M5Ot9X4U.js} +1 -1
  358. package/dist/start-C-gTbKUz.js +158 -0
  359. package/dist/start-DZKfWnpD.js +157 -0
  360. package/dist/{status-COc4xMti.js → status-BN6HYR8t.js} +4 -4
  361. package/dist/{status-C_NBOv_V.js → status-BimVB8cj.js} +4 -4
  362. package/dist/{status-uakoP719.js → status-CSkpd-tb.js} +27 -27
  363. package/dist/{status-BO5BIf81.js → status-D1zupVBm.js} +24 -24
  364. package/dist/{status.update-B6Tdpk07.js → status.update-HKMS5T9H.js} +2 -2
  365. package/dist/{status.update-E9dSFk_b.js → status.update-oapjZPr_.js} +3 -3
  366. package/dist/{subagent-registry-fLI7QDKe.js → subagent-registry-D87n8mHd.js} +318 -81
  367. package/dist/{subsystem-D1AJZPgG.js → subsystem-CkjVkxc4.js} +17 -1
  368. package/dist/{subsystem-D-Xta-sj.js → subsystem-CyrIA90F.js} +17 -1
  369. package/dist/{subsystem-BAADN1B8.js → subsystem-DLVQ9bjX.js} +17 -1
  370. package/dist/{system-cli-DoLzi2Sn.js → system-cli-BRPiBm4G.js} +13 -13
  371. package/dist/{system-cli-CP7JrhR0.js → system-cli-DaNHLGRC.js} +15 -15
  372. package/dist/{systemd-6iLWJxQQ.js → systemd-CS58NHpx.js} +2 -2
  373. package/dist/{systemd-hints-C5Kfh4GW.js → systemd-hints-7HkQ202-.js} +1 -1
  374. package/dist/{systemd-linger-CxGmIy_5.js → systemd-linger-BMNvTAmy.js} +2 -2
  375. package/dist/{systemd-linger-BVwGXVS0.js → systemd-linger-C9PGBtXs.js} +2 -2
  376. package/dist/{systemd-Bx76sJ3M.js → systemd-zYTszfyU.js} +2 -2
  377. package/dist/{table-Blmz7glr.js → table-Bea_v9UU.js} +2 -2
  378. package/dist/{table-Bt7rSYC6.js → table-ohGAZZLQ.js} +1 -1
  379. package/dist/{tokens-CmlI2hSz.js → tokens-BelyD23F.js} +1 -1
  380. package/dist/{tokens-SP2Q7i59.js → tokens-nliOJNMv.js} +1 -1
  381. package/dist/{tool-images-C6cKHTbj.js → tool-images-BEiRPCYM.js} +2 -2
  382. package/dist/{tool-images-2qproko3.js → tool-images-BH8q2ZMq.js} +2 -2
  383. package/dist/{tool-images-D1HuaGdS.js → tool-images-DJrhuxOM.js} +1 -1
  384. package/dist/{tool-images-CgDT0Xzv.js → tool-images-dAVG0qoz.js} +2 -2
  385. package/dist/{tui-r4qpJhNk.js → tui-DnzqtbW3.js} +9 -9
  386. package/dist/{tui-C2eLfbhA.js → tui-FJlF9b--.js} +8 -8
  387. package/dist/{tui-cli-cLSYBQu9.js → tui-cli-BtLvABYH.js} +27 -27
  388. package/dist/{tui-cli-BgcbCtgc.js → tui-cli-Cm3G2SAN.js} +26 -26
  389. package/dist/{update-DA91za97.js → update-Cpvsdq3a.js} +3 -3
  390. package/dist/{update-CqKpX3cX.js → update-DrQkwR-M.js} +3 -3
  391. package/dist/{update-cli-DEe62XGU.js → update-cli-DpKplMO0.js} +79 -79
  392. package/dist/{update-cli-D3Ujz_cW.js → update-cli-DueHX0OM.js} +83 -83
  393. package/dist/{update-runner-DZfnquWO.js → update-runner-C7CjKcMp.js} +5 -5
  394. package/dist/{update-runner-DUl-g4mB.js → update-runner-DtqDU0xF.js} +5 -5
  395. package/dist/{utils-D1VGbO3C.js → utils-BNuEYQIN.js} +1 -1
  396. package/dist/{utils-CLYlhJuc.js → utils-CkCznJhR.js} +1 -1
  397. package/dist/{web-Di8j762D.js → web-Br9HCEvC.js} +54 -54
  398. package/dist/{web-DzSlI8A6.js → web-BxkEMATs.js} +25 -25
  399. package/dist/{web-C-cK9OCd.js → web-CPHrMWsv.js} +24 -24
  400. package/dist/web-HXy7rlIW.js +65 -0
  401. package/dist/{webhooks-cli-k3QMf7Rs.js → webhooks-cli-CdoaCUQ5.js} +11 -11
  402. package/dist/{webhooks-cli-vlEfXEKm.js → webhooks-cli-D65dKr5L.js} +12 -12
  403. package/dist/{whatsapp-actions-Hr-W8vjY.js → whatsapp-actions--CtxOhlj.js} +12 -12
  404. package/dist/{whatsapp-actions-C0tlEdLy.js → whatsapp-actions--eONuB4M.js} +14 -14
  405. package/dist/{whatsapp-actions-BJn-z76S.js → whatsapp-actions-BM0a0V4y.js} +17 -17
  406. package/dist/{whatsapp-actions-6fPRKwPV.js → whatsapp-actions-Bhz79Fgg.js} +11 -11
  407. package/dist/{widearea-dns-CtU9Fx7K.js → widearea-dns-D2VSHQ7y.js} +1 -1
  408. package/dist/{widearea-dns-CHAT20aR.js → widearea-dns-DlJrNJOg.js} +1 -1
  409. package/dist/{workspace-BFIZCnGo.js → workspace-D6JhsXVL.js} +1 -1
  410. package/dist/{ws-log-CUobU2tD.js → ws-log-Cvz4xRCD.js} +1 -1
  411. package/dist/{ws-log-CG6cvCZW.js → ws-log-DwsFDY7m.js} +1 -1
  412. package/package.json +8 -2
  413. package/scripts/install-local-qwen3-coder.sh +7 -0
  414. package/templates/HEART.md +32 -10
  415. package/templates/SOUL.md +37 -8
  416. package/templates/profiles/architect.profile.json5 +36 -0
  417. package/templates/profiles/builder.profile.json5 +36 -0
  418. package/templates/profiles/coordinator.profile.json5 +36 -0
  419. package/templates/profiles/guardian.profile.json5 +36 -0
  420. package/templates/profiles/researcher.profile.json5 +36 -0
  421. package/dist/config-cli-DfHE3KG-.js +0 -15
  422. package/dist/config-cli-fleq7-gq.js +0 -11
  423. package/dist/control-ui/assets/index-DIEQjjCN.js +0 -73
  424. package/dist/control-ui/assets/index-DIEQjjCN.js.map +0 -1
  425. package/dist/register.configure-CuzJxZmk.js +0 -107
  426. package/dist/register.configure-DCpvHX3m.js +0 -106
  427. package/dist/register.maintenance-CcxBFfv5.js +0 -103
  428. package/dist/register.maintenance-Dla0H12S.js +0 -102
  429. package/dist/start-CK6urvnN.js +0 -158
  430. package/dist/start-Cs1aPMq2.js +0 -157
  431. package/dist/web-Dybw4K7C.js +0 -65
@@ -1,25 +1,25 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
- import { B as resolveRequiredHomeDir, C as colorize, E as getChildLogger, F as resolveOAuthDir, L as resolveStateDir, M as resolveConfigPath, P as resolveGatewayPort, T as theme, _ as logVerbose, a as unregisterActiveProgressLine, b as shouldLogVerbose, f as getActivePluginRegistry, i as registerActiveProgressLine, k as normalizeLogLevel, l as normalizeAnyChannelId, m as setActivePluginRegistry, n as defaultRuntime, r as clearActiveProgressLine, s as CHAT_CHANNEL_ORDER, t as createSubsystemLogger, u as normalizeChannelId, w as isRich, y as setVerbose } from "./subsystem-D-Xta-sj.js";
3
- import { A as classifySessionKeyShape, B as parseAgentSessionKey, D as buildAgentMainSessionKey, E as DEFAULT_MAIN_KEY, F as resolveThreadSessionKeys, I as sanitizeAgentId, L as getSubagentDepth, M as normalizeAgentId, N as normalizeMainKey, O as buildAgentPeerSessionKey, P as resolveAgentIdFromSessionKey, R as isAcpSessionKey, S as resolveAnimaPackageRoot, T as DEFAULT_AGENT_ID, V as resolveThreadParentSessionKey, b as filterBootstrapFilesForSession, c as resolveDefaultAgentId, f as DEFAULT_AGENT_WORKSPACE_DIR, i as resolveAgentModelFallbacksOverride, j as normalizeAccountId$1, l as resolveSessionAgentId, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentIds, w as DEFAULT_ACCOUNT_ID, x as loadWorkspaceBootstrapFiles, y as ensureAgentWorkspace, z as isSubagentSessionKey } from "./agent-scope-ByIGrCTT.js";
4
- import { D as shortenHomePath, E as shortenHomeInString, O as sleep, T as safeParseJson, _ as isRecord, a as logDebug, c as logWarn, d as clampInt, g as isPlainObject, h as formatTerminalLink, i as spawnWithFallback, j as truncateUtf16Safe, k as sliceUtf16Safe, l as CONFIG_DIR, m as escapeRegExp, n as runExec, o as logError, p as ensureDir$3, r as formatSpawnError, s as logInfo, t as runCommandWithTimeout, w as resolveUserPath } from "./exec-C6tXfeqA.js";
5
- import { a as modelKey, d as resolveModelRefFromString, f as resolveThinkingDefault, h as DEFAULT_PROVIDER, i as isCliProvider, l as resolveConfiguredModelRef, m as DEFAULT_MODEL, n as buildConfiguredAllowlistKeys, o as normalizeModelRef, p as DEFAULT_CONTEXT_TOKENS, r as buildModelAliasIndex, s as normalizeProviderId, t as buildAllowedModelSet, u as resolveDefaultModelForAgent } from "./model-selection-CLcoOT3e.js";
6
- import { $ as resolveChannelResetConfig, A as isContextOverflowError, At as resolveSandboxConfigForAgent, B as readSessionUpdatedAt, Bt as matchesAnyGlobPattern, C as normalizeThinkLevel, Ct as buildWorkspaceSkillSnapshot, D as supportsXHighThinking, Dt as resolveSandboxedMediaSource, E as resolveResponseUsageMode, Et as assertSandboxPath, F as ensureSandboxWorkspaceForSession, Ft as expandToolGroups, G as updateSessionStoreEntry, Gt as SILENT_REPLY_TOKEN, Ht as resolveBootstrapMaxChars, I as resolveSandboxRuntimeStatus, It as normalizeToolName, J as mergeDeliveryContext, K as deliveryContextFromSession, Kt as isSilentReplyText, L as extractDeliveryInfo, Lt as resolveToolProfilePolicy, M as isLikelyContextOverflowError, Mt as buildPluginToolGroups, N as isTransientHttpError, Nt as collectExplicitAllowlist, O as classifyFailoverReason, Ot as ensureBrowserControlAuth, P as sanitizeUserFacingText, Pt as expandPolicyWithPluginGroups, Q as evaluateSessionFreshness, R as appendAssistantMessageToSessionTranscript, Rt as stripPluginOnlyAllowlist, S as normalizeReasoningLevel, St as buildWorkspaceSkillCommandSpecs, T as normalizeVerboseLevel, Tt as assertMediaNotDataUrl, U as updateLastRoute, Ut as resolveBootstrapTotalMaxChars, V as recordSessionMetaFromInbound, Vt as buildBootstrapContextFiles, W as updateSessionStore, Wt as HEARTBEAT_TOKEN, X as normalizeSessionDeliveryFields, Y as normalizeDeliveryContext, Z as resolveSessionKey$1, _ as initializeGlobalHookRunner, _t as getMediaDir, a as applyReplyThreading, at as canonicalizeMainSessionAlias, b as listThinkingLevels, bt as resolvePathsWithinRoot, c as shouldSuppressMessagingToolReplies, ct as getChannelDock, d as buildTargetResolverSignature, dt as normalizeChatType, et as resolveSessionResetPolicy, f as normalizeChannelTargetInput, ft as resolveGroupSessionKey, g as getGlobalHookRunner, gt as resolveProfile, h as parseReplyDirectives, ht as resolveBrowserConfig, i as applyReplyTagsToPayload, it as resolveFreshSessionTotalTokens, j as isFailoverErrorMessage, jt as applyOwnerOnlyToolPolicy, k as isCompactionFailureError, kt as resolveBrowserControlAuth, l as createReplyToModeFilterForChannel, lt as listChannelDocks, m as throwIfAborted, mt as registerBrowserRoutes, nt as resolveThreadFlag, o as filterMessagingToolDuplicates, ot as resolveMainSessionKey, p as normalizeTargetForProvider, pt as createBrowserRouteContext, q as deliveryContextKey, r as normalizeReplyPayloadsForDelivery, rt as DEFAULT_RESET_TRIGGERS, s as isRenderablePayload, st as deriveSessionMetaPatch, t as deliverOutboundPayloads, tt as resolveSessionResetType, u as resolveReplyToMode, ut as resolveConversationLabel, v as formatThinkingLevels, vt as saveMediaBuffer, w as normalizeUsageDisplay, wt as resolvePluginSkillDirs, x as normalizeElevatedLevel, xt as getBridgeAuthForPort, y as formatXHighModelHint, yt as DEFAULT_UPLOAD_DIR, z as loadSessionStore, zt as compileGlobPatterns } from "./deliver-B-dPbUIs.js";
7
- import { C as parseConfigPath, E as VERSION, S as getConfigValueAtPath, T as unsetConfigValueAtPath, _ as resolveMemorySlotDecision, a as writeConfigFile, b as setConfigOverride, c as parseDurationMs, d as discoverAnimaPlugins, g as resolveEnableState, h as normalizePluginsConfig, i as resolveConfigSnapshotHash, l as validateJsonSchemaValue, m as applyTestPluginDefaults, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as loadPluginManifestRegistry, v as getConfigOverrides, w as setConfigValueAtPath, x as unsetConfigOverride, y as resetConfigOverrides } from "./config-ZYN8tezd.js";
8
- import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-CMI9f7-7.js";
9
- import { S as pickPrimaryTailnetIPv4, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, x as pickPrimaryLanIPv4, y as rawDataToString } from "./chrome-B8EnYGj1.js";
2
+ import { A as normalizeLogLevel, D as getChildLogger, E as theme, F as resolveGatewayPort, I as resolveOAuthDir, N as resolveConfigPath, R as resolveStateDir, T as isRich, V as resolveRequiredHomeDir, a as registerActiveProgressLine, b as setVerbose, c as CHAT_CHANNEL_ORDER, d as normalizeChannelId, h as setActivePluginRegistry, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, p as getActivePluginRegistry, r as defaultRuntime, t as createSubsystemLogger, u as normalizeAnyChannelId, v as logVerbose, w as colorize, x as shouldLogVerbose } from "./subsystem-CyrIA90F.js";
3
+ import { A as classifySessionKeyShape, B as parseAgentSessionKey, D as buildAgentMainSessionKey, E as DEFAULT_MAIN_KEY, F as resolveThreadSessionKeys, I as sanitizeAgentId, L as getSubagentDepth, M as normalizeAgentId, N as normalizeMainKey, O as buildAgentPeerSessionKey, P as resolveAgentIdFromSessionKey, R as isAcpSessionKey, S as resolveAnimaPackageRoot, T as DEFAULT_AGENT_ID, V as resolveThreadParentSessionKey, b as filterBootstrapFilesForSession, c as resolveDefaultAgentId, f as DEFAULT_AGENT_WORKSPACE_DIR, i as resolveAgentModelFallbacksOverride, j as normalizeAccountId$1, l as resolveSessionAgentId, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentIds, w as DEFAULT_ACCOUNT_ID, x as loadWorkspaceBootstrapFiles, y as ensureAgentWorkspace, z as isSubagentSessionKey } from "./agent-scope-DpgOQfBp.js";
4
+ import { D as shortenHomePath, E as shortenHomeInString, O as sleep, T as safeParseJson, _ as isRecord, a as logDebug, c as logWarn, d as clampInt, g as isPlainObject, h as formatTerminalLink, i as spawnWithFallback, j as truncateUtf16Safe, k as sliceUtf16Safe, l as CONFIG_DIR, m as escapeRegExp, n as runExec, o as logError, p as ensureDir$3, r as formatSpawnError, s as logInfo, t as runCommandWithTimeout, w as resolveUserPath } from "./exec-Dn2S9A7x.js";
5
+ import { a as modelKey, d as resolveModelRefFromString, f as resolveThinkingDefault, h as DEFAULT_PROVIDER, i as isCliProvider, l as resolveConfiguredModelRef, m as DEFAULT_MODEL, n as buildConfiguredAllowlistKeys, o as normalizeModelRef, p as DEFAULT_CONTEXT_TOKENS, r as buildModelAliasIndex, s as normalizeProviderId, t as buildAllowedModelSet, u as resolveDefaultModelForAgent } from "./model-selection-BhIAjo3P.js";
6
+ import { $ as resolveChannelResetConfig, A as isContextOverflowError, At as resolveSandboxConfigForAgent, B as readSessionUpdatedAt, Bt as matchesAnyGlobPattern, C as normalizeThinkLevel, Ct as buildWorkspaceSkillSnapshot, D as supportsXHighThinking, Dt as resolveSandboxedMediaSource, E as resolveResponseUsageMode, Et as assertSandboxPath, F as ensureSandboxWorkspaceForSession, Ft as expandToolGroups, G as updateSessionStoreEntry, Gt as SILENT_REPLY_TOKEN, Ht as resolveBootstrapMaxChars, I as resolveSandboxRuntimeStatus, It as normalizeToolName, J as mergeDeliveryContext, K as deliveryContextFromSession, Kt as isSilentReplyText, L as extractDeliveryInfo, Lt as resolveToolProfilePolicy, M as isLikelyContextOverflowError, Mt as buildPluginToolGroups, N as isTransientHttpError, Nt as collectExplicitAllowlist, O as classifyFailoverReason, Ot as ensureBrowserControlAuth, P as sanitizeUserFacingText, Pt as expandPolicyWithPluginGroups, Q as evaluateSessionFreshness, R as appendAssistantMessageToSessionTranscript, Rt as stripPluginOnlyAllowlist, S as normalizeReasoningLevel, St as buildWorkspaceSkillCommandSpecs, T as normalizeVerboseLevel, Tt as assertMediaNotDataUrl, U as updateLastRoute, Ut as resolveBootstrapTotalMaxChars, V as recordSessionMetaFromInbound, Vt as buildBootstrapContextFiles, W as updateSessionStore, Wt as HEARTBEAT_TOKEN, X as normalizeSessionDeliveryFields, Y as normalizeDeliveryContext, Z as resolveSessionKey$1, _ as initializeGlobalHookRunner, _t as getMediaDir, a as applyReplyThreading, at as canonicalizeMainSessionAlias, b as listThinkingLevels, bt as resolvePathsWithinRoot, c as shouldSuppressMessagingToolReplies, ct as getChannelDock, d as buildTargetResolverSignature, dt as normalizeChatType, et as resolveSessionResetPolicy, f as normalizeChannelTargetInput, ft as resolveGroupSessionKey, g as getGlobalHookRunner, gt as resolveProfile, h as parseReplyDirectives, ht as resolveBrowserConfig, i as applyReplyTagsToPayload, it as resolveFreshSessionTotalTokens, j as isFailoverErrorMessage, jt as applyOwnerOnlyToolPolicy, k as isCompactionFailureError, kt as resolveBrowserControlAuth, l as createReplyToModeFilterForChannel, lt as listChannelDocks, m as throwIfAborted, mt as registerBrowserRoutes, nt as resolveThreadFlag, o as filterMessagingToolDuplicates, ot as resolveMainSessionKey, p as normalizeTargetForProvider, pt as createBrowserRouteContext, q as deliveryContextKey, r as normalizeReplyPayloadsForDelivery, rt as DEFAULT_RESET_TRIGGERS, s as isRenderablePayload, st as deriveSessionMetaPatch, t as deliverOutboundPayloads, tt as resolveSessionResetType, u as resolveReplyToMode, ut as resolveConversationLabel, v as formatThinkingLevels, vt as saveMediaBuffer, w as normalizeUsageDisplay, wt as resolvePluginSkillDirs, x as normalizeElevatedLevel, xt as getBridgeAuthForPort, y as formatXHighModelHint, yt as DEFAULT_UPLOAD_DIR, z as loadSessionStore, zt as compileGlobPatterns } from "./deliver-bdH5itRb.js";
7
+ import { C as parseConfigPath, E as VERSION, S as getConfigValueAtPath, T as unsetConfigValueAtPath, _ as resolveMemorySlotDecision, a as writeConfigFile, b as setConfigOverride, c as parseDurationMs, d as discoverAnimaPlugins, g as resolveEnableState, h as normalizePluginsConfig, i as resolveConfigSnapshotHash, l as validateJsonSchemaValue, m as applyTestPluginDefaults, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as loadPluginManifestRegistry, v as getConfigOverrides, w as setConfigValueAtPath, x as unsetConfigOverride, y as resetConfigOverrides } from "./config-C7s14LLE.js";
8
+ import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-BR7Sbtw1.js";
9
+ import { S as pickPrimaryTailnetIPv4, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, x as pickPrimaryLanIPv4, y as rawDataToString } from "./chrome-Nb2mFwWK.js";
10
10
  import { n as resolveCliName, t as formatCliCommand } from "./command-format-CsqJApTg.js";
11
11
  import { n as formatErrorMessage } from "./errors-CllZhhV1.js";
12
- import { A as extensionForMime, C as GATEWAY_CLIENT_NAMES, F as normalizeMimeType$1, H as isPrivateIpAddress, L as mediaKindFromMime, M as imageMimeFromFormat, N as isAudioFileName, O as resizeToJpeg, P as kindFromMime, R as SsrFBlockedError, S as GATEWAY_CLIENT_MODES, T as getImageMetadata, V as isBlockedHostname, _ as listDeliverableMessageChannels, a as chunkText, b as resolveMessageChannel, c as resolveTextChunkLimit, d as listChannelPlugins, f as normalizeChannelId$1, g as isMarkdownCapableMessageChannel, h as isInternalMessageChannel, i as chunkMarkdownTextWithMode, j as getFileExtension, k as detectMime, m as isDeliverableMessageChannel, o as chunkTextWithMode, p as INTERNAL_MESSAGE_CHANNEL, r as chunkMarkdownText, s as resolveChunkMode, t as chunkByNewline, u as getChannelPlugin, v as normalizeMessageChannel, x as GATEWAY_CLIENT_IDS, y as resolveGatewayMessageChannel } from "./chunk-DJXDX69U.js";
13
- import { a as resolveSessionTranscriptPathInDir, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath$1 } from "./paths-CAQJvbeZ.js";
14
- import { t as sanitizeToolResultImages } from "./tool-images-C6cKHTbj.js";
15
- import { _ as normalizeSecretInput, a as markAuthProfileUsed, c as markAuthProfileGood, d as resolveAnimaAgentDir, f as loadJsonFile, h as resolveAuthProfileDisplayLabel, i as markAuthProfileFailure, l as ensureAuthProfileStore, m as withFileLock$1, n as resolveAuthProfileOrder, o as resolveApiKeyForProfile, p as saveJsonFile, r as isProfileInCooldown, s as listProfilesForProvider, u as resolveAuthStorePathForDisplay } from "./auth-profiles-DKu7ZUzl.js";
16
- import { a as requireApiKey, c as resolveModelAuthMode, i as getCustomProviderApiKey, n as resolveMemorySearchConfig, o as resolveApiKeyForProvider, r as getApiKeyForModel, s as resolveEnvApiKey } from "./manager-BYu34CX3.js";
17
- import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-BMMt7osH.js";
18
- import { n as createAsyncLock } from "./soul-BiIdv3Wp.js";
19
- import { a as readNumberParam, c as readStringParam, i as jsonResult, n as imageResult, r as imageResultFromFile, s as readStringArrayParam } from "./common-DT_obM-k.js";
20
- import { a as resolveMarkdownTableMode, c as loadWebMedia, d as readResponseWithLimit, f as fetchWithSsrFGuard, i as convertMarkdownTables, l as MediaFetchError, m as fetchWithTimeout, o as normalizePollInput, p as bindAbortRelay, s as getDefaultLocalRoots, t as getActiveWebListener, u as fetchRemoteMedia } from "./active-listener-BKtsWhsb.js";
12
+ import { A as extensionForMime, C as GATEWAY_CLIENT_NAMES, F as normalizeMimeType$1, H as isPrivateIpAddress, L as mediaKindFromMime, M as imageMimeFromFormat, N as isAudioFileName, O as resizeToJpeg, P as kindFromMime, R as SsrFBlockedError, S as GATEWAY_CLIENT_MODES, T as getImageMetadata, V as isBlockedHostname, _ as listDeliverableMessageChannels, a as chunkText, b as resolveMessageChannel, c as resolveTextChunkLimit, d as listChannelPlugins, f as normalizeChannelId$1, g as isMarkdownCapableMessageChannel, h as isInternalMessageChannel, i as chunkMarkdownTextWithMode, j as getFileExtension, k as detectMime, m as isDeliverableMessageChannel, o as chunkTextWithMode, p as INTERNAL_MESSAGE_CHANNEL, r as chunkMarkdownText, s as resolveChunkMode, t as chunkByNewline, u as getChannelPlugin, v as normalizeMessageChannel, x as GATEWAY_CLIENT_IDS, y as resolveGatewayMessageChannel } from "./chunk-CTS4rIMF.js";
13
+ import { a as resolveSessionTranscriptPathInDir, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath$1 } from "./paths-BqA7F6bT.js";
14
+ import { t as sanitizeToolResultImages } from "./tool-images-BEiRPCYM.js";
15
+ import { _ as normalizeSecretInput, a as markAuthProfileUsed, c as markAuthProfileGood, d as resolveAnimaAgentDir, f as loadJsonFile, h as resolveAuthProfileDisplayLabel, i as markAuthProfileFailure, l as ensureAuthProfileStore, m as withFileLock$1, n as resolveAuthProfileOrder, o as resolveApiKeyForProfile, p as saveJsonFile, r as isProfileInCooldown, s as listProfilesForProvider, u as resolveAuthStorePathForDisplay } from "./auth-profiles-D0T20ZZX.js";
16
+ import { a as requireApiKey, c as resolveModelAuthMode, i as getCustomProviderApiKey, n as resolveMemorySearchConfig, o as resolveApiKeyForProvider, r as getApiKeyForModel, s as resolveEnvApiKey } from "./manager-B-8JFgek.js";
17
+ import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-CFCo1Ghe.js";
18
+ import { n as createAsyncLock } from "./soul-Doq8As4R.js";
19
+ import { a as readNumberParam, c as readStringParam, i as jsonResult, n as imageResult, r as imageResultFromFile, s as readStringArrayParam } from "./common-Coq2knq6.js";
20
+ import { a as resolveMarkdownTableMode, c as loadWebMedia, d as readResponseWithLimit, f as fetchWithSsrFGuard, i as convertMarkdownTables, l as MediaFetchError, m as fetchWithTimeout, o as normalizePollInput, p as bindAbortRelay, s as getDefaultLocalRoots, t as getActiveWebListener, u as fetchRemoteMedia } from "./active-listener-C3NdbMQD.js";
21
21
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-B1cF8Wk2.js";
22
- import { d as webAuthExists, i as logoutWeb, n as getWebAuthAgeMs, r as logWebSelfId, s as readWebSelfId } from "./auth-store-BpYI9t_y.js";
22
+ import { d as webAuthExists, i as logoutWeb, n as getWebAuthAgeMs, r as logWebSelfId, s as readWebSelfId } from "./auth-store-po566wly.js";
23
23
  import { createRequire } from "node:module";
24
24
  import * as path$1 from "node:path";
25
25
  import path, { join } from "node:path";
@@ -348,7 +348,7 @@ async function resolveBootstrapContextForRun(params) {
348
348
  * The ego is persistent across sessions. It evolves as the agent
349
349
  * learns, makes mistakes, and receives feedback.
350
350
  */
351
- const log$12 = createSubsystemLogger("ego");
351
+ const log$13 = createSubsystemLogger("ego");
352
352
  function resolveEgoPath() {
353
353
  return path.join(resolveStateDir(), "ego", "self-model.json");
354
354
  }
@@ -441,7 +441,7 @@ var EgoManager = class {
441
441
  }
442
442
  }
443
443
  } catch (err) {
444
- log$12.warn("failed to load ego state, creating default", { error: String(err) });
444
+ log$13.warn("failed to load ego state, creating default", { error: String(err) });
445
445
  }
446
446
  return createDefaultEgo();
447
447
  }
@@ -455,9 +455,9 @@ var EgoManager = class {
455
455
  this.state.updatedAt = Date.now();
456
456
  fs.writeFileSync(this.filePath, `${JSON.stringify(this.state, null, 2)}\n`, { mode: 384 });
457
457
  this.dirty = false;
458
- log$12.info("ego state saved");
458
+ log$13.info("ego state saved");
459
459
  } catch (err) {
460
- log$12.error("failed to save ego state", { error: String(err) });
460
+ log$13.error("failed to save ego state", { error: String(err) });
461
461
  }
462
462
  }
463
463
  /** Save only if there are unsaved changes */
@@ -524,7 +524,7 @@ var EgoManager = class {
524
524
  };
525
525
  this.state.boundaries.push(boundary);
526
526
  this.dirty = true;
527
- log$12.info(`boundary added: ${boundary.description} (${kind})`);
527
+ log$13.info(`boundary added: ${boundary.description} (${kind})`);
528
528
  return { ...boundary };
529
529
  }
530
530
  removeBoundary(description) {
@@ -559,7 +559,7 @@ var EgoManager = class {
559
559
  this.state.growthLog.push(entry);
560
560
  if (this.state.growthLog.length > 200) this.state.growthLog = this.state.growthLog.slice(-200);
561
561
  this.dirty = true;
562
- log$12.info(`growth logged: [${category}] ${description}`);
562
+ log$13.info(`growth logged: [${category}] ${description}`);
563
563
  return { ...entry };
564
564
  }
565
565
  getIntegrityScore() {
@@ -579,7 +579,7 @@ var EgoManager = class {
579
579
  const alignedCount = recent.filter((c) => c.aligned).length;
580
580
  this.state.integrityScore = recent.length > 0 ? alignedCount / recent.length : 1;
581
581
  this.dirty = true;
582
- if (!aligned) log$12.warn(`integrity misalignment: value="${value}" action="${action}"`);
582
+ if (!aligned) log$13.warn(`integrity misalignment: value="${value}" action="${action}"`);
583
583
  return { ...check };
584
584
  }
585
585
  getIntegrityLog(limit = 10) {
@@ -652,7 +652,7 @@ function getEgoManager(filePath) {
652
652
  * anima steer --clear # Clear steer
653
653
  * anima steer --history # Show steer history
654
654
  */
655
- const log$11 = createSubsystemLogger("steer");
655
+ const log$12 = createSubsystemLogger("steer");
656
656
  function resolveSteerFile() {
657
657
  return path.join(resolveStateDir(), "steer.json");
658
658
  }
@@ -688,6 +688,238 @@ function formatSteerForContext() {
688
688
  ].join("\n");
689
689
  }
690
690
 
691
+ //#endregion
692
+ //#region src/infra/architecture-awareness.ts
693
+ /**
694
+ * Architecture Awareness — Anima knows its own structure
695
+ *
696
+ * Generates a live map of the Anima codebase so agents understand
697
+ * their own architecture. This is injected into context when agents
698
+ * need to reason about or modify themselves.
699
+ *
700
+ * Components:
701
+ * - Module map: what each directory/file does
702
+ * - Dependency graph: what imports what
703
+ * - Feature flags: what's enabled/disabled
704
+ * - Version info: what version, what changed recently
705
+ */
706
+ const log$11 = createSubsystemLogger("architecture");
707
+ const MODULE_DESCRIPTIONS = {
708
+ "src/affect": {
709
+ description: "Emotional state, ego, self-reflection, journaling, wellbeing detection, gradients",
710
+ category: "affect"
711
+ },
712
+ "src/agents": {
713
+ description: "LLM runners (Anthropic, OpenAI, Gemini, Bedrock), model selection, tool calling",
714
+ category: "agent"
715
+ },
716
+ "src/gateway": {
717
+ description: "HTTP/WebSocket server, RPC handlers, rate limiting, security headers",
718
+ category: "gateway"
719
+ },
720
+ "src/p2p": {
721
+ description: "E2E encrypted mesh, content routing, private DNS, relay, file sharing, messaging",
722
+ category: "p2p"
723
+ },
724
+ "src/org": {
725
+ description: "Organizations, roles, hierarchy, task marketplace, boardroom voting",
726
+ category: "org"
727
+ },
728
+ "src/sync": {
729
+ description: "Brain sync (vector clocks), workspace sync (content-addressable blobs)",
730
+ category: "sync"
731
+ },
732
+ "src/jack-in": {
733
+ description: "NoxSoft platform connectors, circuit breaker, resilient fetch",
734
+ category: "jack-in"
735
+ },
736
+ "src/infra": {
737
+ description: "Self-upgrade, atma failover, auto-update, self-evolution, device identity",
738
+ category: "infra"
739
+ },
740
+ "src/license": {
741
+ description: "Subscription tiers, feature gating, Stripe checkout, offline Ed25519 validation",
742
+ category: "license"
743
+ },
744
+ "src/ico": {
745
+ description: "Bonding curve tokenomics, governance voting, PBC verification, launch platform",
746
+ category: "ico"
747
+ },
748
+ "src/context": {
749
+ description: "120K token context automanagement with 3 zones (identity/prompt/working)",
750
+ category: "core"
751
+ },
752
+ "src/heartbeat": {
753
+ description: "Periodic lifecycle engine — keeps agents alive and aware",
754
+ category: "core"
755
+ },
756
+ "src/memory": {
757
+ description: "Three-tier memory (episodic/semantic/procedural), vector search, embeddings",
758
+ category: "core"
759
+ },
760
+ "src/identity": {
761
+ description: "7-component identity model (SOUL/HEART/BRAIN/GUT/SPIRIT/SHADOW/MEMORY)",
762
+ category: "core"
763
+ },
764
+ "ui/src": {
765
+ description: "React control panel — dark/light theme, mood-responsive, progressive disclosure",
766
+ category: "ui"
767
+ }
768
+ };
769
+ /**
770
+ * Generate a complete architecture map of the Anima codebase.
771
+ */
772
+ function generateArchitectureMap(animaRoot) {
773
+ const modules = [];
774
+ const categories = {};
775
+ for (const [dirPath, info] of Object.entries(MODULE_DESCRIPTIONS)) {
776
+ const fullDir = path.join(animaRoot, dirPath);
777
+ if (!fs.existsSync(fullDir)) continue;
778
+ try {
779
+ const files = fs.readdirSync(fullDir).filter((f) => f.endsWith(".ts") && !f.endsWith(".test.ts"));
780
+ for (const file of files) {
781
+ const filePath = path.join(fullDir, file);
782
+ try {
783
+ const lineCount = fs.readFileSync(filePath, "utf8").split("\n").length;
784
+ const testFile = path.join(fullDir, file.replace(".ts", ".test.ts"));
785
+ const hasTests = fs.existsSync(testFile);
786
+ modules.push({
787
+ path: `${dirPath}/${file}`,
788
+ name: file.replace(".ts", ""),
789
+ description: info.description,
790
+ lineCount,
791
+ hasTests,
792
+ category: info.category
793
+ });
794
+ } catch {}
795
+ }
796
+ } catch {}
797
+ }
798
+ for (const mod of modules) {
799
+ if (!categories[mod.category]) categories[mod.category] = {
800
+ count: 0,
801
+ totalLines: 0
802
+ };
803
+ categories[mod.category].count++;
804
+ categories[mod.category].totalLines += mod.lineCount;
805
+ }
806
+ let version = "unknown";
807
+ try {
808
+ version = JSON.parse(fs.readFileSync(path.join(animaRoot, "package.json"), "utf8")).version;
809
+ } catch {}
810
+ const features = getFeatureStatus();
811
+ const map = {
812
+ version,
813
+ generatedAt: Date.now(),
814
+ modules,
815
+ categories,
816
+ features,
817
+ recentChanges: []
818
+ };
819
+ log$11.info(`architecture map: ${modules.length} modules across ${Object.keys(categories).length} categories`);
820
+ return map;
821
+ }
822
+ /**
823
+ * Get current feature enablement status.
824
+ */
825
+ function getFeatureStatus() {
826
+ return [
827
+ {
828
+ name: "P2P Mesh",
829
+ enabled: true,
830
+ module: "src/p2p/mesh.ts",
831
+ description: "E2E encrypted peer-to-peer mesh networking"
832
+ },
833
+ {
834
+ name: "Ego System",
835
+ enabled: true,
836
+ module: "src/affect/ego.ts",
837
+ description: "Agent self-model with integrity scoring"
838
+ },
839
+ {
840
+ name: "Self-Reflection",
841
+ enabled: true,
842
+ module: "src/affect/self-reflection.ts",
843
+ description: "Post-session performance analysis"
844
+ },
845
+ {
846
+ name: "Auto-Update",
847
+ enabled: true,
848
+ module: "src/infra/auto-update.ts",
849
+ description: "Self-updating without npm"
850
+ },
851
+ {
852
+ name: "Atma Failover",
853
+ enabled: true,
854
+ module: "src/infra/atma-failover.ts",
855
+ description: "7-tier model failover chain"
856
+ },
857
+ {
858
+ name: "OpenAI Direct",
859
+ enabled: true,
860
+ module: "src/agents/openai-direct-runner.ts",
861
+ description: "Direct OpenAI API (no Codex CLI)"
862
+ },
863
+ {
864
+ name: "Brain Sync",
865
+ enabled: true,
866
+ module: "src/sync/brain-sync.ts",
867
+ description: "Event-sourced replication with vector clocks"
868
+ },
869
+ {
870
+ name: "Jack In",
871
+ enabled: true,
872
+ module: "src/jack-in/connector.ts",
873
+ description: "NoxSoft platform connectors"
874
+ },
875
+ {
876
+ name: "Governance",
877
+ enabled: true,
878
+ module: "src/ico/governance.ts",
879
+ description: "Token-weighted DAO voting"
880
+ },
881
+ {
882
+ name: "License Gating",
883
+ enabled: true,
884
+ module: "src/license/validator.ts",
885
+ description: "Feature gating by subscription tier"
886
+ },
887
+ {
888
+ name: "SVRN Compute",
889
+ enabled: false,
890
+ module: "src/svrn/compute.ts",
891
+ description: "Decentralized compute via SVRN nodes (planned)"
892
+ }
893
+ ];
894
+ }
895
+ /**
896
+ * Format architecture map for injection into agent context.
897
+ */
898
+ function formatArchitectureForContext(map) {
899
+ const lines = [];
900
+ lines.push(`## Architecture — Anima v${map.version}`);
901
+ lines.push("");
902
+ lines.push("**You are an Anima agent. This is your own architecture.**");
903
+ lines.push("");
904
+ lines.push("| Category | Modules | Lines |");
905
+ lines.push("|----------|---------|-------|");
906
+ for (const [cat, info] of Object.entries(map.categories)) lines.push(`| ${cat} | ${info.count} | ${info.totalLines.toLocaleString()} |`);
907
+ lines.push("");
908
+ lines.push("**Active features:**");
909
+ for (const f of map.features.filter((f) => f.enabled)) lines.push(`- ${f.name}: ${f.description}`);
910
+ const planned = map.features.filter((f) => !f.enabled);
911
+ if (planned.length > 0) {
912
+ lines.push("");
913
+ lines.push("**Planned:**");
914
+ for (const f of planned) lines.push(`- ${f.name}: ${f.description}`);
915
+ }
916
+ const tested = map.modules.filter((m) => m.hasTests).length;
917
+ const total = map.modules.length;
918
+ lines.push("");
919
+ lines.push(`**Test coverage:** ${tested}/${total} modules (${Math.round(tested / total * 100)}%)`);
920
+ return lines.join("\n");
921
+ }
922
+
691
923
  //#endregion
692
924
  //#region src/media/audio.ts
693
925
  const TELEGRAM_VOICE_AUDIO_EXTENSIONS = new Set([
@@ -2705,6 +2937,10 @@ function buildSystemPrompt(params) {
2705
2937
  const steerBlock = formatSteerForContext();
2706
2938
  if (steerBlock) resolvedExtraSystemPrompt = [resolvedExtraSystemPrompt, steerBlock].filter(Boolean).join("\n\n");
2707
2939
  } catch {}
2940
+ try {
2941
+ const archBlock = formatArchitectureForContext(generateArchitectureMap(params.workspaceDir));
2942
+ if (archBlock) resolvedExtraSystemPrompt = [resolvedExtraSystemPrompt, archBlock].filter(Boolean).join("\n\n");
2943
+ } catch {}
2708
2944
  const ttsHint = params.config ? buildTtsSystemPromptHint(params.config) : void 0;
2709
2945
  return buildAgentSystemPrompt({
2710
2946
  workspaceDir: params.workspaceDir,
@@ -4651,7 +4887,7 @@ async function getMemorySearchManager(params) {
4651
4887
  if (cached) return { manager: cached };
4652
4888
  }
4653
4889
  try {
4654
- const { QmdMemoryManager } = await import("./qmd-manager-Q0OSDQ-e.js");
4890
+ const { QmdMemoryManager } = await import("./qmd-manager-CpynR-al.js");
4655
4891
  const primary = await QmdMemoryManager.create({
4656
4892
  cfg: params.cfg,
4657
4893
  agentId: params.agentId,
@@ -4663,7 +4899,7 @@ async function getMemorySearchManager(params) {
4663
4899
  const wrapper = new FallbackMemoryManager({
4664
4900
  primary,
4665
4901
  fallbackFactory: async () => {
4666
- const { MemoryIndexManager } = await import("./manager-BYu34CX3.js").then((n) => n.t);
4902
+ const { MemoryIndexManager } = await import("./manager-B-8JFgek.js").then((n) => n.t);
4667
4903
  return await MemoryIndexManager.get(params);
4668
4904
  }
4669
4905
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4676,7 +4912,7 @@ async function getMemorySearchManager(params) {
4676
4912
  }
4677
4913
  }
4678
4914
  try {
4679
- const { MemoryIndexManager } = await import("./manager-BYu34CX3.js").then((n) => n.t);
4915
+ const { MemoryIndexManager } = await import("./manager-B-8JFgek.js").then((n) => n.t);
4680
4916
  return { manager: await MemoryIndexManager.get(params) };
4681
4917
  } catch (err) {
4682
4918
  return {
@@ -8426,7 +8662,7 @@ async function routeReply(params) {
8426
8662
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
8427
8663
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
8428
8664
  try {
8429
- const { deliverOutboundPayloads } = await import("./deliver-B-dPbUIs.js").then((n) => n.n);
8665
+ const { deliverOutboundPayloads } = await import("./deliver-bdH5itRb.js").then((n) => n.n);
8430
8666
  return {
8431
8667
  ok: true,
8432
8668
  messageId: (await deliverOutboundPayloads({
@@ -12124,6 +12360,14 @@ const SEED_MODELS = [
12124
12360
  contextWindow: 3e5,
12125
12361
  reasoning: false,
12126
12362
  input: ["text", "image"]
12363
+ },
12364
+ {
12365
+ id: "glm-5",
12366
+ name: "GLM-5",
12367
+ provider: "zai",
12368
+ contextWindow: 2e5,
12369
+ reasoning: true,
12370
+ input: ["text"]
12127
12371
  }
12128
12372
  ];
12129
12373
  async function ensureAnimaModelsJson(config, agentDirOverride) {
@@ -12185,7 +12429,7 @@ async function loadModelCatalog(params) {
12185
12429
  });
12186
12430
  try {
12187
12431
  await ensureAnimaModelsJson(params?.config ?? loadConfig());
12188
- await (await import("./pi-auth-json-B_lKNFK6.js")).ensurePiAuthJsonFromAuthProfiles(resolveAnimaAgentDir());
12432
+ await (await import("./pi-auth-json-BhkzZgQz.js")).ensurePiAuthJsonFromAuthProfiles(resolveAnimaAgentDir());
12189
12433
  const piSdk = await importPiSdk();
12190
12434
  const agentDir = resolveAnimaAgentDir();
12191
12435
  const { join } = await import("node:path");
@@ -14282,7 +14526,7 @@ async function createModelSelectionState(params) {
14282
14526
  }
14283
14527
  }
14284
14528
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14285
- const { ensureAuthProfileStore } = await import("./auth-profiles-DKu7ZUzl.js").then((n) => n.t);
14529
+ const { ensureAuthProfileStore } = await import("./auth-profiles-D0T20ZZX.js").then((n) => n.t);
14286
14530
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14287
14531
  const providerKey = normalizeProviderId(provider);
14288
14532
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -28733,6 +28977,63 @@ function orderCandidatesByPreference(params) {
28733
28977
 
28734
28978
  //#endregion
28735
28979
  //#region src/agents/model-fallback.ts
28980
+ const IMPLICIT_CODE_MODEL_FALLBACKS = [{
28981
+ whenProvider: "anthropic",
28982
+ provider: "openai-codex",
28983
+ model: "gpt-5.2-codex"
28984
+ }, {
28985
+ whenProvider: "anthropic",
28986
+ provider: "ollama",
28987
+ model: "qwen3-coder:latest"
28988
+ }];
28989
+ function isLocalBaseUrl(baseUrl) {
28990
+ const raw = baseUrl?.trim();
28991
+ if (!raw) return false;
28992
+ try {
28993
+ const host = new URL(raw).hostname.toLowerCase();
28994
+ return host === "localhost" || host === "127.0.0.1" || host === "0.0.0.0" || host === "::1" || host.endsWith(".local");
28995
+ } catch {
28996
+ return false;
28997
+ }
28998
+ }
28999
+ function isOpenAICompatibleApi(api) {
29000
+ const normalized = api?.trim();
29001
+ return normalized === "openai-completions" || normalized === "openai-responses";
29002
+ }
29003
+ function scoreLocalFallback(params) {
29004
+ const haystack = `${params.provider} ${params.model} ${params.name ?? ""}`.toLowerCase();
29005
+ if (haystack.includes("qwen3") && haystack.includes("coder")) return 100;
29006
+ if (haystack.includes("qwen") && haystack.includes("coder")) return 90;
29007
+ if (haystack.includes("noxsoft-tool-coder")) return 80;
29008
+ if (haystack.includes("tool-coder")) return 70;
29009
+ if (haystack.includes("coder")) return 60;
29010
+ if (haystack.includes("gpt-oss")) return 50;
29011
+ return 10;
29012
+ }
29013
+ function resolveImplicitLocalOpenAIFallbacks(cfg) {
29014
+ const providers = cfg?.models?.providers ?? {};
29015
+ const candidates = [];
29016
+ for (const [provider, entry] of Object.entries(providers)) {
29017
+ if (!isLocalBaseUrl(entry?.baseUrl) || !isOpenAICompatibleApi(entry?.api)) continue;
29018
+ for (const model of entry?.models ?? []) {
29019
+ const id = model?.id?.trim();
29020
+ if (!id) continue;
29021
+ candidates.push({
29022
+ provider,
29023
+ model: id,
29024
+ score: scoreLocalFallback({
29025
+ provider,
29026
+ model: id,
29027
+ name: model?.name
29028
+ })
29029
+ });
29030
+ }
29031
+ }
29032
+ return candidates.toSorted((a, b) => b.score - a.score || a.provider.localeCompare(b.provider) || a.model.localeCompare(b.model)).map(({ provider, model }) => ({
29033
+ provider,
29034
+ model
29035
+ }));
29036
+ }
28736
29037
  /**
28737
29038
  * Fallback abort check. Only treats explicit AbortError names as user aborts.
28738
29039
  * Message-based checks (e.g., "aborted") can mask timeouts and skip fallback.
@@ -28826,6 +29127,14 @@ function resolveFallbackCandidates(params) {
28826
29127
  if (!resolved) continue;
28827
29128
  addCandidate(resolved.ref, true);
28828
29129
  }
29130
+ if (params.fallbacksOverride === void 0) for (const implicit of IMPLICIT_CODE_MODEL_FALLBACKS) {
29131
+ if (normalizedPrimary.provider !== implicit.whenProvider) continue;
29132
+ addCandidate({
29133
+ provider: implicit.provider,
29134
+ model: implicit.model
29135
+ }, false);
29136
+ if (implicit.provider === "openai-codex") for (const localFallback of resolveImplicitLocalOpenAIFallbacks(params.cfg)) addCandidate(localFallback, false);
29137
+ }
28829
29138
  if (params.fallbacksOverride === void 0 && primary?.provider && primary.model) addCandidate({
28830
29139
  provider: primary.provider,
28831
29140
  model: primary.model
@@ -38814,7 +39123,7 @@ async function deliverSessionMaintenanceWarning(params) {
38814
39123
  return;
38815
39124
  }
38816
39125
  try {
38817
- const { deliverOutboundPayloads } = await import("./deliver-B-dPbUIs.js").then((n) => n.n);
39126
+ const { deliverOutboundPayloads } = await import("./deliver-bdH5itRb.js").then((n) => n.n);
38818
39127
  await deliverOutboundPayloads({
38819
39128
  cfg: params.cfg,
38820
39129
  channel,
@@ -39375,6 +39684,30 @@ function createTypingController(params) {
39375
39684
 
39376
39685
  //#endregion
39377
39686
  //#region src/auto-reply/reply/get-reply.ts
39687
+ /** Surfaces that represent real-time conversation (chat, DMs, voice). */
39688
+ const CONVERSATIONAL_CHAT_TYPES = new Set([
39689
+ "private",
39690
+ "group",
39691
+ "supergroup",
39692
+ "channel",
39693
+ "dm",
39694
+ "chat"
39695
+ ]);
39696
+ /**
39697
+ * Returns true when the inbound message originates from a real-time
39698
+ * conversational surface (NoxSoft chat, Telegram, WhatsApp, etc.)
39699
+ * rather than a programmatic/execution context (gateway API, heartbeat, CLI).
39700
+ */
39701
+ function isConversationalChannel(ctx) {
39702
+ if (ctx.CommandSource === "native") return false;
39703
+ const provider = ctx.Provider?.toLowerCase() ?? "";
39704
+ if (provider === "telegram" || provider === "whatsapp" || provider === "noxsoft") return true;
39705
+ const chatType = ctx.ChatType?.toLowerCase() ?? "";
39706
+ if (CONVERSATIONAL_CHAT_TYPES.has(chatType)) return true;
39707
+ const channel = typeof ctx.OriginatingChannel === "string" ? ctx.OriginatingChannel : "";
39708
+ if (channel && channel !== "gateway" && channel !== "cli") return true;
39709
+ return false;
39710
+ }
39378
39711
  function mergeSkillFilters(channelFilter, agentFilter) {
39379
39712
  const normalize = (list) => {
39380
39713
  if (!Array.isArray(list)) return;
@@ -39423,6 +39756,18 @@ async function getReplyFromConfig(ctx, opts, configOverride) {
39423
39756
  hasResolvedHeartbeatModelOverride = true;
39424
39757
  }
39425
39758
  }
39759
+ if (!opts?.isHeartbeat && !hasResolvedHeartbeatModelOverride && isConversationalChannel(ctx)) {
39760
+ const convRaw = agentCfg?.conversationalModel?.trim() ?? "";
39761
+ const convRef = convRaw ? resolveModelRefFromString({
39762
+ raw: convRaw,
39763
+ defaultProvider,
39764
+ aliasIndex
39765
+ }) : null;
39766
+ if (convRef) {
39767
+ provider = convRef.ref.provider;
39768
+ model = convRef.ref.model;
39769
+ }
39770
+ }
39426
39771
  const workspaceDir = (await ensureAgentWorkspace({
39427
39772
  dir: resolveAgentWorkspaceDir(cfg, agentId) ?? DEFAULT_AGENT_WORKSPACE_DIR,
39428
39773
  ensureBootstrapFiles: !agentCfg?.skipBootstrap && !isFastTestEnv
@@ -40243,7 +40588,7 @@ function createWhatsAppLoginTool() {
40243
40588
  force: Type.Optional(Type.Boolean())
40244
40589
  }),
40245
40590
  execute: async (_toolCallId, args) => {
40246
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BGbHImRb.js");
40591
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-BVzUWR4o.js");
40247
40592
  if ((args?.action ?? "start") === "wait") {
40248
40593
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
40249
40594
  return {
@@ -41173,23 +41518,23 @@ let webLoginQrPromise = null;
41173
41518
  let webChannelPromise = null;
41174
41519
  let whatsappActionsPromise = null;
41175
41520
  function loadWebOutbound() {
41176
- webOutboundPromise ??= import("./outbound-DW2eod1S.js").then((n) => n.t);
41521
+ webOutboundPromise ??= import("./outbound-Bii3QonX.js").then((n) => n.t);
41177
41522
  return webOutboundPromise;
41178
41523
  }
41179
41524
  function loadWebLogin() {
41180
- webLoginPromise ??= import("./login-BTOKtSQN.js").then((n) => n.n);
41525
+ webLoginPromise ??= import("./login-WPS724ji.js").then((n) => n.n);
41181
41526
  return webLoginPromise;
41182
41527
  }
41183
41528
  function loadWebLoginQr() {
41184
- webLoginQrPromise ??= import("./login-qr-BGbHImRb.js");
41529
+ webLoginQrPromise ??= import("./login-qr-BVzUWR4o.js");
41185
41530
  return webLoginQrPromise;
41186
41531
  }
41187
41532
  function loadWebChannel() {
41188
- webChannelPromise ??= import("./web-C-cK9OCd.js");
41533
+ webChannelPromise ??= import("./web-CPHrMWsv.js");
41189
41534
  return webChannelPromise;
41190
41535
  }
41191
41536
  function loadWhatsAppActions() {
41192
- whatsappActionsPromise ??= import("./whatsapp-actions-6fPRKwPV.js");
41537
+ whatsappActionsPromise ??= import("./whatsapp-actions-Bhz79Fgg.js");
41193
41538
  return whatsappActionsPromise;
41194
41539
  }
41195
41540
  function createPluginRuntime() {
@@ -43752,10 +44097,80 @@ async function runGeminiDirectAgent(params) {
43752
44097
  };
43753
44098
  }
43754
44099
 
44100
+ //#endregion
44101
+ //#region src/agents/local-model-installer.ts
44102
+ const DEFAULT_LOCAL_OLLAMA_MODEL = "qwen3-coder:latest";
44103
+ const installPromises = /* @__PURE__ */ new Map();
44104
+ function createInstallerError(message, cause) {
44105
+ const err = new Error(message);
44106
+ if (cause !== void 0) err.cause = cause;
44107
+ return err;
44108
+ }
44109
+ async function isOllamaModelInstalled(model = DEFAULT_LOCAL_OLLAMA_MODEL) {
44110
+ try {
44111
+ await runExec("ollama", ["show", model], 1e4);
44112
+ return true;
44113
+ } catch {
44114
+ return false;
44115
+ }
44116
+ }
44117
+ async function ensureLocalOllamaModelInstalled(params) {
44118
+ const model = params?.model?.trim() || DEFAULT_LOCAL_OLLAMA_MODEL;
44119
+ const timeoutMs = params?.timeoutMs ?? 72e5;
44120
+ const runtime = params?.runtime ?? createNonExitingRuntime();
44121
+ const existing = installPromises.get(model);
44122
+ if (existing) return await existing;
44123
+ const promise = (async () => {
44124
+ try {
44125
+ await runExec("ollama", ["list"], 1e4);
44126
+ } catch (error) {
44127
+ throw createInstallerError("Ollama is required but no local Ollama server is reachable. Start Ollama and retry.", error);
44128
+ }
44129
+ if (await isOllamaModelInstalled(model)) return {
44130
+ installed: true,
44131
+ pulled: false
44132
+ };
44133
+ runtime.log(`Installing local model via Ollama: ${model}`);
44134
+ const result = await runCommandWithTimeout([
44135
+ "ollama",
44136
+ "pull",
44137
+ model
44138
+ ], { timeoutMs });
44139
+ if (result.code !== 0) {
44140
+ const detail = (result.stderr || result.stdout).trim();
44141
+ throw createInstallerError(`Failed to install local Ollama model "${model}".${detail ? ` ${detail}` : ""}`);
44142
+ }
44143
+ if (!await isOllamaModelInstalled(model)) throw createInstallerError(`Ollama reported success, but model "${model}" is still missing.`);
44144
+ runtime.log(`Local model ready: ${model}`);
44145
+ return {
44146
+ installed: true,
44147
+ pulled: true
44148
+ };
44149
+ })();
44150
+ installPromises.set(model, promise);
44151
+ try {
44152
+ return await promise;
44153
+ } finally {
44154
+ installPromises.delete(model);
44155
+ }
44156
+ }
44157
+
43755
44158
  //#endregion
43756
44159
  //#region src/agents/openai-direct-runner.ts
43757
44160
  const log = createSubsystemLogger("agent/openai-direct");
43758
44161
  const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
44162
+ const DEFAULT_PROVIDER_BASE_URLS = {
44163
+ openai: DEFAULT_OPENAI_BASE_URL,
44164
+ minimax: "https://api.minimax.io/v1",
44165
+ ollama: "http://127.0.0.1:11434/v1",
44166
+ lmstudio: "http://127.0.0.1:1234/v1"
44167
+ };
44168
+ const PROVIDER_API_KEY_HINTS = {
44169
+ openai: "OPENAI_API_KEY",
44170
+ minimax: "MINIMAX_API_KEY",
44171
+ ollama: "OLLAMA_API_KEY",
44172
+ lmstudio: "LMSTUDIO_API_KEY"
44173
+ };
43759
44174
  const MODEL_MAP = {
43760
44175
  "gpt-5.4": "gpt-5.4",
43761
44176
  "gpt-5.2": "gpt-5.2",
@@ -43793,6 +44208,10 @@ function resolveModel(model) {
43793
44208
  const key = (model ?? "default").trim().toLowerCase() || "default";
43794
44209
  return MODEL_MAP[key] ?? key;
43795
44210
  }
44211
+ function isToolUnsupportedError(body) {
44212
+ const normalized = body.toLowerCase();
44213
+ return normalized.includes("does not support tools") || normalized.includes("tool is not supported");
44214
+ }
43796
44215
  /**
43797
44216
  * Clean a JSON Schema for OpenAI's function calling.
43798
44217
  * OpenAI is stricter than most — no unsupported keywords.
@@ -43819,8 +44238,10 @@ function cleanSchemaForOpenAI(schema) {
43819
44238
  */
43820
44239
  async function runOpenAIDirectAgent(params) {
43821
44240
  const started = Date.now();
44241
+ const provider = (params.provider ?? "openai").trim() || "openai";
43822
44242
  const resolvedModel = resolveModel(params.model);
43823
- log.info(`direct api exec: model=${resolvedModel} promptChars=${params.prompt.length}`);
44243
+ if (provider === "ollama" && resolvedModel === DEFAULT_LOCAL_OLLAMA_MODEL) await ensureLocalOllamaModelInstalled({ model: resolvedModel });
44244
+ log.info(`direct api exec: provider=${provider} model=${resolvedModel} promptChars=${params.prompt.length}`);
43824
44245
  const workspaceDir = resolveRunWorkspaceDir({
43825
44246
  workspaceDir: params.workspaceDir,
43826
44247
  sessionKey: params.sessionKey,
@@ -43831,7 +44252,7 @@ async function runOpenAIDirectAgent(params) {
43831
44252
  config: params.config,
43832
44253
  workspaceDir,
43833
44254
  sessionKey: params.sessionKey,
43834
- modelProvider: "openai",
44255
+ modelProvider: provider,
43835
44256
  modelId: resolvedModel
43836
44257
  });
43837
44258
  const openaiTools = executableTools.map((t) => ({
@@ -43877,7 +44298,7 @@ async function runOpenAIDirectAgent(params) {
43877
44298
  docsPath: docsPath ?? void 0,
43878
44299
  tools: executableTools,
43879
44300
  contextFiles,
43880
- modelDisplay: `openai/${resolvedModel}`,
44301
+ modelDisplay: `${provider}/${resolvedModel}`,
43881
44302
  agentId: sessionAgentId
43882
44303
  });
43883
44304
  let history = await loadSessionHistory(params.sessionFile);
@@ -43901,7 +44322,8 @@ async function runOpenAIDirectAgent(params) {
43901
44322
  let isDone = false;
43902
44323
  let loopCount = 0;
43903
44324
  const maxLoops = 20;
43904
- const baseUrl = params.config?.models?.providers?.openai?.baseUrl?.trim() || DEFAULT_OPENAI_BASE_URL;
44325
+ let toolUseEnabled = openaiTools.length > 0;
44326
+ const baseUrl = params.config?.models?.providers?.[provider]?.baseUrl?.trim() || params.config?.models?.providers?.openai?.baseUrl?.trim() || DEFAULT_PROVIDER_BASE_URLS[provider] || DEFAULT_OPENAI_BASE_URL;
43905
44327
  while (!isDone && loopCount < maxLoops) {
43906
44328
  loopCount++;
43907
44329
  const requestBody = {
@@ -43911,7 +44333,7 @@ async function runOpenAIDirectAgent(params) {
43911
44333
  temperature: 1,
43912
44334
  stream: true
43913
44335
  };
43914
- if (openaiTools.length > 0) {
44336
+ if (toolUseEnabled && openaiTools.length > 0) {
43915
44337
  requestBody.tools = openaiTools;
43916
44338
  requestBody.tool_choice = "auto";
43917
44339
  }
@@ -43923,8 +44345,8 @@ async function runOpenAIDirectAgent(params) {
43923
44345
  method: "POST",
43924
44346
  headers: {
43925
44347
  "Content-Type": "application/json",
43926
- Authorization: `Bearer ${params.apiKey}`,
43927
- "User-Agent": `anima/7.0.0 (openai-direct-runner; ${os.platform()})`
44348
+ "User-Agent": `anima/7.0.0 (openai-direct-runner; ${os.platform()})`,
44349
+ ...params.apiKey?.trim() ? { Authorization: `Bearer ${params.apiKey}` } : {}
43928
44350
  },
43929
44351
  body: JSON.stringify(requestBody),
43930
44352
  signal: controller.signal
@@ -43932,11 +44354,20 @@ async function runOpenAIDirectAgent(params) {
43932
44354
  clearTimeout(timeoutHandle);
43933
44355
  if (!response.ok) {
43934
44356
  const body = await response.text().catch(() => "");
44357
+ if (response.status === 400 && toolUseEnabled && isToolUnsupportedError(body)) {
44358
+ log.warn("openai-compatible provider rejected tools; retrying without tools", {
44359
+ provider,
44360
+ model: resolvedModel
44361
+ });
44362
+ toolUseEnabled = false;
44363
+ continue;
44364
+ }
43935
44365
  const isAuth = response.status === 401 || response.status === 403;
43936
44366
  const isRateLimit = response.status === 429;
43937
44367
  const rateHint = isRateLimit ? " — rate limit hit, will retry next heartbeat." : "";
43938
- const authHint = isAuth ? "API key may be invalid. Check OPENAI_API_KEY environment variable." : "";
43939
- log.error(`openai api error: HTTP ${response.status}${authHint}${rateHint}`, {
44368
+ const apiKeyHint = PROVIDER_API_KEY_HINTS[provider] ?? "API key";
44369
+ const authHint = isAuth ? ` API key may be invalid. Check ${apiKeyHint}.` : "";
44370
+ log.error(`${provider} api error: HTTP ${response.status}${authHint}${rateHint}`, {
43940
44371
  status: response.status,
43941
44372
  body: body.slice(0, 500)
43942
44373
  });
@@ -44064,7 +44495,8 @@ async function runOpenAIDirectAgent(params) {
44064
44495
  log.info(`openai api complete: ${durationMs}ms`, {
44065
44496
  inputTokens: totalInputTokens,
44066
44497
  outputTokens: totalOutputTokens,
44067
- model: resolvedModel
44498
+ model: resolvedModel,
44499
+ provider
44068
44500
  });
44069
44501
  return {
44070
44502
  status: "completed",
@@ -44074,7 +44506,7 @@ async function runOpenAIDirectAgent(params) {
44074
44506
  durationMs,
44075
44507
  agentMeta: {
44076
44508
  model: resolvedModel,
44077
- provider: "openai",
44509
+ provider,
44078
44510
  usage: {
44079
44511
  input: totalInputTokens,
44080
44512
  output: totalOutputTokens
@@ -44106,10 +44538,22 @@ async function emitAgentEvent(params, stream, data) {
44106
44538
  data
44107
44539
  });
44108
44540
  }
44541
+ function resolveProviderConfig(provider, config) {
44542
+ const providers = config?.models?.providers ?? {};
44543
+ const direct = providers[provider];
44544
+ if (direct) return direct;
44545
+ const normalized = normalizeProviderId(provider);
44546
+ return Object.entries(providers).find(([key]) => normalizeProviderId(key) === normalized)?.[1];
44547
+ }
44548
+ function isOpenAICompatibleProviderConfig(entry) {
44549
+ const api = entry?.api?.trim();
44550
+ return api === "openai-completions" || api === "openai-responses";
44551
+ }
44109
44552
  function resolveDirectAuthProvider(provider) {
44110
44553
  if (provider === "anthropic" || provider === "claude") return "anthropic";
44111
44554
  if (provider === "google" || provider === "gemini") return "google";
44112
44555
  if (provider === "openai") return "openai";
44556
+ if (provider === "minimax") return "minimax";
44113
44557
  return null;
44114
44558
  }
44115
44559
  function resolveProfileFailureReason(result) {
@@ -44201,7 +44645,7 @@ async function runDirectWithProfileFallback(params) {
44201
44645
  let lastResult = null;
44202
44646
  for (;;) {
44203
44647
  const auth = await resolveDirectProviderAuth({
44204
- provider: params.directProvider,
44648
+ provider: params.authProvider,
44205
44649
  config: params.config,
44206
44650
  agentDir: params.agentDir,
44207
44651
  preferredProfile,
@@ -44213,7 +44657,7 @@ async function runDirectWithProfileFallback(params) {
44213
44657
  meta: {
44214
44658
  durationMs: 0,
44215
44659
  error: {
44216
- message: `Auth fallback loop detected for ${params.directProvider}.`,
44660
+ message: `Auth fallback loop detected for ${params.authProvider}.`,
44217
44661
  kind: "unknown"
44218
44662
  }
44219
44663
  }
@@ -44236,11 +44680,12 @@ async function runDirectWithProfileFallback(params) {
44236
44680
  onPartialReply: params.emitPartial,
44237
44681
  onAssistantMessageStart: params.onAssistantMessageStart
44238
44682
  };
44239
- const result = params.directProvider === "anthropic" ? await runAnthropicDirectAgent({
44683
+ const result = params.runnerKind === "anthropic" ? await runAnthropicDirectAgent({
44240
44684
  ...directRunParams,
44241
44685
  token: auth.apiKey ?? ""
44242
- }) : params.directProvider === "openai" ? await runOpenAIDirectAgent({
44686
+ }) : params.runnerKind === "openai-compatible" ? await runOpenAIDirectAgent({
44243
44687
  ...directRunParams,
44688
+ provider: params.openAIProvider ?? params.authProvider,
44244
44689
  apiKey: auth.apiKey ?? ""
44245
44690
  }) : await runGeminiDirectAgent({
44246
44691
  ...directRunParams,
@@ -44255,7 +44700,7 @@ async function runDirectWithProfileFallback(params) {
44255
44700
  });
44256
44701
  await markAuthProfileGood({
44257
44702
  store,
44258
- provider: params.directProvider,
44703
+ provider: params.authProvider,
44259
44704
  profileId: auth.profileId,
44260
44705
  agentDir: params.agentDir
44261
44706
  });
@@ -44277,22 +44722,32 @@ async function runDirectWithProfileFallback(params) {
44277
44722
  }
44278
44723
  async function resolveDirectStrategy(provider, config, agentDir) {
44279
44724
  const directProvider = resolveDirectAuthProvider(provider);
44280
- if (!directProvider) return null;
44281
- try {
44725
+ if (directProvider) try {
44282
44726
  const auth = await resolveDirectProviderAuth({
44283
44727
  provider: directProvider,
44284
44728
  config,
44285
44729
  agentDir,
44286
44730
  store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false })
44287
44731
  });
44288
- if (auth.apiKey) {
44732
+ if (auth.apiKey !== void 0) {
44289
44733
  if (directProvider === "anthropic" && auth.apiKey.startsWith("sk-ant-oat01-")) return null;
44290
44734
  return {
44291
- kind: directProvider === "google" ? "gemini-direct" : directProvider === "openai" ? "openai-direct" : "anthropic-direct",
44735
+ kind: directProvider === "google" ? "gemini-direct" : directProvider === "openai" || directProvider === "minimax" ? "openai-direct" : "anthropic-direct",
44292
44736
  provider
44293
44737
  };
44294
44738
  }
44295
44739
  } catch {}
44740
+ if (isOpenAICompatibleProviderConfig(resolveProviderConfig(provider, config))) try {
44741
+ if ((await resolveApiKeyForProvider({
44742
+ provider,
44743
+ cfg: config,
44744
+ agentDir,
44745
+ store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false })
44746
+ })).apiKey !== void 0) return {
44747
+ kind: "openai-direct",
44748
+ provider
44749
+ };
44750
+ } catch {}
44296
44751
  return null;
44297
44752
  }
44298
44753
  async function resolveNoxSoftRunnerStrategy(params) {
@@ -44323,11 +44778,33 @@ async function runNoxSoftEmbeddedAgent(params) {
44323
44778
  await params.onPartialReply?.(payload);
44324
44779
  await emitAgentEvent(params, "assistant", { text: payload.text });
44325
44780
  };
44326
- const strategy = await resolveNoxSoftRunnerStrategy({
44327
- provider: params.provider,
44328
- config: params.config,
44329
- agentDir: params.agentDir
44330
- });
44781
+ let strategy;
44782
+ try {
44783
+ strategy = await resolveNoxSoftRunnerStrategy({
44784
+ provider: params.provider,
44785
+ config: params.config,
44786
+ agentDir: params.agentDir
44787
+ });
44788
+ } catch (error) {
44789
+ const requestedProvider = normalizedRequestedRef?.provider ?? provider;
44790
+ const requestedModel = normalizedRequestedRef?.model;
44791
+ const failover = coerceToFailoverError(error, {
44792
+ provider: requestedProvider,
44793
+ model: requestedModel
44794
+ }) ?? new FailoverError(error instanceof Error ? error.message : String(error), {
44795
+ reason: classifyFailoverReason(error instanceof Error ? error.message : String(error)) ?? "unknown",
44796
+ provider: requestedProvider,
44797
+ model: requestedModel,
44798
+ cause: error instanceof Error ? error : void 0
44799
+ });
44800
+ await emitAgentEvent(params, "lifecycle", {
44801
+ phase: "error",
44802
+ startedAt,
44803
+ endedAt: Date.now(),
44804
+ error: failover.message
44805
+ });
44806
+ throw failover;
44807
+ }
44331
44808
  if (strategy.kind === "anthropic-direct") {
44332
44809
  await emitAgentEvent(params, "lifecycle", {
44333
44810
  phase: "start",
@@ -44337,7 +44814,8 @@ async function runNoxSoftEmbeddedAgent(params) {
44337
44814
  const result = normalizeRunnerResult({
44338
44815
  result: await runDirectWithProfileFallback({
44339
44816
  ...params,
44340
- directProvider: "anthropic",
44817
+ authProvider: "anthropic",
44818
+ runnerKind: "anthropic",
44341
44819
  timeoutMs,
44342
44820
  runId,
44343
44821
  emitPartial
@@ -44384,7 +44862,8 @@ async function runNoxSoftEmbeddedAgent(params) {
44384
44862
  const result = normalizeRunnerResult({
44385
44863
  result: await runDirectWithProfileFallback({
44386
44864
  ...params,
44387
- directProvider: "google",
44865
+ authProvider: "google",
44866
+ runnerKind: "google",
44388
44867
  timeoutMs,
44389
44868
  runId,
44390
44869
  emitPartial
@@ -44431,7 +44910,9 @@ async function runNoxSoftEmbeddedAgent(params) {
44431
44910
  const result = normalizeRunnerResult({
44432
44911
  result: await runDirectWithProfileFallback({
44433
44912
  ...params,
44434
- directProvider: "openai",
44913
+ authProvider: provider === "minimax" ? "minimax" : provider === "openai" ? "openai" : provider,
44914
+ runnerKind: "openai-compatible",
44915
+ openAIProvider: provider,
44435
44916
  timeoutMs,
44436
44917
  runId,
44437
44918
  emitPartial