@shapeshift-labs/frontier-swarm-codex 0.5.41 → 0.5.42

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 (140) hide show
  1. package/README.md +1 -1
  2. package/dist/apply.d.ts +3 -0
  3. package/dist/apply.d.ts.map +1 -0
  4. package/dist/apply.js +127 -0
  5. package/dist/apply.js.map +1 -0
  6. package/dist/cli.js +7 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codex-events.d.ts +15 -0
  9. package/dist/codex-events.d.ts.map +1 -0
  10. package/dist/codex-events.js +108 -0
  11. package/dist/codex-events.js.map +1 -0
  12. package/dist/codex-evidence.d.ts +33 -0
  13. package/dist/codex-evidence.d.ts.map +1 -0
  14. package/dist/codex-evidence.js +143 -0
  15. package/dist/codex-evidence.js.map +1 -0
  16. package/dist/codex-executor.d.ts +5 -0
  17. package/dist/codex-executor.d.ts.map +1 -0
  18. package/dist/codex-executor.js +160 -0
  19. package/dist/codex-executor.js.map +1 -0
  20. package/dist/codex-prompt.d.ts +20 -0
  21. package/dist/codex-prompt.d.ts.map +1 -0
  22. package/dist/codex-prompt.js +238 -0
  23. package/dist/codex-prompt.js.map +1 -0
  24. package/dist/codex-run-scheduler.d.ts +9 -0
  25. package/dist/codex-run-scheduler.d.ts.map +1 -0
  26. package/dist/codex-run-scheduler.js +145 -0
  27. package/dist/codex-run-scheduler.js.map +1 -0
  28. package/dist/codex-run.d.ts +5 -0
  29. package/dist/codex-run.d.ts.map +1 -0
  30. package/dist/codex-run.js +278 -0
  31. package/dist/codex-run.js.map +1 -0
  32. package/dist/codex-workspace-changes.d.ts +28 -0
  33. package/dist/codex-workspace-changes.d.ts.map +1 -0
  34. package/dist/codex-workspace-changes.js +147 -0
  35. package/dist/codex-workspace-changes.js.map +1 -0
  36. package/dist/codex-workspace.d.ts +10 -0
  37. package/dist/codex-workspace.d.ts.map +1 -0
  38. package/dist/codex-workspace.js +210 -0
  39. package/dist/codex-workspace.js.map +1 -0
  40. package/dist/collect-bundles.d.ts +14 -0
  41. package/dist/collect-bundles.d.ts.map +1 -0
  42. package/dist/collect-bundles.js +173 -0
  43. package/dist/collect-bundles.js.map +1 -0
  44. package/dist/collect-evidence.d.ts +13 -0
  45. package/dist/collect-evidence.d.ts.map +1 -0
  46. package/dist/collect-evidence.js +131 -0
  47. package/dist/collect-evidence.js.map +1 -0
  48. package/dist/collect.d.ts +5 -0
  49. package/dist/collect.d.ts.map +1 -0
  50. package/dist/collect.js +189 -0
  51. package/dist/collect.js.map +1 -0
  52. package/dist/common.d.ts +37 -0
  53. package/dist/common.d.ts.map +1 -0
  54. package/dist/common.js +191 -0
  55. package/dist/common.js.map +1 -0
  56. package/dist/constants.d.ts +25 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +26 -0
  59. package/dist/constants.js.map +1 -0
  60. package/dist/dashboard.d.ts +9 -0
  61. package/dist/dashboard.d.ts.map +1 -0
  62. package/dist/dashboard.js +80 -0
  63. package/dist/dashboard.js.map +1 -0
  64. package/dist/handoff-artifacts.d.ts +4 -0
  65. package/dist/handoff-artifacts.d.ts.map +1 -0
  66. package/dist/handoff-artifacts.js +67 -0
  67. package/dist/handoff-artifacts.js.map +1 -0
  68. package/dist/index.d.ts +14 -843
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +14 -3717
  71. package/dist/index.js.map +1 -1
  72. package/dist/patch-score-semantic.d.ts +4 -0
  73. package/dist/patch-score-semantic.d.ts.map +1 -0
  74. package/dist/patch-score-semantic.js +154 -0
  75. package/dist/patch-score-semantic.js.map +1 -0
  76. package/dist/score.d.ts +3 -0
  77. package/dist/score.d.ts.map +1 -0
  78. package/dist/score.js +219 -0
  79. package/dist/score.js.map +1 -0
  80. package/dist/semantic-import-layers.d.ts +9 -0
  81. package/dist/semantic-import-layers.d.ts.map +1 -0
  82. package/dist/semantic-import-layers.js +143 -0
  83. package/dist/semantic-import-layers.js.map +1 -0
  84. package/dist/semantic-import-paradigm.d.ts +6 -0
  85. package/dist/semantic-import-paradigm.d.ts.map +1 -0
  86. package/dist/semantic-import-paradigm.js +159 -0
  87. package/dist/semantic-import-paradigm.js.map +1 -0
  88. package/dist/semantic-import-proof.d.ts +7 -0
  89. package/dist/semantic-import-proof.d.ts.map +1 -0
  90. package/dist/semantic-import-proof.js +142 -0
  91. package/dist/semantic-import-proof.js.map +1 -0
  92. package/dist/semantic-import-quality.d.ts +6 -0
  93. package/dist/semantic-import-quality.d.ts.map +1 -0
  94. package/dist/semantic-import-quality.js +108 -0
  95. package/dist/semantic-import-quality.js.map +1 -0
  96. package/dist/semantic-import-select.d.ts +36 -0
  97. package/dist/semantic-import-select.d.ts.map +1 -0
  98. package/dist/semantic-import-select.js +132 -0
  99. package/dist/semantic-import-select.js.map +1 -0
  100. package/dist/semantic-import-sidecar.d.ts +7 -0
  101. package/dist/semantic-import-sidecar.d.ts.map +1 -0
  102. package/dist/semantic-import-sidecar.js +169 -0
  103. package/dist/semantic-import-sidecar.js.map +1 -0
  104. package/dist/semantic-import.d.ts +13 -0
  105. package/dist/semantic-import.d.ts.map +1 -0
  106. package/dist/semantic-import.js +122 -0
  107. package/dist/semantic-import.js.map +1 -0
  108. package/dist/trace-summary.d.ts +6 -0
  109. package/dist/trace-summary.d.ts.map +1 -0
  110. package/dist/trace-summary.js +61 -0
  111. package/dist/trace-summary.js.map +1 -0
  112. package/dist/types-collection.d.ts +166 -0
  113. package/dist/types-collection.d.ts.map +1 -0
  114. package/dist/types-collection.js +2 -0
  115. package/dist/types-collection.js.map +1 -0
  116. package/dist/types-evidence.d.ts +158 -0
  117. package/dist/types-evidence.d.ts.map +1 -0
  118. package/dist/types-evidence.js +2 -0
  119. package/dist/types-evidence.js.map +1 -0
  120. package/dist/types-run.d.ts +161 -0
  121. package/dist/types-run.d.ts.map +1 -0
  122. package/dist/types-run.js +2 -0
  123. package/dist/types-run.js.map +1 -0
  124. package/dist/types-semantic.d.ts +192 -0
  125. package/dist/types-semantic.d.ts.map +1 -0
  126. package/dist/types-semantic.js +2 -0
  127. package/dist/types-semantic.js.map +1 -0
  128. package/dist/types-workspace.d.ts +122 -0
  129. package/dist/types-workspace.d.ts.map +1 -0
  130. package/dist/types-workspace.js +2 -0
  131. package/dist/types-workspace.js.map +1 -0
  132. package/dist/types.d.ts +6 -0
  133. package/dist/types.d.ts.map +1 -0
  134. package/dist/types.js +2 -0
  135. package/dist/types.js.map +1 -0
  136. package/dist/workspace-link-repair.d.ts +3 -0
  137. package/dist/workspace-link-repair.d.ts.map +1 -0
  138. package/dist/workspace-link-repair.js +164 -0
  139. package/dist/workspace-link-repair.js.map +1 -0
  140. package/package.json +2 -2
@@ -0,0 +1,189 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createSwarmCoordinatorDashboard, createSwarmEvidenceIndex, createSwarmMergeAdmission, createSwarmMergeIndex, createSwarmQueueOverlay } from '@shapeshift-labs/frontier-swarm';
4
+ import { FRONTIER_SWARM_CODEX_COLLECTION_KIND, FRONTIER_SWARM_CODEX_COLLECTION_VERSION } from './constants.js';
5
+ import { findFilesByName, isObject, pathExists, pathHasIgnoredSegment, resolveBundlePatchPath, slug, uniqueStrings } from './common.js';
6
+ import { createCodexCompactDashboard } from './dashboard.js';
7
+ import { bundlePatchStaleness, classifyCodexCollectBucket, mergeRecordScore, normalizeCollectedMergeBundle } from './collect-bundles.js';
8
+ import { copyOrWriteCollectedEvidenceSummary, createCollectedEvidenceEntries } from './collect-evidence.js';
9
+ export async function collectCodexSwarmRun(input) {
10
+ const generatedAt = Date.now();
11
+ const cwd = path.resolve(input.cwd ?? process.cwd());
12
+ const runDir = await resolveRunDirectory(input.run);
13
+ const outDir = path.resolve(cwd, input.outDir ?? path.join(runDir, 'collected'));
14
+ const buckets = {
15
+ 'ready-to-apply': [],
16
+ 'needs-human-port': [],
17
+ 'failed-evidence': [],
18
+ 'stale-against-head': []
19
+ };
20
+ const collectedBundles = [];
21
+ const evidenceEntries = [];
22
+ const patchStatuses = {};
23
+ const processes = await readCodexPidProcesses(path.join(runDir, 'pids.json')).catch(() => []);
24
+ const mergePaths = (await findFilesByName(runDir, 'merge.json'))
25
+ .filter((mergePath) => !pathHasIgnoredSegment(path.relative(runDir, mergePath), [
26
+ 'collected',
27
+ 'patch-scores',
28
+ 'ready-to-apply',
29
+ 'needs-human-port',
30
+ 'failed-evidence',
31
+ 'stale-against-head'
32
+ ]));
33
+ const mergeRecordsByJob = new Map();
34
+ for (const mergePath of mergePaths.sort()) {
35
+ const bundle = normalizeCollectedMergeBundle(JSON.parse(await fs.readFile(mergePath, 'utf8')), mergePath);
36
+ const existing = mergeRecordsByJob.get(bundle.jobId);
37
+ const next = { mergePath, bundle };
38
+ if (!existing || mergeRecordScore(next) > mergeRecordScore(existing))
39
+ mergeRecordsByJob.set(bundle.jobId, next);
40
+ }
41
+ const mergeRecords = Array.from(mergeRecordsByJob.values()).sort((left, right) => left.bundle.jobId.localeCompare(right.bundle.jobId));
42
+ for (const { mergePath, bundle } of mergeRecords) {
43
+ const patchPath = resolveBundlePatchPath(bundle, mergePath);
44
+ const patchExists = !!patchPath && await pathExists(patchPath);
45
+ const staleness = input.checkStale === false
46
+ ? { stale: false, patchStatus: patchExists ? 'unknown' : 'missing', reasons: ['stale check disabled'] }
47
+ : await bundlePatchStaleness(bundle, mergePath, cwd);
48
+ const staleAgainstHead = staleness.stale;
49
+ const bucket = classifyCodexCollectBucket(bundle, staleAgainstHead);
50
+ const branchName = input.branchPrefix ? `${input.branchPrefix}/${slug(bundle.jobId)}` : bundle.branchName;
51
+ const outputDir = path.join(outDir, bucket, slug(bundle.jobId));
52
+ const collectedEvidencePath = path.join(outputDir, 'evidence.json');
53
+ const collectReasons = staleness.patchStatus === 'applies'
54
+ ? bundle.reasons
55
+ : uniqueStrings([...bundle.reasons, ...staleness.reasons]);
56
+ const nextBundle = {
57
+ ...bundle,
58
+ ...(branchName ? { branchName } : {}),
59
+ staleAgainstHead: bundle.staleAgainstHead || staleAgainstHead,
60
+ disposition: staleAgainstHead ? 'stale-against-head' : bundle.disposition,
61
+ autoMergeable: bucket === 'ready-to-apply' && bundle.autoMergeable,
62
+ reasons: collectReasons,
63
+ metadata: {
64
+ ...(isObject(bundle.metadata) ? bundle.metadata : {}),
65
+ collect: {
66
+ patchStatus: staleness.patchStatus,
67
+ staleReasons: staleness.reasons
68
+ }
69
+ },
70
+ evidencePaths: uniqueStrings([...bundle.evidencePaths, collectedEvidencePath])
71
+ };
72
+ collectedBundles.push(nextBundle);
73
+ patchStatuses[nextBundle.jobId] = staleness.patchStatus;
74
+ await fs.mkdir(outputDir, { recursive: true });
75
+ await fs.writeFile(path.join(outputDir, 'merge.json'), JSON.stringify(nextBundle, null, 2) + '\n');
76
+ if (patchPath && await pathExists(patchPath))
77
+ await fs.copyFile(patchPath, path.join(outputDir, 'changes.patch')).catch(() => { });
78
+ await copyOrWriteCollectedEvidenceSummary({
79
+ file: collectedEvidencePath,
80
+ bundle: nextBundle,
81
+ bucket,
82
+ mergePath,
83
+ patchPath,
84
+ patchStatus: patchStatuses[nextBundle.jobId],
85
+ staleReasons: staleness.reasons
86
+ });
87
+ evidenceEntries.push(...createCollectedEvidenceEntries(nextBundle, collectedEvidencePath, bucket));
88
+ buckets[bucket].push({ bucket, jobId: bundle.jobId, mergePath, outputDir, bundle: nextBundle });
89
+ }
90
+ const mergeIndex = createSwarmMergeIndex({
91
+ runId: path.basename(runDir),
92
+ bundles: collectedBundles,
93
+ patchStatuses
94
+ });
95
+ const queueOverlay = createSwarmQueueOverlay({
96
+ runId: path.basename(runDir),
97
+ bundles: collectedBundles
98
+ });
99
+ const evidenceIndex = createSwarmEvidenceIndex({
100
+ id: `codex-evidence-index:${path.basename(runDir)}`,
101
+ entries: evidenceEntries,
102
+ generatedAt
103
+ });
104
+ const admission = createSwarmMergeAdmission({
105
+ index: mergeIndex,
106
+ maxReady: Math.max(mergeIndex.summary.readyToApplyCount, 1),
107
+ allowRisks: ['low', 'medium', 'unknown'],
108
+ generatedAt
109
+ });
110
+ const dashboard = createSwarmCoordinatorDashboard({
111
+ bundles: collectedBundles,
112
+ mergeIndex,
113
+ queueOverlay,
114
+ evidenceIndex,
115
+ admission,
116
+ processes,
117
+ generatedAt,
118
+ metadata: { runDir, outDir }
119
+ });
120
+ const compactDashboard = createCodexCompactDashboard({
121
+ runDir,
122
+ dashboard,
123
+ semanticImportExpected: input.semanticImportExpected ?? false,
124
+ generatedAt
125
+ });
126
+ const summary = {
127
+ total: mergeRecords.length,
128
+ 'ready-to-apply': buckets['ready-to-apply'].length,
129
+ 'needs-human-port': buckets['needs-human-port'].length,
130
+ 'failed-evidence': buckets['failed-evidence'].length,
131
+ 'stale-against-head': buckets['stale-against-head'].length
132
+ };
133
+ const result = {
134
+ kind: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
135
+ version: FRONTIER_SWARM_CODEX_COLLECTION_VERSION,
136
+ ok: summary['failed-evidence'] === 0 && summary['stale-against-head'] === 0,
137
+ runDir,
138
+ outDir,
139
+ generatedAt,
140
+ buckets,
141
+ mergeIndex,
142
+ queueOverlay,
143
+ evidenceIndex,
144
+ admission,
145
+ dashboard,
146
+ compactDashboard,
147
+ summary
148
+ };
149
+ await fs.mkdir(outDir, { recursive: true });
150
+ await fs.writeFile(path.join(outDir, 'collection.json'), JSON.stringify(result, null, 2) + '\n');
151
+ await fs.writeFile(path.join(outDir, 'merge-index.json'), JSON.stringify(mergeIndex, null, 2) + '\n');
152
+ await fs.writeFile(path.join(outDir, 'queue-overlay.json'), JSON.stringify(queueOverlay, null, 2) + '\n');
153
+ await fs.writeFile(path.join(outDir, 'evidence-index.json'), JSON.stringify(evidenceIndex, null, 2) + '\n');
154
+ await fs.writeFile(path.join(outDir, 'merge-admission.json'), JSON.stringify(admission, null, 2) + '\n');
155
+ await fs.writeFile(path.join(outDir, 'coordinator-query.json'), JSON.stringify(dashboard, null, 2) + '\n');
156
+ await fs.writeFile(path.join(outDir, 'compact-dashboard.json'), JSON.stringify(compactDashboard, null, 2) + '\n');
157
+ return result;
158
+ }
159
+ export async function readCodexPidProcesses(file) {
160
+ const parsed = JSON.parse(await fs.readFile(file, 'utf8'));
161
+ return Promise.all((parsed.entries ?? []).map(async (entry) => ({
162
+ pid: entry.pid,
163
+ role: entry.role,
164
+ ...(entry.jobId ? { jobId: entry.jobId } : {}),
165
+ ...(entry.runId ? { runId: entry.runId } : {}),
166
+ status: await pidIsAlive(entry.pid) ? 'running' : 'missing',
167
+ startedAt: entry.startedAt,
168
+ ...(entry.command ? { command: entry.command } : {})
169
+ })));
170
+ }
171
+ async function pidIsAlive(pid) {
172
+ try {
173
+ process.kill(pid, 0);
174
+ return true;
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ async function resolveRunDirectory(runPath) {
181
+ const absolute = path.resolve(runPath);
182
+ const stat = await fs.lstat(absolute).catch(() => undefined);
183
+ if (stat?.isDirectory())
184
+ return absolute;
185
+ if (path.basename(absolute) === 'swarm-results.json' || path.basename(absolute) === 'pids.json')
186
+ return path.dirname(absolute);
187
+ return path.dirname(absolute);
188
+ }
189
+ //# sourceMappingURL=collect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { FrontierSwarmMergeBundle } from '@shapeshift-labs/frontier-swarm';
2
+ export declare function uniqueStrings(values: readonly string[]): string[];
3
+ export declare function arrayOfObjects(value: unknown): Record<string, unknown>[];
4
+ export declare function readStringArray(value: unknown): string[];
5
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
6
+ export declare function pathExists(file: string): Promise<boolean>;
7
+ export declare function normalizeWorkspacePath(value: string): string | undefined;
8
+ export declare function uniqueWorkspacePaths(values: readonly string[]): string[];
9
+ export declare function pathHasIgnoredSegment(file: string, segments: readonly string[]): boolean;
10
+ export declare function copyWorkspacePath(cwd: string, workspacePath: string, include: string, excludes: readonly string[]): Promise<void>;
11
+ export declare function isExcluded(cwd: string, source: string, excludes: readonly string[]): boolean;
12
+ export declare function readOptionalText(file: string): Promise<string | undefined>;
13
+ export declare function runProcess(command: string, args: readonly string[], options: {
14
+ cwd: string;
15
+ allowFailure?: boolean;
16
+ }): Promise<{
17
+ status: number;
18
+ stdout: string;
19
+ stderr: string;
20
+ }>;
21
+ export declare function tail(text: string, maxLines?: number): string[];
22
+ export declare function stableHash(value: unknown): string;
23
+ export declare function slug(value: string): string;
24
+ export declare function numberRecord(value: unknown): Record<string, number>;
25
+ export declare function nonNegativeNumber(value: unknown): number;
26
+ export declare function writeJsonAtomic(file: string, value: unknown): Promise<void>;
27
+ export declare function findFilesByName(root: string, name: string): Promise<string[]>;
28
+ export declare function resolveBundlePatchPath(bundle: FrontierSwarmMergeBundle, mergePath: string): string | undefined;
29
+ export declare function runLoggedProcess(command: string, args: readonly string[], cwd: string): Promise<{
30
+ command: string[];
31
+ status: number;
32
+ stdoutTail: string[];
33
+ stderrTail: string[];
34
+ }>;
35
+ export declare function gitDirty(cwd: string): Promise<string[]>;
36
+ export declare function firstNonEmptyLine(text: string): string | undefined;
37
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
package/dist/common.js ADDED
@@ -0,0 +1,191 @@
1
+ import { spawn } from 'node:child_process';
2
+ import fs from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ export function uniqueStrings(values) {
5
+ const out = [];
6
+ const seen = new Set();
7
+ for (const value of values) {
8
+ const normalized = String(value).trim();
9
+ if (!normalized || seen.has(normalized))
10
+ continue;
11
+ seen.add(normalized);
12
+ out.push(normalized);
13
+ }
14
+ return out;
15
+ }
16
+ export function arrayOfObjects(value) {
17
+ return Array.isArray(value) ? value.filter(isObject) : [];
18
+ }
19
+ export function readStringArray(value) {
20
+ return Array.isArray(value) ? value.map((item) => String(item)).filter(Boolean) : [];
21
+ }
22
+ export function isObject(value) {
23
+ return !!value && typeof value === 'object' && !Array.isArray(value);
24
+ }
25
+ export async function pathExists(file) {
26
+ try {
27
+ await fs.access(file);
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ export function normalizeWorkspacePath(value) {
35
+ const clean = value.replace(/\\/g, '/').replace(/\/+$/, '');
36
+ if (!clean || clean.includes('\0') || clean.includes('*') || path.isAbsolute(clean))
37
+ return undefined;
38
+ const normalized = path.normalize(clean).replace(/\\/g, '/');
39
+ if (normalized === '.' || normalized.startsWith('..') || path.isAbsolute(normalized))
40
+ return undefined;
41
+ return normalized;
42
+ }
43
+ export function uniqueWorkspacePaths(values) {
44
+ const out = [];
45
+ const seen = new Set();
46
+ for (const value of values) {
47
+ const normalized = normalizeWorkspacePath(value);
48
+ if (!normalized || seen.has(normalized))
49
+ continue;
50
+ seen.add(normalized);
51
+ out.push(normalized);
52
+ }
53
+ return out;
54
+ }
55
+ export function pathHasIgnoredSegment(file, segments) {
56
+ const parts = file.replace(/\\/g, '/').split('/').filter(Boolean);
57
+ return parts.some((part) => segments.includes(part));
58
+ }
59
+ export async function copyWorkspacePath(cwd, workspacePath, include, excludes) {
60
+ const relative = normalizeWorkspacePath(include);
61
+ if (!relative)
62
+ return;
63
+ const from = path.resolve(cwd, relative);
64
+ const to = path.resolve(workspacePath, relative);
65
+ if (!await pathExists(from))
66
+ return;
67
+ await fs.mkdir(path.dirname(to), { recursive: true });
68
+ await fs.cp(from, to, {
69
+ recursive: true,
70
+ force: true,
71
+ filter: (source) => !isExcluded(cwd, source, excludes)
72
+ });
73
+ }
74
+ export function isExcluded(cwd, source, excludes) {
75
+ const relative = path.relative(cwd, source).replace(/\\/g, '/');
76
+ return excludes.some((exclude) => relative === exclude.replace(/\/$/, '') || relative.startsWith(exclude.replace(/\/$/, '') + '/'));
77
+ }
78
+ export async function readOptionalText(file) {
79
+ try {
80
+ return await fs.readFile(file, 'utf8');
81
+ }
82
+ catch {
83
+ return undefined;
84
+ }
85
+ }
86
+ export async function runProcess(command, args, options) {
87
+ return new Promise((resolve, reject) => {
88
+ const child = spawn(command, [...args], { cwd: options.cwd, stdio: ['ignore', 'pipe', 'pipe'] });
89
+ let stdout = '';
90
+ let stderr = '';
91
+ child.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
92
+ child.stderr.on('data', (chunk) => { stderr += chunk.toString(); });
93
+ child.on('close', (status) => {
94
+ const result = { status: status ?? 1, stdout, stderr };
95
+ if (!options.allowFailure && result.status !== 0)
96
+ reject(new Error(stderr || stdout || `${command} failed`));
97
+ else
98
+ resolve(result);
99
+ });
100
+ child.on('error', (error) => {
101
+ if (options.allowFailure)
102
+ resolve({ status: 1, stdout, stderr: String(error) });
103
+ else
104
+ reject(error);
105
+ });
106
+ });
107
+ }
108
+ export function tail(text, maxLines = 24) {
109
+ return text.trim().split(/\r?\n/).filter(Boolean).slice(-maxLines);
110
+ }
111
+ export function stableHash(value) {
112
+ const text = stableStringify(value);
113
+ let hash = 2166136261;
114
+ for (let index = 0; index < text.length; index += 1) {
115
+ hash ^= text.charCodeAt(index);
116
+ hash = Math.imul(hash, 16777619);
117
+ }
118
+ return 'fnv1a32:' + (hash >>> 0).toString(16).padStart(8, '0');
119
+ }
120
+ export function slug(value) {
121
+ return value.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'item';
122
+ }
123
+ function stableStringify(value) {
124
+ if (value === null || typeof value !== 'object')
125
+ return JSON.stringify(value);
126
+ if (Array.isArray(value))
127
+ return '[' + value.map(stableStringify).join(',') + ']';
128
+ const object = value;
129
+ return '{' + Object.keys(object).sort().map((key) => JSON.stringify(key) + ':' + stableStringify(object[key])).join(',') + '}';
130
+ }
131
+ export function numberRecord(value) {
132
+ if (!value || typeof value !== 'object')
133
+ return {};
134
+ const result = {};
135
+ for (const [key, entry] of Object.entries(value)) {
136
+ result[key] = nonNegativeNumber(entry);
137
+ }
138
+ return result;
139
+ }
140
+ export function nonNegativeNumber(value) {
141
+ const number = Number(value ?? 0);
142
+ return Number.isFinite(number) && number > 0 ? number : 0;
143
+ }
144
+ export async function writeJsonAtomic(file, value) {
145
+ const tmp = `${file}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
146
+ await fs.writeFile(tmp, JSON.stringify(value, null, 2) + '\n');
147
+ await fs.rename(tmp, file);
148
+ }
149
+ export async function findFilesByName(root, name) {
150
+ const out = [];
151
+ async function walk(current) {
152
+ const entries = await fs.readdir(current, { withFileTypes: true }).catch(() => []);
153
+ for (const entry of entries) {
154
+ const absolute = path.join(current, entry.name);
155
+ if (entry.isDirectory()) {
156
+ if (entry.name === 'collected' || entry.name === 'node_modules' || entry.name === '.git')
157
+ continue;
158
+ await walk(absolute);
159
+ }
160
+ else if (entry.isFile() && entry.name === name) {
161
+ out.push(absolute);
162
+ }
163
+ }
164
+ }
165
+ await walk(root);
166
+ return out;
167
+ }
168
+ export function resolveBundlePatchPath(bundle, mergePath) {
169
+ if (!bundle.patchPath)
170
+ return undefined;
171
+ return path.isAbsolute(bundle.patchPath) ? bundle.patchPath : path.resolve(path.dirname(mergePath), bundle.patchPath);
172
+ }
173
+ export async function runLoggedProcess(command, args, cwd) {
174
+ const result = await runProcess(command, args, { cwd, allowFailure: true });
175
+ return {
176
+ command: [command, ...args],
177
+ status: result.status,
178
+ stdoutTail: tail(result.stdout),
179
+ stderrTail: tail(result.stderr)
180
+ };
181
+ }
182
+ export async function gitDirty(cwd) {
183
+ const result = await runProcess('git', ['status', '--porcelain'], { cwd, allowFailure: true });
184
+ if (result.status !== 0)
185
+ return [];
186
+ return result.stdout.split(/\r?\n/).filter(Boolean).map((line) => line.slice(3));
187
+ }
188
+ export function firstNonEmptyLine(text) {
189
+ return text.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
190
+ }
191
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const FRONTIER_SWARM_CODEX_DEFAULT_MODEL = "gpt-5.5";
2
+ export declare const FRONTIER_SWARM_CODEX_DEFAULT_REASONING_EFFORT = "xhigh";
3
+ export declare const FRONTIER_SWARM_CODEX_WORKSPACE_MANIFEST_KIND = "frontier.swarm-codex.workspace-manifest";
4
+ export declare const FRONTIER_SWARM_CODEX_WORKSPACE_MANIFEST_VERSION = 1;
5
+ export declare const FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_KIND = "frontier.swarm-codex.workspace-proof";
6
+ export declare const FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_VERSION = 1;
7
+ export declare const FRONTIER_SWARM_CODEX_PID_MANIFEST_KIND = "frontier.swarm-codex.pid-manifest";
8
+ export declare const FRONTIER_SWARM_CODEX_PID_MANIFEST_VERSION = 1;
9
+ export declare const FRONTIER_SWARM_CODEX_COLLECTION_KIND = "frontier.swarm-codex.collection";
10
+ export declare const FRONTIER_SWARM_CODEX_COLLECTION_VERSION = 1;
11
+ export declare const FRONTIER_SWARM_CODEX_APPLY_LEDGER_KIND = "frontier.swarm-codex.apply-ledger";
12
+ export declare const FRONTIER_SWARM_CODEX_APPLY_LEDGER_VERSION = 1;
13
+ export declare const FRONTIER_SWARM_CODEX_PATCH_SCORE_KIND = "frontier.swarm-codex.patch-score";
14
+ export declare const FRONTIER_SWARM_CODEX_PATCH_SCORE_VERSION = 1;
15
+ export declare const FRONTIER_SWARM_CODEX_SEMANTIC_IMPORT_KIND = "frontier.swarm-codex.semantic-imports";
16
+ export declare const FRONTIER_SWARM_CODEX_SEMANTIC_IMPORT_VERSION = 1;
17
+ export declare const FRONTIER_SWARM_CODEX_JOB_EVIDENCE_KIND = "frontier.swarm-codex.job-evidence";
18
+ export declare const FRONTIER_SWARM_CODEX_JOB_EVIDENCE_VERSION = 1;
19
+ export declare const FRONTIER_SWARM_CODEX_PATCH_INTENT_KIND = "frontier.swarm-codex.patch-intent";
20
+ export declare const FRONTIER_SWARM_CODEX_PATCH_INTENT_VERSION = 1;
21
+ export declare const FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_KIND = "frontier.swarm-codex.compact-dashboard";
22
+ export declare const FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_VERSION = 1;
23
+ export declare const FRONTIER_SWARM_CODEX_LINK_REPAIR_KIND = "frontier.swarm-codex.link-repair";
24
+ export declare const FRONTIER_SWARM_CODEX_LINK_REPAIR_VERSION = 1;
25
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kCAAkC,YAA+B,CAAC;AAC/E,eAAO,MAAM,6CAA6C,UAA0C,CAAC;AACrG,eAAO,MAAM,4CAA4C,4CAA4C,CAAC;AACtG,eAAO,MAAM,+CAA+C,IAAI,CAAC;AACjE,eAAO,MAAM,yCAAyC,yCAAyC,CAAC;AAChG,eAAO,MAAM,4CAA4C,IAAI,CAAC;AAC9D,eAAO,MAAM,sCAAsC,sCAAsC,CAAC;AAC1F,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAC3D,eAAO,MAAM,oCAAoC,oCAAoC,CAAC;AACtF,eAAO,MAAM,uCAAuC,IAAI,CAAC;AACzD,eAAO,MAAM,sCAAsC,sCAAsC,CAAC;AAC1F,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAC3D,eAAO,MAAM,qCAAqC,qCAAqC,CAAC;AACxF,eAAO,MAAM,wCAAwC,IAAI,CAAC;AAC1D,eAAO,MAAM,yCAAyC,0CAA0C,CAAC;AACjG,eAAO,MAAM,4CAA4C,IAAI,CAAC;AAC9D,eAAO,MAAM,sCAAsC,sCAAsC,CAAC;AAC1F,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAC3D,eAAO,MAAM,sCAAsC,sCAAsC,CAAC;AAC1F,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAC3D,eAAO,MAAM,2CAA2C,2CAA2C,CAAC;AACpG,eAAO,MAAM,8CAA8C,IAAI,CAAC;AAChE,eAAO,MAAM,qCAAqC,qCAAqC,CAAC;AACxF,eAAO,MAAM,wCAAwC,IAAI,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { FRONTIER_SWARM_DEFAULT_MODEL, FRONTIER_SWARM_DEFAULT_REASONING_EFFORT } from '@shapeshift-labs/frontier-swarm';
2
+ export const FRONTIER_SWARM_CODEX_DEFAULT_MODEL = FRONTIER_SWARM_DEFAULT_MODEL;
3
+ export const FRONTIER_SWARM_CODEX_DEFAULT_REASONING_EFFORT = FRONTIER_SWARM_DEFAULT_REASONING_EFFORT;
4
+ export const FRONTIER_SWARM_CODEX_WORKSPACE_MANIFEST_KIND = 'frontier.swarm-codex.workspace-manifest';
5
+ export const FRONTIER_SWARM_CODEX_WORKSPACE_MANIFEST_VERSION = 1;
6
+ export const FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_KIND = 'frontier.swarm-codex.workspace-proof';
7
+ export const FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_VERSION = 1;
8
+ export const FRONTIER_SWARM_CODEX_PID_MANIFEST_KIND = 'frontier.swarm-codex.pid-manifest';
9
+ export const FRONTIER_SWARM_CODEX_PID_MANIFEST_VERSION = 1;
10
+ export const FRONTIER_SWARM_CODEX_COLLECTION_KIND = 'frontier.swarm-codex.collection';
11
+ export const FRONTIER_SWARM_CODEX_COLLECTION_VERSION = 1;
12
+ export const FRONTIER_SWARM_CODEX_APPLY_LEDGER_KIND = 'frontier.swarm-codex.apply-ledger';
13
+ export const FRONTIER_SWARM_CODEX_APPLY_LEDGER_VERSION = 1;
14
+ export const FRONTIER_SWARM_CODEX_PATCH_SCORE_KIND = 'frontier.swarm-codex.patch-score';
15
+ export const FRONTIER_SWARM_CODEX_PATCH_SCORE_VERSION = 1;
16
+ export const FRONTIER_SWARM_CODEX_SEMANTIC_IMPORT_KIND = 'frontier.swarm-codex.semantic-imports';
17
+ export const FRONTIER_SWARM_CODEX_SEMANTIC_IMPORT_VERSION = 1;
18
+ export const FRONTIER_SWARM_CODEX_JOB_EVIDENCE_KIND = 'frontier.swarm-codex.job-evidence';
19
+ export const FRONTIER_SWARM_CODEX_JOB_EVIDENCE_VERSION = 1;
20
+ export const FRONTIER_SWARM_CODEX_PATCH_INTENT_KIND = 'frontier.swarm-codex.patch-intent';
21
+ export const FRONTIER_SWARM_CODEX_PATCH_INTENT_VERSION = 1;
22
+ export const FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_KIND = 'frontier.swarm-codex.compact-dashboard';
23
+ export const FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_VERSION = 1;
24
+ export const FRONTIER_SWARM_CODEX_LINK_REPAIR_KIND = 'frontier.swarm-codex.link-repair';
25
+ export const FRONTIER_SWARM_CODEX_LINK_REPAIR_VERSION = 1;
26
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uCAAuC,EACxC,MAAM,iCAAiC,CAAC;AAEzC,MAAM,CAAC,MAAM,kCAAkC,GAAG,4BAA4B,CAAC;AAC/E,MAAM,CAAC,MAAM,6CAA6C,GAAG,uCAAuC,CAAC;AACrG,MAAM,CAAC,MAAM,4CAA4C,GAAG,yCAAyC,CAAC;AACtG,MAAM,CAAC,MAAM,+CAA+C,GAAG,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,yCAAyC,GAAG,sCAAsC,CAAC;AAChG,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,sCAAsC,GAAG,mCAAmC,CAAC;AAC1F,MAAM,CAAC,MAAM,yCAAyC,GAAG,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,oCAAoC,GAAG,iCAAiC,CAAC;AACtF,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,sCAAsC,GAAG,mCAAmC,CAAC;AAC1F,MAAM,CAAC,MAAM,yCAAyC,GAAG,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,qCAAqC,GAAG,kCAAkC,CAAC;AACxF,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,yCAAyC,GAAG,uCAAuC,CAAC;AACjG,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,sCAAsC,GAAG,mCAAmC,CAAC;AAC1F,MAAM,CAAC,MAAM,yCAAyC,GAAG,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,sCAAsC,GAAG,mCAAmC,CAAC;AAC1F,MAAM,CAAC,MAAM,yCAAyC,GAAG,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,2CAA2C,GAAG,wCAAwC,CAAC;AACpG,MAAM,CAAC,MAAM,8CAA8C,GAAG,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,qCAAqC,GAAG,kCAAkC,CAAC;AACxF,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { FrontierSwarmCoordinatorDashboard } from '@shapeshift-labs/frontier-swarm';
2
+ import type { FrontierCodexCompactDashboard } from './index.js';
3
+ export declare function createCodexCompactDashboard(input: {
4
+ runDir: string;
5
+ dashboard: FrontierSwarmCoordinatorDashboard;
6
+ semanticImportExpected: boolean;
7
+ generatedAt: number;
8
+ }): FrontierCodexCompactDashboard;
9
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAEzF,OAAO,KAAK,EAAE,6BAA6B,EAA6B,MAAM,YAAY,CAAC;AAM3F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iCAAiC,CAAC;IAC7C,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,6BAA6B,CA4EhC"}
@@ -0,0 +1,80 @@
1
+ import { FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_KIND, FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_VERSION } from './constants.js';
2
+ import { uniqueStrings } from './common.js';
3
+ import { summarizeCodexSemanticImportQuality } from './semantic-import-quality.js';
4
+ import { codexJobTraceSummary, summarizeCodexTraceSummaries } from './trace-summary.js';
5
+ export function createCodexCompactDashboard(input) {
6
+ const qualities = new Map(input.dashboard.jobs.map((job) => [
7
+ job.jobId,
8
+ summarizeCodexSemanticImportQuality(job.semanticImport, input.semanticImportExpected)
9
+ ]));
10
+ const semanticQualities = Array.from(qualities.values());
11
+ const traceSummaries = input.dashboard.jobs
12
+ .map((job) => codexJobTraceSummary(job))
13
+ .filter((entry) => Boolean(entry));
14
+ const traceSummary = summarizeCodexTraceSummaries(traceSummaries);
15
+ const usefulPatchJobs = input.dashboard.jobs.filter((job) => ((job.disposition === 'auto-mergeable' || job.disposition === 'needs-port')
16
+ && job.changedPaths.length > 0
17
+ && job.tests.requiredFailed === 0));
18
+ const topJobs = [...input.dashboard.jobs]
19
+ .filter((job) => job.changedPaths.length > 0 || job.evidencePaths.length > 0)
20
+ .sort((left, right) => right.mergeScore - left.mergeScore || left.jobId.localeCompare(right.jobId))
21
+ .slice(0, 20)
22
+ .map((job) => ({
23
+ jobId: job.jobId,
24
+ ...(job.lane ? { lane: job.lane } : {}),
25
+ disposition: job.disposition,
26
+ mergeScore: job.mergeScore,
27
+ changedPaths: job.changedPaths.slice(0, 12),
28
+ semanticImportQuality: qualities.get(job.jobId),
29
+ ...(codexJobTraceSummary(job) ? { traceSummary: codexJobTraceSummary(job) } : {}),
30
+ staleAgainstHead: job.staleAgainstHead,
31
+ ...(job.duplicateGroupId ? { duplicateGroupId: job.duplicateGroupId } : {}),
32
+ evidencePaths: job.evidencePaths.slice(0, 12)
33
+ }));
34
+ return {
35
+ kind: FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_KIND,
36
+ version: FRONTIER_SWARM_CODEX_COMPACT_DASHBOARD_VERSION,
37
+ generatedAt: input.generatedAt,
38
+ runDir: input.runDir,
39
+ total: input.dashboard.summary.jobCount,
40
+ activeJobs: input.dashboard.jobs.filter((job) => job.liveness === 'running').length,
41
+ usefulPatchCount: usefulPatchJobs.length,
42
+ stalePatchCount: input.dashboard.summary.staleAgainstHeadCount,
43
+ duplicateDiscoveryCount: input.dashboard.duplicateGroups.length,
44
+ semanticImport: {
45
+ expected: input.semanticImportExpected,
46
+ presentCount: semanticQualities.filter((entry) => entry.present).length,
47
+ emptyCount: semanticQualities.filter((entry) => entry.empty).length,
48
+ weakCount: semanticQualities.filter((entry) => entry.present && entry.warnings.length > 0).length,
49
+ symbolCount: semanticQualities.reduce((sum, entry) => sum + entry.symbols, 0),
50
+ ownershipRegionCount: semanticQualities.reduce((sum, entry) => sum + entry.ownershipRegions, 0),
51
+ patchHintCount: semanticQualities.reduce((sum, entry) => sum + entry.patchHints, 0),
52
+ universalAstLayerCount: semanticQualities.reduce((sum, entry) => sum + entry.universalAstLayers, 0),
53
+ universalAstLayerNames: uniqueStrings(semanticQualities.flatMap((entry) => entry.universalAstLayerNames)),
54
+ proofSpecObligations: semanticQualities.reduce((sum, entry) => sum + entry.proofSpecObligations, 0),
55
+ proofSpecFailedObligations: semanticQualities.reduce((sum, entry) => sum + entry.proofSpecFailedObligations, 0),
56
+ paradigmSemanticsRecords: semanticQualities.reduce((sum, entry) => sum + entry.paradigmSemanticsRecords, 0),
57
+ paradigmSemanticsGroups: semanticQualities.reduce((sum, entry) => sum + entry.paradigmSemanticsGroups, 0),
58
+ paradigmSemanticsLoweringRecords: semanticQualities.reduce((sum, entry) => sum + entry.paradigmSemanticsLoweringRecords, 0)
59
+ },
60
+ trace: {
61
+ shardCount: traceSummary.shardCount,
62
+ jobsWithTraceShards: traceSummaries.filter((entry) => entry.shardCount > 0).length,
63
+ rowWindowCount: traceSummary.rowWindowCount,
64
+ hypothesisCount: traceSummary.hypothesisCount,
65
+ executableOwnershipRegionCount: traceSummary.executableOwnershipRegionCount,
66
+ focusedTestCount: traceSummary.focusedTestCount,
67
+ referenceEvidenceCount: traceSummary.referenceEvidenceCount,
68
+ divergenceCount: traceSummary.divergenceCount,
69
+ openDivergenceCount: traceSummary.openDivergenceCount
70
+ },
71
+ evidence: {
72
+ readyToApply: input.dashboard.summary.readyToApplyCount,
73
+ needsHumanPort: input.dashboard.summary.needsHumanPortCount,
74
+ failedEvidence: input.dashboard.summary.failedEvidenceCount,
75
+ averageMergeScore: input.dashboard.summary.averageMergeScore
76
+ },
77
+ topJobs
78
+ };
79
+ }
80
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FrontierCodexHandoffArtifact, FrontierCodexHandoffArtifactKind, FrontierCodexHandoffDiscoveryInput } from './index.js';
2
+ export declare function classifyCodexHandoffArtifact(file: string): FrontierCodexHandoffArtifactKind | undefined;
3
+ export declare function discoverCodexHandoffArtifacts(input: FrontierCodexHandoffDiscoveryInput): Promise<FrontierCodexHandoffArtifact[]>;
4
+ //# sourceMappingURL=handoff-artifacts.d.ts.map