@planu/cli 5.0.0 → 5.2.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.
- package/CHANGELOG.md +76 -1
- package/dist/cli/commands/doctor.d.ts +22 -0
- package/dist/cli/commands/doctor.js +176 -2
- package/dist/cli/commands/spec.js +10 -1
- package/dist/core/spec-validator.js +32 -18
- package/dist/engine/autopilot/bootstrap.js +27 -0
- package/dist/engine/core-bridge.d.ts +28 -0
- package/dist/engine/core-bridge.js +67 -0
- package/dist/engine/drift-monitor.js +16 -18
- package/dist/engine/evidence-gates/artifact-reader.d.ts +2 -0
- package/dist/engine/evidence-gates/artifact-reader.js +59 -2
- package/dist/engine/evidence-gates/evidence-autofill.d.ts +10 -0
- package/dist/engine/evidence-gates/evidence-autofill.js +148 -0
- package/dist/engine/evidence-gates/evidence-skeletons.d.ts +19 -0
- package/dist/engine/evidence-gates/evidence-skeletons.js +69 -0
- package/dist/engine/execution/operation-journal.js +10 -4
- package/dist/engine/living-spec/hash-tracker.js +26 -28
- package/dist/engine/minimality/policy-loader.js +247 -6
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +14 -14
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +14 -14
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +14 -14
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +14 -14
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +14 -14
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +14 -14
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +14 -14
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +14 -14
- package/dist/engine/reverse-engineer/api-detector.js +2 -13
- package/dist/engine/reverse-engineer/complexity-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/config-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/dependency-graph.js +2 -13
- package/dist/engine/reverse-engineer/test-analyzer.js +2 -13
- package/dist/engine/reverse-engineer/walk-ignore.d.ts +3 -0
- package/dist/engine/reverse-engineer/walk-ignore.js +26 -0
- package/dist/engine/spec-format/acceptance-criteria.js +13 -12
- package/dist/engine/spec-format/text-fences.js +20 -2
- package/dist/engine/spec-language/english-only.d.ts +14 -0
- package/dist/engine/spec-language/english-only.js +58 -0
- package/dist/engine/spec-migrator/criteria-scanner.js +11 -13
- package/dist/engine/spec-migrator/drift-detector.js +10 -12
- package/dist/engine/spec-state-syncer.js +1 -1
- package/dist/engine/timing/budget.js +5 -1
- package/dist/engine/vector-store/tfidf.d.ts +13 -9
- package/dist/engine/vector-store/tfidf.js +26 -0
- package/dist/engine/worker-config-loader.d.ts +1 -1
- package/dist/engine/worker-config-loader.js +1 -11
- package/dist/engine/workers/schema.d.ts +0 -8
- package/dist/engine/workers/schema.js +0 -1
- package/dist/i18n/index.d.ts +18 -0
- package/dist/i18n/index.js +40 -1
- package/dist/server/routes/specs.js +7 -5
- package/dist/storage/global-store.d.ts +9 -0
- package/dist/storage/global-store.js +23 -0
- package/dist/storage/semantic-index-store.d.ts +23 -0
- package/dist/storage/semantic-index-store.js +105 -0
- package/dist/storage/status-store/self-healing.js +15 -17
- package/dist/tools/challenge-spec/scenarios-utils.js +5 -1
- package/dist/tools/challenge-spec-helpers.d.ts +10 -1
- package/dist/tools/challenge-spec-helpers.js +63 -22
- package/dist/tools/challenge-spec.js +18 -3
- package/dist/tools/check-readiness.js +37 -13
- package/dist/tools/create-spec/spec-builder.d.ts +7 -0
- package/dist/tools/create-spec/spec-builder.js +19 -4
- package/dist/tools/create-spec.js +216 -101
- package/dist/tools/init-project/handler.js +78 -25
- package/dist/tools/learn.js +10 -8
- package/dist/tools/register-spec-tools/core-spec-tools.js +13 -12
- package/dist/tools/registry/auth.js +1 -11
- package/dist/tools/semantic-search-handler.js +5 -6
- package/dist/tools/status-handler.js +19 -6
- package/dist/tools/sync-spec-state-handler.js +49 -1
- package/dist/tools/update-status/batch.d.ts +6 -2
- package/dist/tools/update-status/batch.js +58 -1
- package/dist/tools/update-status/dod-gates.d.ts +16 -1
- package/dist/tools/update-status/dod-gates.js +191 -1
- package/dist/tools/update-status/done-receipt-verifier.d.ts +8 -0
- package/dist/tools/update-status/done-receipt-verifier.js +37 -2
- package/dist/tools/update-status/evidence-gate.d.ts +4 -0
- package/dist/tools/update-status/evidence-gate.js +67 -2
- package/dist/tools/update-status/file-sync.d.ts +2 -2
- package/dist/tools/update-status/index.d.ts +23 -1
- package/dist/tools/update-status/index.js +201 -24
- package/dist/tools/update-status/transition-guard.js +13 -1
- package/dist/tools/validation-loop-handler.js +16 -15
- package/dist/tools/workspace-dashboard-handler.js +38 -0
- package/dist/types/evidence-autofill.d.ts +34 -0
- package/dist/types/evidence-autofill.js +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/spec/core.d.ts +6 -0
- package/dist/types/spec/inputs.d.ts +7 -2
- package/dist/types/spec-format.d.ts +1 -1
- package/dist/types/spec-language-translation.d.ts +18 -0
- package/dist/types/spec-language-translation.js +5 -0
- package/dist/types/spec-registry.d.ts +0 -2
- package/dist/types/status.d.ts +2 -0
- package/dist/types/transition-log.d.ts +1 -1
- package/dist/types/validation.d.ts +8 -2
- package/dist/types/vector-store.d.ts +18 -0
- package/dist/types/workers.d.ts +0 -3
- package/package.json +11 -10
- package/planu-native.json +8 -29
- package/planu-plugin.json +1 -1
- package/dist/engine/security/cve-refresher.d.ts +0 -12
- package/dist/engine/security/cve-refresher.js +0 -128
|
@@ -1,9 +1,239 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { lstat, open, readFile, realpath } from 'node:fs/promises';
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
+
const BUNDLED_POLICY_ID = 'bundled:minimal-implementation-gate';
|
|
6
|
+
const PROJECT_CONFIG_ID = 'project:planu.json#minimalImplementationGate';
|
|
7
|
+
const REDACTED_POLICY_MESSAGE = 'Minimality policy source is unavailable (external:redacted).';
|
|
8
|
+
const REDACTED_BUNDLED_MESSAGE = 'Bundled minimality policy is unavailable (external:redacted).';
|
|
9
|
+
const MAX_POLICY_BYTES = 1024 * 1024;
|
|
10
|
+
const POLICY_READ_CHUNK_BYTES = 64 * 1024;
|
|
11
|
+
class PolicySourceError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
constructor(code) {
|
|
14
|
+
super(code === 'MINIMALITY_BUNDLED_POLICY_UNAVAILABLE'
|
|
15
|
+
? REDACTED_BUNDLED_MESSAGE
|
|
16
|
+
: REDACTED_POLICY_MESSAGE);
|
|
17
|
+
this.name = 'PolicySourceError';
|
|
18
|
+
this.code = code;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
4
21
|
function configPath() {
|
|
5
22
|
return join(dirname(fileURLToPath(import.meta.url)), '../../config/minimal-implementation-gate.json');
|
|
6
23
|
}
|
|
24
|
+
function isOutside(root, candidate) {
|
|
25
|
+
const pathFromRoot = relative(root, candidate);
|
|
26
|
+
return pathFromRoot === '..' || pathFromRoot.startsWith(`..${sep}`) || isAbsolute(pathFromRoot);
|
|
27
|
+
}
|
|
28
|
+
function nodeErrorCode(error) {
|
|
29
|
+
return typeof error === 'object' && error !== null && 'code' in error
|
|
30
|
+
? String(error.code)
|
|
31
|
+
: undefined;
|
|
32
|
+
}
|
|
33
|
+
function sourceErrorFor(error) {
|
|
34
|
+
if (error instanceof PolicySourceError) {
|
|
35
|
+
return error;
|
|
36
|
+
}
|
|
37
|
+
switch (nodeErrorCode(error)) {
|
|
38
|
+
case 'ENOENT':
|
|
39
|
+
case 'ENOTDIR':
|
|
40
|
+
return new PolicySourceError('MINIMALITY_POLICY_SOURCE_NOT_FOUND');
|
|
41
|
+
case 'ELOOP':
|
|
42
|
+
return new PolicySourceError('MINIMALITY_POLICY_SOURCE_SYMLINK_REJECTED');
|
|
43
|
+
case 'EISDIR':
|
|
44
|
+
return new PolicySourceError('MINIMALITY_POLICY_SOURCE_NOT_REGULAR');
|
|
45
|
+
case undefined:
|
|
46
|
+
default:
|
|
47
|
+
return new PolicySourceError('MINIMALITY_POLICY_SOURCE_UNREADABLE');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function sameIdentity(left, right) {
|
|
51
|
+
return left.dev === right.dev && left.ino === right.ino;
|
|
52
|
+
}
|
|
53
|
+
function sameStableMetadata(left, right) {
|
|
54
|
+
return (sameIdentity(left, right) &&
|
|
55
|
+
left.size === right.size &&
|
|
56
|
+
left.mtimeNs === right.mtimeNs &&
|
|
57
|
+
left.ctimeNs === right.ctimeNs);
|
|
58
|
+
}
|
|
59
|
+
async function assertNoSymlinkComponents(projectRoot, candidate) {
|
|
60
|
+
const relativePath = relative(projectRoot, candidate);
|
|
61
|
+
let current = projectRoot;
|
|
62
|
+
for (const component of relativePath.split(sep).filter(Boolean)) {
|
|
63
|
+
current = join(current, component);
|
|
64
|
+
let status;
|
|
65
|
+
try {
|
|
66
|
+
status = await lstat(current);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw sourceErrorFor(error);
|
|
70
|
+
}
|
|
71
|
+
if (status.isSymbolicLink()) {
|
|
72
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_SYMLINK_REJECTED');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function validateExplicitPath(path) {
|
|
77
|
+
if (path.length === 0 ||
|
|
78
|
+
path.length > 4096 ||
|
|
79
|
+
/^project:/iu.test(path) ||
|
|
80
|
+
path.includes('\0') ||
|
|
81
|
+
path.includes('?') ||
|
|
82
|
+
path.includes('#') ||
|
|
83
|
+
(sep === '/' && path.includes('\\'))) {
|
|
84
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_INVALID_PATH');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function readBoundedPolicy(handle) {
|
|
88
|
+
const chunks = [];
|
|
89
|
+
let offset = 0;
|
|
90
|
+
while (offset <= MAX_POLICY_BYTES) {
|
|
91
|
+
const remaining = MAX_POLICY_BYTES + 1 - offset;
|
|
92
|
+
const chunk = Buffer.allocUnsafe(Math.min(POLICY_READ_CHUNK_BYTES, remaining));
|
|
93
|
+
const { bytesRead } = await handle.read(chunk, 0, chunk.length, offset);
|
|
94
|
+
if (bytesRead === 0) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
offset += bytesRead;
|
|
98
|
+
if (offset > MAX_POLICY_BYTES) {
|
|
99
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_UNREADABLE');
|
|
100
|
+
}
|
|
101
|
+
chunks.push(chunk.subarray(0, bytesRead));
|
|
102
|
+
}
|
|
103
|
+
return Buffer.concat(chunks, offset).toString('utf8');
|
|
104
|
+
}
|
|
105
|
+
async function resolvePolicySource(projectPath, explicitPath) {
|
|
106
|
+
if (explicitPath === undefined) {
|
|
107
|
+
return { path: configPath(), identifier: BUNDLED_POLICY_ID, bundled: true };
|
|
108
|
+
}
|
|
109
|
+
validateExplicitPath(explicitPath);
|
|
110
|
+
if (projectPath === undefined) {
|
|
111
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_OUTSIDE_ALLOWED_ROOT');
|
|
112
|
+
}
|
|
113
|
+
const lexicalRoot = resolve(projectPath);
|
|
114
|
+
const candidate = isAbsolute(explicitPath)
|
|
115
|
+
? resolve(explicitPath)
|
|
116
|
+
: resolve(lexicalRoot, explicitPath);
|
|
117
|
+
if (isOutside(lexicalRoot, candidate)) {
|
|
118
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_OUTSIDE_ALLOWED_ROOT');
|
|
119
|
+
}
|
|
120
|
+
let canonicalRoot;
|
|
121
|
+
try {
|
|
122
|
+
canonicalRoot = await realpath(lexicalRoot);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_OUTSIDE_ALLOWED_ROOT');
|
|
126
|
+
}
|
|
127
|
+
await assertNoSymlinkComponents(lexicalRoot, candidate);
|
|
128
|
+
let candidateStatus;
|
|
129
|
+
let canonicalCandidate;
|
|
130
|
+
try {
|
|
131
|
+
[candidateStatus, canonicalCandidate] = await Promise.all([
|
|
132
|
+
lstat(candidate),
|
|
133
|
+
realpath(candidate),
|
|
134
|
+
]);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
throw sourceErrorFor(error);
|
|
138
|
+
}
|
|
139
|
+
if (candidateStatus.isSymbolicLink()) {
|
|
140
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_SYMLINK_REJECTED');
|
|
141
|
+
}
|
|
142
|
+
if (!candidateStatus.isFile()) {
|
|
143
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_NOT_REGULAR');
|
|
144
|
+
}
|
|
145
|
+
if (isOutside(canonicalRoot, canonicalCandidate)) {
|
|
146
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_OUTSIDE_ALLOWED_ROOT');
|
|
147
|
+
}
|
|
148
|
+
const portablePath = relative(canonicalRoot, canonicalCandidate)
|
|
149
|
+
.replaceAll('\\', '/')
|
|
150
|
+
.normalize('NFC');
|
|
151
|
+
if (portablePath.length === 0 ||
|
|
152
|
+
portablePath.startsWith('../') ||
|
|
153
|
+
portablePath.startsWith('project:') ||
|
|
154
|
+
/^[a-z]:/iu.test(portablePath) ||
|
|
155
|
+
isAbsolute(portablePath)) {
|
|
156
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_INVALID_PATH');
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
path: candidate,
|
|
160
|
+
identifier: `project:${portablePath}`,
|
|
161
|
+
bundled: false,
|
|
162
|
+
projectRoot: lexicalRoot,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async function readStableJson(source) {
|
|
166
|
+
try {
|
|
167
|
+
if (source.projectRoot !== undefined) {
|
|
168
|
+
await assertNoSymlinkComponents(source.projectRoot, source.path);
|
|
169
|
+
}
|
|
170
|
+
const canonicalBefore = await realpath(source.path);
|
|
171
|
+
const pathBefore = await lstat(source.path, { bigint: true });
|
|
172
|
+
if (pathBefore.isSymbolicLink()) {
|
|
173
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_SYMLINK_REJECTED');
|
|
174
|
+
}
|
|
175
|
+
if (!pathBefore.isFile()) {
|
|
176
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_NOT_REGULAR');
|
|
177
|
+
}
|
|
178
|
+
let handle;
|
|
179
|
+
try {
|
|
180
|
+
handle = await open(source.path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
if (nodeErrorCode(error) === 'ELOOP') {
|
|
184
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_CHANGED');
|
|
185
|
+
}
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
const handleBefore = await handle.stat({ bigint: true });
|
|
190
|
+
if (!handleBefore.isFile() || !sameIdentity(pathBefore, handleBefore)) {
|
|
191
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_CHANGED');
|
|
192
|
+
}
|
|
193
|
+
if (handleBefore.size > BigInt(MAX_POLICY_BYTES)) {
|
|
194
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_UNREADABLE');
|
|
195
|
+
}
|
|
196
|
+
const content = await readBoundedPolicy(handle);
|
|
197
|
+
let handleAfter;
|
|
198
|
+
let pathAfter;
|
|
199
|
+
let canonicalAfter;
|
|
200
|
+
try {
|
|
201
|
+
[handleAfter, pathAfter, canonicalAfter] = await Promise.all([
|
|
202
|
+
handle.stat({ bigint: true }),
|
|
203
|
+
lstat(source.path, { bigint: true }),
|
|
204
|
+
realpath(source.path),
|
|
205
|
+
]);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_CHANGED');
|
|
209
|
+
}
|
|
210
|
+
if (canonicalBefore !== canonicalAfter ||
|
|
211
|
+
!sameStableMetadata(pathBefore, pathAfter) ||
|
|
212
|
+
!sameStableMetadata(handleBefore, handleAfter) ||
|
|
213
|
+
!sameIdentity(pathAfter, handleAfter)) {
|
|
214
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_CHANGED');
|
|
215
|
+
}
|
|
216
|
+
if (source.projectRoot !== undefined) {
|
|
217
|
+
try {
|
|
218
|
+
await assertNoSymlinkComponents(source.projectRoot, source.path);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
throw new PolicySourceError('MINIMALITY_POLICY_SOURCE_CHANGED');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return JSON.parse(content);
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
await handle.close();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
if (source.bundled) {
|
|
232
|
+
throw new PolicySourceError('MINIMALITY_BUNDLED_POLICY_UNAVAILABLE');
|
|
233
|
+
}
|
|
234
|
+
throw sourceErrorFor(error);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
7
237
|
function isRecord(value) {
|
|
8
238
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
9
239
|
}
|
|
@@ -109,10 +339,21 @@ async function readJson(path) {
|
|
|
109
339
|
return JSON.parse(await readFile(path, 'utf-8'));
|
|
110
340
|
}
|
|
111
341
|
export async function loadMinimalImplementationPolicy(projectPath, options = {}) {
|
|
112
|
-
const
|
|
113
|
-
|
|
342
|
+
const source = await resolvePolicySource(projectPath, options.defaultPolicyPath);
|
|
343
|
+
let defaultPolicy;
|
|
344
|
+
try {
|
|
345
|
+
defaultPolicy = validatePolicy(await readStableJson(source));
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
if (error instanceof PolicySourceError) {
|
|
349
|
+
throw error;
|
|
350
|
+
}
|
|
351
|
+
throw source.bundled
|
|
352
|
+
? new PolicySourceError('MINIMALITY_BUNDLED_POLICY_UNAVAILABLE')
|
|
353
|
+
: new PolicySourceError('MINIMALITY_POLICY_SOURCE_UNREADABLE');
|
|
354
|
+
}
|
|
114
355
|
const evidence = [
|
|
115
|
-
{ source: 'policy', key:
|
|
356
|
+
{ source: 'policy', key: source.identifier },
|
|
116
357
|
];
|
|
117
358
|
let merged = defaultPolicy;
|
|
118
359
|
if (projectPath !== undefined) {
|
|
@@ -121,7 +362,7 @@ export async function loadMinimalImplementationPolicy(projectPath, options = {})
|
|
|
121
362
|
const config = await readJson(planuConfigPath);
|
|
122
363
|
if (isRecord(config) && isRecord(config.minimalImplementationGate)) {
|
|
123
364
|
merged = validatePolicy(mergeDeep(defaultPolicy, config.minimalImplementationGate));
|
|
124
|
-
evidence.push({ source: 'project-config', key:
|
|
365
|
+
evidence.push({ source: 'project-config', key: PROJECT_CONFIG_ID });
|
|
125
366
|
}
|
|
126
367
|
}
|
|
127
368
|
catch {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"cliVersion": "5.
|
|
4
|
-
"engineVersion": "5.
|
|
5
|
-
"buildId": "1-5.
|
|
3
|
+
"cliVersion": "5.2.0",
|
|
4
|
+
"engineVersion": "5.2.0",
|
|
5
|
+
"buildId": "1-5.2.0-aarch64-apple-darwin",
|
|
6
6
|
"protocolAbi": 1,
|
|
7
7
|
"capabilityAbi": 2,
|
|
8
8
|
"nodeApiAbi": 4,
|
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
"platform": "darwin",
|
|
18
18
|
"arch": "arm64",
|
|
19
19
|
"libc": null,
|
|
20
|
-
"artifactSha256": "
|
|
20
|
+
"artifactSha256": "d651b32dc2ec3d58adc720400cab3cfd0114388d2697c861038b913cda3ad711",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-arm64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "28c7421f2ee232830c3150449c51d89a494e2a4841a39af4348dcaaccb27f6cc"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
28
|
+
"sourceCommit": "121065e63e9fd2c067367e286ecba619ecc3f18a",
|
|
29
29
|
"sourceTreeDirty": false,
|
|
30
30
|
"sourceDateEpoch": 1,
|
|
31
31
|
"rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
|
|
@@ -34,6 +34,6 @@
|
|
|
34
34
|
"signature": {
|
|
35
35
|
"algorithm": "Ed25519",
|
|
36
36
|
"keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
|
|
37
|
-
"value": "
|
|
37
|
+
"value": "9R5L33t90yHh/8SXCNpjSRbCoIJ8wooiMtvkHpCKr1ByDK13NiUuH3v0uLiquqXbf4r6mMe5K4bWQ63nm/XQBg=="
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"version": 1,
|
|
5
5
|
"metadata": {
|
|
6
6
|
"component": {
|
|
7
|
-
"bom-ref": "pkg:cargo/planu-core@5.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.2.0",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.
|
|
10
|
+
"version": "5.2.0",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "d651b32dc2ec3d58adc720400cab3cfd0114388d2697c861038b913cda3ad711"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -291,9 +291,9 @@
|
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
293
|
"type": "library",
|
|
294
|
-
"bom-ref": "pkg:cargo/globset@0.4.
|
|
294
|
+
"bom-ref": "pkg:cargo/globset@0.4.20",
|
|
295
295
|
"name": "globset",
|
|
296
|
-
"version": "0.4.
|
|
296
|
+
"version": "0.4.20",
|
|
297
297
|
"externalReferences": [
|
|
298
298
|
{
|
|
299
299
|
"type": "distribution",
|
|
@@ -529,9 +529,9 @@
|
|
|
529
529
|
},
|
|
530
530
|
{
|
|
531
531
|
"type": "library",
|
|
532
|
-
"bom-ref": "pkg:cargo/regex-automata@0.4.
|
|
532
|
+
"bom-ref": "pkg:cargo/regex-automata@0.4.18",
|
|
533
533
|
"name": "regex-automata",
|
|
534
|
-
"version": "0.4.
|
|
534
|
+
"version": "0.4.18",
|
|
535
535
|
"externalReferences": [
|
|
536
536
|
{
|
|
537
537
|
"type": "distribution",
|
|
@@ -1046,12 +1046,12 @@
|
|
|
1046
1046
|
]
|
|
1047
1047
|
},
|
|
1048
1048
|
{
|
|
1049
|
-
"ref": "pkg:cargo/globset@0.4.
|
|
1049
|
+
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
1052
|
"pkg:cargo/bstr@1.13.0",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1054
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1056
1056
|
]
|
|
1057
1057
|
},
|
|
@@ -1069,10 +1069,10 @@
|
|
|
1069
1069
|
"ref": "pkg:cargo/ignore@0.4.25",
|
|
1070
1070
|
"dependsOn": [
|
|
1071
1071
|
"pkg:cargo/crossbeam-deque@0.8.7",
|
|
1072
|
-
"pkg:cargo/globset@0.4.
|
|
1072
|
+
"pkg:cargo/globset@0.4.20",
|
|
1073
1073
|
"pkg:cargo/log@0.4.33",
|
|
1074
1074
|
"pkg:cargo/memchr@2.8.3",
|
|
1075
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1075
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1076
1076
|
"pkg:cargo/same-file@1.0.6",
|
|
1077
1077
|
"pkg:cargo/walkdir@2.5.0",
|
|
1078
1078
|
"pkg:cargo/winapi-util@0.1.11"
|
|
@@ -1106,7 +1106,7 @@
|
|
|
1106
1106
|
"dependsOn": []
|
|
1107
1107
|
},
|
|
1108
1108
|
{
|
|
1109
|
-
"ref": "pkg:cargo/planu-core@5.
|
|
1109
|
+
"ref": "pkg:cargo/planu-core@5.2.0",
|
|
1110
1110
|
"dependsOn": [
|
|
1111
1111
|
"pkg:cargo/core-foundation@0.10.1",
|
|
1112
1112
|
"pkg:cargo/hmac@0.12.1",
|
|
@@ -1151,7 +1151,7 @@
|
|
|
1151
1151
|
]
|
|
1152
1152
|
},
|
|
1153
1153
|
{
|
|
1154
|
-
"ref": "pkg:cargo/regex-automata@0.4.
|
|
1154
|
+
"ref": "pkg:cargo/regex-automata@0.4.18",
|
|
1155
1155
|
"dependsOn": [
|
|
1156
1156
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1157
1157
|
"pkg:cargo/memchr@2.8.3",
|
|
@@ -1167,7 +1167,7 @@
|
|
|
1167
1167
|
"dependsOn": [
|
|
1168
1168
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1169
1169
|
"pkg:cargo/memchr@2.8.3",
|
|
1170
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1170
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1171
1171
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1172
1172
|
]
|
|
1173
1173
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"cliVersion": "5.
|
|
4
|
-
"engineVersion": "5.
|
|
5
|
-
"buildId": "1-5.
|
|
3
|
+
"cliVersion": "5.2.0",
|
|
4
|
+
"engineVersion": "5.2.0",
|
|
5
|
+
"buildId": "1-5.2.0-x86_64-apple-darwin",
|
|
6
6
|
"protocolAbi": 1,
|
|
7
7
|
"capabilityAbi": 2,
|
|
8
8
|
"nodeApiAbi": 4,
|
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
"platform": "darwin",
|
|
18
18
|
"arch": "x64",
|
|
19
19
|
"libc": null,
|
|
20
|
-
"artifactSha256": "
|
|
20
|
+
"artifactSha256": "931a0f6bc94744521f33e6ac46fb7293fe49b14d225d76446e27dd7117f12ad9",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-x64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "ec531e41f6e0ef14b7fb2727370f817b761d28ae510c93790555796f5e2fac19"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
28
|
+
"sourceCommit": "121065e63e9fd2c067367e286ecba619ecc3f18a",
|
|
29
29
|
"sourceTreeDirty": false,
|
|
30
30
|
"sourceDateEpoch": 1,
|
|
31
31
|
"rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
|
|
@@ -34,6 +34,6 @@
|
|
|
34
34
|
"signature": {
|
|
35
35
|
"algorithm": "Ed25519",
|
|
36
36
|
"keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
|
|
37
|
-
"value": "
|
|
37
|
+
"value": "mgppJ+aunLo8AOPqEdBnmAXfDYzWQzdmehp7AASRUk8Wyk9/mQm9A22K5T5NiUN3flTqQCLPT6ZN2L9eWp5VCw=="
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"version": 1,
|
|
5
5
|
"metadata": {
|
|
6
6
|
"component": {
|
|
7
|
-
"bom-ref": "pkg:cargo/planu-core@5.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.2.0",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.
|
|
10
|
+
"version": "5.2.0",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "931a0f6bc94744521f33e6ac46fb7293fe49b14d225d76446e27dd7117f12ad9"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -291,9 +291,9 @@
|
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
293
|
"type": "library",
|
|
294
|
-
"bom-ref": "pkg:cargo/globset@0.4.
|
|
294
|
+
"bom-ref": "pkg:cargo/globset@0.4.20",
|
|
295
295
|
"name": "globset",
|
|
296
|
-
"version": "0.4.
|
|
296
|
+
"version": "0.4.20",
|
|
297
297
|
"externalReferences": [
|
|
298
298
|
{
|
|
299
299
|
"type": "distribution",
|
|
@@ -529,9 +529,9 @@
|
|
|
529
529
|
},
|
|
530
530
|
{
|
|
531
531
|
"type": "library",
|
|
532
|
-
"bom-ref": "pkg:cargo/regex-automata@0.4.
|
|
532
|
+
"bom-ref": "pkg:cargo/regex-automata@0.4.18",
|
|
533
533
|
"name": "regex-automata",
|
|
534
|
-
"version": "0.4.
|
|
534
|
+
"version": "0.4.18",
|
|
535
535
|
"externalReferences": [
|
|
536
536
|
{
|
|
537
537
|
"type": "distribution",
|
|
@@ -1046,12 +1046,12 @@
|
|
|
1046
1046
|
]
|
|
1047
1047
|
},
|
|
1048
1048
|
{
|
|
1049
|
-
"ref": "pkg:cargo/globset@0.4.
|
|
1049
|
+
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
1052
|
"pkg:cargo/bstr@1.13.0",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1054
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1056
1056
|
]
|
|
1057
1057
|
},
|
|
@@ -1069,10 +1069,10 @@
|
|
|
1069
1069
|
"ref": "pkg:cargo/ignore@0.4.25",
|
|
1070
1070
|
"dependsOn": [
|
|
1071
1071
|
"pkg:cargo/crossbeam-deque@0.8.7",
|
|
1072
|
-
"pkg:cargo/globset@0.4.
|
|
1072
|
+
"pkg:cargo/globset@0.4.20",
|
|
1073
1073
|
"pkg:cargo/log@0.4.33",
|
|
1074
1074
|
"pkg:cargo/memchr@2.8.3",
|
|
1075
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1075
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1076
1076
|
"pkg:cargo/same-file@1.0.6",
|
|
1077
1077
|
"pkg:cargo/walkdir@2.5.0",
|
|
1078
1078
|
"pkg:cargo/winapi-util@0.1.11"
|
|
@@ -1106,7 +1106,7 @@
|
|
|
1106
1106
|
"dependsOn": []
|
|
1107
1107
|
},
|
|
1108
1108
|
{
|
|
1109
|
-
"ref": "pkg:cargo/planu-core@5.
|
|
1109
|
+
"ref": "pkg:cargo/planu-core@5.2.0",
|
|
1110
1110
|
"dependsOn": [
|
|
1111
1111
|
"pkg:cargo/core-foundation@0.10.1",
|
|
1112
1112
|
"pkg:cargo/hmac@0.12.1",
|
|
@@ -1151,7 +1151,7 @@
|
|
|
1151
1151
|
]
|
|
1152
1152
|
},
|
|
1153
1153
|
{
|
|
1154
|
-
"ref": "pkg:cargo/regex-automata@0.4.
|
|
1154
|
+
"ref": "pkg:cargo/regex-automata@0.4.18",
|
|
1155
1155
|
"dependsOn": [
|
|
1156
1156
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1157
1157
|
"pkg:cargo/memchr@2.8.3",
|
|
@@ -1167,7 +1167,7 @@
|
|
|
1167
1167
|
"dependsOn": [
|
|
1168
1168
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1169
1169
|
"pkg:cargo/memchr@2.8.3",
|
|
1170
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1170
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1171
1171
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1172
1172
|
]
|
|
1173
1173
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"cliVersion": "5.
|
|
4
|
-
"engineVersion": "5.
|
|
5
|
-
"buildId": "1-5.
|
|
3
|
+
"cliVersion": "5.2.0",
|
|
4
|
+
"engineVersion": "5.2.0",
|
|
5
|
+
"buildId": "1-5.2.0-aarch64-unknown-linux-gnu",
|
|
6
6
|
"protocolAbi": 1,
|
|
7
7
|
"capabilityAbi": 2,
|
|
8
8
|
"nodeApiAbi": 4,
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
"platform": "linux",
|
|
17
17
|
"arch": "arm64",
|
|
18
18
|
"libc": "glibc",
|
|
19
|
-
"artifactSha256": "
|
|
19
|
+
"artifactSha256": "9cb0106828b7045ee7c4c4f70fbbcaabc67f09f1a3466a034b171c4e326cce4c",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.linux-arm64-gnu.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "2204168dd49b9d8b05854175868efb7a38a00af37081451c273b8c5a4d34dc99"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "121065e63e9fd2c067367e286ecba619ecc3f18a",
|
|
28
28
|
"sourceTreeDirty": false,
|
|
29
29
|
"sourceDateEpoch": 1,
|
|
30
30
|
"rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"signature": {
|
|
34
34
|
"algorithm": "Ed25519",
|
|
35
35
|
"keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
|
|
36
|
-
"value": "
|
|
36
|
+
"value": "sW/k0JsHybFw0odijKvzrpwNrYV9u58gCSE+IUdh6AAd810hXnmnmnnH4YugGOVhW8nLQyRhdEuimwwv5yn7Aw=="
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"version": 1,
|
|
5
5
|
"metadata": {
|
|
6
6
|
"component": {
|
|
7
|
-
"bom-ref": "pkg:cargo/planu-core@5.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.2.0",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.
|
|
10
|
+
"version": "5.2.0",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "9cb0106828b7045ee7c4c4f70fbbcaabc67f09f1a3466a034b171c4e326cce4c"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -291,9 +291,9 @@
|
|
|
291
291
|
},
|
|
292
292
|
{
|
|
293
293
|
"type": "library",
|
|
294
|
-
"bom-ref": "pkg:cargo/globset@0.4.
|
|
294
|
+
"bom-ref": "pkg:cargo/globset@0.4.20",
|
|
295
295
|
"name": "globset",
|
|
296
|
-
"version": "0.4.
|
|
296
|
+
"version": "0.4.20",
|
|
297
297
|
"externalReferences": [
|
|
298
298
|
{
|
|
299
299
|
"type": "distribution",
|
|
@@ -529,9 +529,9 @@
|
|
|
529
529
|
},
|
|
530
530
|
{
|
|
531
531
|
"type": "library",
|
|
532
|
-
"bom-ref": "pkg:cargo/regex-automata@0.4.
|
|
532
|
+
"bom-ref": "pkg:cargo/regex-automata@0.4.18",
|
|
533
533
|
"name": "regex-automata",
|
|
534
|
-
"version": "0.4.
|
|
534
|
+
"version": "0.4.18",
|
|
535
535
|
"externalReferences": [
|
|
536
536
|
{
|
|
537
537
|
"type": "distribution",
|
|
@@ -1046,12 +1046,12 @@
|
|
|
1046
1046
|
]
|
|
1047
1047
|
},
|
|
1048
1048
|
{
|
|
1049
|
-
"ref": "pkg:cargo/globset@0.4.
|
|
1049
|
+
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
1052
|
"pkg:cargo/bstr@1.13.0",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1054
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1056
1056
|
]
|
|
1057
1057
|
},
|
|
@@ -1069,10 +1069,10 @@
|
|
|
1069
1069
|
"ref": "pkg:cargo/ignore@0.4.25",
|
|
1070
1070
|
"dependsOn": [
|
|
1071
1071
|
"pkg:cargo/crossbeam-deque@0.8.7",
|
|
1072
|
-
"pkg:cargo/globset@0.4.
|
|
1072
|
+
"pkg:cargo/globset@0.4.20",
|
|
1073
1073
|
"pkg:cargo/log@0.4.33",
|
|
1074
1074
|
"pkg:cargo/memchr@2.8.3",
|
|
1075
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1075
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1076
1076
|
"pkg:cargo/same-file@1.0.6",
|
|
1077
1077
|
"pkg:cargo/walkdir@2.5.0",
|
|
1078
1078
|
"pkg:cargo/winapi-util@0.1.11"
|
|
@@ -1106,7 +1106,7 @@
|
|
|
1106
1106
|
"dependsOn": []
|
|
1107
1107
|
},
|
|
1108
1108
|
{
|
|
1109
|
-
"ref": "pkg:cargo/planu-core@5.
|
|
1109
|
+
"ref": "pkg:cargo/planu-core@5.2.0",
|
|
1110
1110
|
"dependsOn": [
|
|
1111
1111
|
"pkg:cargo/core-foundation@0.10.1",
|
|
1112
1112
|
"pkg:cargo/hmac@0.12.1",
|
|
@@ -1151,7 +1151,7 @@
|
|
|
1151
1151
|
]
|
|
1152
1152
|
},
|
|
1153
1153
|
{
|
|
1154
|
-
"ref": "pkg:cargo/regex-automata@0.4.
|
|
1154
|
+
"ref": "pkg:cargo/regex-automata@0.4.18",
|
|
1155
1155
|
"dependsOn": [
|
|
1156
1156
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1157
1157
|
"pkg:cargo/memchr@2.8.3",
|
|
@@ -1167,7 +1167,7 @@
|
|
|
1167
1167
|
"dependsOn": [
|
|
1168
1168
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1169
1169
|
"pkg:cargo/memchr@2.8.3",
|
|
1170
|
-
"pkg:cargo/regex-automata@0.4.
|
|
1170
|
+
"pkg:cargo/regex-automata@0.4.18",
|
|
1171
1171
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
1172
1172
|
]
|
|
1173
1173
|
},
|