@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.
Files changed (86) hide show
  1. package/README.md +5 -3
  2. package/dist/artifact-compression.d.ts +10 -0
  3. package/dist/artifact-compression.d.ts.map +1 -0
  4. package/dist/artifact-compression.js +40 -0
  5. package/dist/artifact-compression.js.map +1 -0
  6. package/dist/artifact-sqlite.d.ts +4 -0
  7. package/dist/artifact-sqlite.d.ts.map +1 -0
  8. package/dist/artifact-sqlite.js +89 -0
  9. package/dist/artifact-sqlite.js.map +1 -0
  10. package/dist/artifact-store.d.ts.map +1 -1
  11. package/dist/artifact-store.js +70 -26
  12. package/dist/artifact-store.js.map +1 -1
  13. package/dist/cleanup.d.ts.map +1 -1
  14. package/dist/cleanup.js +58 -4
  15. package/dist/cleanup.js.map +1 -1
  16. package/dist/cli-help.js +2 -2
  17. package/dist/cli-help.js.map +1 -1
  18. package/dist/cli.js +2 -2
  19. package/dist/cli.js.map +1 -1
  20. package/dist/codex-workspace-changes.js +9 -0
  21. package/dist/codex-workspace-changes.js.map +1 -1
  22. package/dist/collect-dashboard.d.ts.map +1 -1
  23. package/dist/collect-dashboard.js +10 -0
  24. package/dist/collect-dashboard.js.map +1 -1
  25. package/dist/dashboard.d.ts.map +1 -1
  26. package/dist/dashboard.js +3 -0
  27. package/dist/dashboard.js.map +1 -1
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/patch-score-semantic.d.ts.map +1 -1
  33. package/dist/patch-score-semantic.js +37 -13
  34. package/dist/patch-score-semantic.js.map +1 -1
  35. package/dist/query-semantic-edit.d.ts +11 -0
  36. package/dist/query-semantic-edit.d.ts.map +1 -1
  37. package/dist/query-semantic-edit.js +48 -2
  38. package/dist/query-semantic-edit.js.map +1 -1
  39. package/dist/query.d.ts +2 -0
  40. package/dist/query.d.ts.map +1 -1
  41. package/dist/query.js +26 -3
  42. package/dist/query.js.map +1 -1
  43. package/dist/score.js +3 -1
  44. package/dist/score.js.map +1 -1
  45. package/dist/semantic-compact-summary.d.ts +7 -0
  46. package/dist/semantic-compact-summary.d.ts.map +1 -0
  47. package/dist/semantic-compact-summary.js +107 -0
  48. package/dist/semantic-compact-summary.js.map +1 -0
  49. package/dist/semantic-edit-clean-eligibility.d.ts +5 -0
  50. package/dist/semantic-edit-clean-eligibility.d.ts.map +1 -0
  51. package/dist/semantic-edit-clean-eligibility.js +24 -0
  52. package/dist/semantic-edit-clean-eligibility.js.map +1 -0
  53. package/dist/semantic-edit-projection.d.ts +5 -0
  54. package/dist/semantic-edit-projection.d.ts.map +1 -0
  55. package/dist/semantic-edit-projection.js +117 -0
  56. package/dist/semantic-edit-projection.js.map +1 -0
  57. package/dist/semantic-import-quality.d.ts.map +1 -1
  58. package/dist/semantic-import-quality.js +14 -0
  59. package/dist/semantic-import-quality.js.map +1 -1
  60. package/dist/semantic-import-select.d.ts +1 -0
  61. package/dist/semantic-import-select.d.ts.map +1 -1
  62. package/dist/semantic-import-select.js +1 -0
  63. package/dist/semantic-import-select.js.map +1 -1
  64. package/dist/semantic-import-sidecar.d.ts.map +1 -1
  65. package/dist/semantic-import-sidecar.js +4 -0
  66. package/dist/semantic-import-sidecar.js.map +1 -1
  67. package/dist/semantic-import.d.ts.map +1 -1
  68. package/dist/semantic-import.js +10 -0
  69. package/dist/semantic-import.js.map +1 -1
  70. package/dist/types-collection.d.ts +9 -0
  71. package/dist/types-collection.d.ts.map +1 -1
  72. package/dist/types-evidence.d.ts +2 -0
  73. package/dist/types-evidence.d.ts.map +1 -1
  74. package/dist/types-semantic-compact.d.ts +74 -0
  75. package/dist/types-semantic-compact.d.ts.map +1 -0
  76. package/dist/types-semantic-compact.js +2 -0
  77. package/dist/types-semantic-compact.js.map +1 -0
  78. package/dist/types-semantic-edit-projection.d.ts +16 -0
  79. package/dist/types-semantic-edit-projection.d.ts.map +1 -0
  80. package/dist/types-semantic-edit-projection.js +2 -0
  81. package/dist/types-semantic-edit-projection.js.map +1 -0
  82. package/dist/types-semantic.d.ts +4 -0
  83. package/dist/types-semantic.d.ts.map +1 -1
  84. package/dist/types.d.ts +2 -0
  85. package/dist/types.d.ts.map +1 -1
  86. 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, or conflicting semantic edit scripts 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.
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":"AAWA,OAAO,KAAK,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAO5H,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,CAmD5C;AAED,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAI5G"}
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"}
@@ -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
- const gzipAsync = promisify(gzip);
10
- const require = createRequire(import.meta.url);
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 writeSqliteIndex(sqlitePath, records).catch(() => false);
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 compress = options.compress && COMPRESS_EXTENSIONS.has(path.extname(candidate.file).toLowerCase());
104
- const blobBytes = compress ? await gzipAsync(bytes) : bytes;
105
- const blobPath = path.join(options.blobDir, sha256.slice(0, 2), `${sha256}${compress ? '.gz' : ''}`);
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, blobBytes);
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: compress ? 'gzip' : 'none',
123
- ...(compress ? { compressedBytes: blobBytes.byteLength } : {}),
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
- 'create table if not exists 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);',
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,yCAAyC,EAC1C,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1F,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,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACtH,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,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,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,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzG,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrG,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,SAAS,CAAC,CAAC;IACzE,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,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACvC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,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,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,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,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,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,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,4OAA4O;QAC5O,GAAG,IAAI;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAA+C;IAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAiJ,CAAC;IACtL,IAAI,CAAC,MAAM,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,EAAE,CAAC,IAAI,CAAC,6NAA6N,CAAC,CAAC;IACvO,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC;IAChG,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxS,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,IAAI,CAAC;AACd,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,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"}
1
+ {"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../src/artifact-store.ts"],"names":[],"mappings":"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"}
@@ -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;AAItF,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,CAwChH;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAc5E"}
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 candidates = await workspaceCleanupCandidates(runDir, failedJobIds, generatedAt, input.maxAgeHours);
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
- maxAgeHours: numberArg(args.maxAgeHours ?? args['max-age-hours'] ?? args.maxAge ?? args['max-age']),
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;