@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
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Qt as getPrimaryCommand, tn as hasHelpOrVersion } from "./entry.js";
3
- import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-DdlLdgzD.js";
3
+ import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-B16w8wxz.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-DQXuZsGD.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-DDMtRxcF.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-Bpo5ofDH.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-BjPPudfS.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -42,7 +42,7 @@ const coreEntries = [
42
42
  hasSubcommands: false
43
43
  }],
44
44
  register: async ({ program }) => {
45
- (await import("./register.configure-CsvtHB87.js")).registerConfigureCommand(program);
45
+ (await import("./register.configure-BMLA-3Mt.js")).registerConfigureCommand(program);
46
46
  }
47
47
  },
48
48
  {
@@ -52,7 +52,7 @@ const coreEntries = [
52
52
  hasSubcommands: true
53
53
  }],
54
54
  register: async ({ program }) => {
55
- (await import("./config-cli-D12Nouyy.js")).registerConfigCli(program);
55
+ (await import("./config-cli-Cvylxp-R.js")).registerConfigCli(program);
56
56
  }
57
57
  },
58
58
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-DMLKAqqc.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-81d4KKmA.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -89,7 +89,7 @@ const coreEntries = [
89
89
  hasSubcommands: true
90
90
  }],
91
91
  register: async ({ program, ctx }) => {
92
- (await import("./register.message-9WxgUBSA.js")).registerMessageCommands(program, ctx);
92
+ (await import("./register.message-C-p-GZ8z.js")).registerMessageCommands(program, ctx);
93
93
  }
94
94
  },
95
95
  {
@@ -99,7 +99,7 @@ const coreEntries = [
99
99
  hasSubcommands: true
100
100
  }],
101
101
  register: async ({ program }) => {
102
- (await import("./memory-cli-C3CONZGB.js").then((n) => n.t)).registerMemoryCli(program);
102
+ (await import("./memory-cli-CQSVrNAK.js").then((n) => n.t)).registerMemoryCli(program);
103
103
  }
104
104
  },
105
105
  {
@@ -113,7 +113,7 @@ const coreEntries = [
113
113
  hasSubcommands: true
114
114
  }],
115
115
  register: async ({ program, ctx }) => {
116
- (await import("./register.agent-CYRt1iiv.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
116
+ (await import("./register.agent-pWEv9TC7.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
117
117
  }
118
118
  },
119
119
  {
@@ -135,7 +135,7 @@ const coreEntries = [
135
135
  }
136
136
  ],
137
137
  register: async ({ program }) => {
138
- (await import("./register.status-health-sessions-B600sqsd.js")).registerStatusHealthSessionsCommands(program);
138
+ (await import("./register.status-health-sessions-C9Zdn1ai.js")).registerStatusHealthSessionsCommands(program);
139
139
  }
140
140
  },
141
141
  {
@@ -145,7 +145,7 @@ const coreEntries = [
145
145
  hasSubcommands: true
146
146
  }],
147
147
  register: async ({ program }) => {
148
- (await import("./browser-cli-BT0akXlr.js")).registerBrowserCli(program);
148
+ (await import("./browser-cli-CXDzGAN7.js")).registerBrowserCli(program);
149
149
  }
150
150
  }
151
151
  ];
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Mt as pathExists, l as routeLogsToStderr, yt as resolveStateDir } from "./entry.js";
3
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-DdlLdgzD.js";
4
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-CjxdlqkY.js";
3
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-B16w8wxz.js";
4
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-Bmzf59Qv.js";
5
5
  import { t as getProgramContext } from "./program-context-CGKRxOBU.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { _ as resolveStateDir } from "./paths-By0XjHBk.js";
3
3
  import { f as pathExists } from "./utils-CTPsqyE_.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-CHbO_DkH.js";
5
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-CV_ibEw9.js";
5
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-CZYb4zB2.js";
6
6
  import path from "node:path";
7
7
  import os from "node:os";
8
8
  import fs from "node:fs/promises";
@@ -201,7 +201,7 @@ async function runConfigUnset(opts) {
201
201
  }
202
202
  function registerConfigCli(program) {
203
203
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.symi.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
204
- const { configureCommandFromSectionsArg } = await import("./configure-B8-2sqW3.js").then((n) => n.t);
204
+ const { configureCommandFromSectionsArg } = await import("./configure-DRDyxmMR.js").then((n) => n.t);
205
205
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
206
206
  });
207
207
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -206,7 +206,7 @@ async function runConfigUnset(opts) {
206
206
  }
207
207
  function registerConfigCli(program) {
208
208
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.symi.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
209
- const { configureCommandFromSectionsArg } = await import("./configure-CJp0NIbm.js").then((n) => n.t);
209
+ const { configureCommandFromSectionsArg } = await import("./configure-BMRfSJ5h.js").then((n) => n.t);
210
210
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
211
211
  });
212
212
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -12,22 +12,22 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
12
12
  import { t as note$1 } from "./note-ytwb4wwn.js";
13
13
  import { t as WizardCancelledError } from "./prompts-B98rp78m.js";
14
14
  import { t as createClackPrompter } from "./clack-prompter-v9MYo-5u.js";
15
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-DPzbq3iB.js";
15
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-BN00--TD.js";
16
16
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-7YBz5otm.js";
17
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-Bf1LB5fd.js";
17
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-Cv6fL8Vq.js";
18
18
  import { t as resolveGatewayService } from "./service-BF50XyKr.js";
19
- import { r as healthCommand } from "./health-BIwN5H6b.js";
19
+ import { r as healthCommand } from "./health--v-C6lSf.js";
20
20
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-CnX0W3vy.js";
21
21
  import { n as logConfigUpdated } from "./logging-BmJ5ky59.js";
22
22
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-BnvC700A.js";
23
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-9XyVfAyH.js";
23
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-B8n3tJtT.js";
24
24
  import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-DN-co6Oy.js";
25
25
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-BBxRNFXz.js";
26
26
  import { a as promptCustomApiConfig } from "./onboard-custom-BCcuL4Uq.js";
27
27
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-CCdAVmwu.js";
28
28
  import { t as formatHealthCheckFailure } from "./health-format-Dp4xmTKn.js";
29
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-B6Ox0wMi.js";
30
- import { n as setupSkills } from "./onboard-skills-D-ppyTcQ.js";
29
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-pucDu-pH.js";
30
+ import { n as setupSkills } from "./onboard-skills-BVTCfqlg.js";
31
31
  import { confirm, intro, outro, select, text } from "@clack/prompts";
32
32
 
33
33
  //#region src/commands/configure.shared.ts
@@ -10,22 +10,22 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
10
10
  import { t as note$1 } from "./note-Cltpxj6i.js";
11
11
  import { t as WizardCancelledError } from "./prompts-CqJkfsHC.js";
12
12
  import { t as createClackPrompter } from "./clack-prompter-_kEnSVz4.js";
13
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-BRi2UP_-.js";
13
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-DeRg97iI.js";
14
14
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DaJ4Tf2a.js";
15
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-DahbbzzQ.js";
15
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-CAAZ0RDq.js";
16
16
  import { t as resolveGatewayService } from "./service-Ccv3Zi5_.js";
17
- import { r as healthCommand } from "./health-BaYDaHPT.js";
17
+ import { r as healthCommand } from "./health-D0jGdk53.js";
18
18
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DfBRXG5y.js";
19
19
  import { n as logConfigUpdated } from "./logging-BRejMykf.js";
20
20
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-kt2FcieM.js";
21
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-BYOypIGE.js";
21
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-C8ElO44A.js";
22
22
  import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-CS_h9RHv.js";
23
23
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-DjoQVcOq.js";
24
24
  import { a as promptCustomApiConfig } from "./onboard-custom-C-wfNtOM.js";
25
25
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-DFUXU3PT.js";
26
26
  import { t as formatHealthCheckFailure } from "./health-format-Li703vy6.js";
27
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-BgDE1b8f.js";
28
- import { n as setupSkills } from "./onboard-skills-V1IT5l9E.js";
27
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-CXRFa8AU.js";
28
+ import { n as setupSkills } from "./onboard-skills-C_93kjju.js";
29
29
  import { confirm, intro, outro, select, text } from "@clack/prompts";
30
30
 
31
31
  //#region src/commands/configure.shared.ts
@@ -987,6 +987,172 @@ body {
987
987
  box-shadow: 0 0 8px rgba(0, 212, 255, 0.18);
988
988
  }
989
989
 
990
+ /* ── Phase 4: type-specific body renderers ───────────────────────── */
991
+
992
+ /* Text + markdown: inherit from .symframe-card-body. Add minimal
993
+ markdown rules — most users will want headings and code blocks
994
+ readable but compact. */
995
+ .symframe-body-markdown h1,
996
+ .symframe-body-markdown h2,
997
+ .symframe-body-markdown h3,
998
+ .symframe-body-markdown h4 {
999
+ font-size: 12px;
1000
+ font-weight: 600;
1001
+ margin: 8px 0 4px;
1002
+ color: var(--text);
1003
+ }
1004
+ .symframe-body-markdown p {
1005
+ margin: 4px 0;
1006
+ }
1007
+ .symframe-body-markdown ul,
1008
+ .symframe-body-markdown ol {
1009
+ padding-left: 18px;
1010
+ margin: 4px 0;
1011
+ }
1012
+ .symframe-body-markdown code {
1013
+ font-family: var(--font-mono);
1014
+ font-size: 10px;
1015
+ padding: 1px 4px;
1016
+ background: rgba(255, 255, 255, 0.04);
1017
+ border-radius: 3px;
1018
+ }
1019
+ .symframe-body-markdown pre {
1020
+ background: rgba(0, 0, 0, 0.25);
1021
+ border: 1px solid rgba(255, 255, 255, 0.05);
1022
+ border-radius: 5px;
1023
+ padding: 8px;
1024
+ overflow-x: auto;
1025
+ margin: 6px 0;
1026
+ }
1027
+ .symframe-body-markdown pre code {
1028
+ background: transparent;
1029
+ padding: 0;
1030
+ font-size: 10px;
1031
+ }
1032
+
1033
+ /* Code body — pre/code wrapper with hljs theme-friendly chrome. */
1034
+ .symframe-body-code {
1035
+ background: rgba(0, 0, 0, 0.3);
1036
+ border: 1px solid rgba(255, 255, 255, 0.06);
1037
+ border-radius: 5px;
1038
+ padding: 8px 10px;
1039
+ margin: 0;
1040
+ overflow-x: auto;
1041
+ max-height: 320px;
1042
+ overflow-y: auto;
1043
+ }
1044
+ .symframe-body-code code {
1045
+ font-family: var(--font-mono);
1046
+ font-size: 10px;
1047
+ line-height: 1.45;
1048
+ color: var(--text);
1049
+ background: transparent;
1050
+ }
1051
+
1052
+ /* Email-draft — From/To/Subject header rows + body. */
1053
+ .symframe-body-email {
1054
+ display: flex;
1055
+ flex-direction: column;
1056
+ gap: 4px;
1057
+ }
1058
+ .symframe-email-row {
1059
+ display: flex;
1060
+ gap: 6px;
1061
+ font-family: var(--font-mono);
1062
+ font-size: 10px;
1063
+ letter-spacing: 0.02em;
1064
+ padding: 2px 0;
1065
+ border-bottom: 1px dashed rgba(255, 255, 255, 0.05);
1066
+ }
1067
+ .symframe-email-row:last-of-type {
1068
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
1069
+ margin-bottom: 4px;
1070
+ padding-bottom: 4px;
1071
+ }
1072
+ .symframe-email-label {
1073
+ flex: 0 0 auto;
1074
+ color: var(--text-dim);
1075
+ text-transform: uppercase;
1076
+ letter-spacing: 0.06em;
1077
+ font-size: 9px;
1078
+ min-width: 48px;
1079
+ opacity: 0.7;
1080
+ }
1081
+ .symframe-email-value {
1082
+ color: var(--text);
1083
+ word-break: break-word;
1084
+ }
1085
+ .symframe-email-body {
1086
+ font-family: var(--font-mono);
1087
+ font-size: 11px;
1088
+ line-height: 1.5;
1089
+ color: var(--text);
1090
+ white-space: pre-wrap;
1091
+ word-break: break-word;
1092
+ margin-top: 4px;
1093
+ }
1094
+
1095
+ /* PDF embed */
1096
+ .symframe-body-pdf {
1097
+ display: flex;
1098
+ flex-direction: column;
1099
+ gap: 6px;
1100
+ }
1101
+ .symframe-pdf-iframe {
1102
+ width: 100%;
1103
+ height: 280px;
1104
+ border: 1px solid rgba(255, 255, 255, 0.08);
1105
+ border-radius: 5px;
1106
+ background: rgba(0, 0, 0, 0.2);
1107
+ }
1108
+
1109
+ /* Audio + video shared chrome */
1110
+ .symframe-body-audio,
1111
+ .symframe-body-video {
1112
+ display: flex;
1113
+ flex-direction: column;
1114
+ gap: 6px;
1115
+ }
1116
+ .symframe-audio,
1117
+ .symframe-video {
1118
+ width: 100%;
1119
+ border-radius: 5px;
1120
+ background: rgba(0, 0, 0, 0.2);
1121
+ }
1122
+ .symframe-video {
1123
+ max-height: 280px;
1124
+ object-fit: contain;
1125
+ }
1126
+
1127
+ /* Empty-media placeholder when url is missing */
1128
+ .symframe-body-empty {
1129
+ font-family: var(--font-mono);
1130
+ font-size: 10px;
1131
+ color: var(--text-dim);
1132
+ opacity: 0.6;
1133
+ font-style: italic;
1134
+ }
1135
+
1136
+ /* Download link — used by pdf/audio/video renderers */
1137
+ .symframe-download {
1138
+ display: inline-block;
1139
+ padding: 4px 8px;
1140
+ border: 1px solid var(--glass-border);
1141
+ border-radius: 4px;
1142
+ font-family: var(--font-mono);
1143
+ font-size: 10px;
1144
+ letter-spacing: 0.04em;
1145
+ color: var(--text-dim);
1146
+ text-decoration: none;
1147
+ transition: all 0.15s ease;
1148
+ align-self: flex-start;
1149
+ }
1150
+ .symframe-download:hover {
1151
+ border-color: var(--accent-cyan);
1152
+ color: var(--accent-cyan);
1153
+ background: rgba(0, 212, 255, 0.06);
1154
+ }
1155
+
990
1156
  /* ── Response Area ────────────────────────────────────────────────── */
991
1157
  .response-area {
992
1158
  position: fixed;
@@ -158,6 +158,16 @@ class SymiGateway extends EventTarget {
158
158
  return;
159
159
  }
160
160
 
161
+ if (type === "symframe") {
162
+ // Phase 3 of the symframe arc: server-pushed cards. The payload is
163
+ // { action: "add"|"update"|"remove", id?, card? } and routes to
164
+ // window.symframe.{add,update,remove}. Dispatched via a window-
165
+ // level CustomEvent so symframe.js can subscribe without holding
166
+ // a direct reference to the gateway.
167
+ window.dispatchEvent(new CustomEvent("symi:symframe", { detail: msg.payload }));
168
+ return;
169
+ }
170
+
161
171
  if (type === "profile") {
162
172
  // Model profile broadcast — apply to Glass UI immediately
163
173
  if (msg.payload?.profile) {