@shapeshift-labs/frontier-swarm-codex 0.5.88 → 0.5.90
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/README.md +5 -3
- package/dist/artifact-compression.d.ts +10 -0
- package/dist/artifact-compression.d.ts.map +1 -0
- package/dist/artifact-compression.js +40 -0
- package/dist/artifact-compression.js.map +1 -0
- package/dist/artifact-sqlite.d.ts +4 -0
- package/dist/artifact-sqlite.d.ts.map +1 -0
- package/dist/artifact-sqlite.js +89 -0
- package/dist/artifact-sqlite.js.map +1 -0
- package/dist/artifact-store.d.ts.map +1 -1
- package/dist/artifact-store.js +70 -26
- package/dist/artifact-store.js.map +1 -1
- package/dist/cleanup.d.ts.map +1 -1
- package/dist/cleanup.js +58 -4
- package/dist/cleanup.js.map +1 -1
- package/dist/cli-help.js +2 -2
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/codex-workspace-changes.js +9 -0
- package/dist/codex-workspace-changes.js.map +1 -1
- package/dist/collect-dashboard.d.ts.map +1 -1
- package/dist/collect-dashboard.js +10 -0
- package/dist/collect-dashboard.js.map +1 -1
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +3 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/patch-score-semantic.d.ts.map +1 -1
- package/dist/patch-score-semantic.js +37 -13
- package/dist/patch-score-semantic.js.map +1 -1
- package/dist/query-semantic-edit.d.ts +11 -0
- package/dist/query-semantic-edit.d.ts.map +1 -1
- package/dist/query-semantic-edit.js +48 -2
- package/dist/query-semantic-edit.js.map +1 -1
- package/dist/query.d.ts +2 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +26 -3
- package/dist/query.js.map +1 -1
- package/dist/score.js +3 -1
- package/dist/score.js.map +1 -1
- package/dist/semantic-compact-summary.d.ts +7 -0
- package/dist/semantic-compact-summary.d.ts.map +1 -0
- package/dist/semantic-compact-summary.js +107 -0
- package/dist/semantic-compact-summary.js.map +1 -0
- package/dist/semantic-edit-clean-eligibility.d.ts +5 -0
- package/dist/semantic-edit-clean-eligibility.d.ts.map +1 -0
- package/dist/semantic-edit-clean-eligibility.js +24 -0
- package/dist/semantic-edit-clean-eligibility.js.map +1 -0
- package/dist/semantic-edit-projection.d.ts +5 -0
- package/dist/semantic-edit-projection.d.ts.map +1 -0
- package/dist/semantic-edit-projection.js +117 -0
- package/dist/semantic-edit-projection.js.map +1 -0
- package/dist/semantic-import-quality.d.ts.map +1 -1
- package/dist/semantic-import-quality.js +14 -0
- package/dist/semantic-import-quality.js.map +1 -1
- package/dist/semantic-import-select.d.ts +1 -0
- package/dist/semantic-import-select.d.ts.map +1 -1
- package/dist/semantic-import-select.js +1 -0
- package/dist/semantic-import-select.js.map +1 -1
- package/dist/semantic-import-sidecar.d.ts.map +1 -1
- package/dist/semantic-import-sidecar.js +4 -0
- package/dist/semantic-import-sidecar.js.map +1 -1
- package/dist/semantic-import.d.ts.map +1 -1
- package/dist/semantic-import.js +10 -0
- package/dist/semantic-import.js.map +1 -1
- package/dist/types-collection.d.ts +9 -0
- package/dist/types-collection.d.ts.map +1 -1
- package/dist/types-evidence.d.ts +2 -0
- package/dist/types-evidence.d.ts.map +1 -1
- package/dist/types-semantic-compact.d.ts +74 -0
- package/dist/types-semantic-compact.d.ts.map +1 -0
- package/dist/types-semantic-compact.js +2 -0
- package/dist/types-semantic-compact.js.map +1 -0
- package/dist/types-semantic-edit-projection.d.ts +16 -0
- package/dist/types-semantic-edit-projection.d.ts.map +1 -0
- package/dist/types-semantic-edit-projection.js +2 -0
- package/dist/types-semantic-edit-projection.js.map +1 -0
- package/dist/types-semantic.d.ts +4 -0
- package/dist/types-semantic.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -277,7 +277,7 @@ App-specific adapters should keep orchestration inside this package and use hook
|
|
|
277
277
|
|
|
278
278
|
Use `modelPolicy: 'config-default'` for portable swarms that should respect each machine's Codex config. Use `modelPolicy: 'plan'` only when the installed Codex CLI and account are known to accept the planned model IDs. `approval: 'full-auto'` and `--approval-policy full-auto` are normalized to the current `--ask-for-approval never` spelling.
|
|
279
279
|
|
|
280
|
-
Pass `--semantic-import` or `semanticImport: true` to write a `semantic-imports.json` sidecar for changed source files. The sidecar uses the optional `@shapeshift-labs/frontier-lang` dependency to import supported native sources into Frontier Lang universal ASTs, summarize source maps/losses/semantic indexes/dependency relations/universal AST layers/proof-spec records/paradigm semantics records, record native compile/projection readiness when available, and attach semantic merge-candidate metadata to each worker merge bundle. Use `--semantic-import-include`, `--semantic-import-exclude`, `--semantic-import-max-files`, and `--semantic-import-max-bytes` to keep the import pass scoped. In copied/snapshot workspaces, semantic import selects changed source paths plus concrete task source/target refs so a worker can still produce symbols, call/use dependency edges, ownership regions, universal AST layer quality, proof obligation status, paradigm/lowering hints, and patch hints when changed-path collection is filtered. It snapshots selected worker sources before execution as `baseSource.source: "workspace-snapshot"` and records current coordinator/git text as `headSource`, letting semantic edit scripts distinguish base text, worker text, and current head when classifying portable, already-applied, stale, and conflicting edits. Include globs support `**` and can match stripped copied-workspace suffixes, so a parent-root glob such as `snes/packages/domain/src/**/*.js` still matches a minimal workspace rooted at `packages/domain` or `src`. Use `--semantic-import-expected` when zero selected/imported files or zero universal AST layers should be called out in patch intent and collection dashboards. Patch intent, collected evidence, coordinator query, compact dashboard, and tournament query output include selected/eligible/imported/candidate counts, symbols, ownership regions, inferred lineage move/rename/delete counts when supplied by Lang or worker evidence, quality warnings, `expectedSatisfied`, and `expectedMissingReasonCodes` so coordinators can sort empty or stale semantic sidecars without opening every worker directory.
|
|
280
|
+
Pass `--semantic-import` or `semanticImport: true` to write a `semantic-imports.json` sidecar for changed source files. The sidecar uses the optional `@shapeshift-labs/frontier-lang` dependency to import supported native sources into Frontier Lang universal ASTs, summarize source maps/losses/semantic indexes/dependency relations/universal AST layers/proof-spec records/paradigm semantics records, record native compile/projection readiness when available, and attach semantic merge-candidate metadata to each worker merge bundle. Use `--semantic-import-include`, `--semantic-import-exclude`, `--semantic-import-max-files`, and `--semantic-import-max-bytes` to keep the import pass scoped. In copied/snapshot workspaces, semantic import selects changed source paths plus concrete task source/target refs so a worker can still produce symbols, call/use dependency edges, ownership regions, universal AST layer quality, proof obligation status, paradigm/lowering hints, and patch hints when changed-path collection is filtered. It snapshots selected worker sources before execution as `baseSource.source: "workspace-snapshot"` and records current coordinator/git text as `headSource`, letting semantic edit scripts distinguish base text, worker text, and current head when classifying portable, already-applied, stale, and conflicting edits. When Lang exposes semantic edit projection, the sidecar also records whether projected source reproduced the worker file hash; missing, blocked, mismatched, or unknown projection checks downgrade auto-merge readiness. Include globs support `**` and can match stripped copied-workspace suffixes, so a parent-root glob such as `snes/packages/domain/src/**/*.js` still matches a minimal workspace rooted at `packages/domain` or `src`. Use `--semantic-import-expected` when zero selected/imported files or zero universal AST layers should be called out in patch intent and collection dashboards. Patch intent, collected evidence, coordinator query, compact dashboard, and tournament query output include selected/eligible/imported/candidate counts, symbols, ownership regions, inferred lineage move/rename/delete counts when supplied by Lang or worker evidence, projection match/mismatch counts, quality warnings, `expectedSatisfied`, and `expectedMissingReasonCodes` so coordinators can sort empty or stale semantic sidecars without opening every worker directory.
|
|
281
281
|
|
|
282
282
|
The sidecar source records are intentionally tiny and stable:
|
|
283
283
|
|
|
@@ -333,13 +333,15 @@ Each run writes event streams under `streams/`, a `coordinator-dashboard.json` s
|
|
|
333
333
|
- `failed-evidence/` for failed workers, blockers, ownership violations, or failed required commands,
|
|
334
334
|
- `stale-against-head/` for patch bundles that no longer apply.
|
|
335
335
|
|
|
336
|
-
It also writes `merge-index.json`, `queue-overlay.json`, `strategy-tournament.json`, `strategy-history.json`, `tournament-adaptive-feedback.json`, `evidence-index.json`, `merge-admission.json`, `coordinator-query.json`, and `compact-dashboard.json` so coordinator dashboards can show changed paths, tests, semantic selected/eligible/imported/candidate counts, semantic dependency relations, semantic regions, lineage moves/renames/deletes, semantic edit-script portable/conflict/stale/admission counts, semantic edit admission decisions, universal AST layer quality, proof obligation status, quality warnings, source citations, risk, ready-to-port hunks, stale patches, duplicate surfaces, semantic import quality, evidence scores, pid liveness, conflicts, derived queue status, strategy payoff standings, tournament history, adaptive feedback, and ready merge pressure without scraping every worker directory. `coordinator-query.json`, `compact-dashboard.json`, and collected `evidence.json` expose `semanticEditAdmission` directly with status, clean eligibility, auto-merge candidacy, and reasons. Use `frontier-swarm query --collection <dir> --symbol computeThing`, `--lineage`, `--semantic-edit-status conflict|portable|stale`, `--semantic-edit-admission auto-merge-candidate|needs-port|conflict|stale`, or `--readiness ready-to-port|ready-to-apply|stale|discovery-only|blocked|evidence-only` for compact coordinator views. Stale checks distinguish patches that fail only because the coordinator worktree is dirty from patches whose base hashes no longer match HEAD. Copied/no-index workspace patches with source-side absolute paths are normalized back to repo-relative paths when possible; patches without comparable base hashes are treated as `needs-human-port`, not stale. The optional `--branch-prefix` adds suggested tiny patch branch names to each collected bundle so accepted slices can become one small branch/commit per surface, evidence path, and queue status overlay.
|
|
336
|
+
It also writes `merge-index.json`, `queue-overlay.json`, `strategy-tournament.json`, `strategy-history.json`, `tournament-adaptive-feedback.json`, `evidence-index.json`, `merge-admission.json`, `coordinator-query.json`, and `compact-dashboard.json` so coordinator dashboards can show changed paths, tests, semantic selected/eligible/imported/candidate counts, semantic dependency relations, semantic regions, lineage moves/renames/deletes, semantic edit-script portable/conflict/stale/admission counts, semantic edit projection match/mismatch counts, semantic edit admission decisions, universal AST layer quality, proof obligation status, quality warnings, source citations, risk, ready-to-port hunks, stale patches, duplicate surfaces, semantic import quality, evidence scores, pid liveness, conflicts, derived queue status, strategy payoff standings, tournament history, adaptive feedback, and ready merge pressure without scraping every worker directory. `coordinator-query.json`, `compact-dashboard.json`, and collected `evidence.json` expose `semanticEditAdmission` directly with status, clean eligibility, auto-merge candidacy, and reasons. Use `frontier-swarm query --collection <dir> --symbol computeThing`, `--lineage`, `--semantic-edit-status conflict|portable|stale`, `--semantic-edit-admission auto-merge-candidate|needs-port|conflict|stale`, `--semantic-edit-projection projected|blocked|worker-match|worker-mismatch|worker-unknown`, or `--readiness ready-to-port|ready-to-apply|stale|discovery-only|blocked|evidence-only` for compact coordinator views. Stale checks distinguish patches that fail only because the coordinator worktree is dirty from patches whose base hashes no longer match HEAD. Copied/no-index workspace patches with source-side absolute paths are normalized back to repo-relative paths when possible; patches without comparable base hashes are treated as `needs-human-port`, not stale. The optional `--branch-prefix` adds suggested tiny patch branch names to each collected bundle so accepted slices can become one small branch/commit per surface, evidence path, and queue status overlay.
|
|
337
|
+
|
|
338
|
+
Collection is also the archive boundary for large swarm runs. `collect` writes `artifact-store/artifacts.jsonl`, `artifact-store/artifact-index.sqlite` when the runtime provides `node:sqlite`, SQL export text, and content-addressed blobs under `artifact-store/blobs/`. Text-heavy artifacts such as JSON, JSONL, logs, patches, Markdown, and text files are compressed with zstd when available and gzip otherwise, while metadata records keep job id, kind, path, hash, compression, tags, and semantic summaries queryable. Full `semantic-imports.json` sidecars stay in compressed blobs; artifact metadata keeps a compact `semanticCompactSummary` with selected/imported counts, symbols, ownership regions, dependency counts, lineage, source/base/head hashes when available, semantic edit status, projection worker-match evidence, and admission fields so coordinators can query sidecars without opening huge JSON. `frontier-swarm query` can read the SQLite index directly, including `--semantic-edit-status`, `--semantic-edit-admission`, and `--semantic-edit-projection` filters, so archived collections remain searchable even after JSONL has been removed. After reviewing the dry run, use `frontier-swarm cleanup --run <run-dir> --compact-artifacts --write` to delete run-side artifact source files and disposable worker workspaces that already have a `collected-and-indexed.json` marker and preserved blobs. Pass `--collection <dir>` when `collect --outDir` wrote the archive outside the default run directory. Cleanup keeps failed or active work by default and reports exactly what would be deleted unless `--write` is passed.
|
|
337
339
|
|
|
338
340
|
`frontier-swarm tournament query --collection <collection-dir>` reads `strategy-tournament.json` and emits filtered JSON views. When the collection also has `compact-dashboard.json` or `coordinator-query.json`, the query result includes a `semanticImport` block with aggregate quality plus per-job quality summaries. Use `--view summary|standings|matches|full`, `--strategy`, `--game`, `--outcome`, `--tag`, `--min-score`, `--max-score`, and `--limit` to narrow review. `frontier-swarm tournament compare --baseline <file> --current <file>` compares two tournaments, `frontier-swarm tournament history --tournament <file>` folds one or more tournaments into cross-run standings, and `frontier-swarm tournament feedback --collection <dir>` emits adaptive scheduler observations. Pass that feedback into a later run with `--adaptive --adaptive-feedback <tournament-adaptive-feedback.json>`.
|
|
339
341
|
|
|
340
342
|
`frontier-swarm apply --collection <collection-dir>` reviews the `ready-to-apply/` bucket and writes `apply-ledger.json`. It defaults to `--dry-run`, which runs `git apply --check` without mutating the checkout. Non-dry-run apply refuses a dirty worktree unless `--allow-dirty` is passed, and can optionally create small branches with `--branch-prefix` and commits with `--commit`.
|
|
341
343
|
|
|
342
|
-
`frontier-swarm score --collection <collection-dir>` applies each collected bundle in a throwaway workspace and writes `patch-score.json`. Use `--focused-command` for the gate that proves the slice and `--global-command` with `--global-glob` for shared-code smoke/type/build gates. Scores are classified as `accepted-clean`, `accepted-needs-port`, `conflict`, `test-fail`, `stale`, or `evidence-only`, so the coordinator can review the best patch candidates before manually reading every bundle. When semantic import sidecars are present, the score entries include `semanticEvidence` with source-map mapping counts, semantic symbols, dependency relation counts/predicates, ownership regions, patch hints, lineage counts, semantic edit-script admission, losses, readiness, proof obligation counts, failed/stale proof status, paradigm/lowering record counts, and an advisory score adjustment. Missing or empty semantic evidence downgrades otherwise clean source patches to `accepted-needs-port` instead of treating textual apply success as merge readiness; blocked or ambiguous lineage evidence, stale semantic edit anchors,
|
|
344
|
+
`frontier-swarm score --collection <collection-dir>` applies each collected bundle in a throwaway workspace and writes `patch-score.json`. Use `--workspace-include` / `--workspace-exclude` to keep score workspaces small, `--focused-command` for the gate that proves the slice, and `--global-command` with `--global-glob` for shared-code smoke/type/build gates. Scores are classified as `accepted-clean`, `accepted-needs-port`, `conflict`, `test-fail`, `stale`, or `evidence-only`, so the coordinator can review the best patch candidates before manually reading every bundle. When semantic import sidecars are present, the score entries include `semanticEvidence` with source-map mapping counts, semantic symbols, dependency relation counts/predicates, ownership regions, patch hints, lineage counts, semantic edit-script admission, semantic edit projection status, losses, readiness, proof obligation counts, failed/stale proof status, paradigm/lowering record counts, and an advisory score adjustment. Missing or empty semantic evidence downgrades otherwise clean source patches to `accepted-needs-port` instead of treating textual apply success as merge readiness; blocked or ambiguous lineage evidence, stale semantic edit anchors, conflicting semantic edit scripts, or blocked semantic edit projections also prevent an `accepted-clean` classification. If the collection has an `apply-ledger/apply-ledger.json`, scoring also emits `calibration` with landed job ids, predicted clean job ids, semantic auto-merge-candidate job ids, semantic candidate precision, false positives, and false negatives so tournament/adaptive scheduling can learn from actual merges.
|
|
343
345
|
|
|
344
346
|
## Surface
|
|
345
347
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface FrontierCodexCompressedArtifact {
|
|
2
|
+
bytes: Buffer;
|
|
3
|
+
compression: 'zstd' | 'gzip' | 'none';
|
|
4
|
+
extension: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function compressArtifactBytes(bytes: Buffer, options: {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
compressible: boolean;
|
|
9
|
+
}): Promise<FrontierCodexCompressedArtifact>;
|
|
10
|
+
//# sourceMappingURL=artifact-compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-compression.d.ts","sourceRoot":"","sources":["../src/artifact-compression.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GACnD,OAAO,CAAC,+BAA+B,CAAC,CAO1C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { gzip } from 'node:zlib';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
const gzipAsync = promisify(gzip);
|
|
5
|
+
let zstdUsable;
|
|
6
|
+
export async function compressArtifactBytes(bytes, options) {
|
|
7
|
+
if (!options.enabled || !options.compressible) {
|
|
8
|
+
return { bytes, compression: 'none', extension: '' };
|
|
9
|
+
}
|
|
10
|
+
const zstd = await zstdCompress(bytes).catch(() => undefined);
|
|
11
|
+
if (zstd)
|
|
12
|
+
return { bytes: zstd, compression: 'zstd', extension: '.zst' };
|
|
13
|
+
return { bytes: await gzipAsync(bytes), compression: 'gzip', extension: '.gz' };
|
|
14
|
+
}
|
|
15
|
+
async function zstdCompress(bytes) {
|
|
16
|
+
if (zstdUsable === false)
|
|
17
|
+
return undefined;
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const child = spawn('zstd', ['-q', '-T0', '-19', '-c'], { stdio: ['pipe', 'pipe', 'ignore'] });
|
|
20
|
+
const chunks = [];
|
|
21
|
+
child.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
22
|
+
child.on('error', (error) => {
|
|
23
|
+
zstdUsable = false;
|
|
24
|
+
reject(error);
|
|
25
|
+
});
|
|
26
|
+
child.on('close', (status) => {
|
|
27
|
+
if (status === 0) {
|
|
28
|
+
zstdUsable = true;
|
|
29
|
+
resolve(Buffer.concat(chunks));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
if (zstdUsable === undefined)
|
|
33
|
+
zstdUsable = false;
|
|
34
|
+
resolve(undefined);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
child.stdin.end(bytes);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=artifact-compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-compression.js","sourceRoot":"","sources":["../src/artifact-compression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,UAA+B,CAAC;AAQpC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,OAAoD;IAEpD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAa;IACvC,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,UAAU,KAAK,SAAS;oBAAE,UAAU,GAAG,KAAK,CAAC;gBACjD,OAAO,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FrontierCodexArtifactRecord } from './index.js';
|
|
2
|
+
export declare function writeSqliteArtifactIndex(file: string, records: readonly FrontierCodexArtifactRecord[]): Promise<boolean>;
|
|
3
|
+
export declare function readSqliteArtifactIndex(file: string): Promise<FrontierCodexArtifactRecord[]>;
|
|
4
|
+
//# sourceMappingURL=artifact-sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-sqlite.d.ts","sourceRoot":"","sources":["../src/artifact-sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAI9D,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,2BAA2B,EAAE,GAC9C,OAAO,CAAC,OAAO,CAAC,CAkClB;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAUlG"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
export async function writeSqliteArtifactIndex(file, records) {
|
|
5
|
+
const sqlite = loadSqlite();
|
|
6
|
+
if (!sqlite?.DatabaseSync)
|
|
7
|
+
return false;
|
|
8
|
+
await fs.rm(file, { force: true });
|
|
9
|
+
const db = new sqlite.DatabaseSync(file);
|
|
10
|
+
db.exec([
|
|
11
|
+
'create table artifacts (',
|
|
12
|
+
'id text, run_dir text, collection_dir text, job_id text, bucket text, kind text, path text, relative_path text,',
|
|
13
|
+
'sha256 text, blob_path text, compression text, bytes integer, compressed_bytes integer, mtime_ms real,',
|
|
14
|
+
'tags text, metadata_json text)'
|
|
15
|
+
].join(' '));
|
|
16
|
+
const stmt = db.prepare('insert into artifacts values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
|
|
17
|
+
for (const record of records) {
|
|
18
|
+
stmt.run(record.id, record.runDir, record.collectionDir, record.jobId ?? null, record.bucket ?? null, record.kind, record.path, record.relativePath, record.sha256, record.blobPath, record.compression, record.bytes, record.compressedBytes ?? null, record.mtimeMs, record.tags.join(','), JSON.stringify(record.metadata));
|
|
19
|
+
}
|
|
20
|
+
db.close();
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
export async function readSqliteArtifactIndex(file) {
|
|
24
|
+
const sqlite = loadSqlite();
|
|
25
|
+
if (!sqlite?.DatabaseSync)
|
|
26
|
+
return [];
|
|
27
|
+
const db = new sqlite.DatabaseSync(file, { readOnly: true });
|
|
28
|
+
try {
|
|
29
|
+
const rows = readSqliteRows(db);
|
|
30
|
+
return rows.map(rowToRecord);
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
db.close();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function readSqliteRows(db) {
|
|
37
|
+
try {
|
|
38
|
+
return db.prepare([
|
|
39
|
+
'select id, run_dir, collection_dir, job_id, bucket, kind, path, relative_path, sha256,',
|
|
40
|
+
'blob_path, compression, bytes, compressed_bytes, mtime_ms, tags, metadata_json from artifacts'
|
|
41
|
+
].join(' ')).all();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return db.prepare([
|
|
45
|
+
'select id, job_id, bucket, kind, path, relative_path, sha256,',
|
|
46
|
+
'blob_path, compression, bytes, compressed_bytes, tags, metadata_json from artifacts'
|
|
47
|
+
].join(' ')).all();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function rowToRecord(row) {
|
|
51
|
+
return {
|
|
52
|
+
id: row.id,
|
|
53
|
+
...(row.job_id ? { jobId: row.job_id } : {}),
|
|
54
|
+
...(row.bucket ? { bucket: row.bucket } : {}),
|
|
55
|
+
kind: row.kind,
|
|
56
|
+
path: row.path,
|
|
57
|
+
relativePath: row.relative_path,
|
|
58
|
+
sha256: row.sha256,
|
|
59
|
+
blobPath: row.blob_path,
|
|
60
|
+
compression: row.compression,
|
|
61
|
+
bytes: Number(row.bytes),
|
|
62
|
+
...(row.compressed_bytes === null ? {} : { compressedBytes: Number(row.compressed_bytes) }),
|
|
63
|
+
mtimeMs: Number(row.mtime_ms ?? 0),
|
|
64
|
+
tags: row.tags ? row.tags.split(',').filter(Boolean) : [],
|
|
65
|
+
metadata: parseMetadata(row.metadata_json),
|
|
66
|
+
runDir: row.run_dir ?? '',
|
|
67
|
+
collectionDir: row.collection_dir ?? ''
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function parseMetadata(value) {
|
|
71
|
+
if (!value)
|
|
72
|
+
return {};
|
|
73
|
+
try {
|
|
74
|
+
const parsed = JSON.parse(value);
|
|
75
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function loadSqlite() {
|
|
82
|
+
try {
|
|
83
|
+
return require('node:sqlite');
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=artifact-sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-sqlite.js","sourceRoot":"","sources":["../src/artifact-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAM5H,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,UAAU,EAAE,0BAA0B,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAoD5C;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAa5G"}
|
package/dist/artifact-store.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
|
-
import { createRequire } from 'node:module';
|
|
4
3
|
import path from 'node:path';
|
|
5
|
-
import { gzip } from 'node:zlib';
|
|
6
|
-
import { promisify } from 'node:util';
|
|
7
4
|
import { FRONTIER_SWARM_CODEX_ARTIFACT_STORE_KIND, FRONTIER_SWARM_CODEX_ARTIFACT_STORE_VERSION, FRONTIER_SWARM_CODEX_SEMANTIC_IMPORT_KIND } from './constants.js';
|
|
8
5
|
import { isObject, pathExists, uniqueStrings } from './common.js';
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import { compressArtifactBytes } from './artifact-compression.js';
|
|
7
|
+
import { readSqliteArtifactIndex, writeSqliteArtifactIndex } from './artifact-sqlite.js';
|
|
8
|
+
import { createSemanticCompactSummary } from './semantic-compact-summary.js';
|
|
11
9
|
const COMPRESS_EXTENSIONS = new Set(['.json', '.jsonl', '.log', '.txt', '.patch', '.md']);
|
|
12
10
|
export async function createCodexArtifactStore(input) {
|
|
13
11
|
const generatedAt = Date.now();
|
|
@@ -30,12 +28,13 @@ export async function createCodexArtifactStore(input) {
|
|
|
30
28
|
const sqlitePath = path.join(storeDir, 'artifact-index.sqlite');
|
|
31
29
|
await fs.writeFile(jsonlPath, records.map((record) => JSON.stringify(record)).join('\n') + (records.length ? '\n' : ''));
|
|
32
30
|
await fs.writeFile(sqlPath, renderArtifactSql(records));
|
|
33
|
-
const sqliteWritten = input.sqlite === false ? false : await
|
|
31
|
+
const sqliteWritten = input.sqlite === false ? false : await writeSqliteArtifactIndex(sqlitePath, records).catch(() => false);
|
|
34
32
|
const summary = {
|
|
35
33
|
artifactCount: records.length,
|
|
36
34
|
totalBytes: records.reduce((sum, record) => sum + record.bytes, 0),
|
|
37
35
|
compressedBytes: records.reduce((sum, record) => sum + (record.compressedBytes ?? record.bytes), 0),
|
|
38
36
|
blobCount: new Set(records.map((record) => record.sha256)).size,
|
|
37
|
+
zstdCount: records.filter((record) => record.compression === 'zstd').length,
|
|
39
38
|
gzipCount: records.filter((record) => record.compression === 'gzip').length,
|
|
40
39
|
sqliteWritten
|
|
41
40
|
};
|
|
@@ -63,6 +62,15 @@ export async function createCodexArtifactStore(input) {
|
|
|
63
62
|
return result;
|
|
64
63
|
}
|
|
65
64
|
export async function readCodexArtifactRecords(collectionDir) {
|
|
65
|
+
const sqlitePath = path.join(collectionDir, 'artifact-store', 'artifact-index.sqlite');
|
|
66
|
+
const sqliteRecords = await readSqliteArtifactIndex(sqlitePath).catch(() => []);
|
|
67
|
+
if (sqliteRecords.length > 0) {
|
|
68
|
+
return sqliteRecords.map((record) => ({
|
|
69
|
+
...record,
|
|
70
|
+
runDir: record.runDir || '',
|
|
71
|
+
collectionDir: record.collectionDir || collectionDir
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
66
74
|
const jsonlPath = path.join(collectionDir, 'artifact-store', 'artifacts.jsonl');
|
|
67
75
|
const text = await fs.readFile(jsonlPath, 'utf8');
|
|
68
76
|
return text.split(/\r?\n/).filter(Boolean).map((line) => JSON.parse(line));
|
|
@@ -100,12 +108,14 @@ async function createArtifactRecord(candidate, collection, options) {
|
|
|
100
108
|
const bytes = await fs.readFile(candidate.file);
|
|
101
109
|
const sha256 = createHash('sha256').update(bytes).digest('hex');
|
|
102
110
|
const relativePath = path.relative(collection.outDir, candidate.file).replace(/\\/g, '/');
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
111
|
+
const compressed = await compressArtifactBytes(bytes, {
|
|
112
|
+
enabled: options.compress,
|
|
113
|
+
compressible: COMPRESS_EXTENSIONS.has(path.extname(candidate.file).toLowerCase())
|
|
114
|
+
});
|
|
115
|
+
const blobPath = path.join(options.blobDir, sha256.slice(0, 2), `${sha256}${compressed.extension}`);
|
|
106
116
|
await fs.mkdir(path.dirname(blobPath), { recursive: true });
|
|
107
117
|
if (!await pathExists(blobPath))
|
|
108
|
-
await fs.writeFile(blobPath,
|
|
118
|
+
await fs.writeFile(blobPath, compressed.bytes);
|
|
109
119
|
const metadata = await readArtifactMetadata(candidate.file);
|
|
110
120
|
return {
|
|
111
121
|
id: `artifact:${sha256}`,
|
|
@@ -119,8 +129,8 @@ async function createArtifactRecord(candidate, collection, options) {
|
|
|
119
129
|
bytes: stat.size,
|
|
120
130
|
sha256,
|
|
121
131
|
blobPath,
|
|
122
|
-
compression:
|
|
123
|
-
...(
|
|
132
|
+
compression: compressed.compression,
|
|
133
|
+
...(compressed.compression !== 'none' ? { compressedBytes: compressed.bytes.byteLength } : {}),
|
|
124
134
|
mtimeMs: stat.mtimeMs,
|
|
125
135
|
tags: artifactTags(candidate, metadata),
|
|
126
136
|
metadata
|
|
@@ -135,6 +145,12 @@ async function readArtifactMetadata(file) {
|
|
|
135
145
|
return {};
|
|
136
146
|
const semanticImport = semanticImportSummaryForArtifact(parsed, file);
|
|
137
147
|
const lineage = semanticLineageForArtifact(parsed, semanticImport);
|
|
148
|
+
const semanticCompactSummary = createSemanticCompactSummary({
|
|
149
|
+
summary: semanticImport,
|
|
150
|
+
sidecar: parsed,
|
|
151
|
+
expected: semanticExpectedForArtifact(semanticImport)
|
|
152
|
+
});
|
|
153
|
+
const semanticEdit = semanticCompactSummary?.semanticEdit;
|
|
138
154
|
return isObject(parsed) ? {
|
|
139
155
|
artifactKind: typeof parsed.kind === 'string' ? parsed.kind : undefined,
|
|
140
156
|
disposition: parsed.disposition,
|
|
@@ -157,6 +173,22 @@ async function readArtifactMetadata(file) {
|
|
|
157
173
|
semanticLineageRenamed: numberField(lineage, 'renamed'),
|
|
158
174
|
semanticLineageDeleted: numberField(lineage, 'deleted'),
|
|
159
175
|
lineagePresent: Boolean(lineage) && numberField(lineage, 'inferredEvents') > 0,
|
|
176
|
+
semanticCompactSummary,
|
|
177
|
+
semanticEditScript: semanticEdit?.script,
|
|
178
|
+
semanticEditAdmission: semanticEdit?.admission,
|
|
179
|
+
semanticEditAdmissionStatus: semanticEdit?.status,
|
|
180
|
+
semanticEditAdmissionAutoMergeCandidate: semanticEdit?.autoMergeCandidate,
|
|
181
|
+
semanticEditAdmissionCleanEligible: semanticEdit?.cleanEligible,
|
|
182
|
+
semanticEditScriptPortable: semanticEdit?.script.portable,
|
|
183
|
+
semanticEditScriptConflicts: semanticEdit?.script.conflicts,
|
|
184
|
+
semanticEditScriptStale: semanticEdit?.script.stale,
|
|
185
|
+
semanticEditScriptNeedsPort: semanticEdit?.script.needsPort,
|
|
186
|
+
semanticEditProjectionProjected: semanticEdit?.projection?.projected,
|
|
187
|
+
semanticEditProjectionBlocked: semanticEdit?.projection?.blocked,
|
|
188
|
+
semanticEditProjectionMatchesWorker: semanticEdit?.projection?.projectedSourceMatchesWorker,
|
|
189
|
+
semanticEditProjectionMismatchesWorker: semanticEdit?.projection?.projectedSourceMismatchesWorker,
|
|
190
|
+
semanticEditProjectionMatchUnknown: semanticEdit?.projection?.projectedSourceMatchUnknown,
|
|
191
|
+
semanticSourceCount: semanticCompactSummary?.sourceCount,
|
|
160
192
|
traceShards: Array.isArray(parsed.traceShards) ? parsed.traceShards.length : undefined
|
|
161
193
|
} : {};
|
|
162
194
|
}
|
|
@@ -174,6 +206,18 @@ function artifactTags(candidate, metadata) {
|
|
|
174
206
|
semanticPresent ? 'semantic-import' : '',
|
|
175
207
|
candidate.kind === 'semantic-imports' ? 'semantic-imports' : '',
|
|
176
208
|
lineagePresent ? 'semantic-lineage' : '',
|
|
209
|
+
typeof metadata.semanticEditAdmissionStatus === 'string' ? `semantic-edit-admission-${metadata.semanticEditAdmissionStatus}` : '',
|
|
210
|
+
metadata.semanticEditAdmissionAutoMergeCandidate ? 'semantic-edit-admission-auto-merge-candidate' : '',
|
|
211
|
+
metadata.semanticEditAdmissionCleanEligible ? 'semantic-edit-admission-clean-eligible' : '',
|
|
212
|
+
Number(metadata.semanticEditScriptPortable ?? 0) > 0 ? 'semantic-edit-portable' : '',
|
|
213
|
+
Number(metadata.semanticEditProjectionProjected ?? 0) > 0 ? 'semantic-edit-projected' : '',
|
|
214
|
+
Number(metadata.semanticEditProjectionBlocked ?? 0) > 0 ? 'semantic-edit-projection-blocked' : '',
|
|
215
|
+
Number(metadata.semanticEditProjectionMatchesWorker ?? 0) > 0 ? 'semantic-edit-projection-worker-match' : '',
|
|
216
|
+
Number(metadata.semanticEditProjectionMismatchesWorker ?? 0) > 0 ? 'semantic-edit-projection-worker-mismatch' : '',
|
|
217
|
+
Number(metadata.semanticEditProjectionMatchUnknown ?? 0) > 0 ? 'semantic-edit-projection-worker-unknown' : '',
|
|
218
|
+
Number(metadata.semanticEditScriptConflicts ?? 0) > 0 ? 'semantic-edit-conflict' : '',
|
|
219
|
+
Number(metadata.semanticEditScriptStale ?? 0) > 0 ? 'semantic-edit-stale' : '',
|
|
220
|
+
Number(metadata.semanticEditScriptNeedsPort ?? 0) > 0 ? 'semantic-edit-needs-port' : '',
|
|
177
221
|
metadata.staleAgainstHead ? 'stale' : '',
|
|
178
222
|
Number(metadata.traceShards ?? 0) > 0 ? 'trace' : '',
|
|
179
223
|
Number(metadata.semanticDependencyRelations ?? 0) > 0 ? 'semantic-dependencies' : ''
|
|
@@ -182,6 +226,8 @@ function artifactTags(candidate, metadata) {
|
|
|
182
226
|
function renderArtifactSql(records) {
|
|
183
227
|
const rows = records.map((record) => `insert into artifacts values (${[
|
|
184
228
|
record.id,
|
|
229
|
+
record.runDir,
|
|
230
|
+
record.collectionDir,
|
|
185
231
|
record.jobId ?? null,
|
|
186
232
|
record.bucket ?? null,
|
|
187
233
|
record.kind,
|
|
@@ -192,27 +238,19 @@ function renderArtifactSql(records) {
|
|
|
192
238
|
record.compression,
|
|
193
239
|
record.bytes,
|
|
194
240
|
record.compressedBytes ?? null,
|
|
241
|
+
record.mtimeMs,
|
|
195
242
|
record.tags.join(','),
|
|
196
243
|
JSON.stringify(record.metadata)
|
|
197
244
|
].map(sqlValue).join(', ')});`);
|
|
198
245
|
return [
|
|
199
|
-
|
|
246
|
+
[
|
|
247
|
+
'create table if not exists artifacts (id text, run_dir text, collection_dir text, job_id text, bucket text,',
|
|
248
|
+
'kind text, path text, relative_path text, sha256 text, blob_path text, compression text, bytes integer,',
|
|
249
|
+
'compressed_bytes integer, mtime_ms real, tags text, metadata_json text);'
|
|
250
|
+
].join(' '),
|
|
200
251
|
...rows
|
|
201
252
|
].join('\n') + '\n';
|
|
202
253
|
}
|
|
203
|
-
async function writeSqliteIndex(file, records) {
|
|
204
|
-
const sqlite = require('node:sqlite');
|
|
205
|
-
if (!sqlite.DatabaseSync)
|
|
206
|
-
return false;
|
|
207
|
-
await fs.rm(file, { force: true });
|
|
208
|
-
const db = new sqlite.DatabaseSync(file);
|
|
209
|
-
db.exec('create table artifacts (id text, job_id text, bucket text, kind text, path text, relative_path text, sha256 text, blob_path text, compression text, bytes integer, compressed_bytes integer, tags text, metadata_json text)');
|
|
210
|
-
const stmt = db.prepare('insert into artifacts values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
|
|
211
|
-
for (const record of records)
|
|
212
|
-
stmt.run(record.id, record.jobId ?? null, record.bucket ?? null, record.kind, record.path, record.relativePath, record.sha256, record.blobPath, record.compression, record.bytes, record.compressedBytes ?? null, record.tags.join(','), JSON.stringify(record.metadata));
|
|
213
|
-
db.close();
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
254
|
function artifactKindForEvidencePath(file) {
|
|
217
255
|
const name = path.basename(file).toLowerCase();
|
|
218
256
|
if (name === 'semantic-imports.json')
|
|
@@ -243,6 +281,12 @@ function semanticLineageForArtifact(parsed, semanticImport) {
|
|
|
243
281
|
readObject(semanticImport?.semanticLineage) ??
|
|
244
282
|
readObject(semanticImport?.semanticLineageInference);
|
|
245
283
|
}
|
|
284
|
+
function semanticExpectedForArtifact(semanticImport) {
|
|
285
|
+
return semanticImport?.semanticImportExpected === true ||
|
|
286
|
+
semanticImport?.expected === true ||
|
|
287
|
+
readObject(semanticImport?.quality)?.expected === true ||
|
|
288
|
+
readObject(semanticImport?.admission)?.expected === true;
|
|
289
|
+
}
|
|
246
290
|
function readObject(value) {
|
|
247
291
|
return isObject(value) ? value : undefined;
|
|
248
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,yCAAyC,EAC1C,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAK9C;IACC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE;YACrE,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,KAAK;YAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;SAC7D,CAAC,CAAC;QACH,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9H,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,OAAO,CAAC,MAAM;QAC7B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnG,SAAS,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC/D,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,MAAM;QAC3E,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,MAAM;QAC3E,aAAa;KACd,CAAC;IACF,MAAM,MAAM,GAAqC;QAC/C,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,2CAA2C;QACpD,WAAW;QACX,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QAC/B,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QACtC,QAAQ;QACR,SAAS;QACT,OAAO;QACP,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO;QACP,OAAO;KACR,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvG,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,4BAA4B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAClG,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QAC/B,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QACtC,WAAW;QACX,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC;QACzD,OAAO;KACR,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,aAAqB;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IACvF,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpC,GAAG,MAAM;YACT,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa;SACrD,CAAC,CAAC,CAAC;IACN,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,yBAAyB,CAAC,UAAsC;IACvE,MAAM,GAAG,GAA2E,EAAE,CAAC;IACvF,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/G,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3G,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9G,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACtD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,mCAAmC,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,EAAE,CAAC;QAC9Q,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,SAA0E,EAC1E,UAAsC,EACtC,OAAyE;IAEzE,IAAI,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IAC7E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE;QACpD,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;KAClF,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IACpG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC;QAAE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO;QACL,EAAE,EAAE,YAAY,MAAM,EAAE;QACxB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,YAAY;QACZ,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,KAAK,EAAE,IAAI,CAAC,IAAI;QAChB,MAAM;QACN,QAAQ;QACR,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,GAAG,CAAC,UAAU,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;QACvC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,gCAAgC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;YAC1D,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,2BAA2B,CAAC,cAAc,CAAC;SACtD,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,sBAAsB,EAAE,YAAY,CAAC;QAC1D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,YAAY,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACvE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACzF,eAAe,EAAE,OAAO,CAAC,cAAc,CAAC;YACxC,mBAAmB,EAAE,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;YACzD,gBAAgB,EAAE,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC;YACzD,gBAAgB,EAAE,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC;YACzD,gBAAgB,EAAE,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC;YACzD,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;YAClF,wBAAwB,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;YACvG,kBAAkB,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE,YAAY,CAAC;YAC3F,2BAA2B,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC;YAC3F,4BAA4B,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC;YAC/F,qBAAqB,EAAE,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAC7D,oBAAoB,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;YACnD,sBAAsB,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;YACvD,sBAAsB,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;YACvD,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAC9E,sBAAsB;YACtB,kBAAkB,EAAE,YAAY,EAAE,MAAM;YACxC,qBAAqB,EAAE,YAAY,EAAE,SAAS;YAC9C,2BAA2B,EAAE,YAAY,EAAE,MAAM;YACjD,uCAAuC,EAAE,YAAY,EAAE,kBAAkB;YACzE,kCAAkC,EAAE,YAAY,EAAE,aAAa;YAC/D,0BAA0B,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ;YACzD,2BAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS;YAC3D,uBAAuB,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK;YACnD,2BAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS;YAC3D,+BAA+B,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS;YACpE,6BAA6B,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO;YAChE,mCAAmC,EAAE,YAAY,EAAE,UAAU,EAAE,4BAA4B;YAC3F,sCAAsC,EAAE,YAAY,EAAE,UAAU,EAAE,+BAA+B;YACjG,kCAAkC,EAAE,YAAY,EAAE,UAAU,EAAE,2BAA2B;YACzF,mBAAmB,EAAE,sBAAsB,EAAE,WAAW;YACxD,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SACvF,CAAC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAA4C,EAAE,QAAiC;IACnG,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxD,OAAO,aAAa,CAAC;QACnB,SAAS,CAAC,IAAI;QACd,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QACzC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;QACxC,SAAS,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QAC/D,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QACxC,OAAO,QAAQ,CAAC,2BAA2B,KAAK,QAAQ,CAAC,CAAC,CAAC,2BAA2B,QAAQ,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,EAAE;QACjI,QAAQ,CAAC,uCAAuC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,EAAE;QACtG,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;QAC3F,MAAM,CAAC,QAAQ,CAAC,0BAA0B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;QACpF,MAAM,CAAC,QAAQ,CAAC,+BAA+B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;QAC1F,MAAM,CAAC,QAAQ,CAAC,6BAA6B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE;QACjG,MAAM,CAAC,QAAQ,CAAC,mCAAmC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE;QAC5G,MAAM,CAAC,QAAQ,CAAC,sCAAsC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,EAAE;QAClH,MAAM,CAAC,QAAQ,CAAC,kCAAkC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE;QAC7G,MAAM,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;QACrF,MAAM,CAAC,QAAQ,CAAC,uBAAuB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;QAC9E,MAAM,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;QACvF,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpD,MAAM,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE;KACrF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA+C;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iCAAiC;QACpE,MAAM,CAAC,EAAE;QACT,MAAM,CAAC,MAAM;QACb,MAAM,CAAC,aAAa;QACpB,MAAM,CAAC,KAAK,IAAI,IAAI;QACpB,MAAM,CAAC,MAAM,IAAI,IAAI;QACrB,MAAM,CAAC,IAAI;QACX,MAAM,CAAC,IAAI;QACX,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,MAAM;QACb,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,KAAK;QACZ,MAAM,CAAC,eAAe,IAAI,IAAI;QAC9B,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;KAChC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO;QACL;YACE,6GAA6G;YAC7G,yGAAyG;YACzG,0EAA0E;SAC3E,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,GAAG,IAAI;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,IAAI,KAAK,uBAAuB;QAAE,OAAO,kBAAkB,CAAC;IAChE,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,cAAc,CAAC;IACxD,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,aAAa,CAAC;IACtD,IAAI,IAAI,KAAK,0BAA0B;QAAE,OAAO,qBAAqB,CAAC;IACtE,IAAI,IAAI,KAAK,sBAAsB;QAAE,OAAO,iBAAiB,CAAC;IAC9D,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,cAAc,CAAC;IACjD,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,UAAU,CAAC;IAChD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,gCAAgC,CAAC,MAA+B,EAAE,IAAY;IACrF,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,uBAAuB,IAAI,MAAM,CAAC,IAAI,KAAK,yCAAyC,EAAE,CAAC;QACjH,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,0BAA0B,CACjC,MAA+B,EAC/B,cAAmD;IAEnD,OAAO,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACvC,UAAU,CAAC,cAAc,EAAE,eAAe,CAAC;QAC3C,UAAU,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,2BAA2B,CAAC,cAAmD;IACtF,OAAO,cAAc,EAAE,sBAAsB,KAAK,IAAI;QACpD,cAAc,EAAE,QAAQ,KAAK,IAAI;QACjC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,QAAQ,KAAK,IAAI;QACtD,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,KAA0C,EAAE,GAAW;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAClD,CAAC"}
|
package/dist/cleanup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../src/cleanup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../src/cleanup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAKtF,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAC5C,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEtE,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA+ChH;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E"}
|
package/dist/cleanup.js
CHANGED
|
@@ -3,11 +3,12 @@ import path from 'node:path';
|
|
|
3
3
|
import { FRONTIER_SWARM_CODEX_CLEANUP_PLAN_KIND, FRONTIER_SWARM_CODEX_CLEANUP_PLAN_VERSION } from './constants.js';
|
|
4
4
|
import { findFilesByName, isObject, pathExists } from './common.js';
|
|
5
5
|
import { readCodexPidProcesses } from './collect.js';
|
|
6
|
+
import { readCodexArtifactRecords } from './artifact-store.js';
|
|
6
7
|
export async function createCodexCleanupPlan(input) {
|
|
7
8
|
const generatedAt = Date.now();
|
|
8
9
|
const cwd = path.resolve(input.cwd ?? process.cwd());
|
|
9
10
|
const runDir = path.resolve(cwd, input.run);
|
|
10
|
-
const collectionDir = await resolveCollectionDir(runDir);
|
|
11
|
+
const collectionDir = input.collection ? path.resolve(cwd, input.collection) : await resolveCollectionDir(runDir);
|
|
11
12
|
const markerPath = collectionDir ? path.join(collectionDir, 'collected-and-indexed.json') : undefined;
|
|
12
13
|
const indexed = !!markerPath && await pathExists(markerPath);
|
|
13
14
|
const processes = await readCodexPidProcesses(path.join(runDir, 'pids.json')).catch(() => []);
|
|
@@ -17,7 +18,11 @@ export async function createCodexCleanupPlan(input) {
|
|
|
17
18
|
...(active && input.keepActive !== false ? ['active-pids-present'] : [])
|
|
18
19
|
];
|
|
19
20
|
const failedJobIds = input.keepFailed === false ? new Set() : await readFailedJobIds(collectionDir);
|
|
20
|
-
const
|
|
21
|
+
const workspaceCandidates = await workspaceCleanupCandidates(runDir, failedJobIds, generatedAt, input.maxAgeHours);
|
|
22
|
+
const artifactCandidates = input.pruneArtifacts
|
|
23
|
+
? await artifactSourceCleanupCandidates(runDir, collectionDir, generatedAt, input.maxAgeHours)
|
|
24
|
+
: [];
|
|
25
|
+
const candidates = [...workspaceCandidates, ...artifactCandidates];
|
|
21
26
|
let deletedCount = 0;
|
|
22
27
|
if (input.dryRun === false && blockedReasons.length === 0) {
|
|
23
28
|
for (const candidate of candidates) {
|
|
@@ -34,6 +39,7 @@ export async function createCodexCleanupPlan(input) {
|
|
|
34
39
|
ok: blockedReasons.length === 0,
|
|
35
40
|
dryRun: input.dryRun !== false,
|
|
36
41
|
runDir,
|
|
42
|
+
...(collectionDir ? { collectionDir } : {}),
|
|
37
43
|
generatedAt,
|
|
38
44
|
indexed,
|
|
39
45
|
candidates,
|
|
@@ -41,7 +47,9 @@ export async function createCodexCleanupPlan(input) {
|
|
|
41
47
|
summary: {
|
|
42
48
|
candidateCount: candidates.length,
|
|
43
49
|
deletedCount,
|
|
44
|
-
reclaimableBytes: candidates.reduce((sum, candidate) => sum + candidate.bytes, 0)
|
|
50
|
+
reclaimableBytes: candidates.reduce((sum, candidate) => sum + candidate.bytes, 0),
|
|
51
|
+
workspaceCount: workspaceCandidates.length,
|
|
52
|
+
artifactSourceCount: artifactCandidates.length
|
|
45
53
|
}
|
|
46
54
|
};
|
|
47
55
|
}
|
|
@@ -52,9 +60,11 @@ export async function handleCodexCleanupCommand(args) {
|
|
|
52
60
|
const result = await createCodexCleanupPlan({
|
|
53
61
|
cwd: process.cwd(),
|
|
54
62
|
run,
|
|
55
|
-
|
|
63
|
+
collection: stringArg(args.collection),
|
|
64
|
+
maxAgeHours: ageHoursArg(args.maxAgeHours ?? args['max-age-hours'] ?? args.maxAge ?? args['max-age']),
|
|
56
65
|
keepFailed: boolArg(args.keepFailed ?? args['keep-failed'], true),
|
|
57
66
|
keepActive: boolArg(args.keepActive ?? args['keep-active'], true),
|
|
67
|
+
pruneArtifacts: boolArg(args.pruneArtifacts ?? args['prune-artifacts'] ?? args.compactArtifacts ?? args['compact-artifacts'], false),
|
|
58
68
|
dryRun: !boolArg(args.write, false)
|
|
59
69
|
});
|
|
60
70
|
await writeMaybe(args, result);
|
|
@@ -79,6 +89,7 @@ async function workspaceCleanupCandidates(runDir, failedJobIds, now, maxAgeHours
|
|
|
79
89
|
const jobId = path.basename(workspacePath);
|
|
80
90
|
seen.add(workspacePath);
|
|
81
91
|
out.push({
|
|
92
|
+
kind: 'workspace',
|
|
82
93
|
path: workspacePath,
|
|
83
94
|
reason: `${mode}-workspace-collected-and-indexed`,
|
|
84
95
|
bytes: await directoryBytes(workspacePath),
|
|
@@ -88,6 +99,39 @@ async function workspaceCleanupCandidates(runDir, failedJobIds, now, maxAgeHours
|
|
|
88
99
|
}
|
|
89
100
|
return out.sort((left, right) => left.path.localeCompare(right.path));
|
|
90
101
|
}
|
|
102
|
+
async function artifactSourceCleanupCandidates(runDir, collectionDir, now, maxAgeHours) {
|
|
103
|
+
if (!collectionDir)
|
|
104
|
+
return [];
|
|
105
|
+
const records = await readCodexArtifactRecords(collectionDir).catch(() => []);
|
|
106
|
+
const out = [];
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
for (const record of records) {
|
|
109
|
+
const file = path.resolve(record.path);
|
|
110
|
+
if (seen.has(file) || !isInside(runDir, file) || isInside(collectionDir, file))
|
|
111
|
+
continue;
|
|
112
|
+
if (!await pathExists(record.blobPath) || !await pathExists(file))
|
|
113
|
+
continue;
|
|
114
|
+
const stat = await fs.stat(file).catch(() => undefined);
|
|
115
|
+
if (!stat?.isFile())
|
|
116
|
+
continue;
|
|
117
|
+
if (maxAgeHours !== undefined && now - stat.mtimeMs < maxAgeHours * 3600_000)
|
|
118
|
+
continue;
|
|
119
|
+
seen.add(file);
|
|
120
|
+
out.push({
|
|
121
|
+
kind: 'artifact-source',
|
|
122
|
+
path: file,
|
|
123
|
+
reason: 'indexed-artifact-source-archived',
|
|
124
|
+
bytes: stat.size,
|
|
125
|
+
active: false,
|
|
126
|
+
failed: false
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return out.sort((left, right) => left.path.localeCompare(right.path));
|
|
130
|
+
}
|
|
131
|
+
function isInside(root, file) {
|
|
132
|
+
const relative = path.relative(root, file).replace(/\\/g, '/');
|
|
133
|
+
return !!relative && relative !== '..' && !relative.startsWith('../') && !path.isAbsolute(relative);
|
|
134
|
+
}
|
|
91
135
|
async function readFailedJobIds(collectionDir) {
|
|
92
136
|
if (!collectionDir)
|
|
93
137
|
return new Set();
|
|
@@ -134,6 +178,16 @@ function numberArg(value) {
|
|
|
134
178
|
const parsed = Number(value);
|
|
135
179
|
return Number.isFinite(parsed) ? parsed : undefined;
|
|
136
180
|
}
|
|
181
|
+
function ageHoursArg(value) {
|
|
182
|
+
if (value === undefined)
|
|
183
|
+
return undefined;
|
|
184
|
+
const text = String(value).trim();
|
|
185
|
+
const match = /^(\d+(?:\.\d+)?)(h|hr|hrs|hour|hours)?$/i.exec(text);
|
|
186
|
+
if (!match)
|
|
187
|
+
return numberArg(value);
|
|
188
|
+
const parsed = Number(match[1]);
|
|
189
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
190
|
+
}
|
|
137
191
|
function boolArg(value, fallback) {
|
|
138
192
|
if (value === undefined)
|
|
139
193
|
return fallback;
|