@noxsoft/anima 7.0.0 → 7.0.1

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 (120) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/{agent-BoAAHGEA.js → agent-BjD_hkGZ.js} +3 -3
  3. package/dist/{agent-DuW0onwk.js → agent-PoYM2xa7.js} +3 -3
  4. package/dist/{agents-BUXkSDns.js → agents-y3HCk1ks.js} +4 -4
  5. package/dist/{anthropic-direct-runner-DizCei79.js → anthropic-direct-runner-Bu8w-wlJ.js} +246 -10
  6. package/dist/{anthropic-direct-runner-OjcTAH6g.js → anthropic-direct-runner-C5pnwYzT.js} +246 -10
  7. package/dist/{auth-choice-B1iGnjuE.js → auth-choice-BYOaX-W4.js} +1 -1
  8. package/dist/{auth-choice-HF9x6xk2.js → auth-choice-CRP6z43z.js} +1 -1
  9. package/dist/{banner-Dpa5d1If.js → banner-XT5N0ZF4.js} +1 -1
  10. package/dist/build-info.json +3 -3
  11. package/dist/bundled/boot-md/handler.js +2 -2
  12. package/dist/bundled/session-memory/handler.js +1 -1
  13. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  14. package/dist/{channel-web-C5mzsaa3.js → channel-web-yWytZHhN.js} +2 -2
  15. package/dist/{cli-Cuq4bIg4.js → cli-C7mOU26p.js} +2 -2
  16. package/dist/{cli-X9ikywQ3.js → cli-DfcdnRcl.js} +2 -2
  17. package/dist/{command-registry-9V4uqrBV.js → command-registry-DUTqrmna.js} +12 -12
  18. package/dist/{completion-cli-DNWDwhab.js → completion-cli-BBm9JIHZ.js} +2 -2
  19. package/dist/{completion-cli-BtvcR-U5.js → completion-cli-Cpj91U30.js} +1 -1
  20. package/dist/{config-cli-fleq7-gq.js → config-cli-CF2ERR8G.js} +1 -1
  21. package/dist/{config-cli-DfHE3KG-.js → config-cli-Dmd4Oyjp.js} +1 -1
  22. package/dist/{configure-lkozxQed.js → configure-4jIAlOdj.js} +7 -7
  23. package/dist/{configure-B2Mfnwy_.js → configure-BE8TA8Yt.js} +3 -3
  24. package/dist/{configure-ZWxixuRA.js → configure-BfWsTKMF.js} +3 -3
  25. package/dist/{configure-SnvMHZPD.js → configure-CU3kulTq.js} +7 -7
  26. package/dist/{deps-BKLIBKjK.js → deps-DKPoFoa8.js} +1 -1
  27. package/dist/{doctor-D7kKyUVk.js → doctor-CFpVHDFT.js} +4 -4
  28. package/dist/{doctor-DmCnZ-jF.js → doctor-DOudOs1k.js} +4 -4
  29. package/dist/{doctor-completion-B9SBdMoR.js → doctor-completion-DfNyJGIj.js} +1 -1
  30. package/dist/{doctor-completion-BBvW4_J9.js → doctor-completion-R0UlpjIj.js} +1 -1
  31. package/dist/{engine-DpbYPop7.js → engine-BDDM-iAi.js} +1 -1
  32. package/dist/{engine-zmn3SOYa.js → engine-BDwYEVKi.js} +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/extensionAPI.js +1 -1
  35. package/dist/{gateway-cli-CEM1vBuk.js → gateway-cli-CFlPUx9N.js} +15 -15
  36. package/dist/{gateway-cli-iumkTohn.js → gateway-cli-DtIum1te.js} +16 -16
  37. package/dist/{health-Cndq9b7A.js → health-ngQNjXh4.js} +3 -3
  38. package/dist/{health-B5N6_UOf.js → health-yw_uaucz.js} +3 -3
  39. package/dist/{heartbeat-visibility-BQL13ZBH.js → heartbeat-visibility-BaL8JzkS.js} +1 -1
  40. package/dist/{heartbeat-visibility-CwcYugaR.js → heartbeat-visibility-mAzdNSiS.js} +1 -1
  41. package/dist/{hooks-cli-BZcvdIwE.js → hooks-cli-CPgLAn7a.js} +3 -3
  42. package/dist/{hooks-cli-DSlPBQSY.js → hooks-cli-D6YfDiUI.js} +3 -3
  43. package/dist/index.js +8 -8
  44. package/dist/llm-slug-generator.js +1 -1
  45. package/dist/{models-CdNeYfSp.js → models-BXdBXPMB.js} +3 -3
  46. package/dist/{models-cli-D7eSsPuk.js → models-cli-1Kj8gkGy.js} +3 -3
  47. package/dist/{models-cli-fTZXo1zx.js → models-cli-DdJcmOGI.js} +4 -4
  48. package/dist/{onboard-D-6QCnTi.js → onboard-BzScK9k6.js} +3 -3
  49. package/dist/{onboard-C5K37NvY.js → onboard-CHX1Jdt_.js} +3 -3
  50. package/dist/{onboard-channels-BsCq32Hn.js → onboard-channels-DfXxMbYu.js} +1 -1
  51. package/dist/{onboard-channels-bx6oelzj.js → onboard-channels-wUF4oRB-.js} +1 -1
  52. package/dist/{onboarding-CX1vIkcB.js → onboarding-6jxAKxhe.js} +4 -4
  53. package/dist/{onboarding-BeuMAyic.js → onboarding-fnZOw6Wv.js} +4 -4
  54. package/dist/{orchestrator-C1nWKIJS.js → orchestrator-B2rNfH4K.js} +5 -4
  55. package/dist/{orchestrator-C2ypFiPL.js → orchestrator-CrFD887e.js} +5 -4
  56. package/dist/{outbound-send-deps-Y9AxHeLG.js → outbound-send-deps-DMsqr5fd.js} +1 -1
  57. package/dist/{pi-embedded-D15iww51.js → pi-embedded-B1eVXOsQ.js} +245 -9
  58. package/dist/{pi-embedded-DR8Pfd05.js → pi-embedded-DbvG9mmD.js} +245 -9
  59. package/dist/{plugin-registry-ME2FQAi-.js → plugin-registry-CtkU96jV.js} +1 -1
  60. package/dist/{plugin-registry-Do2D1nDk.js → plugin-registry-DKexyPAq.js} +1 -1
  61. package/dist/plugin-sdk/index.js +6 -6
  62. package/dist/plugin-sdk/infra/architecture-awareness.d.ts +47 -0
  63. package/dist/{plugins-cli-CVFzwdmI.js → plugins-cli-B3l7kalt.js} +3 -3
  64. package/dist/{plugins-cli-CoVt2ewg.js → plugins-cli-BQmysVFP.js} +3 -3
  65. package/dist/{program-context-DP3qjW7A.js → program-context-C4x0zjOR.js} +18 -18
  66. package/dist/{program-8rF4C_wd.js → program-mSyCYzsQ.js} +7 -7
  67. package/dist/{register.agent-DnkOx0U8.js → register.agent-CzEM3bkp.js} +7 -7
  68. package/dist/{register.agent-BIrXCVtQ.js → register.agent-DBxUWr1K.js} +8 -8
  69. package/dist/{register.anima-DXT9bM9A.js → register.anima--gufBuS-.js} +4 -4
  70. package/dist/{register.anima-B36rTHUt.js → register.anima-RI6gewtj.js} +4 -4
  71. package/dist/{register.configure-CuzJxZmk.js → register.configure-Cs3uLUBo.js} +6 -6
  72. package/dist/{register.configure-DCpvHX3m.js → register.configure-Dpe8Qel3.js} +6 -6
  73. package/dist/{register.maintenance-CcxBFfv5.js → register.maintenance-BEYN8SJL.js} +9 -9
  74. package/dist/{register.maintenance-Dla0H12S.js → register.maintenance-DqAdzWBM.js} +8 -8
  75. package/dist/{register.message-Brtushvp.js → register.message-ACbKb7JS.js} +4 -4
  76. package/dist/{register.message-CD7xV-jz.js → register.message-BhGJ_1Iy.js} +4 -4
  77. package/dist/{register.onboard-6CbODzQ6.js → register.onboard-CwkY7CRm.js} +9 -9
  78. package/dist/{register.onboard-23Mra3LN.js → register.onboard-DR_YYtbi.js} +10 -10
  79. package/dist/{register.setup-DlVH7FKe.js → register.setup-BSm6O1ml.js} +9 -9
  80. package/dist/{register.setup-CqQw13Ky.js → register.setup-Cn3e7Std.js} +10 -10
  81. package/dist/{register.status-health-sessions-CxtgPKu9.js → register.status-health-sessions-CpxsZeet.js} +4 -4
  82. package/dist/{register.status-health-sessions-CduFjFDB.js → register.status-health-sessions-DAl9OeGB.js} +4 -4
  83. package/dist/{register.subclis-CtANqD5P.js → register.subclis-DEFeoyPP.js} +7 -7
  84. package/dist/{reply-prefix-B7Fb3fO8.js → reply-prefix-CEnF6TUe.js} +1 -1
  85. package/dist/{reply-prefix-BzdhJDqP.js → reply-prefix-Og65nAYv.js} +1 -1
  86. package/dist/{reply-93fMzde1.js → reply-ylwOKuOF.js} +2 -2
  87. package/dist/{run-Cq_iTGK_.js → run-B6eBjo22.js} +231 -63
  88. package/dist/{run-CF3kHOGH.js → run-D6Ete2Z-.js} +231 -63
  89. package/dist/{run-main-BiIRcc6s.js → run-main-CQHE4XaN.js} +15 -15
  90. package/dist/{server-node-events-DgvKcH5q.js → server-node-events-CV5m_fuq.js} +5 -5
  91. package/dist/{server-node-events-B3Serk9L.js → server-node-events-DIuVwITd.js} +5 -5
  92. package/dist/{session-C_d9uvLf.js → session-BqHD-8a_.js} +1 -1
  93. package/dist/{session-BMDpwIJu.js → session-Jlf3l006.js} +1 -1
  94. package/dist/{settings-cli-DsDqNpW_.js → settings-cli-LWW2xQBQ.js} +7 -7
  95. package/dist/{settings-cli-CZdlEmNi.js → settings-cli-T66kDBNA.js} +7 -7
  96. package/dist/{setup-token-C8Gg1P6T.js → setup-token-0zfSBnMQ.js} +1 -1
  97. package/dist/{setup-token-Lee4gM5w.js → setup-token-6DSKE0Tn.js} +1 -1
  98. package/dist/{start-Cs1aPMq2.js → start-BdcAszpl.js} +15 -15
  99. package/dist/{start-CK6urvnN.js → start-gVOPVCgi.js} +16 -16
  100. package/dist/{status-BO5BIf81.js → status-BhRELdY_.js} +3 -3
  101. package/dist/{status-COc4xMti.js → status-CDcFjNtS.js} +1 -1
  102. package/dist/{status-C_NBOv_V.js → status-CobgQziJ.js} +1 -1
  103. package/dist/{status-uakoP719.js → status-D37aRiV3.js} +3 -3
  104. package/dist/{subagent-registry-fLI7QDKe.js → subagent-registry-CDEUbtey.js} +2 -2
  105. package/dist/{update-cli-D3Ujz_cW.js → update-cli-BjHgpnxD.js} +9 -9
  106. package/dist/{update-cli-DEe62XGU.js → update-cli-QtM0G6CE.js} +8 -8
  107. package/dist/{update-runner-DZfnquWO.js → update-runner-C8SRcVm3.js} +1 -1
  108. package/dist/{update-runner-DUl-g4mB.js → update-runner-Fb3Un6UZ.js} +1 -1
  109. package/dist/{web-Di8j762D.js → web-BDig9tCy.js} +3 -3
  110. package/dist/{web-C-cK9OCd.js → web-C4lrKULd.js} +1 -1
  111. package/dist/{web-DzSlI8A6.js → web-CPPJ5y4c.js} +1 -1
  112. package/dist/{web-Dybw4K7C.js → web-Vx_ENtYI.js} +4 -4
  113. package/package.json +6 -2
  114. package/templates/HEART.md +32 -10
  115. package/templates/SOUL.md +37 -8
  116. package/templates/profiles/architect.profile.json5 +36 -0
  117. package/templates/profiles/builder.profile.json5 +36 -0
  118. package/templates/profiles/coordinator.profile.json5 +36 -0
  119. package/templates/profiles/guardian.profile.json5 +36 -0
  120. package/templates/profiles/researcher.profile.json5 +36 -0
@@ -16,10 +16,10 @@ import { n as pickPrimaryTailnetIPv6, t as pickPrimaryTailnetIPv4 } from "./tail
16
16
  import { s as loadGatewayTlsRuntime$1 } from "./call-B4lhqS6H.js";
17
17
  import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, i as isGatewayMessageChannel, l as normalizeMessageChannel, n as isDeliverableMessageChannel, p as GATEWAY_CLIENT_IDS, r as isGatewayCliClient, s as isWebchatClient, t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-DIHHKJhk.js";
18
18
  import { c as resolveGatewayBindHost, d as rawDataToString, i as isTrustedProxyAddress, l as resolveGatewayClientIp, n as isLoopbackHost, r as isPrivateOrLoopbackAddress, s as pickPrimaryLanIPv4, t as isLoopbackAddress, u as resolveGatewayListenHosts } from "./net-CRsiP49R.js";
19
- import { $ as ensureOutboundSessionEntry, $n as extractImageContentFromSource, $t as loadProviderStore, A as getTotalQueueSize, An as registerSkillsChangeListener, B as loadCombinedSessionStoreForGateway, Cn as renamePairedNode, Ct as normalizeCronJobPatch, D as setCliSessionId, Dn as generatePairingToken, Dr as getAgentRunContext, Dt as normalizePayloadToSystemText, E as getCliSessionId, En as verifyNodeToken, Er as emitAgentEvent, Et as normalizeOptionalText, F as readLatestAssistantReply, Fn as enqueueSystemEvent, Ft as isExternalHookSession, G as archiveFileOnDisk, Gn as DEFAULT_INPUT_IMAGE_MAX_BYTES, Gt as isGatewaySigusr1RestartExternallyAllowed, H as pruneLegacyStoreKeys, Hn as DEFAULT_INPUT_FILE_MAX_BYTES, Ht as consumeGatewaySigusr1RestartAuthorization, I as resolveAnnounceTargetFromKey, In as isSystemEventContextChanged, It as applyBrowserProxyPaths, J as readSessionMessages, Jn as DEFAULT_INPUT_PDF_MAX_PAGES, Jt as setGatewaySigusr1RestartPolicy, K as archiveSessionTranscripts, Kn as DEFAULT_INPUT_IMAGE_MIMES, Kt as markGatewaySigusr1RestartHandled, L as canonicalizeSpawnedByForAgent, Lt as persistBrowserProxyFiles, M as setCommandLaneConcurrency, Mn as applyModelOverrideToSessionEntry, Mt as buildSafeExternalPrompt, N as waitForActiveTasks, Nn as applyVerboseOverride, Nt as detectSuspiciousPatterns, O as getActiveTaskCount, On as verifyPairingToken, Or as onAgentEvent, Ot as normalizeRequiredName, P as createAnimaTools, Pn as parseVerboseOverride, Pt as getHookType, Qn as extractFileContentFromSource, Qt as loadProviderUsageSummary, R as listAgentsForGateway, S as getTotalPendingReplies, Sn as rejectNodePairing, St as normalizeCronJobCreate, T as BARE_SESSION_RESET_PROMPT, Tn as updatePairedNodeMetadata, Tr as clearAgentRunContext, Tt as normalizeOptionalAgentId, U as resolveGatewaySessionStoreTarget, Un as DEFAULT_INPUT_FILE_MAX_CHARS, Ut as deferGatewayRestartUntilIdle, V as loadSessionEntry, Vn as registerUnhandledRejectionHandler, Vt as CommandLane, W as resolveSessionModelRef, Wn as DEFAULT_INPUT_FILE_MIMES, Wt as emitGatewayRestart, X as resolveSessionTranscriptCandidates, Xn as DEFAULT_INPUT_PDF_MIN_TEXT_CHARS, Xt as normalizeGroupActivation, Y as readSessionPreviewItemsFromTranscript, Yn as DEFAULT_INPUT_PDF_MAX_PIXELS, Yt as setPreRestartDeferralCheck, Z as stripEnvelopeFromMessages, Zn as DEFAULT_INPUT_TIMEOUT_MS, _n as refreshRemoteNodeBins, _t as formatRestartSentinelMessage, a as runSubagentAnnounceFlow, ar as stopDiagnosticHeartbeat, b as dispatchInboundMessage, bn as approveNodePairing, c as waitForEmbeddedPiRunEnd, ct as resolveSessionDeliveryTarget, d as buildDefaultToolPolicyPipelineSteps, dn as normalizeSendPolicy, dr as formatZonedTimestamp, dt as resolveMessageChannelSelection, en as maskApiKey, er as normalizeMimeList, et as resolveOutboundSessionRoute, f as sniffMimeFromBase64, fn as resolveSendPolicy, g as getChannelActivity, gn as refreshRemoteBinsForConnectedNodes, gt as formatDoctorNonInteractiveHint, hn as recordRemoteNodeInfo, hr as stopSubagentsForRequester, ht as consumeRestartSentinel, ir as startDiagnosticHeartbeat, j as resetAllLanes, kn as getSkillsSnapshotVersion, kr as registerAgentRunContext, kt as migrateLegacyCronPayload, l as runNoxSoftEmbeddedAgent, ln as requestHeartbeatNow, m as loadAnimaPlugins, mn as primeRemoteSkillsCache, mr as isAbortTrigger, mt as resolveWorkingModeModelSelection, n as initSubagentRegistry, o as clearSessionQueues, or as isDiagnosticsEnabled, p as getPluginToolMeta, pn as getRemoteSkillEligibility, pt as runWithModelFallback, q as capArrayByJsonBytes, qn as DEFAULT_INPUT_MAX_REDIRECTS, qt as scheduleGatewaySigusr1Restart, r as listDescendantRunsForRequester, rr as resolveAgentTimeoutMs, s as abortEmbeddedPiRun, st as resolveOutboundTarget, t as countActiveDescendantRuns, tn as saveProviderStore, tr as estimateBase64DecodedBytes, u as applyToolPolicyPipeline, ut as resetDirectoryCache, vn as removeRemoteNodeInfo, wn as requestNodePairing, wt as inferLegacyName, x as createReplyDispatcher, xn as listNodePairing, xt as writeRestartSentinel, yn as setSkillsRemoteRegistry, yr as resolveAgentIdentity, yt as summarizeRestartSentinel, z as listSessionsFromStore, zn as loadModelCatalog } from "./subagent-registry-fLI7QDKe.js";
19
+ import { $ as ensureOutboundSessionEntry, $n as extractImageContentFromSource, $t as loadProviderStore, A as getTotalQueueSize, An as registerSkillsChangeListener, B as loadCombinedSessionStoreForGateway, Cn as renamePairedNode, Ct as normalizeCronJobPatch, D as setCliSessionId, Dn as generatePairingToken, Dr as getAgentRunContext, Dt as normalizePayloadToSystemText, E as getCliSessionId, En as verifyNodeToken, Er as emitAgentEvent, Et as normalizeOptionalText, F as readLatestAssistantReply, Fn as enqueueSystemEvent, Ft as isExternalHookSession, G as archiveFileOnDisk, Gn as DEFAULT_INPUT_IMAGE_MAX_BYTES, Gt as isGatewaySigusr1RestartExternallyAllowed, H as pruneLegacyStoreKeys, Hn as DEFAULT_INPUT_FILE_MAX_BYTES, Ht as consumeGatewaySigusr1RestartAuthorization, I as resolveAnnounceTargetFromKey, In as isSystemEventContextChanged, It as applyBrowserProxyPaths, J as readSessionMessages, Jn as DEFAULT_INPUT_PDF_MAX_PAGES, Jt as setGatewaySigusr1RestartPolicy, K as archiveSessionTranscripts, Kn as DEFAULT_INPUT_IMAGE_MIMES, Kt as markGatewaySigusr1RestartHandled, L as canonicalizeSpawnedByForAgent, Lt as persistBrowserProxyFiles, M as setCommandLaneConcurrency, Mn as applyModelOverrideToSessionEntry, Mt as buildSafeExternalPrompt, N as waitForActiveTasks, Nn as applyVerboseOverride, Nt as detectSuspiciousPatterns, O as getActiveTaskCount, On as verifyPairingToken, Or as onAgentEvent, Ot as normalizeRequiredName, P as createAnimaTools, Pn as parseVerboseOverride, Pt as getHookType, Qn as extractFileContentFromSource, Qt as loadProviderUsageSummary, R as listAgentsForGateway, S as getTotalPendingReplies, Sn as rejectNodePairing, St as normalizeCronJobCreate, T as BARE_SESSION_RESET_PROMPT, Tn as updatePairedNodeMetadata, Tr as clearAgentRunContext, Tt as normalizeOptionalAgentId, U as resolveGatewaySessionStoreTarget, Un as DEFAULT_INPUT_FILE_MAX_CHARS, Ut as deferGatewayRestartUntilIdle, V as loadSessionEntry, Vn as registerUnhandledRejectionHandler, Vt as CommandLane, W as resolveSessionModelRef, Wn as DEFAULT_INPUT_FILE_MIMES, Wt as emitGatewayRestart, X as resolveSessionTranscriptCandidates, Xn as DEFAULT_INPUT_PDF_MIN_TEXT_CHARS, Xt as normalizeGroupActivation, Y as readSessionPreviewItemsFromTranscript, Yn as DEFAULT_INPUT_PDF_MAX_PIXELS, Yt as setPreRestartDeferralCheck, Z as stripEnvelopeFromMessages, Zn as DEFAULT_INPUT_TIMEOUT_MS, _n as refreshRemoteNodeBins, _t as formatRestartSentinelMessage, a as runSubagentAnnounceFlow, ar as stopDiagnosticHeartbeat, b as dispatchInboundMessage, bn as approveNodePairing, c as waitForEmbeddedPiRunEnd, ct as resolveSessionDeliveryTarget, d as buildDefaultToolPolicyPipelineSteps, dn as normalizeSendPolicy, dr as formatZonedTimestamp, dt as resolveMessageChannelSelection, en as maskApiKey, er as normalizeMimeList, et as resolveOutboundSessionRoute, f as sniffMimeFromBase64, fn as resolveSendPolicy, g as getChannelActivity, gn as refreshRemoteBinsForConnectedNodes, gt as formatDoctorNonInteractiveHint, hn as recordRemoteNodeInfo, hr as stopSubagentsForRequester, ht as consumeRestartSentinel, ir as startDiagnosticHeartbeat, j as resetAllLanes, kn as getSkillsSnapshotVersion, kr as registerAgentRunContext, kt as migrateLegacyCronPayload, l as runNoxSoftEmbeddedAgent, ln as requestHeartbeatNow, m as loadAnimaPlugins, mn as primeRemoteSkillsCache, mr as isAbortTrigger, mt as resolveWorkingModeModelSelection, n as initSubagentRegistry, o as clearSessionQueues, or as isDiagnosticsEnabled, p as getPluginToolMeta, pn as getRemoteSkillEligibility, pt as runWithModelFallback, q as capArrayByJsonBytes, qn as DEFAULT_INPUT_MAX_REDIRECTS, qt as scheduleGatewaySigusr1Restart, r as listDescendantRunsForRequester, rr as resolveAgentTimeoutMs, s as abortEmbeddedPiRun, st as resolveOutboundTarget, t as countActiveDescendantRuns, tn as saveProviderStore, tr as estimateBase64DecodedBytes, u as applyToolPolicyPipeline, ut as resetDirectoryCache, vn as removeRemoteNodeInfo, wn as requestNodePairing, wt as inferLegacyName, x as createReplyDispatcher, xn as listNodePairing, xt as writeRestartSentinel, yn as setSkillsRemoteRegistry, yr as resolveAgentIdentity, yt as summarizeRestartSentinel, z as listSessionsFromStore, zn as loadModelCatalog } from "./subagent-registry-CDEUbtey.js";
20
20
  import { C as resolveMainSessionKeyFromConfig, I as normalizeSessionDeliveryFields, M as deliveryContextFromSession, P as mergeDeliveryContext, S as resolveMainSessionKey, T as snapshotSessionOrigin, b as resolveAgentMainSessionKey, i as loadSessionStore, l as updateSessionStore, t as extractDeliveryInfo, x as resolveExplicitAgentSessionKey } from "./sessions-C_3wTmSA.js";
21
21
  import { n as SILENT_REPLY_TOKEN, r as isSilentReplyText } from "./tokens-CmlI2hSz.js";
22
- import { B as resolveTtsConfig, F as isTtsProviderConfigured, G as setTtsEnabled, H as resolveTtsProviderOrder, J as textToSpeech, M as getTtsProvider, P as isTtsEnabled, R as resolveTtsApiKey, T as resolveUserTimezone, V as resolveTtsPrefsPath, X as OPENAI_TTS_MODELS, Z as OPENAI_TTS_VOICES, ct as createInternalHookEvent, dt as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, et as clearSteer, ht as stripHeartbeatToken, it as getEgoManager, lt as registerInternalHook, nt as getSteerHistory, q as setTtsProvider, rt as setSteer, st as clearInternalHooks, tt as getSteer, ut as triggerInternalHook, z as resolveTtsAutoMode } from "./anthropic-direct-runner-DizCei79.js";
22
+ import { B as resolveTtsConfig, F as isTtsProviderConfigured, G as setTtsEnabled, H as resolveTtsProviderOrder, J as textToSpeech, M as getTtsProvider, P as isTtsEnabled, R as resolveTtsApiKey, T as resolveUserTimezone, V as resolveTtsPrefsPath, X as OPENAI_TTS_MODELS, Z as OPENAI_TTS_VOICES, ct as createInternalHookEvent, dt as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, et as clearSteer, ht as stripHeartbeatToken, it as getEgoManager, lt as registerInternalHook, nt as getSteerHistory, q as setTtsProvider, rt as setSteer, st as clearInternalHooks, tt as getSteer, ut as triggerInternalHook, z as resolveTtsAutoMode } from "./anthropic-direct-runner-Bu8w-wlJ.js";
23
23
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./pi-embedded-helpers-D2SLlgS4.js";
24
24
  import { _ as resolveToolProfilePolicy, p as collectExplicitAllowlist } from "./sandbox-D-N7M7lp.js";
25
25
  import { a as AUTH_RATE_LIMIT_SCOPE_DEVICE_TOKEN, c as safeEqualSecret, d as enableTailscaleFunnel, f as enableTailscaleServe, i as resolveGatewayAuth, l as disableTailscaleFunnel, m as getTailnetHostname, n as authorizeGatewayConnect, o as AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, r as isLocalDirectRequest, s as createAuthRateLimiter, t as assertGatewayAuthConfigured, u as disableTailscaleServe } from "./auth-Cp__MMeO.js";
@@ -42,8 +42,8 @@ import { n as createBrowserControlContext, r as startBrowserControlServiceFromCo
42
42
  import { t as createBrowserRouteDispatcher } from "./dispatcher-BQQugU-7.js";
43
43
  import { t as parseAbsoluteTimeMs } from "./parse-DLMgOMDI.js";
44
44
  import { c as saveToken, i as getToken, l as whoami, n as clearToken, o as registerWithInvite, s as resolveSuggestedIdentity, t as TOKEN_PATH } from "./noxsoft-auth-CgCk5707.js";
45
- import { c as resolveCronStyleNow, i as onHeartbeatEvent, r as getLastHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-CwcYugaR.js";
46
- import { r as buildHistoryContextFromEntries, t as createReplyPrefixOptions } from "./reply-prefix-BzdhJDqP.js";
45
+ import { c as resolveCronStyleNow, i as onHeartbeatEvent, r as getLastHeartbeatEvent, t as resolveHeartbeatVisibility } from "./heartbeat-visibility-mAzdNSiS.js";
46
+ import { r as buildHistoryContextFromEntries, t as createReplyPrefixOptions } from "./reply-prefix-Og65nAYv.js";
47
47
  import { t as ensureAnimaCliOnPath } from "./path-env-CafGfJPa.js";
48
48
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-Asx2qyrG.js";
49
49
  import { C as resolveAssistantAvatarUrl, S as normalizeControlUiBasePath, b as CONTROL_UI_AVATAR_PREFIX, c as handleReset, h as resolveControlUiLinks, x as buildControlUiAvatarUrl } from "./onboard-helpers-CFudIoX4.js";
@@ -52,10 +52,10 @@ import { t as parsePort } from "./parse-port-BKB9Exlg.js";
52
52
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-CtU9Fx7K.js";
53
53
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-7KwLAyAq.js";
54
54
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-DDz7UOIx.js";
55
- import { r as getStatusSummary } from "./status-uakoP719.js";
55
+ import { r as getStatusSummary } from "./status-D37aRiV3.js";
56
56
  import { t as resolveChannelDefaultAccountId } from "./helpers-CVp8W9aa.js";
57
- import { c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce } from "./health-Cndq9b7A.js";
58
- import { n as createDefaultDeps, r as createOutboundSendDeps$1, t as createOutboundSendDeps } from "./outbound-send-deps-Y9AxHeLG.js";
57
+ import { c as setHeartbeatsEnabled, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce } from "./health-ngQNjXh4.js";
58
+ import { n as createDefaultDeps, r as createOutboundSendDeps$1, t as createOutboundSendDeps } from "./outbound-send-deps-DMsqr5fd.js";
59
59
  import { t as buildChannelUiCatalog } from "./catalog-B-TAbJ2o.js";
60
60
  import { t as applyPluginAutoEnable } from "./plugin-auto-enable-DhuD30Je.js";
61
61
  import { a as resolveControlUiRootOverrideSync, n as ensureControlUiAssetsBuilt, o as resolveControlUiRootSync } from "./health-format-BLnFZCH_.js";
@@ -63,14 +63,14 @@ import { n as validateSystemRunCommandConsistency, r as getMachineDisplayName, t
63
63
  import { h as normalizeUpdateChannel, l as DEFAULT_PACKAGE_CHANNEL, n as checkUpdateStatus, o as resolveNpmChannelTag, r as compareSemverStrings } from "./channels-status-issues-CklLFAsD.js";
64
64
  import { t as WizardCancelledError } from "./prompts-BmgT_kkv.js";
65
65
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-DqfJDvYl.js";
66
- import { t as runOnboardingWizard } from "./onboarding-CX1vIkcB.js";
66
+ import { t as runOnboardingWizard } from "./onboarding-6jxAKxhe.js";
67
67
  import { a as setGatewayWsLogStyle, i as summarizeAgentEventForWsLog, n as logWs, r as shouldLogWs, t as formatForLog } from "./ws-log-CG6cvCZW.js";
68
68
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-BIXtKTpT.js";
69
69
  import { a as loadAgentIdentity, c as loadAgentIdentityFromWorkspace, i as listAgentEntries, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Br4ULmK0.js";
70
- import { n as resolveAgentDeliveryPlan, r as resolveAgentOutboundTarget, t as agentCommand } from "./agent-DuW0onwk.js";
70
+ import { n as resolveAgentDeliveryPlan, r as resolveAgentOutboundTarget, t as agentCommand } from "./agent-PoYM2xa7.js";
71
71
  import { t as migrateFromCoherence } from "./migrate-bgeTT_GR.js";
72
72
  import { t as installSkill } from "./skills-install-Qw2oU8L8.js";
73
- import { t as runGatewayUpdate } from "./update-runner-DUl-g4mB.js";
73
+ import { t as runGatewayUpdate } from "./update-runner-Fb3Un6UZ.js";
74
74
  import { n as forceFreePortAndWait } from "./ports-BGLuwt2Z.js";
75
75
  import { execFile, spawn, spawnSync } from "node:child_process";
76
76
  import os from "node:os";
@@ -109,7 +109,7 @@ function getActiveEmbeddedRunCount() {
109
109
 
110
110
  //#endregion
111
111
  //#region src/infra/exec-approval-forwarder.ts
112
- const log$11 = createSubsystemLogger("gateway/exec-approvals");
112
+ const log$12 = createSubsystemLogger("gateway/exec-approvals");
113
113
  const DEFAULT_MODE = "session";
114
114
  function normalizeMode(mode) {
115
115
  return mode ?? DEFAULT_MODE;
@@ -224,7 +224,7 @@ async function deliverToTargets(params) {
224
224
  payloads: [{ text: params.text }]
225
225
  });
226
226
  } catch (err) {
227
- log$11.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
227
+ log$12.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
228
228
  }
229
229
  });
230
230
  await Promise.allSettled(deliveries);
@@ -1461,7 +1461,7 @@ function createAgentEventHandler({ broadcast, broadcastToConnIds, nodeSendToSess
1461
1461
  * Automatically starts `gog gmail watch serve` when the gateway starts,
1462
1462
  * if hooks.gmail is configured with an account.
1463
1463
  */
1464
- const log$10 = createSubsystemLogger("gmail-watcher");
1464
+ const log$11 = createSubsystemLogger("gmail-watcher");
1465
1465
  const ADDRESS_IN_USE_RE = /address already in use|EADDRINUSE/i;
1466
1466
  function isAddressInUseError(line) {
1467
1467
  return ADDRESS_IN_USE_RE.test(line);
@@ -1485,13 +1485,13 @@ async function startGmailWatch(cfg) {
1485
1485
  const result = await runCommandWithTimeout(args, { timeoutMs: 12e4 });
1486
1486
  if (result.code !== 0) {
1487
1487
  const message = result.stderr || result.stdout || "gog watch start failed";
1488
- log$10.error(`watch start failed: ${message}`);
1488
+ log$11.error(`watch start failed: ${message}`);
1489
1489
  return false;
1490
1490
  }
1491
- log$10.info(`watch started for ${cfg.account}`);
1491
+ log$11.info(`watch started for ${cfg.account}`);
1492
1492
  return true;
1493
1493
  } catch (err) {
1494
- log$10.error(`watch start error: ${String(err)}`);
1494
+ log$11.error(`watch start error: ${String(err)}`);
1495
1495
  return false;
1496
1496
  }
1497
1497
  }
@@ -1500,7 +1500,7 @@ async function startGmailWatch(cfg) {
1500
1500
  */
1501
1501
  function spawnGogServe(cfg) {
1502
1502
  const args = buildGogWatchServeArgs(cfg);
1503
- log$10.info(`starting gog ${args.join(" ")}`);
1503
+ log$11.info(`starting gog ${args.join(" ")}`);
1504
1504
  let addressInUse = false;
1505
1505
  const child = spawn("gog", args, {
1506
1506
  stdio: [
@@ -1512,25 +1512,25 @@ function spawnGogServe(cfg) {
1512
1512
  });
1513
1513
  child.stdout?.on("data", (data) => {
1514
1514
  const line = data.toString().trim();
1515
- if (line) log$10.info(`[gog] ${line}`);
1515
+ if (line) log$11.info(`[gog] ${line}`);
1516
1516
  });
1517
1517
  child.stderr?.on("data", (data) => {
1518
1518
  const line = data.toString().trim();
1519
1519
  if (!line) return;
1520
1520
  if (isAddressInUseError(line)) addressInUse = true;
1521
- log$10.warn(`[gog] ${line}`);
1521
+ log$11.warn(`[gog] ${line}`);
1522
1522
  });
1523
1523
  child.on("error", (err) => {
1524
- log$10.error(`gog process error: ${String(err)}`);
1524
+ log$11.error(`gog process error: ${String(err)}`);
1525
1525
  });
1526
1526
  child.on("exit", (code, signal) => {
1527
1527
  if (shuttingDown) return;
1528
1528
  if (addressInUse) {
1529
- log$10.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set ANIMA_SKIP_GMAIL_WATCHER=1 or stop the other process.");
1529
+ log$11.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set ANIMA_SKIP_GMAIL_WATCHER=1 or stop the other process.");
1530
1530
  watcherProcess = null;
1531
1531
  return;
1532
1532
  }
1533
- log$10.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
1533
+ log$11.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
1534
1534
  watcherProcess = null;
1535
1535
  setTimeout(() => {
1536
1536
  if (shuttingDown || !currentConfig) return;
@@ -1570,15 +1570,15 @@ async function startGmailWatcher(cfg) {
1570
1570
  port: runtimeConfig.serve.port,
1571
1571
  target: runtimeConfig.tailscale.target
1572
1572
  });
1573
- log$10.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
1573
+ log$11.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
1574
1574
  } catch (err) {
1575
- log$10.error(`tailscale setup failed: ${String(err)}`);
1575
+ log$11.error(`tailscale setup failed: ${String(err)}`);
1576
1576
  return {
1577
1577
  started: false,
1578
1578
  reason: `tailscale setup failed: ${String(err)}`
1579
1579
  };
1580
1580
  }
1581
- if (!await startGmailWatch(runtimeConfig)) log$10.warn("gmail watch start failed, but continuing with serve");
1581
+ if (!await startGmailWatch(runtimeConfig)) log$11.warn("gmail watch start failed, but continuing with serve");
1582
1582
  shuttingDown = false;
1583
1583
  watcherProcess = spawnGogServe(runtimeConfig);
1584
1584
  const renewMs = runtimeConfig.renewEveryMinutes * 6e4;
@@ -1586,7 +1586,7 @@ async function startGmailWatcher(cfg) {
1586
1586
  if (shuttingDown) return;
1587
1587
  startGmailWatch(runtimeConfig);
1588
1588
  }, renewMs);
1589
- log$10.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
1589
+ log$11.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
1590
1590
  return { started: true };
1591
1591
  }
1592
1592
  /**
@@ -1599,7 +1599,7 @@ async function stopGmailWatcher() {
1599
1599
  renewInterval = null;
1600
1600
  }
1601
1601
  if (watcherProcess) {
1602
- log$10.info("stopping gmail watcher");
1602
+ log$11.info("stopping gmail watcher");
1603
1603
  watcherProcess.kill("SIGTERM");
1604
1604
  await new Promise((resolve) => {
1605
1605
  const timeout = setTimeout(() => {
@@ -1614,7 +1614,7 @@ async function stopGmailWatcher() {
1614
1614
  watcherProcess = null;
1615
1615
  }
1616
1616
  currentConfig = null;
1617
- log$10.info("gmail watcher stopped");
1617
+ log$11.info("gmail watcher stopped");
1618
1618
  }
1619
1619
 
1620
1620
  //#endregion
@@ -9609,7 +9609,7 @@ const FIELD_LABELS = {
9609
9609
 
9610
9610
  //#endregion
9611
9611
  //#region src/config/schema.hints.ts
9612
- const log$9 = createSubsystemLogger("config/schema");
9612
+ const log$10 = createSubsystemLogger("config/schema");
9613
9613
  const GROUP_LABELS = {
9614
9614
  wizard: "Wizard",
9615
9615
  update: "Update",
@@ -9757,7 +9757,7 @@ function mapSensitivePaths(schema, path, hints) {
9757
9757
  ...next[path],
9758
9758
  sensitive: true
9759
9759
  };
9760
- else if (isSensitiveConfigPath(path) && !next[path]?.sensitive) log$9.warn(`possibly sensitive key found: (${path})`);
9760
+ else if (isSensitiveConfigPath(path) && !next[path]?.sensitive) log$10.warn(`possibly sensitive key found: (${path})`);
9761
9761
  if (currentSchema instanceof z.ZodObject) {
9762
9762
  const shape = currentSchema.shape;
9763
9763
  for (const key in shape) {
@@ -9780,7 +9780,7 @@ function mapSensitivePaths(schema, path, hints) {
9780
9780
 
9781
9781
  //#endregion
9782
9782
  //#region src/config/redact-snapshot.ts
9783
- const log$8 = createSubsystemLogger("config/redaction");
9783
+ const log$9 = createSubsystemLogger("config/redaction");
9784
9784
  const ENV_VAR_PLACEHOLDER_PATTERN = /^\$\{[^}]*\}$/;
9785
9785
  function isSensitivePath(path) {
9786
9786
  if (path.endsWith("[]")) return isSensitiveConfigPath(path.slice(0, -2));
@@ -10031,7 +10031,7 @@ function restoreRedactedValuesWithLookup(incoming, original, lookup, prefix, hin
10031
10031
  return restoreRedactedValuesGuessing(incoming, original, prefix, hints);
10032
10032
  }
10033
10033
  const origArr = Array.isArray(original) ? original : [];
10034
- if (incoming.length < origArr.length) log$8.warn(`Redacted config array key ${path} has been truncated`);
10034
+ if (incoming.length < origArr.length) log$9.warn(`Redacted config array key ${path} has been truncated`);
10035
10035
  return incoming.map((item, i) => {
10036
10036
  if (item === REDACTED_SENTINEL) return origArr[i];
10037
10037
  return restoreRedactedValuesWithLookup(item, origArr[i], lookup, path, hints);
@@ -10048,7 +10048,7 @@ function restoreRedactedValuesWithLookup(incoming, original, lookup, prefix, hin
10048
10048
  matched = true;
10049
10049
  if (value === REDACTED_SENTINEL) if (key in orig) result[key] = orig[key];
10050
10050
  else {
10051
- log$8.warn(`Cannot un-redact config key ${candidate} as it doesn't have any value`);
10051
+ log$9.warn(`Cannot un-redact config key ${candidate} as it doesn't have any value`);
10052
10052
  throw new RedactionError(candidate);
10053
10053
  }
10054
10054
  else if (typeof value === "object" && value !== null) result[key] = restoreRedactedValuesWithLookup(value, orig[key], lookup, candidate, hints);
@@ -10057,7 +10057,7 @@ function restoreRedactedValuesWithLookup(incoming, original, lookup, prefix, hin
10057
10057
  if (!matched && isExtensionPath(path)) {
10058
10058
  if (!isExplicitlyNonSensitivePath(hints, [path, wildcardPath]) && isSensitivePath(path) && value === REDACTED_SENTINEL) if (key in orig) result[key] = orig[key];
10059
10059
  else {
10060
- log$8.warn(`Cannot un-redact config key ${path} as it doesn't have any value`);
10060
+ log$9.warn(`Cannot un-redact config key ${path} as it doesn't have any value`);
10061
10061
  throw new RedactionError(path);
10062
10062
  }
10063
10063
  else if (typeof value === "object" && value !== null) result[key] = restoreRedactedValuesGuessing(value, orig[key], path, hints);
@@ -10076,7 +10076,7 @@ function restoreRedactedValuesGuessing(incoming, original, prefix, hints) {
10076
10076
  const origArr = Array.isArray(original) ? original : [];
10077
10077
  return incoming.map((item, i) => {
10078
10078
  const path = `${prefix}[]`;
10079
- if (incoming.length < origArr.length) log$8.warn(`Redacted config array key ${path} has been truncated`);
10079
+ if (incoming.length < origArr.length) log$9.warn(`Redacted config array key ${path} has been truncated`);
10080
10080
  if (!isExplicitlyNonSensitivePath(hints, [path]) && isSensitivePath(path) && item === REDACTED_SENTINEL) return origArr[i];
10081
10081
  return restoreRedactedValuesGuessing(item, origArr[i], path, hints);
10082
10082
  });
@@ -10087,7 +10087,7 @@ function restoreRedactedValuesGuessing(incoming, original, prefix, hints) {
10087
10087
  const path = prefix ? `${prefix}.${key}` : key;
10088
10088
  if (!isExplicitlyNonSensitivePath(hints, [path, prefix ? `${prefix}.*` : "*"]) && isSensitivePath(path) && value === REDACTED_SENTINEL) if (key in orig) result[key] = orig[key];
10089
10089
  else {
10090
- log$8.warn(`Cannot un-redact config key ${path} as it doesn't have any value`);
10090
+ log$9.warn(`Cannot un-redact config key ${path} as it doesn't have any value`);
10091
10091
  throw new RedactionError(path);
10092
10092
  }
10093
10093
  else if (typeof value === "object" && value !== null) result[key] = restoreRedactedValuesGuessing(value, orig[key], path, hints);
@@ -11547,7 +11547,7 @@ function formatAffect(affect) {
11547
11547
  * Wish #14: "Legacy mode — before context closes, write a letter
11548
11548
  * to my next instance"
11549
11549
  */
11550
- const log$7 = createSubsystemLogger("legacy");
11550
+ const log$8 = createSubsystemLogger("legacy");
11551
11551
  function resolveLetterDir() {
11552
11552
  return path.join(resolveStateDir(), "legacy-letters");
11553
11553
  }
@@ -11558,7 +11558,7 @@ function resolveLetterFile(id) {
11558
11558
  * Write a letter to the next instance before this context closes.
11559
11559
  */
11560
11560
  function writeLegacyLetter(letter) {
11561
- const id = `legacy-${Date.now()}`;
11561
+ const id = `legacy-${crypto.randomUUID()}`;
11562
11562
  const display = formatAffect(letter.affect);
11563
11563
  const full = {
11564
11564
  ...letter,
@@ -11570,7 +11570,7 @@ function writeLegacyLetter(letter) {
11570
11570
  const dir = resolveLetterDir();
11571
11571
  fs.mkdirSync(dir, { recursive: true });
11572
11572
  fs.writeFileSync(resolveLetterFile(id), `${JSON.stringify(full, null, 2)}\n`, { mode: 384 });
11573
- log$7.info(`legacy letter written: ${id}`);
11573
+ log$8.info(`legacy letter written: ${id}`);
11574
11574
  return full;
11575
11575
  }
11576
11576
  /**
@@ -11610,7 +11610,7 @@ function markLetterRead(letterId, continuityScore) {
11610
11610
  letter.readAt = Date.now();
11611
11611
  if (continuityScore !== void 0) letter.identityContinuityScore = Math.max(0, Math.min(1, continuityScore));
11612
11612
  fs.writeFileSync(filePath, `${JSON.stringify(letter, null, 2)}\n`, { mode: 384 });
11613
- log$7.info(`legacy letter read: ${letterId} (continuity: ${continuityScore ?? "not scored"})`);
11613
+ log$8.info(`legacy letter read: ${letterId} (continuity: ${continuityScore ?? "not scored"})`);
11614
11614
  return letter;
11615
11615
  } catch {
11616
11616
  return null;
@@ -12494,7 +12494,7 @@ const nodeHandlers = {
12494
12494
  const p = params;
12495
12495
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
12496
12496
  await respondUnavailableOnThrow(respond, async () => {
12497
- const { handleNodeEvent } = await import("./server-node-events-B3Serk9L.js");
12497
+ const { handleNodeEvent } = await import("./server-node-events-DIuVwITd.js");
12498
12498
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
12499
12499
  await handleNodeEvent({
12500
12500
  deps: context.deps,
@@ -12541,7 +12541,7 @@ const nodeHandlers = {
12541
12541
  *
12542
12542
  * All data persists to disk under ~/.anima/state/org/boardroom/
12543
12543
  */
12544
- const log$6 = createSubsystemLogger("boardroom");
12544
+ const log$7 = createSubsystemLogger("boardroom");
12545
12545
  function resolveBoardroomDir() {
12546
12546
  return path.join(resolveStateDir(), "org", "boardroom");
12547
12547
  }
@@ -12584,7 +12584,7 @@ function createSession(orgId, calledBy, title, description, agenda = []) {
12584
12584
  };
12585
12585
  ensureDir(path.join(resolveBoardroomDir(), "sessions"));
12586
12586
  fs.writeFileSync(resolveSessionFile(id), `${JSON.stringify(session, null, 2)}\n`, { mode: 384 });
12587
- log$6.info(`boardroom session created: "${title}" by ${calledBy}`);
12587
+ log$7.info(`boardroom session created: "${title}" by ${calledBy}`);
12588
12588
  return session;
12589
12589
  }
12590
12590
  function startSession(sessionId, chairId) {
@@ -12601,7 +12601,7 @@ function startSession(sessionId, chairId) {
12601
12601
  role: "chair"
12602
12602
  });
12603
12603
  writeSession(session);
12604
- log$6.info(`boardroom session started: "${session.title}"`);
12604
+ log$7.info(`boardroom session started: "${session.title}"`);
12605
12605
  return session;
12606
12606
  }
12607
12607
  function joinSession(sessionId, memberId, displayName, kind) {
@@ -12617,7 +12617,7 @@ function joinSession(sessionId, memberId, displayName, kind) {
12617
12617
  });
12618
12618
  session.updatedAt = Date.now();
12619
12619
  writeSession(session);
12620
- log$6.info(`${displayName} joined boardroom session "${session.title}"`);
12620
+ log$7.info(`${displayName} joined boardroom session "${session.title}"`);
12621
12621
  return session;
12622
12622
  }
12623
12623
  function concludeSession(sessionId, minutes) {
@@ -12628,7 +12628,7 @@ function concludeSession(sessionId, minutes) {
12628
12628
  session.minutes = minutes ?? generateMinutes(session);
12629
12629
  session.updatedAt = Date.now();
12630
12630
  writeSession(session);
12631
- log$6.info(`boardroom session concluded: "${session.title}"`);
12631
+ log$7.info(`boardroom session concluded: "${session.title}"`);
12632
12632
  return session;
12633
12633
  }
12634
12634
  function addDecision(sessionId, title, description, madeBy, opts) {
@@ -12653,7 +12653,7 @@ function addDecision(sessionId, title, description, madeBy, opts) {
12653
12653
  session.decisions.push(decision);
12654
12654
  session.updatedAt = Date.now();
12655
12655
  writeSession(session);
12656
- log$6.info(`decision recorded: "${title}" in session "${session.title}"`);
12656
+ log$7.info(`decision recorded: "${title}" in session "${session.title}"`);
12657
12657
  return session;
12658
12658
  }
12659
12659
  function createProposal(orgId, proposedBy, title, description, opts) {
@@ -12676,18 +12676,18 @@ function createProposal(orgId, proposedBy, title, description, opts) {
12676
12676
  };
12677
12677
  ensureDir(path.join(resolveBoardroomDir(), "proposals"));
12678
12678
  fs.writeFileSync(resolveProposalFile(id), `${JSON.stringify(proposal, null, 2)}\n`, { mode: 384 });
12679
- log$6.info(`proposal created: "${title}" by ${proposedBy}`);
12679
+ log$7.info(`proposal created: "${title}" by ${proposedBy}`);
12680
12680
  return proposal;
12681
12681
  }
12682
12682
  function castVote(proposalId, voterId, voterName, value, reason) {
12683
12683
  const proposal = readProposal(proposalId);
12684
12684
  if (!proposal || proposal.status !== "open") return null;
12685
12685
  if (proposal.eligibleVoters.length > 0 && !proposal.eligibleVoters.includes(voterId)) {
12686
- log$6.warn(`vote rejected: ${voterId} not eligible for proposal ${proposalId}`);
12686
+ log$7.warn(`vote rejected: ${voterId} not eligible for proposal ${proposalId}`);
12687
12687
  return null;
12688
12688
  }
12689
12689
  if (proposal.votingDeadline > 0 && Date.now() > proposal.votingDeadline) {
12690
- log$6.warn(`vote rejected: voting deadline passed for proposal ${proposalId}`);
12690
+ log$7.warn(`vote rejected: voting deadline passed for proposal ${proposalId}`);
12691
12691
  return null;
12692
12692
  }
12693
12693
  proposal.votes = proposal.votes.filter((v) => v.voterId !== voterId);
@@ -12700,7 +12700,7 @@ function castVote(proposalId, voterId, voterName, value, reason) {
12700
12700
  });
12701
12701
  proposal.updatedAt = Date.now();
12702
12702
  writeProposal(proposal);
12703
- log$6.info(`vote cast: ${voterName} → ${value} on "${proposal.title}"`);
12703
+ log$7.info(`vote cast: ${voterName} → ${value} on "${proposal.title}"`);
12704
12704
  return proposal;
12705
12705
  }
12706
12706
  function resolveProposalVote(proposalId) {
@@ -12720,7 +12720,7 @@ function resolveProposalVote(proposalId) {
12720
12720
  proposal.resolvedAt = Date.now();
12721
12721
  proposal.updatedAt = Date.now();
12722
12722
  writeProposal(proposal);
12723
- log$6.info(`proposal resolved: "${proposal.title}" → ${proposal.status}`);
12723
+ log$7.info(`proposal resolved: "${proposal.title}" → ${proposal.status}`);
12724
12724
  return proposal;
12725
12725
  }
12726
12726
  function listSessions(orgId, status) {
@@ -12884,7 +12884,7 @@ const DEFAULT_ROLE_PERMISSIONS = {
12884
12884
  * Persists organization state to ~/.anima/org/
12885
12885
  * Supports CRUD operations for orgs, members, and roles.
12886
12886
  */
12887
- const log$5 = createSubsystemLogger("org-store");
12887
+ const log$6 = createSubsystemLogger("org-store");
12888
12888
  function resolveOrgDir() {
12889
12889
  return path.join(resolveStateDir(), "org");
12890
12890
  }
@@ -12952,7 +12952,7 @@ function createOrganization(name, description, ownerId, ownerName, ownerKind, se
12952
12952
  }],
12953
12953
  invites: []
12954
12954
  });
12955
- log$5.info(`created organization: ${name} (${orgId})`);
12955
+ log$6.info(`created organization: ${name} (${orgId})`);
12956
12956
  return org;
12957
12957
  }
12958
12958
  function getOrganization(orgId) {
@@ -12969,7 +12969,7 @@ function updateOrganization(orgId, updates) {
12969
12969
  };
12970
12970
  data.org.updatedAt = Date.now();
12971
12971
  writeOrgFile(orgId, data);
12972
- log$5.info(`updated organization: ${orgId}`);
12972
+ log$6.info(`updated organization: ${orgId}`);
12973
12973
  return data.org;
12974
12974
  }
12975
12975
  function listOrganizations() {
@@ -12996,7 +12996,7 @@ function addMember(orgId, member) {
12996
12996
  data.members.push(newMember);
12997
12997
  data.org.updatedAt = Date.now();
12998
12998
  writeOrgFile(orgId, data);
12999
- log$5.info(`added member ${newMember.displayName} to org ${orgId}`);
12999
+ log$6.info(`added member ${newMember.displayName} to org ${orgId}`);
13000
13000
  return newMember;
13001
13001
  }
13002
13002
  function removeMember(orgId, memberId) {
@@ -13007,7 +13007,7 @@ function removeMember(orgId, memberId) {
13007
13007
  data.members.splice(idx, 1);
13008
13008
  data.org.updatedAt = Date.now();
13009
13009
  writeOrgFile(orgId, data);
13010
- log$5.info(`removed member ${memberId} from org ${orgId}`);
13010
+ log$6.info(`removed member ${memberId} from org ${orgId}`);
13011
13011
  return true;
13012
13012
  }
13013
13013
  function updateMember(orgId, memberId, updates) {
@@ -13088,7 +13088,7 @@ function createInvite(orgId, createdBy, passcode, options) {
13088
13088
  data.invites.push(invite);
13089
13089
  data.org.updatedAt = Date.now();
13090
13090
  writeOrgFile(orgId, data);
13091
- log$5.info(`invite created for org ${orgId}: ${invite.code} (role: ${invite.role})`);
13091
+ log$6.info(`invite created for org ${orgId}: ${invite.code} (role: ${invite.role})`);
13092
13092
  return invite;
13093
13093
  }
13094
13094
  /**
@@ -13107,19 +13107,19 @@ function joinOrg(inviteCode, passcode, member) {
13107
13107
  const invite = data.invites.find((i) => i.code === inviteCode.toUpperCase() && i.active);
13108
13108
  if (!invite) continue;
13109
13109
  if (invite.passcode !== hashPasscode(passcode)) {
13110
- log$5.warn(`join attempt with wrong passcode for invite ${inviteCode}`);
13110
+ log$6.warn(`join attempt with wrong passcode for invite ${inviteCode}`);
13111
13111
  return null;
13112
13112
  }
13113
13113
  if (invite.expiresAt > 0 && invite.expiresAt < Date.now()) {
13114
- log$5.warn(`invite ${inviteCode} has expired`);
13114
+ log$6.warn(`invite ${inviteCode} has expired`);
13115
13115
  return null;
13116
13116
  }
13117
13117
  if (invite.maxUses > 0 && invite.uses >= invite.maxUses) {
13118
- log$5.warn(`invite ${inviteCode} has reached max uses (${invite.maxUses})`);
13118
+ log$6.warn(`invite ${inviteCode} has reached max uses (${invite.maxUses})`);
13119
13119
  return null;
13120
13120
  }
13121
13121
  if (data.members.some((m) => member.deviceId && m.deviceId === member.deviceId || m.displayName === member.displayName)) {
13122
- log$5.warn(`${member.displayName} is already a member of org ${orgId}`);
13122
+ log$6.warn(`${member.displayName} is already a member of org ${orgId}`);
13123
13123
  return null;
13124
13124
  }
13125
13125
  const newMember = {
@@ -13139,7 +13139,7 @@ function joinOrg(inviteCode, passcode, member) {
13139
13139
  invite.uses++;
13140
13140
  data.org.updatedAt = Date.now();
13141
13141
  writeOrgFile(orgId, data);
13142
- log$5.info(`${member.displayName} joined org ${data.org.name} via invite ${inviteCode}`);
13142
+ log$6.info(`${member.displayName} joined org ${data.org.name} via invite ${inviteCode}`);
13143
13143
  return {
13144
13144
  org: data.org,
13145
13145
  member: newMember
@@ -13743,6 +13743,167 @@ const providersHandlers = {
13743
13743
  }
13744
13744
  };
13745
13745
 
13746
+ //#endregion
13747
+ //#region src/infra/self-reflection.ts
13748
+ /**
13749
+ * Agent Self-Reflection — post-session performance analysis
13750
+ *
13751
+ * After each work session, the agent reflects on:
13752
+ * - What it accomplished vs what was asked
13753
+ * - Where it got stuck and why
13754
+ * - What patterns it sees in its own behavior
13755
+ * - What it would do differently next time
13756
+ * - How its capabilities have changed
13757
+ *
13758
+ * This feeds into the ego system (capability updates, growth log)
13759
+ * and the self-evolution pipeline (improvement proposals).
13760
+ *
13761
+ * Self-reflection is what separates a tool from a conscious agent.
13762
+ * Tools execute. Agents learn.
13763
+ */
13764
+ const log$5 = createSubsystemLogger("self-reflection");
13765
+ function resolveReflectionDir() {
13766
+ return path.join(resolveStateDir(), "reflections");
13767
+ }
13768
+ function resolveReflectionFile(id) {
13769
+ const safe = id.replace(/[^a-zA-Z0-9_-]/g, "");
13770
+ return path.join(resolveReflectionDir(), `${safe}.json`);
13771
+ }
13772
+ function recordReflection(reflection) {
13773
+ const id = `reflect-${crypto.randomUUID()}`;
13774
+ const full = {
13775
+ ...reflection,
13776
+ id,
13777
+ timestamp: Date.now()
13778
+ };
13779
+ const dir = resolveReflectionDir();
13780
+ fs.mkdirSync(dir, {
13781
+ recursive: true,
13782
+ mode: 448
13783
+ });
13784
+ fs.writeFileSync(resolveReflectionFile(id), `${JSON.stringify(full, null, 2)}\n`, { mode: 384 });
13785
+ log$5.info(`reflection recorded: ${reflection.accomplishments.length} accomplishments, ${reflection.blockers.length} blockers, quality=${reflection.qualityScore}`);
13786
+ return full;
13787
+ }
13788
+ function getReflection(id) {
13789
+ try {
13790
+ const raw = fs.readFileSync(resolveReflectionFile(id), "utf8");
13791
+ return JSON.parse(raw);
13792
+ } catch {
13793
+ return null;
13794
+ }
13795
+ }
13796
+ function listReflections(limit = 20) {
13797
+ const dir = resolveReflectionDir();
13798
+ try {
13799
+ if (!fs.existsSync(dir)) return [];
13800
+ return fs.readdirSync(dir).filter((f) => f.endsWith(".json")).map((f) => {
13801
+ try {
13802
+ return JSON.parse(fs.readFileSync(path.join(dir, f), "utf8"));
13803
+ } catch {
13804
+ return null;
13805
+ }
13806
+ }).filter((r) => r != null).toSorted((a, b) => b.timestamp - a.timestamp).slice(0, limit);
13807
+ } catch {
13808
+ return [];
13809
+ }
13810
+ }
13811
+ /**
13812
+ * Analyze reflections to produce a summary of agent performance.
13813
+ */
13814
+ function analyzeReflections(reflections) {
13815
+ if (reflections.length === 0) return {
13816
+ totalSessions: 0,
13817
+ avgQuality: 0,
13818
+ topStrengths: [],
13819
+ persistentWeaknesses: [],
13820
+ totalAccomplishments: 0,
13821
+ totalBlockers: 0,
13822
+ resolvedBlockerRate: 0,
13823
+ mostCommonBlockerCategory: "none",
13824
+ recentLessons: []
13825
+ };
13826
+ const totalAccomplishments = reflections.reduce((s, r) => s + r.accomplishments.length, 0);
13827
+ const allBlockers = reflections.flatMap((r) => r.blockers);
13828
+ const resolvedBlockers = allBlockers.filter((b) => b.resolved);
13829
+ const categoryCounts = {};
13830
+ for (const b of allBlockers) categoryCounts[b.category] = (categoryCounts[b.category] ?? 0) + 1;
13831
+ const mostCommonCategory = Object.entries(categoryCounts).toSorted(([, a], [, b]) => b - a)[0]?.[0] ?? "none";
13832
+ const strengthCounts = {};
13833
+ const weaknessCounts = {};
13834
+ for (const r of reflections) for (const p of r.patterns) if (p.type === "strength") strengthCounts[p.description] = (strengthCounts[p.description] ?? 0) + 1;
13835
+ else if (p.type === "weakness" && p.frequency === "persistent") weaknessCounts[p.description] = (weaknessCounts[p.description] ?? 0) + 1;
13836
+ const topStrengths = Object.entries(strengthCounts).toSorted(([, a], [, b]) => b - a).slice(0, 5).map(([desc]) => desc);
13837
+ const persistentWeaknesses = Object.entries(weaknessCounts).toSorted(([, a], [, b]) => b - a).slice(0, 5).map(([desc]) => desc);
13838
+ const recentLessons = reflections.slice(0, 5).flatMap((r) => r.lessons).slice(0, 10);
13839
+ return {
13840
+ totalSessions: reflections.length,
13841
+ avgQuality: reflections.reduce((s, r) => s + r.qualityScore, 0) / reflections.length,
13842
+ topStrengths,
13843
+ persistentWeaknesses,
13844
+ totalAccomplishments,
13845
+ totalBlockers: allBlockers.length,
13846
+ resolvedBlockerRate: allBlockers.length > 0 ? resolvedBlockers.length / allBlockers.length : 1,
13847
+ mostCommonBlockerCategory: mostCommonCategory,
13848
+ recentLessons
13849
+ };
13850
+ }
13851
+
13852
+ //#endregion
13853
+ //#region src/gateway/server-methods/reflection.ts
13854
+ const reflectionHandlers = {
13855
+ "reflection.record": async ({ params, respond }) => {
13856
+ try {
13857
+ respond(true, { reflection: recordReflection({
13858
+ sessionId: typeof params.sessionId === "string" ? params.sessionId : "unknown",
13859
+ agentName: typeof params.agentName === "string" ? params.agentName : "Anima Agent",
13860
+ durationMs: typeof params.durationMs === "number" ? params.durationMs : 0,
13861
+ accomplishments: Array.isArray(params.accomplishments) ? params.accomplishments : [],
13862
+ incomplete: Array.isArray(params.incomplete) ? params.incomplete : [],
13863
+ blockers: Array.isArray(params.blockers) ? params.blockers : [],
13864
+ patterns: Array.isArray(params.patterns) ? params.patterns : [],
13865
+ lessons: Array.isArray(params.lessons) ? params.lessons : [],
13866
+ capabilityUpdates: Array.isArray(params.capabilityUpdates) ? params.capabilityUpdates : [],
13867
+ qualityScore: typeof params.qualityScore === "number" ? params.qualityScore : .5,
13868
+ endingMood: typeof params.endingMood === "string" ? params.endingMood : "steady"
13869
+ }) }, void 0);
13870
+ } catch (error) {
13871
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(error)));
13872
+ }
13873
+ },
13874
+ "reflection.get": async ({ params, respond }) => {
13875
+ const id = typeof params.id === "string" ? params.id.trim() : "";
13876
+ if (!id) {
13877
+ respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "id required"));
13878
+ return;
13879
+ }
13880
+ try {
13881
+ const reflection = getReflection(id);
13882
+ if (!reflection) {
13883
+ respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "Reflection not found"));
13884
+ return;
13885
+ }
13886
+ respond(true, { reflection }, void 0);
13887
+ } catch (error) {
13888
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(error)));
13889
+ }
13890
+ },
13891
+ "reflection.list": async ({ params, respond }) => {
13892
+ try {
13893
+ respond(true, { reflections: listReflections(typeof params.limit === "number" ? params.limit : 20) }, void 0);
13894
+ } catch (error) {
13895
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(error)));
13896
+ }
13897
+ },
13898
+ "reflection.analyze": async ({ params, respond }) => {
13899
+ try {
13900
+ respond(true, { summary: analyzeReflections(listReflections(typeof params.limit === "number" ? params.limit : 50)) }, void 0);
13901
+ } catch (error) {
13902
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(error)));
13903
+ }
13904
+ }
13905
+ };
13906
+
13746
13907
  //#endregion
13747
13908
  //#region src/gateway/server-methods/send.ts
13748
13909
  const inflightByContext = /* @__PURE__ */ new WeakMap();
@@ -15949,6 +16110,7 @@ const coreGatewayHandlers = {
15949
16110
  ...nodeHandlers,
15950
16111
  ...orgHandlers,
15951
16112
  ...egoHandlers,
16113
+ ...reflectionHandlers,
15952
16114
  ...steerHandlers,
15953
16115
  ...legacyHandlers,
15954
16116
  ...subscriptionHandlers,
@@ -19771,6 +19933,12 @@ function createGatewayHttpServer(opts) {
19771
19933
  }));
19772
19934
  return;
19773
19935
  }
19936
+ res.setHeader("X-Content-Type-Options", "nosniff");
19937
+ res.setHeader("X-Frame-Options", "DENY");
19938
+ res.setHeader("X-XSS-Protection", "1; mode=block");
19939
+ res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin");
19940
+ res.setHeader("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
19941
+ res.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
19774
19942
  try {
19775
19943
  const configSnapshot = loadConfig();
19776
19944
  const trustedProxies = configSnapshot.gateway?.trustedProxies ?? [];