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.
- package/dist/scripts/check-deps-audit.js +2 -25
- package/dist/scripts/check-deps-audit.js.map +1 -1
- package/dist/scripts/deps-audit-classify.js +79 -0
- package/dist/scripts/deps-audit-classify.js.map +1 -0
- package/package.json +2 -1
- package/public/dist/.vite/manifest.json +494 -494
- package/public/dist/assets/{CodeCanvas-c_omHvtV.js → CodeCanvas-DKFuJurF.js} +1 -1
- package/public/dist/assets/{DocPanel-DvtFw8AP.js → DocPanel-CMDbvBGX.js} +1 -1
- package/public/dist/assets/MarkdownRenderer-5xz8Wyte.js +1 -0
- package/public/dist/assets/{MarkdownRenderer-DzN66XVb.js → MarkdownRenderer-C77VMHhX.js} +2 -2
- package/public/dist/assets/{MilkdownWysiwygEditor-xObhviw7.js → MilkdownWysiwygEditor-AL9Y5CIv.js} +1 -1
- package/public/dist/assets/{abnfDiagram-VCTEODGH-Bh3YzulT.js → abnfDiagram-VCTEODGH-CKwWysIF.js} +1 -1
- package/public/dist/assets/{app-CZwx0V6K.js → app-Iu76iEiU.js} +4 -4
- package/public/dist/assets/{architectureDiagram-5GKGNRK7-COhidFYz.js → architectureDiagram-5GKGNRK7-B9qqrT3E.js} +1 -1
- package/public/dist/assets/bgtask-badge-DHo2mkMI.js +1 -0
- package/public/dist/assets/{bgtask-badge-Cp26S8Uq.js → bgtask-badge-oPvZyylH.js} +1 -1
- package/public/dist/assets/{blockDiagram-OSKFZWR5--OxgY2yr.js → blockDiagram-OSKFZWR5-BjdWo_0R.js} +1 -1
- package/public/dist/assets/{c4Diagram-7LVT6UL2-C0DocmNb.js → c4Diagram-7LVT6UL2-LEkz5bLc.js} +1 -1
- package/public/dist/assets/channel-J_3cbKDK.js +1 -0
- package/public/dist/assets/{chunk-3NF5O7KM-FbOqoUnr.js → chunk-3NF5O7KM-D30d98yD.js} +1 -1
- package/public/dist/assets/{chunk-4HAMMTFA-UBUVs5kk.js → chunk-4HAMMTFA-47nees_K.js} +1 -1
- package/public/dist/assets/{chunk-75Z2AOVW-B1-fK2mN.js → chunk-75Z2AOVW-BbE6Kwgh.js} +1 -1
- package/public/dist/assets/{chunk-CLGD4ZFX-CotBINqH.js → chunk-CLGD4ZFX-CuX1dWxe.js} +1 -1
- package/public/dist/assets/{chunk-DU6HZSFF-vsD_dO7e.js → chunk-DU6HZSFF-zk1cX9hK.js} +2 -2
- package/public/dist/assets/{chunk-F27PBJKO-C3O21Si2.js → chunk-F27PBJKO-B30QZPgt.js} +1 -1
- package/public/dist/assets/{chunk-GMAD6QVW-BSVfzVP1.js → chunk-GMAD6QVW-1bgL6bkT.js} +1 -1
- package/public/dist/assets/{chunk-GVQU2GXP-CsYaquup.js → chunk-GVQU2GXP-DPd6VgIg.js} +1 -1
- package/public/dist/assets/{chunk-H2I77ZZE-ytBKuGMS.js → chunk-H2I77ZZE-BS90ONOa.js} +1 -1
- package/public/dist/assets/{chunk-HLEWEB6X-bHrMh27k.js → chunk-HLEWEB6X-CrFaTtiN.js} +1 -1
- package/public/dist/assets/{chunk-L3NEJ4N5-DxbPaCWe.js → chunk-L3NEJ4N5-BU_TE1Gv.js} +1 -1
- package/public/dist/assets/{chunk-LQGUR6SS-C7emO-i3.js → chunk-LQGUR6SS-xn-VsXhF.js} +1 -1
- package/public/dist/assets/{chunk-OSK3NFVY-D_HWIC0H.js → chunk-OSK3NFVY-hIzY7BE2.js} +1 -1
- package/public/dist/assets/{chunk-P2QGCYS3-D9LpOEME.js → chunk-P2QGCYS3-8ni2cD3V.js} +1 -1
- package/public/dist/assets/{chunk-POPQ4Y6H-BzSgf7pO.js → chunk-POPQ4Y6H-XK7yYMir.js} +1 -1
- package/public/dist/assets/{chunk-PWAF6VOD-CqSJPGBE.js → chunk-PWAF6VOD-bnJEdC3p.js} +1 -1
- package/public/dist/assets/{chunk-SVP7TREG-NOSK04BT.js → chunk-SVP7TREG-Chm-3YCY.js} +1 -1
- package/public/dist/assets/{chunk-ZLD2IHE6-CWSP7frq.js → chunk-ZLD2IHE6-IhoyCIEM.js} +1 -1
- package/public/dist/assets/classDiagram-CYGNFDIV-j1lFRpNs.js +1 -0
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-j1lFRpNs.js +1 -0
- package/public/dist/assets/{cynefinDiagram-5FMLGOSQ-UAM-DZmU.js → cynefinDiagram-5FMLGOSQ-jN-7O_sZ.js} +1 -1
- package/public/dist/assets/{dagre-OS7QT2EB-CflcJHKB.js → dagre-OS7QT2EB-CFjTsoYe.js} +1 -1
- package/public/dist/assets/{diagram-S7CK7UJ4-Dzl9sLZD.js → diagram-S7CK7UJ4-J-pfE07X.js} +1 -1
- package/public/dist/assets/{diagram-UQ7AKVKN-BhpfQUAt.js → diagram-UQ7AKVKN-Cxj9eMt1.js} +1 -1
- package/public/dist/assets/{diagram-VSXAHHWV-CnuHIxOm.js → diagram-VSXAHHWV-CEieVcAW.js} +1 -1
- package/public/dist/assets/{diagram-VX7I27RA-CQzbjtqd.js → diagram-VX7I27RA-D4x2ePaD.js} +1 -1
- package/public/dist/assets/{diagram-Z3DM3KII-DR3Ie5C2.js → diagram-Z3DM3KII-HOm2nOM1.js} +1 -1
- package/public/dist/assets/{ebnfDiagram-PWID7BFC-D_FcQuZg.js → ebnfDiagram-PWID7BFC-UEkYjpJn.js} +1 -1
- package/public/dist/assets/{employees-CsvI0_5V.js → employees-BchFBkDz.js} +1 -1
- package/public/dist/assets/{erDiagram-2YWLMYGG-CLpGDU8-.js → erDiagram-2YWLMYGG-BWn9ynBx.js} +1 -1
- package/public/dist/assets/flowDiagram-T62WH6J4-DolY8JK4.js +1 -0
- package/public/dist/assets/{ganttDiagram-EL5Y4UJY-B9_NJDV6.js → ganttDiagram-EL5Y4UJY-CVIT3S7m.js} +1 -1
- package/public/dist/assets/{gitGraphDiagram-WWUBYQGX-BO0vc7Qh.js → gitGraphDiagram-WWUBYQGX-Y8ZCUmfW.js} +1 -1
- package/public/dist/assets/{iframe-renderer-DmHYOI1A.js → iframe-renderer-CcGzEi0v.js} +2 -2
- package/public/dist/assets/iframe-renderer-DSLsfZq8.js +1 -0
- package/public/dist/assets/{infoDiagram-FKFFQAWI-BM2g31_p.js → infoDiagram-FKFFQAWI-DT2EWjxa.js} +1 -1
- package/public/dist/assets/{ishikawaDiagram-5VMMS53U-BZvjesKs.js → ishikawaDiagram-5VMMS53U-clFsYLNd.js} +1 -1
- package/public/dist/assets/{journeyDiagram-EYS64GPL-CqtePaqZ.js → journeyDiagram-EYS64GPL-DMxKSsKZ.js} +1 -1
- package/public/dist/assets/{kanban-definition-UXKFOSKX-ChZA_T7a.js → kanban-definition-UXKFOSKX-CbCpLSup.js} +1 -1
- package/public/dist/assets/katex-1VKIni13.js +1 -0
- package/public/dist/assets/{manager-Bq8-tr-M.js → manager-QLVeIiKu.js} +2 -2
- package/public/dist/assets/memory-BgUF3M9l.js +1 -0
- package/public/dist/assets/{memory-C6qtAMdJ.js → memory-DTpD4see.js} +1 -1
- package/public/dist/assets/mermaid-loader-CCSp7XfV.js +1 -0
- package/public/dist/assets/{mermaid-preprocess-D8xe5R2A.js → mermaid-preprocess-BtbPvSni.js} +1 -1
- package/public/dist/assets/mermaid.core--NXRyXtf.js +1 -0
- package/public/dist/assets/{mermaid.core-D1YZrgc_.js → mermaid.core-C6YN2KGZ.js} +2 -2
- package/public/dist/assets/{message-history-DcjBuubA.js → message-history-DSvflaZ9.js} +1 -1
- package/public/dist/assets/message-history-DkB768L3.js +1 -0
- package/public/dist/assets/{mindmap-definition-THT77NOG-C4c47DPO.js → mindmap-definition-THT77NOG-BoWJfXfW.js} +1 -1
- package/public/dist/assets/{pegDiagram-XKGWAZYB-BHiELbRn.js → pegDiagram-XKGWAZYB-C6MTHw9U.js} +1 -1
- package/public/dist/assets/{pieDiagram-E7YTZNPT-BEKTktaH.js → pieDiagram-E7YTZNPT-CiTFZJAT.js} +1 -1
- package/public/dist/assets/{quadrantDiagram-AXDQQJYC-CeJGAkDA.js → quadrantDiagram-AXDQQJYC-T6Sv85w7.js} +1 -1
- package/public/dist/assets/{railroadDiagram-O6MQD6OU-CsT34rgN.js → railroadDiagram-O6MQD6OU-5wGap_iU.js} +1 -1
- package/public/dist/assets/{render-DfYro-fG.js → render-D8dVQ_bm.js} +2 -2
- package/public/dist/assets/{requirementDiagram-IS5BZ75X-4PwTKQWK.js → requirementDiagram-IS5BZ75X-Bwa18E8d.js} +1 -1
- package/public/dist/assets/{sankeyDiagram-P5KCCOFB-BykRKMDj.js → sankeyDiagram-P5KCCOFB-io3P7h-z.js} +1 -1
- package/public/dist/assets/{sequenceDiagram-WJ2MYXX4-Dyj787ok.js → sequenceDiagram-WJ2MYXX4-BXE7_NFT.js} +1 -1
- package/public/dist/assets/{settings-CvsLWlJn.js → settings-Bp0sgQ2a.js} +1 -1
- package/public/dist/assets/settings-DxjoyiIM.js +1 -0
- package/public/dist/assets/settings-core-CXWmPKUE.js +1 -0
- package/public/dist/assets/{settings-core-pnpw-eZv.js → settings-core-D4zGy72z.js} +1 -1
- package/public/dist/assets/{sidebar-C_80w4iY.js → sidebar-CrpBbYFg.js} +3 -3
- package/public/dist/assets/skills-BY-hQnqM.js +1 -0
- package/public/dist/assets/{skills-D_2adqge.js → skills-Bx8U-gJa.js} +1 -1
- package/public/dist/assets/slash-commands-C53T9J3g.js +1 -0
- package/public/dist/assets/{slash-commands-B_Hq5RkC.js → slash-commands-DkrGUOnC.js} +1 -1
- package/public/dist/assets/{stateDiagram-XQSTLZYL-6p5Yrm8S.js → stateDiagram-XQSTLZYL-D4fdsjJT.js} +1 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-C0qjVfYw.js +1 -0
- package/public/dist/assets/{swimlanes-V6O3JKXN-Pyw_hrrE.js → swimlanes-V6O3JKXN-BGnQAfcf.js} +1 -1
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-CO8ucSKU.js +8 -0
- package/public/dist/assets/{timeline-definition-24CTP7MA-V_LwIXs0.js → timeline-definition-24CTP7MA-DokSBeMC.js} +1 -1
- package/public/dist/assets/{trace-drawer-B6XuPodh.js → trace-drawer-Dbe5pTbf.js} +1 -1
- package/public/dist/assets/ui-C0o427q6.js +1 -0
- package/public/dist/assets/{ui-D8xzm7DN.js → ui-rnVAM91F.js} +1 -1
- package/public/dist/assets/{vendor-render-Cmfl_oW8.js → vendor-render-BsyPjvQm.js} +45 -45
- package/public/dist/assets/{vennDiagram-4TSXK5OY-ZagiHlwi.js → vennDiagram-4TSXK5OY-Zw3mI5Km.js} +1 -1
- package/public/dist/assets/{wardleyDiagram-VM6X3IG4-BBAHdIq-.js → wardleyDiagram-VM6X3IG4-CKWgGmAD.js} +1 -1
- package/public/dist/assets/{wiki-link-resolver-CbJATnBn.js → wiki-link-resolver-5Pkm1Mtc.js} +1 -1
- package/public/dist/assets/{xychartDiagram-S5SC5T6Z-C43SenTd.js → xychartDiagram-S5SC5T6Z-B1_1yNTd.js} +1 -1
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/scripts/audit-allowlist.json +6 -69
- package/scripts/check-deps-audit.ts +2 -27
- package/scripts/ci/windows-unit-manifest.txt +1 -0
- package/scripts/deps-audit-classify.ts +107 -0
- package/scripts/electron-blockmap.mjs +27 -0
- package/scripts/notarize-mac-dmg.mjs +22 -11
- package/scripts/verify-electron-update-metadata.mjs +44 -23
- package/public/dist/assets/MarkdownRenderer-Cc3DeHvm.js +0 -1
- package/public/dist/assets/bgtask-badge-CnVkcp3c.js +0 -1
- package/public/dist/assets/channel-DO94Q0oH.js +0 -1
- package/public/dist/assets/classDiagram-CYGNFDIV-C1ssjdiH.js +0 -1
- package/public/dist/assets/classDiagram-v2-TLXNO2FR-C1ssjdiH.js +0 -1
- package/public/dist/assets/flowDiagram-T62WH6J4-jooH4x9e.js +0 -1
- package/public/dist/assets/iframe-renderer-DWx9v2Iz.js +0 -1
- package/public/dist/assets/katex-DL-Py6bk.js +0 -1
- package/public/dist/assets/memory-PPofQPeB.js +0 -1
- package/public/dist/assets/mermaid-loader-Beqble_i.js +0 -1
- package/public/dist/assets/mermaid.core-DSXunyto.js +0 -1
- package/public/dist/assets/message-history-bw4qF01Z.js +0 -1
- package/public/dist/assets/settings-DgAlohx9.js +0 -1
- package/public/dist/assets/settings-core-BH7J_Rbm.js +0 -1
- package/public/dist/assets/skills-DeNVAVgt.js +0 -1
- package/public/dist/assets/slash-commands-Cj5qoRWc.js +0 -1
- package/public/dist/assets/stateDiagram-v2-IH3M54BS-DfXrMbZg.js +0 -1
- package/public/dist/assets/swimlanesDiagram-JKAHXJPX-R-OHp34K.js +0 -8
- 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
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|
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
|
|
181
|
+
const blockmapCommand = options.appBuilderPath
|
|
182
|
+
? { cmd: options.appBuilderPath, prefix: [] }
|
|
183
|
+
: resolveBlockmapCommand();
|
|
173
184
|
const blockmapPath = `${dmgPath}.blockmap`;
|
|
174
|
-
const blockmap = run(
|
|
175
|
-
if (blockmap.error || blockmap.status !== 0) throw new Error(`
|
|
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 ??
|
|
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)
|
|
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
|
|
56
|
-
|
|
57
|
-
|
|
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 =
|
|
61
|
-
const
|
|
62
|
-
const blockmapPath = `${
|
|
63
|
-
|
|
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(
|
|
75
|
+
const actualSize = statSync(payloadPath).size;
|
|
67
76
|
if (entry.size !== actualSize) {
|
|
68
|
-
throw new Error(`Update
|
|
77
|
+
throw new Error(`Update ${payloadLabel} size mismatch: metadata=${String(entry.size)} actual=${actualSize}`);
|
|
69
78
|
}
|
|
70
|
-
const actualHash = sha512(
|
|
71
|
-
if (entry.sha512 !== actualHash) throw new Error(
|
|
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(
|
|
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(`
|
|
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};
|