@symerian/symi 3.5.21 → 3.5.23

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 (178) hide show
  1. package/dist/{agent-NT0EKnK_.js → agent-CBfp75J4.js} +18 -18
  2. package/dist/{agent-scope-Bnsyyeci.js → agent-scope-DOrZjOnW.js} +18 -18
  3. package/dist/{agents.config-DA0ISLi7.js → agents.config-B7sNDvhz.js} +1 -1
  4. package/dist/{audit-CXIXYDRx.js → audit-Ce-u6aaR.js} +20 -20
  5. package/dist/{auth-choice-BtXIQPTU.js → auth-choice-CUvx59kv.js} +11 -11
  6. package/dist/{auth-profiles-D5nYBj_Z.js → auth-profiles-Ce7R_25e.js} +2 -2
  7. package/dist/{auth-token-fgnCQEHT.js → auth-token-Cr28IDKY.js} +3 -3
  8. package/dist/{browser-cli-DOTM7UBC.js → browser-cli-Ibgld3mA.js} +9 -9
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +4 -4
  11. package/dist/bundled/session-memory/handler.js +4 -4
  12. package/dist/{call-Bpjj5p7I.js → call-xdEE97oU.js} +9 -9
  13. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  14. package/dist/{channel-options-XRJiHUm5.js → channel-options-DCmWOAc0.js} +1 -1
  15. package/dist/{channels-cli-CQ4M05oy.js → channels-cli-Cs1Z0dn8.js} +57 -57
  16. package/dist/{chrome-OTJg3QKn.js → chrome-CmQwGAuL.js} +7 -7
  17. package/dist/{chrome-38OnGyuN.js → chrome-DJChpTwP.js} +2 -2
  18. package/dist/{cli-B-uoiYP2.js → cli-CadU09SC.js} +45 -45
  19. package/dist/{client-CTrfpKT3.js → client-Cs9Bh-G0.js} +1 -1
  20. package/dist/{commands-registry-CwXsDVuO.js → commands-registry-Ca5hh7nh.js} +1 -1
  21. package/dist/{completion-cli-Cn_81QBb.js → completion-cli-Dd56ibFZ.js} +12 -12
  22. package/dist/{config-BngIfn5l.js → config-B4jkreCN.js} +2 -2
  23. package/dist/{config-cli-B1cPkJ4p.js → config-cli-GwUJEapt.js} +4 -4
  24. package/dist/{config-guard-DStz4_V2.js → config-guard-BRm3RiOi.js} +6 -6
  25. package/dist/{config-validation-Dxj9LRzr.js → config-validation-Cdyg1BZB.js} +1 -1
  26. package/dist/{configure-C7zmSgvC.js → configure-5md67tCP.js} +14 -14
  27. package/dist/{consolidate-CO32_TEx.js → consolidate-DymnvvYm.js} +6 -6
  28. package/dist/{control-service-CUreKVeY.js → control-service-D8kKOts5.js} +4 -4
  29. package/dist/control-ui/css/style.css +38 -3
  30. package/dist/control-ui/index.html +2 -2
  31. package/dist/control-ui/js/symframe-awaiting.js +15 -10
  32. package/dist/control-ui/js/symframe-substrate.js +11 -7
  33. package/dist/control-ui/js/symframe.js +12 -28
  34. package/dist/{control-ui-assets-B8B9z_Ll.js → control-ui-assets-CJQ97d4u.js} +1 -1
  35. package/dist/{cost-cli-D-ssjcRF.js → cost-cli-DWiVCOCx.js} +3 -3
  36. package/dist/{cron-cli-otPeKxmi.js → cron-cli-CE9bV9Et.js} +7 -7
  37. package/dist/{daemon-cli-qDdMg615.js → daemon-cli-BYiG4GOU.js} +11 -11
  38. package/dist/{daemon-runtime-CKn0wmCk.js → daemon-runtime-DlQla_dA.js} +10 -10
  39. package/dist/{deliver-BiWlR84Y.js → deliver-B04yNX82.js} +4 -4
  40. package/dist/{deliver-CWMFmMCv.js → deliver-lTZLIQqf.js} +2 -2
  41. package/dist/{deps-CdibsPMx.js → deps-Bf9dt2UO.js} +1 -1
  42. package/dist/{devices-cli-DDPwF2Nx.js → devices-cli-Bhr6jGtH.js} +6 -6
  43. package/dist/{diagnostics-CYkqD5lP.js → diagnostics-DlZODdRf.js} +5 -5
  44. package/dist/{directory-cli-giqTe8Yg.js → directory-cli-Bm5QYEo-.js} +3 -3
  45. package/dist/{dm-policy-shared-B61_yf6G.js → dm-policy-shared-CeFt0nch.js} +1 -1
  46. package/dist/{dns-cli-Dssz4RqF.js → dns-cli-CubLq4j9.js} +3 -3
  47. package/dist/{docs-cli-Ct1STieY.js → docs-cli-PS8m1er7.js} +1 -1
  48. package/dist/{doctor-completion-CL7MyXlo.js → doctor-completion-BpUGRguQ.js} +2 -2
  49. package/dist/{doctor-config-flow-ljVnQJjo.js → doctor-config-flow-C52W1uUK.js} +9 -9
  50. package/dist/{exec-approvals-cli-DsBoQu5H.js → exec-approvals-cli-CzvIqBUd.js} +13 -13
  51. package/dist/{file-lock-2AecMjCa.js → file-lock-BVUYnlQv.js} +8 -8
  52. package/dist/{fs-safe-B0Is-oLk.js → fs-safe-BdejYjW8.js} +6 -6
  53. package/dist/{gateway-cli-DG_2YZ8B.js → gateway-cli-D1d5YAt0.js} +98 -98
  54. package/dist/{gateway-rpc-gaoD882s.js → gateway-rpc-BTGT1SuZ.js} +1 -1
  55. package/dist/{glass-ui-ws-Bof7krDJ.js → glass-ui-ws-BH9WH_VN.js} +67 -67
  56. package/dist/{health-CMbUI4aN.js → health-DpE9GWGn.js} +4 -4
  57. package/dist/{hooks-cli-Cgjor7F-.js → hooks-cli-D7xxbEwI.js} +59 -59
  58. package/dist/{image-ops-BzCBIakN.js → image-ops-L70xVnpG.js} +10 -10
  59. package/dist/index.js +52 -52
  60. package/dist/{inspect-DzYUb_Dl.js → inspect-CGKsaVZ4.js} +4 -4
  61. package/dist/{install-safe-path-BrpA09f2.js → install-safe-path-B2JrFspY.js} +11 -11
  62. package/dist/{installs-bnDlOSq2.js → installs-D890uIIW.js} +10 -10
  63. package/dist/{internal-csqU78gW.js → internal-DVCddhhN.js} +9 -9
  64. package/dist/{lifecycle-core-cSR_xiIO.js → lifecycle-core-wFwnK_mD.js} +5 -5
  65. package/dist/llm-slug-generator.js +4 -4
  66. package/dist/{local-roots-2Jb79HZ8.js → local-roots-CgDCgCuM.js} +1 -1
  67. package/dist/{logs-cli-Kr145PO_.js → logs-cli-DvIVuW0d.js} +7 -7
  68. package/dist/{manager-DG6PODgu.js → manager-CoCX7L5u.js} +15 -15
  69. package/dist/{manager-Cv4xI8sP.js → manager-DDynl084.js} +1 -1
  70. package/dist/{memory-BFnx3v3_.js → memory-B067LTL9.js} +5 -5
  71. package/dist/{memory-cli-CHNghdrm.js → memory-cli-D8Z_5-Nz.js} +12 -12
  72. package/dist/{model-Cwbcw-km.js → model-MUMSB_7d.js} +1 -1
  73. package/dist/{model-auth-_C07_3Yr.js → model-auth-1EAQvYRv.js} +2 -2
  74. package/dist/{model-catalog-BWurV7gl.js → model-catalog-IWi6-nY9.js} +3 -3
  75. package/dist/{model-picker-Dpkr5xBW.js → model-picker-Cf6UgQEh.js} +5 -5
  76. package/dist/{model-selection-CCTzD29o.js → model-selection-7wdmO-Iw.js} +1 -1
  77. package/dist/{models-cli-BbK8HMKa.js → models-cli-C979SN3Z.js} +55 -55
  78. package/dist/{models-config-DlXge3Sd.js → models-config-B5Xxy-c-.js} +8 -8
  79. package/dist/{node-cli-BPnBosC4.js → node-cli-DGybtex_.js} +27 -27
  80. package/dist/{node-service-Cc18m-uk.js → node-service-BH08wY5j.js} +1 -1
  81. package/dist/{nodes-cli-CN_m6PO5.js → nodes-cli-C-mEw2av.js} +10 -10
  82. package/dist/{nodes-screen-Cp5QP3ET.js → nodes-screen-De9ma6e1.js} +4 -4
  83. package/dist/{npm-registry-spec-C-muP97-.js → npm-registry-spec-DTqn-NXZ.js} +9 -9
  84. package/dist/{onboard-B2IcTMv-.js → onboard-CotuAZi6.js} +15 -15
  85. package/dist/{onboard-channels-wfGO5Zlh.js → onboard-channels-DSyynpou.js} +4 -4
  86. package/dist/{onboard-custom-DnDrvxSg.js → onboard-custom-BcRYreNG.js} +3 -3
  87. package/dist/{onboard-helpers-BKejzolA.js → onboard-helpers-CLXJ8zp0.js} +8 -8
  88. package/dist/{onboard-hooks-D9jHwImb.js → onboard-hooks-2SCajRKc.js} +1 -1
  89. package/dist/{onboard-remote-y3ZmP90U.js → onboard-remote-BYBai0w3.js} +1 -1
  90. package/dist/{onboard-skills-BFhHfrt9.js → onboard-skills-BxJlS1Bk.js} +3 -3
  91. package/dist/{onboarding-DqlPV372.js → onboarding-BnoGiOh3.js} +12 -12
  92. package/dist/{onboarding.finalize-Bwjv3jew.js → onboarding.finalize-g86Q4433.js} +31 -31
  93. package/dist/{onboarding.gateway-config-CiRo9EMt.js → onboarding.gateway-config-CEXjbEM0.js} +8 -8
  94. package/dist/{openai-model-default-De-UAjwg.js → openai-model-default-BkuuK-Di.js} +2 -2
  95. package/dist/{pairing-cli-CBMMCNnx.js → pairing-cli-Rsae0KnN.js} +5 -5
  96. package/dist/{pairing-store-Be-ZQK87.js → pairing-store-BNhJOnWn.js} +1 -1
  97. package/dist/{pairing-token-B703A1U3.js → pairing-token-Dcy37-4s.js} +7 -7
  98. package/dist/{paths-BWqg8NZT.js → paths-DObzwe08.js} +1 -1
  99. package/dist/{pi-auth-json-D-vdh-nY.js → pi-auth-json-Db8XJVGL.js} +6 -6
  100. package/dist/{pi-embedded-helpers-j1JrlsI0.js → pi-embedded-helpers-D-OFjhdI.js} +6 -6
  101. package/dist/{pi-tools.policy-CvAqjEH9.js → pi-tools.policy-H2t-Xkfc.js} +3 -3
  102. package/dist/{plugin-auto-enable-BXSJTxI7.js → plugin-auto-enable-DJBhDIMq.js} +1 -1
  103. package/dist/{plugin-registry-B43UosQh.js → plugin-registry-AsC9gydF.js} +3 -3
  104. package/dist/plugin-sdk/index.js +6 -6
  105. package/dist/{plugins-cli-BV2wbjfI.js → plugins-cli-CbByGz8z.js} +54 -54
  106. package/dist/{ports-CB_Iu83U.js → ports-gxLM5ahL.js} +2 -2
  107. package/dist/{ports-Bi3V_3n9.js → ports-r7LBic2V.js} +1 -1
  108. package/dist/{program-context-BmXxHUKe.js → program-context-CiyK6MfV.js} +40 -40
  109. package/dist/{prompt-select-styled-BlQZX6pK.js → prompt-select-styled-DaNQ_GgB.js} +38 -38
  110. package/dist/{provider-auth-helpers-WLwb6tL4.js → provider-auth-helpers-D2FDvwT5.js} +6 -6
  111. package/dist/{push-apns-CBGvXev_.js → push-apns-va-DRu4U.js} +4 -4
  112. package/dist/{pw-ai-CP5pn3eU.js → pw-ai-BiBvIJzd.js} +7 -7
  113. package/dist/{pw-ai-DY_6l11g.js → pw-ai-DLsdzdgc.js} +1 -1
  114. package/dist/{qmd-manager-Dxyue7B1.js → qmd-manager-C8-M4Pru.js} +19 -19
  115. package/dist/{qr-cli-DHw6muwK.js → qr-cli-1sCVaPcF.js} +3 -3
  116. package/dist/{register.agent-CXdTiqyP.js → register.agent-BqdQ0s30.js} +67 -67
  117. package/dist/{register.configure-DVcn-gCO.js → register.configure-Dhwi-4FG.js} +70 -70
  118. package/dist/{register.maintenance-cpspl8D6.js → register.maintenance-iMjNw9uy.js} +67 -67
  119. package/dist/{register.message-BjcYy5UG.js → register.message-Ao_b9s2g.js} +47 -47
  120. package/dist/{register.onboard-D4RN92s2.js → register.onboard-ymhSAezZ.js} +25 -25
  121. package/dist/{register.setup-BvoXF0xl.js → register.setup-CKs9mqtD.js} +28 -28
  122. package/dist/{register.status-health-sessions-DjDvCXBn.js → register.status-health-sessions-U-azRmpb.js} +41 -41
  123. package/dist/{replies-B_3j7R_Q.js → replies-CbXXjn9X.js} +1 -1
  124. package/dist/{reply-prefix-CtZtkTJK.js → reply-prefix-BFNeXT65.js} +1 -1
  125. package/dist/{resolve-route-Du0VftVs.js → resolve-route-C1IIA6kH.js} +1 -1
  126. package/dist/{routes-BwTUoI5h.js → routes-ivqbutvM.js} +10 -10
  127. package/dist/{rpc-CwxSZZOx.js → rpc-DjqFrbOc.js} +1 -1
  128. package/dist/{sandbox-CZGTCone.js → sandbox-BkznAPKO.js} +18 -18
  129. package/dist/{sandbox-cli-DEtGT_4y.js → sandbox-cli-Bb9cBtBH.js} +13 -13
  130. package/dist/{security-cli-DJd7Fcdy.js → security-cli-JKsf9SIu.js} +29 -29
  131. package/dist/{send-CxjvucMO.js → send-B0jHSNMF.js} +7 -7
  132. package/dist/{server-context-DXdk410X.js → server-context-ChcbJgNo.js} +5 -5
  133. package/dist/{server-methods-DfVfzYqq.js → server-methods-B2tykucj.js} +60 -60
  134. package/dist/{server-node-events-B0yC6hi1.js → server-node-events-BKqszk_a.js} +48 -48
  135. package/dist/{service-CRZoXO_n.js → service-e6MzlLCd.js} +15 -15
  136. package/dist/{session-dirs-a00Ad2SO.js → session-dirs-C9E2G0yZ.js} +2 -2
  137. package/dist/{session-utils-CJhcRx3E.js → session-utils-Cs1jlD-q.js} +14 -14
  138. package/dist/{sessions-BCc3THTm.js → sessions-Dxf5Kjig.js} +10 -10
  139. package/dist/{shared-C39SiDDJ.js → shared-1xPo9ygd.js} +1 -1
  140. package/dist/{shared-Dh-O8nRd.js → shared-COtpr3Ad.js} +3 -3
  141. package/dist/{skill-commands-DWvXs3lz.js → skill-commands-DDGGlq68.js} +4 -4
  142. package/dist/{skill-scanner-CIlHPszT.js → skill-scanner-BCgVcIwi.js} +5 -5
  143. package/dist/{skills-CYcBtLGH.js → skills-BwDmcZdt.js} +4 -4
  144. package/dist/{skills-cli-CD9s3cgm.js → skills-cli-B-7TY-vS.js} +7 -7
  145. package/dist/{skills-install-BTa9IuQ6.js → skills-install-Dwzsjoc8.js} +3 -3
  146. package/dist/{skills-remote-BcRQTDsZ.js → skills-remote-bz71Bstn.js} +3 -3
  147. package/dist/{skills-status-DLnCHUZ2.js → skills-status-BKX1PjCc.js} +1 -1
  148. package/dist/{sqlite-BpogPlQW.js → sqlite-Cod7C5ba.js} +5 -5
  149. package/dist/{status-BWxLtb3D.js → status-DHBVIMyL.js} +23 -23
  150. package/dist/{status-Doq8T1zj.js → status-DPGFZPpp.js} +3 -3
  151. package/dist/{status.update-CKfyV6zw.js → status.update-DGJi0OLl.js} +3 -3
  152. package/dist/{symframe-cli-D1CtN3pf.js → symframe-cli-CX3dINPw.js} +9 -9
  153. package/dist/{symi-root-DeCVdZB4.js → symi-root-BQ0IpoW2.js} +2 -2
  154. package/dist/{synthesis-yl24Ovw4.js → synthesis-D91XE0n4.js} +4 -4
  155. package/dist/{synthesis-VZNnlUTf.js → synthesis-DmqicCsT.js} +45 -45
  156. package/dist/{system-cli-r7WJj0Xh.js → system-cli-DUHzCGfK.js} +7 -7
  157. package/dist/{systemd-CsoVnIbM.js → systemd-CUIM0n5P.js} +5 -5
  158. package/dist/{systemd-hints-QISwLlFU.js → systemd-hints-CsrzMCTD.js} +6 -6
  159. package/dist/{systemd-linger-BnhuRdbt.js → systemd-linger-BzYk7A6M.js} +1 -1
  160. package/dist/{tui-J7Jxp-FF.js → tui-DCqVZ6sC.js} +7 -7
  161. package/dist/{tui-cli-DR48dU_C.js → tui-cli-CI-P3sei.js} +19 -19
  162. package/dist/{unified-runner-BV5TdNFv.js → unified-runner-CdJx7yN8.js} +10 -10
  163. package/dist/{unified-runner-DXjH-prv.js → unified-runner-CznU7Ad0.js} +101 -101
  164. package/dist/{update-check-u6Jgr1cz.js → update-check-BCL_K7kx.js} +5 -5
  165. package/dist/{update-cli-CKpjWtlv.js → update-cli-DBoIBDNe.js} +77 -77
  166. package/dist/{update-runner-G2YgEATs.js → update-runner-BLV8SI96.js} +15 -15
  167. package/dist/{update-Cb0Fmxic.js → update-yYduAjKd.js} +3 -3
  168. package/dist/{webhooks-cli-DjUITimx.js → webhooks-cli-D5k-Y2A8.js} +4 -4
  169. package/dist/{with-timeout-CLrF-Yr_.js → with-timeout-DPR4A2dx.js} +1 -1
  170. package/dist/{workspace-dirs-DCICLTHx.js → workspace-dirs-jKFQf7of.js} +1 -1
  171. package/dist/{wsl-DTi7eX-V.js → wsl-CglTdtlb.js} +2 -2
  172. package/extensions/memory-core/package.json +1 -1
  173. package/extensions/msteams/CHANGELOG.md +12 -0
  174. package/extensions/msteams/package.json +1 -1
  175. package/extensions/open-prose/package.json +1 -1
  176. package/extensions/outlook/package.json +1 -1
  177. package/extensions/slack/package.json +1 -1
  178. package/package.json +1 -1
@@ -2,10 +2,10 @@ import "./registry-Sbac4a4z.js";
2
2
  import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
5
- import { l as parseEmbedding, r as cosineSimilarity } from "./internal-csqU78gW.js";
5
+ import { l as parseEmbedding, r as cosineSimilarity } from "./internal-DVCddhhN.js";
6
6
  import crypto from "node:crypto";
7
7
  import path from "node:path";
8
- import fsPromises from "node:fs/promises";
8
+ import fs from "node:fs/promises";
9
9
 
10
10
  //#region src/memory/consolidate.ts
11
11
  const log = createSubsystemLogger("memory/consolidate");
@@ -346,7 +346,7 @@ async function stagePromote(params) {
346
346
  };
347
347
  const now = params.now ?? Date.now();
348
348
  const memoryDir = path.join(params.workspaceDir, "memory");
349
- await fsPromises.mkdir(memoryDir, { recursive: true }).catch(() => {});
349
+ await fs.mkdir(memoryDir, { recursive: true }).catch(() => {});
350
350
  const corePath = path.join(memoryDir, "symi-core.md");
351
351
  const beliefsPath = path.join(memoryDir, "symi-beliefs.md");
352
352
  params.db.prepare(`UPDATE chunks SET promoted_to = NULL WHERE promoted_to = ?`).run(SYMI_CORE_PATH);
@@ -386,7 +386,7 @@ async function stagePromote(params) {
386
386
  sections: sectionLines,
387
387
  now
388
388
  });
389
- await fsPromises.writeFile(corePath, symiCoreContent, "utf-8");
389
+ await fs.writeFile(corePath, symiCoreContent, "utf-8");
390
390
  const merged = mergeBeliefs({
391
391
  existing: await readExistingBeliefs(beliefsPath),
392
392
  fresh: params.synthesizedBeliefs ?? [],
@@ -396,7 +396,7 @@ async function stagePromote(params) {
396
396
  beliefs: merged,
397
397
  now
398
398
  });
399
- await fsPromises.writeFile(beliefsPath, symiBeliefsContent, "utf-8");
399
+ await fs.writeFile(beliefsPath, symiBeliefsContent, "utf-8");
400
400
  log.debug("consolidate.promote", {
401
401
  promoted,
402
402
  sections: CORE_SECTIONS.length,
@@ -596,7 +596,7 @@ function mergeBeliefs(params) {
596
596
  return [...byHash.values()].toSorted((a, b) => b.confidence - a.confidence).slice(0, params.cap);
597
597
  }
598
598
  async function readExistingBeliefs(filePath) {
599
- const content = await fsPromises.readFile(filePath, "utf-8").catch(() => "");
599
+ const content = await fs.readFile(filePath, "utf-8").catch(() => "");
600
600
  if (!content) return [];
601
601
  const out = [];
602
602
  for (const rawLine of content.split("\n")) {
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
3
- import { i as loadConfig } from "./config-BngIfn5l.js";
4
- import { x as ensureChromeExtensionRelayServer } from "./chrome-38OnGyuN.js";
5
- import { a as resolveProfile, i as resolveBrowserConfig, n as listKnownProfileNames, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-DXdk410X.js";
3
+ import { i as loadConfig } from "./config-B4jkreCN.js";
4
+ import { x as ensureChromeExtensionRelayServer } from "./chrome-DJChpTwP.js";
5
+ import { a as resolveProfile, i as resolveBrowserConfig, n as listKnownProfileNames, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-ChcbJgNo.js";
6
6
 
7
7
  //#region src/browser/server-lifecycle.ts
8
8
  async function ensureExtensionRelayForProfiles(params) {
@@ -80,7 +80,7 @@ async function stopBrowserControlService() {
80
80
  });
81
81
  state = null;
82
82
  try {
83
- await (await import("./pw-ai-CP5pn3eU.js")).closePlaywrightBrowserConnection();
83
+ await (await import("./pw-ai-BiBvIJzd.js")).closePlaywrightBrowserConnection();
84
84
  } catch {}
85
85
  }
86
86
 
@@ -850,6 +850,11 @@ body {
850
850
  flex-direction: column;
851
851
  gap: 8px;
852
852
  height: 100%;
853
+ /* Stage C.2: contain the column so the substrate's internal scroll
854
+ engages instead of bursting the parent. Without overflow:hidden
855
+ here, the metrics-col scroll absorbs everything and substrate
856
+ overflow-y becomes a no-op. */
857
+ overflow: hidden;
853
858
  }
854
859
  .symframe-header {
855
860
  padding: 8px 10px 10px;
@@ -890,17 +895,35 @@ body {
890
895
 
891
896
  /* The stack — substrate + cards share a single grid cell so they
892
897
  overlap on the z-axis. Cards on top (z:1) with backdrop-filter let
893
- the substrate (z:0) show through. */
898
+ the substrate (z:0) show through.
899
+
900
+ Stage C.2 sizing fixes (after the substrate was observed bursting
901
+ the column on a long reasoning session):
902
+ - flex: 1 1 0 force pure flex-grow, ignore intrinsic content size
903
+ - min-height: 0 break the default min-height:auto so the flex
904
+ algorithm can actually shrink this child below
905
+ its content size — required for the substrate's
906
+ overflow-y:auto to engage
907
+ - grid-template-rows: 1fr explicitly bound the row height so the
908
+ grid cell tracks the stack's measured size, not
909
+ its content size
910
+ - overflow: hidden on the stack as belt-and-suspenders so any
911
+ stray overflow doesn't leak past the cell bounds
912
+ - min-height: 0 on each grid child for the same reason
913
+ */
894
914
  .symframe-stack {
895
915
  position: relative;
896
- flex: 1 1 auto;
897
- min-height: 280px;
916
+ flex: 1 1 0;
917
+ min-height: 0;
898
918
  display: grid;
899
919
  grid-template-areas: "overlay";
920
+ grid-template-rows: 1fr;
921
+ overflow: hidden;
900
922
  }
901
923
  .symframe-cards {
902
924
  grid-area: overlay;
903
925
  z-index: 1;
926
+ min-height: 0;
904
927
  display: flex;
905
928
  flex-direction: column;
906
929
  gap: 10px;
@@ -932,6 +955,7 @@ body {
932
955
  .symframe-substrate {
933
956
  grid-area: overlay;
934
957
  z-index: 0;
958
+ min-height: 0;
935
959
  overflow-y: auto;
936
960
  display: flex;
937
961
  flex-direction: column;
@@ -1326,6 +1350,17 @@ body {
1326
1350
  white-space: nowrap;
1327
1351
  }
1328
1352
 
1353
+ /* Empty-state placeholder when no subagents and no schedules exist. */
1354
+ .awaiting-empty {
1355
+ font-family: var(--font-mono);
1356
+ font-size: 10px;
1357
+ color: var(--text-dim);
1358
+ opacity: 0.55;
1359
+ padding: 8px 10px;
1360
+ text-align: center;
1361
+ font-style: italic;
1362
+ }
1363
+
1329
1364
  /* Add button + menu */
1330
1365
  .awaiting-add-btn {
1331
1366
  display: inline-flex;
@@ -200,7 +200,7 @@
200
200
  <div class="symframe-header-row">
201
201
  <span class="symframe-title">SYMFRAME</span>
202
202
  <span class="reasoning-live-dot" id="reasoning-live-dot"></span>
203
- <span class="symframe-count" id="symframe-count">2 cards</span>
203
+ <span class="symframe-count" id="symframe-count"></span>
204
204
  </div>
205
205
  <div class="symframe-sub">window into the agent's mind</div>
206
206
  </div>
@@ -223,7 +223,7 @@
223
223
  <!-- "things that aren't done yet" list, sorted by in-flight-first -->
224
224
  <!-- then ETA. Click a sub-agent → existing subagent modal; click -->
225
225
  <!-- a schedule → existing schedule modal; [+ Add] opens an add menu. -->
226
- <div class="symframe-awaiting" id="symframe-awaiting" hidden>
226
+ <div class="symframe-awaiting" id="symframe-awaiting">
227
227
  <div class="awaiting-header">
228
228
  <span class="awaiting-title">AWAITING</span>
229
229
  <span class="awaiting-count" id="awaiting-count"></span>
@@ -156,6 +156,12 @@
156
156
  }
157
157
 
158
158
  // ── Render ──
159
+ // Stage C.1 fix: the AWAITING footer is ALWAYS visible — it's a
160
+ // permanent part of the panel's identity (matches the §5 spec
161
+ // "always-present footer"). When nothing's pending, an empty-state
162
+ // placeholder appears so the user always sees the surface, the
163
+ // [+ Add] button, and the implicit "this is where deferred work
164
+ // shows up" affordance.
159
165
  function render() {
160
166
  const activeSubagents = subagents
161
167
  .filter((s) => s.status === "active" || !s.endedAt)
@@ -171,16 +177,11 @@
171
177
 
172
178
  const totalActive = activeSubagents.length + sortedSchedules.filter((s) => s.enabled).length;
173
179
 
174
- // Hide entire footer when nothing's pending and no schedules exist —
175
- // a quiet panel is part of the design. Show whenever there's any
176
- // activity or any scheduled job (even disabled — so user can re-enable).
177
- const hasAny = activeSubagents.length > 0 || sortedSchedules.length > 0;
178
- root.hidden = !hasAny && !addMenuOpen;
179
-
180
180
  // Count badge: "N active" (in-flight subagents + enabled schedules)
181
+ // or "idle" when nothing's pending.
181
182
  if (countEl) {
182
183
  if (totalActive === 0) {
183
- countEl.textContent = "";
184
+ countEl.textContent = "idle";
184
185
  } else {
185
186
  const subPart =
186
187
  activeSubagents.length > 0
@@ -198,6 +199,13 @@
198
199
  return;
199
200
  }
200
201
  list.innerHTML = "";
202
+ if (activeSubagents.length === 0 && sortedSchedules.length === 0) {
203
+ const empty = document.createElement("div");
204
+ empty.className = "awaiting-empty";
205
+ empty.textContent = "Nothing pending — use [+ Add] to spawn a subagent or schedule a task.";
206
+ list.appendChild(empty);
207
+ return;
208
+ }
201
209
  for (const sub of activeSubagents) {
202
210
  list.appendChild(buildSubagentRow(sub));
203
211
  }
@@ -216,8 +224,6 @@
216
224
  addMenuOpen = true;
217
225
  addMenu.hidden = false;
218
226
  addBtn.setAttribute("aria-expanded", "true");
219
- // Ensure footer is visible while menu is open
220
- root.hidden = false;
221
227
  document.addEventListener("click", onOutsideClickAddMenu, true);
222
228
  document.addEventListener("keydown", onAddMenuKey);
223
229
  }
@@ -231,7 +237,6 @@
231
237
  addBtn.setAttribute("aria-expanded", "false");
232
238
  document.removeEventListener("click", onOutsideClickAddMenu, true);
233
239
  document.removeEventListener("keydown", onAddMenuKey);
234
- render(); // re-evaluate hidden state
235
240
  }
236
241
 
237
242
  function onOutsideClickAddMenu(e) {
@@ -46,14 +46,18 @@
46
46
  // ── Decay tiers ─────────────────────────────────────────────────────
47
47
  // Each entry carries dataset.createdAt; the tick reads its age and
48
48
  // looks up the matching tier. Tiers are evaluated in order; first
49
- // match (age < maxAge) wins. Constants tuned per the plan §5.2; expect
50
- // to revisit live.
49
+ // match (age < maxAge) wins.
50
+ //
51
+ // Stage C.1 revision: the original aggressive curve faded entries to
52
+ // 8% opacity + 6px blur (effectively invisible) after 10 minutes.
53
+ // Users perceived the substrate as "fading to nothing." The new
54
+ // curve keeps content readable at every age — older entries dim and
55
+ // shrink slightly but stay legible. No texture-mode collapse.
51
56
  const DECAY_TIERS = [
52
- { maxAge: 10_000, opacity: 1.0, blur: 0, scale: 1.0, texture: false },
53
- { maxAge: 30_000, opacity: 0.85, blur: 1, scale: 1.0, texture: false },
54
- { maxAge: 120_000, opacity: 0.55, blur: 2, scale: 1.0, texture: false },
55
- { maxAge: 600_000, opacity: 0.25, blur: 4, scale: 0.97, texture: false },
56
- { maxAge: Infinity, opacity: 0.08, blur: 6, scale: 0.94, texture: true },
57
+ { maxAge: 60_000, opacity: 1.0, blur: 0, scale: 1.0, texture: false }, // 0-1min sharp
58
+ { maxAge: 300_000, opacity: 0.9, blur: 0, scale: 1.0, texture: false }, // 1-5min slight dim
59
+ { maxAge: 1_800_000, opacity: 0.7, blur: 1, scale: 1.0, texture: false }, // 5-30min readable
60
+ { maxAge: Infinity, opacity: 0.5, blur: 2, scale: 0.98, texture: false }, // 30min+ floor
57
61
  ];
58
62
 
59
63
  const DECAY_TICK_MS = 1000;
@@ -60,7 +60,13 @@
60
60
  return;
61
61
  }
62
62
  const total = cards.size;
63
- countEl.textContent = total === 1 ? "1 card" : `${total} cards`;
63
+ // Stage C.1: blank when no cards (the static "2 cards" default
64
+ // was confusing post-Stage-B/C when the panel often has 0 cards).
65
+ if (total === 0) {
66
+ countEl.textContent = "";
67
+ } else {
68
+ countEl.textContent = total === 1 ? "1 card" : `${total} cards`;
69
+ }
64
70
  }
65
71
 
66
72
  // ── Per-type body renderers ──
@@ -752,33 +758,11 @@
752
758
  return Array.from(cards.values());
753
759
  }
754
760
 
755
- // Auto-register the sticky panels that already live in the DOM. The
756
- // existing JS for each panel (subagents.js, scheduling.js) keeps
757
- // targeting them by id and is unaffected.
758
- // Stage B (3.5.20): reasoning was removed from this list — its DOM
759
- // block is gone; reasoning content now flows to #symframe-substrate
760
- // (see glass-ui/js/symframe-substrate.js).
761
- const KNOWN_STICKY = [
762
- { id: "subagents", elementId: "subagents-panel", title: "SUBAGENTS", type: "panel-subagents" },
763
- {
764
- id: "scheduling",
765
- elementId: "scheduling-panel",
766
- title: "SCHEDULING",
767
- type: "panel-scheduling",
768
- },
769
- ];
770
- for (const known of KNOWN_STICKY) {
771
- const el = document.getElementById(known.elementId);
772
- if (el) {
773
- register({
774
- id: known.id,
775
- type: known.type,
776
- title: known.title,
777
- sticky: true,
778
- element: el,
779
- });
780
- }
781
- }
761
+ // Sticky-panel auto-registration was removed in Stage C (3.5.21):
762
+ // SUBAGENTS and SCHEDULING moved to the AWAITING footer, and REASONING
763
+ // became the substrate in Stage B (3.5.20). The `register()` API
764
+ // remains exposed via window.symframe.register for any future caller
765
+ // that wants to track a non-registry-managed DOM element as a card.
782
766
 
783
767
  window.symframe = {
784
768
  add,
@@ -1,5 +1,5 @@
1
1
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
2
- import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-DeCVdZB4.js";
2
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-DuYbft0z.js";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import path from "node:path";
@@ -3,9 +3,9 @@ import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
- import "./agent-scope-Bnsyyeci.js";
7
- import "./model-selection-CCTzD29o.js";
8
- import { i as loadConfig } from "./config-BngIfn5l.js";
6
+ import "./agent-scope-DOrZjOnW.js";
7
+ import "./model-selection-7wdmO-Iw.js";
8
+ import { i as loadConfig } from "./config-B4jkreCN.js";
9
9
  import "./boolean-CbZoNRMn.js";
10
10
  import "./env-BRnPI9sO.js";
11
11
  import "./shell-env-Dc3iU7HK.js";
@@ -4,24 +4,24 @@ import "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import { u as sanitizeAgentId } from "./session-key-DUSb7CCb.js";
6
6
  import "./exec-DuYbft0z.js";
7
- import "./agent-scope-Bnsyyeci.js";
8
- import "./model-selection-CCTzD29o.js";
9
- import "./config-BngIfn5l.js";
7
+ import "./agent-scope-DOrZjOnW.js";
8
+ import "./model-selection-7wdmO-Iw.js";
9
+ import "./config-B4jkreCN.js";
10
10
  import "./boolean-CbZoNRMn.js";
11
11
  import "./env-BRnPI9sO.js";
12
12
  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-CTrfpKT3.js";
17
- import "./call-Bpjj5p7I.js";
18
- import "./pairing-token-B703A1U3.js";
16
+ import "./client-Cs9Bh-G0.js";
17
+ import "./call-xdEE97oU.js";
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-Bqr0FxXx.js";
22
22
  import "./progress-swt2y17x.js";
23
23
  import { n as parsePositiveIntOrUndefined } from "./helpers-B_p8ul9t.js";
24
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-gaoD882s.js";
24
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-BTGT1SuZ.js";
25
25
 
26
26
  //#region src/cli/cron-cli/shared.ts
27
27
  const getCronChannelOptions = () => ["last", ...listChannelPlugins().map((plugin) => plugin.id)].join("|");
@@ -4,26 +4,26 @@ import { _ as resolveStateDir, d as resolveIsNixMode, o as resolveConfigPath, u
4
4
  import { v as shortenHomePath } from "./utils-CTPsqyE_.js";
5
5
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
6
6
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
7
- import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-BngIfn5l.js";
7
+ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-B4jkreCN.js";
8
8
  import { n as pickPrimaryTailnetIPv4 } from "./tailnet-XKACsamF.js";
9
9
  import { u as resolveGatewayBindHost } from "./ws-C7Ktmt-R.js";
10
10
  import { a as resolveGatewayAuth } from "./auth-Bkx-QuRN.js";
11
- import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-CB_Iu83U.js";
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-Bpjj5p7I.js";
13
+ import { n as callGateway } from "./call-xdEE97oU.js";
14
14
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-BLIhifCJ.js";
15
15
  import { t as formatDocsLink } from "./links-Bqr0FxXx.js";
16
16
  import { n as withProgress } from "./progress-swt2y17x.js";
17
17
  import { n as inheritOptionFromParent } from "./command-options-DDDwkB9t.js";
18
- import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CKn0wmCk.js";
19
- import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-BKejzolA.js";
20
- import { n as isWSLEnv } from "./wsl-DTi7eX-V.js";
21
- import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-CRZoXO_n.js";
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-cSR_xiIO.js";
23
- import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-QISwLlFU.js";
18
+ import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DlQla_dA.js";
19
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-CLXJ8zp0.js";
20
+ import { n as isWSLEnv } from "./wsl-CglTdtlb.js";
21
+ import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-e6MzlLCd.js";
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-wFwnK_mD.js";
23
+ import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-CsrzMCTD.js";
24
24
  import { t as parsePort } from "./parse-port-CMRD6fhd.js";
25
- import { t as readLastGatewayErrorLine } from "./diagnostics-CYkqD5lP.js";
26
- import { n as renderGatewayServiceCleanupHints, t as findExtraGatewayServices } from "./inspect-DzYUb_Dl.js";
25
+ import { t as readLastGatewayErrorLine } from "./diagnostics-DlZODdRf.js";
26
+ import { n as renderGatewayServiceCleanupHints, t as findExtraGatewayServices } from "./inspect-CGKsaVZ4.js";
27
27
 
28
28
  //#region src/cli/daemon-cli/install.ts
29
29
  async function runDaemonInstall(opts) {
@@ -1,11 +1,11 @@
1
1
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
2
- import { N as VERSION, k as collectConfigServiceEnvVars } from "./config-BngIfn5l.js";
2
+ import { N as VERSION, k as collectConfigServiceEnvVars } from "./config-B4jkreCN.js";
3
3
  import { a as NODE_SERVICE_MARKER, c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, g as resolveNodeWindowsTaskName, h as resolveNodeSystemdServiceName, i as NODE_SERVICE_KIND, m as resolveNodeLaunchAgentLabel, n as GATEWAY_SERVICE_KIND, o as NODE_WINDOWS_TASK_SCRIPT_NAME, r as GATEWAY_SERVICE_MARKER } from "./constants-BLIhifCJ.js";
4
4
  import { n as isSupportedNodeVersion } from "./runtime-guard-CWA00ZXa.js";
5
5
  import path from "node:path";
6
6
  import os from "node:os";
7
7
  import { promisify } from "node:util";
8
- import fsPromises from "node:fs/promises";
8
+ import fs from "node:fs/promises";
9
9
  import { execFile } from "node:child_process";
10
10
 
11
11
  //#region src/daemon/program-args.ts
@@ -23,23 +23,23 @@ async function resolveCliEntrypointPathForService() {
23
23
  const normalized = path.resolve(argv1);
24
24
  const resolvedPath = await resolveRealpathSafe(normalized);
25
25
  if (/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(resolvedPath)) {
26
- await fsPromises.access(resolvedPath);
26
+ await fs.access(resolvedPath);
27
27
  if (/[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized) && normalized !== resolvedPath) try {
28
- await fsPromises.access(normalized);
28
+ await fs.access(normalized);
29
29
  return normalized;
30
30
  } catch {}
31
31
  return resolvedPath;
32
32
  }
33
33
  const distCandidates = buildDistCandidates(resolvedPath, normalized);
34
34
  for (const candidate of distCandidates) try {
35
- await fsPromises.access(candidate);
35
+ await fs.access(candidate);
36
36
  return candidate;
37
37
  } catch {}
38
38
  throw new Error(`Cannot find built CLI at ${distCandidates.join(" or ")}. Run "pnpm build" first, or use dev mode.`);
39
39
  }
40
40
  async function resolveRealpathSafe(inputPath) {
41
41
  try {
42
- return await fsPromises.realpath(inputPath);
42
+ return await fs.realpath(inputPath);
43
43
  } catch {
44
44
  return inputPath;
45
45
  }
@@ -99,7 +99,7 @@ async function resolveBinaryPath(binary) {
99
99
  try {
100
100
  const resolved = execFileSync(cmd, [binary], { encoding: "utf8" }).trim().split(/\r?\n/)[0]?.trim();
101
101
  if (!resolved) throw new Error("empty");
102
- await fsPromises.access(resolved);
102
+ await fs.access(resolved);
103
103
  return resolved;
104
104
  } catch {
105
105
  if (binary === "bun") throw new Error("Bun not found in PATH. Install bun: https://bun.sh");
@@ -118,7 +118,7 @@ async function resolveCliProgramArguments(params) {
118
118
  if (params.dev) {
119
119
  const repoRoot = resolveRepoRootForDev();
120
120
  const devCliPath = path.join(repoRoot, "src", "index.ts");
121
- await fsPromises.access(devCliPath);
121
+ await fs.access(devCliPath);
122
122
  return {
123
123
  programArguments: [
124
124
  isBunRuntime(execPath) ? execPath : await resolveBunPath(),
@@ -146,7 +146,7 @@ async function resolveCliProgramArguments(params) {
146
146
  }
147
147
  const repoRoot = resolveRepoRootForDev();
148
148
  const devCliPath = path.join(repoRoot, "src", "index.ts");
149
- await fsPromises.access(devCliPath);
149
+ await fs.access(devCliPath);
150
150
  if (isBunRuntime(execPath)) return {
151
151
  programArguments: [
152
152
  execPath,
@@ -259,7 +259,7 @@ function isSystemNodePath(nodePath, env = process.env, platform = process.platfo
259
259
  async function resolveSystemNodePath(env = process.env, platform = process.platform) {
260
260
  const candidates = buildSystemNodeCandidates(env, platform);
261
261
  for (const candidate of candidates) try {
262
- await fsPromises.access(candidate);
262
+ await fs.access(candidate);
263
263
  return candidate;
264
264
  } catch {}
265
265
  return null;
@@ -9,7 +9,7 @@ import { t as formatCliCommand } from "./command-format-BrrHNE8r.js";
9
9
  import { n as isPidAlive, t as resolveProcessScopedMap } from "./process-scoped-map-B-dHc_9I.js";
10
10
  import { c as loadConfig, d as writeConfigFile, m as parseByteSize, p as parseDurationMs, s as createConfigIO, t as SsrFBlockedError } from "./ssrf-DNhyFMRW.js";
11
11
  import { t as parseBooleanValue } from "./boolean-BsqeuxE6.js";
12
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-OTJg3QKn.js";
12
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CmQwGAuL.js";
13
13
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-Dm4gX4Tl.js";
14
14
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-C89ppfp9.js";
15
15
  import { b as SafeOpenError, d as extensionForMime, i as buildImageResizeSideGrid, l as resizeToJpeg, o as getImageMetadata, r as IMAGE_REDUCE_QUALITY_STEPS, t as getAgentScopedMediaLocalRoots, u as detectMime, x as openFileWithinRoot } from "./local-roots-C7fBKoOI.js";
@@ -939,7 +939,7 @@ function isModuleNotFoundError(err) {
939
939
  }
940
940
  async function loadPwAiModule(mode) {
941
941
  try {
942
- return await import("./pw-ai-DY_6l11g.js");
942
+ return await import("./pw-ai-DLsdzdgc.js");
943
943
  } catch (err) {
944
944
  if (mode === "soft") return null;
945
945
  if (isModuleNotFoundError(err)) return null;
@@ -3536,11 +3536,11 @@ function createProfileContext(opts, profile) {
3536
3536
  const userDataDir = resolveSymiUserDataDir(profile.name);
3537
3537
  const profileState = getProfileState();
3538
3538
  if (await isHttpReachable(300) && !profileState.running) try {
3539
- await (await import("./pw-ai-DY_6l11g.js")).closePlaywrightBrowserConnection();
3539
+ await (await import("./pw-ai-DLsdzdgc.js")).closePlaywrightBrowserConnection();
3540
3540
  } catch {}
3541
3541
  if (profileState.running) await stopRunningBrowser();
3542
3542
  try {
3543
- await (await import("./pw-ai-DY_6l11g.js")).closePlaywrightBrowserConnection();
3543
+ await (await import("./pw-ai-DLsdzdgc.js")).closePlaywrightBrowserConnection();
3544
3544
  } catch {}
3545
3545
  if (!fs.existsSync(userDataDir)) return {
3546
3546
  moved: false,
@@ -1,11 +1,11 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { H as createInternalHookEvent, W as triggerInternalHook, d as getActivePluginRegistry } from "./registry-Sbac4a4z.js";
3
3
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
4
- import { i as resolveMirroredTranscriptText, r as appendAssistantMessageToSessionTranscript } from "./sessions-BCc3THTm.js";
4
+ import { i as resolveMirroredTranscriptText, r as appendAssistantMessageToSessionTranscript } from "./sessions-Dxf5Kjig.js";
5
5
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CF5skkHh.js";
6
6
  import { n as isSilentReplyText, t as SILENT_REPLY_TOKEN } from "./tokens-0yh2UnJq.js";
7
7
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-BxfKjCUx.js";
8
- import { t as getAgentScopedMediaLocalRoots } from "./local-roots-2Jb79HZ8.js";
8
+ import { t as getAgentScopedMediaLocalRoots } from "./local-roots-CgDCgCuM.js";
9
9
  import { i as failDelivery, r as enqueueDelivery, t as ackDelivery } from "./delivery-queue-OAc7hsIs.js";
10
10
 
11
11
  //#region src/plugins/hooks.ts
@@ -1,7 +1,7 @@
1
1
  //#region src/cli/deps.ts
2
2
  function createDefaultDeps() {
3
3
  return { sendMessageSlack: async (...args) => {
4
- const { sendMessageSlack } = await import("./send-CxjvucMO.js").then((n) => n.n);
4
+ const { sendMessageSlack } = await import("./send-B0jHSNMF.js").then((n) => n.n);
5
5
  return await sendMessageSlack(...args);
6
6
  } };
7
7
  }
@@ -3,18 +3,18 @@ import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
- import "./agent-scope-Bnsyyeci.js";
7
- import "./model-selection-CCTzD29o.js";
8
- import "./config-BngIfn5l.js";
6
+ import "./agent-scope-DOrZjOnW.js";
7
+ import "./model-selection-7wdmO-Iw.js";
8
+ import "./config-B4jkreCN.js";
9
9
  import "./boolean-CbZoNRMn.js";
10
10
  import "./env-BRnPI9sO.js";
11
11
  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 { Gt as approveDevicePairing, Jt as listDevicePairing, en as summarizeDeviceTokens } from "./client-CTrfpKT3.js";
16
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-Bpjj5p7I.js";
17
- import "./pairing-token-B703A1U3.js";
15
+ import { Gt as approveDevicePairing, Jt as listDevicePairing, en as summarizeDeviceTokens } from "./client-Cs9Bh-G0.js";
16
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-xdEE97oU.js";
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-swt2y17x.js";
20
20
  import { t as renderTable } from "./table-0A3xKJVC.js";
@@ -1,5 +1,5 @@
1
- import { s as resolveGatewayLogPaths } from "./service-CRZoXO_n.js";
2
- import fsPromises from "node:fs/promises";
1
+ import { s as resolveGatewayLogPaths } from "./service-e6MzlLCd.js";
2
+ import fs from "node:fs/promises";
3
3
 
4
4
  //#region src/daemon/diagnostics.ts
5
5
  const GATEWAY_LOG_ERROR_PATTERNS = [
@@ -11,7 +11,7 @@ const GATEWAY_LOG_ERROR_PATTERNS = [
11
11
  ];
12
12
  async function readLastLogLine(filePath) {
13
13
  try {
14
- const lines = (await fsPromises.readFile(filePath, "utf8")).split(/\r?\n/).map((line) => line.trim());
14
+ const lines = (await fs.readFile(filePath, "utf8")).split(/\r?\n/).map((line) => line.trim());
15
15
  for (let i = lines.length - 1; i >= 0; i -= 1) if (lines[i]) return lines[i];
16
16
  return null;
17
17
  } catch {
@@ -20,8 +20,8 @@ async function readLastLogLine(filePath) {
20
20
  }
21
21
  async function readLastGatewayErrorLine(env) {
22
22
  const { stdoutPath, stderrPath } = resolveGatewayLogPaths(env);
23
- const stderrRaw = await fsPromises.readFile(stderrPath, "utf8").catch(() => "");
24
- const stdoutRaw = await fsPromises.readFile(stdoutPath, "utf8").catch(() => "");
23
+ const stderrRaw = await fs.readFile(stderrPath, "utf8").catch(() => "");
24
+ const stdoutRaw = await fs.readFile(stdoutPath, "utf8").catch(() => "");
25
25
  const lines = [...stderrRaw.split(/\r?\n/), ...stdoutRaw.split(/\r?\n/)].map((line) => line.trim());
26
26
  for (let i = lines.length - 1; i >= 0; i -= 1) {
27
27
  const line = lines[i];
@@ -3,9 +3,9 @@ import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
- import "./agent-scope-Bnsyyeci.js";
7
- import "./model-selection-CCTzD29o.js";
8
- import { i as loadConfig } from "./config-BngIfn5l.js";
6
+ import "./agent-scope-DOrZjOnW.js";
7
+ import "./model-selection-7wdmO-Iw.js";
8
+ import { i as loadConfig } from "./config-B4jkreCN.js";
9
9
  import "./boolean-CbZoNRMn.js";
10
10
  import "./env-BRnPI9sO.js";
11
11
  import "./shell-env-Dc3iU7HK.js";
@@ -1,5 +1,5 @@
1
1
  import { c as normalizeStringEntries } from "./dock-hF45sewN.js";
2
- import { i as readChannelAllowFromStore } from "./pairing-store-Be-ZQK87.js";
2
+ import { i as readChannelAllowFromStore } from "./pairing-store-BNhJOnWn.js";
3
3
 
4
4
  //#region src/security/dm-policy-shared.ts
5
5
  async function resolveDmAllowState(params) {
@@ -3,9 +3,9 @@ import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
- import "./agent-scope-Bnsyyeci.js";
7
- import "./model-selection-CCTzD29o.js";
8
- import { i as loadConfig } from "./config-BngIfn5l.js";
6
+ import "./agent-scope-DOrZjOnW.js";
7
+ import "./model-selection-7wdmO-Iw.js";
8
+ import { i as loadConfig } from "./config-B4jkreCN.js";
9
9
  import "./boolean-CbZoNRMn.js";
10
10
  import "./env-BRnPI9sO.js";
11
11
  import "./shell-env-Dc3iU7HK.js";