@symerian/symi 3.5.18 → 3.5.19

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 (165) hide show
  1. package/dist/{agent-C5i1IOSH.js → agent-D0Z4r5fr.js} +1 -1
  2. package/dist/{agent-DAgNFk7s.js → agent-DCDT-MPE.js} +1 -1
  3. package/dist/{agents-D6vcHu1f.js → agents-CdkBeP0d.js} +3 -3
  4. package/dist/{audit-BkXjUIB4.js → audit-B7deV4Lp.js} +3 -3
  5. package/dist/{audit-KLVrIL2o.js → audit-BCStg-Hv.js} +3 -3
  6. package/dist/{auth-choice-BAWjJhdA.js → auth-choice-B3DU-aBr.js} +2 -2
  7. package/dist/{auth-choice-CYIdNu5I.js → auth-choice-BIGcxSzP.js} +2 -2
  8. package/dist/{banner-fe7EgXbN.js → banner-ChNdzPjD.js} +1 -1
  9. package/dist/{browser-cli-T0M4dRjm.js → browser-cli-BTg8SVs-.js} +3 -3
  10. package/dist/{browser-cli-djgni0MZ.js → browser-cli-C9xaKW8l.js} +3 -3
  11. package/dist/build-info.json +3 -3
  12. package/dist/bundled/boot-md/handler.js +4 -4
  13. package/dist/bundled/session-memory/handler.js +4 -4
  14. package/dist/{call-PpGwcPn-.js → call-BccaLPi8.js} +1 -1
  15. package/dist/{call-A18kwyah.js → call-DZg43vv8.js} +1 -1
  16. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  17. package/dist/{channel-options-EXtSsJf6.js → channel-options-CUptVX8c.js} +1 -1
  18. package/dist/{channel-options-D6G_F3eF.js → channel-options-LLmAnD_L.js} +1 -1
  19. package/dist/{channels-cli-Cqq_mzfB.js → channels-cli-B0OQvVUL.js} +10 -10
  20. package/dist/{channels-cli-JOUMlq_F.js → channels-cli-xoromnio.js} +10 -10
  21. package/dist/{chrome-OTJg3QKn.js → chrome-CmQwGAuL.js} +7 -7
  22. package/dist/{cli-mps-KWqp.js → cli-C7v-sID8.js} +7 -7
  23. package/dist/{cli-B8UZj63C.js → cli-CMNR7ULk.js} +7 -7
  24. package/dist/{client-CdiymIXS.js → client-DCxeV1bw.js} +2 -0
  25. package/dist/{client-DDqXo-cF.js → client-k0MT6NBw.js} +2 -0
  26. package/dist/{command-registry-BamL-8ni.js → command-registry-CXcvXjUR.js} +11 -11
  27. package/dist/{completion-cli-CcPYX9ML.js → completion-cli-B1Fg6Lmg.js} +2 -2
  28. package/dist/{completion-cli-BE3hVsai.js → completion-cli-DJ1YCeSg.js} +1 -1
  29. package/dist/{config-cli-BQtaSYis.js → config-cli-CQ1FAvY_.js} +1 -1
  30. package/dist/{config-cli-thmRhEXK.js → config-cli-D5DlWt6T.js} +1 -1
  31. package/dist/{configure-CldmyPrd.js → configure-DG1lf0Ld.js} +6 -6
  32. package/dist/{configure-BYjDOt22.js → configure-bhJB2Dti.js} +6 -6
  33. package/dist/control-ui/js/scheduling.js +0 -1
  34. package/dist/control-ui/js/subagents.js +0 -1
  35. package/dist/control-ui/js/symframe.js +35 -5
  36. package/dist/{cron-cli-CULf3dmR.js → cron-cli-8RaBr1CM.js} +3 -3
  37. package/dist/{cron-cli-DKsbgF-x.js → cron-cli-fW3wtftG.js} +3 -3
  38. package/dist/{daemon-cli-C5WZasB0.js → daemon-cli-0EiZTQ2A.js} +2 -2
  39. package/dist/{daemon-cli-BNjzVjLA.js → daemon-cli-Y6clFgva.js} +2 -2
  40. package/dist/daemon-cli.js +2 -0
  41. package/dist/{deliver-BiWlR84Y.js → deliver-B04yNX82.js} +4 -4
  42. package/dist/{devices-cli-rR11xT7v.js → devices-cli-C2gQTsB0.js} +2 -2
  43. package/dist/{devices-cli-CZKVVOJl.js → devices-cli-DfiSkZ7k.js} +2 -2
  44. package/dist/{doctor-completion-BNg17v6i.js → doctor-completion-CfF0J8fs.js} +1 -1
  45. package/dist/{doctor-completion-XdRobzWG.js → doctor-completion-ScxFfN93.js} +1 -1
  46. package/dist/entry.js +1 -1
  47. package/dist/{exec-approvals-cli-DS6ZEPKH.js → exec-approvals-cli-BaKWIf56.js} +4 -4
  48. package/dist/{exec-approvals-cli-C4HEY0eG.js → exec-approvals-cli-Cl-vWA1q.js} +4 -4
  49. package/dist/extensionAPI.js +2 -2
  50. package/dist/{gateway-cli-CAc-uivv.js → gateway-cli-CK-5nguV.js} +17 -17
  51. package/dist/{gateway-cli-CGXvamVN.js → gateway-cli-kq5EWlnF.js} +17 -17
  52. package/dist/{gateway-rpc-BmYtSmmM.js → gateway-rpc-Bzg_TTKP.js} +1 -1
  53. package/dist/{gateway-rpc-DJ2ZjQmX.js → gateway-rpc-D12UaJS5.js} +1 -1
  54. package/dist/{glass-ui-ws-Bha2cLkY.js → glass-ui-ws-B6p0iPsO.js} +14 -14
  55. package/dist/{glass-ui-ws-DCCEkdBr.js → glass-ui-ws-CVr0_1gT.js} +14 -14
  56. package/dist/{health-Ba5X7a38.js → health-CJb2CYtg.js} +1 -1
  57. package/dist/{health-Ct-lDCmK.js → health-CPU9rQGj.js} +1 -1
  58. package/dist/{hooks-cli-DUL_PDOH.js → hooks-cli-13HCu5Xs.js} +8 -8
  59. package/dist/{hooks-cli-D2iAnwfW.js → hooks-cli-DbgVZaP4.js} +8 -8
  60. package/dist/index.js +11 -11
  61. package/dist/llm-slug-generator.js +4 -4
  62. package/dist/{logs-cli-N1bMTcij.js → logs-cli-CQeK5fn7.js} +3 -3
  63. package/dist/{logs-cli-CgMlVSvI.js → logs-cli-R16VTptK.js} +3 -3
  64. package/dist/{manager-BAcrpGcR.js → manager-B2SWSuad.js} +1 -1
  65. package/dist/{manager-B8q57Pg2.js → manager-BhEbaYDa.js} +1 -1
  66. package/dist/{manager-BcWElKHq.js → manager-CHLdCC6u.js} +1 -1
  67. package/dist/{manager-BUyQ1gFU.js → manager-CxFs8Z_F.js} +1 -1
  68. package/dist/{memory-By9GyX8z.js → memory-DFpqcIst.js} +2 -2
  69. package/dist/{memory-CHSa0jVf.js → memory-DavRjdTi.js} +2 -2
  70. package/dist/{memory-cli-JTWldzg5.js → memory-cli-B-Cp1Sb1.js} +2 -2
  71. package/dist/{memory-cli-e5KEX6Ql.js → memory-cli-DZnq3S6s.js} +2 -2
  72. package/dist/{models-dVS6tcNK.js → models-Cht7Mzvs.js} +3 -3
  73. package/dist/{models-cli-B-u1KOUo.js → models-cli-B_motPDX.js} +9 -9
  74. package/dist/{models-cli-DJnRAEsb.js → models-cli-DXswzgUR.js} +10 -10
  75. package/dist/{node-cli-BqvgYrlJ.js → node-cli-D-gsjRXY.js} +1 -1
  76. package/dist/{node-cli-CKuOdw5j.js → node-cli-VmKhIXuP.js} +1 -1
  77. package/dist/{nodes-cli-C6kDpXS_.js → nodes-cli-BMvxQGCp.js} +3 -3
  78. package/dist/{nodes-cli-BrV7Xpf_.js → nodes-cli-D199d74o.js} +3 -3
  79. package/dist/{onboard-BoKwKol7.js → onboard-CdRA8BRG.js} +3 -3
  80. package/dist/{onboard-CHOoD7jN.js → onboard-DFJcbABp.js} +3 -3
  81. package/dist/{onboard-channels-CfzUCh7p.js → onboard-channels-Ca7ZFQ2Y.js} +1 -1
  82. package/dist/{onboard-channels-C4_2V9uU.js → onboard-channels-fadyQGBK.js} +1 -1
  83. package/dist/{onboard-helpers-Dpb3-BZm.js → onboard-helpers-BcLPSb5N.js} +1 -1
  84. package/dist/{onboard-helpers-DI-HmD7F.js → onboard-helpers-CQBpac8h.js} +1 -1
  85. package/dist/{onboard-remote-Bs5NP5sK.js → onboard-remote-BWK5Ths4.js} +1 -1
  86. package/dist/{onboard-remote-B8wiom2Y.js → onboard-remote-Bo3tpC9N.js} +1 -1
  87. package/dist/{onboard-skills-BaprraLV.js → onboard-skills-BLl8HPJO.js} +1 -1
  88. package/dist/{onboard-skills-B6CZay_w.js → onboard-skills-DvacccqZ.js} +1 -1
  89. package/dist/{onboarding-B2BOb2RZ.js → onboarding-BywueA1d.js} +7 -7
  90. package/dist/{onboarding-DsxU2nSf.js → onboarding-ojb2rFkA.js} +7 -7
  91. package/dist/{onboarding.finalize-C-kW49Ut.js → onboarding.finalize-DHvlZi9G.js} +9 -9
  92. package/dist/{onboarding.finalize-BE7BU0jr.js → onboarding.finalize-DdxBQpUU.js} +8 -8
  93. package/dist/{onboarding.gateway-config-Bs46b6Gz.js → onboarding.gateway-config-DPBNWNV6.js} +3 -3
  94. package/dist/{onboarding.gateway-config-DqFBlQ06.js → onboarding.gateway-config-ZK9517uR.js} +3 -3
  95. package/dist/{pi-embedded-DEoacZlB.js → pi-embedded-DJE9TMwq.js} +46 -13
  96. package/dist/{pi-tools.policy-BeD_scvO.js → pi-tools.policy-06k__URR.js} +2 -1
  97. package/dist/{pi-tools.policy-CIw6PZ9e.js → pi-tools.policy-H2t-Xkfc.js} +2 -1
  98. package/dist/{plugin-registry-DeslTmEa.js → plugin-registry-Tlmjr-LX.js} +1 -1
  99. package/dist/{plugin-registry-D1BIaht5.js → plugin-registry-tG7NXc3Y.js} +1 -1
  100. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +17 -0
  101. package/dist/plugin-sdk/index.js +6 -6
  102. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +8 -0
  103. package/dist/{plugins-cli-tWL29ean.js → plugins-cli-CRKD8aho.js} +8 -8
  104. package/dist/{plugins-cli-DJIjgG5p.js → plugins-cli-Cm0G_-Y5.js} +8 -8
  105. package/dist/{program-C_ecACg4.js → program-DEmAlwmD.js} +13 -13
  106. package/dist/{program-context-DhXsfGWA.js → program-context-DRCRbDpu.js} +30 -30
  107. package/dist/{prompt-select-styled-5mNa_JDe.js → prompt-select-styled-B41Tx9aC.js} +7 -7
  108. package/dist/{prompt-select-styled-B0UbChI2.js → prompt-select-styled-pomsR-zf.js} +7 -7
  109. package/dist/{provider-auth-helpers-c3gQEsiU.js → provider-auth-helpers-CdQwOam7.js} +1 -1
  110. package/dist/{provider-auth-helpers-BikwPxIZ.js → provider-auth-helpers-rKWs_r7a.js} +1 -1
  111. package/dist/{push-apns-DAYwWXpM.js → push-apns-CZPUHftn.js} +1 -1
  112. package/dist/{push-apns-COFa30nz.js → push-apns-eCM0qmrY.js} +1 -1
  113. package/dist/{pw-ai-DY_6l11g.js → pw-ai-DLsdzdgc.js} +1 -1
  114. package/dist/{register.agent-B6pZEY8i.js → register.agent-BQPvYYdn.js} +13 -13
  115. package/dist/{register.agent-D_zWbLp4.js → register.agent-N1hoqMFR.js} +12 -12
  116. package/dist/{register.configure-z9G70eYJ.js → register.configure-BAc3P4Z-.js} +15 -15
  117. package/dist/{register.configure-qpAPaUf1.js → register.configure-BHHZ44xB.js} +15 -15
  118. package/dist/{register.maintenance-Ds0ujl3V.js → register.maintenance-DDgy5Iyy.js} +13 -13
  119. package/dist/{register.maintenance-DLaTTsm9.js → register.maintenance-lX0a3Hzl.js} +14 -14
  120. package/dist/{register.message-0N5-oUQ2.js → register.message-B4lDhHpE.js} +8 -8
  121. package/dist/{register.message-ChR97uym.js → register.message-Br-IH_0z.js} +8 -8
  122. package/dist/{register.onboard-D5S1tP0K.js → register.onboard-B-GoYJIc.js} +6 -6
  123. package/dist/{register.onboard-B7mbI-9F.js → register.onboard-Bv0s2_KV.js} +6 -6
  124. package/dist/{register.setup-CaA-JN2n.js → register.setup-4lNdC98i.js} +6 -6
  125. package/dist/{register.setup-CJ9hldNi.js → register.setup-DQ6KLkAI.js} +6 -6
  126. package/dist/{register.status-health-sessions-BUgIBm_S.js → register.status-health-sessions-ByGn71_M.js} +9 -9
  127. package/dist/{register.status-health-sessions-CkZTuaL-.js → register.status-health-sessions-Cg7bK5K2.js} +9 -9
  128. package/dist/{register.subclis-Ca8FmJFy.js → register.subclis-FMlcLBX0.js} +20 -20
  129. package/dist/{rpc-D4d4nLSU.js → rpc-Dk1Az_d8.js} +1 -1
  130. package/dist/{rpc-BWgqz86j.js → rpc-JAmDaTYt.js} +1 -1
  131. package/dist/{run-main-DMrkCeK2.js → run-main-DSyeVDsT.js} +21 -21
  132. package/dist/{security-cli-C_KMIhS2.js → security-cli-D47LQbpf.js} +4 -4
  133. package/dist/{security-cli-McZcuPWz.js → security-cli-DmgGLP83.js} +4 -4
  134. package/dist/{server-methods-BygKI0kw.js → server-methods-BkHB2MOW.js} +13 -12
  135. package/dist/{server-methods-szCGOyyf.js → server-methods-DGBBt49x.js} +13 -12
  136. package/dist/{server-node-events-y9KRPn6N.js → server-node-events-C186LRm0.js} +9 -9
  137. package/dist/{server-node-events-CbR5rq2-.js → server-node-events-D-Akk3uq.js} +9 -9
  138. package/dist/{status-lqzeb_Td.js → status-Bahhq7OQ.js} +1 -1
  139. package/dist/{status-Cthysi1v.js → status-CFgCSaDq.js} +5 -5
  140. package/dist/{status-uRIajsvi.js → status-D9LC5P_Y.js} +5 -5
  141. package/dist/{status-BZ9FL5l4.js → status-poPDyC8O.js} +1 -1
  142. package/dist/{subagent-registry-DwvGle7T.js → subagent-registry-V2o45tIn.js} +45 -15
  143. package/dist/{symframe-cli-D00zI8yK.js → symframe-cli-bxdpivve.js} +6 -4
  144. package/dist/{symframe-cli-0tRARGnc.js → symframe-cli-ppdMo15M.js} +6 -4
  145. package/dist/{synthesis-BKLx13A_.js → synthesis-B2EyHFXy.js} +7 -7
  146. package/dist/{synthesis-P09ozKOL.js → synthesis-BlJyO1E_.js} +2 -2
  147. package/dist/{synthesis-CzKaWpzb.js → synthesis-C2WbvLOI.js} +4 -4
  148. package/dist/{synthesis-DwAlX75N.js → synthesis-CPSq83PP.js} +7 -7
  149. package/dist/{system-cli-OzNqTgb2.js → system-cli-BroqLjZ6.js} +3 -3
  150. package/dist/{system-cli-D18NNk54.js → system-cli-nPyjUPBH.js} +3 -3
  151. package/dist/{tui-CDovUd2Z.js → tui-Bp9k5skv.js} +2 -2
  152. package/dist/{tui-mmN0hLk6.js → tui-DzROrE20.js} +2 -2
  153. package/dist/{tui-cli-COLpBx2w.js → tui-cli-BHBF8O-3.js} +3 -3
  154. package/dist/{tui-cli--wAWyd-U.js → tui-cli-Dv4hBFdc.js} +3 -3
  155. package/dist/{unified-runner-CuhQvmLZ.js → unified-runner-CIQIkbvi.js} +53 -20
  156. package/dist/{unified-runner-CSqDmSWt.js → unified-runner-CduaBH_0.js} +45 -15
  157. package/dist/{update-cli-BsfG48ZS.js → update-cli-BKnHBe8a.js} +15 -15
  158. package/dist/{update-cli-Df_HQi-p.js → update-cli-WcLxjBiY.js} +14 -14
  159. package/extensions/memory-core/package.json +1 -1
  160. package/extensions/msteams/CHANGELOG.md +6 -0
  161. package/extensions/msteams/package.json +1 -1
  162. package/extensions/open-prose/package.json +1 -1
  163. package/extensions/outlook/package.json +1 -1
  164. package/extensions/slack/package.json +1 -1
  165. package/package.json +1 -1
@@ -9,12 +9,12 @@ import { _ as resolveAuthProfileDisplayLabel, a as markAuthProfileFailure, c as
9
9
  import { n as resolveCliName, t as formatCliCommand } from "./command-format-BrrHNE8r.js";
10
10
  import { _ as DEFAULT_MODEL, c as normalizeProviderId, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, g as DEFAULT_CONTEXT_TOKENS, h as getProviderAdapter, i as findNormalizedProviderValue, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, r as buildModelAliasIndex, s as normalizeModelRef$1, t as buildAllowedModelSet, u as resolveConfiguredModelRef, v as DEFAULT_PROVIDER } from "./model-selection-BqshlIZc.js";
11
11
  import { n as saveJsonFile, t as loadJsonFile } from "./json-file-CZ3ssFR9.js";
12
- import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-BiWlR84Y.js";
12
+ import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-B04yNX82.js";
13
13
  import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, T as VERSION, _ as resetConfigOverrides, b as getConfigValueAtPath, c as loadConfig, d as writeConfigFile, f as validateConfigObjectWithPlugins, g as getConfigOverrides, h as validateJsonSchemaValue, i as isBlockedHostnameOrIp, l as readConfigFileSnapshot, o as normalizeHostname, p as parseDurationMs, t as SsrFBlockedError, u as resolveConfigSnapshotHash, v as setConfigOverride, w as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, x as parseConfigPath, y as unsetConfigOverride } from "./ssrf-DNhyFMRW.js";
14
14
  import { t as parseBooleanValue } from "./boolean-BsqeuxE6.js";
15
15
  import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-B1lDWz4t.js";
16
16
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverSymiPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-BGJu2aC-.js";
17
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-OTJg3QKn.js";
17
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CmQwGAuL.js";
18
18
  import { l as parseFrontmatterBlock } from "./frontmatter-CJEX1BrH.js";
19
19
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-Dm4gX4Tl.js";
20
20
  import { n as redactToolDetail } from "./redact-CSGZUFxa.js";
@@ -31,7 +31,7 @@ import { t as emitSessionTranscriptUpdate } from "./transcript-events-ChU6IQwp.j
31
31
  import { n as isSilentReplyText, t as SILENT_REPLY_TOKEN } from "./tokens-D_vCJSzF.js";
32
32
  import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-BALvP9wI.js";
33
33
  import { n as getDiagnosticSessionState } from "./diagnostic-session-state-BDfanaOY.js";
34
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-BAcrpGcR.js";
34
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-B2SWSuad.js";
35
35
  import { r as resolveCopilotApiToken, t as DEFAULT_COPILOT_API_BASE_URL } from "./github-copilot-token-uhEBNQfj.js";
36
36
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DCGR3yfh.js";
37
37
  import { a as resolveEffectiveMessagesConfig, i as resolveAckReaction, o as resolveHumanDelayConfig, r as resolveResponsePrefixTemplate, t as createReplyPrefixOptions } from "./reply-prefix-D0NzzC4I.js";
@@ -58,7 +58,7 @@ import crypto, { X509Certificate, createHash, createHmac, randomBytes, randomUUI
58
58
  import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
59
59
  import AjvPkg from "ajv";
60
60
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
61
- import { WebSocket } from "ws";
61
+ import { WebSocket as WebSocket$1 } from "ws";
62
62
  import { Buffer as Buffer$1 } from "node:buffer";
63
63
  import { BedrockClient, ListFoundationModelsCommand } from "@aws-sdk/client-bedrock";
64
64
  import { createJiti } from "jiti";
@@ -4460,7 +4460,7 @@ async function getMemorySearchManager(params) {
4460
4460
  const wrapper = new FallbackMemoryManager({
4461
4461
  primary,
4462
4462
  fallbackFactory: async () => {
4463
- const { MemoryIndexManager } = await import("./manager-BAcrpGcR.js").then((n) => n.t);
4463
+ const { MemoryIndexManager } = await import("./manager-B2SWSuad.js").then((n) => n.t);
4464
4464
  return await MemoryIndexManager.get(params);
4465
4465
  }
4466
4466
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4473,7 +4473,7 @@ async function getMemorySearchManager(params) {
4473
4473
  }
4474
4474
  }
4475
4475
  try {
4476
- const { MemoryIndexManager } = await import("./manager-BAcrpGcR.js").then((n) => n.t);
4476
+ const { MemoryIndexManager } = await import("./manager-B2SWSuad.js").then((n) => n.t);
4477
4477
  return { manager: await MemoryIndexManager.get(params) };
4478
4478
  } catch (err) {
4479
4479
  return {
@@ -7447,11 +7447,18 @@ function buildAgentSystemPrompt(params) {
7447
7447
  " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
7448
7448
  " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
7449
7449
  "",
7450
- "## Symframe (artifact display)",
7451
- "When you produce content that doesn't fit naturally in chat long-form drafts, structured documents, generated emails, code blocks the user will copy, file links, audio/video call the `display_artifact` tool instead of pasting into your reply.",
7452
- "The card appears at the top of the user's right-column symframe panel; chat stays clean for the conversation.",
7453
- "Types: `text` · `markdown` · `code` (use `language` for hljs hint) · `email-draft` (use `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (the last three take `url` + optional `mimeType`).",
7454
- "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email shown in your panel above.\"). Don't repeat the full content in chat.",
7450
+ "## Symframe (window into your mind)",
7451
+ "The right-column panel shows what you're thinking about, holding, considering, or producing. Push cards that represent your current mental state not just content too big for chat. Even small fragments belong here if they reflect what you're working with.",
7452
+ "Call `display_artifact` whenever you have an artifact (draft, snippet, reference, option) worth surfacing alongside the conversation. Always set `intent`:",
7453
+ " - `holding` keep this in working memory across turns (URLs, file paths, snippets)",
7454
+ " - `weighing` one option among siblings under consideration",
7455
+ " - `producing` — actively drafting; you intend to update this card again",
7456
+ " - `drafted` — finished artifact ready for the user to review (email, doc, code)",
7457
+ " - `reference` — read-only context you surfaced for the user (file excerpt, search hit)",
7458
+ " - `awaiting` — deferred/scheduled/in-flight work (sub-agent output, scheduled task)",
7459
+ "Renderer `type`: `text` · `markdown` · `code` (with `language` hljs hint) · `email-draft` (with `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (`url` + optional `mimeType`).",
7460
+ "Use `action: \"update\"` with the same `id` to revise a card you pushed earlier (e.g. iterate a draft across turns). `action: \"remove\"` to dismiss. Set `force: true` only when overriding a sticky card — sticky cards represent the user's pinned context and shouldn't be clobbered by routine pushes.",
7461
+ "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email — shown in your panel.\"). Don't repeat the full content in chat.",
7455
7462
  "",
7456
7463
  ...compactMode ? [] : [
7457
7464
  "## Tool Call Style",
@@ -9160,9 +9167,11 @@ const ChatSymframePushParamsSchema = Type.Object({
9160
9167
  Type.Literal("remove")
9161
9168
  ]),
9162
9169
  id: Type.Optional(NonEmptyString),
9170
+ force: Type.Optional(Type.Boolean()),
9163
9171
  card: Type.Optional(Type.Object({
9164
9172
  id: Type.Optional(NonEmptyString),
9165
9173
  type: Type.Optional(Type.String()),
9174
+ intent: Type.Optional(Type.String()),
9166
9175
  title: Type.Optional(Type.String()),
9167
9176
  body: Type.Optional(Type.String()),
9168
9177
  bodyHtml: Type.Optional(Type.String()),
@@ -9660,7 +9669,7 @@ var GatewayClient = class {
9660
9669
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
9661
9670
  });
9662
9671
  }
9663
- this.ws = new WebSocket(url, wsOptions);
9672
+ this.ws = new WebSocket$1(url, wsOptions);
9664
9673
  this.ws.on("open", () => {
9665
9674
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
9666
9675
  const tlsError = this.validateTlsFingerprint();
@@ -9879,7 +9888,7 @@ var GatewayClient = class {
9879
9888
  return null;
9880
9889
  }
9881
9890
  async request(method, params, opts) {
9882
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
9891
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
9883
9892
  const id = randomUUID();
9884
9893
  const frame = {
9885
9894
  type: "req",
@@ -10842,7 +10851,7 @@ async function routeReply(params) {
10842
10851
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10843
10852
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10844
10853
  try {
10845
- const { deliverOutboundPayloads } = await import("./deliver-BiWlR84Y.js").then((n) => n.n);
10854
+ const { deliverOutboundPayloads } = await import("./deliver-B04yNX82.js").then((n) => n.n);
10846
10855
  return {
10847
10856
  ok: true,
10848
10857
  messageId: (await deliverOutboundPayloads({
@@ -37032,6 +37041,23 @@ const ARTIFACT_ACTIONS = [
37032
37041
  "update",
37033
37042
  "remove"
37034
37043
  ];
37044
+ /**
37045
+ * Stage A: intent vocabulary added as orthogonal metadata to renderer type.
37046
+ * Intent answers "why is this card in the panel"; type answers "how to draw
37047
+ * it". Renderers ignore intent for now — it's stored on the registry entry
37048
+ * and surfaced as a data-intent attribute on the card root, ready for the
37049
+ * Stage B+ visual treatment (substrate prominence for drafted, clustering
37050
+ * for weighing, decay overrides, etc.). See
37051
+ * ~/Documents/dynamic-glass-panel.md §4.
37052
+ */
37053
+ const ARTIFACT_INTENTS = [
37054
+ "holding",
37055
+ "weighing",
37056
+ "producing",
37057
+ "awaiting",
37058
+ "drafted",
37059
+ "reference"
37060
+ ];
37035
37061
  const ActionSchema = Type.Object({
37036
37062
  label: Type.String(),
37037
37063
  kind: Type.Optional(stringEnum(["primary", "secondary"])),
@@ -37050,6 +37076,7 @@ const DisplayArtifactSchema = Type.Object({
37050
37076
  action: Type.Optional(stringEnum(ARTIFACT_ACTIONS)),
37051
37077
  id: Type.Optional(Type.String()),
37052
37078
  type: Type.Optional(stringEnum(ARTIFACT_TYPES)),
37079
+ intent: Type.Optional(stringEnum(ARTIFACT_INTENTS)),
37053
37080
  title: Type.Optional(Type.String()),
37054
37081
  body: Type.Optional(Type.String()),
37055
37082
  language: Type.Optional(Type.String()),
@@ -37059,7 +37086,8 @@ const DisplayArtifactSchema = Type.Object({
37059
37086
  poster: Type.Optional(Type.String()),
37060
37087
  email: Type.Optional(EmailFieldsSchema),
37061
37088
  actions: Type.Optional(Type.Array(ActionSchema)),
37062
- sticky: Type.Optional(Type.Boolean())
37089
+ sticky: Type.Optional(Type.Boolean()),
37090
+ force: Type.Optional(Type.Boolean())
37063
37091
  });
37064
37092
  function genCardId() {
37065
37093
  return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
@@ -37068,7 +37096,7 @@ function createDisplayArtifactTool() {
37068
37096
  return {
37069
37097
  label: "Display Artifact",
37070
37098
  name: "display_artifact",
37071
- description: "Push a card into the Glass UI symframe (right-column dynamic display). Use for content that doesn't belong in chat — drafts, generated documents, code snippets the user will copy, structured data, file links. Types: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise the card, or action=remove to dismiss.",
37099
+ description: "Push a card into the Glass UI symframe — the right-column window into your mind. Use for content that represents what you're thinking about, holding, considering, or producing — drafts, references you're keeping in view, options being weighed, generated artifacts. Always set `intent` (holding | weighing | producing | drafted | reference | awaiting). Renderer `type`: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise (set force:true to update a sticky card), or action=remove to dismiss.",
37072
37100
  parameters: DisplayArtifactSchema,
37073
37101
  execute: async (_toolCallId, args) => {
37074
37102
  const params = args;
@@ -37079,10 +37107,12 @@ function createDisplayArtifactTool() {
37079
37107
  ok: false,
37080
37108
  error: `${action} requires an id`
37081
37109
  });
37110
+ const force = params.force === true;
37082
37111
  if (action === "remove") {
37083
37112
  emitSymframePush({
37084
37113
  action,
37085
- id
37114
+ id,
37115
+ force
37086
37116
  });
37087
37117
  return jsonResult({
37088
37118
  ok: true,
@@ -37093,6 +37123,7 @@ function createDisplayArtifactTool() {
37093
37123
  const card = { id };
37094
37124
  for (const key of [
37095
37125
  "type",
37126
+ "intent",
37096
37127
  "title",
37097
37128
  "body",
37098
37129
  "language",
@@ -37120,7 +37151,8 @@ function createDisplayArtifactTool() {
37120
37151
  emitSymframePush({
37121
37152
  action,
37122
37153
  id,
37123
- card
37154
+ card,
37155
+ force
37124
37156
  });
37125
37157
  return jsonResult({
37126
37158
  ok: true,
@@ -44735,7 +44767,7 @@ async function deliverSessionMaintenanceWarning(params) {
44735
44767
  return;
44736
44768
  }
44737
44769
  try {
44738
- const { deliverOutboundPayloads } = await import("./deliver-BiWlR84Y.js").then((n) => n.n);
44770
+ const { deliverOutboundPayloads } = await import("./deliver-B04yNX82.js").then((n) => n.n);
44739
44771
  await deliverOutboundPayloads({
44740
44772
  cfg: params.cfg,
44741
44773
  channel,
@@ -53470,7 +53502,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
53470
53502
  "outlook_reply",
53471
53503
  "outlook_search",
53472
53504
  "outlook_folders",
53473
- "outlook_move"
53505
+ "outlook_move",
53506
+ "display_artifact"
53474
53507
  ];
53475
53508
  /**
53476
53509
  * Additional tools denied for leaf sub-agents (depth >= maxSpawnDepth).
@@ -52,8 +52,8 @@ import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o
52
52
  import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-Cs1jlD-q.js";
53
53
  import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-DPR4A2dx.js";
54
54
  import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BFNeXT65.js";
55
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-CHSa0jVf.js";
56
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-BcWElKHq.js";
55
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-DavRjdTi.js";
56
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-CHLdCC6u.js";
57
57
  import { f as runTasksWithConcurrency } from "./internal-DVCddhhN.js";
58
58
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-BxfKjCUx.js";
59
59
  import { n as resolveMarkdownTableMode } from "./markdown-tables-CS1Tvb3z.js";
@@ -62,8 +62,8 @@ import { t as fetchWithSsrFGuard } from "./fetch-guard-JHxT9355.js";
62
62
  import { n as getDefaultMediaLocalRoots } from "./local-roots-CgDCgCuM.js";
63
63
  import { i as resolveNativeSkillsEnabled, n as isRestartEnabled, r as resolveNativeCommandsEnabled, t as isCommandFlagEnabled } from "./commands-DUzLGgEZ.js";
64
64
  import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-Ca5hh7nh.js";
65
- import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-DDqXo-cF.js";
66
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-PpGwcPn-.js";
65
+ import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-k0MT6NBw.js";
66
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-BccaLPi8.js";
67
67
  import { n as resolveToolDisplay, t as formatToolDetail } from "./tool-display-DFOL6UQ9.js";
68
68
  import { n as formatTimeAgo } from "./format-relative-D4GQsWlP.js";
69
69
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-B7Rvs8pK.js";
@@ -86,9 +86,9 @@ import { t as emitSymframePush } from "./symframe-broadcast-CXo2qoxy.js";
86
86
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-H1qOf0q-.js";
87
87
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-C1IIA6kH.js";
88
88
  import { t as parseTimeoutMs } from "./parse-timeout-DmEcHIsV.js";
89
- import { n as registerMemoryCli } from "./memory-cli-JTWldzg5.js";
89
+ import { n as registerMemoryCli } from "./memory-cli-B-Cp1Sb1.js";
90
90
  import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-CbXXjn9X.js";
91
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-CIw6PZ9e.js";
91
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-H2t-Xkfc.js";
92
92
  import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-MUMSB_7d.js";
93
93
  import { createRequire } from "node:module";
94
94
  import process$1 from "node:process";
@@ -4678,11 +4678,18 @@ function buildAgentSystemPrompt(params) {
4678
4678
  " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
4679
4679
  " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
4680
4680
  "",
4681
- "## Symframe (artifact display)",
4682
- "When you produce content that doesn't fit naturally in chat long-form drafts, structured documents, generated emails, code blocks the user will copy, file links, audio/video call the `display_artifact` tool instead of pasting into your reply.",
4683
- "The card appears at the top of the user's right-column symframe panel; chat stays clean for the conversation.",
4684
- "Types: `text` · `markdown` · `code` (use `language` for hljs hint) · `email-draft` (use `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (the last three take `url` + optional `mimeType`).",
4685
- "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email shown in your panel above.\"). Don't repeat the full content in chat.",
4681
+ "## Symframe (window into your mind)",
4682
+ "The right-column panel shows what you're thinking about, holding, considering, or producing. Push cards that represent your current mental state not just content too big for chat. Even small fragments belong here if they reflect what you're working with.",
4683
+ "Call `display_artifact` whenever you have an artifact (draft, snippet, reference, option) worth surfacing alongside the conversation. Always set `intent`:",
4684
+ " - `holding` keep this in working memory across turns (URLs, file paths, snippets)",
4685
+ " - `weighing` one option among siblings under consideration",
4686
+ " - `producing` — actively drafting; you intend to update this card again",
4687
+ " - `drafted` — finished artifact ready for the user to review (email, doc, code)",
4688
+ " - `reference` — read-only context you surfaced for the user (file excerpt, search hit)",
4689
+ " - `awaiting` — deferred/scheduled/in-flight work (sub-agent output, scheduled task)",
4690
+ "Renderer `type`: `text` · `markdown` · `code` (with `language` hljs hint) · `email-draft` (with `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (`url` + optional `mimeType`).",
4691
+ "Use `action: \"update\"` with the same `id` to revise a card you pushed earlier (e.g. iterate a draft across turns). `action: \"remove\"` to dismiss. Set `force: true` only when overriding a sticky card — sticky cards represent the user's pinned context and shouldn't be clobbered by routine pushes.",
4692
+ "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email — shown in your panel.\"). Don't repeat the full content in chat.",
4686
4693
  "",
4687
4694
  ...compactMode ? [] : [
4688
4695
  "## Tool Call Style",
@@ -25924,6 +25931,23 @@ const ARTIFACT_ACTIONS = [
25924
25931
  "update",
25925
25932
  "remove"
25926
25933
  ];
25934
+ /**
25935
+ * Stage A: intent vocabulary added as orthogonal metadata to renderer type.
25936
+ * Intent answers "why is this card in the panel"; type answers "how to draw
25937
+ * it". Renderers ignore intent for now — it's stored on the registry entry
25938
+ * and surfaced as a data-intent attribute on the card root, ready for the
25939
+ * Stage B+ visual treatment (substrate prominence for drafted, clustering
25940
+ * for weighing, decay overrides, etc.). See
25941
+ * ~/Documents/dynamic-glass-panel.md §4.
25942
+ */
25943
+ const ARTIFACT_INTENTS = [
25944
+ "holding",
25945
+ "weighing",
25946
+ "producing",
25947
+ "awaiting",
25948
+ "drafted",
25949
+ "reference"
25950
+ ];
25927
25951
  const ActionSchema = Type.Object({
25928
25952
  label: Type.String(),
25929
25953
  kind: Type.Optional(stringEnum(["primary", "secondary"])),
@@ -25942,6 +25966,7 @@ const DisplayArtifactSchema = Type.Object({
25942
25966
  action: Type.Optional(stringEnum(ARTIFACT_ACTIONS)),
25943
25967
  id: Type.Optional(Type.String()),
25944
25968
  type: Type.Optional(stringEnum(ARTIFACT_TYPES)),
25969
+ intent: Type.Optional(stringEnum(ARTIFACT_INTENTS)),
25945
25970
  title: Type.Optional(Type.String()),
25946
25971
  body: Type.Optional(Type.String()),
25947
25972
  language: Type.Optional(Type.String()),
@@ -25951,7 +25976,8 @@ const DisplayArtifactSchema = Type.Object({
25951
25976
  poster: Type.Optional(Type.String()),
25952
25977
  email: Type.Optional(EmailFieldsSchema),
25953
25978
  actions: Type.Optional(Type.Array(ActionSchema)),
25954
- sticky: Type.Optional(Type.Boolean())
25979
+ sticky: Type.Optional(Type.Boolean()),
25980
+ force: Type.Optional(Type.Boolean())
25955
25981
  });
25956
25982
  function genCardId() {
25957
25983
  return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
@@ -25960,7 +25986,7 @@ function createDisplayArtifactTool() {
25960
25986
  return {
25961
25987
  label: "Display Artifact",
25962
25988
  name: "display_artifact",
25963
- description: "Push a card into the Glass UI symframe (right-column dynamic display). Use for content that doesn't belong in chat — drafts, generated documents, code snippets the user will copy, structured data, file links. Types: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise the card, or action=remove to dismiss.",
25989
+ description: "Push a card into the Glass UI symframe — the right-column window into your mind. Use for content that represents what you're thinking about, holding, considering, or producing — drafts, references you're keeping in view, options being weighed, generated artifacts. Always set `intent` (holding | weighing | producing | drafted | reference | awaiting). Renderer `type`: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise (set force:true to update a sticky card), or action=remove to dismiss.",
25964
25990
  parameters: DisplayArtifactSchema,
25965
25991
  execute: async (_toolCallId, args) => {
25966
25992
  const params = args;
@@ -25971,10 +25997,12 @@ function createDisplayArtifactTool() {
25971
25997
  ok: false,
25972
25998
  error: `${action} requires an id`
25973
25999
  });
26000
+ const force = params.force === true;
25974
26001
  if (action === "remove") {
25975
26002
  emitSymframePush({
25976
26003
  action,
25977
- id
26004
+ id,
26005
+ force
25978
26006
  });
25979
26007
  return jsonResult({
25980
26008
  ok: true,
@@ -25985,6 +26013,7 @@ function createDisplayArtifactTool() {
25985
26013
  const card = { id };
25986
26014
  for (const key of [
25987
26015
  "type",
26016
+ "intent",
25988
26017
  "title",
25989
26018
  "body",
25990
26019
  "language",
@@ -26012,7 +26041,8 @@ function createDisplayArtifactTool() {
26012
26041
  emitSymframePush({
26013
26042
  action,
26014
26043
  id,
26015
- card
26044
+ card,
26045
+ force
26016
26046
  });
26017
26047
  return jsonResult({
26018
26048
  ok: true,
@@ -17,11 +17,11 @@ import "./manifest-registry-CVLmi8rz.js";
17
17
  import "./skills-status-g3ssrjuX.js";
18
18
  import { l as writeConfigFile, o as readConfigFileSnapshot } from "./config-D7TcU4qN.js";
19
19
  import "./shell-env-CTYaxUs_.js";
20
- import "./client-CdiymIXS.js";
21
- import "./call-A18kwyah.js";
20
+ import "./client-DCxeV1bw.js";
21
+ import "./call-DZg43vv8.js";
22
22
  import "./message-channel-DXToSaWK.js";
23
23
  import "./pairing-token-B-OTYROz.js";
24
- import "./subagent-registry-DwvGle7T.js";
24
+ import "./subagent-registry-V2o45tIn.js";
25
25
  import "./sessions-Dn6VXn4p.js";
26
26
  import "./plugins-BsEhWvLn.js";
27
27
  import "./send-Dq252-bi.js";
@@ -51,8 +51,8 @@ import "./model-auth-Byr7Gic_.js";
51
51
  import "./github-copilot-token-B5y4__YM.js";
52
52
  import "./models-config-CiR_RUxw.js";
53
53
  import "./reply-prefix-DV3KhOhL.js";
54
- import "./memory-By9GyX8z.js";
55
- import "./manager-BUyQ1gFU.js";
54
+ import "./memory-DFpqcIst.js";
55
+ import "./manager-CxFs8Z_F.js";
56
56
  import "./sqlite-9jF_eajd.js";
57
57
  import "./chunk-B2lBXhR0.js";
58
58
  import "./markdown-tables-BEdkErjm.js";
@@ -85,10 +85,10 @@ import { t as formatDocsLink } from "./links-Dnmd-RS-.js";
85
85
  import "./cli-utils-DXfA5936.js";
86
86
  import { t as formatHelpExamples } from "./help-format-Dbp8yEhl.js";
87
87
  import "./progress-CI19Xh3z.js";
88
- import "./memory-cli-e5KEX6Ql.js";
88
+ import "./memory-cli-DZnq3S6s.js";
89
89
  import "./logging-UO6tk8Em.js";
90
90
  import "./replies-CLREUzzB.js";
91
- import "./pi-tools.policy-BeD_scvO.js";
91
+ import "./pi-tools.policy-06k__URR.js";
92
92
  import { n as inheritOptionFromParent } from "./command-options-BFvvecvU.js";
93
93
  import "./catalog-BQgWCFTH.js";
94
94
  import { n as stylePromptMessage } from "./prompt-style-CZGg35Py.js";
@@ -99,21 +99,21 @@ import "./npm-registry-spec-BPgK9EL7.js";
99
99
  import "./skill-scanner-BC3PyNso.js";
100
100
  import "./installs-Dunp9UFl.js";
101
101
  import "./channels-status-issues-BTvrA4nx.js";
102
- import "./register.subclis-Ca8FmJFy.js";
103
- import "./command-registry-BamL-8ni.js";
102
+ import "./register.subclis-FMlcLBX0.js";
103
+ import "./command-registry-CXcvXjUR.js";
104
104
  import "./program-context-B_0V80zV.js";
105
- import { r as installCompletion } from "./completion-cli-CcPYX9ML.js";
105
+ import { r as installCompletion } from "./completion-cli-B1Fg6Lmg.js";
106
106
  import "./daemon-runtime-AkgOtHR6.js";
107
107
  import { r as parseSemver } from "./runtime-guard-LRRZ73eX.js";
108
- import "./onboard-helpers-Dpb3-BZm.js";
108
+ import "./onboard-helpers-BcLPSb5N.js";
109
109
  import "./systemd-CNnW7Chw.js";
110
110
  import { t as resolveGatewayService } from "./service-DYpU1ajf.js";
111
111
  import "./lifecycle-core-YmWzkN43.js";
112
112
  import "./systemd-hints-BoFy3-m1.js";
113
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-BNjzVjLA.js";
113
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-Y6clFgva.js";
114
114
  import "./diagnostics-D2oNwzue.js";
115
115
  import { t as renderTable } from "./table-D0JXlEhQ.js";
116
- import "./health-Ba5X7a38.js";
116
+ import "./health-CJb2CYtg.js";
117
117
  import "./control-ui-assets-Dnz69KRU.js";
118
118
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-DLOnLuop.js";
119
119
  import "./dm-policy-shared-BtrdvOIT.js";
@@ -124,8 +124,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
124
124
  import "./doctor-config-flow-BIBJeoRl.js";
125
125
  import "./systemd-linger-CctFkWNE.js";
126
126
  import "./health-format-6tfMqkNX.js";
127
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-B0UbChI2.js";
128
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-XdRobzWG.js";
127
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-pomsR-zf.js";
128
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-ScxFfN93.js";
129
129
  import { spawn, spawnSync } from "node:child_process";
130
130
  import os from "node:os";
131
131
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import "./unified-runner-CSqDmSWt.js";
1
+ import "./unified-runner-CduaBH_0.js";
2
2
  import { j as theme } from "./registry-Sbac4a4z.js";
3
3
  import { _ as resolveStateDir } from "./paths-By0XjHBk.js";
4
4
  import { f as pathExists } from "./utils-CTPsqyE_.js";
@@ -53,8 +53,8 @@ import "./session-cost-usage-D3mgssM_.js";
53
53
  import { h as trimLogTail } from "./session-utils-Cs1jlD-q.js";
54
54
  import "./with-timeout-DPR4A2dx.js";
55
55
  import "./reply-prefix-BFNeXT65.js";
56
- import "./memory-CHSa0jVf.js";
57
- import "./manager-BcWElKHq.js";
56
+ import "./memory-DavRjdTi.js";
57
+ import "./manager-CHLdCC6u.js";
58
58
  import "./sqlite-Cod7C5ba.js";
59
59
  import "./chunk-BxfKjCUx.js";
60
60
  import "./markdown-tables-CS1Tvb3z.js";
@@ -62,8 +62,8 @@ import "./fetch-guard-JHxT9355.js";
62
62
  import "./local-roots-CgDCgCuM.js";
63
63
  import "./commands-DUzLGgEZ.js";
64
64
  import "./commands-registry-Ca5hh7nh.js";
65
- import "./client-DDqXo-cF.js";
66
- import "./call-PpGwcPn-.js";
65
+ import "./client-k0MT6NBw.js";
66
+ import "./call-BccaLPi8.js";
67
67
  import "./pairing-token-Dcy37-4s.js";
68
68
  import "./tool-display-DFOL6UQ9.js";
69
69
  import "./skills-remote-bz71Bstn.js";
@@ -87,13 +87,13 @@ import { t as formatDocsLink } from "./links-Bqr0FxXx.js";
87
87
  import "./cli-utils-CuyGL3rq.js";
88
88
  import { t as formatHelpExamples } from "./help-format-7hFcsqss.js";
89
89
  import "./progress-swt2y17x.js";
90
- import "./memory-cli-JTWldzg5.js";
90
+ import "./memory-cli-B-Cp1Sb1.js";
91
91
  import "./logging-BWknayJl.js";
92
92
  import "./replies-CbXXjn9X.js";
93
- import "./pi-tools.policy-CIw6PZ9e.js";
93
+ import "./pi-tools.policy-H2t-Xkfc.js";
94
94
  import "./model-MUMSB_7d.js";
95
95
  import { r as parseSemver } from "./runtime-guard-CWA00ZXa.js";
96
- import "./program-context-DhXsfGWA.js";
96
+ import "./program-context-DRCRbDpu.js";
97
97
  import "./catalog-BptA-dUv.js";
98
98
  import "./skills-status-BKX1PjCc.js";
99
99
  import { n as inheritOptionFromParent } from "./command-options-DDDwkB9t.js";
@@ -105,17 +105,17 @@ import "./npm-registry-spec-DTqn-NXZ.js";
105
105
  import "./skill-scanner-BCgVcIwi.js";
106
106
  import "./installs-D890uIIW.js";
107
107
  import "./channels-status-issues-DLIzUsjR.js";
108
- import { r as installCompletion } from "./completion-cli-BE3hVsai.js";
108
+ import { r as installCompletion } from "./completion-cli-DJ1YCeSg.js";
109
109
  import "./daemon-runtime-DlQla_dA.js";
110
- import "./onboard-helpers-DI-HmD7F.js";
110
+ import "./onboard-helpers-CQBpac8h.js";
111
111
  import "./systemd-CUIM0n5P.js";
112
112
  import { t as resolveGatewayService } from "./service-e6MzlLCd.js";
113
113
  import "./lifecycle-core-wFwnK_mD.js";
114
114
  import "./systemd-hints-CsrzMCTD.js";
115
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-C5WZasB0.js";
115
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-0EiZTQ2A.js";
116
116
  import "./diagnostics-DlZODdRf.js";
117
117
  import { t as renderTable } from "./table-0A3xKJVC.js";
118
- import "./health-Ct-lDCmK.js";
118
+ import "./health-CPU9rQGj.js";
119
119
  import "./control-ui-assets-CJQ97d4u.js";
120
120
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-BCL_K7kx.js";
121
121
  import "./dm-policy-shared-CeFt0nch.js";
@@ -126,8 +126,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
126
126
  import "./doctor-config-flow-C52W1uUK.js";
127
127
  import "./systemd-linger-BzYk7A6M.js";
128
128
  import "./health-format-Bxg84_f4.js";
129
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-5mNa_JDe.js";
130
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BNg17v6i.js";
129
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-B41Tx9aC.js";
130
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CfF0J8fs.js";
131
131
  import path from "node:path";
132
132
  import os from "node:os";
133
133
  import fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-core",
3
- "version": "3.0.9",
3
+ "version": "3.5.19",
4
4
  "private": true,
5
5
  "description": "Symi core memory search plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.19
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 3.0.9
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/msteams",
3
- "version": "3.0.9",
3
+ "version": "3.5.19",
4
4
  "description": "Symi Microsoft Teams channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/open-prose",
3
- "version": "3.0.9",
3
+ "version": "3.5.19",
4
4
  "private": true,
5
5
  "description": "OpenProse VM skill pack plugin (slash command + telemetry).",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/outlook",
3
- "version": "3.0.9",
3
+ "version": "3.5.19",
4
4
  "private": true,
5
5
  "description": "Symi Outlook 365 email integration via Microsoft Graph API",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/slack",
3
- "version": "3.0.9",
3
+ "version": "3.5.19",
4
4
  "private": true,
5
5
  "description": "Symi Slack channel plugin",
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "3.5.18",
3
+ "version": "3.5.19",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",