@shapeshift-labs/loom 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +160 -2
- package/dist/cli.js.map +1 -1
- package/dist/graph-frontier-run-convert.d.ts +6 -0
- package/dist/graph-frontier-run-convert.d.ts.map +1 -0
- package/dist/graph-frontier-run-convert.js +219 -0
- package/dist/graph-frontier-run-convert.js.map +1 -0
- package/dist/graph-frontier-run-records.d.ts +9 -0
- package/dist/graph-frontier-run-records.d.ts.map +1 -0
- package/dist/graph-frontier-run-records.js +105 -0
- package/dist/graph-frontier-run-records.js.map +1 -0
- package/dist/graph-frontier-run.d.ts +6 -0
- package/dist/graph-frontier-run.d.ts.map +1 -0
- package/dist/graph-frontier-run.js +63 -0
- package/dist/graph-frontier-run.js.map +1 -0
- package/dist/graph-live.d.ts +6 -0
- package/dist/graph-live.d.ts.map +1 -0
- package/dist/graph-live.js +251 -0
- package/dist/graph-live.js.map +1 -0
- package/dist/graph.d.ts +42 -1
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +824 -1
- package/dist/graph.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +7 -0
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +45 -1
- package/dist/output.js.map +1 -1
- package/dist/types.d.ts +409 -0
- package/dist/types.d.ts.map +1 -1
- package/frontier.source-policy.json +21 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ Loom gives a repository a durable semantic workspace:
|
|
|
34
34
|
- `.loom/index.json` records the current imported source graph.
|
|
35
35
|
- `.loom/refs/` and `.loom/HEAD` track semantic graph snapshots.
|
|
36
36
|
- `.loom/graph/current.json` is the current machine-readable source graph.
|
|
37
|
+
- `.loom/graph/runs/` stores durable swarm run graphs by run id.
|
|
37
38
|
- `.loom/projections/` stores target-language projection plans.
|
|
38
39
|
- `loom swarm ...` delegates to Frontier Swarm / Codex worker orchestration.
|
|
39
40
|
- `loom ui ...` opens the dark Loom dashboard against a swarm run or collected
|
|
@@ -53,6 +54,9 @@ loom scan
|
|
|
53
54
|
loom status --json
|
|
54
55
|
loom snapshot -m "initial semantic graph"
|
|
55
56
|
loom diff --json
|
|
57
|
+
loom run-graph status my-run --json
|
|
58
|
+
loom run-graph import-swarm agent-runs/my-run/collected/run-graph.json --run-id my-run
|
|
59
|
+
loom run-graph import-swarm agent-runs/my-run/live-run-graph-events.jsonl --run-id my-run
|
|
56
60
|
loom project --to python
|
|
57
61
|
loom capabilities
|
|
58
62
|
loom version
|
|
@@ -119,6 +123,62 @@ Prints `.loom/graph/current.json`.
|
|
|
119
123
|
loom graph [--json]
|
|
120
124
|
```
|
|
121
125
|
|
|
126
|
+
### `loom run-graph`
|
|
127
|
+
|
|
128
|
+
Reads and writes durable run dependency graphs stored under
|
|
129
|
+
`.loom/graph/runs/`. Run ids are sanitized into stable filenames, so a run id
|
|
130
|
+
such as `agent-runs/my-run` is stored as
|
|
131
|
+
`.loom/graph/runs/agent-runs_my-run.json`.
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
loom run-graph read [<run-id>] [--run-id <id>]
|
|
135
|
+
loom run-graph status [<run-id>] [--run-id <id>] [--json]
|
|
136
|
+
loom run-graph write-json <file|-> [--run-id <id>] [--json]
|
|
137
|
+
loom run-graph import-swarm <json-or-jsonl|-> [--run-id <id>] [--json]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`read` prints the stored `loom.run-graph` JSON. `status` reports whether the
|
|
141
|
+
graph file is missing, present, or present but invalid without surfacing a raw
|
|
142
|
+
stack trace. `write-json` stores a JSON `loom.run-graph` document using the
|
|
143
|
+
existing Loom run graph writer; pass `-` to read from stdin. `import-swarm`
|
|
144
|
+
normalizes a `frontier.swarm-codex.run-graph` artifact, such as
|
|
145
|
+
`agent-runs/<run>/collected/run-graph.json`, or a live
|
|
146
|
+
`frontier.swarm-codex.live-run-graph-event` JSONL stream, such as
|
|
147
|
+
`agent-runs/<run>/live-run-graph-events.jsonl`, into Loom's durable
|
|
148
|
+
`.loom/graph/runs/` model. Imported graphs are stored as `loom.run-graph`
|
|
149
|
+
documents with `source: "frontier-swarm-codex"`, `sourceKind`, and
|
|
150
|
+
`sourceMetadata` pointing back to the original artifact path/run directory.
|
|
151
|
+
Live JSONL imports also record `sourceMetadata.eventCount` and
|
|
152
|
+
`sourceMetadata.eventTypes`. Native Loom graphs can use `source:
|
|
153
|
+
"loom-native"`; `status --json` includes `sourceKind` so tools can distinguish
|
|
154
|
+
native and imported graphs without parsing free-form metadata.
|
|
155
|
+
|
|
156
|
+
`loom.run-graph` also accepts an optional `decisionGraph` section for typed
|
|
157
|
+
durable decision graphs. The legacy `graph.nodes: string[]` and dependency
|
|
158
|
+
indexes stay compatible for older job graph readers, while `decisionGraph`
|
|
159
|
+
stores typed nodes, edges, events, snapshots, indexes, and records for evidence,
|
|
160
|
+
gates, semantic changes, merge candidates, tournaments, panels, replays, and
|
|
161
|
+
improvement loops. Built-in node kinds include `intent`, `task`, `worker`,
|
|
162
|
+
`candidate`, `evidence`, `gate`, `decision`, `merge`, `replay`, and `rsi`.
|
|
163
|
+
Swarm imports populate this section alongside the legacy graph.
|
|
164
|
+
|
|
165
|
+
Typed summaries include `summary.typedCounts` when imported data contains
|
|
166
|
+
recognizable intents, tasks, workers, candidates, gates, evidence, merges,
|
|
167
|
+
panels, tournaments, RSI loops, or semantic changes. `status` prints a compact
|
|
168
|
+
`typed graph:` line for non-JSON output. The JavaScript API also exports
|
|
169
|
+
projection and chunk helpers so UI/read-models can be derived from graph truth
|
|
170
|
+
instead of becoming separate sources of truth:
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
const chain = buildRunGraphChainChunk(['intent:demo', 'task:demo', 'worker:demo']);
|
|
174
|
+
const mergeGate = buildRunGraphPatternChunk('merge-gate', [
|
|
175
|
+
'candidate:demo',
|
|
176
|
+
'gate:tests',
|
|
177
|
+
'merge:demo'
|
|
178
|
+
]);
|
|
179
|
+
const panels = createLoomRunGraphPanelRecords(runGraph.decisionGraph);
|
|
180
|
+
```
|
|
181
|
+
|
|
122
182
|
### `loom diff`
|
|
123
183
|
|
|
124
184
|
Compares the saved graph with the current source tree without mutating `.loom/`.
|
|
@@ -362,8 +422,17 @@ import {
|
|
|
362
422
|
snapshotLoomProject,
|
|
363
423
|
diffLoomProject,
|
|
364
424
|
createLoomProjectionPlan,
|
|
425
|
+
importSwarmCodexRunGraph,
|
|
426
|
+
normalizeSwarmCodexLiveRunGraphEvents,
|
|
427
|
+
normalizeSwarmCodexRunGraph,
|
|
428
|
+
parseSwarmCodexRunGraphInput,
|
|
429
|
+
buildRunGraphChainChunk,
|
|
430
|
+
buildRunGraphPatternChunk,
|
|
431
|
+
createLoomRunGraphPanelRecords,
|
|
432
|
+
readLoomRunGraph,
|
|
365
433
|
readLoomCapabilities,
|
|
366
|
-
runDelegateCommand
|
|
434
|
+
runDelegateCommand,
|
|
435
|
+
writeLoomRunGraph
|
|
367
436
|
} from '@shapeshift-labs/loom';
|
|
368
437
|
|
|
369
438
|
await initLoomProject({ name: 'demo', include: ['src/**/*.ts'] });
|
|
@@ -371,6 +440,38 @@ const scan = await scanLoomProject();
|
|
|
371
440
|
const snapshot = await snapshotLoomProject({ message: 'semantic checkpoint' });
|
|
372
441
|
const diff = await diffLoomProject();
|
|
373
442
|
const projection = await createLoomProjectionPlan({ target: 'python' });
|
|
443
|
+
await writeLoomRunGraph({
|
|
444
|
+
kind: 'loom.run-graph',
|
|
445
|
+
version: 1,
|
|
446
|
+
generatedAt: new Date().toISOString(),
|
|
447
|
+
root: process.cwd(),
|
|
448
|
+
runId: 'demo',
|
|
449
|
+
summary: { nodes: 1, edges: 0, roots: 1, leaves: 1, issues: 0 },
|
|
450
|
+
graph: {
|
|
451
|
+
nodes: ['task-1'],
|
|
452
|
+
edges: [],
|
|
453
|
+
dependentsByJobId: { 'task-1': [] },
|
|
454
|
+
dependenciesByJobId: { 'task-1': [] },
|
|
455
|
+
roots: ['task-1'],
|
|
456
|
+
leaves: ['task-1'],
|
|
457
|
+
issues: []
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
const runGraph = await readLoomRunGraph({ runId: 'demo' });
|
|
461
|
+
const imported = await importSwarmCodexRunGraph(swarmCodexRunGraphJson, {
|
|
462
|
+
runId: 'agent-runs/demo',
|
|
463
|
+
sourcePath: 'agent-runs/demo/collected/run-graph.json'
|
|
464
|
+
});
|
|
465
|
+
const normalized = normalizeSwarmCodexRunGraph(swarmCodexRunGraphJson, {
|
|
466
|
+
runId: 'agent-runs/demo'
|
|
467
|
+
});
|
|
468
|
+
const liveEvents = parseSwarmCodexRunGraphInput(liveRunGraphJsonl);
|
|
469
|
+
const liveGraph = Array.isArray(liveEvents)
|
|
470
|
+
? normalizeSwarmCodexLiveRunGraphEvents(liveEvents, {
|
|
471
|
+
runId: 'agent-runs/demo',
|
|
472
|
+
sourcePath: 'agent-runs/demo/live-run-graph-events.jsonl'
|
|
473
|
+
})
|
|
474
|
+
: normalizeSwarmCodexRunGraph(liveEvents);
|
|
374
475
|
const capabilities = await readLoomCapabilities();
|
|
375
476
|
await runDelegateCommand('lang', ['import', 'src/app.ts', '--sidecar']);
|
|
376
477
|
```
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA6BA,wBAAsB,UAAU,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD9E"}
|
package/dist/cli.js
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import { pathToFileURL } from 'node:url';
|
|
4
4
|
import { parseArgs, boolArg, listArg, stringArg } from './args.js';
|
|
5
|
-
import { packageVersion } from './common.js';
|
|
5
|
+
import { abs, packageVersion, pathExists, readJson, resolveRoot } from './common.js';
|
|
6
6
|
import { readLoomCapabilities } from './capabilities.js';
|
|
7
|
+
import { readLoomConfig } from './config.js';
|
|
7
8
|
import { helpText } from './help.js';
|
|
8
9
|
import { printResult } from './output.js';
|
|
9
10
|
import { initLoomProject } from './init.js';
|
|
10
11
|
import { scanLoomProject } from './scan.js';
|
|
11
12
|
import { readLoomStatus, doctorLoomProject } from './status.js';
|
|
12
|
-
import { readLoomGraph } from './graph.js';
|
|
13
|
+
import { importFrontierRunEvents, importSwarmCodexRunGraph, loomRunGraphSourceKind, parseFrontierRunEventsInput, parseSwarmCodexRunGraphInput, readLoomGraph, readLoomRunGraph, writeLoomRunGraph } from './graph.js';
|
|
13
14
|
import { diffLoomProject } from './diff.js';
|
|
14
15
|
import { createLoomProjectionPlan } from './project.js';
|
|
15
16
|
import { catLoomObject, snapshotLoomProject } from './snapshot.js';
|
|
@@ -49,6 +50,9 @@ export async function runLoomCli(argv = process.argv.slice(2)) {
|
|
|
49
50
|
else if (command === 'graph') {
|
|
50
51
|
printResult(await readLoomGraph(), json);
|
|
51
52
|
}
|
|
53
|
+
else if (command === 'run-graph') {
|
|
54
|
+
return await runLoomRunGraphCommand(args, json);
|
|
55
|
+
}
|
|
52
56
|
else if (command === 'diff') {
|
|
53
57
|
printResult(await diffLoomProject(), json);
|
|
54
58
|
}
|
|
@@ -87,6 +91,160 @@ export async function runLoomCli(argv = process.argv.slice(2)) {
|
|
|
87
91
|
return 1;
|
|
88
92
|
}
|
|
89
93
|
}
|
|
94
|
+
async function runLoomRunGraphCommand(args, json) {
|
|
95
|
+
const subcommand = args._[0] ?? 'status';
|
|
96
|
+
if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
|
|
97
|
+
process.stdout.write(runGraphHelpText());
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
if (subcommand === 'read') {
|
|
101
|
+
const runId = runGraphRunId(args, 1);
|
|
102
|
+
printResult(await readLoomRunGraph({ root: stringArg(args.root), runId }), true);
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
if (subcommand === 'status') {
|
|
106
|
+
printResult(await readLoomRunGraphStatus({ root: stringArg(args.root), runId: runGraphRunId(args, 1) }), json);
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
if (subcommand === 'write-json') {
|
|
110
|
+
const input = args._[1] ?? stringArg(args.input);
|
|
111
|
+
if (!input)
|
|
112
|
+
throw new Error('run-graph write-json requires <file|->');
|
|
113
|
+
const graph = await readRunGraphJson(input);
|
|
114
|
+
const targetRunId = runGraphRunId(args, 2) ?? graph.runId ?? 'current';
|
|
115
|
+
const path = await writeLoomRunGraph(graph, { root: stringArg(args.root), runId: targetRunId });
|
|
116
|
+
printResult({
|
|
117
|
+
ok: true,
|
|
118
|
+
message: `wrote loom run graph ${targetRunId}`,
|
|
119
|
+
path,
|
|
120
|
+
runId: targetRunId,
|
|
121
|
+
present: true,
|
|
122
|
+
graphSummary: graph.summary
|
|
123
|
+
}, json);
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
if (subcommand === 'import-swarm' || subcommand === 'import-swarm-codex') {
|
|
127
|
+
const input = args._[1] ?? stringArg(args.input);
|
|
128
|
+
if (!input)
|
|
129
|
+
throw new Error('run-graph import-swarm requires <file|->');
|
|
130
|
+
const graph = parseSwarmCodexRunGraphInput(readTextInput(input));
|
|
131
|
+
const targetRunId = runGraphRunId(args, 2);
|
|
132
|
+
printResult(await importSwarmCodexRunGraph(graph, {
|
|
133
|
+
root: stringArg(args.root),
|
|
134
|
+
runId: targetRunId,
|
|
135
|
+
sourcePath: input === '-' ? 'stdin' : input
|
|
136
|
+
}), json);
|
|
137
|
+
return 0;
|
|
138
|
+
}
|
|
139
|
+
if (subcommand === 'import-frontier-run' || subcommand === 'import-run') {
|
|
140
|
+
const input = args._[1] ?? stringArg(args.input);
|
|
141
|
+
if (!input)
|
|
142
|
+
throw new Error('run-graph import-frontier-run requires <run-events.jsonl|->');
|
|
143
|
+
const events = parseFrontierRunEventsInput(readTextInput(input));
|
|
144
|
+
const targetRunId = runGraphRunId(args, 2);
|
|
145
|
+
printResult(await importFrontierRunEvents(events, {
|
|
146
|
+
root: stringArg(args.root),
|
|
147
|
+
runId: targetRunId,
|
|
148
|
+
sourcePath: input === '-' ? 'stdin' : input
|
|
149
|
+
}), json);
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`unknown run-graph command: ${subcommand}`);
|
|
153
|
+
}
|
|
154
|
+
async function readLoomRunGraphStatus(options) {
|
|
155
|
+
const root = resolveRoot(options.root);
|
|
156
|
+
const runId = options.runId ?? 'current';
|
|
157
|
+
const label = options.runId ?? 'current';
|
|
158
|
+
let path;
|
|
159
|
+
try {
|
|
160
|
+
const config = await readLoomConfig(root);
|
|
161
|
+
path = abs(root, `${config.generated.graph}/runs/${loomRunGraphFileName(options.runId)}.json`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return {
|
|
165
|
+
ok: false,
|
|
166
|
+
message: errorMessage(error),
|
|
167
|
+
runId: label,
|
|
168
|
+
present: false
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (!(await pathExists(path))) {
|
|
172
|
+
return {
|
|
173
|
+
ok: false,
|
|
174
|
+
message: `missing loom run graph for ${label}`,
|
|
175
|
+
path,
|
|
176
|
+
runId: label,
|
|
177
|
+
present: false
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
const graph = await readLoomRunGraph(options);
|
|
182
|
+
const sourceKind = loomRunGraphSourceKind(graph);
|
|
183
|
+
return {
|
|
184
|
+
ok: true,
|
|
185
|
+
message: `found loom run graph ${graph.runId ?? runId}`,
|
|
186
|
+
path,
|
|
187
|
+
runId: graph.runId ?? runId,
|
|
188
|
+
present: true,
|
|
189
|
+
planId: graph.planId,
|
|
190
|
+
source: graph.source ?? sourceKind,
|
|
191
|
+
sourceKind,
|
|
192
|
+
sourceMetadata: graph.sourceMetadata,
|
|
193
|
+
graphSummary: graph.summary
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
message: `invalid loom run graph for ${label}: ${errorMessage(error)}`,
|
|
200
|
+
path,
|
|
201
|
+
runId: label,
|
|
202
|
+
present: true
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function runGraphRunId(args, positionalIndex) {
|
|
207
|
+
return stringArg(args['run-id'] ?? args.runId ?? args.run ?? args.id) ?? args._[positionalIndex];
|
|
208
|
+
}
|
|
209
|
+
async function readRunGraphJson(input) {
|
|
210
|
+
return readJsonInput(input);
|
|
211
|
+
}
|
|
212
|
+
async function readJsonInput(input) {
|
|
213
|
+
if (input === '-')
|
|
214
|
+
return JSON.parse(readTextInput(input));
|
|
215
|
+
return readJson(input);
|
|
216
|
+
}
|
|
217
|
+
function readTextInput(input) {
|
|
218
|
+
if (input === '-')
|
|
219
|
+
return fs.readFileSync(0, 'utf8');
|
|
220
|
+
return fs.readFileSync(input, 'utf8');
|
|
221
|
+
}
|
|
222
|
+
function loomRunGraphFileName(runId = 'current') {
|
|
223
|
+
const cleaned = runId.trim().replace(/[^A-Za-z0-9._-]+/g, '_').replace(/^_+|_+$/g, '');
|
|
224
|
+
return cleaned || 'current';
|
|
225
|
+
}
|
|
226
|
+
function runGraphHelpText() {
|
|
227
|
+
return `loom run-graph - durable swarm run dependency graph helpers
|
|
228
|
+
|
|
229
|
+
Usage:
|
|
230
|
+
loom run-graph read [<run-id>] [--run-id <id>]
|
|
231
|
+
loom run-graph status [<run-id>] [--run-id <id>] [--json]
|
|
232
|
+
loom run-graph write-json <file|-> [--run-id <id>] [--json]
|
|
233
|
+
loom run-graph import-swarm <json-or-jsonl|-> [--run-id <id>] [--json]
|
|
234
|
+
loom run-graph import-frontier-run <run-events.jsonl|-> [--run-id <id>] [--json]
|
|
235
|
+
|
|
236
|
+
Examples:
|
|
237
|
+
loom run-graph status agent-run-2026 --json
|
|
238
|
+
loom run-graph read agent-run-2026
|
|
239
|
+
loom run-graph write-json run-graph.json --run-id agent-run-2026
|
|
240
|
+
loom run-graph import-swarm agent-runs/my-run/collected/run-graph.json --run-id agent-runs/my-run
|
|
241
|
+
loom run-graph import-swarm agent-runs/my-run/live-run-graph-events.jsonl --run-id agent-runs/my-run
|
|
242
|
+
loom run-graph import-frontier-run agent-runs/my-run/run-events.jsonl --run-id agent-runs/my-run
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
function errorMessage(error) {
|
|
246
|
+
return error instanceof Error ? error.message : String(error);
|
|
247
|
+
}
|
|
90
248
|
function isCliEntrypoint() {
|
|
91
249
|
if (!process.argv[1])
|
|
92
250
|
return false;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FrontierRun, FrontierRunProjection } from '@shapeshift-labs/frontier-run';
|
|
2
|
+
import type { LoomDecisionGraph, LoomRunGraphSourceKind, LoomRunJobGraph } from './types.js';
|
|
3
|
+
export declare const FRONTIER_RUN_GRAPH_SOURCE: LoomRunGraphSourceKind;
|
|
4
|
+
export declare function normalizeFrontierRunJobGraph(input: FrontierRun['graph']): LoomRunJobGraph;
|
|
5
|
+
export declare function normalizeFrontierRunDecisionGraph(projection: FrontierRunProjection): LoomDecisionGraph;
|
|
6
|
+
//# sourceMappingURL=graph-frontier-run-convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-frontier-run-convert.d.ts","sourceRoot":"","sources":["../src/graph-frontier-run-convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAIX,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,KAAK,EACV,iBAAiB,EAWjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB,EAAE,sBAAuC,CAAC;AAEhF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,eAAe,CA6CzF;AAED,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,qBAAqB,GAAG,iBAAiB,CAuBtG"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { nowIso } from './common.js';
|
|
2
|
+
import { frontierRunStringFromData, normalizeFrontierRunDecisionRecords, toFrontierRunJsonRecord } from './graph-frontier-run-records.js';
|
|
3
|
+
export const FRONTIER_RUN_GRAPH_SOURCE = 'frontier-run';
|
|
4
|
+
export function normalizeFrontierRunJobGraph(input) {
|
|
5
|
+
const nodeIds = new Set(Object.keys(input.nodes));
|
|
6
|
+
const edges = [];
|
|
7
|
+
const issues = [];
|
|
8
|
+
const seenEdges = new Set();
|
|
9
|
+
for (const edge of Object.values(input.edges)) {
|
|
10
|
+
const from = edge.from;
|
|
11
|
+
const to = edge.to;
|
|
12
|
+
if (!from || !to) {
|
|
13
|
+
issues.push({ code: 'invalid-edge', severity: 'warning', message: `frontier-run edge ${edge.id || '<unknown>'} is missing from/to` });
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (!nodeIds.has(from)) {
|
|
17
|
+
issues.push({ code: 'missing-edge-node', severity: 'warning', message: `frontier-run edge ${edge.id || '<unknown>'} references missing source node ${from}`, path: `/graph/edges/${edge.id || edges.length}/from` });
|
|
18
|
+
nodeIds.add(from);
|
|
19
|
+
}
|
|
20
|
+
if (!nodeIds.has(to)) {
|
|
21
|
+
issues.push({ code: 'missing-edge-node', severity: 'warning', message: `frontier-run edge ${edge.id || '<unknown>'} references missing target node ${to}`, path: `/graph/edges/${edge.id || edges.length}/to` });
|
|
22
|
+
nodeIds.add(to);
|
|
23
|
+
}
|
|
24
|
+
const normalized = { from, to, type: normalizeFrontierRunEdgeKind(edge.type) };
|
|
25
|
+
const key = `${normalized.type}\0${normalized.from}\0${normalized.to}`;
|
|
26
|
+
if (seenEdges.has(key))
|
|
27
|
+
continue;
|
|
28
|
+
seenEdges.add(key);
|
|
29
|
+
edges.push(normalized);
|
|
30
|
+
}
|
|
31
|
+
const nodes = Array.from(nodeIds).sort();
|
|
32
|
+
edges.sort((left, right) => left.from.localeCompare(right.from) || left.to.localeCompare(right.to) || left.type.localeCompare(right.type));
|
|
33
|
+
const dependentsByJobId = emptyGraphIndex(nodes);
|
|
34
|
+
const dependenciesByJobId = emptyGraphIndex(nodes);
|
|
35
|
+
for (const edge of edges) {
|
|
36
|
+
dependentsByJobId[edge.from]?.push(edge.to);
|
|
37
|
+
dependenciesByJobId[edge.to]?.push(edge.from);
|
|
38
|
+
}
|
|
39
|
+
sortGraphIndex(dependentsByJobId);
|
|
40
|
+
sortGraphIndex(dependenciesByJobId);
|
|
41
|
+
return {
|
|
42
|
+
nodes,
|
|
43
|
+
edges,
|
|
44
|
+
dependentsByJobId,
|
|
45
|
+
dependenciesByJobId,
|
|
46
|
+
roots: nodes.filter((node) => dependenciesByJobId[node]?.length === 0),
|
|
47
|
+
leaves: nodes.filter((node) => dependentsByJobId[node]?.length === 0),
|
|
48
|
+
issues
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function normalizeFrontierRunDecisionGraph(projection) {
|
|
52
|
+
const nodes = Object.values(projection.run.graph.nodes).map((node) => normalizeFrontierRunDecisionNode(node)).sort((left, right) => left.id.localeCompare(right.id));
|
|
53
|
+
const edges = Object.values(projection.run.graph.edges).map((edge) => normalizeFrontierRunDecisionEdge(edge)).sort((left, right) => left.id.localeCompare(right.id));
|
|
54
|
+
const events = projection.events.map((event, index) => normalizeFrontierRunDecisionEvent(event, index)).sort((left, right) => left.generatedAt.localeCompare(right.generatedAt) || left.id.localeCompare(right.id));
|
|
55
|
+
const records = normalizeFrontierRunDecisionRecords(nodes);
|
|
56
|
+
return {
|
|
57
|
+
kind: 'loom.decision-graph',
|
|
58
|
+
version: 1,
|
|
59
|
+
generatedAt: projection.run.updatedAt || nowIso(),
|
|
60
|
+
nodes,
|
|
61
|
+
edges,
|
|
62
|
+
events,
|
|
63
|
+
snapshots: [normalizeFrontierRunDecisionSnapshot(projection.run, nodes, edges, events, records)],
|
|
64
|
+
indexes: createDecisionGraphIndexes(nodes, edges),
|
|
65
|
+
records,
|
|
66
|
+
metadata: toFrontierRunJsonRecord({
|
|
67
|
+
sourceKind: FRONTIER_RUN_GRAPH_SOURCE,
|
|
68
|
+
runId: projection.run.id,
|
|
69
|
+
goal: projection.run.goal,
|
|
70
|
+
eventCount: projection.events.length,
|
|
71
|
+
heads: projection.run.heads
|
|
72
|
+
})
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function normalizeFrontierRunDecisionNode(node) {
|
|
76
|
+
const kind = normalizeFrontierRunNodeKind(node.kind);
|
|
77
|
+
const data = toFrontierRunJsonRecord(node);
|
|
78
|
+
const metadata = toFrontierRunJsonRecord('metadata' in node ? node.metadata : undefined);
|
|
79
|
+
const taskId = node.kind === 'task' ? node.id : frontierRunStringFromData(data, 'taskId') ?? frontierRunStringFromData(metadata, 'taskId');
|
|
80
|
+
const jobId = frontierRunStringFromData(data, 'jobId') ?? frontierRunStringFromData(metadata, 'jobId');
|
|
81
|
+
const lane = node.kind === 'lane' ? node.id : frontierRunStringFromData(data, 'laneId') ?? frontierRunStringFromData(data, 'lane') ?? frontierRunStringFromData(metadata, 'lane');
|
|
82
|
+
const pathValue = frontierRunStringFromData(data, 'path') ?? frontierRunStringFromData(data, 'uri');
|
|
83
|
+
const status = frontierRunStringFromData(data, 'status');
|
|
84
|
+
const outcome = node.kind === 'decision' ? node.decision : node.kind === 'evidence' ? node.result : node.kind === 'verification' ? node.status : undefined;
|
|
85
|
+
return {
|
|
86
|
+
id: node.id,
|
|
87
|
+
kind,
|
|
88
|
+
...(kind !== node.kind ? { sourceKind: node.kind } : {}),
|
|
89
|
+
...(node.title ? { label: node.title } : {}),
|
|
90
|
+
...(taskId ? { taskId } : {}),
|
|
91
|
+
...(jobId ? { jobId } : {}),
|
|
92
|
+
...(lane ? { lane } : {}),
|
|
93
|
+
...(status ? { status } : {}),
|
|
94
|
+
...(outcome ? { outcome } : {}),
|
|
95
|
+
...(pathValue ? { path: pathValue } : {}),
|
|
96
|
+
...(node.createdAt ? { createdAt: node.createdAt } : {}),
|
|
97
|
+
...(node.updatedAt ? { updatedAt: node.updatedAt } : {}),
|
|
98
|
+
...(node.kind === 'attempt' ? { workerId: node.actorId ?? node.runnerId ?? node.id } : {}),
|
|
99
|
+
...(node.kind === 'patch' ? { candidateId: node.id } : {}),
|
|
100
|
+
...(data ? { data } : {})
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function normalizeFrontierRunDecisionEdge(edge) {
|
|
104
|
+
const kind = normalizeFrontierRunEdgeKind(edge.type);
|
|
105
|
+
const data = toFrontierRunJsonRecord(edge.metadata);
|
|
106
|
+
return {
|
|
107
|
+
id: edge.id || `${kind}:${edge.from}->${edge.to}`,
|
|
108
|
+
kind,
|
|
109
|
+
from: edge.from,
|
|
110
|
+
to: edge.to,
|
|
111
|
+
...(kind !== edge.type ? { sourceKind: edge.type } : {}),
|
|
112
|
+
...(edge.createdAt ? { createdAt: edge.createdAt } : {}),
|
|
113
|
+
...(data ? { data } : {})
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function normalizeFrontierRunDecisionEvent(event, index) {
|
|
117
|
+
const nodes = frontierRunEventNodes(event).map((node) => normalizeFrontierRunDecisionNode(node)).sort((left, right) => left.id.localeCompare(right.id));
|
|
118
|
+
const edges = frontierRunEventEdges(event).map((edge) => normalizeFrontierRunDecisionEdge(edge)).sort((left, right) => left.id.localeCompare(right.id));
|
|
119
|
+
const data = toFrontierRunJsonRecord({ id: event.id, actorId: event.actorId, actorSeq: event.actorSeq, parents: event.parents, previousActorEventId: event.previousActorEventId, payload: event.payload, hash: event.hash });
|
|
120
|
+
return {
|
|
121
|
+
kind: 'loom.decision-graph.event',
|
|
122
|
+
version: 1,
|
|
123
|
+
id: event.id || `frontier-run-event:${index}`,
|
|
124
|
+
type: event.type,
|
|
125
|
+
generatedAt: event.time,
|
|
126
|
+
runId: event.runId,
|
|
127
|
+
...(nodes.length ? { nodeIds: nodes.map((node) => node.id), nodes } : {}),
|
|
128
|
+
...(edges.length ? { edgeIds: edges.map((edge) => edge.id), edges } : {}),
|
|
129
|
+
...(data ? { data } : {})
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function normalizeFrontierRunDecisionSnapshot(run, nodes, edges, events, records) {
|
|
133
|
+
return {
|
|
134
|
+
kind: 'loom.decision-graph.snapshot',
|
|
135
|
+
version: 1,
|
|
136
|
+
id: `snapshot:${run.id}`,
|
|
137
|
+
generatedAt: run.updatedAt || nowIso(),
|
|
138
|
+
label: 'current',
|
|
139
|
+
nodeIds: nodes.map((node) => node.id),
|
|
140
|
+
edgeIds: edges.map((edge) => edge.id),
|
|
141
|
+
eventIds: events.map((event) => event.id),
|
|
142
|
+
summary: { nodes: nodes.length, edges: edges.length, events: events.length, records: records.length },
|
|
143
|
+
data: toFrontierRunJsonRecord({ sourceKind: FRONTIER_RUN_GRAPH_SOURCE, runId: run.id, goal: run.goal })
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function createDecisionGraphIndexes(nodes, edges) {
|
|
147
|
+
const indexes = { byNodeKind: {}, byEdgeKind: {}, byTaskId: {}, byJobId: {}, byLane: {} };
|
|
148
|
+
for (const node of nodes) {
|
|
149
|
+
addIndexValue(indexes.byNodeKind, node.kind, node.id);
|
|
150
|
+
if (node.taskId)
|
|
151
|
+
addIndexValue(indexes.byTaskId, node.taskId, node.id);
|
|
152
|
+
if (node.jobId)
|
|
153
|
+
addIndexValue(indexes.byJobId, node.jobId, node.id);
|
|
154
|
+
if (node.lane)
|
|
155
|
+
addIndexValue(indexes.byLane, node.lane, node.id);
|
|
156
|
+
}
|
|
157
|
+
for (const edge of edges)
|
|
158
|
+
addIndexValue(indexes.byEdgeKind, edge.kind, edge.id);
|
|
159
|
+
sortGraphIndex(indexes.byNodeKind);
|
|
160
|
+
sortGraphIndex(indexes.byEdgeKind);
|
|
161
|
+
sortGraphIndex(indexes.byTaskId);
|
|
162
|
+
sortGraphIndex(indexes.byJobId);
|
|
163
|
+
sortGraphIndex(indexes.byLane);
|
|
164
|
+
return indexes;
|
|
165
|
+
}
|
|
166
|
+
function addIndexValue(index, key, value) {
|
|
167
|
+
const values = index[key] ?? [];
|
|
168
|
+
if (!values.includes(value))
|
|
169
|
+
values.push(value);
|
|
170
|
+
index[key] = values;
|
|
171
|
+
}
|
|
172
|
+
function normalizeFrontierRunNodeKind(kind) {
|
|
173
|
+
if (kind === 'goal')
|
|
174
|
+
return 'intent';
|
|
175
|
+
if (kind === 'attempt')
|
|
176
|
+
return 'worker';
|
|
177
|
+
if (kind === 'patch')
|
|
178
|
+
return 'candidate';
|
|
179
|
+
if (kind === 'artifact')
|
|
180
|
+
return 'evidence';
|
|
181
|
+
if (kind === 'verification')
|
|
182
|
+
return 'gate';
|
|
183
|
+
if (kind === 'human-question' || kind === 'lease')
|
|
184
|
+
return 'decision';
|
|
185
|
+
return kind;
|
|
186
|
+
}
|
|
187
|
+
function normalizeFrontierRunEdgeKind(kind) {
|
|
188
|
+
if (kind === 'belongs-to-lane' || kind === 'contains-task' || kind === 'attempts-task')
|
|
189
|
+
return 'parent-task';
|
|
190
|
+
if (kind === 'produces-artifact' || kind === 'produces-evidence' || kind === 'produces-patch')
|
|
191
|
+
return 'produces';
|
|
192
|
+
if (kind === 'verified-by')
|
|
193
|
+
return 'verifies';
|
|
194
|
+
if (kind === 'decided-by')
|
|
195
|
+
return 'approves';
|
|
196
|
+
return kind;
|
|
197
|
+
}
|
|
198
|
+
function frontierRunEventNodes(event) {
|
|
199
|
+
const payload = event.payload;
|
|
200
|
+
return ['node', 'artifact', 'decision', 'lease'].map((key) => payload[key]).filter(isFrontierRunNode);
|
|
201
|
+
}
|
|
202
|
+
function frontierRunEventEdges(event) {
|
|
203
|
+
const payload = event.payload;
|
|
204
|
+
return isFrontierRunEdge(payload.edge) ? [payload.edge] : [];
|
|
205
|
+
}
|
|
206
|
+
function isFrontierRunNode(value) {
|
|
207
|
+
return !!value && typeof value === 'object' && !Array.isArray(value) && typeof value.id === 'string' && typeof value.kind === 'string';
|
|
208
|
+
}
|
|
209
|
+
function isFrontierRunEdge(value) {
|
|
210
|
+
return !!value && typeof value === 'object' && !Array.isArray(value) && typeof value.id === 'string' && typeof value.from === 'string' && typeof value.to === 'string' && typeof value.type === 'string';
|
|
211
|
+
}
|
|
212
|
+
function emptyGraphIndex(nodes) {
|
|
213
|
+
return Object.fromEntries(nodes.map((node) => [node, []]));
|
|
214
|
+
}
|
|
215
|
+
function sortGraphIndex(index) {
|
|
216
|
+
for (const values of Object.values(index))
|
|
217
|
+
values.sort();
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=graph-frontier-run-convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-frontier-run-convert.js","sourceRoot":"","sources":["../src/graph-frontier-run-convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { JsonValue, LoomDecisionGraph, LoomDecisionGraphNode, LoomDecisionGraphRecord, LoomPanelProjectionRecord, LoomRunGraphTypedCounts } from './types.js';
|
|
2
|
+
export declare function createFrontierRunPanelRecords(graph: LoomDecisionGraph): LoomPanelProjectionRecord[];
|
|
3
|
+
export declare function normalizeFrontierRunDecisionRecords(nodes: readonly LoomDecisionGraphNode[]): LoomDecisionGraphRecord[];
|
|
4
|
+
export declare function summarizeFrontierRunTypedCounts(graph: LoomDecisionGraph): LoomRunGraphTypedCounts;
|
|
5
|
+
export declare function toFrontierRunJsonValue(value: unknown): JsonValue;
|
|
6
|
+
export declare function toFrontierRunJsonRecord(value: unknown): Record<string, JsonValue> | undefined;
|
|
7
|
+
export declare function frontierRunStringFromData(data: Record<string, JsonValue> | undefined, key: string): string | undefined;
|
|
8
|
+
export declare function uniqueFrontierRunStrings(values: readonly string[]): string[];
|
|
9
|
+
//# sourceMappingURL=graph-frontier-run-records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-frontier-run-records.d.ts","sourceRoot":"","sources":["../src/graph-frontier-run-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EAGvB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,yBAAyB,EAAE,CAUnG;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,GAAG,uBAAuB,EAAE,CA4BtH;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,uBAAuB,CAYjG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAchE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAI7F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGtH;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE5E"}
|