@symerian/symi 3.0.1 → 3.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 (166) hide show
  1. package/dist/{agents-D4F5bhNg.js → agents-DEYqmFEH.js} +4 -4
  2. package/dist/{agents.config-DS9Gbqqg.js → agents.config-ClI9Q05l.js} +1 -1
  3. package/dist/{agents.config-Czr0DbSr.js → agents.config-TArPtTFt.js} +1 -1
  4. package/dist/{audio-preflight-Cje-A0Fs.js → audio-preflight-BrKBM7JM.js} +4 -4
  5. package/dist/{auth-choice-BU6XwruP.js → auth-choice-bOht3his.js} +1 -1
  6. package/dist/{auth-choice-DU5o68ia.js → auth-choice-kJVkaHx6.js} +1 -1
  7. package/dist/{banner-qaKrETF8.js → banner--HSjGLhi.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +2 -2
  10. package/dist/bundled/session-memory/handler.js +2 -2
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-Bkfyg4nZ.js → channel-options-C68HZtw7.js} +1 -1
  13. package/dist/{channel-options-DW3nWxkv.js → channel-options-Cj2ZMHvy.js} +1 -1
  14. package/dist/{channel-web-DoDJqXyN.js → channel-web-BGZxsb8l.js} +1 -1
  15. package/dist/{channels-cli-B9tesYLD.js → channels-cli-C775zJjx.js} +6 -6
  16. package/dist/{channels-cli-V7ii1g6k.js → channels-cli-CLkq2ISd.js} +6 -6
  17. package/dist/{chrome-DaduLVA1.js → chrome-WfENE6tB.js} +7 -7
  18. package/dist/{cli-0GHBNwqe.js → cli-8ibydSgl.js} +3 -3
  19. package/dist/{cli-CAhOnKQ3.js → cli-B2FVKvPQ.js} +3 -3
  20. package/dist/{command-registry-Phoz_hat.js → command-registry-C-c2RS-n.js} +10 -10
  21. package/dist/{completion-cli-BAebbT-g.js → completion-cli-BLO_wsYD.js} +2 -2
  22. package/dist/{completion-cli-FR_B0tX1.js → completion-cli-IKI4BpqL.js} +1 -1
  23. package/dist/{config-cli-BXus9Npr.js → config-cli-Bh8aPiiL.js} +1 -1
  24. package/dist/{config-cli-DLSg0aaH.js → config-cli-d4RU82ov.js} +1 -1
  25. package/dist/{configure-BsrDBB87.js → configure-DKmHXbug.js} +3 -3
  26. package/dist/{configure-CPweqV68.js → configure-jxJfT5_B.js} +3 -3
  27. package/dist/daemon-cli.js +6 -6
  28. package/dist/{deliver-B6vfVmif.js → deliver-DShQE_sq.js} +1 -1
  29. package/dist/{doctor-completion-D5BKaeyT.js → doctor-completion-C7SuoBlz.js} +1 -1
  30. package/dist/{doctor-completion-DBs809iZ.js → doctor-completion-VAGhCLD5.js} +1 -1
  31. package/dist/entry.js +1 -1
  32. package/dist/extensionAPI.js +7 -7
  33. package/dist/{gateway-cli-DDxIyaeu.js → gateway-cli-BELyZGAU.js} +12 -12
  34. package/dist/{gateway-cli-D7ppw9MR.js → gateway-cli-D_SJFv7K.js} +12 -12
  35. package/dist/{glass-ui-ws-DSCEyW9z.js → glass-ui-ws-0agRdhZD.js} +10 -10
  36. package/dist/{glass-ui-ws-BK6Ca98g.js → glass-ui-ws-qPJDDUD9.js} +10 -10
  37. package/dist/{health-ByAPhIlQ.js → health-BnGM6Yux.js} +69 -5
  38. package/dist/{health-VfVqsLcU.js → health-CCKCR4oM.js} +69 -5
  39. package/dist/{heartbeat-visibility-BdqXBLOd.js → heartbeat-visibility-C4Sg0QOd.js} +1 -1
  40. package/dist/{heartbeat-visibility-ol7hy6FB.js → heartbeat-visibility-CG080wT5.js} +1 -1
  41. package/dist/{hooks-cli-CA2ikPts.js → hooks-cli-B2WVvhgH.js} +4 -4
  42. package/dist/{hooks-cli-D8u-iqwZ.js → hooks-cli-CtuiPrKW.js} +4 -4
  43. package/dist/{image-C12-WOMI.js → image-DfzwGNoa.js} +1 -1
  44. package/dist/index.js +9 -9
  45. package/dist/llm-slug-generator.js +2 -2
  46. package/dist/{manager-DfZDS6-4.js → manager-B6EhIj3H.js} +1 -1
  47. package/dist/{manager-DPxj_q1-.js → manager-DKUOUCmo.js} +1 -1
  48. package/dist/{manager-C9NXB77i.js → manager-Mm_GQxOU.js} +1 -1
  49. package/dist/{manager-DxihqoWd.js → manager-zwcQLMln.js} +1 -1
  50. package/dist/{memory-cli-Bjj5cTuq.js → memory-cli-BEZM7jn9.js} +3 -3
  51. package/dist/{memory-cli-D_O5bN6m.js → memory-cli-D4lLSeA1.js} +3 -3
  52. package/dist/{models-CD7SOI3V.js → models-ElQijvpq.js} +2 -2
  53. package/dist/{models-cli-Wjh_xd50.js → models-cli-14U59ejI.js} +5 -5
  54. package/dist/{models-cli-Dj5BnQIi.js → models-cli-Dtf5Zpgd.js} +4 -4
  55. package/dist/{onboard-Bgl-nPXW.js → onboard-CaYQVQYI.js} +2 -2
  56. package/dist/{onboard-CCfkebWZ.js → onboard-DN2xgEv1.js} +2 -2
  57. package/dist/{onboard-channels-DKFmls3m.js → onboard-channels-B1fWI5k5.js} +1 -1
  58. package/dist/{onboard-channels-CHJjmcTz.js → onboard-channels-C5sKGabO.js} +1 -1
  59. package/dist/{onboarding-CtCbkyNo.js → onboarding-BngFnwT6.js} +3 -3
  60. package/dist/{onboarding-GXSRt2Z4.js → onboarding-DNIz481s.js} +3 -3
  61. package/dist/{onboarding.finalize-CTqy_Unj.js → onboarding.finalize-B-x_trN9.js} +8 -8
  62. package/dist/{onboarding.finalize-Cyo7tKOt.js → onboarding.finalize-BA8-Tnhc.js} +9 -9
  63. package/dist/{pi-embedded-gBOzgRYn.js → pi-embedded-DUJ9Ytfn.js} +67 -24
  64. package/dist/{pi-embedded-helpers-pMH6u36v.js → pi-embedded-helpers-B1k1RWqM.js} +4 -4
  65. package/dist/{plugin-registry-BMavDLfZ.js → plugin-registry-C1xFJkog.js} +1 -1
  66. package/dist/{plugin-registry-CO6iA1TE.js → plugin-registry-CZS8ioCg.js} +1 -1
  67. package/dist/plugin-sdk/agents/system-prompt.d.ts +8 -0
  68. package/dist/plugin-sdk/{channel-web--Ru_sFHM.js → channel-web-B_XlrV_E.js} +1 -1
  69. package/dist/plugin-sdk/index.js +3 -3
  70. package/dist/plugin-sdk/infra/active-heartbeat-runs.d.ts +34 -0
  71. package/dist/plugin-sdk/{manager-CDV3YWoX.js → manager-CJd0vK4S.js} +1 -1
  72. package/dist/plugin-sdk/{synthesis-Bojs0PJL.js → synthesis-Cre_3fLT.js} +2 -2
  73. package/dist/plugin-sdk/{unified-runner-D7m-WeUt.js → unified-runner-BNQKFoGX.js} +53 -10
  74. package/dist/plugin-sdk/{web-BoYy2HSO.js → web-CE-OsTKq.js} +3 -3
  75. package/dist/{plugins-cli-2A8lifj4.js → plugins-cli-BGccb2gT.js} +4 -4
  76. package/dist/{plugins-cli-DhQzD98q.js → plugins-cli-f_Ncophh.js} +4 -4
  77. package/dist/{program-DEaYsa-L.js → program-5Hto31sk.js} +9 -9
  78. package/dist/{program-context-rJ500lzQ.js → program-context-Baw4Oc1H.js} +18 -18
  79. package/dist/{prompt-select-styled-3tYztnc1.js → prompt-select-styled-Cm6mr7mH.js} +6 -6
  80. package/dist/{prompt-select-styled-BcJXLROq.js → prompt-select-styled-DHSySGF2.js} +6 -6
  81. package/dist/{provider-auth-helpers-COKxBW7N.js → provider-auth-helpers-FdlXX50k.js} +1 -1
  82. package/dist/{provider-auth-helpers-eQzmopYc.js → provider-auth-helpers-_aPYnJCR.js} +1 -1
  83. package/dist/{push-apns-CBPUnPja.js → push-apns-DnMyTqrU.js} +1 -1
  84. package/dist/{push-apns-kuIc4QSa.js → push-apns-Dusza10V.js} +1 -1
  85. package/dist/{pw-ai-D0CMQA23.js → pw-ai-Dd_QrTWR.js} +1 -1
  86. package/dist/{register.agent-CNpLOx-Y.js → register.agent-DibuuULq.js} +7 -7
  87. package/dist/{register.agent-Bj4dYxX1.js → register.agent-TI-lzUMT.js} +8 -8
  88. package/dist/{register.configure-BsXY0hbE.js → register.configure-BbBU2vzP.js} +9 -9
  89. package/dist/{register.configure-CM4isxt8.js → register.configure-CE6z4EEp.js} +9 -9
  90. package/dist/{register.maintenance-Dphm3utW.js → register.maintenance-D_cRwoi6.js} +11 -11
  91. package/dist/{register.maintenance-Bvt-fYOe.js → register.maintenance-Dsw96Q5M.js} +10 -10
  92. package/dist/{register.message-C4WU4qwG.js → register.message-7JdfRDPR.js} +4 -4
  93. package/dist/{register.message-CuJ6kd3Y.js → register.message-BqRfLqBs.js} +4 -4
  94. package/dist/{register.onboard-D_HBo-CG.js → register.onboard-7iv0kkQk.js} +7 -7
  95. package/dist/{register.onboard-4GJ7224e.js → register.onboard-Ca5HGO6E.js} +7 -7
  96. package/dist/{register.setup-Blb61XAC.js → register.setup-Cy3cIayc.js} +7 -7
  97. package/dist/{register.setup-BJ9kJazQ.js → register.setup-D7AKohSt.js} +7 -7
  98. package/dist/{register.status-health-sessions-CRAYzQLg.js → register.status-health-sessions-BW51mzBs.js} +6 -6
  99. package/dist/{register.status-health-sessions-B4hENuHX.js → register.status-health-sessions-DOkSVuJk.js} +6 -6
  100. package/dist/{register.subclis-CmDRn7Z2.js → register.subclis-p-z6ekaE.js} +9 -9
  101. package/dist/{run-main-CPcu8T5o.js → run-main-BhEacTM9.js} +17 -17
  102. package/dist/{runner-7XhJhCc0.js → runner-CaXOtv_D.js} +1 -1
  103. package/dist/{server-methods-DDbTMvnA.js → server-methods-Bcwa782q.js} +10 -9
  104. package/dist/{server-methods-CX3ldLPd.js → server-methods-C8ff27p5.js} +10 -9
  105. package/dist/{server-node-events-Bzoq_nfx.js → server-node-events-B85y_7eX.js} +4 -4
  106. package/dist/{server-node-events-Ccoeyw6p.js → server-node-events-h8Af4ZTV.js} +4 -4
  107. package/dist/{status-CyHHusPc.js → status-DFBG2hcx.js} +1 -1
  108. package/dist/{status-BEAngZOJ.js → status-DUGaRGN0.js} +3 -3
  109. package/dist/{status-OAdlubd0.js → status-DsaLdb09.js} +3 -3
  110. package/dist/{status-BdKI8eQ7.js → status-JL0CD-E1.js} +1 -1
  111. package/dist/{subagent-registry-UkXCmOLK.js → subagent-registry-DXCGIrYv.js} +53 -10
  112. package/dist/{synthesis-DnRaxWS6.js → synthesis-BUbH-4DA.js} +2 -2
  113. package/dist/{synthesis-BkOyAKJV.js → synthesis-BxwFFuqZ.js} +7 -7
  114. package/dist/{synthesis-DGBPTml_.js → synthesis-CLt-6Pzu.js} +3 -3
  115. package/dist/{synthesis-D_fSgB6z.js → synthesis-ekn511D_.js} +3 -3
  116. package/dist/{unified-runner-BNTy0IvK.js → unified-runner-CdBxbcO2.js} +53 -10
  117. package/dist/{unified-runner-BlsArDPO.js → unified-runner-DtJxJ016.js} +53 -10
  118. package/dist/{update-cli-DuALcXLb.js → update-cli-4OzLcQIF.js} +10 -10
  119. package/dist/{update-cli-Cwi3bnhh.js → update-cli-CQbvni-d.js} +11 -11
  120. package/dist/{update-runner-C3OhMuSJ.js → update-runner-CiYhkA5I.js} +1 -1
  121. package/dist/{update-runner-DkNNsx67.js → update-runner-DLCzD7sp.js} +1 -1
  122. package/dist/{web-arCxqOL_.js → web-COnC7jb4.js} +7 -7
  123. package/dist/{web-PndcPkY5.js → web-CSDi520u.js} +2 -2
  124. package/dist/{web-Cp_dpAof.js → web-DMFKXi8s.js} +5 -5
  125. package/dist/{web-DtgGgNSl.js → web-DiqLVzt7.js} +4 -4
  126. package/extensions/bluebubbles/package.json +1 -1
  127. package/extensions/copilot-proxy/package.json +1 -1
  128. package/extensions/diagnostics-otel/package.json +1 -1
  129. package/extensions/discord/package.json +1 -1
  130. package/extensions/feishu/package.json +1 -1
  131. package/extensions/google-antigravity-auth/package.json +1 -1
  132. package/extensions/google-gemini-cli-auth/package.json +1 -1
  133. package/extensions/googlechat/package.json +1 -1
  134. package/extensions/imessage/package.json +1 -1
  135. package/extensions/irc/package.json +1 -1
  136. package/extensions/learning-loop/package.json +1 -1
  137. package/extensions/line/package.json +1 -1
  138. package/extensions/llm-task/package.json +1 -1
  139. package/extensions/matrix/CHANGELOG.md +6 -0
  140. package/extensions/matrix/package.json +1 -1
  141. package/extensions/mattermost/package.json +1 -1
  142. package/extensions/memory-core/package.json +1 -1
  143. package/extensions/memory-lancedb/package.json +1 -1
  144. package/extensions/minimax-portal-auth/package.json +1 -1
  145. package/extensions/msteams/CHANGELOG.md +6 -0
  146. package/extensions/msteams/package.json +1 -1
  147. package/extensions/nextcloud-talk/package.json +1 -1
  148. package/extensions/nostr/CHANGELOG.md +6 -0
  149. package/extensions/nostr/package.json +1 -1
  150. package/extensions/open-prose/package.json +1 -1
  151. package/extensions/outlook/package.json +1 -1
  152. package/extensions/pipeline/package.json +1 -1
  153. package/extensions/signal/package.json +1 -1
  154. package/extensions/slack/package.json +1 -1
  155. package/extensions/telegram/package.json +1 -1
  156. package/extensions/tlon/package.json +1 -1
  157. package/extensions/twitch/CHANGELOG.md +6 -0
  158. package/extensions/twitch/package.json +1 -1
  159. package/extensions/voice-call/CHANGELOG.md +6 -0
  160. package/extensions/voice-call/package.json +1 -1
  161. package/extensions/whatsapp/package.json +1 -1
  162. package/extensions/zalo/CHANGELOG.md +6 -0
  163. package/extensions/zalo/package.json +1 -1
  164. package/extensions/zalouser/CHANGELOG.md +6 -0
  165. package/extensions/zalouser/package.json +1 -1
  166. package/package.json +1 -1
@@ -14,7 +14,7 @@ import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExis
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
15
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-DMhDlUGJ.js";
16
16
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-ByAzOT7G.js";
17
- import { a as normalizeOutboundPayloadsForJson, c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, i as normalizeOutboundPayloads, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, r as formatOutboundPayloadLog, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-B6vfVmif.js";
17
+ import { a as normalizeOutboundPayloadsForJson, c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, i as normalizeOutboundPayloads, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, r as formatOutboundPayloadLog, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-DShQE_sq.js";
18
18
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, o as logMessageQueued, p as isDiagnosticsEnabled, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-BVsSwe-J.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
@@ -22,10 +22,10 @@ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normali
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-BKUwjozo.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as normalizeDeliveryContext, A as parseImageDimensionError, At as resolveExistingPathsWithinRoot, B as resolveAndPersistSessionFile, Bt as normalizeToolName, C as isFailoverAssistantError, Ct as acquireSessionWriteLock, D as isRawApiErrorPayload, Dt as resolveBrowserConfig, E as isRateLimitAssistantError, Et as registerBrowserRoutes, F as resolveSandboxRuntimeStatus, Ft as buildPluginToolGroups, G as updateLastRoute, Gt as buildBootstrapContextFiles, H as readSessionUpdatedAt, Ht as stripPluginOnlyAllowlist, I as extractDeliveryInfo, It as collectExplicitAllowlist, J as isCacheEnabled, Jt as resolveBootstrapTotalMaxChars, K as updateSessionStore, Kt as ensureSessionHeader, L as parseSessionThreadInfo, Lt as expandPolicyWithPluginGroups, M as sanitizeUserFacingText, Mt as ensureBrowserControlAuth, N as ensureSandboxWorkspaceForSession, Nt as resolveBrowserControlAuth, O as isTimeoutErrorMessage, Ot as resolveProfile, P as resolveSandboxContext, Pt as applyOwnerOnlyToolPolicy, Q as mergeDeliveryContext, R as appendAssistantMessageToSessionTranscript, Rt as expandToolGroups, S as isContextOverflowError, St as resolveGroupSessionKey, T as isLikelyContextOverflowError, Tt as createBrowserRouteContext, U as recordSessionMetaFromInbound, Ut as compileGlobPatterns, V as loadSessionStore, Vt as resolveToolProfilePolicy, Wt as matchesAnyGlobPattern, X as deliveryContextFromSession, Y as resolveCacheTtlMs$1, Yt as sanitizeGoogleTurnOrdering, Z as deliveryContextKey, _ as getApiErrorPayloadFingerprint, _t as resolveFreshSessionTotalTokens, a as normalizeTextForComparison, at as extractToolCallNames, b as isCloudCodeAssistFormatError, bt as resolveMainSessionKey, c as extractToolResultId, ct as hasInterSessionUserProvenance, d as isGoogleModelApi, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as BILLING_ERROR_USER_MESSAGE, ft as resolveChannelResetConfig, g as formatRawAssistantErrorForUi, gt as DEFAULT_RESET_TRIGGERS, h as formatBillingErrorMessage, ht as resolveThreadFlag, i as isMessagingToolDuplicateNormalized, it as countToolResults, j as parseImageSizeError, jt as getBridgeAuthForPort, k as isTransientHttpError, kt as DEFAULT_UPLOAD_DIR, l as downgradeOpenAIReasoningBlocks, lt as normalizeInputProvenance, m as formatAssistantErrorText, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as sanitizeSessionMessagesImages, ot as INPUT_PROVENANCE_KIND_VALUES, p as classifyFailoverReason, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as resolveBootstrapMaxChars, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as extractToolCallsFromAssistant, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as isAntigravityClaude, ut as resolveSessionKey, v as isAuthAssistantError, vt as canonicalizeMainSessionAlias, w as isFailoverErrorMessage, wt as resolveSessionLockMaxHoldFromTimeout, x as isCompactionFailureError, xt as deriveSessionMetaPatch, y as isBillingAssistantError, yt as resolveExplicitAgentSessionKey, zt as mergeAlsoAllowPolicy } from "./pi-embedded-helpers-pMH6u36v.js";
25
+ import { $ as normalizeDeliveryContext, A as parseImageDimensionError, At as resolveExistingPathsWithinRoot, B as resolveAndPersistSessionFile, Bt as normalizeToolName, C as isFailoverAssistantError, Ct as acquireSessionWriteLock, D as isRawApiErrorPayload, Dt as resolveBrowserConfig, E as isRateLimitAssistantError, Et as registerBrowserRoutes, F as resolveSandboxRuntimeStatus, Ft as buildPluginToolGroups, G as updateLastRoute, Gt as buildBootstrapContextFiles, H as readSessionUpdatedAt, Ht as stripPluginOnlyAllowlist, I as extractDeliveryInfo, It as collectExplicitAllowlist, J as isCacheEnabled, Jt as resolveBootstrapTotalMaxChars, K as updateSessionStore, Kt as ensureSessionHeader, L as parseSessionThreadInfo, Lt as expandPolicyWithPluginGroups, M as sanitizeUserFacingText, Mt as ensureBrowserControlAuth, N as ensureSandboxWorkspaceForSession, Nt as resolveBrowserControlAuth, O as isTimeoutErrorMessage, Ot as resolveProfile, P as resolveSandboxContext, Pt as applyOwnerOnlyToolPolicy, Q as mergeDeliveryContext, R as appendAssistantMessageToSessionTranscript, Rt as expandToolGroups, S as isContextOverflowError, St as resolveGroupSessionKey, T as isLikelyContextOverflowError, Tt as createBrowserRouteContext, U as recordSessionMetaFromInbound, Ut as compileGlobPatterns, V as loadSessionStore, Vt as resolveToolProfilePolicy, Wt as matchesAnyGlobPattern, X as deliveryContextFromSession, Y as resolveCacheTtlMs$1, Yt as sanitizeGoogleTurnOrdering, Z as deliveryContextKey, _ as getApiErrorPayloadFingerprint, _t as resolveFreshSessionTotalTokens, a as normalizeTextForComparison, at as extractToolCallNames, b as isCloudCodeAssistFormatError, bt as resolveMainSessionKey, c as extractToolResultId, ct as hasInterSessionUserProvenance, d as isGoogleModelApi, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as BILLING_ERROR_USER_MESSAGE, ft as resolveChannelResetConfig, g as formatRawAssistantErrorForUi, gt as DEFAULT_RESET_TRIGGERS, h as formatBillingErrorMessage, ht as resolveThreadFlag, i as isMessagingToolDuplicateNormalized, it as countToolResults, j as parseImageSizeError, jt as getBridgeAuthForPort, k as isTransientHttpError, kt as DEFAULT_UPLOAD_DIR, l as downgradeOpenAIReasoningBlocks, lt as normalizeInputProvenance, m as formatAssistantErrorText, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as sanitizeSessionMessagesImages, ot as INPUT_PROVENANCE_KIND_VALUES, p as classifyFailoverReason, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as resolveBootstrapMaxChars, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as extractToolCallsFromAssistant, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as isAntigravityClaude, ut as resolveSessionKey, v as isAuthAssistantError, vt as canonicalizeMainSessionAlias, w as isFailoverErrorMessage, wt as resolveSessionLockMaxHoldFromTimeout, x as isCompactionFailureError, xt as deriveSessionMetaPatch, y as isBillingAssistantError, yt as resolveExplicitAgentSessionKey, zt as mergeAlsoAllowPolicy } from "./pi-embedded-helpers-B1k1RWqM.js";
26
26
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-BOuq5KZE.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-DWdYdchb.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-DaduLVA1.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-WfENE6tB.js";
29
29
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, h as parseFrontmatterBlock, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-amp3F-om.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -36,8 +36,8 @@ import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-CdTyeTEN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-C12-WOMI.js";
40
- import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-C9NXB77i.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-DfzwGNoa.js";
40
+ import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-Mm_GQxOU.js";
41
41
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
43
43
  import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-43lkDH_r.js";
@@ -49,7 +49,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-CDdlA9_f.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-iF38r_Xp.js";
50
50
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-c5Lly1_3.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CgGv6nTy.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-7XhJhCc0.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-CaXOtv_D.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-WLZaC77l.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BaoETsQI.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-C-6tM-GK.js";
@@ -80,7 +80,7 @@ import { EdgeTTS } from "node-edge-tts";
80
80
  import AjvPkg from "ajv";
81
81
  import { createServer } from "node:http";
82
82
  import { ProxyAgent, fetch as fetch$1 } from "undici";
83
- import WebSocket$1, { WebSocket } from "ws";
83
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
84
84
  import { Buffer as Buffer$1 } from "node:buffer";
85
85
  import { createJiti } from "jiti";
86
86
  import { Type } from "@sinclair/typebox";
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
3473
3473
  const wrapper = new FallbackMemoryManager({
3474
3474
  primary,
3475
3475
  fallbackFactory: async () => {
3476
- const { MemoryIndexManager } = await import("./manager-C9NXB77i.js").then((n) => n.t);
3476
+ const { MemoryIndexManager } = await import("./manager-Mm_GQxOU.js").then((n) => n.t);
3477
3477
  return await MemoryIndexManager.get(params);
3478
3478
  }
3479
3479
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
3486
3486
  }
3487
3487
  }
3488
3488
  try {
3489
- const { MemoryIndexManager } = await import("./manager-C9NXB77i.js").then((n) => n.t);
3489
+ const { MemoryIndexManager } = await import("./manager-Mm_GQxOU.js").then((n) => n.t);
3490
3490
  return { manager: await MemoryIndexManager.get(params) };
3491
3491
  } catch (err) {
3492
3492
  return {
@@ -5879,7 +5879,7 @@ var GatewayClient = class {
5879
5879
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5880
5880
  });
5881
5881
  }
5882
- this.ws = new WebSocket(url, wsOptions);
5882
+ this.ws = new WebSocket$1(url, wsOptions);
5883
5883
  this.ws.on("open", () => {
5884
5884
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5885
5885
  const tlsError = this.validateTlsFingerprint();
@@ -6098,7 +6098,7 @@ var GatewayClient = class {
6098
6098
  return null;
6099
6099
  }
6100
6100
  async request(method, params, opts) {
6101
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
6101
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
6102
6102
  const id = randomUUID();
6103
6103
  const frame = {
6104
6104
  type: "req",
@@ -7339,7 +7339,7 @@ async function routeReply(params) {
7339
7339
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7340
7340
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7341
7341
  try {
7342
- const { deliverOutboundPayloads } = await import("./deliver-B6vfVmif.js").then((n) => n.n);
7342
+ const { deliverOutboundPayloads } = await import("./deliver-DShQE_sq.js").then((n) => n.n);
7343
7343
  return {
7344
7344
  ok: true,
7345
7345
  messageId: (await deliverOutboundPayloads({
@@ -22085,6 +22085,40 @@ function sanitizeForPromptLiteral(value) {
22085
22085
 
22086
22086
  //#endregion
22087
22087
  //#region src/agents/system-prompt.ts
22088
+ /**
22089
+ * Read up to `limit` markdown filenames from `<workspaceDir>/memory/`,
22090
+ * sorted by mtime descending. Returns relative names (e.g. "2026-04-30.md")
22091
+ * for inlining into the system prompt — gives the agent the actual file
22092
+ * surface so it doesn't speculate names like "memory/2026-04-30.md" from
22093
+ * training-data priors. Resilient: missing dir → [], unreadable → [].
22094
+ */
22095
+ function listWorkspaceMemoryFiles(workspaceDir, limit = 10) {
22096
+ if (!workspaceDir) return [];
22097
+ const memoryDir = path.join(workspaceDir, "memory");
22098
+ let entries;
22099
+ try {
22100
+ entries = fs.readdirSync(memoryDir, { withFileTypes: true });
22101
+ } catch {
22102
+ return [];
22103
+ }
22104
+ const files = [];
22105
+ for (const entry of entries) {
22106
+ if (!entry.isFile()) continue;
22107
+ if (!entry.name.toLowerCase().endsWith(".md")) continue;
22108
+ let mtimeMs = 0;
22109
+ try {
22110
+ mtimeMs = fs.statSync(path.join(memoryDir, entry.name)).mtimeMs;
22111
+ } catch {
22112
+ mtimeMs = 0;
22113
+ }
22114
+ files.push({
22115
+ name: entry.name,
22116
+ mtimeMs
22117
+ });
22118
+ }
22119
+ files.sort((a, b) => b.mtimeMs - a.mtimeMs);
22120
+ return files.slice(0, limit).map((f) => f.name);
22121
+ }
22088
22122
  function buildSkillsSection(params) {
22089
22123
  if (params.isMinimal) return [];
22090
22124
  if (params.dropCatalog) return [];
@@ -22108,13 +22142,21 @@ function buildMemorySection(params) {
22108
22142
  "## Memory Recall",
22109
22143
  "Before answering anything about prior work, decisions, dates, people, preferences, or todos: run memory_search on MEMORY.md + memory/*.md; then use memory_get to pull only the needed lines. If low confidence after search, say you checked.",
22110
22144
  "",
22145
+ "**Never speculate memory file paths.** Use memory_search to find content; do not construct paths like `memory/<date>.md` from training-data priors and call read on them — that produces ENOENT spam and trips the consecutive-tool-error breaker.",
22146
+ "",
22111
22147
  "Memory is split into two layers you will see as files:",
22112
22148
  "- `MEMORY.md` — user-authored short-term memory. Hand-edited by the user; treat as ground truth they wrote themselves. Never rewrite it yourself.",
22113
- "- `memory/symi-core.md` + `memory/symi-beliefs.md` — long-term memory automatically consolidated from repeated observations (your evolving self). Do NOT hand-edit these files: they are regenerated each consolidation cycle. When the files disagree with a fresh user statement, trust the fresh statement and write a new observation to `memory/YYYY-MM-DD.md` the cycle will reconcile them.",
22114
- "- `memory/YYYY-MM-DD.md` daily append-only observations. This is where new memories land.",
22115
- "",
22116
- "When the user explicitly asks to *remember* or *always remember* something, after writing the observation also call `memory_pin` with a distinctive query so the fact survives pruning. Call `memory_unpin` when the user says to forget it."
22149
+ "- `memory/symi-core.md` + `memory/symi-beliefs.md` — long-term memory automatically consolidated from repeated observations (your evolving self). Do NOT hand-edit these files: they are regenerated each consolidation cycle. When the files disagree with a fresh user statement, trust the fresh statement and write a new observation. The cycle will reconcile them.",
22150
+ "- New observations go in dated daily files (e.g. `memory/<today>.md`); use `memory_search` to discover what already exists rather than guessing filenames."
22117
22151
  ];
22152
+ const memoryFiles = (params.workspaceMemoryFiles ?? []).filter(Boolean);
22153
+ if (memoryFiles.length > 0) {
22154
+ lines.push("");
22155
+ lines.push("Existing memory files in this workspace (most-recently-modified first):");
22156
+ for (const name of memoryFiles) lines.push(`- \`memory/${name}\``);
22157
+ }
22158
+ lines.push("");
22159
+ lines.push("When the user explicitly asks to *remember* or *always remember* something, after writing the observation also call `memory_pin` with a distinctive query so the fact survives pruning. Call `memory_unpin` when the user says to forget it.");
22118
22160
  if (params.citationsMode === "off") lines.push("Citations are disabled: do not mention file paths or line numbers in replies unless the user explicitly asks.");
22119
22161
  else lines.push("Citations: include Source: <path#line> when it helps the user verify memory snippets.");
22120
22162
  lines.push("");
@@ -22403,7 +22445,8 @@ function buildAgentSystemPrompt(params) {
22403
22445
  const memorySection = buildMemorySection({
22404
22446
  isMinimal,
22405
22447
  availableTools,
22406
- citationsMode: params.memoryCitationsMode
22448
+ citationsMode: params.memoryCitationsMode,
22449
+ workspaceMemoryFiles: listWorkspaceMemoryFiles(params.workspaceDir)
22407
22450
  });
22408
22451
  const docsSection = buildDocsSection({
22409
22452
  docsPath: params.docsPath,
@@ -39428,7 +39471,7 @@ async function deliverSessionMaintenanceWarning(params) {
39428
39471
  return;
39429
39472
  }
39430
39473
  try {
39431
- const { deliverOutboundPayloads } = await import("./deliver-B6vfVmif.js").then((n) => n.n);
39474
+ const { deliverOutboundPayloads } = await import("./deliver-DShQE_sq.js").then((n) => n.n);
39432
39475
  await deliverOutboundPayloads({
39433
39476
  cfg: params.cfg,
39434
39477
  channel,
@@ -53612,7 +53655,7 @@ async function describeStickerImage(params) {
53612
53655
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
53613
53656
  try {
53614
53657
  const buffer = await fs$1.readFile(imagePath);
53615
- const { describeImageWithModel } = await import("./image-C12-WOMI.js").then((n) => n.n);
53658
+ const { describeImageWithModel } = await import("./image-DfzwGNoa.js").then((n) => n.n);
53616
53659
  return (await describeImageWithModel({
53617
53660
  buffer,
53618
53661
  fileName: "sticker.webp",
@@ -56361,7 +56404,7 @@ async function preflightDiscordMessage(params) {
56361
56404
  let preflightTranscript;
56362
56405
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
56363
56406
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
56364
- const { transcribeFirstAudio } = await import("./audio-preflight-Cje-A0Fs.js");
56407
+ const { transcribeFirstAudio } = await import("./audio-preflight-BrKBM7JM.js");
56365
56408
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
56366
56409
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
56367
56410
  ctx: {
@@ -60884,7 +60927,7 @@ function setCliSessionId(entry, provider, sessionId) {
60884
60927
  function createDefaultDeps() {
60885
60928
  return {
60886
60929
  sendMessageWhatsApp: async (...args) => {
60887
- const { sendMessageWhatsApp } = await import("./web-arCxqOL_.js");
60930
+ const { sendMessageWhatsApp } = await import("./web-COnC7jb4.js");
60888
60931
  return await sendMessageWhatsApp(...args);
60889
60932
  },
60890
60933
  sendMessageTelegram: async (...args) => {
@@ -63789,7 +63832,7 @@ function createDiscordGatewayPlugin(params) {
63789
63832
  super(options);
63790
63833
  }
63791
63834
  createWebSocket(url) {
63792
- return new WebSocket$1(url, { agent });
63835
+ return new WebSocket(url, { agent });
63793
63836
  }
63794
63837
  }
63795
63838
  return new ProxyGatewayPlugin();
@@ -74007,7 +74050,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
74007
74050
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
74008
74051
  let preflightTranscript;
74009
74052
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
74010
- const { transcribeFirstAudio } = await import("./audio-preflight-Cje-A0Fs.js");
74053
+ const { transcribeFirstAudio } = await import("./audio-preflight-BrKBM7JM.js");
74011
74054
  preflightTranscript = await transcribeFirstAudio({
74012
74055
  ctx: {
74013
74056
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -76164,7 +76207,7 @@ function loadWebLoginQr() {
76164
76207
  return webLoginQrPromise;
76165
76208
  }
76166
76209
  function loadWebChannel() {
76167
- webChannelPromise ??= import("./web-arCxqOL_.js");
76210
+ webChannelPromise ??= import("./web-COnC7jb4.js");
76168
76211
  return webChannelPromise;
76169
76212
  }
76170
76213
  function loadWhatsAppActions() {
@@ -10,7 +10,7 @@ import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
10
10
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BKUwjozo.js";
11
11
  import { o as listDeliverableMessageChannels, s as normalizeMessageChannel } from "./message-channel-BQINJQIT.js";
12
12
  import { _ as parseDurationMs, a as writeConfigFile, n as loadConfig, s as parseByteSize, t as createConfigIO } from "./config-BOuq5KZE.js";
13
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-DaduLVA1.js";
13
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-WfENE6tB.js";
14
14
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-amp3F-om.js";
15
15
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-CPfngF0S.js";
16
16
  import { t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -938,7 +938,7 @@ function isModuleNotFoundError(err) {
938
938
  }
939
939
  async function loadPwAiModule(mode) {
940
940
  try {
941
- return await import("./pw-ai-D0CMQA23.js");
941
+ return await import("./pw-ai-Dd_QrTWR.js");
942
942
  } catch (err) {
943
943
  if (mode === "soft") return null;
944
944
  if (isModuleNotFoundError(err)) return null;
@@ -3478,11 +3478,11 @@ function createProfileContext(opts, profile) {
3478
3478
  const userDataDir = resolveSymiUserDataDir(profile.name);
3479
3479
  const profileState = getProfileState();
3480
3480
  if (await isHttpReachable(300) && !profileState.running) try {
3481
- await (await import("./pw-ai-D0CMQA23.js")).closePlaywrightBrowserConnection();
3481
+ await (await import("./pw-ai-Dd_QrTWR.js")).closePlaywrightBrowserConnection();
3482
3482
  } catch {}
3483
3483
  if (profileState.running) await stopRunningBrowser();
3484
3484
  try {
3485
- await (await import("./pw-ai-D0CMQA23.js")).closePlaywrightBrowserConnection();
3485
+ await (await import("./pw-ai-Dd_QrTWR.js")).closePlaywrightBrowserConnection();
3486
3486
  } catch {}
3487
3487
  if (!fs.existsSync(userDataDir)) return {
3488
3488
  moved: false,
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { s as loadSymiPlugins } from "./unified-runner-BNTy0IvK.js";
2
+ import { s as loadSymiPlugins } from "./unified-runner-CdBxbcO2.js";
3
3
  import { d as getActivePluginRegistry } from "./registry-ClO_zVv-.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
5
5
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-BajBuriF.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { M as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-xM36I1Em.js";
4
4
  import { i as loadConfig } from "./config-BaxT9cN4.js";
5
- import { m as loadSymiPlugins } from "./subagent-registry-UkXCmOLK.js";
5
+ import { m as loadSymiPlugins } from "./subagent-registry-DXCGIrYv.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -2,6 +2,14 @@ import type { ReasoningLevel, ThinkLevel } from "../auto-reply/thinking.js";
2
2
  import type { MemoryCitationsMode } from "../config/types.memory.js";
3
3
  import type { ResolvedTimeFormat } from "./date-time.js";
4
4
  import type { EmbeddedContextFile } from "./pi-embedded-helpers.js";
5
+ /**
6
+ * Read up to `limit` markdown filenames from `<workspaceDir>/memory/`,
7
+ * sorted by mtime descending. Returns relative names (e.g. "2026-04-30.md")
8
+ * for inlining into the system prompt — gives the agent the actual file
9
+ * surface so it doesn't speculate names like "memory/2026-04-30.md" from
10
+ * training-data priors. Resilient: missing dir → [], unreadable → [].
11
+ */
12
+ export declare function listWorkspaceMemoryFiles(workspaceDir: string, limit?: number): string[];
5
13
  /**
6
14
  * Controls which hardcoded sections are included in the system prompt.
7
15
  * - "full": All sections (default, for main agent)
@@ -1,6 +1,6 @@
1
1
  import { a as buildGroupHistoryKey, n as DEFAULT_MAIN_KEY, r as buildAgentMainSessionKey, s as normalizeAgentId } from "./session-key-C_0eELjb.js";
2
2
  import { f as readWebSelfId, o as getWebAuthAgeMs, r as resolveWhatsAppAccount } from "./accounts-D9zGZU5t.js";
3
- import { G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as formatInboundEnvelope, b as shouldComputeCommandAuthorized, c as buildPairingReply, d as formatDurationPrecise, f as enqueueSystemEvent, g as resolveInboundDebounceMs, h as createInboundDebouncer, ht as createDedupeCache, l as dispatchReplyWithBufferedBlockDispatcher, m as parseActivationCommand, nt as buildMentionRegexes, o as computeBackoff, p as normalizeGroupActivation, rt as normalizeMentionText, s as sleepWithAbort, tt as recordPendingHistoryEntryIfEnabled, v as resolveEnvelopeFormatOptions, y as hasControlCommand } from "./unified-runner-D7m-WeUt.js";
3
+ import { G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as formatInboundEnvelope, b as shouldComputeCommandAuthorized, c as buildPairingReply, d as formatDurationPrecise, f as enqueueSystemEvent, g as resolveInboundDebounceMs, h as createInboundDebouncer, ht as createDedupeCache, l as dispatchReplyWithBufferedBlockDispatcher, m as parseActivationCommand, nt as buildMentionRegexes, o as computeBackoff, p as normalizeGroupActivation, rt as normalizeMentionText, s as sleepWithAbort, tt as recordPendingHistoryEntryIfEnabled, v as resolveEnvelopeFormatOptions, y as hasControlCommand } from "./unified-runner-BNQKFoGX.js";
4
4
  import { A as normalizeE164, B as toWhatsappJid, K as logVerbose, N as resolveJidToE164, O as isSelfChatMode, R as sleep, Y as shouldLogVerbose, k as jidToE164, s as normalizeChatChannelId, tt as getChildLogger, x as clamp } from "./registry--_pGht6S.js";
5
5
  import { n as loadConfig } from "./config-BBBu18xQ.js";
6
6
  import { i as defaultRuntime, t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
@@ -1,6 +1,6 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
2
  import { _ as createAccountListHelpers, i as resolveWhatsAppAuthDir, n as resolveDefaultWhatsAppAccountId, r as resolveWhatsAppAccount, t as listWhatsAppAccountIds } from "./accounts-D9zGZU5t.js";
3
- import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as processLineMessage, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, E as attachFooterText, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as hasMarkdownToConvert, St as listThreadBindingsBySessionKey, T as createReceiptCard, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as resolveLineAccount, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as resolveDefaultLineAccountId, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, n as listLineAccountIds, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, r as normalizeAccountId$1, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as stripMarkdown, wt as formatAllowlistMatchMeta, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./unified-runner-D7m-WeUt.js";
3
+ import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as processLineMessage, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, E as attachFooterText, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as hasMarkdownToConvert, St as listThreadBindingsBySessionKey, T as createReceiptCard, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as resolveLineAccount, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as resolveDefaultLineAccountId, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, n as listLineAccountIds, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, r as normalizeAccountId$1, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as stripMarkdown, wt as formatAllowlistMatchMeta, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./unified-runner-BNQKFoGX.js";
4
4
  import "./paths-DR2yt_mP.js";
5
5
  import "./github-copilot-token-D9X2phUj.js";
6
6
  import { D as resolveSlackAccount, E as resolveDefaultSlackAccountId, F as resolveDiscordAccount, M as listDiscordAccountIds, O as resolveSlackReplyToMode, P as resolveDefaultDiscordAccountId, S as resolveTelegramAccount, T as listSlackAccountIds, _ as normalizeWhatsAppTarget, a as listDiscordDirectoryPeersFromConfig, b as listTelegramAccountIds, c as listTelegramDirectoryGroupsFromConfig, d as listWhatsAppDirectoryPeersFromConfig, f as looksLikeSlackTargetId, g as isWhatsAppGroupJid, i as listDiscordDirectoryGroupsFromConfig, l as listTelegramDirectoryPeersFromConfig, o as listSlackDirectoryGroupsFromConfig, p as normalizeSlackMessagingTarget, s as listSlackDirectoryPeersFromConfig, u as listWhatsAppDirectoryGroupsFromConfig, w as listEnabledSlackAccounts, x as resolveDefaultTelegramAccountId } from "./plugins-muf5lfx-.js";
@@ -47,12 +47,12 @@ import "./paths-A0xdf3yk.js";
47
47
  import { h as onDiagnosticEvent, m as isDiagnosticsEnabled, p as emitDiagnosticEvent } from "./diagnostic-fnIb_o_V.js";
48
48
  import { n as extractOriginalFilename } from "./store-uf7TpQm3.js";
49
49
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BkHNUpdB.js";
50
- import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web--Ru_sFHM.js";
50
+ import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-B_XlrV_E.js";
51
51
  import "./diagnostic-session-state-DnkpMfCl.js";
52
52
  import "./image-B7fj8HDX.js";
53
53
  import "./pi-auth-json-BOqOPkC8.js";
54
54
  import "./pi-model-discovery-Cdz3tuFk.js";
55
- import "./manager-CDV3YWoX.js";
55
+ import "./manager-CJd0vK4S.js";
56
56
  import "./gemini-auth-lC1AI-WK.js";
57
57
  import "./sqlite-BflKfcLD.js";
58
58
  import "./commands-registry-L_7UhT9Y.js";
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Register an AbortController as the controller for an in-flight
3
+ * heartbeat run on `sessionKey`. If a previous controller exists for
4
+ * the same key (shouldn't happen — heartbeats are serialized per
5
+ * session — but be defensive), abort it before replacing.
6
+ */
7
+ export declare function registerHeartbeatRun(sessionKey: string, controller: AbortController): void;
8
+ /**
9
+ * Drop the controller for `sessionKey` from the registry. Called from
10
+ * the heartbeat runner's finally block once the run has completed
11
+ * (successfully, with an error, or via abort).
12
+ */
13
+ export declare function clearHeartbeatRun(sessionKey: string): void;
14
+ /**
15
+ * Abort the active heartbeat (if any) for `sessionKey`. Returns true
16
+ * when an abort was issued, false when no heartbeat was in flight.
17
+ *
18
+ * Called from the chat.send handler before it enqueues the user turn,
19
+ * so the user's message doesn't sit behind a heartbeat that may take
20
+ * 30s+ to finish. The aborted heartbeat will fire again on the next
21
+ * pulse interval — no state to recover.
22
+ */
23
+ export declare function abortHeartbeatRunForSession(sessionKey: string): boolean;
24
+ /**
25
+ * Snapshot of currently-tracked heartbeat session keys. Test-only;
26
+ * production code should not rely on enumeration since the set is
27
+ * fundamentally racy.
28
+ */
29
+ export declare function listActiveHeartbeatSessionsForTest(): string[];
30
+ /**
31
+ * Drop every controller from the registry without aborting them.
32
+ * Test-only — used by suite setup/teardown to keep state isolated.
33
+ */
34
+ export declare function resetActiveHeartbeatRunsForTest(): void;
@@ -3970,7 +3970,7 @@ var MemoryIndexManager = class MemoryIndexManager extends MemoryManagerEmbedding
3970
3970
  * to bypass the min-interval guard (CLI use).
3971
3971
  */
3972
3972
  async runL3CycleIfDue(params) {
3973
- const [{ runL3Cycle, runL3CycleIfDue }, { createSynthesizer }] = await Promise.all([import("./consolidate-BieO-_k_.js"), import("./synthesis-Bojs0PJL.js")]);
3973
+ const [{ runL3Cycle, runL3CycleIfDue }, { createSynthesizer }] = await Promise.all([import("./consolidate-BieO-_k_.js"), import("./synthesis-Cre_3fLT.js")]);
3974
3974
  const synthesize = createSynthesizer({
3975
3975
  cfg: this.cfg,
3976
3976
  agentId: this.agentId,
@@ -1,5 +1,5 @@
1
1
  import "./accounts-D9zGZU5t.js";
2
- import { t as runAgentTurn } from "./unified-runner-D7m-WeUt.js";
2
+ import { t as runAgentTurn } from "./unified-runner-BNQKFoGX.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-muf5lfx-.js";
@@ -49,7 +49,7 @@ import "./diagnostic-session-state-DnkpMfCl.js";
49
49
  import "./image-B7fj8HDX.js";
50
50
  import "./pi-auth-json-BOqOPkC8.js";
51
51
  import "./pi-model-discovery-Cdz3tuFk.js";
52
- import "./manager-CDV3YWoX.js";
52
+ import "./manager-CJd0vK4S.js";
53
53
  import "./gemini-auth-lC1AI-WK.js";
54
54
  import "./sqlite-BflKfcLD.js";
55
55
  import "./commands-registry-L_7UhT9Y.js";
@@ -52,7 +52,7 @@ import { r as getDiagnosticSessionState } from "./diagnostic-session-state-DnkpM
52
52
  import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-B7fj8HDX.js";
53
53
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-BOqOPkC8.js";
54
54
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-Cdz3tuFk.js";
55
- import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-CDV3YWoX.js";
55
+ import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-CJd0vK4S.js";
56
56
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-BpFmQTvo.js";
57
57
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-L_7UhT9Y.js";
58
58
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-5H7RKVif.js";
@@ -9625,7 +9625,7 @@ async function getMemorySearchManager(params) {
9625
9625
  const wrapper = new FallbackMemoryManager({
9626
9626
  primary,
9627
9627
  fallbackFactory: async () => {
9628
- const { MemoryIndexManager } = await import("./manager-CDV3YWoX.js").then((n) => n.t);
9628
+ const { MemoryIndexManager } = await import("./manager-CJd0vK4S.js").then((n) => n.t);
9629
9629
  return await MemoryIndexManager.get(params);
9630
9630
  }
9631
9631
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -9638,7 +9638,7 @@ async function getMemorySearchManager(params) {
9638
9638
  }
9639
9639
  }
9640
9640
  try {
9641
- const { MemoryIndexManager } = await import("./manager-CDV3YWoX.js").then((n) => n.t);
9641
+ const { MemoryIndexManager } = await import("./manager-CJd0vK4S.js").then((n) => n.t);
9642
9642
  return { manager: await MemoryIndexManager.get(params) };
9643
9643
  } catch (err) {
9644
9644
  return {
@@ -12104,6 +12104,40 @@ function buildSkillsJitBlocks(opts) {
12104
12104
 
12105
12105
  //#endregion
12106
12106
  //#region src/agents/system-prompt.ts
12107
+ /**
12108
+ * Read up to `limit` markdown filenames from `<workspaceDir>/memory/`,
12109
+ * sorted by mtime descending. Returns relative names (e.g. "2026-04-30.md")
12110
+ * for inlining into the system prompt — gives the agent the actual file
12111
+ * surface so it doesn't speculate names like "memory/2026-04-30.md" from
12112
+ * training-data priors. Resilient: missing dir → [], unreadable → [].
12113
+ */
12114
+ function listWorkspaceMemoryFiles(workspaceDir, limit = 10) {
12115
+ if (!workspaceDir) return [];
12116
+ const memoryDir = path.join(workspaceDir, "memory");
12117
+ let entries;
12118
+ try {
12119
+ entries = fs.readdirSync(memoryDir, { withFileTypes: true });
12120
+ } catch {
12121
+ return [];
12122
+ }
12123
+ const files = [];
12124
+ for (const entry of entries) {
12125
+ if (!entry.isFile()) continue;
12126
+ if (!entry.name.toLowerCase().endsWith(".md")) continue;
12127
+ let mtimeMs = 0;
12128
+ try {
12129
+ mtimeMs = fs.statSync(path.join(memoryDir, entry.name)).mtimeMs;
12130
+ } catch {
12131
+ mtimeMs = 0;
12132
+ }
12133
+ files.push({
12134
+ name: entry.name,
12135
+ mtimeMs
12136
+ });
12137
+ }
12138
+ files.sort((a, b) => b.mtimeMs - a.mtimeMs);
12139
+ return files.slice(0, limit).map((f) => f.name);
12140
+ }
12107
12141
  function buildSkillsSection(params) {
12108
12142
  if (params.isMinimal) return [];
12109
12143
  if (params.dropCatalog) return [];
@@ -12127,13 +12161,21 @@ function buildMemorySection(params) {
12127
12161
  "## Memory Recall",
12128
12162
  "Before answering anything about prior work, decisions, dates, people, preferences, or todos: run memory_search on MEMORY.md + memory/*.md; then use memory_get to pull only the needed lines. If low confidence after search, say you checked.",
12129
12163
  "",
12164
+ "**Never speculate memory file paths.** Use memory_search to find content; do not construct paths like `memory/<date>.md` from training-data priors and call read on them — that produces ENOENT spam and trips the consecutive-tool-error breaker.",
12165
+ "",
12130
12166
  "Memory is split into two layers you will see as files:",
12131
12167
  "- `MEMORY.md` — user-authored short-term memory. Hand-edited by the user; treat as ground truth they wrote themselves. Never rewrite it yourself.",
12132
- "- `memory/symi-core.md` + `memory/symi-beliefs.md` — long-term memory automatically consolidated from repeated observations (your evolving self). Do NOT hand-edit these files: they are regenerated each consolidation cycle. When the files disagree with a fresh user statement, trust the fresh statement and write a new observation to `memory/YYYY-MM-DD.md` the cycle will reconcile them.",
12133
- "- `memory/YYYY-MM-DD.md` daily append-only observations. This is where new memories land.",
12134
- "",
12135
- "When the user explicitly asks to *remember* or *always remember* something, after writing the observation also call `memory_pin` with a distinctive query so the fact survives pruning. Call `memory_unpin` when the user says to forget it."
12168
+ "- `memory/symi-core.md` + `memory/symi-beliefs.md` — long-term memory automatically consolidated from repeated observations (your evolving self). Do NOT hand-edit these files: they are regenerated each consolidation cycle. When the files disagree with a fresh user statement, trust the fresh statement and write a new observation. The cycle will reconcile them.",
12169
+ "- New observations go in dated daily files (e.g. `memory/<today>.md`); use `memory_search` to discover what already exists rather than guessing filenames."
12136
12170
  ];
12171
+ const memoryFiles = (params.workspaceMemoryFiles ?? []).filter(Boolean);
12172
+ if (memoryFiles.length > 0) {
12173
+ lines.push("");
12174
+ lines.push("Existing memory files in this workspace (most-recently-modified first):");
12175
+ for (const name of memoryFiles) lines.push(`- \`memory/${name}\``);
12176
+ }
12177
+ lines.push("");
12178
+ lines.push("When the user explicitly asks to *remember* or *always remember* something, after writing the observation also call `memory_pin` with a distinctive query so the fact survives pruning. Call `memory_unpin` when the user says to forget it.");
12137
12179
  if (params.citationsMode === "off") lines.push("Citations are disabled: do not mention file paths or line numbers in replies unless the user explicitly asks.");
12138
12180
  else lines.push("Citations: include Source: <path#line> when it helps the user verify memory snippets.");
12139
12181
  lines.push("");
@@ -12422,7 +12464,8 @@ function buildAgentSystemPrompt(params) {
12422
12464
  const memorySection = buildMemorySection({
12423
12465
  isMinimal,
12424
12466
  availableTools,
12425
- citationsMode: params.memoryCitationsMode
12467
+ citationsMode: params.memoryCitationsMode,
12468
+ workspaceMemoryFiles: listWorkspaceMemoryFiles(params.workspaceDir)
12426
12469
  });
12427
12470
  const docsSection = buildDocsSection({
12428
12471
  docsPath: params.docsPath,
@@ -54566,7 +54609,7 @@ function setCliSessionId(entry, provider, sessionId) {
54566
54609
  function createDefaultDeps() {
54567
54610
  return {
54568
54611
  sendMessageWhatsApp: async (...args) => {
54569
- const { sendMessageWhatsApp } = await import("./web-BoYy2HSO.js");
54612
+ const { sendMessageWhatsApp } = await import("./web-CE-OsTKq.js");
54570
54613
  return await sendMessageWhatsApp(...args);
54571
54614
  },
54572
54615
  sendMessageTelegram: async (...args) => {
@@ -69237,7 +69280,7 @@ function loadWebLoginQr() {
69237
69280
  return webLoginQrPromise;
69238
69281
  }
69239
69282
  function loadWebChannel() {
69240
- webChannelPromise ??= import("./web-BoYy2HSO.js");
69283
+ webChannelPromise ??= import("./web-CE-OsTKq.js");
69241
69284
  return webChannelPromise;
69242
69285
  }
69243
69286
  function loadWhatsAppActions() {
@@ -1,5 +1,5 @@
1
1
  import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-D9zGZU5t.js";
2
- import "./unified-runner-D7m-WeUt.js";
2
+ import "./unified-runner-BNQKFoGX.js";
3
3
  import "./paths-DR2yt_mP.js";
4
4
  import "./github-copilot-token-D9X2phUj.js";
5
5
  import "./plugins-muf5lfx-.js";
@@ -45,12 +45,12 @@ import "./pi-embedded-helpers-YqYJ6xU1.js";
45
45
  import "./paths-A0xdf3yk.js";
46
46
  import "./diagnostic-fnIb_o_V.js";
47
47
  import "./store-uf7TpQm3.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web--Ru_sFHM.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-B_XlrV_E.js";
49
49
  import "./diagnostic-session-state-DnkpMfCl.js";
50
50
  import "./image-B7fj8HDX.js";
51
51
  import "./pi-auth-json-BOqOPkC8.js";
52
52
  import "./pi-model-discovery-Cdz3tuFk.js";
53
- import "./manager-CDV3YWoX.js";
53
+ import "./manager-CJd0vK4S.js";
54
54
  import "./gemini-auth-lC1AI-WK.js";
55
55
  import "./sqlite-BflKfcLD.js";
56
56
  import "./commands-registry-L_7UhT9Y.js";
@@ -14,7 +14,7 @@ import "./client-CJIMV1WD.js";
14
14
  import "./call-e869fla2.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-UkXCmOLK.js";
17
+ import "./subagent-registry-DXCGIrYv.js";
18
18
  import "./sessions-CBlCXpU2.js";
19
19
  import "./tokens-BEvOiQ65.js";
20
20
  import "./plugins-DTKQE9kt.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-BjWk_WQa.js";
54
54
  import "./reply-prefix-Pz-5t5RS.js";
55
- import "./memory-cli-D_O5bN6m.js";
56
- import "./manager-DfZDS6-4.js";
55
+ import "./memory-cli-D4lLSeA1.js";
56
+ import "./manager-B6EhIj3H.js";
57
57
  import "./gemini-auth-CdtQ-GuM.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -103,7 +103,7 @@ import "./npm-registry-spec-PuS2I1Em.js";
103
103
  import "./skill-scanner-BV3QHmsf.js";
104
104
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-B4sNNRaW.js";
105
105
  import { t as renderTable } from "./table-Bka4fasy.js";
106
- import { t as buildPluginStatusReport } from "./status-BdKI8eQ7.js";
106
+ import { t as buildPluginStatusReport } from "./status-JL0CD-E1.js";
107
107
  import { n as updateNpmInstalledPlugins } from "./update-DticqU4-.js";
108
108
  import os from "node:os";
109
109
  import path from "node:path";