@sensigo/realm-cli 0.23.0 → 0.25.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/dist/commands/export.d.ts +44 -4
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +58 -4
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/gc.d.ts +50 -0
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +215 -35
- package/dist/commands/gc.js.map +1 -1
- package/dist/commands/purge.d.ts +23 -6
- package/dist/commands/purge.d.ts.map +1 -1
- package/dist/commands/purge.js +56 -19
- package/dist/commands/purge.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +4 -4
|
@@ -1,18 +1,49 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import type { RunRecord, RunStore, FailedAttemptRecord, TraceBufferStore } from '@sensigo/realm';
|
|
3
|
+
/** One artifact `buildExportBundle` could not read (issue #186) — never silently omitted. */
|
|
4
|
+
export interface ExportArtifactError {
|
|
5
|
+
/** A human label for the artifact — the STORE owns the actual on-disk path/filename; the
|
|
6
|
+
* command never reconstructs one, matching this file's own no-filename-layout discipline. */
|
|
7
|
+
artifact: string;
|
|
8
|
+
/** The errno/FsIoError code, or `'UNKNOWN'` if the thrown value carried none. */
|
|
9
|
+
code: string;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
3
12
|
export interface ExportBundle {
|
|
4
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Bumped 1 → 2 (issue #186): a v1 bundle predates the `complete`/`artifact_errors` fields, so a
|
|
15
|
+
* v1 bundle's completeness is UNKNOWN to a reader — it was written back when export was
|
|
16
|
+
* all-or-nothing (any read failure meant no bundle at all), so v1's mere existence was itself a
|
|
17
|
+
* (weaker) completeness signal, but nothing in a v1 bundle states it explicitly. v2 always
|
|
18
|
+
* states it explicitly via `complete`.
|
|
19
|
+
*/
|
|
20
|
+
realm_export_version: 2;
|
|
5
21
|
/** ISO-8601, stamped by the CLI at assembly time. */
|
|
6
22
|
exported_at: string;
|
|
7
23
|
/** The full RunRecord — steps, evidence, skip_details, claims, etc. */
|
|
8
24
|
run: RunRecord;
|
|
9
|
-
/** Parsed failed-attempt records; `[]` if none were ever recorded for this run
|
|
25
|
+
/** Parsed failed-attempt records; `[]` if none were ever recorded for this run OR if the sidecar
|
|
26
|
+
* read failed (see `artifact_errors` — the empty array does not by itself mean "none recorded"
|
|
27
|
+
* in that case; check `complete` first). */
|
|
10
28
|
attempts: FailedAttemptRecord[];
|
|
11
29
|
/** True if the run hit the failed-attempt sidecar's 256KB ceiling — later attempts were dropped
|
|
12
|
-
* at write time (append-and-stop), so `attempts` is NOT exhaustive.
|
|
30
|
+
* at write time (append-and-stop), so `attempts` is NOT exhaustive. Independent of `complete`:
|
|
31
|
+
* a sidecar can be BOTH fully readable AND capped (a known, positively-characterized
|
|
32
|
+
* truncation) — that is a different signal from a read that failed outright. */
|
|
13
33
|
attempts_capped: boolean;
|
|
14
|
-
/** `{ <stepId>: [...] }` — every buffered/WAL entry for the run, across all steps; `{}` if none
|
|
34
|
+
/** `{ <stepId>: [...] }` — every buffered/WAL entry for the run, across all steps; `{}` if none
|
|
35
|
+
* OR if the WAL read failed (see `artifact_errors` — check `complete` first). */
|
|
15
36
|
wal: Record<string, unknown[]>;
|
|
37
|
+
/**
|
|
38
|
+
* False iff any artifact below (`attempts`/`wal`) could not be read (issue #186) — a real I/O
|
|
39
|
+
* failure, not a genuine ENOENT absence (an absent artifact is legitimately `[]`/`{}` and
|
|
40
|
+
* `complete: true`). The bundle NEVER lies by omission: every readable artifact is still
|
|
41
|
+
* written, and the run record itself is always present when `complete` is `false` (a run-record
|
|
42
|
+
* read failure means no bundle is written at all — see `buildExportBundle`).
|
|
43
|
+
*/
|
|
44
|
+
complete: boolean;
|
|
45
|
+
/** The artifacts that failed to read; always `[]` when `complete` is `true`. */
|
|
46
|
+
artifact_errors: ExportArtifactError[];
|
|
16
47
|
}
|
|
17
48
|
export interface ExportRunResult {
|
|
18
49
|
bundle: ExportBundle;
|
|
@@ -39,6 +70,15 @@ export interface ExportStores {
|
|
|
39
70
|
* Assembles the export bundle for `runId` from each store's existing read methods — never writes,
|
|
40
71
|
* never locks, never touches `runsDir`. Throws `STATE_RUN_NOT_FOUND` (propagated from
|
|
41
72
|
* `runStore.get`) for a nonexistent run; the CLI action maps that to an error message + exit(1).
|
|
73
|
+
*
|
|
74
|
+
* issue #186 — graceful degradation, never all-or-nothing: `run` is the bundle's core, so a
|
|
75
|
+
* failure reading IT propagates (there is genuinely nothing to hand off — no bundle at all). But
|
|
76
|
+
* `attempts` and `wal` are each read in their OWN try/catch: a real I/O failure on either (post
|
|
77
|
+
* #183, `failedAttemptStore.read`/`traceBufferStore.readAllForRun` throw on a genuine I/O error,
|
|
78
|
+
* not just a benign ENOENT-absence, which still legitimately yields `[]`/`{}`) substitutes the
|
|
79
|
+
* empty value, records the failure in `artifact_errors`, and the OTHER artifact is still
|
|
80
|
+
* attempted — the bundle self-describes its own incompleteness via `complete` instead of
|
|
81
|
+
* disappearing entirely.
|
|
42
82
|
*/
|
|
43
83
|
export declare function buildExportBundle(runId: string, stores: ExportStores, now?: Date): Promise<ExportRunResult>;
|
|
44
84
|
export interface ResolveExportPathOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGjG,MAAM,WAAW,YAAY;IAC3B,oBAAoB,EAAE,CAAC,CAAC;IACxB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,GAAG,EAAE,SAAS,CAAC;IACf
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGjG,6FAA6F;AAC7F,MAAM,WAAW,mBAAmB;IAClC;kGAC8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,oBAAoB,EAAE,CAAC,CAAC;IACxB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,GAAG,EAAE,SAAS,CAAC;IACf;;iDAE6C;IAC7C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;qFAGiF;IACjF,eAAe,EAAE,OAAO,CAAC;IACzB;sFACkF;IAClF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,eAAe,EAAE,mBAAmB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,kBAAkB,EAAE;QAClB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;YAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACnF,CAAC;IACF,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;CAC3D;AASD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,eAAe,CAAC,CA+C1B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAqCxE;AAQD,eAAO,MAAM,aAAa,SA4DtB,CAAC"}
|
package/dist/commands/export.js
CHANGED
|
@@ -20,23 +20,65 @@ import { existsSync, statSync } from 'node:fs';
|
|
|
20
20
|
import { writeFile } from 'node:fs/promises';
|
|
21
21
|
import { join, resolve, sep } from 'node:path';
|
|
22
22
|
import { Command } from 'commander';
|
|
23
|
-
import { WorkflowError, isTerminalPhase } from '@sensigo/realm';
|
|
23
|
+
import { WorkflowError, isTerminalPhase, FsIoError } from '@sensigo/realm';
|
|
24
|
+
/** Extracts an errno/FsIoError code from a thrown value; `'UNKNOWN'` if it carries none. */
|
|
25
|
+
function errnoCodeOf(err) {
|
|
26
|
+
if (err instanceof FsIoError)
|
|
27
|
+
return err.code;
|
|
28
|
+
const code = err?.code;
|
|
29
|
+
return typeof code === 'string' ? code : 'UNKNOWN';
|
|
30
|
+
}
|
|
24
31
|
/**
|
|
25
32
|
* Assembles the export bundle for `runId` from each store's existing read methods — never writes,
|
|
26
33
|
* never locks, never touches `runsDir`. Throws `STATE_RUN_NOT_FOUND` (propagated from
|
|
27
34
|
* `runStore.get`) for a nonexistent run; the CLI action maps that to an error message + exit(1).
|
|
35
|
+
*
|
|
36
|
+
* issue #186 — graceful degradation, never all-or-nothing: `run` is the bundle's core, so a
|
|
37
|
+
* failure reading IT propagates (there is genuinely nothing to hand off — no bundle at all). But
|
|
38
|
+
* `attempts` and `wal` are each read in their OWN try/catch: a real I/O failure on either (post
|
|
39
|
+
* #183, `failedAttemptStore.read`/`traceBufferStore.readAllForRun` throw on a genuine I/O error,
|
|
40
|
+
* not just a benign ENOENT-absence, which still legitimately yields `[]`/`{}`) substitutes the
|
|
41
|
+
* empty value, records the failure in `artifact_errors`, and the OTHER artifact is still
|
|
42
|
+
* attempted — the bundle self-describes its own incompleteness via `complete` instead of
|
|
43
|
+
* disappearing entirely.
|
|
28
44
|
*/
|
|
29
45
|
export async function buildExportBundle(runId, stores, now = new Date()) {
|
|
30
46
|
const run = await stores.runStore.get(runId);
|
|
31
|
-
const
|
|
32
|
-
|
|
47
|
+
const artifactErrors = [];
|
|
48
|
+
let attempts = [];
|
|
49
|
+
let attemptsCapped = false;
|
|
50
|
+
try {
|
|
51
|
+
const result = await stores.failedAttemptStore.read(runId);
|
|
52
|
+
attempts = result.records;
|
|
53
|
+
attemptsCapped = result.capped;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
artifactErrors.push({
|
|
57
|
+
artifact: 'failed-attempt sidecar',
|
|
58
|
+
code: errnoCodeOf(err),
|
|
59
|
+
message: err instanceof Error ? err.message : String(err),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
let wal = {};
|
|
63
|
+
try {
|
|
64
|
+
wal = await stores.traceBufferStore.readAllForRun(runId);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
artifactErrors.push({
|
|
68
|
+
artifact: 'trace-buffer WAL',
|
|
69
|
+
code: errnoCodeOf(err),
|
|
70
|
+
message: err instanceof Error ? err.message : String(err),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
33
73
|
const bundle = {
|
|
34
|
-
realm_export_version:
|
|
74
|
+
realm_export_version: 2,
|
|
35
75
|
exported_at: now.toISOString(),
|
|
36
76
|
run,
|
|
37
77
|
attempts,
|
|
38
78
|
attempts_capped: attemptsCapped,
|
|
39
79
|
wal,
|
|
80
|
+
complete: artifactErrors.length === 0,
|
|
81
|
+
artifact_errors: artifactErrors,
|
|
40
82
|
};
|
|
41
83
|
const warning = !isTerminalPhase(run.run_phase)
|
|
42
84
|
? `best-effort snapshot: run '${runId}' is still ${run.run_phase}; its artifacts are read at ` +
|
|
@@ -119,6 +161,18 @@ export const exportCommand = new Command('export')
|
|
|
119
161
|
const target = resolveExportPath({ runId, out: opts.out, runsDir });
|
|
120
162
|
const json = JSON.stringify(bundle, null, 2);
|
|
121
163
|
await writeFile(target, json, 'utf8');
|
|
164
|
+
// issue #186: an incomplete bundle is still written (for recovery) but never reported as a
|
|
165
|
+
// plain success — the exit code carries the signal for CI/scripts, and the operator sees
|
|
166
|
+
// exactly which artifact(s) failed and why. No --allow-incomplete flag: honesty here is not
|
|
167
|
+
// opt-in.
|
|
168
|
+
if (!bundle.complete) {
|
|
169
|
+
console.error(`⚠ INCOMPLETE export: ${bundle.artifact_errors.length} artifact(s) could not be read`);
|
|
170
|
+
for (const e of bundle.artifact_errors) {
|
|
171
|
+
console.error(` ✗ ${e.artifact} (${e.code}): ${e.message}`);
|
|
172
|
+
}
|
|
173
|
+
console.error(`The bundle was still written to '${target}' — inspect it for what could be recovered.`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
122
176
|
const walStepCount = Object.keys(bundle.wal).length;
|
|
123
177
|
console.log(`Exported run '${runId}' to '${target}' (${formatBytes(Buffer.byteLength(json))}).\n` +
|
|
124
178
|
` phase: ${bundle.run.run_phase}, attempts: ${bundle.attempts.length}, WAL steps: ${walStepCount}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,EAAE;AACF,mGAAmG;AACnG,6FAA6F;AAC7F,kGAAkG;AAClG,oGAAoG;AACpG,iGAAiG;AACjG,gGAAgG;AAChG,EAAE;AACF,iGAAiG;AACjG,iGAAiG;AACjG,mGAAmG;AACnG,oGAAoG;AACpG,yDAAyD;AACzD,EAAE;AACF,oGAAoG;AACpG,oGAAoG;AACpG,oEAAoE;AACpE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/gc.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import type { OrphanSweepableStore } from '@sensigo/realm';
|
|
2
3
|
export interface SweepOrphansOptions {
|
|
3
4
|
/** Minimum age (ms) a `.tmp` must have to be reaped. Rejected below `FLOOR_MS` — see above. */
|
|
4
5
|
olderThanMs: number;
|
|
@@ -43,5 +44,54 @@ export interface SweepOrphansResult {
|
|
|
43
44
|
* `unlink`ed — success → `reaped`; ENOENT → `already_gone`; anything else → `failed`.
|
|
44
45
|
*/
|
|
45
46
|
export declare function sweepOrphans(runsDir: string, options: SweepOrphansOptions): Promise<SweepOrphansResult>;
|
|
47
|
+
/** One orphan artifact's outcome in a sweep report — carries the runId alongside the path so an
|
|
48
|
+
* operator can correlate a reaped file back to which run it belonged to. */
|
|
49
|
+
export interface OrphanArtifactEntry {
|
|
50
|
+
path: string;
|
|
51
|
+
runId: string;
|
|
52
|
+
}
|
|
53
|
+
export interface OrphanArtifactSweepResult {
|
|
54
|
+
/** Reaped (force mode) or would-be-reaped (dry-run) artifacts. */
|
|
55
|
+
reaped: OrphanArtifactEntry[];
|
|
56
|
+
/** A candidate vanished on its own (unlink hit ENOENT) — benign, never a failure. */
|
|
57
|
+
already_gone: OrphanArtifactEntry[];
|
|
58
|
+
/** A genuine delete failure (permissions, I/O) — loud, never silently swallowed. */
|
|
59
|
+
failed: Array<{
|
|
60
|
+
path: string;
|
|
61
|
+
runId: string;
|
|
62
|
+
error: string;
|
|
63
|
+
}>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Reaps run-less orphaned WAL/sidecar artifacts (issue #163) — the second sweep behind
|
|
67
|
+
* `realm run gc`. `stores` is every `OrphanSweepableStore` gc knows about (today:
|
|
68
|
+
* `JsonTraceBufferStore`, `FailedAttemptStore`); `liveRunIds` is the caller's ALREADY-COMPUTED
|
|
69
|
+
* `JsonFileStore.listRunIds()` result (computed once, shared across every store, and — this is
|
|
70
|
+
* load-bearing — the caller's responsibility to have fail-closed on: see the CLI action for why
|
|
71
|
+
* this function never calls `listRunIds()` itself).
|
|
72
|
+
*
|
|
73
|
+
* **The floor is the create-temp-window guard.** `append_trace` calls `runStore.get(runId)`
|
|
74
|
+
* BEFORE ever writing a WAL entry, so a WAL's `<runId>.json` provably existed at WAL-creation
|
|
75
|
+
* time and exists for the run's entire life (see this module's own header for the full
|
|
76
|
+
* correctness backbone). The ONLY way "artifact present, run file absent" can be true for a
|
|
77
|
+
* FRESH run is the sub-second window between the run file being written as a temp
|
|
78
|
+
* (`<id>.json.<pid>.tmp`) and its atomic rename to `<id>.json` — during which `listRunIds()`
|
|
79
|
+
* would not yet see it. `FLOOR_MS` (1h) dwarfs that window by many orders of magnitude, so a
|
|
80
|
+
* fresh in-flight run's WAL is always younger than the floor and never selected; a WAL/sidecar
|
|
81
|
+
* OLDER than the floor with no matching run file is genuinely run-less.
|
|
82
|
+
*
|
|
83
|
+
* Each `OrphanSweepableStore.listOrphans()` call is fail-closed BY THE STORE'S OWN CONTRACT (see
|
|
84
|
+
* `orphan-sweepable-store.ts`) — a non-ENOENT enumeration/stat failure throws, propagating out of
|
|
85
|
+
* THIS function too (uncaught here, deliberately): this sweep has nothing safe to report if it
|
|
86
|
+
* cannot trust what "orphaned" even means for that store, so it aborts entirely rather than
|
|
87
|
+
* reaping a partial, possibly-wrong candidate set.
|
|
88
|
+
*/
|
|
89
|
+
export declare function sweepOrphanArtifacts(stores: readonly OrphanSweepableStore[], liveRunIds: ReadonlySet<string>, options: SweepOrphansOptions): Promise<OrphanArtifactSweepResult>;
|
|
90
|
+
/** gc's exit code: non-zero iff gc could not complete a sweep it attempted (issue #163
|
|
91
|
+
* exit-code correction). A failed unlink in EITHER sweep, OR an aborted orphan sweep
|
|
92
|
+
* (enumeration failed — `artifactSweepError` set), is a failure. Merely *finding* reapable
|
|
93
|
+
* residue is NOT — that holds in both dry-run and `--force`, so this one helper decides both
|
|
94
|
+
* branches' exit code instead of each re-deriving its own (inline) predicate. */
|
|
95
|
+
export declare function gcExitCode(tempResult: SweepOrphansResult, artifactResult: OrphanArtifactSweepResult | undefined, artifactSweepError: string | undefined): number;
|
|
46
96
|
export declare const gcCommand: Command;
|
|
47
97
|
//# sourceMappingURL=gc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,gBAAgB,CAAC;AAiC3E,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,oFAAoF;IACpF,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8FAA8F;IAC9F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;wFAEoF;IACpF,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAuBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0D7B;AAED;6EAC6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,qFAAqF;IACrF,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,oFAAoF;IACpF,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,oBAAoB,EAAE,EACvC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,yBAAyB,CAAC,CA2CpC;AAqHD;;;;kFAIkF;AAClF,wBAAgB,UAAU,CACxB,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,yBAAyB,GAAG,SAAS,EACrD,kBAAkB,EAAE,MAAM,GAAG,SAAS,GACrC,MAAM,CAMR;AAED,eAAO,MAAM,SAAS,SAuGlB,CAAC"}
|
package/dist/commands/gc.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
// gc command — sweep orphaned atomic-write temps (issue #160
|
|
1
|
+
// gc command — sweep orphaned atomic-write temps (issue #160) AND run-less orphaned WAL/sidecar
|
|
2
|
+
// artifacts (issue #163). One operator command, two independent sweeps, same flags.
|
|
2
3
|
//
|
|
4
|
+
// --- Sweep 1: atomic-write temps (issue #160, Phase 1: .tmp only) ---
|
|
3
5
|
// atomicWriteFile (packages/core/src/store/atomic-write.ts) writes a unique sibling temp
|
|
4
6
|
// (`${path}.<pid>.<counter>.tmp`) then POSIX-renames it over the target. A process dying between
|
|
5
7
|
// the write and the rename orphans that temp forever — it is not runId-keyed for the key-pointer
|
|
@@ -14,23 +16,49 @@
|
|
|
14
16
|
// torn file). Combined with the 1h floor below, an in-flight write's temp (age ≪ floor) is never
|
|
15
17
|
// even selected.
|
|
16
18
|
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
19
|
+
// --- Sweep 2: run-less orphaned WAL/sidecar artifacts (issue #163) ---
|
|
20
|
+
// #163 was ORIGINALLY filed on a premise that does not hold: it claimed a WAL could orphan
|
|
21
|
+
// "between WAL-create and run-file-create." That path does not exist — `append_trace` calls
|
|
22
|
+
// `runStore.get(runId)` FIRST, so a WAL's `<runId>.json` provably existed at WAL-creation time and
|
|
23
|
+
// exists for the run's ENTIRE life. "Artifact present, run file absent" is therefore only true
|
|
24
|
+
// AFTER the run file has been deleted (a pre-#183 purge, a manual `rm`, disk corruption) or DURING
|
|
25
|
+
// the sub-second atomic-write temp-rename window (the run file is a `<id>.json.<pid>.tmp`, not yet
|
|
26
|
+
// renamed). This is remediation for the rare/residual case, not a rescue for an ongoing leak — the
|
|
27
|
+
// git history shows the pre-#183/#184 orphan-manufacturing window was ~48h and opt-in.
|
|
28
|
+
//
|
|
29
|
+
// `.lock` reaping is deliberately split to #164 (deferred — proper-lockfile self-heals a live-path
|
|
30
|
+
// lock; only a purged-target's lock lingers, which is negligible). Neither is this command's job
|
|
31
|
+
// yet — see the report footer.
|
|
20
32
|
import { readdir, lstat, unlink, stat } from 'node:fs/promises';
|
|
21
33
|
import { join } from 'node:path';
|
|
22
34
|
import { Command } from 'commander';
|
|
23
|
-
import { WorkflowError } from '@sensigo/realm';
|
|
35
|
+
import { WorkflowError, deleteIfExists } from '@sensigo/realm';
|
|
24
36
|
import { parseDuration } from '../lib/parse-duration.js';
|
|
25
37
|
/**
|
|
26
|
-
* Minimum `--older-than`
|
|
27
|
-
* non-urgent crash residue, and, forward-consistency-wise, the safety guard the deferred
|
|
28
|
-
* reaping (#164) will also require; enforcing it here means #164 inherits an
|
|
29
|
-
* Temps themselves are safe to reap at any age past a few seconds (see the
|
|
30
|
-
*
|
|
31
|
-
*
|
|
38
|
+
* Minimum `--older-than` EITHER sweep will ever honor (1 hour) — a conservative floor for hygiene
|
|
39
|
+
* of non-urgent crash residue, and, forward-consistency-wise, the safety guard the deferred
|
|
40
|
+
* `.lock` reaping (#164) will also require; enforcing it here means #164 inherits an
|
|
41
|
+
* already-tested guard. Temps themselves are safe to reap at any age past a few seconds (see the
|
|
42
|
+
* module doc above); a run-less WAL/sidecar past this floor is genuinely orphaned, not merely
|
|
43
|
+
* in-flight (see `sweepOrphanArtifacts`'s own doc for why the floor is exactly the create-window
|
|
44
|
+
* guard there) — either way this floor is conservatism, not the per-sweep safety mechanism.
|
|
45
|
+
* Module-private: the only way to reach a delete in EITHER sweep is through `assertOlderThanFloor`,
|
|
46
|
+
* checked FIRST, before any filesystem access.
|
|
32
47
|
*/
|
|
33
48
|
const FLOOR_MS = 3_600_000;
|
|
49
|
+
/** Shared floor guard for both sweeps — checked before any filesystem access in either. */
|
|
50
|
+
function assertOlderThanFloor(olderThanMs, subject) {
|
|
51
|
+
if (olderThanMs < FLOOR_MS) {
|
|
52
|
+
throw new WorkflowError(`--older-than must resolve to at least 1h (got ${olderThanMs}ms) — gc refuses to reap ` +
|
|
53
|
+
`${subject} younger than that, even with --force.`, {
|
|
54
|
+
code: 'VALIDATION_INPUT_SCHEMA',
|
|
55
|
+
category: 'VALIDATION',
|
|
56
|
+
agentAction: 'provide_input',
|
|
57
|
+
retryable: false,
|
|
58
|
+
details: { olderThanMs, floorMs: FLOOR_MS },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
34
62
|
/**
|
|
35
63
|
* Every top-level `*.tmp` in `runsDir`, plus one level of recursion into `runsDir/keys/*.tmp` —
|
|
36
64
|
* `keys/` is the ONLY subdirectory any store ever creates in `runsDir` (verified: `JsonFileStore`'s
|
|
@@ -72,16 +100,7 @@ async function findTempCandidates(runsDir) {
|
|
|
72
100
|
* `unlink`ed — success → `reaped`; ENOENT → `already_gone`; anything else → `failed`.
|
|
73
101
|
*/
|
|
74
102
|
export async function sweepOrphans(runsDir, options) {
|
|
75
|
-
|
|
76
|
-
throw new WorkflowError(`--older-than must resolve to at least 1h (got ${options.olderThanMs}ms) — gc refuses to ` +
|
|
77
|
-
`reap crash residue younger than that, even with --force.`, {
|
|
78
|
-
code: 'VALIDATION_INPUT_SCHEMA',
|
|
79
|
-
category: 'VALIDATION',
|
|
80
|
-
agentAction: 'provide_input',
|
|
81
|
-
retryable: false,
|
|
82
|
-
details: { olderThanMs: options.olderThanMs, floorMs: FLOOR_MS },
|
|
83
|
-
});
|
|
84
|
-
}
|
|
103
|
+
assertOlderThanFloor(options.olderThanMs, 'crash residue');
|
|
85
104
|
const now = options.now ?? new Date();
|
|
86
105
|
const candidatePaths = await findTempCandidates(runsDir);
|
|
87
106
|
const result = { reaped: [], already_gone: [], failed: [] };
|
|
@@ -136,6 +155,70 @@ export async function sweepOrphans(runsDir, options) {
|
|
|
136
155
|
}
|
|
137
156
|
return result;
|
|
138
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Reaps run-less orphaned WAL/sidecar artifacts (issue #163) — the second sweep behind
|
|
160
|
+
* `realm run gc`. `stores` is every `OrphanSweepableStore` gc knows about (today:
|
|
161
|
+
* `JsonTraceBufferStore`, `FailedAttemptStore`); `liveRunIds` is the caller's ALREADY-COMPUTED
|
|
162
|
+
* `JsonFileStore.listRunIds()` result (computed once, shared across every store, and — this is
|
|
163
|
+
* load-bearing — the caller's responsibility to have fail-closed on: see the CLI action for why
|
|
164
|
+
* this function never calls `listRunIds()` itself).
|
|
165
|
+
*
|
|
166
|
+
* **The floor is the create-temp-window guard.** `append_trace` calls `runStore.get(runId)`
|
|
167
|
+
* BEFORE ever writing a WAL entry, so a WAL's `<runId>.json` provably existed at WAL-creation
|
|
168
|
+
* time and exists for the run's entire life (see this module's own header for the full
|
|
169
|
+
* correctness backbone). The ONLY way "artifact present, run file absent" can be true for a
|
|
170
|
+
* FRESH run is the sub-second window between the run file being written as a temp
|
|
171
|
+
* (`<id>.json.<pid>.tmp`) and its atomic rename to `<id>.json` — during which `listRunIds()`
|
|
172
|
+
* would not yet see it. `FLOOR_MS` (1h) dwarfs that window by many orders of magnitude, so a
|
|
173
|
+
* fresh in-flight run's WAL is always younger than the floor and never selected; a WAL/sidecar
|
|
174
|
+
* OLDER than the floor with no matching run file is genuinely run-less.
|
|
175
|
+
*
|
|
176
|
+
* Each `OrphanSweepableStore.listOrphans()` call is fail-closed BY THE STORE'S OWN CONTRACT (see
|
|
177
|
+
* `orphan-sweepable-store.ts`) — a non-ENOENT enumeration/stat failure throws, propagating out of
|
|
178
|
+
* THIS function too (uncaught here, deliberately): this sweep has nothing safe to report if it
|
|
179
|
+
* cannot trust what "orphaned" even means for that store, so it aborts entirely rather than
|
|
180
|
+
* reaping a partial, possibly-wrong candidate set.
|
|
181
|
+
*/
|
|
182
|
+
export async function sweepOrphanArtifacts(stores, liveRunIds, options) {
|
|
183
|
+
assertOlderThanFloor(options.olderThanMs, 'orphaned artifacts');
|
|
184
|
+
const now = options.now ?? new Date();
|
|
185
|
+
const candidates = [];
|
|
186
|
+
for (const store of stores) {
|
|
187
|
+
candidates.push(...(await store.listOrphans(liveRunIds)));
|
|
188
|
+
}
|
|
189
|
+
const result = { reaped: [], already_gone: [], failed: [] };
|
|
190
|
+
const toReap = [];
|
|
191
|
+
for (const artifact of candidates) {
|
|
192
|
+
const ageMs = now.getTime() - artifact.mtimeMs;
|
|
193
|
+
if (ageMs < 0)
|
|
194
|
+
continue; // future mtime (clock skew) — skip, never reap
|
|
195
|
+
if (ageMs <= options.olderThanMs)
|
|
196
|
+
continue; // too fresh — the create-temp-window guard above
|
|
197
|
+
toReap.push(artifact);
|
|
198
|
+
}
|
|
199
|
+
if (options.dryRun) {
|
|
200
|
+
result.reaped = toReap.map((a) => ({ path: a.path, runId: a.runId }));
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
for (const artifact of toReap) {
|
|
204
|
+
const entry = { path: artifact.path, runId: artifact.runId };
|
|
205
|
+
try {
|
|
206
|
+
// #183 discipline: deleteIfExists resolves false (not an error) on ENOENT — already gone
|
|
207
|
+
// is success, never a failure; any other errno throws.
|
|
208
|
+
const didDelete = await deleteIfExists(artifact.path);
|
|
209
|
+
if (didDelete) {
|
|
210
|
+
result.reaped.push(entry);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
result.already_gone.push(entry);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
result.failed.push({ ...entry, error: err instanceof Error ? err.message : String(err) });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
139
222
|
/** Best-effort total bytes for a known list of paths — reporting-only, never gates reaping.
|
|
140
223
|
* Called against a fresh dry-run preview, so the paths are still on disk when stat'd. */
|
|
141
224
|
async function statPathBytes(paths) {
|
|
@@ -159,12 +242,21 @@ function formatBytes(n) {
|
|
|
159
242
|
return `${(n / (1024 * 1024)).toFixed(1)} MB`;
|
|
160
243
|
}
|
|
161
244
|
/** So an operator doesn't distrust the tool when `runsDir` still holds residue gc deliberately
|
|
162
|
-
* does not touch — printed on every report, dry-run or force, empty or not.
|
|
163
|
-
|
|
164
|
-
|
|
245
|
+
* does not touch — printed on every report, dry-run or force, empty or not. issue #163: WALs and
|
|
246
|
+
* failed-attempt sidecars are now reaped (the second sweep above) — only `.lock` dirs remain
|
|
247
|
+
* deferred (issue #164). */
|
|
248
|
+
const NOT_REAPED_FOOTER = 'gc does NOT yet reap orphaned .lock dirs (deferred — issue #164). Their presence in runsDir ' +
|
|
249
|
+
'is expected and not a sign gc is broken.';
|
|
165
250
|
/** Prints the dry-run / force report shared by both code paths. `previewBytes` always comes from
|
|
166
|
-
* the initial (always non-destructive) preview pass — see the action below for why.
|
|
167
|
-
|
|
251
|
+
* the initial (always non-destructive) preview pass — see the action below for why.
|
|
252
|
+
*
|
|
253
|
+
* `artifactResult`/`artifactSweepError` are mutually exclusive (issue #163): a defined
|
|
254
|
+
* `artifactSweepError` means `listRunIds()` or a store's `listOrphans()` threw — the orphan
|
|
255
|
+
* sweep aborted loudly, reaping NOTHING, and there is no `artifactResult` to report. Both may be
|
|
256
|
+
* `undefined` only if the temp-only sweep somehow bypassed the orphan sweep entirely (never
|
|
257
|
+
* happens in the real CLI action — always one or the other).
|
|
258
|
+
*/
|
|
259
|
+
function printGcReport(result, previewBytes, dryRun, artifactResult, artifactSweepError) {
|
|
168
260
|
const nothingToReport = result.reaped.length === 0 && result.already_gone.length === 0 && result.failed.length === 0;
|
|
169
261
|
if (nothingToReport) {
|
|
170
262
|
console.log('No orphaned .tmp files found to reap.');
|
|
@@ -187,11 +279,54 @@ function printGcReport(result, previewBytes, dryRun) {
|
|
|
187
279
|
if (dryRun && !nothingToReport) {
|
|
188
280
|
console.log('\nRe-run with --force to actually delete.');
|
|
189
281
|
}
|
|
282
|
+
// --- orphan-artifacts section (issue #163) ---
|
|
283
|
+
if (artifactSweepError !== undefined) {
|
|
284
|
+
console.error(`\n✗ orphan-artifact sweep ABORTED (reaped nothing from it): ${artifactSweepError}`);
|
|
285
|
+
}
|
|
286
|
+
else if (artifactResult !== undefined) {
|
|
287
|
+
const nothingToReportArtifacts = artifactResult.reaped.length === 0 &&
|
|
288
|
+
artifactResult.already_gone.length === 0 &&
|
|
289
|
+
artifactResult.failed.length === 0;
|
|
290
|
+
if (nothingToReportArtifacts) {
|
|
291
|
+
console.log('\nNo run-less orphaned WAL/sidecar artifacts found to reap.');
|
|
292
|
+
}
|
|
293
|
+
else if (dryRun) {
|
|
294
|
+
console.log(`\n${artifactResult.reaped.length} run-less orphaned artifact(s) WOULD be reaped:`);
|
|
295
|
+
for (const a of artifactResult.reaped)
|
|
296
|
+
console.log(` • ${a.path} (run ${a.runId})`);
|
|
297
|
+
if (artifactResult.already_gone.length > 0) {
|
|
298
|
+
console.log(`(${artifactResult.already_gone.length} candidate(s) already vanished on their own.)`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
console.log(`\nReaped ${artifactResult.reaped.length} run-less orphaned artifact(s). ` +
|
|
303
|
+
`${artifactResult.already_gone.length} already gone, ${artifactResult.failed.length} failed.`);
|
|
304
|
+
for (const a of artifactResult.reaped)
|
|
305
|
+
console.log(` • ${a.path} (run ${a.runId})`);
|
|
306
|
+
}
|
|
307
|
+
for (const f of artifactResult.failed) {
|
|
308
|
+
console.error(` ✗ ${f.path} (run ${f.runId}): ${f.error}`);
|
|
309
|
+
}
|
|
310
|
+
if (dryRun && !nothingToReportArtifacts) {
|
|
311
|
+
console.log('Re-run with --force to actually delete.');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
190
314
|
console.log(`\n${NOT_REAPED_FOOTER}`);
|
|
191
315
|
}
|
|
316
|
+
/** gc's exit code: non-zero iff gc could not complete a sweep it attempted (issue #163
|
|
317
|
+
* exit-code correction). A failed unlink in EITHER sweep, OR an aborted orphan sweep
|
|
318
|
+
* (enumeration failed — `artifactSweepError` set), is a failure. Merely *finding* reapable
|
|
319
|
+
* residue is NOT — that holds in both dry-run and `--force`, so this one helper decides both
|
|
320
|
+
* branches' exit code instead of each re-deriving its own (inline) predicate. */
|
|
321
|
+
export function gcExitCode(tempResult, artifactResult, artifactSweepError) {
|
|
322
|
+
const anyFailure = tempResult.failed.length > 0 ||
|
|
323
|
+
(artifactResult?.failed.length ?? 0) > 0 ||
|
|
324
|
+
artifactSweepError !== undefined;
|
|
325
|
+
return anyFailure ? 1 : 0;
|
|
326
|
+
}
|
|
192
327
|
export const gcCommand = new Command('gc')
|
|
193
|
-
.description('Sweep orphaned atomic-write .tmp files
|
|
194
|
-
.requiredOption('--older-than <duration>', 'Reap
|
|
328
|
+
.description('Sweep orphaned atomic-write .tmp files and run-less orphaned WAL/sidecar artifacts (dry-run by default)')
|
|
329
|
+
.requiredOption('--older-than <duration>', 'Reap residue idle at least this long (minimum 1h; e.g. 1h, 6h, 30d)')
|
|
195
330
|
.option('--force', 'Actually delete (without this, gc only reports what WOULD be reaped)')
|
|
196
331
|
.action(async (opts) => {
|
|
197
332
|
let olderThanMs;
|
|
@@ -203,16 +338,22 @@ export const gcCommand = new Command('gc')
|
|
|
203
338
|
process.exit(1);
|
|
204
339
|
return;
|
|
205
340
|
}
|
|
206
|
-
// Defense-in-depth over sweepOrphans's own floor
|
|
207
|
-
// filesystem at all, with a CLI-friendly message naming the flag the
|
|
341
|
+
// Defense-in-depth over sweepOrphans's/sweepOrphanArtifacts's own floor checks — reject
|
|
342
|
+
// before touching the filesystem at all, with a CLI-friendly message naming the flag the
|
|
343
|
+
// operator just typed.
|
|
208
344
|
if (olderThanMs < FLOOR_MS) {
|
|
209
345
|
console.error(`--older-than must be at least 1h (got '${opts.olderThan}'). gc refuses to reap crash ` +
|
|
210
346
|
`residue younger than that, even with --force.`);
|
|
211
347
|
process.exit(1);
|
|
212
348
|
return;
|
|
213
349
|
}
|
|
214
|
-
const { JsonFileStore } = await import('@sensigo/realm');
|
|
215
|
-
const
|
|
350
|
+
const { JsonFileStore, FailedAttemptStore } = await import('@sensigo/realm');
|
|
351
|
+
const { JsonTraceBufferStore } = await import('@sensigo/realm-mcp');
|
|
352
|
+
const runStore = new JsonFileStore();
|
|
353
|
+
const runsDir = runStore.runsDirPath;
|
|
354
|
+
const failedAttemptStore = new FailedAttemptStore(runsDir);
|
|
355
|
+
const traceBufferStore = new JsonTraceBufferStore(runsDir);
|
|
356
|
+
const orphanSweepableStores = [traceBufferStore, failedAttemptStore];
|
|
216
357
|
const now = new Date();
|
|
217
358
|
try {
|
|
218
359
|
// Always preview first — this NEVER mutates, in either mode — because it is the only
|
|
@@ -223,14 +364,53 @@ export const gcCommand = new Command('gc')
|
|
|
223
364
|
// already_gone exists to absorb.
|
|
224
365
|
const preview = await sweepOrphans(runsDir, { olderThanMs, dryRun: true, now });
|
|
225
366
|
const bytes = await statPathBytes(preview.reaped);
|
|
367
|
+
// issue #163: FAIL-CLOSED. A `listRunIds()` (or a store's `listOrphans()`) failure aborts
|
|
368
|
+
// ONLY the orphan-artifact sweep, loudly — it must NEVER fabricate an empty `liveRunIds`,
|
|
369
|
+
// which would make every live run's artifacts look orphaned and reap them. The temp sweep
|
|
370
|
+
// above is fully independent of this and is completely unaffected either way.
|
|
371
|
+
let artifactPreview;
|
|
372
|
+
let artifactSweepError;
|
|
373
|
+
try {
|
|
374
|
+
const liveRunIds = await runStore.listRunIds();
|
|
375
|
+
artifactPreview = await sweepOrphanArtifacts(orphanSweepableStores, liveRunIds, {
|
|
376
|
+
olderThanMs,
|
|
377
|
+
dryRun: true,
|
|
378
|
+
now,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch (err) {
|
|
382
|
+
artifactSweepError = err instanceof Error ? err.message : String(err);
|
|
383
|
+
}
|
|
226
384
|
if (opts.force !== true) {
|
|
227
|
-
printGcReport(preview, bytes, true);
|
|
385
|
+
printGcReport(preview, bytes, true, artifactPreview, artifactSweepError);
|
|
386
|
+
if (gcExitCode(preview, artifactPreview, artifactSweepError) !== 0) {
|
|
387
|
+
process.exit(1);
|
|
388
|
+
}
|
|
228
389
|
return;
|
|
229
390
|
}
|
|
230
391
|
const result = await sweepOrphans(runsDir, { olderThanMs, dryRun: false, now });
|
|
231
|
-
|
|
232
|
-
if (
|
|
392
|
+
let artifactResult;
|
|
393
|
+
if (artifactSweepError === undefined) {
|
|
394
|
+
// The preview above already proved listRunIds()/listOrphans() succeed — re-read for the
|
|
395
|
+
// real pass (a fresh liveRunIds, since force mode is a separate call; a run created or
|
|
396
|
+
// completed between the preview and here is a benign, narrow race — exactly the same
|
|
397
|
+
// shape the temp sweep's own preview/force split already accepts).
|
|
398
|
+
try {
|
|
399
|
+
const liveRunIds = await runStore.listRunIds();
|
|
400
|
+
artifactResult = await sweepOrphanArtifacts(orphanSweepableStores, liveRunIds, {
|
|
401
|
+
olderThanMs,
|
|
402
|
+
dryRun: false,
|
|
403
|
+
now,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
catch (err) {
|
|
407
|
+
artifactSweepError = err instanceof Error ? err.message : String(err);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
printGcReport(result, bytes, false, artifactResult, artifactSweepError);
|
|
411
|
+
if (gcExitCode(result, artifactResult, artifactSweepError) !== 0) {
|
|
233
412
|
process.exit(1);
|
|
413
|
+
}
|
|
234
414
|
}
|
|
235
415
|
catch (err) {
|
|
236
416
|
console.error(err instanceof Error ? err.message : String(err));
|
package/dist/commands/gc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/commands/gc.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/purge.d.ts
CHANGED
|
@@ -53,6 +53,16 @@ export interface PurgeRunsResult {
|
|
|
53
53
|
purged: string[];
|
|
54
54
|
/** Populated only when `dryRun` is false: a concurrent/prior purge had already removed it — never a failure. */
|
|
55
55
|
already_purged: string[];
|
|
56
|
+
/**
|
|
57
|
+
* Populated only when `dryRun` is false (issue #184): the run could not be deleted right now
|
|
58
|
+
* because another writer holds its lock (`ELOCKED`), or because it is no longer terminal (a
|
|
59
|
+
* concurrent `realm resume` raced the purge) — `STATE_RUN_BUSY` from the anchor store. NEVER a
|
|
60
|
+
* failure: a live writer self-heals, and a stale lock is eventually stolen.
|
|
61
|
+
*/
|
|
62
|
+
blocked: Array<{
|
|
63
|
+
runId: string;
|
|
64
|
+
reason: string;
|
|
65
|
+
}>;
|
|
56
66
|
/** Populated only when `dryRun` is false: deletion genuinely failed. */
|
|
57
67
|
failed: Array<{
|
|
58
68
|
runId: string;
|
|
@@ -71,13 +81,20 @@ export interface PurgeRunsOptions {
|
|
|
71
81
|
}
|
|
72
82
|
/**
|
|
73
83
|
* Selects eligible run(s) (single `runId` or a batch aged past `olderThan`), reports bytes and
|
|
74
|
-
* resumability, and — when `dryRun` is false — deletes them
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
84
|
+
* resumability, and — when `dryRun` is false — deletes them. Deletion is anchor-structural (issue
|
|
85
|
+
* #184): every `artifactStores` entry (non-anchor stores only) must succeed BEFORE
|
|
86
|
+
* `anchorStore.deleteAllForRun` — the `JsonFileStore` run file — is ever called, and only on
|
|
87
|
+
* total success. Any throw before that point leaves the anchor (and therefore the run) intact —
|
|
88
|
+
* the crash-anchor property is now structural (guaranteed by this function's control flow), not
|
|
89
|
+
* merely positional (an array-ordering convention a future edit could silently break — see
|
|
90
|
+
* `purge-guard.test.ts`'s ANCHOR checks for the source-text half of this guarantee).
|
|
91
|
+
*
|
|
92
|
+
* Continue-on-error across the batch: a `STATE_RUN_NOT_FOUND` hit while deleting (a concurrent
|
|
93
|
+
* purge already removed it) is bucketed as `already_purged`; a `STATE_RUN_BUSY` hit (another
|
|
94
|
+
* writer holds the lock, or the run was resumed since selection — issue #184) is bucketed as
|
|
95
|
+
* `blocked`; neither is ever a `failed`.
|
|
79
96
|
*/
|
|
80
|
-
export declare function purgeRuns(options: PurgeRunsOptions,
|
|
97
|
+
export declare function purgeRuns(options: PurgeRunsOptions, anchorStore: Pick<RunStore, 'get' | 'list'> & PerRunArtifactStore & {
|
|
81
98
|
readonly runsDirPath: string;
|
|
82
99
|
}, artifactStores: PerRunArtifactStore[]): Promise<PurgeRunsResult>;
|
|
83
100
|
export declare const purgeCommand: Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purge.d.ts","sourceRoot":"","sources":["../../src/commands/purge.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAS/E,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5D;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACtC,gBAAgB,CAiClB;AA+BD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gHAAgH;IAChH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED
|
|
1
|
+
{"version":3,"file":"purge.d.ts","sourceRoot":"","sources":["../../src/commands/purge.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAS/E,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5D;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACtC,gBAAgB,CAiClB;AA+BD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gHAAgH;IAChH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;OAKG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,wEAAwE;IACxE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,GACzC,mBAAmB,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxD,cAAc,EAAE,mBAAmB,EAAE,GACpC,OAAO,CAAC,eAAe,CAAC,CAuG1B;AAoFD,eAAO,MAAM,YAAY,SAoEtB,CAAC"}
|
package/dist/commands/purge.js
CHANGED
|
@@ -92,20 +92,27 @@ async function statMatchedBytes(runsDir, runId, dirEntries) {
|
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Selects eligible run(s) (single `runId` or a batch aged past `olderThan`), reports bytes and
|
|
95
|
-
* resumability, and — when `dryRun` is false — deletes them
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
95
|
+
* resumability, and — when `dryRun` is false — deletes them. Deletion is anchor-structural (issue
|
|
96
|
+
* #184): every `artifactStores` entry (non-anchor stores only) must succeed BEFORE
|
|
97
|
+
* `anchorStore.deleteAllForRun` — the `JsonFileStore` run file — is ever called, and only on
|
|
98
|
+
* total success. Any throw before that point leaves the anchor (and therefore the run) intact —
|
|
99
|
+
* the crash-anchor property is now structural (guaranteed by this function's control flow), not
|
|
100
|
+
* merely positional (an array-ordering convention a future edit could silently break — see
|
|
101
|
+
* `purge-guard.test.ts`'s ANCHOR checks for the source-text half of this guarantee).
|
|
102
|
+
*
|
|
103
|
+
* Continue-on-error across the batch: a `STATE_RUN_NOT_FOUND` hit while deleting (a concurrent
|
|
104
|
+
* purge already removed it) is bucketed as `already_purged`; a `STATE_RUN_BUSY` hit (another
|
|
105
|
+
* writer holds the lock, or the run was resumed since selection — issue #184) is bucketed as
|
|
106
|
+
* `blocked`; neither is ever a `failed`.
|
|
100
107
|
*/
|
|
101
|
-
export async function purgeRuns(options,
|
|
108
|
+
export async function purgeRuns(options, anchorStore, artifactStores) {
|
|
102
109
|
const dryRun = options.dryRun ?? true;
|
|
103
110
|
const now = new Date();
|
|
104
|
-
const runsDir =
|
|
111
|
+
const runsDir = anchorStore.runsDirPath;
|
|
105
112
|
const candidates = [];
|
|
106
113
|
const skipped = [];
|
|
107
114
|
if (options.runId !== undefined) {
|
|
108
|
-
const run = await
|
|
115
|
+
const run = await anchorStore.get(options.runId);
|
|
109
116
|
// explicit: true — the operator named this exact run, so a claim_unknown_age claim is an
|
|
110
117
|
// eligible override, never a healthy one (issue #107 correction).
|
|
111
118
|
const verdict = isPurgeEligible(run, { explicit: true, now });
|
|
@@ -118,7 +125,7 @@ export async function purgeRuns(options, runStore, artifactStores) {
|
|
|
118
125
|
}
|
|
119
126
|
else {
|
|
120
127
|
const thresholdMs = options.olderThan !== undefined ? parseDuration(options.olderThan) : 0;
|
|
121
|
-
const all = await
|
|
128
|
+
const all = await anchorStore.list(options.workflow);
|
|
122
129
|
for (const run of all) {
|
|
123
130
|
// explicit: false — a batch/cron sweep cannot prove an indeterminate-age claim's runner is
|
|
124
131
|
// dead, so claim_unknown_age is refused here (skipped+warned below), not overridden.
|
|
@@ -157,7 +164,14 @@ export async function purgeRuns(options, runStore, artifactStores) {
|
|
|
157
164
|
overriddenClaimStep,
|
|
158
165
|
});
|
|
159
166
|
}
|
|
160
|
-
const result = {
|
|
167
|
+
const result = {
|
|
168
|
+
selected,
|
|
169
|
+
skipped,
|
|
170
|
+
purged: [],
|
|
171
|
+
already_purged: [],
|
|
172
|
+
blocked: [],
|
|
173
|
+
failed: [],
|
|
174
|
+
};
|
|
161
175
|
if (dryRun)
|
|
162
176
|
return result;
|
|
163
177
|
for (const { run } of selected) {
|
|
@@ -165,16 +179,27 @@ export async function purgeRuns(options, runStore, artifactStores) {
|
|
|
165
179
|
// Re-check the run still exists immediately before deleting — closes the window against a
|
|
166
180
|
// concurrent purge that already removed it between selection and here. A STATE_RUN_NOT_FOUND
|
|
167
181
|
// surfacing here means "already gone," which the catch below routes to already_purged.
|
|
168
|
-
await
|
|
182
|
+
await anchorStore.get(run.id);
|
|
169
183
|
for (const store of artifactStores) {
|
|
170
184
|
await store.deleteAllForRun(run.id, dirEntries);
|
|
171
185
|
}
|
|
186
|
+
// The anchor LAST, and only on total success (issue #184) — structural crash-anchor: any
|
|
187
|
+
// throw above (from a non-anchor artifact store) never reaches this line, so the run file
|
|
188
|
+
// is guaranteed intact for re-enumeration on the next pass.
|
|
189
|
+
await anchorStore.deleteAllForRun(run.id, dirEntries);
|
|
172
190
|
result.purged.push(run.id);
|
|
173
191
|
}
|
|
174
192
|
catch (err) {
|
|
175
193
|
if (err instanceof WorkflowError && err.code === 'STATE_RUN_NOT_FOUND') {
|
|
176
194
|
result.already_purged.push(run.id);
|
|
177
195
|
}
|
|
196
|
+
else if (err instanceof WorkflowError && err.code === 'STATE_RUN_BUSY') {
|
|
197
|
+
const reason = err.details['reason'];
|
|
198
|
+
result.blocked.push({
|
|
199
|
+
runId: run.id,
|
|
200
|
+
reason: typeof reason === 'string' ? reason : err.message,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
178
203
|
else {
|
|
179
204
|
result.failed.push({
|
|
180
205
|
runId: run.id,
|
|
@@ -213,12 +238,14 @@ function printPurgeReport(result, dryRun) {
|
|
|
213
238
|
console.log('No eligible runs found to purge.');
|
|
214
239
|
return;
|
|
215
240
|
}
|
|
216
|
-
const totalBytes = result.selected.reduce((sum, c) => sum + c.bytes, 0);
|
|
217
241
|
const resumableCount = result.selected.filter((c) => c.resumable).length;
|
|
218
242
|
const resumableLine = `${resumableCount} of ${result.selected.length} selected run(s) ` +
|
|
219
243
|
`${dryRun ? 'are' : 'were'} resumable via 'realm resume' — ` +
|
|
220
244
|
`purging ${dryRun ? 'would destroy' : 'has destroyed'} that path ${dryRun ? 'permanently' : 'for them'}.`;
|
|
221
245
|
if (dryRun) {
|
|
246
|
+
// Dry-run's "to free" total is a PROJECTION over every selected candidate — nothing has been
|
|
247
|
+
// purged yet, so the full selected total is the correct (and only sensible) figure here.
|
|
248
|
+
const totalBytes = result.selected.reduce((sum, c) => sum + c.bytes, 0);
|
|
222
249
|
console.log(`${result.selected.length} run(s) WOULD be purged (${formatBytes(totalBytes)} to free):`);
|
|
223
250
|
for (const c of result.selected) {
|
|
224
251
|
const override = c.overriddenClaimStep !== undefined
|
|
@@ -229,13 +256,23 @@ function printPurgeReport(result, dryRun) {
|
|
|
229
256
|
console.log(`\n${resumableLine}\nRe-run with --force to actually delete.`);
|
|
230
257
|
return;
|
|
231
258
|
}
|
|
232
|
-
|
|
233
|
-
|
|
259
|
+
// issue #184: sum bytes over ACTUALLY-PURGED runs only — `selected` also includes candidates
|
|
260
|
+
// that ended up already_purged/blocked/failed, whose bytes were never actually freed. Summing
|
|
261
|
+
// over `selected` here would over-report "freed" bytes for anything but a 100%-successful batch.
|
|
262
|
+
const purgedIds = new Set(result.purged);
|
|
263
|
+
const freedBytes = result.selected
|
|
264
|
+
.filter((c) => purgedIds.has(c.run.id))
|
|
265
|
+
.reduce((sum, c) => sum + c.bytes, 0);
|
|
266
|
+
console.log(`Purged ${result.purged.length}/${result.selected.length} run(s) (${formatBytes(freedBytes)} freed). ` +
|
|
267
|
+
`${result.already_purged.length} already gone, ${result.blocked.length} blocked, ${result.failed.length} failed.`);
|
|
234
268
|
for (const c of result.selected) {
|
|
235
269
|
if (c.overriddenClaimStep !== undefined) {
|
|
236
270
|
console.log(` ⚠ ${c.run.id}: ${overriddenClaimPhrase(c.overriddenClaimStep, false)}`);
|
|
237
271
|
}
|
|
238
272
|
}
|
|
273
|
+
for (const b of result.blocked) {
|
|
274
|
+
console.error(` ⚠ ${b.runId}: ${b.reason}`);
|
|
275
|
+
}
|
|
239
276
|
for (const f of result.failed) {
|
|
240
277
|
console.error(` ✗ ${f.runId}: ${f.error}`);
|
|
241
278
|
}
|
|
@@ -266,14 +303,14 @@ export const purgeCommand = new Command('purge')
|
|
|
266
303
|
const runsDir = runStore.runsDirPath;
|
|
267
304
|
const failedAttemptStore = new FailedAttemptStore(runsDir);
|
|
268
305
|
const traceBufferStore = new JsonTraceBufferStore(runsDir);
|
|
269
|
-
//
|
|
270
|
-
//
|
|
271
|
-
//
|
|
272
|
-
//
|
|
306
|
+
// The crash-anchor is now STRUCTURAL, not positional (issue #184): runStore (JsonFileStore)
|
|
307
|
+
// is passed to purgeRuns as the separate anchorStore argument, and purgeRuns's own control
|
|
308
|
+
// flow guarantees it is only ever deleted after every entry below has succeeded — it is
|
|
309
|
+
// deliberately ABSENT from this array. purge-guard.test.ts's ANCHOR check asserts this
|
|
310
|
+
// absence via source-text; do not re-add it here.
|
|
273
311
|
const artifactStores = [
|
|
274
312
|
traceBufferStore, // JsonTraceBufferStore
|
|
275
313
|
failedAttemptStore, // FailedAttemptStore
|
|
276
|
-
runStore, // JsonFileStore — LAST: crash-anchor (issue #107)
|
|
277
314
|
];
|
|
278
315
|
const dryRun = opts.force !== true;
|
|
279
316
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"purge.js","sourceRoot":"","sources":["../../src/commands/purge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"purge.js","sourceRoot":"","sources":["../../src/commands/purge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import 'dotenv/config';
|
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { workflowCommands, runCommands, topLevelCommands } from './commands-registry.js';
|
|
6
6
|
const program = new Command();
|
|
7
|
-
program.name('realm').description('Realm workflow engine CLI').version('0.
|
|
7
|
+
program.name('realm').description('Realm workflow engine CLI').version('0.25.0');
|
|
8
8
|
// realm workflow — operations on workflow definitions
|
|
9
9
|
const workflowCmd = new Command('workflow').description('Manage workflow definitions');
|
|
10
10
|
for (const cmd of workflowCommands)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sensigo/realm-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"vitest": "^4.1.0"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@sensigo/realm": "^0.
|
|
65
|
-
"@sensigo/realm-mcp": "^0.
|
|
66
|
-
"@sensigo/realm-testing": "^0.
|
|
64
|
+
"@sensigo/realm": "^0.25.0",
|
|
65
|
+
"@sensigo/realm-mcp": "^0.25.0",
|
|
66
|
+
"@sensigo/realm-testing": "^0.25.0",
|
|
67
67
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
68
68
|
"chalk": "^5.0.0",
|
|
69
69
|
"commander": "^14.0.3",
|