@symerian/symi 3.5.15 → 3.5.17

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 (162) hide show
  1. package/dist/{agent-Cq8f1rHB.js → agent-RWZSPbLw.js} +1 -1
  2. package/dist/{agent-CSOQs4VQ.js → agent-Za31LZ2H.js} +1 -1
  3. package/dist/{agents-BiKiy1SO.js → agents-CulBOE6L.js} +3 -3
  4. package/dist/{audit-DJURK8ly.js → audit-B1fVD2bA.js} +2 -2
  5. package/dist/{audit-BPhWpe_6.js → audit-BQnxE5w6.js} +2 -2
  6. package/dist/{auth-choice-9XyVfAyH.js → auth-choice-B8n3tJtT.js} +2 -2
  7. package/dist/{auth-choice-BYOypIGE.js → auth-choice-C8ElO44A.js} +2 -2
  8. package/dist/{banner-BDexjPFs.js → banner-B91SPus6.js} +1 -1
  9. package/dist/{browser-cli-BxDx4t2-.js → browser-cli-BvOz7txM.js} +3 -3
  10. package/dist/{browser-cli-BT0akXlr.js → browser-cli-CXDzGAN7.js} +3 -3
  11. package/dist/build-info.json +3 -3
  12. package/dist/bundled/boot-md/handler.js +2 -2
  13. package/dist/bundled/session-memory/handler.js +2 -2
  14. package/dist/{call-mzNPQq1S.js → call-A18kwyah.js} +2 -1
  15. package/dist/{call-BC1HAVqW.js → call-PpGwcPn-.js} +2 -1
  16. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  17. package/dist/{channel-options-Cy9aQzx9.js → channel-options-1G5HGFpn.js} +1 -1
  18. package/dist/{channel-options-BjgoCETm.js → channel-options-CsyyC4uc.js} +1 -1
  19. package/dist/{channels-cli-DokpJOeN.js → channels-cli-R3TK9Jwf.js} +9 -9
  20. package/dist/{channels-cli-R0UMOKTA.js → channels-cli-aF7d6Af9.js} +9 -9
  21. package/dist/{cli-ay-COtm8.js → cli-Bguq-s8o.js} +6 -6
  22. package/dist/{cli-BnLVnWOZ.js → cli-CFaH6TRI.js} +6 -6
  23. package/dist/{client-BcvL_D-H.js → client-CdiymIXS.js} +32 -1
  24. package/dist/{client-BfnNfATE.js → client-DDqXo-cF.js} +32 -1
  25. package/dist/{command-registry-CjxdlqkY.js → command-registry-Bmzf59Qv.js} +11 -11
  26. package/dist/{completion-cli-D2pLg5yF.js → completion-cli-BM4kZs0m.js} +2 -2
  27. package/dist/{completion-cli-kGAGMr-I.js → completion-cli-CtUZzw-P.js} +1 -1
  28. package/dist/{config-cli-D12Nouyy.js → config-cli-Cvylxp-R.js} +1 -1
  29. package/dist/{config-cli-BAognmPE.js → config-cli-D6vpEtzB.js} +1 -1
  30. package/dist/{configure-CJp0NIbm.js → configure-BMRfSJ5h.js} +6 -6
  31. package/dist/{configure-B8-2sqW3.js → configure-DRDyxmMR.js} +6 -6
  32. package/dist/control-ui/css/style.css +166 -0
  33. package/dist/control-ui/js/gateway.js +10 -0
  34. package/dist/control-ui/js/symframe.js +313 -9
  35. package/dist/{cron-cli-DoXlzwQ0.js → cron-cli-DVEdIAaa.js} +3 -3
  36. package/dist/{cron-cli-BJzi2QtY.js → cron-cli-DlxcZT7g.js} +3 -3
  37. package/dist/{daemon-cli-CRGNFCN7.js → daemon-cli-6ZV3jmTp.js} +2 -2
  38. package/dist/{daemon-cli-DXHRewv8.js → daemon-cli-DqJhEk3T.js} +2 -2
  39. package/dist/daemon-cli.js +32 -0
  40. package/dist/{devices-cli-DAG-TaOo.js → devices-cli-C4rLpzkl.js} +2 -2
  41. package/dist/{devices-cli-YdVaVQkF.js → devices-cli-C6EdHL_5.js} +2 -2
  42. package/dist/{doctor-completion-CmKOsLDy.js → doctor-completion-Df7Hv_IA.js} +1 -1
  43. package/dist/{doctor-completion-Ca692KiP.js → doctor-completion-Do20Q4ZM.js} +1 -1
  44. package/dist/entry.js +1 -1
  45. package/dist/{exec-approvals-cli-Cnie7kMb.js → exec-approvals-cli-Ca54uWdL.js} +4 -4
  46. package/dist/{exec-approvals-cli-BuHNELGd.js → exec-approvals-cli-bu1S7v6i.js} +4 -4
  47. package/dist/extensionAPI.js +2 -2
  48. package/dist/{gateway-cli-CvzoUDQs.js → gateway-cli-CKlpsjYJ.js} +16 -16
  49. package/dist/{gateway-cli-zh8P3vbG.js → gateway-cli-CwuURJSh.js} +16 -16
  50. package/dist/{gateway-rpc-st8ffJBC.js → gateway-rpc-DMSsr0Xn.js} +1 -1
  51. package/dist/{gateway-rpc-CIHuIeji.js → gateway-rpc-vivTzTCq.js} +1 -1
  52. package/dist/{glass-ui-ws-QqYp-Uof.js → glass-ui-ws-Bzs3ALoN.js} +13 -13
  53. package/dist/{glass-ui-ws-DCXg7AbP.js → glass-ui-ws-C88aJslb.js} +13 -13
  54. package/dist/{health-BIwN5H6b.js → health--v-C6lSf.js} +1 -1
  55. package/dist/{health-BaYDaHPT.js → health-D0jGdk53.js} +1 -1
  56. package/dist/{hooks-cli-ClMPrbD7.js → hooks-cli-CZ_pSdXS.js} +7 -7
  57. package/dist/{hooks-cli-CJ0OoLFk.js → hooks-cli-CrZvzan1.js} +7 -7
  58. package/dist/index.js +10 -10
  59. package/dist/llm-slug-generator.js +2 -2
  60. package/dist/{logs-cli-D8A5dpnm.js → logs-cli-Dde2Dp2w.js} +3 -3
  61. package/dist/{logs-cli-CK9YhKnf.js → logs-cli-vIxaNVmF.js} +3 -3
  62. package/dist/{manager-Ct4kRT7n.js → manager--GmDbwza.js} +1 -1
  63. package/dist/{manager-DjhxLEpd.js → manager-B-wPs7cb.js} +1 -1
  64. package/dist/{manager-Dh_-GTcG.js → manager-BMA3iRMq.js} +1 -1
  65. package/dist/{manager-807ZlqEf.js → manager-S5d36_EM.js} +1 -1
  66. package/dist/{memory-CkJCn1Gg.js → memory-BcdI7NSs.js} +3 -3
  67. package/dist/{memory-B2hM774N.js → memory-DBx1wEvf.js} +3 -3
  68. package/dist/{memory-cli-C3CONZGB.js → memory-cli-CQSVrNAK.js} +2 -2
  69. package/dist/{memory-cli-CPebu_bx.js → memory-cli-jNf_SaXU.js} +2 -2
  70. package/dist/{models-Cbad7KB1.js → models-BgZWEpSL.js} +3 -3
  71. package/dist/{models-cli-C1yhTK5G.js → models-cli-6tdy2DaI.js} +9 -9
  72. package/dist/{models-cli-B_U9E8SV.js → models-cli-CiL6wDtk.js} +8 -8
  73. package/dist/{node-cli-CFIBFPOd.js → node-cli-BTXwMEJE.js} +1 -1
  74. package/dist/{node-cli-Cmfs9las.js → node-cli-ClniLggz.js} +1 -1
  75. package/dist/{nodes-cli-DlkO0Hyw.js → nodes-cli-DLaX4pgX.js} +3 -3
  76. package/dist/{nodes-cli-BH1TUf3n.js → nodes-cli-DrhMUDXx.js} +3 -3
  77. package/dist/{onboard-CWNtW-LS.js → onboard-3FdfkbGm.js} +3 -3
  78. package/dist/{onboard-8eYravsD.js → onboard-DFbgAa-t.js} +3 -3
  79. package/dist/{onboard-channels-DPzbq3iB.js → onboard-channels-BN00--TD.js} +1 -1
  80. package/dist/{onboard-channels-BRi2UP_-.js → onboard-channels-DeRg97iI.js} +1 -1
  81. package/dist/{onboard-helpers-DahbbzzQ.js → onboard-helpers-CAAZ0RDq.js} +1 -1
  82. package/dist/{onboard-helpers-Bf1LB5fd.js → onboard-helpers-Cv6fL8Vq.js} +1 -1
  83. package/dist/{onboard-remote-BgDE1b8f.js → onboard-remote-CXRFa8AU.js} +1 -1
  84. package/dist/{onboard-remote-B6Ox0wMi.js → onboard-remote-pucDu-pH.js} +1 -1
  85. package/dist/{onboard-skills-D-ppyTcQ.js → onboard-skills-BVTCfqlg.js} +1 -1
  86. package/dist/{onboard-skills-V1IT5l9E.js → onboard-skills-C_93kjju.js} +1 -1
  87. package/dist/{onboarding-Cw8abFVd.js → onboarding-BigIUHoh.js} +8 -8
  88. package/dist/{onboarding-D35WPHUd.js → onboarding-fq_-89Jc.js} +8 -8
  89. package/dist/{onboarding.finalize-BStHm3Q-.js → onboarding.finalize-BGDBP9G7.js} +9 -9
  90. package/dist/{onboarding.finalize-C50T8L4e.js → onboarding.finalize-C2Dt95Rn.js} +8 -8
  91. package/dist/{onboarding.gateway-config-DJ1YAlBD.js → onboarding.gateway-config-eFJnSC-S.js} +3 -3
  92. package/dist/{onboarding.gateway-config-D6xPpItN.js → onboarding.gateway-config-wB3ShGU4.js} +3 -3
  93. package/dist/{pi-embedded-BxKs-STI.js → pi-embedded-BAgVs8XC.js} +35 -3
  94. package/dist/{plugin-registry-BFyeIJdT.js → plugin-registry-2DU3g0AT.js} +1 -1
  95. package/dist/{plugin-registry-B9SUsQmV.js → plugin-registry-CubHLj0v.js} +1 -1
  96. package/dist/plugin-sdk/gateway/protocol/index.d.ts +5 -2
  97. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +26 -0
  98. package/dist/plugin-sdk/index.js +6 -6
  99. package/dist/{plugins-cli-DKEgD6T2.js → plugins-cli-CIYGRkKI.js} +7 -7
  100. package/dist/{plugins-cli-BTdd7aE9.js → plugins-cli-Dpj76E3-.js} +7 -7
  101. package/dist/{program-C668x3bd.js → program-FBDhJLrg.js} +12 -12
  102. package/dist/{program-context-CV_ibEw9.js → program-context-CZYb4zB2.js} +38 -30
  103. package/dist/{prompt-select-styled-BlpvaJVg.js → prompt-select-styled-C3LUG3Be.js} +7 -7
  104. package/dist/{prompt-select-styled-G6u6Q8v9.js → prompt-select-styled-DQyZ6VHH.js} +7 -7
  105. package/dist/{provider-auth-helpers-R-cnIeud.js → provider-auth-helpers-B_gA1eP9.js} +1 -1
  106. package/dist/{provider-auth-helpers-DAtMFGrU.js → provider-auth-helpers-LpT83BSS.js} +1 -1
  107. package/dist/{push-apns-Bx0i-bNw.js → push-apns-BWeNJb15.js} +1 -1
  108. package/dist/{push-apns--j8PeFrK.js → push-apns-CLngpXwL.js} +1 -1
  109. package/dist/{register.agent-muhvyTMD.js → register.agent-Dz24Zz7t.js} +11 -11
  110. package/dist/{register.agent-CYRt1iiv.js → register.agent-pWEv9TC7.js} +12 -12
  111. package/dist/{register.configure-CsvtHB87.js → register.configure-BMLA-3Mt.js} +14 -14
  112. package/dist/{register.configure-DUaVY9dt.js → register.configure-DQWtFNGt.js} +14 -14
  113. package/dist/{register.maintenance-DMLKAqqc.js → register.maintenance-81d4KKmA.js} +13 -13
  114. package/dist/{register.maintenance-BrNuk6hl.js → register.maintenance-FWHasNw7.js} +12 -12
  115. package/dist/{register.message-9WxgUBSA.js → register.message-C-p-GZ8z.js} +7 -7
  116. package/dist/{register.message-DZG9UElS.js → register.message-vUwGF3E9.js} +7 -7
  117. package/dist/{register.onboard-Bpo5ofDH.js → register.onboard-BjPPudfS.js} +6 -6
  118. package/dist/{register.onboard-C-5RaI3-.js → register.onboard-COyX1xSR.js} +6 -6
  119. package/dist/{register.setup-D87mlpLA.js → register.setup-C_ds_5fl.js} +6 -6
  120. package/dist/{register.setup-DQXuZsGD.js → register.setup-DDMtRxcF.js} +6 -6
  121. package/dist/{register.status-health-sessions-B600sqsd.js → register.status-health-sessions-C9Zdn1ai.js} +8 -8
  122. package/dist/{register.status-health-sessions-ZYT6lFhO.js → register.status-health-sessions-Dn2gy0gi.js} +8 -8
  123. package/dist/{register.subclis-DdlLdgzD.js → register.subclis-B16w8wxz.js} +28 -20
  124. package/dist/{rpc-Co5Ci69t.js → rpc-DP3AhcZq.js} +1 -1
  125. package/dist/{rpc-DZpJ-mGE.js → rpc-KjYXUeLD.js} +1 -1
  126. package/dist/{run-main-C1YGbNWb.js → run-main-CUMiBvgm.js} +20 -20
  127. package/dist/{security-cli-Bkcil7sD.js → security-cli-CGLnA_ni.js} +3 -3
  128. package/dist/{security-cli-CAdCbDUS.js → security-cli-hTCYStCU.js} +3 -3
  129. package/dist/{server-methods-FxoNbY02.js → server-methods-C3_JU-DI.js} +36 -11
  130. package/dist/{server-methods-DMPwNvoz.js → server-methods-D_zGEWNK.js} +36 -11
  131. package/dist/{server-node-events-Dp9EiddI.js → server-node-events-CRYzL3TY.js} +8 -8
  132. package/dist/{server-node-events-k7h7NWLL.js → server-node-events-CW5ilXPN.js} +8 -8
  133. package/dist/{status-CYqfS1u_.js → status-1ACP62Xm.js} +5 -5
  134. package/dist/{status-BU-hn3iH.js → status-C_K3wapX.js} +1 -1
  135. package/dist/{status-D3h1mSLx.js → status-DbIBRkrV.js} +5 -5
  136. package/dist/{status-CHEd1LqO.js → status-NK8EUhIy.js} +1 -1
  137. package/dist/{subagent-registry-4qeNm1OL.js → subagent-registry-SZbZfkbr.js} +5 -5
  138. package/dist/symframe-cli-DLbhzXNU.js +70 -0
  139. package/dist/symframe-cli-OqTUw6Mt.js +65 -0
  140. package/dist/{synthesis-DceZPirI.js → synthesis-BLRsy_PZ.js} +6 -6
  141. package/dist/{synthesis-DFNyev83.js → synthesis-CA2zGGNE.js} +6 -6
  142. package/dist/{synthesis-BH4onG1c.js → synthesis-CG0rRaLA.js} +2 -2
  143. package/dist/{synthesis-CxR-cX-4.js → synthesis-CUbz4CaL.js} +2 -2
  144. package/dist/{system-cli-BCAd92UF.js → system-cli-BoxTfo1R.js} +3 -3
  145. package/dist/{system-cli-GwzCZpdT.js → system-cli-CYgTroZA.js} +3 -3
  146. package/dist/{tui-9lZLkRZm.js → tui-BdtfeKft.js} +2 -2
  147. package/dist/{tui-ROL_b9BF.js → tui-CO7OA9ZO.js} +2 -2
  148. package/dist/{tui-cli-C7NUBeQi.js → tui-cli-CcSS08na.js} +3 -3
  149. package/dist/{tui-cli-C6Q0KKvj.js → tui-cli-_WzJLbOA.js} +3 -3
  150. package/dist/{unified-runner-D9LZYzyF.js → unified-runner-B0cMr4If.js} +5 -5
  151. package/dist/{unified-runner-LBbNjudz.js → unified-runner-ChkYfsxy.js} +35 -3
  152. package/dist/{update-cli-CWYfdfuU.js → update-cli-BhI88CVk.js} +14 -14
  153. package/dist/{update-cli-Du-NLjgh.js → update-cli-jxM3sFLP.js} +13 -13
  154. package/package.json +1 -1
  155. /package/dist/{consolidate-BSUbtSDt.js → consolidate-BoM9cz9L.js} +0 -0
  156. /package/dist/{consolidate-DhoiF4n7.js → consolidate-nNhnUpNj.js} +0 -0
  157. /package/dist/{onboard-hooks-CXRw9BJY.js → onboard-hooks-CxJRzS5z.js} +0 -0
  158. /package/dist/{onboard-hooks-DfDF9AU4.js → onboard-hooks-D5-mtFUY.js} +0 -0
  159. /package/dist/{qmd-manager-CYEAMLE7.js → qmd-manager-C1levE0a.js} +0 -0
  160. /package/dist/{qmd-manager-C6wRtPm_.js → qmd-manager-CR71XjjR.js} +0 -0
  161. /package/dist/{webhooks-cli-C3uyehJS.js → webhooks-cli-BUWSS_ve.js} +0 -0
  162. /package/dist/{webhooks-cli-C3g4MxCE.js → webhooks-cli-BrDeMswO.js} +0 -0
@@ -57,6 +57,278 @@
57
57
  countEl.textContent = total === 1 ? "1 card" : `${total} cards`;
58
58
  }
59
59
 
60
+ // ── Per-type body renderers ──
61
+ // Each renderer takes a card and returns an HTMLElement (or
62
+ // DocumentFragment) that gets appended to the body slot. New types
63
+ // plug in by adding to the renderers map below — no other code path
64
+ // changes required.
65
+
66
+ function renderTextBody(card) {
67
+ const div = document.createElement("div");
68
+ div.className = "symframe-body-text";
69
+ if (card.bodyHtml) {
70
+ div.innerHTML = card.bodyHtml;
71
+ } else {
72
+ div.textContent = card.body || "";
73
+ }
74
+ return div;
75
+ }
76
+
77
+ function renderMarkdownBody(card) {
78
+ const div = document.createElement("div");
79
+ div.className = "symframe-body-markdown";
80
+ if (typeof window.marked?.parse === "function") {
81
+ div.innerHTML = window.marked.parse(card.body || "");
82
+ } else {
83
+ div.textContent = card.body || "";
84
+ }
85
+ return div;
86
+ }
87
+
88
+ function renderCodeBody(card) {
89
+ const pre = document.createElement("pre");
90
+ pre.className = "symframe-body-code";
91
+ const code = document.createElement("code");
92
+ if (card.language) {
93
+ code.classList.add(`language-${card.language}`);
94
+ }
95
+ code.textContent = card.body || "";
96
+ pre.appendChild(code);
97
+ // hljs is bundled as window.hljs via vendor/highlight.min.js. Best-effort
98
+ // highlight; if hljs throws (unknown language, etc.) the plain pre/code
99
+ // already renders fine.
100
+ if (typeof window.hljs?.highlightElement === "function") {
101
+ try {
102
+ window.hljs.highlightElement(code);
103
+ } catch (err) {
104
+ console.warn("[symframe] hljs.highlightElement failed:", err);
105
+ }
106
+ }
107
+ return pre;
108
+ }
109
+
110
+ function renderEmailDraftBody(card) {
111
+ const wrap = document.createElement("div");
112
+ wrap.className = "symframe-body-email";
113
+ const email = card.email || {};
114
+ const headerRows = [
115
+ ["From", email.from],
116
+ ["To", email.to],
117
+ ["Cc", email.cc],
118
+ ["Bcc", email.bcc],
119
+ ["Subject", email.subject],
120
+ ];
121
+ for (const [label, value] of headerRows) {
122
+ if (!value) {
123
+ continue;
124
+ }
125
+ const row = document.createElement("div");
126
+ row.className = "symframe-email-row";
127
+ const lbl = document.createElement("span");
128
+ lbl.className = "symframe-email-label";
129
+ lbl.textContent = `${label}:`;
130
+ const val = document.createElement("span");
131
+ val.className = "symframe-email-value";
132
+ val.textContent = String(value);
133
+ row.appendChild(lbl);
134
+ row.appendChild(val);
135
+ wrap.appendChild(row);
136
+ }
137
+ if (email.body) {
138
+ const body = document.createElement("div");
139
+ body.className = "symframe-email-body";
140
+ body.textContent = email.body;
141
+ wrap.appendChild(body);
142
+ }
143
+ return wrap;
144
+ }
145
+
146
+ function renderEmptyMedia(reason) {
147
+ const div = document.createElement("div");
148
+ div.className = "symframe-body-empty";
149
+ div.textContent = reason;
150
+ return div;
151
+ }
152
+
153
+ function renderPdfBody(card) {
154
+ if (!card.url) {
155
+ return renderEmptyMedia("(no url provided)");
156
+ }
157
+ const wrap = document.createElement("div");
158
+ wrap.className = "symframe-body-pdf";
159
+ const frame = document.createElement("iframe");
160
+ frame.src = card.url;
161
+ frame.className = "symframe-pdf-iframe";
162
+ frame.setAttribute("title", card.title || "PDF document");
163
+ wrap.appendChild(frame);
164
+ wrap.appendChild(buildDownloadLink(card.url, card.downloadName, "Download PDF"));
165
+ return wrap;
166
+ }
167
+
168
+ function renderAudioBody(card) {
169
+ if (!card.url) {
170
+ return renderEmptyMedia("(no url provided)");
171
+ }
172
+ const wrap = document.createElement("div");
173
+ wrap.className = "symframe-body-audio";
174
+ const audio = document.createElement("audio");
175
+ audio.controls = true;
176
+ audio.preload = "metadata";
177
+ audio.className = "symframe-audio";
178
+ if (card.mimeType) {
179
+ const source = document.createElement("source");
180
+ source.src = card.url;
181
+ source.type = card.mimeType;
182
+ audio.appendChild(source);
183
+ } else {
184
+ audio.src = card.url;
185
+ }
186
+ wrap.appendChild(audio);
187
+ wrap.appendChild(buildDownloadLink(card.url, card.downloadName, "Download"));
188
+ return wrap;
189
+ }
190
+
191
+ function renderVideoBody(card) {
192
+ if (!card.url) {
193
+ return renderEmptyMedia("(no url provided)");
194
+ }
195
+ const wrap = document.createElement("div");
196
+ wrap.className = "symframe-body-video";
197
+ const video = document.createElement("video");
198
+ video.controls = true;
199
+ video.preload = "metadata";
200
+ video.className = "symframe-video";
201
+ video.playsInline = true;
202
+ if (card.poster) {
203
+ video.poster = card.poster;
204
+ }
205
+ if (card.mimeType) {
206
+ const source = document.createElement("source");
207
+ source.src = card.url;
208
+ source.type = card.mimeType;
209
+ video.appendChild(source);
210
+ } else {
211
+ video.src = card.url;
212
+ }
213
+ wrap.appendChild(video);
214
+ wrap.appendChild(buildDownloadLink(card.url, card.downloadName, "Download"));
215
+ return wrap;
216
+ }
217
+
218
+ function buildDownloadLink(url, downloadName, label) {
219
+ const a = document.createElement("a");
220
+ a.href = url;
221
+ if (downloadName) {
222
+ a.download = downloadName;
223
+ } else {
224
+ a.setAttribute("download", "");
225
+ }
226
+ a.target = "_blank";
227
+ a.rel = "noopener noreferrer";
228
+ a.className = "symframe-download";
229
+ a.textContent = `⬇ ${label}`;
230
+ return a;
231
+ }
232
+
233
+ const renderers = {
234
+ text: renderTextBody,
235
+ markdown: renderMarkdownBody,
236
+ code: renderCodeBody,
237
+ "email-draft": renderEmailDraftBody,
238
+ pdf: renderPdfBody,
239
+ audio: renderAudioBody,
240
+ video: renderVideoBody,
241
+ };
242
+
243
+ function renderBodyForType(card) {
244
+ const type = card.type || "text";
245
+ const renderer = renderers[type] || renderers.text;
246
+ return renderer(card);
247
+ }
248
+
249
+ // True iff the card has any body-shaped data — body, bodyHtml, or
250
+ // type-specific structured fields. Used to decide whether to render
251
+ // the body slot at all.
252
+ function hasBodyContent(card) {
253
+ if (card.body || card.bodyHtml) {
254
+ return true;
255
+ }
256
+ if (card.url) {
257
+ return true;
258
+ }
259
+ if (card.email && typeof card.email === "object") {
260
+ return true;
261
+ }
262
+ return false;
263
+ }
264
+
265
+ // Choose what `Copy` would copy for this card. Honors body/bodyHtml first,
266
+ // then type-specific shapes (email-draft renders a plain-text email;
267
+ // url-based media types copy the URL).
268
+ function resolveCopyTarget(card) {
269
+ if (card.body) {
270
+ return card.body;
271
+ }
272
+ if (card.bodyHtml) {
273
+ return card.bodyHtml;
274
+ }
275
+ if (card.email && typeof card.email === "object") {
276
+ const lines = [];
277
+ if (card.email.from) {
278
+ lines.push(`From: ${card.email.from}`);
279
+ }
280
+ if (card.email.to) {
281
+ lines.push(`To: ${card.email.to}`);
282
+ }
283
+ if (card.email.cc) {
284
+ lines.push(`Cc: ${card.email.cc}`);
285
+ }
286
+ if (card.email.bcc) {
287
+ lines.push(`Bcc: ${card.email.bcc}`);
288
+ }
289
+ if (card.email.subject) {
290
+ lines.push(`Subject: ${card.email.subject}`);
291
+ }
292
+ if (card.email.body) {
293
+ lines.push("");
294
+ lines.push(card.email.body);
295
+ }
296
+ return lines.join("\n");
297
+ }
298
+ if (card.url) {
299
+ return card.url;
300
+ }
301
+ return "";
302
+ }
303
+
304
+ // Default Copy action when the card has copyable content and no explicit
305
+ // actions. Custom actions take precedence — server-pushed cards or
306
+ // tool-pushed cards with their own buttons get those instead.
307
+ function buildDefaultActions(card) {
308
+ if (Array.isArray(card.actions) && card.actions.length > 0) {
309
+ return card.actions;
310
+ }
311
+ const copyTarget = resolveCopyTarget(card);
312
+ if (!copyTarget) {
313
+ return [];
314
+ }
315
+ return [
316
+ {
317
+ label: "Copy",
318
+ kind: "secondary",
319
+ onClick: async () => {
320
+ try {
321
+ if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
322
+ await navigator.clipboard.writeText(copyTarget);
323
+ }
324
+ } catch (err) {
325
+ console.warn("[symframe] copy failed:", err);
326
+ }
327
+ },
328
+ },
329
+ ];
330
+ }
331
+
60
332
  function renderCardElement(card) {
61
333
  const el = document.createElement("div");
62
334
  el.className = "glass-panel symframe-card symframe-card-dynamic";
@@ -89,23 +361,23 @@
89
361
  }
90
362
  el.appendChild(header);
91
363
 
92
- // Body
93
- if (card.bodyHtml || card.body) {
364
+ // Body via type-specific renderer (returns an Element)
365
+ if (hasBodyContent(card)) {
94
366
  const body = document.createElement("div");
95
367
  body.className = "symframe-card-body";
96
- if (card.bodyHtml) {
97
- body.innerHTML = card.bodyHtml;
98
- } else {
99
- body.textContent = card.body;
368
+ const rendered = renderBodyForType(card);
369
+ if (rendered) {
370
+ body.appendChild(rendered);
100
371
  }
101
372
  el.appendChild(body);
102
373
  }
103
374
 
104
- // Actions
105
- if (Array.isArray(card.actions) && card.actions.length > 0) {
375
+ // Actions (custom or default Copy)
376
+ const actions = buildDefaultActions(card);
377
+ if (actions.length > 0) {
106
378
  const actionsRow = document.createElement("div");
107
379
  actionsRow.className = "symframe-card-actions";
108
- for (const action of card.actions) {
380
+ for (const action of actions) {
109
381
  const btn = document.createElement("button");
110
382
  btn.className = "symframe-card-action";
111
383
  if (action.kind === "primary") {
@@ -122,6 +394,20 @@
122
394
  console.warn("[symframe] action threw:", err);
123
395
  }
124
396
  });
397
+ } else if (action.rpc) {
398
+ // Server-pushed cards declare actions as { rpc: "method", params: {...} }
399
+ // since closures don't survive the WebSocket. Resolve via the
400
+ // gateway client at click time.
401
+ btn.addEventListener("click", async (e) => {
402
+ e.preventDefault();
403
+ try {
404
+ if (window.gateway?.rpc) {
405
+ await window.gateway.rpc(action.rpc, action.params || {});
406
+ }
407
+ } catch (err) {
408
+ console.warn("[symframe] rpc action failed:", action.rpc, err);
409
+ }
410
+ });
125
411
  }
126
412
  actionsRow.appendChild(btn);
127
413
  }
@@ -272,4 +558,22 @@
272
558
  }
273
559
 
274
560
  window.symframe = { add, update, remove, list, register };
561
+
562
+ // Phase 3: server-pushed cards. The gateway's `symframe` broadcast is
563
+ // re-emitted as a window-level CustomEvent by gateway.js — subscribe
564
+ // here and route to the registry. Payload shape matches the
565
+ // chat.symframe.push RPC: { action, id?, card? }.
566
+ window.addEventListener("symi:symframe", (e) => {
567
+ const payload = e.detail;
568
+ if (!payload || typeof payload !== "object") {
569
+ return;
570
+ }
571
+ if (payload.action === "add" && payload.card) {
572
+ add(payload.card);
573
+ } else if (payload.action === "update" && payload.id && payload.card) {
574
+ update(payload.id, payload.card);
575
+ } else if (payload.action === "remove" && payload.id) {
576
+ remove(payload.id);
577
+ }
578
+ });
275
579
  })();
@@ -13,15 +13,15 @@ import "./shell-env-Dc3iU7HK.js";
13
13
  import "./manifest-registry-D1MLZEjS.js";
14
14
  import "./message-channel-DgjXWzf-.js";
15
15
  import { n as listChannelPlugins } from "./plugins-CF5skkHh.js";
16
- import "./client-BfnNfATE.js";
17
- import "./call-BC1HAVqW.js";
16
+ import "./client-DDqXo-cF.js";
17
+ import "./call-PpGwcPn-.js";
18
18
  import "./pairing-token-Dcy37-4s.js";
19
19
  import { n as formatDurationHuman } from "./format-duration-CIjmjQST.js";
20
20
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs } from "./stagger-DQs772BN.js";
21
21
  import { t as formatDocsLink } from "./links-CQZxjjCO.js";
22
22
  import "./progress-DQTvTiEg.js";
23
23
  import { n as parsePositiveIntOrUndefined } from "./helpers-DGBa5iKd.js";
24
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-st8ffJBC.js";
24
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DMSsr0Xn.js";
25
25
 
26
26
  //#region src/cli/cron-cli/shared.ts
27
27
  const getCronChannelOptions = () => ["last", ...listChannelPlugins().map((plugin) => plugin.id)].join("|");
@@ -6,8 +6,8 @@ import "./model-selection-CMx1evaF.js";
6
6
  import "./manifest-registry-CVLmi8rz.js";
7
7
  import "./config-D7TcU4qN.js";
8
8
  import "./shell-env-CTYaxUs_.js";
9
- import "./client-BcvL_D-H.js";
10
- import "./call-mzNPQq1S.js";
9
+ import "./client-CdiymIXS.js";
10
+ import "./call-A18kwyah.js";
11
11
  import "./message-channel-DXToSaWK.js";
12
12
  import "./pairing-token-B-OTYROz.js";
13
13
  import { n as listChannelPlugins } from "./plugins-BsEhWvLn.js";
@@ -15,7 +15,7 @@ import { n as formatDurationHuman } from "./format-duration-CIjmjQST.js";
15
15
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs } from "./stagger-DUVGiPYV.js";
16
16
  import { t as formatDocsLink } from "./links-B9CbwY46.js";
17
17
  import "./progress-BOQ0hkeM.js";
18
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-CIHuIeji.js";
18
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-vivTzTCq.js";
19
19
  import { n as parsePositiveIntOrUndefined } from "./helpers-lLtg0Hgi.js";
20
20
 
21
21
  //#region src/cli/cron-cli/shared.ts
@@ -10,13 +10,13 @@ import { u as resolveGatewayBindHost } from "./ws-C7Ktmt-R.js";
10
10
  import { a as resolveGatewayAuth } from "./auth-Bkx-QuRN.js";
11
11
  import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-gxLM5ahL.js";
12
12
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DgjXWzf-.js";
13
- import { n as callGateway } from "./call-BC1HAVqW.js";
13
+ import { n as callGateway } from "./call-PpGwcPn-.js";
14
14
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-BLIhifCJ.js";
15
15
  import { t as formatDocsLink } from "./links-CQZxjjCO.js";
16
16
  import { n as withProgress } from "./progress-DQTvTiEg.js";
17
17
  import { n as inheritOptionFromParent } from "./command-options-DgcCGXMQ.js";
18
18
  import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-7YBz5otm.js";
19
- import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-Bf1LB5fd.js";
19
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-Cv6fL8Vq.js";
20
20
  import { n as isWSLEnv } from "./wsl-Ci3VOaSK.js";
21
21
  import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-BF50XyKr.js";
22
22
  import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-DdbL6ELJ.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Q as theme, Rt as shortenHomePath, X as colorize, Z as isRich, _ as defaultRuntime, ct as resolveConfigPath, ft as resolveGatewayPort, pt as resolveIsNixMode, tt as getResolvedLoggerSettings, yt as resolveStateDir } from "./entry.js";
3
3
  import { t as formatCliCommand } from "./command-format-B3nkKRhC.js";
4
4
  import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-D7TcU4qN.js";
5
- import { n as callGateway } from "./call-mzNPQq1S.js";
5
+ import { n as callGateway } from "./call-A18kwyah.js";
6
6
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DXToSaWK.js";
7
7
  import { l as resolveGatewayBindHost } from "./net-TZUXtwGR.js";
8
8
  import { n as pickPrimaryTailnetIPv4 } from "./tailnet-B2SPYrh4.js";
@@ -13,7 +13,7 @@ import { t as formatDocsLink } from "./links-B9CbwY46.js";
13
13
  import { n as withProgress } from "./progress-BOQ0hkeM.js";
14
14
  import { n as inheritOptionFromParent } from "./command-options-Vxb4M7Aj.js";
15
15
  import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DaJ4Tf2a.js";
16
- import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-DahbbzzQ.js";
16
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-CAAZ0RDq.js";
17
17
  import { n as isWSLEnv } from "./wsl-S50RbgL8.js";
18
18
  import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-Ccv3Zi5_.js";
19
19
  import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-O50xtu5c.js";
@@ -9607,6 +9607,36 @@ const ChatHistoryParamsSchema = Type.Object({
9607
9607
  const ChatCommandsListParamsSchema = Type.Object({}, { additionalProperties: false });
9608
9608
  const ChatToolsListParamsSchema = Type.Object({}, { additionalProperties: false });
9609
9609
  const ChatSkillsListParamsSchema = Type.Object({}, { additionalProperties: false });
9610
+ /**
9611
+ * Push a card to the symframe (the right-column dynamic display panel
9612
+ * in Glass UI). Mirrors the registry methods on `window.symframe`:
9613
+ * - action="add" → `card` required (id auto-generated if missing)
9614
+ * - action="update" → `id` required, `card` carries the patch
9615
+ * - action="remove" → `id` required, no card
9616
+ *
9617
+ * The handler broadcasts a `symframe` event over the WebSocket; clients
9618
+ * route it to their local registry. The card schema is permissive
9619
+ * (additionalProperties on card) so new content types can ship without
9620
+ * a schema bump.
9621
+ */
9622
+ const ChatSymframePushParamsSchema = Type.Object({
9623
+ action: Type.Union([
9624
+ Type.Literal("add"),
9625
+ Type.Literal("update"),
9626
+ Type.Literal("remove")
9627
+ ]),
9628
+ id: Type.Optional(NonEmptyString),
9629
+ card: Type.Optional(Type.Object({
9630
+ id: Type.Optional(NonEmptyString),
9631
+ type: Type.Optional(Type.String()),
9632
+ title: Type.Optional(Type.String()),
9633
+ body: Type.Optional(Type.String()),
9634
+ bodyHtml: Type.Optional(Type.String()),
9635
+ actions: Type.Optional(Type.Array(Type.Unknown())),
9636
+ sticky: Type.Optional(Type.Boolean()),
9637
+ dismissable: Type.Optional(Type.Boolean())
9638
+ }, { additionalProperties: true }))
9639
+ }, { additionalProperties: false });
9610
9640
  const ChatSendParamsSchema = Type.Object({
9611
9641
  sessionKey: NonEmptyString,
9612
9642
  message: Type.String(),
@@ -10039,6 +10069,7 @@ const validateChatHistoryParams = ajv.compile(ChatHistoryParamsSchema);
10039
10069
  const validateChatCommandsListParams = ajv.compile(ChatCommandsListParamsSchema);
10040
10070
  const validateChatToolsListParams = ajv.compile(ChatToolsListParamsSchema);
10041
10071
  const validateChatSkillsListParams = ajv.compile(ChatSkillsListParamsSchema);
10072
+ const validateChatSymframePushParams = ajv.compile(ChatSymframePushParamsSchema);
10042
10073
  const validateChatSendParams = ajv.compile(ChatSendParamsSchema);
10043
10074
  const validateChatAbortParams = ajv.compile(ChatAbortParamsSchema);
10044
10075
  const validateChatInjectParams = ajv.compile(ChatInjectParamsSchema);
@@ -10423,6 +10454,7 @@ const METHOD_SCOPE_GROUPS = {
10423
10454
  "node.invoke",
10424
10455
  "chat.send",
10425
10456
  "chat.abort",
10457
+ "chat.symframe.push",
10426
10458
  "browser.request",
10427
10459
  "push.test"
10428
10460
  ],
@@ -12,8 +12,8 @@ import "./shell-env-Dc3iU7HK.js";
12
12
  import "./manifest-registry-D1MLZEjS.js";
13
13
  import { r as isLoopbackHost } from "./ws-C7Ktmt-R.js";
14
14
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DgjXWzf-.js";
15
- import { $t as summarizeDeviceTokens, Wt as approveDevicePairing, qt as listDevicePairing } from "./client-BfnNfATE.js";
16
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BC1HAVqW.js";
15
+ import { Gt as approveDevicePairing, Jt as listDevicePairing, en as summarizeDeviceTokens } from "./client-DDqXo-cF.js";
16
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-PpGwcPn-.js";
17
17
  import "./pairing-token-Dcy37-4s.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-D4GQsWlP.js";
19
19
  import { n as withProgress } from "./progress-DQTvTiEg.js";
@@ -5,8 +5,8 @@ import "./model-selection-CMx1evaF.js";
5
5
  import "./manifest-registry-CVLmi8rz.js";
6
6
  import "./config-D7TcU4qN.js";
7
7
  import "./shell-env-CTYaxUs_.js";
8
- import { $t as summarizeDeviceTokens, Wt as approveDevicePairing, qt as listDevicePairing } from "./client-BcvL_D-H.js";
9
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-mzNPQq1S.js";
8
+ import { Gt as approveDevicePairing, Jt as listDevicePairing, en as summarizeDeviceTokens } from "./client-CdiymIXS.js";
9
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-A18kwyah.js";
10
10
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DXToSaWK.js";
11
11
  import "./pairing-token-B-OTYROz.js";
12
12
  import { n as isLoopbackHost } from "./net-TZUXtwGR.js";
@@ -1,7 +1,7 @@
1
1
  import { n as resolveCliName } from "./cli-name-CzMV-gJF.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
3
3
  import { t as note } from "./note-ytwb4wwn.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-kGAGMr-I.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CtUZzw-P.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { n as resolveCliName } from "./cli-name-DY75UA5M.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-Ctw1Rb_n.js";
3
3
  import { t as note } from "./note-Cltpxj6i.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-D2pLg5yF.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BM4kZs0m.js";
5
5
  import { spawnSync } from "node:child_process";
6
6
  import path from "node:path";
7
7
 
package/dist/entry.js CHANGED
@@ -2315,7 +2315,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2315
2315
  applyCliProfileEnv({ profile: parsed.profile });
2316
2316
  process$1.argv = parsed.argv;
2317
2317
  }
2318
- import("./run-main-C1YGbNWb.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2318
+ import("./run-main-CUMiBvgm.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2319
2319
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2320
2320
  process$1.exitCode = 1;
2321
2321
  });
@@ -5,20 +5,20 @@ import "./model-selection-CMx1evaF.js";
5
5
  import "./manifest-registry-CVLmi8rz.js";
6
6
  import "./config-D7TcU4qN.js";
7
7
  import "./shell-env-CTYaxUs_.js";
8
- import "./client-BcvL_D-H.js";
9
- import "./call-mzNPQq1S.js";
8
+ import "./client-CdiymIXS.js";
9
+ import "./call-A18kwyah.js";
10
10
  import "./message-channel-DXToSaWK.js";
11
11
  import "./pairing-token-B-OTYROz.js";
12
12
  import { n as formatTimeAgo } from "./format-relative-CxLpEQOX.js";
13
13
  import { c as readExecApprovalsSnapshot, p as saveExecApprovals } from "./exec-approvals-DEjIocmZ.js";
14
14
  import { t as formatDocsLink } from "./links-B9CbwY46.js";
15
15
  import "./progress-BOQ0hkeM.js";
16
- import { n as callGatewayFromCli } from "./gateway-rpc-CIHuIeji.js";
16
+ import { n as callGatewayFromCli } from "./gateway-rpc-vivTzTCq.js";
17
17
  import "./systemd-Dtydk5-z.js";
18
18
  import "./service-Ccv3Zi5_.js";
19
19
  import { t as renderTable } from "./table-Dm8jYqmW.js";
20
20
  import { t as describeUnknownError } from "./shared-BJRsBGGr.js";
21
- import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-Co5Ci69t.js";
21
+ import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-DP3AhcZq.js";
22
22
  import JSON5 from "json5";
23
23
  import fs from "node:fs/promises";
24
24
 
@@ -11,19 +11,19 @@ import "./env-BRnPI9sO.js";
11
11
  import "./shell-env-Dc3iU7HK.js";
12
12
  import "./manifest-registry-D1MLZEjS.js";
13
13
  import "./message-channel-DgjXWzf-.js";
14
- import "./client-BfnNfATE.js";
15
- import "./call-BC1HAVqW.js";
14
+ import "./client-DDqXo-cF.js";
15
+ import "./call-PpGwcPn-.js";
16
16
  import "./pairing-token-Dcy37-4s.js";
17
17
  import { n as formatTimeAgo } from "./format-relative-D4GQsWlP.js";
18
18
  import { c as readExecApprovalsSnapshot, p as saveExecApprovals } from "./exec-approvals-DioSaIeH.js";
19
19
  import { t as formatDocsLink } from "./links-CQZxjjCO.js";
20
20
  import "./progress-DQTvTiEg.js";
21
- import { n as callGatewayFromCli } from "./gateway-rpc-st8ffJBC.js";
21
+ import { n as callGatewayFromCli } from "./gateway-rpc-DMSsr0Xn.js";
22
22
  import "./systemd-Dic80Qni.js";
23
23
  import "./service-BF50XyKr.js";
24
24
  import { t as renderTable } from "./table-Ds5CZCyv.js";
25
25
  import { t as describeUnknownError } from "./shared-BmjlTHYU.js";
26
- import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-DZpJ-mGE.js";
26
+ import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-KjYXUeLD.js";
27
27
  import JSON5 from "json5";
28
28
  import fs from "node:fs/promises";
29
29
 
@@ -6,7 +6,7 @@ import { _ as DEFAULT_PROVIDER, g as DEFAULT_MODEL, p as resolveThinkingDefault
6
6
  import { a as resolveAgentIdentity } from "./reply-prefix-i-FPYcoQ.js";
7
7
  import "./plugins-CZ_mYwXq.js";
8
8
  import "./replies-0nzkXt6o.js";
9
- import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-BxKs-STI.js";
9
+ import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-BAgVs8XC.js";
10
10
  import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-f3cIWxXT.js";
11
11
  import "./diagnostic-BdRnGknC.js";
12
12
  import "./diagnostic-session-state-DpxCUzoM.js";
@@ -23,7 +23,7 @@ import "./errors-BEU7IHU6.js";
23
23
  import "./tokens-yWO1wD7Z.js";
24
24
  import "./thinking-DgjGxdSP.js";
25
25
  import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-BsT3BvfH.js";
26
- import "./manager-Ct4kRT7n.js";
26
+ import "./manager--GmDbwza.js";
27
27
  import "./github-copilot-token-dYUr1mDQ.js";
28
28
  import "./sqlite-D8iYC_CU.js";
29
29
  import "./markdown-tables-jQzXAsf3.js";