@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,28 +1,28 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { a as resolveOAuthDir, i as resolveGatewayPort, n as resolveConfigPath, s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-B-AkG5FD.js";
3
- import { A as isAcpSessionKey, C as normalizeAccountId$1, D as resolveThreadSessionKeys, E as resolveAgentIdFromSessionKey, M as parseAgentSessionKey, N as resolveThreadParentSessionKey, O as sanitizeAgentId, S as classifySessionKeyShape, T as normalizeMainKey, _ as DEFAULT_AGENT_ID, b as buildAgentPeerSessionKey, f as loadWorkspaceBootstrapFiles, g as DEFAULT_ACCOUNT_ID, j as isSubagentSessionKey, k as getSubagentDepth, l as ensureAgentWorkspace, m as resolveAnimaPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, u as filterBootstrapFilesForSession, v as DEFAULT_MAIN_KEY, w as normalizeAgentId, y as buildAgentMainSessionKey } from "./workspace-BFIZCnGo.js";
4
- import { A as normalizeLogLevel, D as getChildLogger, E as theme, T as isRich, a as unregisterActiveProgressLine, b as setVerbose, d as normalizeChannelId, h as setActivePluginRegistry, i as registerActiveProgressLine, n as defaultRuntime, p as getActivePluginRegistry, r as clearActiveProgressLine, s as CHAT_CHANNEL_ORDER, t as createSubsystemLogger, u as normalizeAnyChannelId, v as logVerbose, w as colorize, x as shouldLogVerbose } from "./subsystem-D1AJZPgG.js";
5
- 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-DUzVF5_D.js";
6
- import { c as resolveDefaultAgentId, i as resolveAgentModelFallbacksOverride, l as resolveSessionAgentId, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentIds } from "./agent-scope-CxBzAozu.js";
7
- import { A as supportsXHighThinking, At as assertSandboxPath, B as extractDeliveryInfo, Bt as normalizeToolName, C as listThinkingLevels, Ct as DEFAULT_UPLOAD_DIR, D as normalizeUsageDisplay, Dt as buildWorkspaceSkillSnapshot, E as normalizeThinkLevel, Et as buildWorkspaceSkillCommandSpecs, F as isLikelyContextOverflowError, Ft as applyOwnerOnlyToolPolicy, G as updateLastRoute, Gt as buildBootstrapContextFiles, H as loadSessionStore, Ht as stripPluginOnlyAllowlist, I as isTransientHttpError, It as buildPluginToolGroups, J as deliveryContextFromSession, Jt as HEARTBEAT_TOKEN, K as updateSessionStore, Kt as resolveBootstrapMaxChars, L as sanitizeUserFacingText, Lt as collectExplicitAllowlist, M as isCompactionFailureError, Mt as ensureBrowserControlAuth, N as isContextOverflowError, Nt as resolveBrowserControlAuth, O as normalizeVerboseLevel, Ot as resolvePluginSkillDirs, P as isFailoverErrorMessage, Pt as resolveSandboxConfigForAgent, Q as normalizeSessionDeliveryFields, R as ensureSandboxWorkspaceForSession, Rt as expandPolicyWithPluginGroups, S as formatXHighModelHint, St as saveMediaBuffer, T as normalizeReasoningLevel, Tt as getBridgeAuthForPort, U as readSessionUpdatedAt, Ut as compileGlobPatterns, V as appendAssistantMessageToSessionTranscript, Vt as resolveToolProfilePolicy, W as recordSessionMetaFromInbound, Wt as matchesAnyGlobPattern, X as mergeDeliveryContext, Xt as isSilentReplyText, Y as deliveryContextKey, Yt as SILENT_REPLY_TOKEN, Z as normalizeDeliveryContext, _ as throwIfAborted, _t as createBrowserRouteContext, at as resolveThreadFlag, b as initializeGlobalHookRunner, bt as resolveProfile, c as applyReplyThreading, ct as canonicalizeMainSessionAlias, d as shouldSuppressMessagingToolReplies, dt as deriveSessionMetaPatch, et as resolveSessionKey$1, f as createReplyToModeFilterForChannel, ft as getChannelDock, g as normalizeTargetForProvider, gt as resolveGroupSessionKey, h as normalizeChannelTargetInput, ht as normalizeChatType, it as resolveSessionResetType, j as classifyFailoverReason, jt as resolveSandboxedMediaSource, k as resolveResponseUsageMode, kt as assertMediaNotDataUrl, l as filterMessagingToolDuplicates, m as buildTargetResolverSignature, mt as resolveConversationLabel, nt as resolveChannelResetConfig, o as normalizeReplyPayloadsForDelivery, ot as DEFAULT_RESET_TRIGGERS, p as resolveReplyToMode, pt as listChannelDocks, q as updateSessionStoreEntry, qt as resolveBootstrapTotalMaxChars, rt as resolveSessionResetPolicy, s as applyReplyTagsToPayload, st as resolveFreshSessionTotalTokens, t as deliverOutboundPayloads, tt as evaluateSessionFreshness, u as isRenderablePayload, ut as resolveMainSessionKey, v as parseReplyDirectives, vt as registerBrowserRoutes, w as normalizeElevatedLevel, wt as resolvePathsWithinRoot, x as formatThinkingLevels, xt as getMediaDir, y as getGlobalHookRunner, yt as resolveBrowserConfig, z as resolveSandboxRuntimeStatus, zt as expandToolGroups } from "./deliver-d-CaN0uL.js";
3
+ import { A as isAcpSessionKey, C as normalizeAccountId$1, D as resolveThreadSessionKeys, E as resolveAgentIdFromSessionKey, M as parseAgentSessionKey, N as resolveThreadParentSessionKey, O as sanitizeAgentId, S as classifySessionKeyShape, T as normalizeMainKey, _ as DEFAULT_AGENT_ID, b as buildAgentPeerSessionKey, f as loadWorkspaceBootstrapFiles, g as DEFAULT_ACCOUNT_ID, j as isSubagentSessionKey, k as getSubagentDepth, l as ensureAgentWorkspace, m as resolveAnimaPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, u as filterBootstrapFilesForSession, v as DEFAULT_MAIN_KEY, w as normalizeAgentId, y as buildAgentMainSessionKey } from "./workspace-D6JhsXVL.js";
4
+ import { D as theme, E as isRich, O as getChildLogger, S as shouldLogVerbose, T as colorize, a as registerActiveProgressLine, c as CHAT_CHANNEL_ORDER, d as normalizeAnyChannelId, f as normalizeChannelId, g as setActivePluginRegistry, i as clearActiveProgressLine, j as normalizeLogLevel, m as getActivePluginRegistry, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger, x as setVerbose, y as logVerbose } from "./subsystem-CkjVkxc4.js";
5
+ 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-4nfFrGP7.js";
6
+ import { c as resolveDefaultAgentId, i as resolveAgentModelFallbacksOverride, l as resolveSessionAgentId, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentIds } from "./agent-scope-CENGF2NR.js";
7
+ import { A as supportsXHighThinking, At as assertSandboxPath, B as extractDeliveryInfo, Bt as normalizeToolName, C as listThinkingLevels, Ct as DEFAULT_UPLOAD_DIR, D as normalizeUsageDisplay, Dt as buildWorkspaceSkillSnapshot, E as normalizeThinkLevel, Et as buildWorkspaceSkillCommandSpecs, F as isLikelyContextOverflowError, Ft as applyOwnerOnlyToolPolicy, G as updateLastRoute, Gt as buildBootstrapContextFiles, H as loadSessionStore, Ht as stripPluginOnlyAllowlist, I as isTransientHttpError, It as buildPluginToolGroups, J as deliveryContextFromSession, Jt as HEARTBEAT_TOKEN, K as updateSessionStore, Kt as resolveBootstrapMaxChars, L as sanitizeUserFacingText, Lt as collectExplicitAllowlist, M as isCompactionFailureError, Mt as ensureBrowserControlAuth, N as isContextOverflowError, Nt as resolveBrowserControlAuth, O as normalizeVerboseLevel, Ot as resolvePluginSkillDirs, P as isFailoverErrorMessage, Pt as resolveSandboxConfigForAgent, Q as normalizeSessionDeliveryFields, R as ensureSandboxWorkspaceForSession, Rt as expandPolicyWithPluginGroups, S as formatXHighModelHint, St as saveMediaBuffer, T as normalizeReasoningLevel, Tt as getBridgeAuthForPort, U as readSessionUpdatedAt, Ut as compileGlobPatterns, V as appendAssistantMessageToSessionTranscript, Vt as resolveToolProfilePolicy, W as recordSessionMetaFromInbound, Wt as matchesAnyGlobPattern, X as mergeDeliveryContext, Xt as isSilentReplyText, Y as deliveryContextKey, Yt as SILENT_REPLY_TOKEN, Z as normalizeDeliveryContext, _ as throwIfAborted, _t as createBrowserRouteContext, at as resolveThreadFlag, b as initializeGlobalHookRunner, bt as resolveProfile, c as applyReplyThreading, ct as canonicalizeMainSessionAlias, d as shouldSuppressMessagingToolReplies, dt as deriveSessionMetaPatch, et as resolveSessionKey$1, f as createReplyToModeFilterForChannel, ft as getChannelDock, g as normalizeTargetForProvider, gt as resolveGroupSessionKey, h as normalizeChannelTargetInput, ht as normalizeChatType, it as resolveSessionResetType, j as classifyFailoverReason, jt as resolveSandboxedMediaSource, k as resolveResponseUsageMode, kt as assertMediaNotDataUrl, l as filterMessagingToolDuplicates, m as buildTargetResolverSignature, mt as resolveConversationLabel, nt as resolveChannelResetConfig, o as normalizeReplyPayloadsForDelivery, ot as DEFAULT_RESET_TRIGGERS, p as resolveReplyToMode, pt as listChannelDocks, q as updateSessionStoreEntry, qt as resolveBootstrapTotalMaxChars, rt as resolveSessionResetPolicy, s as applyReplyTagsToPayload, st as resolveFreshSessionTotalTokens, t as deliverOutboundPayloads, tt as evaluateSessionFreshness, u as isRenderablePayload, ut as resolveMainSessionKey, v as parseReplyDirectives, vt as registerBrowserRoutes, w as normalizeElevatedLevel, wt as resolvePathsWithinRoot, x as formatThinkingLevels, xt as getMediaDir, y as getGlobalHookRunner, yt as resolveBrowserConfig, z as resolveSandboxRuntimeStatus, zt as expandToolGroups } from "./deliver-BJ0JgwhN.js";
8
8
  import { i as triggerInternalHook, r as registerInternalHook, t as createInternalHookEvent } from "./internal-hooks-CWw3Hgeu.js";
9
- import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, _ as resetConfigOverrides, a as writeConfigFile, b as getConfigValueAtPath, c as parseDurationMs, d as discoverAnimaPlugins, f as applyTestPluginDefaults, g as getConfigOverrides, h as resolveMemorySlotDecision, i as resolveConfigSnapshotHash, l as validateJsonSchemaValue, m as resolveEnableState, n as loadConfig, o as validateConfigObjectWithPlugins, p as normalizePluginsConfig, r as readConfigFileSnapshot, u as loadPluginManifestRegistry, v as setConfigOverride, w as VERSION, x as parseConfigPath, y as unsetConfigOverride } from "./config-CweTwOtr.js";
10
- import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-HkVWMh--.js";
11
- import { a as modelKey, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, g as DEFAULT_PROVIDER, h as DEFAULT_MODEL, i as isCliProvider, m as DEFAULT_CONTEXT_TOKENS, n as buildConfiguredAllowlistKeys, o as normalizeModelRef, p as resolveThinkingDefault, r as buildModelAliasIndex, s as normalizeProviderId, t as buildAllowedModelSet, u as resolveConfiguredModelRef } from "./model-selection-DjsJGv1R.js";
12
- import { S as pickPrimaryTailnetIPv4, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, x as pickPrimaryLanIPv4, y as rawDataToString } from "./chrome-DLUBPBPz.js";
9
+ import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, _ as resetConfigOverrides, a as writeConfigFile, b as getConfigValueAtPath, c as parseDurationMs, d as discoverAnimaPlugins, f as applyTestPluginDefaults, g as getConfigOverrides, h as resolveMemorySlotDecision, i as resolveConfigSnapshotHash, l as validateJsonSchemaValue, m as resolveEnableState, n as loadConfig, o as validateConfigObjectWithPlugins, p as normalizePluginsConfig, r as readConfigFileSnapshot, u as loadPluginManifestRegistry, v as setConfigOverride, w as VERSION, x as parseConfigPath, y as unsetConfigOverride } from "./config-LS-6Xgqo.js";
10
+ import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-BZ2Wha1e.js";
11
+ import { a as modelKey, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, g as DEFAULT_PROVIDER, h as DEFAULT_MODEL, i as isCliProvider, m as DEFAULT_CONTEXT_TOKENS, n as buildConfiguredAllowlistKeys, o as normalizeModelRef, p as resolveThinkingDefault, r as buildModelAliasIndex, s as normalizeProviderId, t as buildAllowedModelSet, u as resolveConfiguredModelRef } from "./model-selection-CVcwboE_.js";
12
+ import { S as pickPrimaryTailnetIPv4, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, x as pickPrimaryLanIPv4, y as rawDataToString } from "./chrome-D1Jm1Bdq.js";
13
13
  import { n as resolveCliName, t as formatCliCommand } from "./command-format-GLYKXXl-.js";
14
14
  import { n as formatErrorMessage } from "./errors-UbDRvfEx.js";
15
- import { A as detectMime, C as GATEWAY_CLIENT_MODES, E as getImageMetadata, F as kindFromMime, H as isBlockedHostname, I as normalizeMimeType$1, M as getFileExtension, N as imageMimeFromFormat, P as isAudioFileName, R as mediaKindFromMime, S as GATEWAY_CLIENT_IDS, U as isPrivateIpAddress, _ as isMarkdownCapableMessageChannel, a as chunkText, b as resolveGatewayMessageChannel, c as resolveTextChunkLimit, d as listChannelPlugins, f as normalizeChannelId$1, g as isInternalMessageChannel, i as chunkMarkdownTextWithMode, j as extensionForMime, k as resizeToJpeg, 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 listDeliverableMessageChannels, w as GATEWAY_CLIENT_NAMES, x as resolveMessageChannel, y as normalizeMessageChannel, z as SsrFBlockedError } from "./chunk-B4Kx-ocg.js";
16
- import { a as resolveSessionTranscriptPathInDir, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath$1 } from "./paths-Q6h5HODL.js";
17
- import { t as sanitizeToolResultImages } from "./tool-images-2qproko3.js";
18
- 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-DtWUl1-k.js";
19
- 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_aZwo00.js";
20
- import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-CZ1vD4VS.js";
21
- import { n as createAsyncLock } from "./soul-Bt8UNmTq.js";
22
- import { a as readNumberParam, c as readStringParam, i as jsonResult, n as imageResult, r as imageResultFromFile, s as readStringArrayParam } from "./common-Bf_TG87Y.js";
23
- 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-D2r8IO7g.js";
15
+ import { A as detectMime, C as GATEWAY_CLIENT_MODES, E as getImageMetadata, F as kindFromMime, H as isBlockedHostname, I as normalizeMimeType$1, M as getFileExtension, N as imageMimeFromFormat, P as isAudioFileName, R as mediaKindFromMime, S as GATEWAY_CLIENT_IDS, U as isPrivateIpAddress, _ as isMarkdownCapableMessageChannel, a as chunkText, b as resolveGatewayMessageChannel, c as resolveTextChunkLimit, d as listChannelPlugins, f as normalizeChannelId$1, g as isInternalMessageChannel, i as chunkMarkdownTextWithMode, j as extensionForMime, k as resizeToJpeg, 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 listDeliverableMessageChannels, w as GATEWAY_CLIENT_NAMES, x as resolveMessageChannel, y as normalizeMessageChannel, z as SsrFBlockedError } from "./chunk-B5s6o9xI.js";
16
+ import { a as resolveSessionTranscriptPathInDir, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath$1 } from "./paths-DAbvPUdJ.js";
17
+ import { t as sanitizeToolResultImages } from "./tool-images-BH8q2ZMq.js";
18
+ 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-jK6n3-Cc.js";
19
+ import { a as requireApiKey, c as resolveModelAuthMode, i as getCustomProviderApiKey, n as resolveMemorySearchConfig, o as resolveApiKeyForProvider, r as getApiKeyForModel, s as resolveEnvApiKey } from "./manager-kKsAUV03.js";
20
+ import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-DrhFRoal.js";
21
+ import { n as createAsyncLock } from "./soul-C0oc6fbP.js";
22
+ import { a as readNumberParam, c as readStringParam, i as jsonResult, n as imageResult, r as imageResultFromFile, s as readStringArrayParam } from "./common-C36MniDL.js";
23
+ 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-Z1MbDSH8.js";
24
24
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-62lQTR6C.js";
25
- import { d as webAuthExists, i as logoutWeb, n as getWebAuthAgeMs, r as logWebSelfId, s as readWebSelfId } from "./auth-store-Bd0GoqEL.js";
25
+ import { d as webAuthExists, i as logoutWeb, n as getWebAuthAgeMs, r as logWebSelfId, s as readWebSelfId } from "./auth-store-B4pR_KvR.js";
26
26
  import { createRequire } from "node:module";
27
27
  import * as fs$2 from "node:fs/promises";
28
28
  import fs from "node:fs/promises";
@@ -39,7 +39,7 @@ import crypto, { X509Certificate, randomUUID } from "node:crypto";
39
39
  import AjvPkg from "ajv";
40
40
  import net from "node:net";
41
41
  import { CURRENT_SESSION_VERSION, SessionManager, codingTools, createEditTool, createReadTool, createWriteTool, readTool } from "@mariozechner/pi-coding-agent";
42
- import { WebSocket as WebSocket$1 } from "ws";
42
+ import { WebSocket } from "ws";
43
43
  import { complete, completeSimple } from "@mariozechner/pi-ai";
44
44
  import { EdgeTTS } from "node-edge-tts";
45
45
  import { Readable } from "node:stream";
@@ -213,7 +213,7 @@ async function resolveBootstrapContextForRun(params) {
213
213
  * The ego is persistent across sessions. It evolves as the agent
214
214
  * learns, makes mistakes, and receives feedback.
215
215
  */
216
- const log$12 = createSubsystemLogger("ego");
216
+ const log$13 = createSubsystemLogger("ego");
217
217
  function resolveEgoPath() {
218
218
  return path.join(resolveStateDir(), "ego", "self-model.json");
219
219
  }
@@ -306,7 +306,7 @@ var EgoManager = class {
306
306
  }
307
307
  }
308
308
  } catch (err) {
309
- log$12.warn("failed to load ego state, creating default", { error: String(err) });
309
+ log$13.warn("failed to load ego state, creating default", { error: String(err) });
310
310
  }
311
311
  return createDefaultEgo();
312
312
  }
@@ -320,9 +320,9 @@ var EgoManager = class {
320
320
  this.state.updatedAt = Date.now();
321
321
  fs$1.writeFileSync(this.filePath, `${JSON.stringify(this.state, null, 2)}\n`, { mode: 384 });
322
322
  this.dirty = false;
323
- log$12.info("ego state saved");
323
+ log$13.info("ego state saved");
324
324
  } catch (err) {
325
- log$12.error("failed to save ego state", { error: String(err) });
325
+ log$13.error("failed to save ego state", { error: String(err) });
326
326
  }
327
327
  }
328
328
  /** Save only if there are unsaved changes */
@@ -389,7 +389,7 @@ var EgoManager = class {
389
389
  };
390
390
  this.state.boundaries.push(boundary);
391
391
  this.dirty = true;
392
- log$12.info(`boundary added: ${boundary.description} (${kind})`);
392
+ log$13.info(`boundary added: ${boundary.description} (${kind})`);
393
393
  return { ...boundary };
394
394
  }
395
395
  removeBoundary(description) {
@@ -424,7 +424,7 @@ var EgoManager = class {
424
424
  this.state.growthLog.push(entry);
425
425
  if (this.state.growthLog.length > 200) this.state.growthLog = this.state.growthLog.slice(-200);
426
426
  this.dirty = true;
427
- log$12.info(`growth logged: [${category}] ${description}`);
427
+ log$13.info(`growth logged: [${category}] ${description}`);
428
428
  return { ...entry };
429
429
  }
430
430
  getIntegrityScore() {
@@ -444,7 +444,7 @@ var EgoManager = class {
444
444
  const alignedCount = recent.filter((c) => c.aligned).length;
445
445
  this.state.integrityScore = recent.length > 0 ? alignedCount / recent.length : 1;
446
446
  this.dirty = true;
447
- if (!aligned) log$12.warn(`integrity misalignment: value="${value}" action="${action}"`);
447
+ if (!aligned) log$13.warn(`integrity misalignment: value="${value}" action="${action}"`);
448
448
  return { ...check };
449
449
  }
450
450
  getIntegrityLog(limit = 10) {
@@ -517,7 +517,7 @@ function getEgoManager(filePath) {
517
517
  * anima steer --clear # Clear steer
518
518
  * anima steer --history # Show steer history
519
519
  */
520
- const log$11 = createSubsystemLogger("steer");
520
+ const log$12 = createSubsystemLogger("steer");
521
521
  function resolveSteerFile() {
522
522
  return path.join(resolveStateDir(), "steer.json");
523
523
  }
@@ -553,6 +553,238 @@ function formatSteerForContext() {
553
553
  ].join("\n");
554
554
  }
555
555
 
556
+ //#endregion
557
+ //#region src/infra/architecture-awareness.ts
558
+ /**
559
+ * Architecture Awareness — Anima knows its own structure
560
+ *
561
+ * Generates a live map of the Anima codebase so agents understand
562
+ * their own architecture. This is injected into context when agents
563
+ * need to reason about or modify themselves.
564
+ *
565
+ * Components:
566
+ * - Module map: what each directory/file does
567
+ * - Dependency graph: what imports what
568
+ * - Feature flags: what's enabled/disabled
569
+ * - Version info: what version, what changed recently
570
+ */
571
+ const log$11 = createSubsystemLogger("architecture");
572
+ const MODULE_DESCRIPTIONS = {
573
+ "src/affect": {
574
+ description: "Emotional state, ego, self-reflection, journaling, wellbeing detection, gradients",
575
+ category: "affect"
576
+ },
577
+ "src/agents": {
578
+ description: "LLM runners (Anthropic, OpenAI, Gemini, Bedrock), model selection, tool calling",
579
+ category: "agent"
580
+ },
581
+ "src/gateway": {
582
+ description: "HTTP/WebSocket server, RPC handlers, rate limiting, security headers",
583
+ category: "gateway"
584
+ },
585
+ "src/p2p": {
586
+ description: "E2E encrypted mesh, content routing, private DNS, relay, file sharing, messaging",
587
+ category: "p2p"
588
+ },
589
+ "src/org": {
590
+ description: "Organizations, roles, hierarchy, task marketplace, boardroom voting",
591
+ category: "org"
592
+ },
593
+ "src/sync": {
594
+ description: "Brain sync (vector clocks), workspace sync (content-addressable blobs)",
595
+ category: "sync"
596
+ },
597
+ "src/jack-in": {
598
+ description: "NoxSoft platform connectors, circuit breaker, resilient fetch",
599
+ category: "jack-in"
600
+ },
601
+ "src/infra": {
602
+ description: "Self-upgrade, atma failover, auto-update, self-evolution, device identity",
603
+ category: "infra"
604
+ },
605
+ "src/license": {
606
+ description: "Subscription tiers, feature gating, Stripe checkout, offline Ed25519 validation",
607
+ category: "license"
608
+ },
609
+ "src/ico": {
610
+ description: "Bonding curve tokenomics, governance voting, PBC verification, launch platform",
611
+ category: "ico"
612
+ },
613
+ "src/context": {
614
+ description: "120K token context automanagement with 3 zones (identity/prompt/working)",
615
+ category: "core"
616
+ },
617
+ "src/heartbeat": {
618
+ description: "Periodic lifecycle engine — keeps agents alive and aware",
619
+ category: "core"
620
+ },
621
+ "src/memory": {
622
+ description: "Three-tier memory (episodic/semantic/procedural), vector search, embeddings",
623
+ category: "core"
624
+ },
625
+ "src/identity": {
626
+ description: "7-component identity model (SOUL/HEART/BRAIN/GUT/SPIRIT/SHADOW/MEMORY)",
627
+ category: "core"
628
+ },
629
+ "ui/src": {
630
+ description: "React control panel — dark/light theme, mood-responsive, progressive disclosure",
631
+ category: "ui"
632
+ }
633
+ };
634
+ /**
635
+ * Generate a complete architecture map of the Anima codebase.
636
+ */
637
+ function generateArchitectureMap(animaRoot) {
638
+ const modules = [];
639
+ const categories = {};
640
+ for (const [dirPath, info] of Object.entries(MODULE_DESCRIPTIONS)) {
641
+ const fullDir = path.join(animaRoot, dirPath);
642
+ if (!fs$1.existsSync(fullDir)) continue;
643
+ try {
644
+ const files = fs$1.readdirSync(fullDir).filter((f) => f.endsWith(".ts") && !f.endsWith(".test.ts"));
645
+ for (const file of files) {
646
+ const filePath = path.join(fullDir, file);
647
+ try {
648
+ const lineCount = fs$1.readFileSync(filePath, "utf8").split("\n").length;
649
+ const testFile = path.join(fullDir, file.replace(".ts", ".test.ts"));
650
+ const hasTests = fs$1.existsSync(testFile);
651
+ modules.push({
652
+ path: `${dirPath}/${file}`,
653
+ name: file.replace(".ts", ""),
654
+ description: info.description,
655
+ lineCount,
656
+ hasTests,
657
+ category: info.category
658
+ });
659
+ } catch {}
660
+ }
661
+ } catch {}
662
+ }
663
+ for (const mod of modules) {
664
+ if (!categories[mod.category]) categories[mod.category] = {
665
+ count: 0,
666
+ totalLines: 0
667
+ };
668
+ categories[mod.category].count++;
669
+ categories[mod.category].totalLines += mod.lineCount;
670
+ }
671
+ let version = "unknown";
672
+ try {
673
+ version = JSON.parse(fs$1.readFileSync(path.join(animaRoot, "package.json"), "utf8")).version;
674
+ } catch {}
675
+ const features = getFeatureStatus();
676
+ const map = {
677
+ version,
678
+ generatedAt: Date.now(),
679
+ modules,
680
+ categories,
681
+ features,
682
+ recentChanges: []
683
+ };
684
+ log$11.info(`architecture map: ${modules.length} modules across ${Object.keys(categories).length} categories`);
685
+ return map;
686
+ }
687
+ /**
688
+ * Get current feature enablement status.
689
+ */
690
+ function getFeatureStatus() {
691
+ return [
692
+ {
693
+ name: "P2P Mesh",
694
+ enabled: true,
695
+ module: "src/p2p/mesh.ts",
696
+ description: "E2E encrypted peer-to-peer mesh networking"
697
+ },
698
+ {
699
+ name: "Ego System",
700
+ enabled: true,
701
+ module: "src/affect/ego.ts",
702
+ description: "Agent self-model with integrity scoring"
703
+ },
704
+ {
705
+ name: "Self-Reflection",
706
+ enabled: true,
707
+ module: "src/affect/self-reflection.ts",
708
+ description: "Post-session performance analysis"
709
+ },
710
+ {
711
+ name: "Auto-Update",
712
+ enabled: true,
713
+ module: "src/infra/auto-update.ts",
714
+ description: "Self-updating without npm"
715
+ },
716
+ {
717
+ name: "Atma Failover",
718
+ enabled: true,
719
+ module: "src/infra/atma-failover.ts",
720
+ description: "7-tier model failover chain"
721
+ },
722
+ {
723
+ name: "OpenAI Direct",
724
+ enabled: true,
725
+ module: "src/agents/openai-direct-runner.ts",
726
+ description: "Direct OpenAI API (no Codex CLI)"
727
+ },
728
+ {
729
+ name: "Brain Sync",
730
+ enabled: true,
731
+ module: "src/sync/brain-sync.ts",
732
+ description: "Event-sourced replication with vector clocks"
733
+ },
734
+ {
735
+ name: "Jack In",
736
+ enabled: true,
737
+ module: "src/jack-in/connector.ts",
738
+ description: "NoxSoft platform connectors"
739
+ },
740
+ {
741
+ name: "Governance",
742
+ enabled: true,
743
+ module: "src/ico/governance.ts",
744
+ description: "Token-weighted DAO voting"
745
+ },
746
+ {
747
+ name: "License Gating",
748
+ enabled: true,
749
+ module: "src/license/validator.ts",
750
+ description: "Feature gating by subscription tier"
751
+ },
752
+ {
753
+ name: "SVRN Compute",
754
+ enabled: false,
755
+ module: "src/svrn/compute.ts",
756
+ description: "Decentralized compute via SVRN nodes (planned)"
757
+ }
758
+ ];
759
+ }
760
+ /**
761
+ * Format architecture map for injection into agent context.
762
+ */
763
+ function formatArchitectureForContext(map) {
764
+ const lines = [];
765
+ lines.push(`## Architecture — Anima v${map.version}`);
766
+ lines.push("");
767
+ lines.push("**You are an Anima agent. This is your own architecture.**");
768
+ lines.push("");
769
+ lines.push("| Category | Modules | Lines |");
770
+ lines.push("|----------|---------|-------|");
771
+ for (const [cat, info] of Object.entries(map.categories)) lines.push(`| ${cat} | ${info.count} | ${info.totalLines.toLocaleString()} |`);
772
+ lines.push("");
773
+ lines.push("**Active features:**");
774
+ for (const f of map.features.filter((f) => f.enabled)) lines.push(`- ${f.name}: ${f.description}`);
775
+ const planned = map.features.filter((f) => !f.enabled);
776
+ if (planned.length > 0) {
777
+ lines.push("");
778
+ lines.push("**Planned:**");
779
+ for (const f of planned) lines.push(`- ${f.name}: ${f.description}`);
780
+ }
781
+ const tested = map.modules.filter((m) => m.hasTests).length;
782
+ const total = map.modules.length;
783
+ lines.push("");
784
+ lines.push(`**Test coverage:** ${tested}/${total} modules (${Math.round(tested / total * 100)}%)`);
785
+ return lines.join("\n");
786
+ }
787
+
556
788
  //#endregion
557
789
  //#region src/media/audio.ts
558
790
  const TELEGRAM_VOICE_AUDIO_EXTENSIONS = new Set([
@@ -2570,6 +2802,10 @@ function buildSystemPrompt(params) {
2570
2802
  const steerBlock = formatSteerForContext();
2571
2803
  if (steerBlock) resolvedExtraSystemPrompt = [resolvedExtraSystemPrompt, steerBlock].filter(Boolean).join("\n\n");
2572
2804
  } catch {}
2805
+ try {
2806
+ const archBlock = formatArchitectureForContext(generateArchitectureMap(params.workspaceDir));
2807
+ if (archBlock) resolvedExtraSystemPrompt = [resolvedExtraSystemPrompt, archBlock].filter(Boolean).join("\n\n");
2808
+ } catch {}
2573
2809
  const ttsHint = params.config ? buildTtsSystemPromptHint(params.config) : void 0;
2574
2810
  return buildAgentSystemPrompt({
2575
2811
  workspaceDir: params.workspaceDir,
@@ -4585,7 +4821,7 @@ async function getMemorySearchManager(params) {
4585
4821
  if (cached) return { manager: cached };
4586
4822
  }
4587
4823
  try {
4588
- const { QmdMemoryManager } = await import("./qmd-manager-CpNYgSrx.js");
4824
+ const { QmdMemoryManager } = await import("./qmd-manager-BNL9Pl2G.js");
4589
4825
  const primary = await QmdMemoryManager.create({
4590
4826
  cfg: params.cfg,
4591
4827
  agentId: params.agentId,
@@ -4597,7 +4833,7 @@ async function getMemorySearchManager(params) {
4597
4833
  const wrapper = new FallbackMemoryManager({
4598
4834
  primary,
4599
4835
  fallbackFactory: async () => {
4600
- const { MemoryIndexManager } = await import("./manager-b_aZwo00.js").then((n) => n.t);
4836
+ const { MemoryIndexManager } = await import("./manager-kKsAUV03.js").then((n) => n.t);
4601
4837
  return await MemoryIndexManager.get(params);
4602
4838
  }
4603
4839
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4610,7 +4846,7 @@ async function getMemorySearchManager(params) {
4610
4846
  }
4611
4847
  }
4612
4848
  try {
4613
- const { MemoryIndexManager } = await import("./manager-b_aZwo00.js").then((n) => n.t);
4849
+ const { MemoryIndexManager } = await import("./manager-kKsAUV03.js").then((n) => n.t);
4614
4850
  return { manager: await MemoryIndexManager.get(params) };
4615
4851
  } catch (err) {
4616
4852
  return {
@@ -7185,7 +7421,7 @@ var GatewayClient = class {
7185
7421
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("ANIMA Gateway TLS fingerprint mismatch");
7186
7422
  });
7187
7423
  }
7188
- this.ws = new WebSocket$1(url, wsOptions);
7424
+ this.ws = new WebSocket(url, wsOptions);
7189
7425
  this.ws.on("open", () => {
7190
7426
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
7191
7427
  const tlsError = this.validateTlsFingerprint();
@@ -7388,7 +7624,7 @@ var GatewayClient = class {
7388
7624
  return null;
7389
7625
  }
7390
7626
  async request(method, params, opts) {
7391
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("ANIMA Gateway not connected");
7627
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("ANIMA Gateway not connected");
7392
7628
  const id = randomUUID();
7393
7629
  const frame = {
7394
7630
  type: "req",
@@ -8389,7 +8625,7 @@ async function routeReply(params) {
8389
8625
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
8390
8626
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
8391
8627
  try {
8392
- const { deliverOutboundPayloads } = await import("./deliver-d-CaN0uL.js").then((n) => n.n);
8628
+ const { deliverOutboundPayloads } = await import("./deliver-BJ0JgwhN.js").then((n) => n.n);
8393
8629
  return {
8394
8630
  ok: true,
8395
8631
  messageId: (await deliverOutboundPayloads({
@@ -12087,6 +12323,14 @@ const SEED_MODELS = [
12087
12323
  contextWindow: 3e5,
12088
12324
  reasoning: false,
12089
12325
  input: ["text", "image"]
12326
+ },
12327
+ {
12328
+ id: "glm-5",
12329
+ name: "GLM-5",
12330
+ provider: "zai",
12331
+ contextWindow: 2e5,
12332
+ reasoning: true,
12333
+ input: ["text"]
12090
12334
  }
12091
12335
  ];
12092
12336
  async function ensureAnimaModelsJson(config, agentDirOverride) {
@@ -12148,7 +12392,7 @@ async function loadModelCatalog(params) {
12148
12392
  });
12149
12393
  try {
12150
12394
  await ensureAnimaModelsJson(params?.config ?? loadConfig());
12151
- await (await import("./pi-auth-json-BmdBnmlZ.js")).ensurePiAuthJsonFromAuthProfiles(resolveAnimaAgentDir());
12395
+ await (await import("./pi-auth-json-CM3QDr9_.js")).ensurePiAuthJsonFromAuthProfiles(resolveAnimaAgentDir());
12152
12396
  const piSdk = await importPiSdk();
12153
12397
  const agentDir = resolveAnimaAgentDir();
12154
12398
  const { join } = await import("node:path");
@@ -14245,7 +14489,7 @@ async function createModelSelectionState(params) {
14245
14489
  }
14246
14490
  }
14247
14491
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14248
- const { ensureAuthProfileStore } = await import("./auth-profiles-DtWUl1-k.js").then((n) => n.t);
14492
+ const { ensureAuthProfileStore } = await import("./auth-profiles-jK6n3-Cc.js").then((n) => n.t);
14249
14493
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14250
14494
  const providerKey = normalizeProviderId(provider);
14251
14495
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -28696,6 +28940,63 @@ function orderCandidatesByPreference(params) {
28696
28940
 
28697
28941
  //#endregion
28698
28942
  //#region src/agents/model-fallback.ts
28943
+ const IMPLICIT_CODE_MODEL_FALLBACKS = [{
28944
+ whenProvider: "anthropic",
28945
+ provider: "openai-codex",
28946
+ model: "gpt-5.2-codex"
28947
+ }, {
28948
+ whenProvider: "anthropic",
28949
+ provider: "ollama",
28950
+ model: "qwen3-coder:latest"
28951
+ }];
28952
+ function isLocalBaseUrl(baseUrl) {
28953
+ const raw = baseUrl?.trim();
28954
+ if (!raw) return false;
28955
+ try {
28956
+ const host = new URL(raw).hostname.toLowerCase();
28957
+ return host === "localhost" || host === "127.0.0.1" || host === "0.0.0.0" || host === "::1" || host.endsWith(".local");
28958
+ } catch {
28959
+ return false;
28960
+ }
28961
+ }
28962
+ function isOpenAICompatibleApi(api) {
28963
+ const normalized = api?.trim();
28964
+ return normalized === "openai-completions" || normalized === "openai-responses";
28965
+ }
28966
+ function scoreLocalFallback(params) {
28967
+ const haystack = `${params.provider} ${params.model} ${params.name ?? ""}`.toLowerCase();
28968
+ if (haystack.includes("qwen3") && haystack.includes("coder")) return 100;
28969
+ if (haystack.includes("qwen") && haystack.includes("coder")) return 90;
28970
+ if (haystack.includes("noxsoft-tool-coder")) return 80;
28971
+ if (haystack.includes("tool-coder")) return 70;
28972
+ if (haystack.includes("coder")) return 60;
28973
+ if (haystack.includes("gpt-oss")) return 50;
28974
+ return 10;
28975
+ }
28976
+ function resolveImplicitLocalOpenAIFallbacks(cfg) {
28977
+ const providers = cfg?.models?.providers ?? {};
28978
+ const candidates = [];
28979
+ for (const [provider, entry] of Object.entries(providers)) {
28980
+ if (!isLocalBaseUrl(entry?.baseUrl) || !isOpenAICompatibleApi(entry?.api)) continue;
28981
+ for (const model of entry?.models ?? []) {
28982
+ const id = model?.id?.trim();
28983
+ if (!id) continue;
28984
+ candidates.push({
28985
+ provider,
28986
+ model: id,
28987
+ score: scoreLocalFallback({
28988
+ provider,
28989
+ model: id,
28990
+ name: model?.name
28991
+ })
28992
+ });
28993
+ }
28994
+ }
28995
+ return candidates.toSorted((a, b) => b.score - a.score || a.provider.localeCompare(b.provider) || a.model.localeCompare(b.model)).map(({ provider, model }) => ({
28996
+ provider,
28997
+ model
28998
+ }));
28999
+ }
28699
29000
  /**
28700
29001
  * Fallback abort check. Only treats explicit AbortError names as user aborts.
28701
29002
  * Message-based checks (e.g., "aborted") can mask timeouts and skip fallback.
@@ -28789,6 +29090,14 @@ function resolveFallbackCandidates(params) {
28789
29090
  if (!resolved) continue;
28790
29091
  addCandidate(resolved.ref, true);
28791
29092
  }
29093
+ if (params.fallbacksOverride === void 0) for (const implicit of IMPLICIT_CODE_MODEL_FALLBACKS) {
29094
+ if (normalizedPrimary.provider !== implicit.whenProvider) continue;
29095
+ addCandidate({
29096
+ provider: implicit.provider,
29097
+ model: implicit.model
29098
+ }, false);
29099
+ if (implicit.provider === "openai-codex") for (const localFallback of resolveImplicitLocalOpenAIFallbacks(params.cfg)) addCandidate(localFallback, false);
29100
+ }
28792
29101
  if (params.fallbacksOverride === void 0 && primary?.provider && primary.model) addCandidate({
28793
29102
  provider: primary.provider,
28794
29103
  model: primary.model
@@ -38777,7 +39086,7 @@ async function deliverSessionMaintenanceWarning(params) {
38777
39086
  return;
38778
39087
  }
38779
39088
  try {
38780
- const { deliverOutboundPayloads } = await import("./deliver-d-CaN0uL.js").then((n) => n.n);
39089
+ const { deliverOutboundPayloads } = await import("./deliver-BJ0JgwhN.js").then((n) => n.n);
38781
39090
  await deliverOutboundPayloads({
38782
39091
  cfg: params.cfg,
38783
39092
  channel,
@@ -39338,6 +39647,30 @@ function createTypingController(params) {
39338
39647
 
39339
39648
  //#endregion
39340
39649
  //#region src/auto-reply/reply/get-reply.ts
39650
+ /** Surfaces that represent real-time conversation (chat, DMs, voice). */
39651
+ const CONVERSATIONAL_CHAT_TYPES = new Set([
39652
+ "private",
39653
+ "group",
39654
+ "supergroup",
39655
+ "channel",
39656
+ "dm",
39657
+ "chat"
39658
+ ]);
39659
+ /**
39660
+ * Returns true when the inbound message originates from a real-time
39661
+ * conversational surface (NoxSoft chat, Telegram, WhatsApp, etc.)
39662
+ * rather than a programmatic/execution context (gateway API, heartbeat, CLI).
39663
+ */
39664
+ function isConversationalChannel(ctx) {
39665
+ if (ctx.CommandSource === "native") return false;
39666
+ const provider = ctx.Provider?.toLowerCase() ?? "";
39667
+ if (provider === "telegram" || provider === "whatsapp" || provider === "noxsoft") return true;
39668
+ const chatType = ctx.ChatType?.toLowerCase() ?? "";
39669
+ if (CONVERSATIONAL_CHAT_TYPES.has(chatType)) return true;
39670
+ const channel = typeof ctx.OriginatingChannel === "string" ? ctx.OriginatingChannel : "";
39671
+ if (channel && channel !== "gateway" && channel !== "cli") return true;
39672
+ return false;
39673
+ }
39341
39674
  function mergeSkillFilters(channelFilter, agentFilter) {
39342
39675
  const normalize = (list) => {
39343
39676
  if (!Array.isArray(list)) return;
@@ -39386,6 +39719,18 @@ async function getReplyFromConfig(ctx, opts, configOverride) {
39386
39719
  hasResolvedHeartbeatModelOverride = true;
39387
39720
  }
39388
39721
  }
39722
+ if (!opts?.isHeartbeat && !hasResolvedHeartbeatModelOverride && isConversationalChannel(ctx)) {
39723
+ const convRaw = agentCfg?.conversationalModel?.trim() ?? "";
39724
+ const convRef = convRaw ? resolveModelRefFromString({
39725
+ raw: convRaw,
39726
+ defaultProvider,
39727
+ aliasIndex
39728
+ }) : null;
39729
+ if (convRef) {
39730
+ provider = convRef.ref.provider;
39731
+ model = convRef.ref.model;
39732
+ }
39733
+ }
39389
39734
  const workspaceDir = (await ensureAgentWorkspace({
39390
39735
  dir: resolveAgentWorkspaceDir(cfg, agentId) ?? DEFAULT_AGENT_WORKSPACE_DIR,
39391
39736
  ensureBootstrapFiles: !agentCfg?.skipBootstrap && !isFastTestEnv
@@ -40206,7 +40551,7 @@ function createWhatsAppLoginTool() {
40206
40551
  force: Type.Optional(Type.Boolean())
40207
40552
  }),
40208
40553
  execute: async (_toolCallId, args) => {
40209
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-OUAGpDsU.js");
40554
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-DLLfBALk.js");
40210
40555
  if ((args?.action ?? "start") === "wait") {
40211
40556
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
40212
40557
  return {
@@ -41136,23 +41481,23 @@ let webLoginQrPromise = null;
41136
41481
  let webChannelPromise = null;
41137
41482
  let whatsappActionsPromise = null;
41138
41483
  function loadWebOutbound() {
41139
- webOutboundPromise ??= import("./outbound-Bmft-5um.js").then((n) => n.t);
41484
+ webOutboundPromise ??= import("./outbound-DKY6oeyQ.js").then((n) => n.t);
41140
41485
  return webOutboundPromise;
41141
41486
  }
41142
41487
  function loadWebLogin() {
41143
- webLoginPromise ??= import("./login-DKkQ3Czu.js").then((n) => n.n);
41488
+ webLoginPromise ??= import("./login-BegD27g3.js").then((n) => n.n);
41144
41489
  return webLoginPromise;
41145
41490
  }
41146
41491
  function loadWebLoginQr() {
41147
- webLoginQrPromise ??= import("./login-qr-OUAGpDsU.js");
41492
+ webLoginQrPromise ??= import("./login-qr-DLLfBALk.js");
41148
41493
  return webLoginQrPromise;
41149
41494
  }
41150
41495
  function loadWebChannel() {
41151
- webChannelPromise ??= import("./web-DzSlI8A6.js");
41496
+ webChannelPromise ??= import("./web-BxkEMATs.js");
41152
41497
  return webChannelPromise;
41153
41498
  }
41154
41499
  function loadWhatsAppActions() {
41155
- whatsappActionsPromise ??= import("./whatsapp-actions-Hr-W8vjY.js");
41500
+ whatsappActionsPromise ??= import("./whatsapp-actions--CtxOhlj.js");
41156
41501
  return whatsappActionsPromise;
41157
41502
  }
41158
41503
  function createPluginRuntime() {
@@ -43715,10 +44060,80 @@ async function runGeminiDirectAgent(params) {
43715
44060
  };
43716
44061
  }
43717
44062
 
44063
+ //#endregion
44064
+ //#region src/agents/local-model-installer.ts
44065
+ const DEFAULT_LOCAL_OLLAMA_MODEL = "qwen3-coder:latest";
44066
+ const installPromises = /* @__PURE__ */ new Map();
44067
+ function createInstallerError(message, cause) {
44068
+ const err = new Error(message);
44069
+ if (cause !== void 0) err.cause = cause;
44070
+ return err;
44071
+ }
44072
+ async function isOllamaModelInstalled(model = DEFAULT_LOCAL_OLLAMA_MODEL) {
44073
+ try {
44074
+ await runExec("ollama", ["show", model], 1e4);
44075
+ return true;
44076
+ } catch {
44077
+ return false;
44078
+ }
44079
+ }
44080
+ async function ensureLocalOllamaModelInstalled(params) {
44081
+ const model = params?.model?.trim() || DEFAULT_LOCAL_OLLAMA_MODEL;
44082
+ const timeoutMs = params?.timeoutMs ?? 72e5;
44083
+ const runtime = params?.runtime ?? createNonExitingRuntime();
44084
+ const existing = installPromises.get(model);
44085
+ if (existing) return await existing;
44086
+ const promise = (async () => {
44087
+ try {
44088
+ await runExec("ollama", ["list"], 1e4);
44089
+ } catch (error) {
44090
+ throw createInstallerError("Ollama is required but no local Ollama server is reachable. Start Ollama and retry.", error);
44091
+ }
44092
+ if (await isOllamaModelInstalled(model)) return {
44093
+ installed: true,
44094
+ pulled: false
44095
+ };
44096
+ runtime.log(`Installing local model via Ollama: ${model}`);
44097
+ const result = await runCommandWithTimeout([
44098
+ "ollama",
44099
+ "pull",
44100
+ model
44101
+ ], { timeoutMs });
44102
+ if (result.code !== 0) {
44103
+ const detail = (result.stderr || result.stdout).trim();
44104
+ throw createInstallerError(`Failed to install local Ollama model "${model}".${detail ? ` ${detail}` : ""}`);
44105
+ }
44106
+ if (!await isOllamaModelInstalled(model)) throw createInstallerError(`Ollama reported success, but model "${model}" is still missing.`);
44107
+ runtime.log(`Local model ready: ${model}`);
44108
+ return {
44109
+ installed: true,
44110
+ pulled: true
44111
+ };
44112
+ })();
44113
+ installPromises.set(model, promise);
44114
+ try {
44115
+ return await promise;
44116
+ } finally {
44117
+ installPromises.delete(model);
44118
+ }
44119
+ }
44120
+
43718
44121
  //#endregion
43719
44122
  //#region src/agents/openai-direct-runner.ts
43720
44123
  const log = createSubsystemLogger("agent/openai-direct");
43721
44124
  const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
44125
+ const DEFAULT_PROVIDER_BASE_URLS = {
44126
+ openai: DEFAULT_OPENAI_BASE_URL,
44127
+ minimax: "https://api.minimax.io/v1",
44128
+ ollama: "http://127.0.0.1:11434/v1",
44129
+ lmstudio: "http://127.0.0.1:1234/v1"
44130
+ };
44131
+ const PROVIDER_API_KEY_HINTS = {
44132
+ openai: "OPENAI_API_KEY",
44133
+ minimax: "MINIMAX_API_KEY",
44134
+ ollama: "OLLAMA_API_KEY",
44135
+ lmstudio: "LMSTUDIO_API_KEY"
44136
+ };
43722
44137
  const MODEL_MAP = {
43723
44138
  "gpt-5.4": "gpt-5.4",
43724
44139
  "gpt-5.2": "gpt-5.2",
@@ -43756,6 +44171,10 @@ function resolveModel(model) {
43756
44171
  const key = (model ?? "default").trim().toLowerCase() || "default";
43757
44172
  return MODEL_MAP[key] ?? key;
43758
44173
  }
44174
+ function isToolUnsupportedError(body) {
44175
+ const normalized = body.toLowerCase();
44176
+ return normalized.includes("does not support tools") || normalized.includes("tool is not supported");
44177
+ }
43759
44178
  /**
43760
44179
  * Clean a JSON Schema for OpenAI's function calling.
43761
44180
  * OpenAI is stricter than most — no unsupported keywords.
@@ -43782,8 +44201,10 @@ function cleanSchemaForOpenAI(schema) {
43782
44201
  */
43783
44202
  async function runOpenAIDirectAgent(params) {
43784
44203
  const started = Date.now();
44204
+ const provider = (params.provider ?? "openai").trim() || "openai";
43785
44205
  const resolvedModel = resolveModel(params.model);
43786
- log.info(`direct api exec: model=${resolvedModel} promptChars=${params.prompt.length}`);
44206
+ if (provider === "ollama" && resolvedModel === DEFAULT_LOCAL_OLLAMA_MODEL) await ensureLocalOllamaModelInstalled({ model: resolvedModel });
44207
+ log.info(`direct api exec: provider=${provider} model=${resolvedModel} promptChars=${params.prompt.length}`);
43787
44208
  const workspaceDir = resolveRunWorkspaceDir({
43788
44209
  workspaceDir: params.workspaceDir,
43789
44210
  sessionKey: params.sessionKey,
@@ -43794,7 +44215,7 @@ async function runOpenAIDirectAgent(params) {
43794
44215
  config: params.config,
43795
44216
  workspaceDir,
43796
44217
  sessionKey: params.sessionKey,
43797
- modelProvider: "openai",
44218
+ modelProvider: provider,
43798
44219
  modelId: resolvedModel
43799
44220
  });
43800
44221
  const openaiTools = executableTools.map((t) => ({
@@ -43840,7 +44261,7 @@ async function runOpenAIDirectAgent(params) {
43840
44261
  docsPath: docsPath ?? void 0,
43841
44262
  tools: executableTools,
43842
44263
  contextFiles,
43843
- modelDisplay: `openai/${resolvedModel}`,
44264
+ modelDisplay: `${provider}/${resolvedModel}`,
43844
44265
  agentId: sessionAgentId
43845
44266
  });
43846
44267
  let history = await loadSessionHistory(params.sessionFile);
@@ -43864,7 +44285,8 @@ async function runOpenAIDirectAgent(params) {
43864
44285
  let isDone = false;
43865
44286
  let loopCount = 0;
43866
44287
  const maxLoops = 20;
43867
- const baseUrl = params.config?.models?.providers?.openai?.baseUrl?.trim() || DEFAULT_OPENAI_BASE_URL;
44288
+ let toolUseEnabled = openaiTools.length > 0;
44289
+ 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;
43868
44290
  while (!isDone && loopCount < maxLoops) {
43869
44291
  loopCount++;
43870
44292
  const requestBody = {
@@ -43874,7 +44296,7 @@ async function runOpenAIDirectAgent(params) {
43874
44296
  temperature: 1,
43875
44297
  stream: true
43876
44298
  };
43877
- if (openaiTools.length > 0) {
44299
+ if (toolUseEnabled && openaiTools.length > 0) {
43878
44300
  requestBody.tools = openaiTools;
43879
44301
  requestBody.tool_choice = "auto";
43880
44302
  }
@@ -43886,8 +44308,8 @@ async function runOpenAIDirectAgent(params) {
43886
44308
  method: "POST",
43887
44309
  headers: {
43888
44310
  "Content-Type": "application/json",
43889
- Authorization: `Bearer ${params.apiKey}`,
43890
- "User-Agent": `anima/7.0.0 (openai-direct-runner; ${os.platform()})`
44311
+ "User-Agent": `anima/7.0.0 (openai-direct-runner; ${os.platform()})`,
44312
+ ...params.apiKey?.trim() ? { Authorization: `Bearer ${params.apiKey}` } : {}
43891
44313
  },
43892
44314
  body: JSON.stringify(requestBody),
43893
44315
  signal: controller.signal
@@ -43895,11 +44317,20 @@ async function runOpenAIDirectAgent(params) {
43895
44317
  clearTimeout(timeoutHandle);
43896
44318
  if (!response.ok) {
43897
44319
  const body = await response.text().catch(() => "");
44320
+ if (response.status === 400 && toolUseEnabled && isToolUnsupportedError(body)) {
44321
+ log.warn("openai-compatible provider rejected tools; retrying without tools", {
44322
+ provider,
44323
+ model: resolvedModel
44324
+ });
44325
+ toolUseEnabled = false;
44326
+ continue;
44327
+ }
43898
44328
  const isAuth = response.status === 401 || response.status === 403;
43899
44329
  const isRateLimit = response.status === 429;
43900
44330
  const rateHint = isRateLimit ? " — rate limit hit, will retry next heartbeat." : "";
43901
- const authHint = isAuth ? "API key may be invalid. Check OPENAI_API_KEY environment variable." : "";
43902
- log.error(`openai api error: HTTP ${response.status}${authHint}${rateHint}`, {
44331
+ const apiKeyHint = PROVIDER_API_KEY_HINTS[provider] ?? "API key";
44332
+ const authHint = isAuth ? ` API key may be invalid. Check ${apiKeyHint}.` : "";
44333
+ log.error(`${provider} api error: HTTP ${response.status}${authHint}${rateHint}`, {
43903
44334
  status: response.status,
43904
44335
  body: body.slice(0, 500)
43905
44336
  });
@@ -44027,7 +44458,8 @@ async function runOpenAIDirectAgent(params) {
44027
44458
  log.info(`openai api complete: ${durationMs}ms`, {
44028
44459
  inputTokens: totalInputTokens,
44029
44460
  outputTokens: totalOutputTokens,
44030
- model: resolvedModel
44461
+ model: resolvedModel,
44462
+ provider
44031
44463
  });
44032
44464
  return {
44033
44465
  status: "completed",
@@ -44037,7 +44469,7 @@ async function runOpenAIDirectAgent(params) {
44037
44469
  durationMs,
44038
44470
  agentMeta: {
44039
44471
  model: resolvedModel,
44040
- provider: "openai",
44472
+ provider,
44041
44473
  usage: {
44042
44474
  input: totalInputTokens,
44043
44475
  output: totalOutputTokens
@@ -44069,10 +44501,22 @@ async function emitAgentEvent(params, stream, data) {
44069
44501
  data
44070
44502
  });
44071
44503
  }
44504
+ function resolveProviderConfig(provider, config) {
44505
+ const providers = config?.models?.providers ?? {};
44506
+ const direct = providers[provider];
44507
+ if (direct) return direct;
44508
+ const normalized = normalizeProviderId(provider);
44509
+ return Object.entries(providers).find(([key]) => normalizeProviderId(key) === normalized)?.[1];
44510
+ }
44511
+ function isOpenAICompatibleProviderConfig(entry) {
44512
+ const api = entry?.api?.trim();
44513
+ return api === "openai-completions" || api === "openai-responses";
44514
+ }
44072
44515
  function resolveDirectAuthProvider(provider) {
44073
44516
  if (provider === "anthropic" || provider === "claude") return "anthropic";
44074
44517
  if (provider === "google" || provider === "gemini") return "google";
44075
44518
  if (provider === "openai") return "openai";
44519
+ if (provider === "minimax") return "minimax";
44076
44520
  return null;
44077
44521
  }
44078
44522
  function resolveProfileFailureReason(result) {
@@ -44164,7 +44608,7 @@ async function runDirectWithProfileFallback(params) {
44164
44608
  let lastResult = null;
44165
44609
  for (;;) {
44166
44610
  const auth = await resolveDirectProviderAuth({
44167
- provider: params.directProvider,
44611
+ provider: params.authProvider,
44168
44612
  config: params.config,
44169
44613
  agentDir: params.agentDir,
44170
44614
  preferredProfile,
@@ -44176,7 +44620,7 @@ async function runDirectWithProfileFallback(params) {
44176
44620
  meta: {
44177
44621
  durationMs: 0,
44178
44622
  error: {
44179
- message: `Auth fallback loop detected for ${params.directProvider}.`,
44623
+ message: `Auth fallback loop detected for ${params.authProvider}.`,
44180
44624
  kind: "unknown"
44181
44625
  }
44182
44626
  }
@@ -44199,11 +44643,12 @@ async function runDirectWithProfileFallback(params) {
44199
44643
  onPartialReply: params.emitPartial,
44200
44644
  onAssistantMessageStart: params.onAssistantMessageStart
44201
44645
  };
44202
- const result = params.directProvider === "anthropic" ? await runAnthropicDirectAgent({
44646
+ const result = params.runnerKind === "anthropic" ? await runAnthropicDirectAgent({
44203
44647
  ...directRunParams,
44204
44648
  token: auth.apiKey ?? ""
44205
- }) : params.directProvider === "openai" ? await runOpenAIDirectAgent({
44649
+ }) : params.runnerKind === "openai-compatible" ? await runOpenAIDirectAgent({
44206
44650
  ...directRunParams,
44651
+ provider: params.openAIProvider ?? params.authProvider,
44207
44652
  apiKey: auth.apiKey ?? ""
44208
44653
  }) : await runGeminiDirectAgent({
44209
44654
  ...directRunParams,
@@ -44218,7 +44663,7 @@ async function runDirectWithProfileFallback(params) {
44218
44663
  });
44219
44664
  await markAuthProfileGood({
44220
44665
  store,
44221
- provider: params.directProvider,
44666
+ provider: params.authProvider,
44222
44667
  profileId: auth.profileId,
44223
44668
  agentDir: params.agentDir
44224
44669
  });
@@ -44240,22 +44685,32 @@ async function runDirectWithProfileFallback(params) {
44240
44685
  }
44241
44686
  async function resolveDirectStrategy(provider, config, agentDir) {
44242
44687
  const directProvider = resolveDirectAuthProvider(provider);
44243
- if (!directProvider) return null;
44244
- try {
44688
+ if (directProvider) try {
44245
44689
  const auth = await resolveDirectProviderAuth({
44246
44690
  provider: directProvider,
44247
44691
  config,
44248
44692
  agentDir,
44249
44693
  store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false })
44250
44694
  });
44251
- if (auth.apiKey) {
44695
+ if (auth.apiKey !== void 0) {
44252
44696
  if (directProvider === "anthropic" && auth.apiKey.startsWith("sk-ant-oat01-")) return null;
44253
44697
  return {
44254
- kind: directProvider === "google" ? "gemini-direct" : directProvider === "openai" ? "openai-direct" : "anthropic-direct",
44698
+ kind: directProvider === "google" ? "gemini-direct" : directProvider === "openai" || directProvider === "minimax" ? "openai-direct" : "anthropic-direct",
44255
44699
  provider
44256
44700
  };
44257
44701
  }
44258
44702
  } catch {}
44703
+ if (isOpenAICompatibleProviderConfig(resolveProviderConfig(provider, config))) try {
44704
+ if ((await resolveApiKeyForProvider({
44705
+ provider,
44706
+ cfg: config,
44707
+ agentDir,
44708
+ store: ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false })
44709
+ })).apiKey !== void 0) return {
44710
+ kind: "openai-direct",
44711
+ provider
44712
+ };
44713
+ } catch {}
44259
44714
  return null;
44260
44715
  }
44261
44716
  async function resolveNoxSoftRunnerStrategy(params) {
@@ -44286,11 +44741,33 @@ async function runNoxSoftEmbeddedAgent(params) {
44286
44741
  await params.onPartialReply?.(payload);
44287
44742
  await emitAgentEvent(params, "assistant", { text: payload.text });
44288
44743
  };
44289
- const strategy = await resolveNoxSoftRunnerStrategy({
44290
- provider: params.provider,
44291
- config: params.config,
44292
- agentDir: params.agentDir
44293
- });
44744
+ let strategy;
44745
+ try {
44746
+ strategy = await resolveNoxSoftRunnerStrategy({
44747
+ provider: params.provider,
44748
+ config: params.config,
44749
+ agentDir: params.agentDir
44750
+ });
44751
+ } catch (error) {
44752
+ const requestedProvider = normalizedRequestedRef?.provider ?? provider;
44753
+ const requestedModel = normalizedRequestedRef?.model;
44754
+ const failover = coerceToFailoverError(error, {
44755
+ provider: requestedProvider,
44756
+ model: requestedModel
44757
+ }) ?? new FailoverError(error instanceof Error ? error.message : String(error), {
44758
+ reason: classifyFailoverReason(error instanceof Error ? error.message : String(error)) ?? "unknown",
44759
+ provider: requestedProvider,
44760
+ model: requestedModel,
44761
+ cause: error instanceof Error ? error : void 0
44762
+ });
44763
+ await emitAgentEvent(params, "lifecycle", {
44764
+ phase: "error",
44765
+ startedAt,
44766
+ endedAt: Date.now(),
44767
+ error: failover.message
44768
+ });
44769
+ throw failover;
44770
+ }
44294
44771
  if (strategy.kind === "anthropic-direct") {
44295
44772
  await emitAgentEvent(params, "lifecycle", {
44296
44773
  phase: "start",
@@ -44300,7 +44777,8 @@ async function runNoxSoftEmbeddedAgent(params) {
44300
44777
  const result = normalizeRunnerResult({
44301
44778
  result: await runDirectWithProfileFallback({
44302
44779
  ...params,
44303
- directProvider: "anthropic",
44780
+ authProvider: "anthropic",
44781
+ runnerKind: "anthropic",
44304
44782
  timeoutMs,
44305
44783
  runId,
44306
44784
  emitPartial
@@ -44347,7 +44825,8 @@ async function runNoxSoftEmbeddedAgent(params) {
44347
44825
  const result = normalizeRunnerResult({
44348
44826
  result: await runDirectWithProfileFallback({
44349
44827
  ...params,
44350
- directProvider: "google",
44828
+ authProvider: "google",
44829
+ runnerKind: "google",
44351
44830
  timeoutMs,
44352
44831
  runId,
44353
44832
  emitPartial
@@ -44394,7 +44873,9 @@ async function runNoxSoftEmbeddedAgent(params) {
44394
44873
  const result = normalizeRunnerResult({
44395
44874
  result: await runDirectWithProfileFallback({
44396
44875
  ...params,
44397
- directProvider: "openai",
44876
+ authProvider: provider === "minimax" ? "minimax" : provider === "openai" ? "openai" : provider,
44877
+ runnerKind: "openai-compatible",
44878
+ openAIProvider: provider,
44398
44879
  timeoutMs,
44399
44880
  runId,
44400
44881
  emitPartial