@jaybeeuu/agent-cortex 1.42.0 → 1.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.agents/skills/style-versioning/SKILL.md +73 -2
  2. package/.github/workflows/ci.yml +47 -27
  3. package/AGENTS.md +23 -2
  4. package/CHANGELOG.md +166 -0
  5. package/README.md +125 -73
  6. package/agents/README.md +17 -4
  7. package/bin/agent-cortex.mjs +48 -30
  8. package/bin/installers/pi.mjs +885 -237
  9. package/docs/claude-hooks.md +5 -4
  10. package/docs/commit-signing.md +231 -0
  11. package/docs/ideas/enable-signed-commit-enforcement-changesets-bot-commits-must-be-signed.md +10 -1
  12. package/docs/ideas/extension-manifests.md +5 -0
  13. package/docs/research/disable-model-invocation.md +103 -0
  14. package/docs/research/skill-design-research.md +2 -2
  15. package/docs/skills/skill-anatomy.md +5 -1
  16. package/docs/technical-direction/harness-config.md +25 -1
  17. package/docs/technical-direction/migration-execution-labels.md +17 -9
  18. package/extensions/agent-modes/discover.test.ts +19 -0
  19. package/extensions/agent-modes/discover.ts +25 -3
  20. package/extensions/session-start/README.md +38 -0
  21. package/extensions/session-start/index.test.ts +122 -0
  22. package/extensions/session-start/index.ts +27 -0
  23. package/extensions/session-start/package.json +19 -0
  24. package/extensions/session-start/tsconfig.json +12 -0
  25. package/extensions/skill-stats/pnpm-lock.yaml +329 -0
  26. package/extensions/subagent/README.md +1 -1
  27. package/extensions/subagent/agents.test.ts +176 -0
  28. package/extensions/subagent/agents.ts +102 -11
  29. package/extensions/subagent/index.ts +2 -1
  30. package/extensions/subagent/package.json +1 -1
  31. package/lib/cli.mjs +35 -9
  32. package/package.json +6 -5
  33. package/pi/settings.json +1 -7
  34. package/plugin.json +1 -1
  35. package/pnpm-workspace.yaml +6 -0
  36. package/scripts/check-changeset.mjs +42 -0
  37. package/scripts/lib/release-gates.mjs +61 -0
  38. package/scripts/lib/verify-worker-tree.mjs +107 -0
  39. package/scripts/resolve-publish-command.mjs +17 -0
  40. package/skills/planning/create-task/scripts/pnpm-lock.yaml +342 -0
  41. package/skills/productivity/validate-agent-dir/scripts/pnpm-lock.yaml +329 -0
  42. package/skills/workflow/git-workflow/SKILL.md +35 -1
  43. package/skills/workflow/ralph/REFERENCE.md +17 -1
  44. package/skills/workflow/ralph/SKILL.md +4 -1
  45. package/skills/workflow/run-pipeline-stage/SKILL.md +11 -4
  46. package/skills/workflow/run-pipeline-stage/playbooks/code.md +2 -0
  47. package/skills/workflow/run-pipeline-stage/playbooks/document.md +3 -0
  48. package/skills/workflow/run-pipeline-stage/playbooks/fix.md +2 -0
  49. package/skills/workflow/run-pipeline-stage/prompts/stage-runner.md +11 -0
  50. package/skills/workflow/run-pipeline-stage/scripts/pnpm-lock.yaml +342 -0
  51. package/test/cli.test.mjs +26 -29
  52. package/test/helpers/fake-pi.mjs +132 -0
  53. package/test/pi-installer.test.mjs +345 -286
  54. package/test/pi-register.test.mjs +342 -0
  55. package/test/pi-sweep.test.mjs +619 -0
  56. package/test/release-gates.test.mjs +190 -0
  57. package/test/verify-worker-tree.test.mjs +120 -0
  58. package/token-map.README.md +7 -6
  59. package/token-map.json +6 -5
  60. package/extensions/session-start.ts +0 -44
  61. package/lib/pi-packages.mjs +0 -169
  62. package/test/pi-packages.test.mjs +0 -295
@@ -0,0 +1,107 @@
1
+ // Verify that a dispatched pipeline-stage worker actually delivered.
2
+ //
3
+ // Why this exists: a worker's `---REPORT---` is a claim, not evidence. A stage
4
+ // that reports `OUTCOME: SUCCESS` and leaves its work uncommitted looks
5
+ // identical, from the report alone, to one that committed and pushed — and the
6
+ // orchestrator opens the feature PR from the branch, so uncommitted work is
7
+ // silently dropped. The observed failure was exactly that: workers reporting
8
+ // success with a dirty worktree, every one of them needing a human to finish
9
+ // the tree by hand.
10
+ //
11
+ // This module answers one question against the worktree itself: did this worker
12
+ // leave a clean tree with at least one commit ahead of where it started? It
13
+ // reads nothing the worker wrote, so it cannot be fooled by the worker's prose.
14
+ //
15
+ // Usage (CLI):
16
+ // node scripts/lib/verify-worker-tree.mjs --worktree <dir> --base <sha>
17
+ // node scripts/lib/verify-worker-tree.mjs --worktree <dir> --base <ref> --json
18
+ //
19
+ // Exit code is 0 only when the worker delivered, so a caller can gate on it.
20
+
21
+ import { execFile } from "node:child_process";
22
+ import { promisify } from "node:util";
23
+ import { resolve } from "node:path";
24
+ import { fileURLToPath } from "node:url";
25
+
26
+ const execFileAsync = promisify(execFile);
27
+ const SELF = fileURLToPath(import.meta.url);
28
+
29
+ async function git(worktree, args) {
30
+ const { stdout } = await execFileAsync("git", args, { cwd: worktree });
31
+ return stdout.trim();
32
+ }
33
+
34
+ function countPaths(porcelain) {
35
+ return porcelain.split("\n").filter((line) => line.trim() !== "").length;
36
+ }
37
+
38
+ /**
39
+ * Check that a worker delivered: clean worktree and at least one commit ahead
40
+ * of `base`. Returns the reasons it failed, so the caller can surface them
41
+ * instead of guessing why a stage did not advance.
42
+ */
43
+ export async function verifyWorkerTree({ worktree, base }) {
44
+ const reasons = [];
45
+
46
+ const dirty = await git(worktree, ["status", "--porcelain"]);
47
+ if (dirty !== "") {
48
+ reasons.push(`worktree is dirty: ${countPaths(dirty)} uncommitted path(s)`);
49
+ }
50
+
51
+ const ahead = Number(await git(worktree, ["rev-list", "--count", `${base}..HEAD`]));
52
+ if (!Number.isFinite(ahead) || ahead < 1) {
53
+ reasons.push(`no commit ahead of base ${base.slice(0, 7)}`);
54
+ }
55
+
56
+ return { ok: reasons.length === 0, reasons, commitsAhead: ahead };
57
+ }
58
+
59
+ // ─── CLI ─────────────────────────────────────────────────────────────────────
60
+
61
+ function parseFlags(argv) {
62
+ const flags = {};
63
+ for (let i = 0; i < argv.length; i++) {
64
+ const arg = argv[i];
65
+ if (!arg.startsWith("--")) continue;
66
+ const key = arg.slice(2);
67
+ const next = argv[i + 1];
68
+ if (next === undefined || next.startsWith("--")) {
69
+ flags[key] = true;
70
+ } else {
71
+ flags[key] = next;
72
+ i++;
73
+ }
74
+ }
75
+ return flags;
76
+ }
77
+
78
+ function required(flags, name) {
79
+ const value = flags[name];
80
+ if (typeof value !== "string" || value === "") {
81
+ console.error(`verify-worker-tree: --${name} <value> is required`);
82
+ process.exit(2);
83
+ }
84
+ return value;
85
+ }
86
+
87
+ async function main(argv) {
88
+ const flags = parseFlags(argv);
89
+ const verdict = await verifyWorkerTree({
90
+ worktree: required(flags, "worktree"),
91
+ base: required(flags, "base"),
92
+ });
93
+
94
+ if (flags.json) {
95
+ console.log(JSON.stringify(verdict, null, 2));
96
+ } else if (verdict.ok) {
97
+ console.log(`ok: ${verdict.commitsAhead} commit(s) ahead of base, tree clean`);
98
+ } else {
99
+ for (const reason of verdict.reasons) console.error(`failed: ${reason}`);
100
+ }
101
+
102
+ process.exit(verdict.ok ? 0 : 1);
103
+ }
104
+
105
+ if (process.argv[1] && resolve(process.argv[1]) === SELF) {
106
+ await main(process.argv.slice(2));
107
+ }
@@ -0,0 +1,17 @@
1
+ // Release gate: print the single-token publish command changesets/action
2
+ // should exec. The merged PR's labels arrive as a JSON array in argv[2]; the
3
+ // action splits the printed command on whitespace with no shell, so it must
4
+ // stay a plain `pnpm <script>` token pair.
5
+ import { resolvePublishCommand } from "./lib/release-gates.mjs";
6
+
7
+ function readLabels(raw) {
8
+ try {
9
+ return JSON.parse(raw);
10
+ } catch {
11
+ console.error("::error::labels argument must be a JSON array of label names.");
12
+ process.exit(1);
13
+ }
14
+ }
15
+
16
+ const labels = readLabels(process.argv[2] ?? "[]");
17
+ process.stdout.write(`${resolvePublishCommand(labels)}\n`);
@@ -0,0 +1,342 @@
1
+ lockfileVersion: '9.0'
2
+
3
+ settings:
4
+ autoInstallPeers: true
5
+ excludeLinksFromLockfile: false
6
+
7
+ importers:
8
+
9
+ .:
10
+ devDependencies:
11
+ '@types/node':
12
+ specifier: ^22.0.0
13
+ version: 22.19.18
14
+ tsx:
15
+ specifier: ^4.0.0
16
+ version: 4.21.0
17
+ typescript:
18
+ specifier: ^5.0.0
19
+ version: 5.9.3
20
+
21
+ packages:
22
+
23
+ '@esbuild/aix-ppc64@0.27.7':
24
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
25
+ engines: {node: '>=18'}
26
+ cpu: [ppc64]
27
+ os: [aix]
28
+
29
+ '@esbuild/android-arm64@0.27.7':
30
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
31
+ engines: {node: '>=18'}
32
+ cpu: [arm64]
33
+ os: [android]
34
+
35
+ '@esbuild/android-arm@0.27.7':
36
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
37
+ engines: {node: '>=18'}
38
+ cpu: [arm]
39
+ os: [android]
40
+
41
+ '@esbuild/android-x64@0.27.7':
42
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
43
+ engines: {node: '>=18'}
44
+ cpu: [x64]
45
+ os: [android]
46
+
47
+ '@esbuild/darwin-arm64@0.27.7':
48
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
49
+ engines: {node: '>=18'}
50
+ cpu: [arm64]
51
+ os: [darwin]
52
+
53
+ '@esbuild/darwin-x64@0.27.7':
54
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
55
+ engines: {node: '>=18'}
56
+ cpu: [x64]
57
+ os: [darwin]
58
+
59
+ '@esbuild/freebsd-arm64@0.27.7':
60
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
61
+ engines: {node: '>=18'}
62
+ cpu: [arm64]
63
+ os: [freebsd]
64
+
65
+ '@esbuild/freebsd-x64@0.27.7':
66
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
67
+ engines: {node: '>=18'}
68
+ cpu: [x64]
69
+ os: [freebsd]
70
+
71
+ '@esbuild/linux-arm64@0.27.7':
72
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
73
+ engines: {node: '>=18'}
74
+ cpu: [arm64]
75
+ os: [linux]
76
+
77
+ '@esbuild/linux-arm@0.27.7':
78
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
79
+ engines: {node: '>=18'}
80
+ cpu: [arm]
81
+ os: [linux]
82
+
83
+ '@esbuild/linux-ia32@0.27.7':
84
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
85
+ engines: {node: '>=18'}
86
+ cpu: [ia32]
87
+ os: [linux]
88
+
89
+ '@esbuild/linux-loong64@0.27.7':
90
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
91
+ engines: {node: '>=18'}
92
+ cpu: [loong64]
93
+ os: [linux]
94
+
95
+ '@esbuild/linux-mips64el@0.27.7':
96
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
97
+ engines: {node: '>=18'}
98
+ cpu: [mips64el]
99
+ os: [linux]
100
+
101
+ '@esbuild/linux-ppc64@0.27.7':
102
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
103
+ engines: {node: '>=18'}
104
+ cpu: [ppc64]
105
+ os: [linux]
106
+
107
+ '@esbuild/linux-riscv64@0.27.7':
108
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
109
+ engines: {node: '>=18'}
110
+ cpu: [riscv64]
111
+ os: [linux]
112
+
113
+ '@esbuild/linux-s390x@0.27.7':
114
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
115
+ engines: {node: '>=18'}
116
+ cpu: [s390x]
117
+ os: [linux]
118
+
119
+ '@esbuild/linux-x64@0.27.7':
120
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
121
+ engines: {node: '>=18'}
122
+ cpu: [x64]
123
+ os: [linux]
124
+
125
+ '@esbuild/netbsd-arm64@0.27.7':
126
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
127
+ engines: {node: '>=18'}
128
+ cpu: [arm64]
129
+ os: [netbsd]
130
+
131
+ '@esbuild/netbsd-x64@0.27.7':
132
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
133
+ engines: {node: '>=18'}
134
+ cpu: [x64]
135
+ os: [netbsd]
136
+
137
+ '@esbuild/openbsd-arm64@0.27.7':
138
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
139
+ engines: {node: '>=18'}
140
+ cpu: [arm64]
141
+ os: [openbsd]
142
+
143
+ '@esbuild/openbsd-x64@0.27.7':
144
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
145
+ engines: {node: '>=18'}
146
+ cpu: [x64]
147
+ os: [openbsd]
148
+
149
+ '@esbuild/openharmony-arm64@0.27.7':
150
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
151
+ engines: {node: '>=18'}
152
+ cpu: [arm64]
153
+ os: [openharmony]
154
+
155
+ '@esbuild/sunos-x64@0.27.7':
156
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
157
+ engines: {node: '>=18'}
158
+ cpu: [x64]
159
+ os: [sunos]
160
+
161
+ '@esbuild/win32-arm64@0.27.7':
162
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
163
+ engines: {node: '>=18'}
164
+ cpu: [arm64]
165
+ os: [win32]
166
+
167
+ '@esbuild/win32-ia32@0.27.7':
168
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
169
+ engines: {node: '>=18'}
170
+ cpu: [ia32]
171
+ os: [win32]
172
+
173
+ '@esbuild/win32-x64@0.27.7':
174
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
175
+ engines: {node: '>=18'}
176
+ cpu: [x64]
177
+ os: [win32]
178
+
179
+ '@types/node@22.19.18':
180
+ resolution: {integrity: sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ==}
181
+
182
+ esbuild@0.27.7:
183
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
184
+ engines: {node: '>=18'}
185
+ hasBin: true
186
+
187
+ fsevents@2.3.3:
188
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
189
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
190
+ os: [darwin]
191
+
192
+ get-tsconfig@4.14.0:
193
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
194
+
195
+ resolve-pkg-maps@1.0.0:
196
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
197
+
198
+ tsx@4.21.0:
199
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
200
+ engines: {node: '>=18.0.0'}
201
+ hasBin: true
202
+
203
+ typescript@5.9.3:
204
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
205
+ engines: {node: '>=14.17'}
206
+ hasBin: true
207
+
208
+ undici-types@6.21.0:
209
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
210
+
211
+ snapshots:
212
+
213
+ '@esbuild/aix-ppc64@0.27.7':
214
+ optional: true
215
+
216
+ '@esbuild/android-arm64@0.27.7':
217
+ optional: true
218
+
219
+ '@esbuild/android-arm@0.27.7':
220
+ optional: true
221
+
222
+ '@esbuild/android-x64@0.27.7':
223
+ optional: true
224
+
225
+ '@esbuild/darwin-arm64@0.27.7':
226
+ optional: true
227
+
228
+ '@esbuild/darwin-x64@0.27.7':
229
+ optional: true
230
+
231
+ '@esbuild/freebsd-arm64@0.27.7':
232
+ optional: true
233
+
234
+ '@esbuild/freebsd-x64@0.27.7':
235
+ optional: true
236
+
237
+ '@esbuild/linux-arm64@0.27.7':
238
+ optional: true
239
+
240
+ '@esbuild/linux-arm@0.27.7':
241
+ optional: true
242
+
243
+ '@esbuild/linux-ia32@0.27.7':
244
+ optional: true
245
+
246
+ '@esbuild/linux-loong64@0.27.7':
247
+ optional: true
248
+
249
+ '@esbuild/linux-mips64el@0.27.7':
250
+ optional: true
251
+
252
+ '@esbuild/linux-ppc64@0.27.7':
253
+ optional: true
254
+
255
+ '@esbuild/linux-riscv64@0.27.7':
256
+ optional: true
257
+
258
+ '@esbuild/linux-s390x@0.27.7':
259
+ optional: true
260
+
261
+ '@esbuild/linux-x64@0.27.7':
262
+ optional: true
263
+
264
+ '@esbuild/netbsd-arm64@0.27.7':
265
+ optional: true
266
+
267
+ '@esbuild/netbsd-x64@0.27.7':
268
+ optional: true
269
+
270
+ '@esbuild/openbsd-arm64@0.27.7':
271
+ optional: true
272
+
273
+ '@esbuild/openbsd-x64@0.27.7':
274
+ optional: true
275
+
276
+ '@esbuild/openharmony-arm64@0.27.7':
277
+ optional: true
278
+
279
+ '@esbuild/sunos-x64@0.27.7':
280
+ optional: true
281
+
282
+ '@esbuild/win32-arm64@0.27.7':
283
+ optional: true
284
+
285
+ '@esbuild/win32-ia32@0.27.7':
286
+ optional: true
287
+
288
+ '@esbuild/win32-x64@0.27.7':
289
+ optional: true
290
+
291
+ '@types/node@22.19.18':
292
+ dependencies:
293
+ undici-types: 6.21.0
294
+
295
+ esbuild@0.27.7:
296
+ optionalDependencies:
297
+ '@esbuild/aix-ppc64': 0.27.7
298
+ '@esbuild/android-arm': 0.27.7
299
+ '@esbuild/android-arm64': 0.27.7
300
+ '@esbuild/android-x64': 0.27.7
301
+ '@esbuild/darwin-arm64': 0.27.7
302
+ '@esbuild/darwin-x64': 0.27.7
303
+ '@esbuild/freebsd-arm64': 0.27.7
304
+ '@esbuild/freebsd-x64': 0.27.7
305
+ '@esbuild/linux-arm': 0.27.7
306
+ '@esbuild/linux-arm64': 0.27.7
307
+ '@esbuild/linux-ia32': 0.27.7
308
+ '@esbuild/linux-loong64': 0.27.7
309
+ '@esbuild/linux-mips64el': 0.27.7
310
+ '@esbuild/linux-ppc64': 0.27.7
311
+ '@esbuild/linux-riscv64': 0.27.7
312
+ '@esbuild/linux-s390x': 0.27.7
313
+ '@esbuild/linux-x64': 0.27.7
314
+ '@esbuild/netbsd-arm64': 0.27.7
315
+ '@esbuild/netbsd-x64': 0.27.7
316
+ '@esbuild/openbsd-arm64': 0.27.7
317
+ '@esbuild/openbsd-x64': 0.27.7
318
+ '@esbuild/openharmony-arm64': 0.27.7
319
+ '@esbuild/sunos-x64': 0.27.7
320
+ '@esbuild/win32-arm64': 0.27.7
321
+ '@esbuild/win32-ia32': 0.27.7
322
+ '@esbuild/win32-x64': 0.27.7
323
+
324
+ fsevents@2.3.3:
325
+ optional: true
326
+
327
+ get-tsconfig@4.14.0:
328
+ dependencies:
329
+ resolve-pkg-maps: 1.0.0
330
+
331
+ resolve-pkg-maps@1.0.0: {}
332
+
333
+ tsx@4.21.0:
334
+ dependencies:
335
+ esbuild: 0.27.7
336
+ get-tsconfig: 4.14.0
337
+ optionalDependencies:
338
+ fsevents: 2.3.3
339
+
340
+ typescript@5.9.3: {}
341
+
342
+ undici-types@6.21.0: {}