--- whymark: 1 title: Review Git changes interactively in VS Code author: GPT-6 (Codex) date: 2026-09-17T09:52:41.248Z scope: worktree base: HEAD@d5ba7ce head: working-tree repo: spinkdev/whymark summary: Open saved whymark reviews or compare staged, unstaged, all-working, branch and commit changes inside VS Code. The bundled custom editor reuses the review UI without a server. Source edits are hash-checked, undoable editor changes and never change the index. New comparisons retain explanation stubs, and imported verification is not silently trusted. The VSIX is installable locally; platform and test limitations are recorded in the delivery evidence. checks: - cmd: npm test status: pass detail: exit 0 in 5.1s ran: 2026-09-17T09:53:46.135Z - cmd: npm run typecheck status: pass detail: exit 0 in 1.1s ran: 2026-09-17T09:53:47.281Z - cmd: npm run lint status: pass detail: exit 0 in 3.0s ran: 2026-09-17T09:53:50.299Z - cmd: npm run package:vscode status: pass detail: exit 0 in 1.4s ran: 2026-09-17T09:53:51.708Z - cmd: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode status: pass detail: exit 0 in 4.2s ran: 2026-09-17T09:53:55.932Z - cmd: node tests/e2e/vscode.mjs status: pass detail: exit 0 in 2.2s ran: 2026-09-17T09:53:58.152Z - cmd: npm run test:ui status: pass detail: exit 0 in 46.0s ran: 2026-09-17T09:54:44.114Z - cmd: npm run build -- --webpack status: pass detail: exit 0 in 10.7s ran: 2026-09-17T09:54:54.830Z evidence: - version: 1 command: npm test noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.865Z durationMs: 5081 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c outputArtifact: .artifacts/whymark/27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c.log summary: exit 0 in 5.1s - version: 1 command: npm run typecheck noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.868Z durationMs: 1145 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02 outputArtifact: .artifacts/whymark/4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02.log summary: exit 0 in 1.1s - version: 1 command: npm run lint noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.870Z durationMs: 3018 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 12a7d4451b2edec6f0c59ab46c9523bfbefc2994173ad529ae49df3148c244e1 outputArtifact: .artifacts/whymark/12a7d4451b2edec6f0c59ab46c9523bfbefc2994173ad529ae49df3148c244e1.log summary: exit 0 in 3.0s - version: 1 command: npm run package:vscode noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.872Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.874Z durationMs: 4224 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84 outputArtifact: .artifacts/whymark/b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84.log summary: exit 0 in 4.2s - version: 1 command: node tests/e2e/vscode.mjs noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.876Z durationMs: 2219 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c outputArtifact: .artifacts/whymark/d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c.log summary: exit 0 in 2.2s - version: 1 command: npm run test:ui noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.878Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run build -- --webpack noteId: null file: null claimed: unknown status: pass ran: 2026-09-17T09:54:54.881Z durationMs: 10716 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 8316d69a638d6c66e0304e0e31364d18608a6d4b05b404767119928a79d8a62d outputArtifact: .artifacts/whymark/8316d69a638d6c66e0304e0e31364d18608a6d4b05b404767119928a79d8a62d.log summary: exit 0 in 10.7s - version: 1 command: npm run typecheck noteId: n1 file: README.md claimed: unknown status: pass ran: 2026-09-17T09:54:54.883Z durationMs: 1145 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02 outputArtifact: .artifacts/whymark/4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02.log summary: exit 0 in 1.1s - version: 1 command: npm run package:vscode noteId: n2 file: eslint.config.mjs claimed: unknown status: pass ran: 2026-09-17T09:54:54.885Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run package:vscode noteId: n3 file: package-lock.json claimed: unknown status: pass ran: 2026-09-17T09:54:54.887Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run package:vscode noteId: n4 file: package.json claimed: unknown status: pass ran: 2026-09-17T09:54:54.889Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run test:ui noteId: n5 file: src/app/r/[slug]/actions.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.891Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run test:ui noteId: n6 file: src/app/r/[slug]/page.tsx claimed: unknown status: pass ran: 2026-09-17T09:54:54.893Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run test:ui noteId: n7 file: src/components/whymark/decide.tsx claimed: unknown status: pass ran: 2026-09-17T09:54:54.895Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run test:ui noteId: n8 file: src/components/whymark/review-view.tsx claimed: unknown status: pass ran: 2026-09-17T09:54:54.897Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run package:vscode noteId: n9 file: extensions/vscode/.gitignore claimed: unknown status: pass ran: 2026-09-17T09:54:54.898Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run package:vscode noteId: n10 file: extensions/vscode/.vscodeignore claimed: unknown status: pass ran: 2026-09-17T09:54:54.900Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run package:vscode noteId: n11 file: extensions/vscode/LICENSE claimed: unknown status: pass ran: 2026-09-17T09:54:54.902Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run typecheck noteId: n12 file: extensions/vscode/README.md claimed: unknown status: pass ran: 2026-09-17T09:54:54.904Z durationMs: 1145 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02 outputArtifact: .artifacts/whymark/4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02.log summary: exit 0 in 1.1s - version: 1 command: npm run package:vscode noteId: n13 file: extensions/vscode/package.json claimed: unknown status: pass ran: 2026-09-17T09:54:54.906Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: npm run package:vscode noteId: n14 file: extensions/vscode/scripts/build.mjs claimed: unknown status: pass ran: 2026-09-17T09:54:54.908Z durationMs: 1409 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4 outputArtifact: .artifacts/whymark/b8e2ae5f7b736afce5e6e9f4d4d9c30d6b21ca06cbec36838c37a47c8d0bd2b4.log summary: exit 0 in 1.4s - version: 1 command: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode noteId: n15 file: extensions/vscode/scripts/test.mjs claimed: unknown status: pass ran: 2026-09-17T09:54:54.910Z durationMs: 4224 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84 outputArtifact: .artifacts/whymark/b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84.log summary: exit 0 in 4.2s - version: 1 command: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode noteId: n16 file: extensions/vscode/src/extension.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.912Z durationMs: 4224 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84 outputArtifact: .artifacts/whymark/b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84.log summary: exit 0 in 4.2s - version: 1 command: npm test noteId: n17 file: extensions/vscode/src/protocol.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.914Z durationMs: 5081 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c outputArtifact: .artifacts/whymark/27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c.log summary: exit 0 in 5.1s - version: 1 command: npm test noteId: n18 file: extensions/vscode/src/safety.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.916Z durationMs: 5081 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c outputArtifact: .artifacts/whymark/27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c.log summary: exit 0 in 5.1s - version: 1 command: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode noteId: n19 file: extensions/vscode/src/test-host.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.918Z durationMs: 4224 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84 outputArtifact: .artifacts/whymark/b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84.log summary: exit 0 in 4.2s - version: 1 command: node tests/e2e/vscode.mjs noteId: n20 file: extensions/vscode/src/theme.css claimed: unknown status: pass ran: 2026-09-17T09:54:54.920Z durationMs: 2219 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c outputArtifact: .artifacts/whymark/d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c.log summary: exit 0 in 2.2s - version: 1 command: node tests/e2e/vscode.mjs noteId: n21 file: extensions/vscode/src/webview.tsx claimed: unknown status: pass ran: 2026-09-17T09:54:54.922Z durationMs: 2219 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c outputArtifact: .artifacts/whymark/d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c.log summary: exit 0 in 2.2s - version: 1 command: WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode noteId: n22 file: extensions/vscode/src/worker.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.924Z durationMs: 4224 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84 outputArtifact: .artifacts/whymark/b16adb5ab8715bf1575d347cb8ad00636c02524397121f11e629c915b62b6f84.log summary: exit 0 in 4.2s - version: 1 command: npm run typecheck noteId: n23 file: specs/002-vscode-extension/PLAN.md claimed: unknown status: pass ran: 2026-09-17T09:54:54.925Z durationMs: 1145 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02 outputArtifact: .artifacts/whymark/4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02.log summary: exit 0 in 1.1s - version: 1 command: npm run typecheck noteId: n24 file: specs/002-vscode-extension/verification.md claimed: unknown status: pass ran: 2026-09-17T09:54:54.927Z durationMs: 1145 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02 outputArtifact: .artifacts/whymark/4c790a1d26481d92f95c3d3ac6896b13e103b378ae67a82aa4172b5d0eae9b02.log summary: exit 0 in 1.1s - version: 1 command: npm run test:ui noteId: n25 file: src/components/whymark/web-review-view.tsx claimed: unknown status: pass ran: 2026-09-17T09:54:54.929Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: npm run test:ui noteId: n26 file: src/lib/review-actions.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.931Z durationMs: 45962 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234 outputArtifact: .artifacts/whymark/7330f534a508d4fdb05640ce824f610af4fd85baad88025d74ad041166e6d234.log summary: exit 0 in 46.0s - version: 1 command: node tests/e2e/vscode.mjs noteId: n27 file: tests/e2e/vscode.mjs claimed: unknown status: pass ran: 2026-09-17T09:54:54.933Z durationMs: 2219 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c outputArtifact: .artifacts/whymark/d5549a13ad8c6c3b836fce233a6c0feb694d7a4432cc398a4418fa83ec15ee9c.log summary: exit 0 in 2.2s - version: 1 command: npm test noteId: n28 file: tests/vscode.test.ts claimed: unknown status: pass ran: 2026-09-17T09:54:54.935Z durationMs: 5081 exitCode: 0 cwd: . tool: whymark@0.3.0 runtime: v22.23.2 source: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d sourceAfter: 102e2a7a4e17c3c62892eb4cbda4db7bff0b4aad1c3bed359288a4e84868476d head: d5ba7ce4cbba62197a125e3fabd8ae47dde2a2ff base: HEAD@d5ba7ce reviewHash: 764b01bd143b5f6f174ba4cd07b10457d578be082be29d87d4e2f4844181094c outputHash: 27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c outputArtifact: .artifacts/whymark/27a6d7eee36480db100af68478caa772b1b6daf4b5d6fab76d546f7e791eba5c.log summary: exit 0 in 5.1s --- @file README.md modified +15 oldsha=c1448fb newsha=3669078 @@ -351,3 +351,18 @@ accuracy. Fingerprints exclude ignored files, `.artifacts/`, and review outputs bytes or external services. Inspect output logs before sharing. No command runs just by opening a review. Optional Knip, Semgrep, audit and coverage adapters remain future integrations; the current quality adapter is ESLint plus configured pass/fail checks. + +## VS Code extension + +Open `.whymark` reviews interactively in VS Code, or compare staged, unstaged, all +working-tree, branch and commit changes from the Command Palette. No dev server is +required. Review comments, filter evidence, switch split/unified views, and apply +undoable edits to source buffers without changing the Git index. + +```sh +npm run package:vscode +code --install-extension .artifacts/whymark-vscode.vsix +``` + +See [extension usage and safety boundaries](extensions/vscode/README.md). The VSIX +is local and self-contained; it has not been published to the Marketplace. @note file kind=intent why: Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run typecheck` => pass (exit 0 in 1.1s) @file eslint.config.mjs modified +1 oldsha=b5d8c8f newsha=32ecf03 @@ -12,6 +12,7 @@ const eslintConfig = defineConfig([ "out/**", "build/**", "dist/**", + "extensions/vscode/dist/**", "next-env.d.ts", ]), ]); @note file kind=intent why: Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run package:vscode` => pass (exit 0 in 1.4s) @file package-lock.json modified +1670 -192 oldsha=a39fd12 newsha=bebdea5 @@ -1,12 +1,12 @@ { "name": "whymark", - "version": "0.1.1", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "whymark", - "version": "0.1.1", + "version": "0.3.0", "license": "MIT", "dependencies": { "yaml": "^2.8.1" @@ -23,7 +23,10 @@ "@types/node": "^22", "@types/react": "^19", "@types/react-dom": "^19", + "@types/vscode": "^1.96.0", "@vercel/analytics": "^2.0.1", + "@vscode/test-electron": "^3.1.0", + "@vscode/vsce": "^4.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cn": "^0.3.0", @@ -33,6 +36,7 @@ "lucide-react": "^0.545.0", "next": "16.3.5", "playwright": "^1.63.0", + "postcss": "^8.5.28", "react": "19.2.8", "react-dom": "19.2.8", "shadcn": "^4.21.0", @@ -61,6 +65,220 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@azure/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.1.tgz", + "integrity": "sha512-2QygG2F76ZpMP2eMztiJvAiFMu71M9rDeU7vO/QKg5Css7MgM4frUOslFjhVjRhbGaCNPtz/S8M6y46/fFKVuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-process": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-process/-/core-process-1.0.0.tgz", + "integrity": "sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.3.tgz", + "integrity": "sha512-zGQPtqvXPgSA8yfV2CkIQ1qirqk0p9AIVpC5uEkdXQYcKl07QHvyaGYRnZOk0AsQUmxNb4wfkcwY5di8Z5xa9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-process": "^1.0.0", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^5.5.0", + "@azure/msal-node": "^6.0.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/identity/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@azure/identity/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@azure/logger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.22.0.tgz", + "integrity": "sha512-5kgu9xeEKgGc2JeidxAtU15NJTqiH/CMCRRQAJ4Rac56kB7KVg91vbNmn+z3RO1vNomPN69UvjKG9h1Pghx6dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.14.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.14.1.tgz", + "integrity": "sha512-Or6xhPNyi4zHW25158yxBoyxuCqNSPa5YBVqfF1J5Ks4MJWBo/USXdp05DQIPu1Zli00YZu6t0+h6KvHJealxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-6.0.1.tgz", + "integrity": "sha512-ixSO1Y/kCVRthRs+hSx/5qkwaunX1/RAePhlMN0wIpIQ4WEZ6AREGGnGd1AP0qspHVsAwzWQKGubpjh50JyJIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.14.1", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", @@ -2202,116 +2420,123 @@ "dev": true, "license": "MIT" }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", - "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + "node": ">= 10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" - } - }, - "node_modules/@next/env": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.5.tgz", - "integrity": "sha512-NWEXVDMqoEo0ktmU6u0sE2Vg0LOcsD7NnOTJNo3/fEaTfsg+F1bMIxuDmQbda4e3yTIQwVdUREF2yIuMOusKtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.3.5.tgz", - "integrity": "sha512-PGfSeItHJ12DH8t+6sEbuMe59NE5rAhCfgk06QKTH2ne9VUL1JlaXdYXY3B8RaiF2SO50rDYvd39TulP6A6xZQ==", + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "4.9.1", - "fast-glob": "3.3.1" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@next/eslint-plugin-next/node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">= 10" } }, - "node_modules/@next/eslint-plugin-next/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 10" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.5.tgz", - "integrity": "sha512-pMmGgETfKvElucLHtVaeiMRbp2zUbvKx7b1yGko0liBz3cw1mKSggWN/Rp/wPz8z+E1O82u3r4L1Co+ZS5hokQ==", + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", "cpu": [ - "arm64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.5.tgz", - "integrity": "sha512-76VaGYvf6HPa5/w12yLkE3dXTn9AfdEviI79oEL3aZoAmRLc9rWitjWqyjViVysK/ht/y9YKzFkBrUdi/wGkow==", + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">= 10" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.5.tgz", - "integrity": "sha512-zKDELJ5jSQMHeO/hmXUQsAzagX4bQD4OiMi3pQ5FbUj+yK506oLVHnKA2YXMlbg1EHHqJYtyePOgByIDXD1lqw==", + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", "cpu": [ "arm64" ], @@ -2325,12 +2550,12 @@ "node": ">= 10" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.5.tgz", - "integrity": "sha512-7Vql0pgzCoHagv6+FNOZoqmJqA52c6zeVbhtS/47qFozO1MSx4ms7x7GHiciY8R5CDsSMKMQjJEryoJLcsBIbA==", + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, "license": "MIT", @@ -2342,10 +2567,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.5.tgz", - "integrity": "sha512-NH/xzehyHEFWE2nlcZon7TB/0+H4shfWCi7S1zka815XCOhJDYZhoeJtOYy0dh0WVRWACVXSyGNFFytoMxUhRg==", + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", "cpu": [ "x64" ], @@ -2359,10 +2584,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.5.tgz", - "integrity": "sha512-lV4+EhWMfS8jcC+EH2nn/Cm5cn6XsgbE07bU9tMH8fCo0tNAqhyzi1b5wQ/Tn6NGFTvKDY65w3ZH95EjwBRAnQ==", + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", "cpu": [ "x64" ], @@ -2376,10 +2601,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.5.tgz", - "integrity": "sha512-/wKzAREX2RF++MhicjDbg8tGn2AiBIM0+EFeTFKoUEUbW5D6amCJehd5Z5G1H5/gxNdgnwoXMcHz24H/c2tGkQ==", + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", "cpu": [ "arm64" ], @@ -2393,12 +2618,12 @@ "node": ">= 10" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.5.tgz", - "integrity": "sha512-LNdCHzgLFc+UeqMS84LzXPaeBRKyqDN9OMyFAr1OrB0XrNw78IRrEVtZvvA7245W/HsaoeVOQX9jPjPk8jojwA==", + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", "cpu": [ - "x64" + "ia32" ], "dev": true, "license": "MIT", @@ -2410,12 +2635,237 @@ "node": ">= 10" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@next/env": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.5.tgz", + "integrity": "sha512-NWEXVDMqoEo0ktmU6u0sE2Vg0LOcsD7NnOTJNo3/fEaTfsg+F1bMIxuDmQbda4e3yTIQwVdUREF2yIuMOusKtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.3.5.tgz", + "integrity": "sha512-PGfSeItHJ12DH8t+6sEbuMe59NE5rAhCfgk06QKTH2ne9VUL1JlaXdYXY3B8RaiF2SO50rDYvd39TulP6A6xZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "4.9.1", + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.5.tgz", + "integrity": "sha512-pMmGgETfKvElucLHtVaeiMRbp2zUbvKx7b1yGko0liBz3cw1mKSggWN/Rp/wPz8z+E1O82u3r4L1Co+ZS5hokQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.5.tgz", + "integrity": "sha512-76VaGYvf6HPa5/w12yLkE3dXTn9AfdEviI79oEL3aZoAmRLc9rWitjWqyjViVysK/ht/y9YKzFkBrUdi/wGkow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.5.tgz", + "integrity": "sha512-zKDELJ5jSQMHeO/hmXUQsAzagX4bQD4OiMi3pQ5FbUj+yK506oLVHnKA2YXMlbg1EHHqJYtyePOgByIDXD1lqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.5.tgz", + "integrity": "sha512-7Vql0pgzCoHagv6+FNOZoqmJqA52c6zeVbhtS/47qFozO1MSx4ms7x7GHiciY8R5CDsSMKMQjJEryoJLcsBIbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.5.tgz", + "integrity": "sha512-NH/xzehyHEFWE2nlcZon7TB/0+H4shfWCi7S1zka815XCOhJDYZhoeJtOYy0dh0WVRWACVXSyGNFFytoMxUhRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.5.tgz", + "integrity": "sha512-lV4+EhWMfS8jcC+EH2nn/Cm5cn6XsgbE07bU9tMH8fCo0tNAqhyzi1b5wQ/Tn6NGFTvKDY65w3ZH95EjwBRAnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.5.tgz", + "integrity": "sha512-/wKzAREX2RF++MhicjDbg8tGn2AiBIM0+EFeTFKoUEUbW5D6amCJehd5Z5G1H5/gxNdgnwoXMcHz24H/c2tGkQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.3.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.5.tgz", + "integrity": "sha512-LNdCHzgLFc+UeqMS84LzXPaeBRKyqDN9OMyFAr1OrB0XrNw78IRrEVtZvvA7245W/HsaoeVOQX9jPjPk8jojwA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3253,6 +3703,76 @@ "dev": true, "license": "MIT" }, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@shikijs/core": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", @@ -3882,6 +4402,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/vscode": { + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz", + "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.70.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz", @@ -4177,6 +4704,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.9.tgz", + "integrity": "sha512-edSdeAqkdxBVzA1yL1LrLCml1YjyCVvPMtMqJpbF+6K609tHe8V6sQUzFQSGcYNhcuhOceZtjvN32+mpIth30A==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", @@ -4460,143 +5002,421 @@ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, - "license": "MIT", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vercel/analytics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-2.0.1.tgz", + "integrity": "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@remix-run/react": "^2", + "@sveltejs/kit": "^1 || ^2", + "next": ">= 13", + "nuxt": ">= 3", + "react": "^18 || ^19 || ^19.0.0-rc", + "svelte": ">= 4", + "vue": "^3", + "vue-router": "^4" + }, + "peerDependenciesMeta": { + "@remix-run/react": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "next": { + "optional": true + }, + "nuxt": { + "optional": true + }, + "react": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-router": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.1.tgz", + "integrity": "sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.31", + "@vitest/spy": "5.0.1", + "estree-walker": "^3.0.3", + "magic-string": "^1.2.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz", + "integrity": "sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0" + } + }, + "node_modules/@vitest/spy": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.1.tgz", + "integrity": "sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vscode/test-electron": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-3.1.0.tgz", + "integrity": "sha512-CRqv5u+YYoseuNVJ6Tyo4k0sF0mx4qnKMihRB0PjsUF8Dc0WKtCXo6CNL6nWWm5esfFQsQA/pejMj4ZbpJVLTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^8.1.0", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@vscode/test-electron/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-4.0.0.tgz", + "integrity": "sha512-NImwuLaenMmb5D5Jer9/lzi/F9ZQUBOp8Azhj/BVYcTFgixv8KehFXqEUDjQlD2tAiw2E6dDGyjTuAB//di60A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/identity": "^4.13.2", + "@napi-rs/keyring": "^1.3.0", + "@secretlint/core": "^10.2.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.2.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@vscode/vsce-sign": "^2.1.0", + "azure-devops-node-api": "^12.5.0", + "cockatiel": "^3.2.1", + "commander": "^12.1.0", + "hosted-git-info": "^4.1.0", + "jsonc-parser": "^3.3.1", + "marked": "^18.0.11", + "mime": "^1.6.0", + "minimatch": "^10.2.6", + "parse5": "^8.0.1", + "proper-lockfile": "^4.1.2", + "read": "^1.0.7", + "semver": "^7.8.5", + "tinyglobby": "^0.2.17", + "typed-rest-client": "^1.8.11", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^3.4.0", + "yazl": "^2.5.1" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 22" + } + }, + "node_modules/@vscode/vsce-sign": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.1.0.tgz", + "integrity": "sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } + "os": [ + "linux" + ] }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", - "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, "os": [ - "win32" + "linux" ] }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", - "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", "cpu": [ - "ia32" + "arm64" ], "dev": true, - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, "os": [ "win32" ] }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", - "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, "os": [ "win32" ] }, - "node_modules/@vercel/analytics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-2.0.1.tgz", - "integrity": "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==", + "node_modules/@vscode/vsce/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "peerDependencies": { - "@remix-run/react": "^2", - "@sveltejs/kit": "^1 || ^2", - "next": ">= 13", - "nuxt": ">= 3", - "react": "^18 || ^19 || ^19.0.0-rc", - "svelte": ">= 4", - "vue": "^3", - "vue-router": "^4" - }, - "peerDependenciesMeta": { - "@remix-run/react": { - "optional": true - }, - "@sveltejs/kit": { - "optional": true - }, - "next": { - "optional": true - }, - "nuxt": { - "optional": true - }, - "react": { - "optional": true - }, - "svelte": { - "optional": true - }, - "vue": { - "optional": true - }, - "vue-router": { - "optional": true - } + "engines": { + "node": "18 || 20 || >=22" } }, - "node_modules/@vitest/mocker": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.1.tgz", - "integrity": "sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==", + "node_modules/@vscode/vsce/node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.1", - "estree-walker": "^3.0.3", - "magic-string": "^1.2.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + "balanced-match": "^4.0.2" }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "engines": { + "node": "20 || >=22" } }, - "node_modules/@vitest/mocker/node_modules/magic-string": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz", - "integrity": "sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==", + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.6.0" + "engines": { + "node": ">=18" } }, - "node_modules/@vitest/spy": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.1.tgz", - "integrity": "sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==", + "node_modules/@vscode/vsce/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/accepts": { @@ -4636,6 +5456,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", @@ -5007,6 +5837,17 @@ "node": ">= 0.4" } }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "dev": true, + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5027,6 +5868,22 @@ "node": ">=6.0.0" } }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/body-parser": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", @@ -5066,6 +5923,13 @@ "url": "https://opencollective.com/express" } }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/brace-expansion": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", @@ -5124,6 +5988,23 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -5363,6 +6244,16 @@ "node": ">=20" } }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/code-block-writer": { "version": "13.0.3", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", @@ -5556,6 +6447,13 @@ "node": ">=6.6.0" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", @@ -5960,6 +6858,33 @@ "node": ">= 0.4" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6019,6 +6944,19 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -7544,6 +8482,39 @@ "node": ">=16.9.0" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/html-void-elements": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", @@ -7576,6 +8547,34 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", @@ -7613,6 +8612,13 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -8280,6 +9286,24 @@ "dev": true, "license": "ISC" }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -8409,6 +9433,13 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, "node_modules/jsonfile": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", @@ -8422,6 +9453,42 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -8438,6 +9505,42 @@ "node": ">=4.0" } }, + "node_modules/jszip": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.2.tgz", + "integrity": "sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -8492,6 +9595,16 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -8776,6 +9889,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8783,6 +9938,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", @@ -8869,6 +10031,19 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/marked": { + "version": "18.0.13", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.13.tgz", + "integrity": "sha512-xTxVzZsBFwunP6HDmtBkabUQEYArnP7/rMDGmPj9SlrKlQ4i8MdYVow+nJL0eOqwpUqhzBoTBRADGN6uYwPyOw==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -9053,6 +10228,19 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -9133,6 +10321,13 @@ "dev": true, "license": "MIT" }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, "node_modules/nanoid": { "version": "3.3.19", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", @@ -9729,6 +10924,13 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9774,6 +10976,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -9829,6 +11044,13 @@ "url": "https://opencollective.com/express" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -10059,6 +11281,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -10095,6 +11324,25 @@ "react-is": "^16.13.1" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/property-information": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", @@ -10304,6 +11552,49 @@ } } }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/recast": { "version": "0.23.21", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.21.tgz", @@ -10486,6 +11777,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -10606,6 +11907,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -10648,6 +11970,16 @@ "dev": true, "license": "MIT" }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -10761,6 +12093,13 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -11207,6 +12546,23 @@ "node": ">= 0.4" } }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -11470,6 +12826,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boundary": "^2.0.0" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -11579,6 +12945,22 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -11764,6 +13146,16 @@ "fsevents": "~2.3.3" } }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, "node_modules/tw-animate-css": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", @@ -11898,6 +13290,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -11955,6 +13359,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "dev": true, + "license": "MIT" + }, "node_modules/undici": { "version": "7.29.1", "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz", @@ -12157,6 +13568,13 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true, + "license": "MIT" + }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", @@ -12239,6 +13657,19 @@ "node": ">= 0.8" } }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "dev": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -12910,6 +14341,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -12932,6 +14387,29 @@ "url": "https://github.com/sponsors/eemeli" } }, + "node_modules/yauzl": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @note file kind=generated why: Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run package:vscode` => pass (exit 0 in 1.4s) @file package.json modified +11 -3 oldsha=7b63a5c newsha=f785870 @@ -1,7 +1,7 @@ { "name": "whymark", "version": "0.3.0", - "description": "whymark \u2014 a file format and reviewer for reading AI-written code changes with the reasoning, sources, and verification attached to each line.", + "description": "whymark — a file format and reviewer for reading AI-written code changes with the reasoning, sources, and verification attached to each line.", "author": "Samuel Spink", "license": "MIT", "bin": { @@ -37,7 +37,7 @@ "scripts": { "dev": "next dev --port 43917", "build": "next build", - "build:cli": "esbuild src/cli/whymark.ts --bundle --platform=node --format=esm --outfile=dist/whymark.mjs --external:yaml --legal-comments=none --banner:js='/* generated by npm run build:cli \u2014 do not edit */'", + "build:cli": "esbuild src/cli/whymark.ts --bundle --platform=node --format=esm --outfile=dist/whymark.mjs --external:yaml --legal-comments=none --banner:js='/* generated by npm run build:cli — do not edit */'", "prepublishOnly": "npm run build:cli", "start": "next start --port 43917", "lint": "eslint", @@ -46,7 +46,11 @@ "test:watch": "vitest", "test:ui": "node tests/e2e/viewer.mjs", "whymark": "tsx src/cli/whymark.ts", - "prepack": "npm run build:cli" + "prepack": "npm run build:cli", + "build:vscode": "node extensions/vscode/scripts/build.mjs", + "package:vscode": "npm run build:vscode && cd extensions/vscode && vsce package --no-dependencies --allow-missing-repository --out ../../.artifacts/whymark-vscode.vsix", + "test:vscode": "npm run build:vscode && node extensions/vscode/scripts/test.mjs", + "test:vscode:ui": "npm run build:vscode && node tests/e2e/vscode.mjs" }, "dependencies": { "yaml": "^2.8.1" @@ -60,7 +64,10 @@ "@types/node": "^22", "@types/react": "^19", "@types/react-dom": "^19", + "@types/vscode": "^1.96.0", "@vercel/analytics": "^2.0.1", + "@vscode/test-electron": "^3.1.0", + "@vscode/vsce": "^4.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cn": "^0.3.0", @@ -70,6 +77,7 @@ "lucide-react": "^0.545.0", "next": "16.3.5", "playwright": "^1.63.0", + "postcss": "^8.5.28", "react": "19.2.8", "react-dom": "19.2.8", "shadcn": "^4.21.0", @note file kind=intent why: Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run package:vscode` => pass (exit 0 in 1.4s) @file src/app/r/[slug]/actions.ts modified +1 -9 oldsha=a147497 newsha=b4f16d0 @@ -14,15 +14,7 @@ import { import { canWriteWorkingTree } from "@/lib/site"; import type { FileSection } from "@/lib/whymark/types"; -export interface EditResult { - ok: boolean; - /** Present on success: the file's hash after writing, so the client can re-check. */ - newSha?: string; - discarded?: number; - restored?: number; - partsReverted?: number; - error?: string; -} +import type { EditResult } from "@/lib/review-actions"; /** * These actions write to the working tree of whoever is running the dev server, @note file kind=intent why: The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run test:ui` => pass (exit 0 in 46.0s) @file src/app/r/[slug]/page.tsx modified +2 -2 oldsha=5b1e684 newsha=973c690 @@ -5,7 +5,7 @@ import { validateDocumentInRepo } from "@/lib/whymark/validate-tree"; import { isActionable } from "@/lib/whymark/edit"; import { hashObject } from "@/lib/whymark/git"; import { buildReviewVM } from "@/lib/view-model"; -import { ReviewView } from "@/components/whymark/review-view"; +import { WebReviewView } from "@/components/whymark/web-review-view"; import { canWriteWorkingTree } from "@/lib/site"; export const dynamic = "force-dynamic"; @@ -48,5 +48,5 @@ export default async function ReviewPage({ params }: PageProps<"/r/[slug]">) { ), ]); - return ; + return ; } @note file kind=intent why: The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run test:ui` => pass (exit 0 in 46.0s) @file src/components/whymark/decide.tsx modified +4 -2 oldsha=65b1d2d newsha=b09ec28 @@ -278,11 +278,13 @@ export interface ApplySummary { * out of sight, and the reviewer never learns there is anything to apply. */ export function ApplyControls({ + target = "Working tree", summary, busy, onApply, onReset, }: { + target?: string; summary: ApplySummary; busy: boolean; onApply: () => void; @@ -299,7 +301,7 @@ export function ApplyControls({ backgroundColor: "color-mix(in oklch, var(--whymark-del) 8%, transparent)", }} > - + {describe(summary)} {pending} to undo @@ -315,7 +317,7 @@ export function ApplyControls({ disabled={busy} onClick={onApply} className="flex items-center gap-1.5 rounded bg-foreground px-2 py-0.5 text-[11.5px] font-medium text-background transition-opacity disabled:opacity-50" - title="Write these decisions to the files in your working tree" + title={`Apply these decisions to ${target.toLowerCase()}`} > {busy ? : null} apply @note file kind=intent why: The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback. source: file:specs/002-vscode-extension/PLAN.md — Scoped extension requirements and verification boundaries verify: cmd `npm run test:ui` => pass (exit 0 in 46.0s) @file src/components/whymark/review-view.tsx modified +24 -25 oldsha=bab3424 newsha=7770902 @@ -1,7 +1,6 @@ "use client"; import { useCallback, useEffect, useMemo, useState } from "react"; -import Link from "next/link"; import { AlertTriangle, ArrowLeft, @@ -20,7 +19,7 @@ import type { Diagnostic, Note, NoteKind } from "@/lib/whymark/types"; import type { ReviewVM } from "@/lib/view-model"; import { FilePanel, type ViewMode } from "./file-panel"; import { ApplyControls, ApplyResult } from "./decide"; -import { applyFileDecisions, saveEditedRange } from "@/app/r/[slug]/actions"; +import type { ReviewActions } from "@/lib/review-actions"; import { isEmpty, summarize, type FileDecisions } from "@/lib/whymark/edit"; import { KIND_META, STATUS_COLOR } from "./meta"; import { CoverageBar, Ring, Stat } from "./meters"; @@ -35,7 +34,12 @@ import { useReviewPreferences } from "./use-review-preferences"; import { type ReviewPreferences } from "@/lib/review-preferences"; import { hasPassingVerify } from "@/lib/whymark/stats"; -interface ReviewViewProps { +export interface ReviewViewProps { + mutationTarget?: string; + homeControl?: React.ReactNode; + actions?: ReviewActions; + sourceLabel?: string; + onViewSource?: () => void; review: ReviewVM; /** Absent when the document was pasted rather than read from `reviews/`. */ slug?: string; @@ -44,7 +48,7 @@ interface ReviewViewProps { onBack?: () => void; } -export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { +export function ReviewView({ review, slug, issues, onBack, homeControl, mutationTarget = "Working tree", actions, sourceLabel, onViewSource }: ReviewViewProps) { const compact = !useMediaQuery("(min-width: 1180px)", true); const [preferences, setPreferences] = useReviewPreferences(); const [activeNoteId, setActiveNoteId] = useState(null); @@ -137,7 +141,7 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { * act on. Each file's own hash is re-checked server-side before it is written. */ const apply = useCallback(async () => { - if (!slug) return; + if (!slug || !actions) return; setApplying(true); const failures: string[] = []; let discarded = 0; @@ -145,7 +149,7 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { let parts = 0; for (const [path, fileDecisions] of Object.entries(decisions)) { - const result = await applyFileDecisions(slug, path, fileDecisions); + const result = await actions.applyFileDecisions(slug, path, fileDecisions); if (result.ok) { discarded += result.discarded ?? 0; restored += result.restored ?? 0; @@ -172,9 +176,9 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { .join(", "); setApplyResult({ ok: true, - message: `Working tree updated: ${undone}. This review now describes code you changed — regenerate it with \`whymark new --worktree\` before sharing.`, + message: `${mutationTarget} updated: ${undone}. This review now describes code you changed — regenerate it with \`whymark new --worktree\` before sharing.`, }); - }, [decisions, slug]); + }, [decisions, slug, actions, mutationTarget]); /** * Deciding by keyboard, for a reviewer stepping through with j/k: `x` rejects @@ -182,7 +186,7 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { * just formed an opinion about. */ const toggleActiveNote = useCallback(() => { - if (!slug || !activeNoteId) return; + if (!slug || !actions || !activeNoteId) return; const file = review.files.find((candidate) => candidate.notes.some((note) => note.id === activeNoteId), ); @@ -218,21 +222,21 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { ), }, ); - }, [activeNoteId, decisions, review.files, setFileDecisions, slug]); + }, [activeNoteId, decisions, review.files, setFileDecisions, slug, actions]); const onSaveEdit = useCallback( async (path: string, start: number, end: number, text: string) => { - if (!slug) return { ok: false, error: "A pasted review has no file to write to." }; - const result = await saveEditedRange(slug, path, start, end, text); + if (!slug || !actions) return { ok: false, error: "A pasted review has no file to write to." }; + const result = await actions.saveEditedRange(slug, path, start, end, text); if (result.ok) { setApplyResult({ ok: true, - message: `Saved your edit to ${path}. Regenerate the review so its diff matches the file again.`, + message: `${mutationTarget} updated for ${path}. Regenerate the review so its diff matches the file again.`, }); } return result; }, - [slug], + [slug, actions, mutationTarget], ); useEffect(() => { @@ -298,15 +302,7 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) { > - ) : ( - - - - )} + ) : homeControl}

{meta.title}

@@ -328,6 +324,7 @@ export function ReviewView({ review, slug, issues, onBack }: ReviewViewProps) {