cli-jaw 2.17.65 → 2.17.66

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 (127) hide show
  1. package/dist/scripts/check-deps-audit.js +2 -25
  2. package/dist/scripts/check-deps-audit.js.map +1 -1
  3. package/dist/scripts/deps-audit-classify.js +79 -0
  4. package/dist/scripts/deps-audit-classify.js.map +1 -0
  5. package/package.json +2 -1
  6. package/public/dist/.vite/manifest.json +494 -494
  7. package/public/dist/assets/{CodeCanvas-c_omHvtV.js → CodeCanvas-DKFuJurF.js} +1 -1
  8. package/public/dist/assets/{DocPanel-DvtFw8AP.js → DocPanel-CMDbvBGX.js} +1 -1
  9. package/public/dist/assets/MarkdownRenderer-5xz8Wyte.js +1 -0
  10. package/public/dist/assets/{MarkdownRenderer-DzN66XVb.js → MarkdownRenderer-C77VMHhX.js} +2 -2
  11. package/public/dist/assets/{MilkdownWysiwygEditor-xObhviw7.js → MilkdownWysiwygEditor-AL9Y5CIv.js} +1 -1
  12. package/public/dist/assets/{abnfDiagram-VCTEODGH-Bh3YzulT.js → abnfDiagram-VCTEODGH-CKwWysIF.js} +1 -1
  13. package/public/dist/assets/{app-CZwx0V6K.js → app-Iu76iEiU.js} +4 -4
  14. package/public/dist/assets/{architectureDiagram-5GKGNRK7-COhidFYz.js → architectureDiagram-5GKGNRK7-B9qqrT3E.js} +1 -1
  15. package/public/dist/assets/bgtask-badge-DHo2mkMI.js +1 -0
  16. package/public/dist/assets/{bgtask-badge-Cp26S8Uq.js → bgtask-badge-oPvZyylH.js} +1 -1
  17. package/public/dist/assets/{blockDiagram-OSKFZWR5--OxgY2yr.js → blockDiagram-OSKFZWR5-BjdWo_0R.js} +1 -1
  18. package/public/dist/assets/{c4Diagram-7LVT6UL2-C0DocmNb.js → c4Diagram-7LVT6UL2-LEkz5bLc.js} +1 -1
  19. package/public/dist/assets/channel-J_3cbKDK.js +1 -0
  20. package/public/dist/assets/{chunk-3NF5O7KM-FbOqoUnr.js → chunk-3NF5O7KM-D30d98yD.js} +1 -1
  21. package/public/dist/assets/{chunk-4HAMMTFA-UBUVs5kk.js → chunk-4HAMMTFA-47nees_K.js} +1 -1
  22. package/public/dist/assets/{chunk-75Z2AOVW-B1-fK2mN.js → chunk-75Z2AOVW-BbE6Kwgh.js} +1 -1
  23. package/public/dist/assets/{chunk-CLGD4ZFX-CotBINqH.js → chunk-CLGD4ZFX-CuX1dWxe.js} +1 -1
  24. package/public/dist/assets/{chunk-DU6HZSFF-vsD_dO7e.js → chunk-DU6HZSFF-zk1cX9hK.js} +2 -2
  25. package/public/dist/assets/{chunk-F27PBJKO-C3O21Si2.js → chunk-F27PBJKO-B30QZPgt.js} +1 -1
  26. package/public/dist/assets/{chunk-GMAD6QVW-BSVfzVP1.js → chunk-GMAD6QVW-1bgL6bkT.js} +1 -1
  27. package/public/dist/assets/{chunk-GVQU2GXP-CsYaquup.js → chunk-GVQU2GXP-DPd6VgIg.js} +1 -1
  28. package/public/dist/assets/{chunk-H2I77ZZE-ytBKuGMS.js → chunk-H2I77ZZE-BS90ONOa.js} +1 -1
  29. package/public/dist/assets/{chunk-HLEWEB6X-bHrMh27k.js → chunk-HLEWEB6X-CrFaTtiN.js} +1 -1
  30. package/public/dist/assets/{chunk-L3NEJ4N5-DxbPaCWe.js → chunk-L3NEJ4N5-BU_TE1Gv.js} +1 -1
  31. package/public/dist/assets/{chunk-LQGUR6SS-C7emO-i3.js → chunk-LQGUR6SS-xn-VsXhF.js} +1 -1
  32. package/public/dist/assets/{chunk-OSK3NFVY-D_HWIC0H.js → chunk-OSK3NFVY-hIzY7BE2.js} +1 -1
  33. package/public/dist/assets/{chunk-P2QGCYS3-D9LpOEME.js → chunk-P2QGCYS3-8ni2cD3V.js} +1 -1
  34. package/public/dist/assets/{chunk-POPQ4Y6H-BzSgf7pO.js → chunk-POPQ4Y6H-XK7yYMir.js} +1 -1
  35. package/public/dist/assets/{chunk-PWAF6VOD-CqSJPGBE.js → chunk-PWAF6VOD-bnJEdC3p.js} +1 -1
  36. package/public/dist/assets/{chunk-SVP7TREG-NOSK04BT.js → chunk-SVP7TREG-Chm-3YCY.js} +1 -1
  37. package/public/dist/assets/{chunk-ZLD2IHE6-CWSP7frq.js → chunk-ZLD2IHE6-IhoyCIEM.js} +1 -1
  38. package/public/dist/assets/classDiagram-CYGNFDIV-j1lFRpNs.js +1 -0
  39. package/public/dist/assets/classDiagram-v2-TLXNO2FR-j1lFRpNs.js +1 -0
  40. package/public/dist/assets/{cynefinDiagram-5FMLGOSQ-UAM-DZmU.js → cynefinDiagram-5FMLGOSQ-jN-7O_sZ.js} +1 -1
  41. package/public/dist/assets/{dagre-OS7QT2EB-CflcJHKB.js → dagre-OS7QT2EB-CFjTsoYe.js} +1 -1
  42. package/public/dist/assets/{diagram-S7CK7UJ4-Dzl9sLZD.js → diagram-S7CK7UJ4-J-pfE07X.js} +1 -1
  43. package/public/dist/assets/{diagram-UQ7AKVKN-BhpfQUAt.js → diagram-UQ7AKVKN-Cxj9eMt1.js} +1 -1
  44. package/public/dist/assets/{diagram-VSXAHHWV-CnuHIxOm.js → diagram-VSXAHHWV-CEieVcAW.js} +1 -1
  45. package/public/dist/assets/{diagram-VX7I27RA-CQzbjtqd.js → diagram-VX7I27RA-D4x2ePaD.js} +1 -1
  46. package/public/dist/assets/{diagram-Z3DM3KII-DR3Ie5C2.js → diagram-Z3DM3KII-HOm2nOM1.js} +1 -1
  47. package/public/dist/assets/{ebnfDiagram-PWID7BFC-D_FcQuZg.js → ebnfDiagram-PWID7BFC-UEkYjpJn.js} +1 -1
  48. package/public/dist/assets/{employees-CsvI0_5V.js → employees-BchFBkDz.js} +1 -1
  49. package/public/dist/assets/{erDiagram-2YWLMYGG-CLpGDU8-.js → erDiagram-2YWLMYGG-BWn9ynBx.js} +1 -1
  50. package/public/dist/assets/flowDiagram-T62WH6J4-DolY8JK4.js +1 -0
  51. package/public/dist/assets/{ganttDiagram-EL5Y4UJY-B9_NJDV6.js → ganttDiagram-EL5Y4UJY-CVIT3S7m.js} +1 -1
  52. package/public/dist/assets/{gitGraphDiagram-WWUBYQGX-BO0vc7Qh.js → gitGraphDiagram-WWUBYQGX-Y8ZCUmfW.js} +1 -1
  53. package/public/dist/assets/{iframe-renderer-DmHYOI1A.js → iframe-renderer-CcGzEi0v.js} +2 -2
  54. package/public/dist/assets/iframe-renderer-DSLsfZq8.js +1 -0
  55. package/public/dist/assets/{infoDiagram-FKFFQAWI-BM2g31_p.js → infoDiagram-FKFFQAWI-DT2EWjxa.js} +1 -1
  56. package/public/dist/assets/{ishikawaDiagram-5VMMS53U-BZvjesKs.js → ishikawaDiagram-5VMMS53U-clFsYLNd.js} +1 -1
  57. package/public/dist/assets/{journeyDiagram-EYS64GPL-CqtePaqZ.js → journeyDiagram-EYS64GPL-DMxKSsKZ.js} +1 -1
  58. package/public/dist/assets/{kanban-definition-UXKFOSKX-ChZA_T7a.js → kanban-definition-UXKFOSKX-CbCpLSup.js} +1 -1
  59. package/public/dist/assets/katex-1VKIni13.js +1 -0
  60. package/public/dist/assets/{manager-Bq8-tr-M.js → manager-QLVeIiKu.js} +2 -2
  61. package/public/dist/assets/memory-BgUF3M9l.js +1 -0
  62. package/public/dist/assets/{memory-C6qtAMdJ.js → memory-DTpD4see.js} +1 -1
  63. package/public/dist/assets/mermaid-loader-CCSp7XfV.js +1 -0
  64. package/public/dist/assets/{mermaid-preprocess-D8xe5R2A.js → mermaid-preprocess-BtbPvSni.js} +1 -1
  65. package/public/dist/assets/mermaid.core--NXRyXtf.js +1 -0
  66. package/public/dist/assets/{mermaid.core-D1YZrgc_.js → mermaid.core-C6YN2KGZ.js} +2 -2
  67. package/public/dist/assets/{message-history-DcjBuubA.js → message-history-DSvflaZ9.js} +1 -1
  68. package/public/dist/assets/message-history-DkB768L3.js +1 -0
  69. package/public/dist/assets/{mindmap-definition-THT77NOG-C4c47DPO.js → mindmap-definition-THT77NOG-BoWJfXfW.js} +1 -1
  70. package/public/dist/assets/{pegDiagram-XKGWAZYB-BHiELbRn.js → pegDiagram-XKGWAZYB-C6MTHw9U.js} +1 -1
  71. package/public/dist/assets/{pieDiagram-E7YTZNPT-BEKTktaH.js → pieDiagram-E7YTZNPT-CiTFZJAT.js} +1 -1
  72. package/public/dist/assets/{quadrantDiagram-AXDQQJYC-CeJGAkDA.js → quadrantDiagram-AXDQQJYC-T6Sv85w7.js} +1 -1
  73. package/public/dist/assets/{railroadDiagram-O6MQD6OU-CsT34rgN.js → railroadDiagram-O6MQD6OU-5wGap_iU.js} +1 -1
  74. package/public/dist/assets/{render-DfYro-fG.js → render-D8dVQ_bm.js} +2 -2
  75. package/public/dist/assets/{requirementDiagram-IS5BZ75X-4PwTKQWK.js → requirementDiagram-IS5BZ75X-Bwa18E8d.js} +1 -1
  76. package/public/dist/assets/{sankeyDiagram-P5KCCOFB-BykRKMDj.js → sankeyDiagram-P5KCCOFB-io3P7h-z.js} +1 -1
  77. package/public/dist/assets/{sequenceDiagram-WJ2MYXX4-Dyj787ok.js → sequenceDiagram-WJ2MYXX4-BXE7_NFT.js} +1 -1
  78. package/public/dist/assets/{settings-CvsLWlJn.js → settings-Bp0sgQ2a.js} +1 -1
  79. package/public/dist/assets/settings-DxjoyiIM.js +1 -0
  80. package/public/dist/assets/settings-core-CXWmPKUE.js +1 -0
  81. package/public/dist/assets/{settings-core-pnpw-eZv.js → settings-core-D4zGy72z.js} +1 -1
  82. package/public/dist/assets/{sidebar-C_80w4iY.js → sidebar-CrpBbYFg.js} +3 -3
  83. package/public/dist/assets/skills-BY-hQnqM.js +1 -0
  84. package/public/dist/assets/{skills-D_2adqge.js → skills-Bx8U-gJa.js} +1 -1
  85. package/public/dist/assets/slash-commands-C53T9J3g.js +1 -0
  86. package/public/dist/assets/{slash-commands-B_Hq5RkC.js → slash-commands-DkrGUOnC.js} +1 -1
  87. package/public/dist/assets/{stateDiagram-XQSTLZYL-6p5Yrm8S.js → stateDiagram-XQSTLZYL-D4fdsjJT.js} +1 -1
  88. package/public/dist/assets/stateDiagram-v2-IH3M54BS-C0qjVfYw.js +1 -0
  89. package/public/dist/assets/{swimlanes-V6O3JKXN-Pyw_hrrE.js → swimlanes-V6O3JKXN-BGnQAfcf.js} +1 -1
  90. package/public/dist/assets/swimlanesDiagram-JKAHXJPX-CO8ucSKU.js +8 -0
  91. package/public/dist/assets/{timeline-definition-24CTP7MA-V_LwIXs0.js → timeline-definition-24CTP7MA-DokSBeMC.js} +1 -1
  92. package/public/dist/assets/{trace-drawer-B6XuPodh.js → trace-drawer-Dbe5pTbf.js} +1 -1
  93. package/public/dist/assets/ui-C0o427q6.js +1 -0
  94. package/public/dist/assets/{ui-D8xzm7DN.js → ui-rnVAM91F.js} +1 -1
  95. package/public/dist/assets/{vendor-render-Cmfl_oW8.js → vendor-render-BsyPjvQm.js} +45 -45
  96. package/public/dist/assets/{vennDiagram-4TSXK5OY-ZagiHlwi.js → vennDiagram-4TSXK5OY-Zw3mI5Km.js} +1 -1
  97. package/public/dist/assets/{wardleyDiagram-VM6X3IG4-BBAHdIq-.js → wardleyDiagram-VM6X3IG4-CKWgGmAD.js} +1 -1
  98. package/public/dist/assets/{wiki-link-resolver-CbJATnBn.js → wiki-link-resolver-5Pkm1Mtc.js} +1 -1
  99. package/public/dist/assets/{xychartDiagram-S5SC5T6Z-C43SenTd.js → xychartDiagram-S5SC5T6Z-B1_1yNTd.js} +1 -1
  100. package/public/dist/index.html +1 -1
  101. package/public/dist/manager/index.html +1 -1
  102. package/scripts/audit-allowlist.json +6 -69
  103. package/scripts/check-deps-audit.ts +2 -27
  104. package/scripts/ci/windows-unit-manifest.txt +1 -0
  105. package/scripts/deps-audit-classify.ts +107 -0
  106. package/scripts/electron-blockmap.mjs +27 -0
  107. package/scripts/notarize-mac-dmg.mjs +22 -11
  108. package/scripts/verify-electron-update-metadata.mjs +44 -23
  109. package/public/dist/assets/MarkdownRenderer-Cc3DeHvm.js +0 -1
  110. package/public/dist/assets/bgtask-badge-CnVkcp3c.js +0 -1
  111. package/public/dist/assets/channel-DO94Q0oH.js +0 -1
  112. package/public/dist/assets/classDiagram-CYGNFDIV-C1ssjdiH.js +0 -1
  113. package/public/dist/assets/classDiagram-v2-TLXNO2FR-C1ssjdiH.js +0 -1
  114. package/public/dist/assets/flowDiagram-T62WH6J4-jooH4x9e.js +0 -1
  115. package/public/dist/assets/iframe-renderer-DWx9v2Iz.js +0 -1
  116. package/public/dist/assets/katex-DL-Py6bk.js +0 -1
  117. package/public/dist/assets/memory-PPofQPeB.js +0 -1
  118. package/public/dist/assets/mermaid-loader-Beqble_i.js +0 -1
  119. package/public/dist/assets/mermaid.core-DSXunyto.js +0 -1
  120. package/public/dist/assets/message-history-bw4qF01Z.js +0 -1
  121. package/public/dist/assets/settings-DgAlohx9.js +0 -1
  122. package/public/dist/assets/settings-core-BH7J_Rbm.js +0 -1
  123. package/public/dist/assets/skills-DeNVAVgt.js +0 -1
  124. package/public/dist/assets/slash-commands-Cj5qoRWc.js +0 -1
  125. package/public/dist/assets/stateDiagram-v2-IH3M54BS-DfXrMbZg.js +0 -1
  126. package/public/dist/assets/swimlanesDiagram-JKAHXJPX-R-OHp34K.js +0 -8
  127. package/public/dist/assets/ui-BbR_fFiK.js +0 -1
@@ -8,74 +8,11 @@
8
8
  "An entry is a decision, not a mute. 'reason' has to say why the vulnerable path",
9
9
  "is unreachable HERE, not that the package is popular or the severity looks low.",
10
10
  "When 'review' passes, the gate warns; that is the prompt to re-check reachability",
11
- "rather than extend the date reflexively."
11
+ "rather than extend the date reflexively.",
12
+ "",
13
+ "An entry names the advisory IDs it covers. A new advisory against an",
14
+ "allowlisted package fails the gate until someone re-checks reachability",
15
+ "for that advisory too (scripts/deps-audit-classify.ts)."
12
16
  ],
13
- "allow": [
14
- {
15
- "package": "shell-quote",
16
- "severity": "critical",
17
- "reason": "Reached only through concurrently, which this repo runs from the electron:dev script with hardcoded literal arguments. No caller passes user or agent input to it, and it is devDependency-only so it never ships.",
18
- "review": "2026-11-01"
19
- },
20
- {
21
- "package": "concurrently",
22
- "severity": "critical",
23
- "reason": "The shell-quote path above; concurrently itself adds no new sink. devDependency, electron:dev only.",
24
- "review": "2026-11-01"
25
- },
26
- {
27
- "package": "undici",
28
- "severity": "high",
29
- "reason": "Both advisories need a precondition we do not create: a SOCKS5 ProxyAgent, or a shared response cache across principals. discord.js and jsdom use plain HTTPS with no proxy agent configured.",
30
- "review": "2026-11-01"
31
- },
32
- {
33
- "package": "discord.js",
34
- "severity": "moderate",
35
- "reason": "No advisory of its own; flagged purely as a path to undici. The preconditions there (a SOCKS5 ProxyAgent, or a cache shared across principals) are the ones that would have to hold, and discord.js configures neither.",
36
- "review": "2026-11-01"
37
- },
38
- {
39
- "package": "@discordjs/rest",
40
- "severity": "moderate",
41
- "reason": "No advisory of its own; flagged purely as a path to undici, and it issues plain HTTPS requests with no proxy agent, so the SOCKS5 and shared-cache preconditions never hold.",
42
- "review": "2026-11-01"
43
- },
44
- {
45
- "package": "nanoid",
46
- "severity": "high",
47
- "reason": "Requires calling the non-secure generator with a negative or zero size. Reached only via postcss at build time, which passes a fixed positive length.",
48
- "review": "2026-11-01"
49
- },
50
- {
51
- "package": "postcss",
52
- "severity": "high",
53
- "reason": "sourceMappingURL arbitrary read needs attacker-controlled CSS at build time. Our CSS is repository content; a writer with that access already has the tree.",
54
- "review": "2026-11-01"
55
- },
56
- {
57
- "package": "@babel/core",
58
- "severity": "low",
59
- "reason": "Same sourceMappingURL class as postcss, same build-time-only reachability.",
60
- "review": "2026-11-01"
61
- },
62
- {
63
- "package": "esbuild",
64
- "severity": "low",
65
- "reason": "Arbitrary read applies to the esbuild DEVELOPMENT SERVER on Windows. We use esbuild as a bundler; the dev server is never started in this repo.",
66
- "review": "2026-11-01"
67
- },
68
- {
69
- "package": "vite",
70
- "severity": "high",
71
- "reason": "Dev-server-only, and the launch-editor UNC disclosure additionally needs Windows. Production builds do not run the dev server.",
72
- "review": "2026-11-01"
73
- },
74
- {
75
- "package": "body-parser",
76
- "severity": "low",
77
- "reason": "DoS applies when an INVALID limit value silently disables size enforcement. We pass no limit, so the default stays in force.",
78
- "review": "2026-11-01"
79
- }
80
- ]
17
+ "allow": []
81
18
  }
@@ -18,25 +18,18 @@
18
18
  import { execFileSync } from 'node:child_process';
19
19
  import fs from 'node:fs';
20
20
  import path from 'node:path';
21
+ import { classifyAudit, type AllowEntry, type AuditVuln } from './deps-audit-classify.js';
21
22
 
22
- interface AllowEntry { package: string; severity: string; reason: string; review: string }
23
23
  interface Allowlist { allow: AllowEntry[] }
24
- interface AuditVuln { severity: string; isDirect?: boolean; via?: Array<string | { title?: string; url?: string }> }
25
24
 
26
- const SEVERITY_ORDER = ['info', 'low', 'moderate', 'high', 'critical'];
27
25
  const FAIL_AT = process.env['DEPS_AUDIT_LEVEL'] ?? 'low';
28
26
 
29
- function atLeast(sev: string, floor: string): boolean {
30
- return SEVERITY_ORDER.indexOf(sev) >= SEVERITY_ORDER.indexOf(floor);
31
- }
32
-
33
27
  const allowPath = path.resolve('scripts/audit-allowlist.json');
34
28
  if (!fs.existsSync(allowPath)) {
35
29
  console.error('[deps] scripts/audit-allowlist.json not found');
36
30
  process.exit(2);
37
31
  }
38
32
  const allowlist = JSON.parse(fs.readFileSync(allowPath, 'utf8')) as Allowlist;
39
- const allowed = new Map(allowlist.allow.map(e => [e.package, e]));
40
33
 
41
34
  let raw: string;
42
35
  try {
@@ -61,25 +54,7 @@ try {
61
54
  }
62
55
 
63
56
  const today = new Date().toISOString().slice(0, 10);
64
- const unexpected: string[] = [];
65
- const stale: string[] = [];
66
- let allowedCount = 0;
67
-
68
- for (const [name, v] of Object.entries(vulns)) {
69
- if (!atLeast(v.severity, FAIL_AT)) continue;
70
- const entry = allowed.get(name);
71
- if (!entry) {
72
- const via = (v.via ?? [])
73
- .map(x => (typeof x === 'string' ? x : x.title ?? ''))
74
- .filter(Boolean)
75
- .slice(0, 2)
76
- .join('; ');
77
- unexpected.push(`${v.severity.toUpperCase()} ${name}${via ? ` — ${via}` : ''}`);
78
- continue;
79
- }
80
- allowedCount++;
81
- if (entry.review < today) stale.push(`${name} (review was due ${entry.review})`);
82
- }
57
+ const { unexpected, stale, allowedCount } = classifyAudit(vulns, allowlist.allow, FAIL_AT, today);
83
58
 
84
59
  for (const line of stale) console.log(`WARN allowlist entry past its review date: ${line}`);
85
60
  console.log(`[deps] ${Object.keys(vulns).length} advisory package(s); ${allowedCount} allowlisted, ${unexpected.length} unexpected`);
@@ -6,6 +6,7 @@ tests/unit/service-windows-branch.test.ts
6
6
  tests/unit/windows-service-lifecycle-honesty.test.ts
7
7
  tests/unit/windows-installer-shims.test.ts
8
8
  tests/unit/windows-spawn-primitives.test.ts
9
+ tests/unit/electron-installer-user-path.test.ts
9
10
  tests/unit/manager-browser-open.test.ts
10
11
  tests/unit/eaddrinuse-diagnostics-contract.test.ts
11
12
  tests/unit/tui-presentation.test.ts
@@ -0,0 +1,107 @@
1
+ // ─── Dependency advisory classification ───────────────
2
+ //
3
+ // Pure half of scripts/check-deps-audit.ts, split out so the policy can be
4
+ // tested without the registry. An allowlist entry is a decision about specific
5
+ // advisories, not a mute on a package: when npm reports advisory objects for a
6
+ // package, every advisory id has to appear in that entry's `advisories`. A new
7
+ // advisory against an already-allowlisted package therefore fails the gate
8
+ // instead of riding along on an old reachability argument.
9
+
10
+ export interface AllowEntry {
11
+ package: string;
12
+ severity: string;
13
+ reason: string;
14
+ review: string;
15
+ advisories?: string[];
16
+ }
17
+
18
+ export type AuditVia = string | { title?: string; url?: string; source?: number | string; severity?: string; range?: string };
19
+
20
+ export interface AuditVuln {
21
+ severity: string;
22
+ isDirect?: boolean;
23
+ via?: AuditVia[];
24
+ }
25
+
26
+ export interface AuditClassification {
27
+ unexpected: string[];
28
+ stale: string[];
29
+ allowedCount: number;
30
+ }
31
+
32
+ const SEVERITY_ORDER = ['info', 'low', 'moderate', 'high', 'critical'];
33
+
34
+ export function atLeast(severity: string, floor: string): boolean {
35
+ return SEVERITY_ORDER.indexOf(severity) >= SEVERITY_ORDER.indexOf(floor);
36
+ }
37
+
38
+ /** GHSA id from an advisory object's url, falling back to npm's numeric source. */
39
+ export function advisoryId(via: Exclude<AuditVia, string>): string {
40
+ const fromUrl = via.url?.split('/').filter(Boolean).pop();
41
+ if (fromUrl) return fromUrl;
42
+ return via.source !== undefined ? String(via.source) : '';
43
+ }
44
+
45
+ export function classifyAudit(
46
+ vulns: Record<string, AuditVuln>,
47
+ allow: AllowEntry[],
48
+ failAt: string,
49
+ today: string,
50
+ ): AuditClassification {
51
+ const allowed = new Map(allow.map(entry => [entry.package, entry]));
52
+ const unexpected: string[] = [];
53
+ const stale: string[] = [];
54
+ let allowedCount = 0;
55
+
56
+ for (const [name, vuln] of Object.entries(vulns)) {
57
+ if (!atLeast(vuln.severity, failAt)) continue;
58
+ const vias = vuln.via ?? [];
59
+ // A package's own severity is the max over its advisories and its
60
+ // children, so the threshold applies per advisory: a low advisory on a
61
+ // package flagged high only because of a child is below a moderate floor.
62
+ const advisories = vias
63
+ .filter((via): via is Exclude<AuditVia, string> => typeof via !== 'string')
64
+ .filter(via => atLeast(via.severity ?? vuln.severity, failAt));
65
+ const paths = vias.filter((via): via is string => typeof via === 'string');
66
+ // Transitive references are classified through their own records. A
67
+ // reference with no record means the report shape changed; fail closed
68
+ // rather than let that part of the finding pass unexamined.
69
+ const unresolved = paths.filter(ref => !(ref in vulns));
70
+ for (const ref of unresolved) {
71
+ unexpected.push(`${vuln.severity.toUpperCase()} ${name} — references ${ref}, which has no audit record`);
72
+ }
73
+ if (unresolved.length > 0) continue;
74
+ if (advisories.length === 0 && paths.length === 0) continue;
75
+ const entry = allowed.get(name);
76
+ if (!entry) {
77
+ const titles = advisories.map(via => via.title ?? '').filter(Boolean).slice(0, 2).join('; ');
78
+ const detail = titles || (paths.length > 0 ? `via ${paths.slice(0, 2).join(', ')}` : '');
79
+ const severity = advisories.length > 0 ? highest(advisories.map(via => via.severity ?? vuln.severity)) : vuln.severity;
80
+ unexpected.push(`${severity.toUpperCase()} ${name}${detail ? ` — ${detail}` : ''}`);
81
+ continue;
82
+ }
83
+ if (advisories.length > 0) {
84
+ if (!entry.advisories || entry.advisories.length === 0) {
85
+ const severity = highest(advisories.map(via => via.severity ?? vuln.severity));
86
+ unexpected.push(`${severity.toUpperCase()} ${name} — allowlist entry must list the advisory IDs it waives (${advisories.map(advisoryId).join(', ')})`);
87
+ continue;
88
+ }
89
+ const waived = new Set(entry.advisories);
90
+ const unlisted = advisories.filter(via => !waived.has(advisoryId(via)));
91
+ if (unlisted.length > 0) {
92
+ for (const via of unlisted) {
93
+ unexpected.push(`${(via.severity ?? vuln.severity).toUpperCase()} ${name} — ${advisoryId(via)} ${via.title ?? ''} is not covered by its allowlist entry`.trimEnd());
94
+ }
95
+ continue;
96
+ }
97
+ }
98
+ allowedCount++;
99
+ if (entry.review < today) stale.push(`${name} (review was due ${entry.review})`);
100
+ }
101
+
102
+ return { unexpected, stale, allowedCount };
103
+ }
104
+
105
+ function highest(severities: string[]): string {
106
+ return severities.reduce((max, sev) => (SEVERITY_ORDER.indexOf(sev) > SEVERITY_ORDER.indexOf(max) ? sev : max), 'info');
107
+ }
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Rebuild a .blockmap with electron-builder's own implementation.
4
+ *
5
+ * electron-builder 26.15 replaced the app-builder-bin `blockmap` command with
6
+ * app-builder-lib's pure-TS buildBlockMap and dropped app-builder-bin from its
7
+ * dependency tree. This helper keeps the old command-line contract
8
+ * (`blockmap --input <file> --output <file.blockmap>`, JSON {size, sha512} on
9
+ * stdout) so notarize-mac-dmg.mjs can stay synchronous and test-injectable.
10
+ * The gzip format matches createBlockmap in
11
+ * app-builder-lib/out/targets/differentialUpdateInfoBuilder.js.
12
+ */
13
+ import { createRequire } from 'node:module';
14
+ import { dirname, join, resolve } from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+
17
+ const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
18
+ const args = process.argv.slice(2);
19
+ if (args.length !== 5 || args[0] !== 'blockmap' || args[1] !== '--input' || args[3] !== '--output') {
20
+ console.error('usage: electron-blockmap.mjs blockmap --input <file> --output <file.blockmap>');
21
+ process.exit(2);
22
+ }
23
+ const electronRequire = createRequire(join(projectRoot, 'electron', 'package.json'));
24
+ const { buildBlockMap } = electronRequire('app-builder-lib/out/targets/blockmap/blockmap.js');
25
+ const info = await buildBlockMap(resolve(args[2]), 'gzip', resolve(args[4]));
26
+ process.stdout.write(JSON.stringify({ size: info.size, sha512: info.sha512 }));
27
+
@@ -2,18 +2,19 @@
2
2
  /**
3
3
  * Notarize and staple the signed macOS disk image, then re-describe it.
4
4
  *
5
- * electron-builder 25.1.8 notarizes and staples the app bundle, and with
5
+ * electron-builder 26.15 notarizes and staples the app bundle, and with
6
6
  * `dmg.sign` it signs the disk image, but it never notarizes the disk image.
7
7
  * A user who downloads the DMG therefore opens a container Gatekeeper cannot
8
8
  * vouch for: `spctl --type open` rejects it and the stapler finds no ticket.
9
9
  *
10
10
  * Stapling is the part that needs care. dmg-builder hashes the DMG into its
11
- * blockmap immediately after signing it (dmg-builder/out/dmg.js:62-67) and
11
+ * blockmap immediately after signing it (dmg-builder/out/dmg.js:48) and
12
12
  * that hash is what lands in latest-mac.yml. Stapling appends the ticket to
13
13
  * the file, so every description written before it (the DMG entry in
14
14
  * latest-mac.yml and the .blockmap next to the DMG) would describe bytes that
15
15
  * no longer exist. This script rebuilds both from the stapled file with the
16
- * same app-builder command electron-builder uses, and only touches the DMG
16
+ * same blockmap implementation electron-builder uses (scripts/electron-blockmap.mjs
17
+ * calls app-builder-lib buildBlockMap), and only touches the DMG
17
18
  * entry: the ZIP entry and the legacy top-level path/sha512 fields are the
18
19
  * updater payload and must stay byte-for-byte what electron-builder wrote.
19
20
  *
@@ -75,13 +76,21 @@ function sha512Base64(path) {
75
76
  return createHash('sha512').update(readFileSync(path)).digest('base64');
76
77
  }
77
78
 
78
- export function resolveAppBuilder() {
79
+ const BLOCKMAP_HELPER = join(projectRoot, 'scripts', 'electron-blockmap.mjs');
80
+
81
+ /**
82
+ * The command that rebuilds a blockmap the way electron-builder does. Since
83
+ * 26.15 that is app-builder-lib's own buildBlockMap (app-builder-bin is gone),
84
+ * reached through a node helper that keeps the app-builder CLI contract.
85
+ */
86
+ export function resolveBlockmapCommand() {
79
87
  const electronRequire = createRequire(join(projectRoot, 'electron', 'package.json'));
80
- const { appBuilderPath } = electronRequire('app-builder-bin');
81
- if (!appBuilderPath || !existsSync(appBuilderPath)) {
82
- throw new Error(`app-builder binary not found at ${String(appBuilderPath)}; run npm ci --prefix electron`);
88
+ try {
89
+ electronRequire.resolve('app-builder-lib/out/targets/blockmap/blockmap.js');
90
+ } catch {
91
+ throw new Error('app-builder-lib blockmap implementation not found; run npm ci --prefix electron');
83
92
  }
84
- return appBuilderPath;
93
+ return { cmd: process.execPath, prefix: [BLOCKMAP_HELPER] };
85
94
  }
86
95
 
87
96
  /**
@@ -169,10 +178,12 @@ export function notarizeMacDiskImage(options = {}) {
169
178
  if (validate.error || validate.status !== 0) throw new Error(`stapler validate failed:\n${outputOf(validate).trim()}`);
170
179
 
171
180
  // 4. Rebuild the blockmap from the stapled bytes, exactly as electron-builder does.
172
- const appBuilder = options.appBuilderPath ?? resolveAppBuilder();
181
+ const blockmapCommand = options.appBuilderPath
182
+ ? { cmd: options.appBuilderPath, prefix: [] }
183
+ : resolveBlockmapCommand();
173
184
  const blockmapPath = `${dmgPath}.blockmap`;
174
- const blockmap = run(appBuilder, ['blockmap', '--input', dmgPath, '--output', blockmapPath]);
175
- if (blockmap.error || blockmap.status !== 0) throw new Error(`app-builder blockmap failed:\n${outputOf(blockmap).trim()}`);
185
+ const blockmap = run(blockmapCommand.cmd, [...blockmapCommand.prefix, 'blockmap', '--input', dmgPath, '--output', blockmapPath]);
186
+ if (blockmap.error || blockmap.status !== 0) throw new Error(`blockmap rebuild failed:\n${outputOf(blockmap).trim()}`);
176
187
  let described;
177
188
  try { described = JSON.parse(blockmap.stdout); } catch { described = null; }
178
189
  const actualSize = statSync(dmgPath).size;
@@ -24,18 +24,24 @@ function sha512(path) {
24
24
  }
25
25
 
26
26
  export function verifyElectronUpdateMetadata(options = {}) {
27
+ const platform = options.platform ?? 'mac';
28
+ if (platform !== 'mac' && platform !== 'win') {
29
+ throw new Error(`Unsupported update metadata platform: ${String(platform)}`);
30
+ }
27
31
  const projectRoot = resolve(options.projectRoot ?? resolve(fileURLToPath(import.meta.url), '..', '..'));
28
32
  const distDir = resolve(options.distDir ?? join(projectRoot, 'electron', 'dist'));
29
33
  const packagePath = resolve(options.packagePath ?? join(projectRoot, 'electron', 'package.json'));
30
34
  const appUpdatePath = resolve(
31
- options.appUpdatePath ?? join(distDir, 'mac-arm64', 'cli-jaw.app', 'Contents', 'Resources', 'app-update.yml'),
35
+ options.appUpdatePath ?? (platform === 'win'
36
+ ? join(distDir, 'win-unpacked', 'resources', 'app-update.yml')
37
+ : join(distDir, 'mac-arm64', 'cli-jaw.app', 'Contents', 'Resources', 'app-update.yml')),
32
38
  );
33
39
  const version = JSON.parse(readFileSync(packagePath, 'utf8')).version;
34
40
  // electron-builder's GitHub provider always emits latest-mac.yml. For a
35
41
  // prerelease, electron-updater first selects a matching tag from the GitHub
36
42
  // release feed, tries <channel>-mac.yml, then intentionally falls back to
37
43
  // latest-mac.yml inside that selected release.
38
- const metadataPath = join(distDir, 'latest-mac.yml');
44
+ const metadataPath = join(distDir, platform === 'win' ? 'latest.yml' : 'latest-mac.yml');
39
45
 
40
46
  if (!existsSync(metadataPath)) throw new Error(`Missing update metadata: ${metadataPath}`);
41
47
  if (!existsSync(appUpdatePath)) throw new Error(`Missing packaged update provider config: ${appUpdatePath}`);
@@ -44,33 +50,36 @@ export function verifyElectronUpdateMetadata(options = {}) {
44
50
  if (metadata?.version !== version) {
45
51
  throw new Error(`Update metadata version ${String(metadata?.version)} does not match package version ${version}`);
46
52
  }
47
- if (!Array.isArray(metadata?.files) || metadata.files.length === 0) {
48
- throw new Error('macOS update metadata must contain artifact entries');
53
+ if (!Array.isArray(metadata?.files)) {
54
+ throw new Error(`${platform === 'win' ? 'Windows' : 'macOS'} update metadata must contain artifact entries`);
49
55
  }
50
56
  for (const file of metadata.files) {
51
57
  if (typeof file?.url !== 'string' || basename(file.url) !== file.url) {
52
58
  throw new Error(`Unsafe update artifact path: ${String(file?.url)}`);
53
59
  }
54
60
  }
55
- const zipEntries = metadata.files.filter(file => file.url.endsWith('-mac.zip'));
56
- if (zipEntries.length !== 1) {
57
- throw new Error('macOS update metadata must contain exactly one ZIP entry');
61
+ const payloadEntries = metadata.files.filter(file => platform === 'win'
62
+ ? file.url.toLowerCase().endsWith('.exe')
63
+ : file.url.endsWith('-mac.zip'));
64
+ if (payloadEntries.length !== 1) {
65
+ throw new Error(`${platform === 'win' ? 'Windows' : 'macOS'} update metadata must contain exactly one ${platform === 'win' ? 'EXE' : 'ZIP'} entry`);
58
66
  }
59
67
 
60
- const entry = zipEntries[0];
61
- const zipPath = join(distDir, entry.url);
62
- const blockmapPath = `${zipPath}.blockmap`;
63
- if (!existsSync(zipPath)) throw new Error(`Missing update ZIP: ${zipPath}`);
68
+ const entry = payloadEntries[0];
69
+ const payloadPath = join(distDir, entry.url);
70
+ const blockmapPath = `${payloadPath}.blockmap`;
71
+ const payloadLabel = platform === 'win' ? 'EXE' : 'ZIP';
72
+ if (!existsSync(payloadPath)) throw new Error(`Missing update ${payloadLabel}: ${payloadPath}`);
64
73
  if (!existsSync(blockmapPath)) throw new Error(`Missing update blockmap: ${blockmapPath}`);
65
74
 
66
- const actualSize = statSync(zipPath).size;
75
+ const actualSize = statSync(payloadPath).size;
67
76
  if (entry.size !== actualSize) {
68
- throw new Error(`Update ZIP size mismatch: metadata=${String(entry.size)} actual=${actualSize}`);
77
+ throw new Error(`Update ${payloadLabel} size mismatch: metadata=${String(entry.size)} actual=${actualSize}`);
69
78
  }
70
- const actualHash = sha512(zipPath);
71
- if (entry.sha512 !== actualHash) throw new Error('Update ZIP SHA-512 does not match update metadata');
79
+ const actualHash = sha512(payloadPath);
80
+ if (entry.sha512 !== actualHash) throw new Error(`Update ${payloadLabel} SHA-512 does not match update metadata`);
72
81
  if (metadata.path !== entry.url || metadata.sha512 !== entry.sha512) {
73
- throw new Error('Legacy macOS update metadata fields do not match files[0]');
82
+ throw new Error(`Legacy ${platform === 'win' ? 'Windows' : 'macOS'} update metadata fields do not match the updater payload`);
74
83
  }
75
84
 
76
85
  // The other entries (the DMG) are not the updater payload, but they are
@@ -78,7 +87,7 @@ export function verifyElectronUpdateMetadata(options = {}) {
78
87
  // stapled after electron-builder hashed it, so a stale description here
79
88
  // means the post-staple metadata repair did not run or did not stick.
80
89
  const otherArtifacts = [];
81
- for (const file of metadata.files) {
90
+ for (const file of platform === 'mac' ? metadata.files : []) {
82
91
  if (file === entry) continue;
83
92
  const artifactPath = join(distDir, file.url);
84
93
  if (!existsSync(artifactPath)) throw new Error(`Missing listed update artifact: ${artifactPath}`);
@@ -99,19 +108,31 @@ export function verifyElectronUpdateMetadata(options = {}) {
99
108
  }
100
109
  }
101
110
 
102
- return { metadataPath, zipPath, blockmapPath, version, sha512: actualHash, otherArtifacts };
111
+ return { metadataPath, payloadPath, zipPath: platform === 'mac' ? payloadPath : undefined, blockmapPath, version, sha512: actualHash, otherArtifacts, platform };
112
+ }
113
+
114
+ function parseCliArgs(args) {
115
+ const positional = [];
116
+ let platform = 'mac';
117
+ for (let i = 0; i < args.length; i += 1) {
118
+ if (args[i] === '--platform') {
119
+ if (i + 1 >= args.length) throw new Error('--platform requires mac or win');
120
+ platform = args[i + 1];
121
+ i += 1;
122
+ continue;
123
+ }
124
+ positional.push(args[i]);
125
+ }
126
+ return { platform, distDir: positional[0], appUpdatePath: positional[1] };
103
127
  }
104
128
 
105
129
  function main() {
106
130
  try {
107
- const report = verifyElectronUpdateMetadata({
108
- distDir: process.argv[2],
109
- appUpdatePath: process.argv[3],
110
- });
131
+ const report = verifyElectronUpdateMetadata(parseCliArgs(process.argv.slice(2)));
111
132
  console.log('[verify-electron-update-metadata] OK');
112
133
  console.log(` version ${report.version}`);
113
134
  console.log(` metadata ${report.metadataPath}`);
114
- console.log(` zip ${report.zipPath}`);
135
+ console.log(` payload ${report.payloadPath}`);
115
136
  console.log(` blockmap ${report.blockmapPath}`);
116
137
  console.log(` sha512 ${report.sha512}`);
117
138
  for (const artifact of report.otherArtifacts) console.log(` listed ${artifact} (hash matches)`);
@@ -1 +0,0 @@
1
- import{t as e}from"./MarkdownRenderer-DzN66XVb.js";export{e as MarkdownRenderer};
@@ -1 +0,0 @@
1
- import{r as e,t}from"./bgtask-badge-Cp26S8Uq.js";export{t as applyBgtaskUpdate,e as refreshBgtaskBadge};
@@ -1 +0,0 @@
1
- import{at as e,it as t}from"./chunk-DU6HZSFF-vsD_dO7e.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./chunk-X3CZISLH-ChyOdCnY.js";import"./chunk-DU6HZSFF-vsD_dO7e.js";import"./chunk-PWAF6VOD-CqSJPGBE.js";import"./chunk-75Z2AOVW-B1-fK2mN.js";import"./chunk-GMAD6QVW-BSVfzVP1.js";import"./chunk-P2QGCYS3-D9LpOEME.js";import"./chunk-4HAMMTFA-UBUVs5kk.js";import"./chunk-GVQU2GXP-CsYaquup.js";import"./chunk-OSK3NFVY-D_HWIC0H.js";import"./chunk-F27PBJKO-C3O21Si2.js";import"./chunk-XXDRQBXY-Uq2wLB4L.js";import"./chunk-POPQ4Y6H-BzSgf7pO.js";import"./chunk-L3NEJ4N5-DxbPaCWe.js";import"./chunk-LQGUR6SS-C7emO-i3.js";import{i as t,n,r,t as i}from"./chunk-HLEWEB6X-bHrMh27k.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./chunk-X3CZISLH-ChyOdCnY.js";import"./chunk-DU6HZSFF-vsD_dO7e.js";import"./chunk-PWAF6VOD-CqSJPGBE.js";import"./chunk-75Z2AOVW-B1-fK2mN.js";import"./chunk-GMAD6QVW-BSVfzVP1.js";import"./chunk-P2QGCYS3-D9LpOEME.js";import"./chunk-4HAMMTFA-UBUVs5kk.js";import"./chunk-GVQU2GXP-CsYaquup.js";import"./chunk-OSK3NFVY-D_HWIC0H.js";import"./chunk-F27PBJKO-C3O21Si2.js";import"./chunk-XXDRQBXY-Uq2wLB4L.js";import"./chunk-POPQ4Y6H-BzSgf7pO.js";import"./chunk-L3NEJ4N5-DxbPaCWe.js";import"./chunk-LQGUR6SS-C7emO-i3.js";import{i as t,n,r,t as i}from"./chunk-HLEWEB6X-bHrMh27k.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-X3CZISLH-ChyOdCnY.js";import"./chunk-DU6HZSFF-vsD_dO7e.js";import"./chunk-PWAF6VOD-CqSJPGBE.js";import"./chunk-75Z2AOVW-B1-fK2mN.js";import"./chunk-GMAD6QVW-BSVfzVP1.js";import"./chunk-P2QGCYS3-D9LpOEME.js";import"./chunk-4HAMMTFA-UBUVs5kk.js";import"./chunk-GVQU2GXP-CsYaquup.js";import"./chunk-OSK3NFVY-D_HWIC0H.js";import"./chunk-F27PBJKO-C3O21Si2.js";import"./chunk-XXDRQBXY-Uq2wLB4L.js";import"./chunk-POPQ4Y6H-BzSgf7pO.js";import"./chunk-L3NEJ4N5-DxbPaCWe.js";import"./chunk-LQGUR6SS-C7emO-i3.js";import"./chunk-LNGE3PJU-5-SxdO55.js";import{n as e}from"./chunk-3NF5O7KM-FbOqoUnr.js";export{e as diagram};
@@ -1 +0,0 @@
1
- import{a as e}from"./iframe-renderer-DmHYOI1A.js";export{e as refreshFileWidget};
@@ -1 +0,0 @@
1
- import{A as e}from"./vendor-render-Cmfl_oW8.js";export{e as default};
@@ -1 +0,0 @@
1
- import{a as e}from"./memory-C6qtAMdJ.js";export{e as refreshMemorySidebar};
@@ -1 +0,0 @@
1
- import{t as e}from"./mermaid.core-D1YZrgc_.js";function t(){return e.setParseErrorHandler(()=>{}),e}export{t as loadMermaid};
@@ -1 +0,0 @@
1
- import{t as e}from"./mermaid.core-D1YZrgc_.js";import{i as t,l as n,n as r,o as i}from"./chunk-H2I77ZZE-ytBKuGMS.js";export{r as clearLayoutRenderState,t as createCommonLayoutRenderer,e as default,i as defaultMeasureLayout,n as paintLayoutData};
@@ -1 +0,0 @@
1
- import{o as e,s as t}from"./message-history-DcjBuubA.js";export{e as historyReloadInFlight,t as loadMessages};
@@ -1 +0,0 @@
1
- import{c as e,n as t}from"./settings-core-pnpw-eZv.js";import"./settings-CvsLWlJn.js";export{t as loadSettings,e as updateSettings};
@@ -1 +0,0 @@
1
- import{a as e}from"./settings-core-pnpw-eZv.js";export{e as refreshHeaderFromSettingsChange};
@@ -1 +0,0 @@
1
- import{n as e}from"./skills-D_2adqge.js";export{e as loadSkills};
@@ -1 +0,0 @@
1
- import{o as e}from"./slash-commands-B_Hq5RkC.js";export{e as loadCommands};
@@ -1 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./chunk-X3CZISLH-ChyOdCnY.js";import"./chunk-DU6HZSFF-vsD_dO7e.js";import"./chunk-PWAF6VOD-CqSJPGBE.js";import"./chunk-75Z2AOVW-B1-fK2mN.js";import"./chunk-GMAD6QVW-BSVfzVP1.js";import"./chunk-P2QGCYS3-D9LpOEME.js";import"./chunk-4HAMMTFA-UBUVs5kk.js";import"./chunk-GVQU2GXP-CsYaquup.js";import"./chunk-OSK3NFVY-D_HWIC0H.js";import"./chunk-F27PBJKO-C3O21Si2.js";import"./chunk-XXDRQBXY-Uq2wLB4L.js";import"./chunk-POPQ4Y6H-BzSgf7pO.js";import"./chunk-L3NEJ4N5-DxbPaCWe.js";import"./chunk-LQGUR6SS-C7emO-i3.js";import{i as t,n,r,t as i}from"./chunk-ZLD2IHE6-CWSP7frq.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1,8 +0,0 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./chunk-X3CZISLH-ChyOdCnY.js";import"./chunk-DU6HZSFF-vsD_dO7e.js";import"./chunk-PWAF6VOD-CqSJPGBE.js";import"./chunk-75Z2AOVW-B1-fK2mN.js";import"./chunk-GMAD6QVW-BSVfzVP1.js";import"./chunk-P2QGCYS3-D9LpOEME.js";import"./chunk-4HAMMTFA-UBUVs5kk.js";import"./chunk-GVQU2GXP-CsYaquup.js";import"./chunk-OSK3NFVY-D_HWIC0H.js";import"./chunk-F27PBJKO-C3O21Si2.js";import"./chunk-XXDRQBXY-Uq2wLB4L.js";import"./chunk-POPQ4Y6H-BzSgf7pO.js";import"./chunk-L3NEJ4N5-DxbPaCWe.js";import"./chunk-LQGUR6SS-C7emO-i3.js";import"./chunk-LNGE3PJU-5-SxdO55.js";import{r as t,t as n}from"./chunk-3NF5O7KM-FbOqoUnr.js";var r=n({defaultLayout:`swimlane`,styles:e(e=>`${t(e)}
2
- .swimlane.cluster rect {
3
- stroke: ${e.clusterBorder} !important;
4
- }
5
- [data-look="neo"].cluster rect {
6
- filter: none;
7
- }
8
- `,`getStyles`)});export{r as diagram};
@@ -1 +0,0 @@
1
- import{p as e}from"./iframe-renderer-DmHYOI1A.js";import{I as t,s as n}from"./message-history-DcjBuubA.js";import{r}from"./ui-D8xzm7DN.js";export{r as cleanupToolActivity,n as loadMessages,e as reconcileChatBottomAfterRestore,t as updateQueueBadge};