@shapeshift-labs/loom 0.1.15 → 0.1.16
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 +54 -5
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +21 -3
- package/dist/capabilities.js.map +1 -1
- package/dist/delegate.d.ts +9 -4
- package/dist/delegate.d.ts.map +1 -1
- package/dist/delegate.js +113 -3
- package/dist/delegate.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +20 -0
- package/dist/help.js.map +1 -1
- package/dist/status-ui-health.d.ts +4 -0
- package/dist/status-ui-health.d.ts.map +1 -0
- package/dist/status-ui-health.js +91 -0
- package/dist/status-ui-health.js.map +1 -0
- package/dist/status-ui.d.ts +40 -0
- package/dist/status-ui.d.ts.map +1 -0
- package/dist/status-ui.js +249 -0
- package/dist/status-ui.js.map +1 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +5 -1
- package/dist/status.js.map +1 -1
- package/dist/swarm.d.ts.map +1 -1
- package/dist/swarm.js +2 -0
- package/dist/swarm.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -36,6 +36,8 @@ Loom gives a repository a durable semantic workspace:
|
|
|
36
36
|
- `.loom/graph/current.json` is the current machine-readable source graph.
|
|
37
37
|
- `.loom/projections/` stores target-language projection plans.
|
|
38
38
|
- `loom swarm ...` delegates to Frontier Swarm / Codex worker orchestration.
|
|
39
|
+
- `loom ui ...` opens the dark Loom dashboard against a swarm run or collected
|
|
40
|
+
swarm collection for inspecting and steering workers.
|
|
39
41
|
- `loom lang ...` delegates to Frontier Lang parsing, source import, slicing,
|
|
40
42
|
projection, and universal AST commands.
|
|
41
43
|
- `loom frontier ...` delegates to Frontier Framework app, evidence, harness,
|
|
@@ -96,13 +98,19 @@ Output: `.loom/graph/current.json`, `.loom/index.json`,
|
|
|
96
98
|
### `loom status`
|
|
97
99
|
|
|
98
100
|
Reports whether the project has Loom config, a current graph, git dirtiness,
|
|
99
|
-
semantic HEAD/ref information, installed Frontier package versions,
|
|
100
|
-
|
|
101
|
+
semantic HEAD/ref information, installed Frontier package versions, delegate
|
|
102
|
+
command availability, and UI launch hints for detected local swarm runs or
|
|
103
|
+
collections.
|
|
101
104
|
|
|
102
105
|
```sh
|
|
103
106
|
loom status [--json]
|
|
104
107
|
```
|
|
105
108
|
|
|
109
|
+
`--json` includes a `uiLaunch` block with canonical `loom ui ...` and
|
|
110
|
+
`loom swarm dashboard ...` commands. When Loom sees local run evidence under
|
|
111
|
+
`agent-runs/` or `.loom/runs/`, it reports ready-to-copy targets with both bare
|
|
112
|
+
path commands and explicit `--run` or `--collection` forms.
|
|
113
|
+
|
|
106
114
|
### `loom graph`
|
|
107
115
|
|
|
108
116
|
Prints `.loom/graph/current.json`.
|
|
@@ -162,13 +170,18 @@ loom doctor [--json]
|
|
|
162
170
|
```
|
|
163
171
|
|
|
164
172
|
Required packages are Frontier core, Frontier Lang, Frontier Lang CLI, Frontier
|
|
165
|
-
Lang compiler, Frontier Swarm, Frontier Swarm Codex,
|
|
173
|
+
Lang compiler, Frontier Swarm, Frontier Swarm Codex, Frontier Loom UI, and
|
|
174
|
+
Frontier Framework.
|
|
166
175
|
|
|
167
176
|
Plain output lists missing packages and delegate availability. `--json` also
|
|
168
177
|
includes `packageName`, `binName`, `required`, `available`, `version`, `cliPath`,
|
|
169
178
|
`resolution`, `pathRequired`, `pathAvailable`, and resolution `error` fields.
|
|
170
179
|
Delegates resolve from installed package bins, so raw `frontier-swarm` or
|
|
171
180
|
`frontier-lang` binaries do not need to be on `PATH` when `loom ...` works.
|
|
181
|
+
For local package development, override a delegate with
|
|
182
|
+
`LOOM_DELEGATE_<COMMAND>_CLI=/path/to/dist/cli.js` or
|
|
183
|
+
`LOOM_DELEGATE_<COMMAND>_PACKAGE_ROOT=/path/to/package`; hyphenated commands
|
|
184
|
+
use underscores, such as `LOOM_DELEGATE_SWARM_CODEX_CLI`.
|
|
172
185
|
|
|
173
186
|
### `loom capabilities`
|
|
174
187
|
|
|
@@ -209,15 +222,51 @@ loom swarm doctor
|
|
|
209
222
|
loom swarm plan --manifest agent-ownership.json --tasks work-queue.json --outDir agent-runs/plan
|
|
210
223
|
loom swarm run --manifest agent-ownership.json --tasks work-queue.json --workspace copy --concurrency 8
|
|
211
224
|
loom swarm collect --run agent-runs/my-run
|
|
225
|
+
loom swarm dashboard agent-runs/my-run/collected
|
|
226
|
+
loom swarm ui agent-runs/my-run --open
|
|
227
|
+
loom ui agent-runs/my-run
|
|
228
|
+
loom swarm continue --collection agent-runs/my-run/collected --backlog swarm-backlog.json --routing-policy model-routing-policy.json
|
|
229
|
+
LOOM_DELEGATE_SWARM_CODEX_CLI=../frontier-swarm-codex/dist/cli.js loom swarm-codex continue --collection agent-runs/my-run/collected
|
|
212
230
|
loom swarm query --run agent-runs/my-run --semantic --readiness ready
|
|
213
231
|
loom swarm tournament show --run agent-runs/my-run
|
|
214
232
|
```
|
|
215
233
|
|
|
216
234
|
This exposes swarm planning, run/resume/stop, collect/query, merge admission,
|
|
217
|
-
semantic sidecar inspection, adaptive/tournament scheduling,
|
|
218
|
-
|
|
235
|
+
semantic sidecar inspection, adaptive/tournament scheduling, continuation from
|
|
236
|
+
collected child backlogs/model-routing feedback, scoring, cleanup, repair-links,
|
|
237
|
+
and verification commands provided by
|
|
219
238
|
`@shapeshift-labs/frontier-swarm-codex`.
|
|
220
239
|
|
|
240
|
+
### `loom ui`
|
|
241
|
+
|
|
242
|
+
Delegates to the installed Frontier Loom UI package. `loom swarm dashboard` and
|
|
243
|
+
`loom swarm ui` are aliases that keep the dashboard discoverable from swarm
|
|
244
|
+
workflows. A bare path is treated as `--run` unless it looks like a collected
|
|
245
|
+
swarm collection directory or `collection.json`, in which case Loom forwards it
|
|
246
|
+
as `--collection`.
|
|
247
|
+
|
|
248
|
+
```sh
|
|
249
|
+
loom ui [<run-or-collection>] [frontier-loom-ui options...]
|
|
250
|
+
loom swarm dashboard [<run-or-collection>] [frontier-loom-ui options...]
|
|
251
|
+
loom swarm ui [<run-or-collection>] [frontier-loom-ui options...]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Examples:
|
|
255
|
+
|
|
256
|
+
```sh
|
|
257
|
+
loom ui agent-runs/my-run
|
|
258
|
+
loom swarm dashboard agent-runs/my-run --open
|
|
259
|
+
loom swarm ui agent-runs/my-run --port 4173
|
|
260
|
+
loom swarm dashboard agent-runs/my-run/collected
|
|
261
|
+
loom ui --collection agent-runs/my-run/collected --continuation agent-runs/my-run/continuation
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
The UI reads dashboard snapshots from `@shapeshift-labs/frontier-swarm-codex`
|
|
265
|
+
and writes steering intent files for the coordinator to consume. The snapshot
|
|
266
|
+
schema and steering API stay in the swarm packages rather than inside the UI.
|
|
267
|
+
Run `loom status --json` to discover local `uiLaunch.detected` run and
|
|
268
|
+
collection commands before opening a dashboard.
|
|
269
|
+
|
|
221
270
|
### `loom lang`
|
|
222
271
|
|
|
223
272
|
Delegates to the published Frontier Lang CLI.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAepD,wBAAsB,oBAAoB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtG;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAepD,wBAAsB,oBAAoB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQtG;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CA8BhF"}
|
package/dist/capabilities.js
CHANGED
|
@@ -28,9 +28,14 @@ export async function inspectDelegates() {
|
|
|
28
28
|
for (const target of listDelegateTargets()) {
|
|
29
29
|
let available = false;
|
|
30
30
|
let cliPath;
|
|
31
|
+
let packageRoot;
|
|
32
|
+
let resolution;
|
|
31
33
|
let error;
|
|
32
34
|
try {
|
|
33
|
-
|
|
35
|
+
const resolved = resolveDelegateTarget(target.command);
|
|
36
|
+
cliPath = resolved.cliPath;
|
|
37
|
+
packageRoot = resolved.packageRoot;
|
|
38
|
+
resolution = resolved.resolution;
|
|
34
39
|
available = true;
|
|
35
40
|
}
|
|
36
41
|
catch (caught) {
|
|
@@ -39,9 +44,10 @@ export async function inspectDelegates() {
|
|
|
39
44
|
rows.push({
|
|
40
45
|
...target,
|
|
41
46
|
available,
|
|
42
|
-
version: await
|
|
47
|
+
version: await readDelegateVersion(packageRoot, target.packageName),
|
|
43
48
|
cliPath,
|
|
44
|
-
|
|
49
|
+
packageRoot,
|
|
50
|
+
resolution: resolution ?? null,
|
|
45
51
|
pathRequired: false,
|
|
46
52
|
pathAvailable: isOnPath(target.binName),
|
|
47
53
|
error
|
|
@@ -49,6 +55,18 @@ export async function inspectDelegates() {
|
|
|
49
55
|
}
|
|
50
56
|
return rows;
|
|
51
57
|
}
|
|
58
|
+
async function readDelegateVersion(packageRoot, packageName) {
|
|
59
|
+
if (packageRoot) {
|
|
60
|
+
try {
|
|
61
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
62
|
+
return pkg.version ?? null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Fall through to package resolution.
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return await packageVersion(packageName) ?? null;
|
|
69
|
+
}
|
|
52
70
|
function isOnPath(binName) {
|
|
53
71
|
const paths = process.env.PATH?.split(path.delimiter).filter(Boolean) ?? [];
|
|
54
72
|
const candidates = process.platform === 'win32' ? [binName, `${binName}.cmd`, `${binName}.exe`] : [binName];
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,cAAc,GAAG;IACrB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,6DAA6D,EAAE;IAC3F,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iEAAiE,EAAE;IAC/F,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,wDAAwD,EAAE;IACxF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mCAAmC,EAAE;IAClE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gEAAgE,EAAE;IAC9F,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,sDAAsD,EAAE;IACxF,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,mCAAmC,EAAE;IACrE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,EAAE;IAC5E,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iDAAiD,EAAE;IACjF,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,sDAAsD,EAAE;CAC7F,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAA6B,EAAE;IACxE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/B,cAAc;QACd,SAAS,EAAE,MAAM,gBAAgB,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAA2B,CAAC;QAChC,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/delegate.d.ts
CHANGED
|
@@ -4,14 +4,19 @@ export interface DelegateTarget {
|
|
|
4
4
|
required: boolean;
|
|
5
5
|
description: string;
|
|
6
6
|
}
|
|
7
|
+
export type DelegateResolution = 'env-cli' | 'env-package-root' | 'package-bin';
|
|
8
|
+
export interface ResolvedDelegateTarget {
|
|
9
|
+
target: DelegateTarget;
|
|
10
|
+
cliPath: string;
|
|
11
|
+
packageRoot?: string;
|
|
12
|
+
resolution: DelegateResolution;
|
|
13
|
+
}
|
|
7
14
|
export declare const delegateTargets: Record<string, DelegateTarget>;
|
|
8
15
|
export declare function isDelegateCommand(command: string): boolean;
|
|
9
16
|
export declare function listDelegateTargets(): Array<{
|
|
10
17
|
command: string;
|
|
11
18
|
} & DelegateTarget>;
|
|
12
|
-
export declare function resolveDelegateTarget(command: string):
|
|
13
|
-
target: DelegateTarget;
|
|
14
|
-
cliPath: string;
|
|
15
|
-
};
|
|
19
|
+
export declare function resolveDelegateTarget(command: string): ResolvedDelegateTarget;
|
|
16
20
|
export declare function runDelegateCommand(command: string, args: string[]): Promise<number>;
|
|
21
|
+
export declare function normalizeLoomUiArgs(args: string[]): string[];
|
|
17
22
|
//# sourceMappingURL=delegate.d.ts.map
|
package/dist/delegate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA2C1D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,mBAAmB,IAAI,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAsB7E;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAczF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa5D"}
|
package/dist/delegate.js
CHANGED
|
@@ -16,6 +16,12 @@ export const delegateTargets = {
|
|
|
16
16
|
required: true,
|
|
17
17
|
description: 'Explicit Frontier Swarm Codex adapter alias.'
|
|
18
18
|
},
|
|
19
|
+
ui: {
|
|
20
|
+
packageName: '@shapeshift-labs/frontier-loom-ui',
|
|
21
|
+
binName: 'frontier-loom-ui',
|
|
22
|
+
required: true,
|
|
23
|
+
description: 'Dark Loom dashboard for inspecting and steering swarm runs and collections.'
|
|
24
|
+
},
|
|
19
25
|
lang: {
|
|
20
26
|
packageName: '@shapeshift-labs/frontier-lang-cli',
|
|
21
27
|
binName: 'frontier-lang',
|
|
@@ -51,12 +57,25 @@ export function resolveDelegateTarget(command) {
|
|
|
51
57
|
const target = delegateTargets[command];
|
|
52
58
|
if (!target)
|
|
53
59
|
throw new Error(`unknown delegated command: ${command}`);
|
|
54
|
-
const
|
|
60
|
+
const cliOverride = readDelegateEnv(command, 'CLI');
|
|
61
|
+
if (cliOverride) {
|
|
62
|
+
const cliPath = path.resolve(cliOverride);
|
|
63
|
+
if (!fs.existsSync(cliPath))
|
|
64
|
+
throw new Error(`${delegateEnvName(command, 'CLI')} points to a missing file: ${cliPath}`);
|
|
65
|
+
return { target, cliPath, resolution: 'env-cli' };
|
|
66
|
+
}
|
|
67
|
+
const packageRootOverride = readDelegateEnv(command, 'PACKAGE_ROOT') ?? readDelegateEnv(command, 'ROOT');
|
|
68
|
+
const packageRoot = packageRootOverride ? path.resolve(packageRootOverride) : findPackageRoot(target.packageName);
|
|
55
69
|
const packageJson = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
56
70
|
const bin = typeof packageJson.bin === 'string' ? packageJson.bin : packageJson.bin?.[target.binName];
|
|
57
71
|
if (!bin)
|
|
58
72
|
throw new Error(`${target.packageName} does not expose bin ${target.binName}`);
|
|
59
|
-
return {
|
|
73
|
+
return {
|
|
74
|
+
target,
|
|
75
|
+
packageRoot,
|
|
76
|
+
cliPath: path.join(packageRoot, bin),
|
|
77
|
+
resolution: packageRootOverride ? 'env-package-root' : 'package-bin'
|
|
78
|
+
};
|
|
60
79
|
}
|
|
61
80
|
export async function runDelegateCommand(command, args) {
|
|
62
81
|
let cliPath;
|
|
@@ -67,12 +86,30 @@ export async function runDelegateCommand(command, args) {
|
|
|
67
86
|
process.stderr.write(delegateErrorMessage(command, error));
|
|
68
87
|
return 1;
|
|
69
88
|
}
|
|
89
|
+
const forwardedArgs = command === 'ui' ? normalizeLoomUiArgs(args) : args;
|
|
70
90
|
return new Promise((resolve, reject) => {
|
|
71
|
-
const child = spawn(process.execPath, [cliPath, ...
|
|
91
|
+
const child = spawn(process.execPath, [cliPath, ...forwardedArgs], { stdio: 'inherit' });
|
|
72
92
|
child.on('error', reject);
|
|
73
93
|
child.on('close', (code) => resolve(code ?? 1));
|
|
74
94
|
});
|
|
75
95
|
}
|
|
96
|
+
export function normalizeLoomUiArgs(args) {
|
|
97
|
+
const normalizedArgs = normalizeLoomUiOptionArgs(args);
|
|
98
|
+
if (normalizedArgs.length === 0 || hasExplicitLoomUiSource(normalizedArgs) || hasLoomUiHelpArg(normalizedArgs))
|
|
99
|
+
return normalizedArgs;
|
|
100
|
+
const targetIndex = firstLoomUiTargetIndex(normalizedArgs);
|
|
101
|
+
if (targetIndex === -1)
|
|
102
|
+
return normalizedArgs;
|
|
103
|
+
const targetPath = normalizedArgs[targetIndex];
|
|
104
|
+
if (!targetPath)
|
|
105
|
+
return normalizedArgs;
|
|
106
|
+
return [
|
|
107
|
+
...normalizedArgs.slice(0, targetIndex),
|
|
108
|
+
inferLoomUiSourceFlag(targetPath),
|
|
109
|
+
targetPath,
|
|
110
|
+
...normalizedArgs.slice(targetIndex + 1)
|
|
111
|
+
];
|
|
112
|
+
}
|
|
76
113
|
function findPackageRoot(packageName) {
|
|
77
114
|
let entry;
|
|
78
115
|
try {
|
|
@@ -89,10 +126,83 @@ function findPackageRoot(packageName) {
|
|
|
89
126
|
}
|
|
90
127
|
throw new Error(`could not find package root for ${packageName}`);
|
|
91
128
|
}
|
|
129
|
+
function readDelegateEnv(command, suffix) {
|
|
130
|
+
const value = process.env[delegateEnvName(command, suffix)];
|
|
131
|
+
return value && value.trim().length ? value.trim() : undefined;
|
|
132
|
+
}
|
|
133
|
+
function delegateEnvName(command, suffix) {
|
|
134
|
+
return `LOOM_DELEGATE_${command.toUpperCase().replace(/[^A-Z0-9]/g, '_')}_${suffix}`;
|
|
135
|
+
}
|
|
92
136
|
function delegateErrorMessage(command, error) {
|
|
93
137
|
const target = delegateTargets[command];
|
|
94
138
|
const detail = error instanceof Error ? error.message : String(error);
|
|
95
139
|
const installHint = target?.required === false ? `Install ${target.packageName} to enable loom ${command}.\n` : '';
|
|
96
140
|
return `loom ${command} is unavailable: ${detail}\n${installHint}`;
|
|
97
141
|
}
|
|
142
|
+
function hasExplicitLoomUiSource(args) {
|
|
143
|
+
return args.some((arg) => arg === '--run' ||
|
|
144
|
+
arg.startsWith('--run=') ||
|
|
145
|
+
arg === '--collection' ||
|
|
146
|
+
arg.startsWith('--collection=') ||
|
|
147
|
+
arg === '--continuation' ||
|
|
148
|
+
arg.startsWith('--continuation='));
|
|
149
|
+
}
|
|
150
|
+
function hasLoomUiHelpArg(args) {
|
|
151
|
+
return args.includes('help') || args.includes('--help') || args.includes('-h');
|
|
152
|
+
}
|
|
153
|
+
function normalizeLoomUiOptionArgs(args) {
|
|
154
|
+
const optionsWithValues = loomUiOptionsWithValues();
|
|
155
|
+
const normalized = [];
|
|
156
|
+
for (const arg of args) {
|
|
157
|
+
if (!arg.startsWith('--') || !arg.includes('=')) {
|
|
158
|
+
normalized.push(arg);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const separator = arg.indexOf('=');
|
|
162
|
+
const option = arg.slice(0, separator);
|
|
163
|
+
if (!optionsWithValues.has(option)) {
|
|
164
|
+
normalized.push(arg);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
normalized.push(option, arg.slice(separator + 1));
|
|
168
|
+
}
|
|
169
|
+
return normalized;
|
|
170
|
+
}
|
|
171
|
+
function firstLoomUiTargetIndex(args) {
|
|
172
|
+
const optionsWithValues = loomUiOptionsWithValues();
|
|
173
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
174
|
+
const arg = args[index];
|
|
175
|
+
if (!arg)
|
|
176
|
+
continue;
|
|
177
|
+
if (arg.startsWith('--')) {
|
|
178
|
+
const option = arg.includes('=') ? arg.slice(0, arg.indexOf('=')) : arg;
|
|
179
|
+
if (optionsWithValues.has(option) && !arg.includes('='))
|
|
180
|
+
index += 1;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (arg.startsWith('-'))
|
|
184
|
+
continue;
|
|
185
|
+
return index;
|
|
186
|
+
}
|
|
187
|
+
return -1;
|
|
188
|
+
}
|
|
189
|
+
function loomUiOptionsWithValues() {
|
|
190
|
+
return new Set([
|
|
191
|
+
'--cwd',
|
|
192
|
+
'--host',
|
|
193
|
+
'--port',
|
|
194
|
+
'--steering-out-dir',
|
|
195
|
+
'--steeringOutDir',
|
|
196
|
+
'--run',
|
|
197
|
+
'--collection',
|
|
198
|
+
'--continuation'
|
|
199
|
+
]);
|
|
200
|
+
}
|
|
201
|
+
function inferLoomUiSourceFlag(targetPath) {
|
|
202
|
+
const normalized = targetPath.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
203
|
+
const basename = normalized.slice(normalized.lastIndexOf('/') + 1).toLowerCase();
|
|
204
|
+
if (basename === 'collected' || basename === 'collection' || basename === 'collection.json')
|
|
205
|
+
return '--collection';
|
|
206
|
+
return '--run';
|
|
207
|
+
}
|
|
98
208
|
//# sourceMappingURL=delegate.js.map
|
package/dist/delegate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,IAAI,MAAM,CAoDjC"}
|
package/dist/help.js
CHANGED
|
@@ -14,7 +14,10 @@ Usage:
|
|
|
14
14
|
loom capabilities [--json]
|
|
15
15
|
loom version
|
|
16
16
|
loom swarm <frontier-swarm-codex args...>
|
|
17
|
+
loom swarm dashboard [<run-or-collection>] [frontier-loom-ui options...]
|
|
18
|
+
loom swarm ui [<run-or-collection>] [frontier-loom-ui options...]
|
|
17
19
|
loom swarm-codex <frontier-swarm-codex args...>
|
|
20
|
+
loom ui [<run-or-collection>] [frontier-loom-ui options...]
|
|
18
21
|
loom lang <frontier-lang args...>
|
|
19
22
|
loom frontier <frontier args...>
|
|
20
23
|
loom framework <frontier args...>
|
|
@@ -27,8 +30,25 @@ Examples:
|
|
|
27
30
|
loom project --to rust
|
|
28
31
|
loom capabilities --json
|
|
29
32
|
loom swarm collect --run agent-runs/my-run
|
|
33
|
+
loom swarm dashboard agent-runs/my-run/collected --open
|
|
34
|
+
loom swarm ui agent-runs/my-run --port 4173
|
|
35
|
+
loom ui --collection agent-runs/my-run/collected --open
|
|
36
|
+
loom ui --continuation agent-runs/my-run/continuation --open
|
|
37
|
+
LOOM_DELEGATE_SWARM_CODEX_CLI=../frontier-swarm-codex/dist/cli.js loom swarm-codex continue --collection agent-runs/my-run/collected
|
|
30
38
|
loom lang import src/app.ts --sidecar --out .loom/semantic-imports.json
|
|
31
39
|
loom frontier doctor --json
|
|
40
|
+
|
|
41
|
+
UI shortcuts:
|
|
42
|
+
loom status prints UI target dashboard commands, URL behavior, data source, run health, landed/applied counts, and active artifact paths.
|
|
43
|
+
loom status --json reports uiLaunch commands, dashboard URL hints, health, artifacts, and detected local run/collection targets.
|
|
44
|
+
loom ui <path> forwards --run unless <path> looks like a collection.
|
|
45
|
+
loom swarm dashboard <path> and loom swarm ui <path> use the same run/collection inference.
|
|
46
|
+
Use --run, --collection, --continuation, --host, --port, --steering-out-dir, --open, and --json for explicit UI control.
|
|
47
|
+
Space and equals forms are accepted for UI options, for example --run agent-runs/my-run or --run=agent-runs/my-run.
|
|
48
|
+
|
|
49
|
+
Delegate overrides:
|
|
50
|
+
LOOM_DELEGATE_<COMMAND>_CLI=/path/to/dist/cli.js
|
|
51
|
+
LOOM_DELEGATE_<COMMAND>_PACKAGE_ROOT=/path/to/package
|
|
32
52
|
`;
|
|
33
53
|
}
|
|
34
54
|
//# sourceMappingURL=help.js.map
|
package/dist/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ;IACtB,OAAO
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DetectedUiTarget, UiArtifact } from './status-ui.js';
|
|
2
|
+
export declare function readCollectionHealth(dir: string): Promise<Partial<DetectedUiTarget>>;
|
|
3
|
+
export declare function targetHealth(kind: 'run' | 'collection', artifacts: UiArtifact[], collectionHealth: Partial<DetectedUiTarget>): string;
|
|
4
|
+
//# sourceMappingURL=status-ui-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-ui-health.d.ts","sourceRoot":"","sources":["../src/status-ui-health.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAEzG,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAc1F;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,KAAK,GAAG,YAAY,EAC1B,SAAS,EAAE,UAAU,EAAE,EACvB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC1C,MAAM,CAQR"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export async function readCollectionHealth(dir) {
|
|
4
|
+
const compact = await safeReadJson(path.join(dir, 'compact-dashboard.json'));
|
|
5
|
+
const ledger = await readApplyLedgerHealth(dir);
|
|
6
|
+
return {
|
|
7
|
+
...optionalNumberField(compact, 'activeJobs'),
|
|
8
|
+
...optionalNumberField(compact, 'usefulPatchCount'),
|
|
9
|
+
...optionalNumberField(compact, 'stalePatchCount'),
|
|
10
|
+
...optionalNumberField(compact, 'total'),
|
|
11
|
+
...mergeOptionalNumber('landed', maxDefinedNumber(numberFromRecord(compact, 'landedCount'), ledger.landed)),
|
|
12
|
+
...mergeOptionalNumber('applied', ledger.applied),
|
|
13
|
+
...mergeOptionalNumber('committed', ledger.committed),
|
|
14
|
+
...mergeOptionalNumber('skipped', ledger.skipped),
|
|
15
|
+
...mergeOptionalNumber('failed', ledger.failed)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function targetHealth(kind, artifacts, collectionHealth) {
|
|
19
|
+
if (collectionHealth.failed && collectionHealth.failed > 0)
|
|
20
|
+
return 'attention';
|
|
21
|
+
if (collectionHealth.activeJobs && collectionHealth.activeJobs > 0)
|
|
22
|
+
return 'active';
|
|
23
|
+
if (collectionHealth.landed && collectionHealth.landed > 0)
|
|
24
|
+
return 'landed';
|
|
25
|
+
if (collectionHealth.usefulPatchCount && collectionHealth.usefulPatchCount > 0)
|
|
26
|
+
return 'patches-ready';
|
|
27
|
+
if (kind === 'run' && artifacts.some((artifact) => artifact.role === 'active'))
|
|
28
|
+
return 'active-artifacts';
|
|
29
|
+
if (kind === 'collection')
|
|
30
|
+
return 'collection-ready';
|
|
31
|
+
return 'ready';
|
|
32
|
+
}
|
|
33
|
+
async function readApplyLedgerHealth(dir) {
|
|
34
|
+
for (const candidate of ['apply-ledger/apply-ledger.json', 'apply-ledger.json']) {
|
|
35
|
+
const ledger = await safeReadJson(path.join(dir, candidate));
|
|
36
|
+
if (!ledger)
|
|
37
|
+
continue;
|
|
38
|
+
const entries = Array.isArray(ledger.entries) ? ledger.entries : [];
|
|
39
|
+
const applied = entries.filter((entry) => isObject(entry) && entry.status === 'applied').length;
|
|
40
|
+
const committed = entries.filter((entry) => isObject(entry) && entry.status === 'committed').length;
|
|
41
|
+
const skipped = entries.filter((entry) => isObject(entry) && entry.status === 'skipped').length;
|
|
42
|
+
const landed = entries.filter((entry) => isObject(entry) && (entry.status === 'applied' || entry.status === 'committed')).length;
|
|
43
|
+
const failed = entries.filter((entry) => isObject(entry) && entry.status === 'failed').length;
|
|
44
|
+
return {
|
|
45
|
+
...mergeOptionalNumber('landed', numberFromPath(ledger, ['summary', 'landed']) ?? landed),
|
|
46
|
+
...mergeOptionalNumber('applied', numberFromPath(ledger, ['summary', 'applied']) ?? applied),
|
|
47
|
+
...mergeOptionalNumber('committed', numberFromPath(ledger, ['summary', 'committed']) ?? committed),
|
|
48
|
+
...mergeOptionalNumber('skipped', numberFromPath(ledger, ['summary', 'skipped']) ?? skipped),
|
|
49
|
+
...mergeOptionalNumber('failed', numberFromPath(ledger, ['summary', 'failed']) ?? failed)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
async function safeReadJson(file) {
|
|
55
|
+
try {
|
|
56
|
+
const value = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
57
|
+
return isObject(value) ? value : undefined;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function optionalNumberField(record, key) {
|
|
64
|
+
return mergeOptionalNumber(key, numberFromRecord(record, key));
|
|
65
|
+
}
|
|
66
|
+
function mergeOptionalNumber(key, value) {
|
|
67
|
+
return typeof value === 'number' ? { [key]: value } : {};
|
|
68
|
+
}
|
|
69
|
+
function numberFromRecord(record, key) {
|
|
70
|
+
if (!record)
|
|
71
|
+
return undefined;
|
|
72
|
+
const value = record[key];
|
|
73
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? Math.floor(value) : undefined;
|
|
74
|
+
}
|
|
75
|
+
function numberFromPath(record, keys) {
|
|
76
|
+
let current = record;
|
|
77
|
+
for (const key of keys) {
|
|
78
|
+
if (!isObject(current))
|
|
79
|
+
return undefined;
|
|
80
|
+
current = current[key];
|
|
81
|
+
}
|
|
82
|
+
return typeof current === 'number' && Number.isFinite(current) && current >= 0 ? Math.floor(current) : undefined;
|
|
83
|
+
}
|
|
84
|
+
function maxDefinedNumber(...values) {
|
|
85
|
+
const numbers = values.filter((value) => typeof value === 'number');
|
|
86
|
+
return numbers.length ? Math.max(...numbers) : undefined;
|
|
87
|
+
}
|
|
88
|
+
function isObject(value) {
|
|
89
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=status-ui-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-ui-health.js","sourceRoot":"","sources":["../src/status-ui-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
type UiTargetKind = 'run' | 'collection';
|
|
2
|
+
type UiTargetFlag = '--run' | '--collection';
|
|
3
|
+
export type UiArtifactRole = 'active' | 'health' | 'landed';
|
|
4
|
+
type UiDashboardUrlState = 'assigned-on-launch';
|
|
5
|
+
export interface UiArtifact {
|
|
6
|
+
label: string;
|
|
7
|
+
path: string;
|
|
8
|
+
role: UiArtifactRole;
|
|
9
|
+
}
|
|
10
|
+
export interface DetectedUiTarget {
|
|
11
|
+
kind: UiTargetKind;
|
|
12
|
+
path: string;
|
|
13
|
+
flag: UiTargetFlag;
|
|
14
|
+
command: string;
|
|
15
|
+
dashboardCommand: string;
|
|
16
|
+
explicitCommand: string;
|
|
17
|
+
dataSource: string;
|
|
18
|
+
dataSourcePath: string;
|
|
19
|
+
dashboardUrl: string;
|
|
20
|
+
dashboardUrlState: UiDashboardUrlState;
|
|
21
|
+
health: string;
|
|
22
|
+
artifacts: string[];
|
|
23
|
+
activeArtifacts: string[];
|
|
24
|
+
healthArtifacts: string[];
|
|
25
|
+
landedArtifacts: string[];
|
|
26
|
+
activeJobs?: number;
|
|
27
|
+
landed?: number;
|
|
28
|
+
applied?: number;
|
|
29
|
+
committed?: number;
|
|
30
|
+
skipped?: number;
|
|
31
|
+
usefulPatchCount?: number;
|
|
32
|
+
stalePatchCount?: number;
|
|
33
|
+
total?: number;
|
|
34
|
+
failed?: number;
|
|
35
|
+
}
|
|
36
|
+
export type NumericUiTargetField = 'activeJobs' | 'landed' | 'applied' | 'committed' | 'skipped' | 'usefulPatchCount' | 'stalePatchCount' | 'total' | 'failed';
|
|
37
|
+
export declare function readUiLaunchStatus(root: string): Promise<Record<string, unknown>>;
|
|
38
|
+
export declare function loomStatusMessage(uiLaunch: Record<string, unknown>): string;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=status-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-ui.d.ts","sourceRoot":"","sources":["../src/status-ui.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG,KAAK,GAAG,YAAY,CAAC;AACzC,KAAK,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC5D,KAAK,mBAAmB,GAAG,oBAAoB,CAAC;AAQhD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAC5B,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,WAAW,GACX,SAAS,GACT,kBAAkB,GAClB,iBAAiB,GACjB,OAAO,GACP,QAAQ,CAAC;AAEb,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0BvF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAY3E"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { abs, pathExists } from './common.js';
|
|
4
|
+
import { readCollectionHealth, targetHealth } from './status-ui-health.js';
|
|
5
|
+
export async function readUiLaunchStatus(root) {
|
|
6
|
+
const detected = await detectLoomUiTargets(root);
|
|
7
|
+
return {
|
|
8
|
+
command: 'loom ui <run-or-collection>',
|
|
9
|
+
dashboardCommand: 'loom swarm dashboard <run-or-collection>',
|
|
10
|
+
runFlag: '--run <run-dir>',
|
|
11
|
+
collectionFlag: '--collection <collection-dir-or-json>',
|
|
12
|
+
continuationFlag: '--continuation <continuation-dir-or-json>',
|
|
13
|
+
argumentForms: [
|
|
14
|
+
'--run <path>',
|
|
15
|
+
'--run=<path>',
|
|
16
|
+
'--collection <path>',
|
|
17
|
+
'--collection=<path>',
|
|
18
|
+
'--continuation <path>',
|
|
19
|
+
'--continuation=<path>'
|
|
20
|
+
],
|
|
21
|
+
shortcuts: [
|
|
22
|
+
'Bare run paths are forwarded as --run.',
|
|
23
|
+
'Paths ending in collected, collection, or collection.json are forwarded as --collection.',
|
|
24
|
+
'Equals-form source and server options are normalized before launching frontier-loom-ui.'
|
|
25
|
+
],
|
|
26
|
+
health: summarizeUiLaunchHealth(detected),
|
|
27
|
+
dashboardUrl: 'http://127.0.0.1:<assigned-port>/',
|
|
28
|
+
dashboardUrlNote: 'frontier-loom-ui prints the active URL when launched; pass --port <port> for a stable URL.',
|
|
29
|
+
detected
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function loomStatusMessage(uiLaunch) {
|
|
33
|
+
const detected = detectedUiTargets(uiLaunch.detected);
|
|
34
|
+
if (detected.length > 0) {
|
|
35
|
+
const count = detected.length;
|
|
36
|
+
return [
|
|
37
|
+
`loom project detected; ${count} UI target${count === 1 ? '' : 's'} available via loom ui <path>`,
|
|
38
|
+
'ui target health:',
|
|
39
|
+
...detected.slice(0, 6).map(formatUiTargetStatusLine),
|
|
40
|
+
...(detected.length > 6 ? [`- ${detected.length - 6} more UI target${detected.length - 6 === 1 ? '' : 's'} in status --json`] : [])
|
|
41
|
+
].join('\n');
|
|
42
|
+
}
|
|
43
|
+
return 'loom project detected; launch the dashboard with loom ui <run-or-collection>';
|
|
44
|
+
}
|
|
45
|
+
async function detectLoomUiTargets(root) {
|
|
46
|
+
const detected = [];
|
|
47
|
+
await detectUiTargetsInDir(root, root, detected);
|
|
48
|
+
for (const parent of ['agent-runs', '.loom/runs']) {
|
|
49
|
+
await detectUiTargetsInDir(root, abs(root, parent), detected);
|
|
50
|
+
}
|
|
51
|
+
const seen = new Set();
|
|
52
|
+
return detected.filter((item) => {
|
|
53
|
+
const key = `${item.kind}:${item.path}`;
|
|
54
|
+
if (seen.has(key))
|
|
55
|
+
return false;
|
|
56
|
+
seen.add(key);
|
|
57
|
+
return true;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async function detectUiTargetsInDir(root, dir, out) {
|
|
61
|
+
const entries = await safeReadDir(dir);
|
|
62
|
+
if (!entries)
|
|
63
|
+
return;
|
|
64
|
+
await addUiTargetIfPresent(root, dir, out);
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (!entry.isDirectory())
|
|
67
|
+
continue;
|
|
68
|
+
const child = path.join(dir, entry.name);
|
|
69
|
+
await addUiTargetIfPresent(root, child, out);
|
|
70
|
+
await addCollectionTargetIfPresent(root, path.join(child, 'collected'), out);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function addUiTargetIfPresent(root, dir, out) {
|
|
74
|
+
if (await isCollectionTarget(dir)) {
|
|
75
|
+
await addUiTarget(root, dir, 'collection', '--collection', out);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (await isRunTarget(dir))
|
|
79
|
+
await addUiTarget(root, dir, 'run', '--run', out);
|
|
80
|
+
}
|
|
81
|
+
async function addCollectionTargetIfPresent(root, dir, out) {
|
|
82
|
+
if (await isCollectionTarget(dir))
|
|
83
|
+
await addUiTarget(root, dir, 'collection', '--collection', out);
|
|
84
|
+
}
|
|
85
|
+
async function addUiTarget(root, targetPath, kind, flag, out) {
|
|
86
|
+
const relative = path.relative(root, targetPath).replaceAll(path.sep, '/') || '.';
|
|
87
|
+
const artifacts = await collectUiArtifacts(root, targetPath, kind);
|
|
88
|
+
const collectionHealth = kind === 'collection' ? await readCollectionHealth(targetPath) : {};
|
|
89
|
+
const dataSource = `${flag} ${relative}`;
|
|
90
|
+
out.push({
|
|
91
|
+
kind,
|
|
92
|
+
path: relative,
|
|
93
|
+
flag,
|
|
94
|
+
command: `loom ui ${relative}`,
|
|
95
|
+
dashboardCommand: `loom swarm dashboard ${relative}`,
|
|
96
|
+
explicitCommand: `loom ui ${flag} ${relative}`,
|
|
97
|
+
dataSource,
|
|
98
|
+
dataSourcePath: relative,
|
|
99
|
+
dashboardUrl: 'http://127.0.0.1:<assigned-port>/',
|
|
100
|
+
dashboardUrlState: 'assigned-on-launch',
|
|
101
|
+
health: targetHealth(kind, artifacts, collectionHealth),
|
|
102
|
+
artifacts: artifacts.map((artifact) => artifact.path),
|
|
103
|
+
activeArtifacts: artifactPathsByRole(artifacts, 'active'),
|
|
104
|
+
healthArtifacts: artifactPathsByRole(artifacts, 'health'),
|
|
105
|
+
landedArtifacts: artifactPathsByRole(artifacts, 'landed'),
|
|
106
|
+
...collectionHealth
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async function isRunTarget(dir) {
|
|
110
|
+
const runMarkers = ['codex-events.jsonl', 'codex-stderr.log', 'prompt.md', 'last-message.md'];
|
|
111
|
+
for (const marker of runMarkers) {
|
|
112
|
+
if (await pathExists(path.join(dir, marker)))
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
async function isCollectionTarget(dir) {
|
|
118
|
+
if (await pathExists(path.join(dir, 'collection.json')))
|
|
119
|
+
return true;
|
|
120
|
+
const basename = path.basename(dir).toLowerCase();
|
|
121
|
+
return basename === 'collected' && await pathExists(dir);
|
|
122
|
+
}
|
|
123
|
+
async function safeReadDir(dir) {
|
|
124
|
+
try {
|
|
125
|
+
return await fs.readdir(dir, { withFileTypes: true });
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function runArtifactSpecs() {
|
|
132
|
+
return [
|
|
133
|
+
{ label: 'events', relativePath: 'codex-events.jsonl', role: 'active' },
|
|
134
|
+
{ label: 'stderr', relativePath: 'codex-stderr.log', role: 'active' },
|
|
135
|
+
{ label: 'prompt', relativePath: 'prompt.md', role: 'active' },
|
|
136
|
+
{ label: 'last-message', relativePath: 'last-message.md', role: 'active' }
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
function collectionArtifactSpecs() {
|
|
140
|
+
return [
|
|
141
|
+
{ label: 'collection', relativePath: 'collection.json', role: 'health' },
|
|
142
|
+
{ label: 'compact-dashboard', relativePath: 'compact-dashboard.json', role: 'health' },
|
|
143
|
+
{ label: 'apply-ledger', relativePath: 'apply-ledger/apply-ledger.json', role: 'landed' },
|
|
144
|
+
{ label: 'apply-ledger', relativePath: 'apply-ledger.json', role: 'landed' },
|
|
145
|
+
{ label: 'artifact-store', relativePath: 'artifact-store/artifact-store.json', role: 'health' },
|
|
146
|
+
{ label: 'evidence-index', relativePath: 'evidence-index.json', role: 'health' },
|
|
147
|
+
{ label: 'merge-index', relativePath: 'merge-index.json', role: 'health' },
|
|
148
|
+
{ label: 'queue-overlay', relativePath: 'queue-overlay.json', role: 'health' }
|
|
149
|
+
];
|
|
150
|
+
}
|
|
151
|
+
async function collectUiArtifacts(root, targetPath, kind) {
|
|
152
|
+
const artifacts = [];
|
|
153
|
+
const specs = kind === 'run' ? runArtifactSpecs() : collectionArtifactSpecs();
|
|
154
|
+
for (const spec of specs) {
|
|
155
|
+
const absolutePath = path.join(targetPath, spec.relativePath);
|
|
156
|
+
if (!await pathExists(absolutePath))
|
|
157
|
+
continue;
|
|
158
|
+
artifacts.push({
|
|
159
|
+
label: spec.label,
|
|
160
|
+
path: path.relative(root, absolutePath).replaceAll(path.sep, '/'),
|
|
161
|
+
role: spec.role
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return artifacts;
|
|
165
|
+
}
|
|
166
|
+
function artifactPathsByRole(artifacts, role) {
|
|
167
|
+
return artifacts.filter((artifact) => artifact.role === role).map((artifact) => artifact.path);
|
|
168
|
+
}
|
|
169
|
+
function summarizeUiLaunchHealth(targets) {
|
|
170
|
+
return {
|
|
171
|
+
targetCount: targets.length,
|
|
172
|
+
runCount: targets.filter((target) => target.kind === 'run').length,
|
|
173
|
+
collectionCount: targets.filter((target) => target.kind === 'collection').length,
|
|
174
|
+
activeJobs: sumNumberField(targets, 'activeJobs'),
|
|
175
|
+
landed: sumNumberField(targets, 'landed'),
|
|
176
|
+
applied: sumNumberField(targets, 'applied'),
|
|
177
|
+
committed: sumNumberField(targets, 'committed'),
|
|
178
|
+
skipped: sumNumberField(targets, 'skipped'),
|
|
179
|
+
usefulPatchCount: sumNumberField(targets, 'usefulPatchCount'),
|
|
180
|
+
stalePatchCount: sumNumberField(targets, 'stalePatchCount'),
|
|
181
|
+
failed: sumNumberField(targets, 'failed'),
|
|
182
|
+
activeArtifactPaths: uniqueStrings(targets.flatMap((target) => target.activeArtifacts)),
|
|
183
|
+
landedArtifactPaths: uniqueStrings(targets.flatMap((target) => target.landedArtifacts)),
|
|
184
|
+
healthArtifactPaths: uniqueStrings(targets.flatMap((target) => target.healthArtifacts))
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function formatUiTargetStatusLine(target) {
|
|
188
|
+
const details = [
|
|
189
|
+
`dashboard=${target.command}`,
|
|
190
|
+
`url=${target.dashboardUrl}`,
|
|
191
|
+
`source=${target.dataSource}`,
|
|
192
|
+
`health=${target.health}`
|
|
193
|
+
];
|
|
194
|
+
if (typeof target.total === 'number')
|
|
195
|
+
details.push(`total=${target.total}`);
|
|
196
|
+
if (typeof target.activeJobs === 'number')
|
|
197
|
+
details.push(`active jobs=${target.activeJobs}`);
|
|
198
|
+
if (typeof target.landed === 'number')
|
|
199
|
+
details.push(`landed=${target.landed}`);
|
|
200
|
+
if (typeof target.applied === 'number')
|
|
201
|
+
details.push(`applied=${target.applied}`);
|
|
202
|
+
if (typeof target.committed === 'number')
|
|
203
|
+
details.push(`committed=${target.committed}`);
|
|
204
|
+
if (typeof target.skipped === 'number')
|
|
205
|
+
details.push(`skipped=${target.skipped}`);
|
|
206
|
+
if (typeof target.failed === 'number')
|
|
207
|
+
details.push(`failed=${target.failed}`);
|
|
208
|
+
if (typeof target.usefulPatchCount === 'number')
|
|
209
|
+
details.push(`patches=${target.usefulPatchCount}`);
|
|
210
|
+
if (target.activeArtifacts.length)
|
|
211
|
+
details.push(`active artifacts=${formatPathList(target.activeArtifacts)}`);
|
|
212
|
+
if (target.landedArtifacts.length)
|
|
213
|
+
details.push(`landed artifacts=${formatPathList(target.landedArtifacts)}`);
|
|
214
|
+
if (target.healthArtifacts.length)
|
|
215
|
+
details.push(`health artifacts=${formatPathList(target.healthArtifacts)}`);
|
|
216
|
+
return `- ${target.kind} ${target.path}: ${details.join('; ')}`;
|
|
217
|
+
}
|
|
218
|
+
function formatPathList(paths) {
|
|
219
|
+
const visible = paths.slice(0, 3);
|
|
220
|
+
return `${visible.join(', ')}${paths.length > visible.length ? ` (+${paths.length - visible.length} more)` : ''}`;
|
|
221
|
+
}
|
|
222
|
+
function detectedUiTargets(value) {
|
|
223
|
+
return Array.isArray(value) ? value.filter(isDetectedUiTarget) : [];
|
|
224
|
+
}
|
|
225
|
+
function isDetectedUiTarget(value) {
|
|
226
|
+
return isObject(value) &&
|
|
227
|
+
(value.kind === 'run' || value.kind === 'collection') &&
|
|
228
|
+
typeof value.path === 'string' &&
|
|
229
|
+
typeof value.command === 'string' &&
|
|
230
|
+
typeof value.dataSource === 'string' &&
|
|
231
|
+
typeof value.dashboardUrl === 'string' &&
|
|
232
|
+
typeof value.health === 'string' &&
|
|
233
|
+
Array.isArray(value.activeArtifacts) &&
|
|
234
|
+
Array.isArray(value.landedArtifacts) &&
|
|
235
|
+
Array.isArray(value.healthArtifacts);
|
|
236
|
+
}
|
|
237
|
+
function sumNumberField(targets, key) {
|
|
238
|
+
return targets.reduce((sum, target) => {
|
|
239
|
+
const value = target[key];
|
|
240
|
+
return sum + (typeof value === 'number' ? value : 0);
|
|
241
|
+
}, 0);
|
|
242
|
+
}
|
|
243
|
+
function uniqueStrings(values) {
|
|
244
|
+
return [...new Set(values)];
|
|
245
|
+
}
|
|
246
|
+
function isObject(value) {
|
|
247
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=status-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-ui.js","sourceRoot":"","sources":["../src/status-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAyD3E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO;QACL,OAAO,EAAE,6BAA6B;QACtC,gBAAgB,EAAE,0CAA0C;QAC5D,OAAO,EAAE,iBAAiB;QAC1B,cAAc,EAAE,uCAAuC;QACvD,gBAAgB,EAAE,2CAA2C;QAC7D,aAAa,EAAE;YACb,cAAc;YACd,cAAc;YACd,qBAAqB;YACrB,qBAAqB;YACrB,uBAAuB;YACvB,uBAAuB;SACxB;QACD,SAAS,EAAE;YACT,wCAAwC;YACxC,0FAA0F;YAC1F,yFAAyF;SAC1F;QACD,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC;QACzC,YAAY,EAAE,mCAAmC;QACjD,gBAAgB,EAAE,4FAA4F;QAC9G,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAiC;IACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,OAAO;YACL,0BAA0B,KAAK,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,+BAA+B;YACjG,mBAAmB;YACnB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACrD,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,kBAAkB,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACpI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,8EAA8E,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;QAClD,MAAM,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,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,CAAC,IAAY,EAAE,GAAW,EAAE,GAAuB;IACpF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,GAAW,EAAE,GAAuB;IACpF,IAAI,MAAM,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,IAAI,MAAM,WAAW,CAAC,GAAG,CAAC;QAAE,MAAM,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,IAAY,EAAE,GAAW,EAAE,GAAuB;IAC5F,IAAI,MAAM,kBAAkB,CAAC,GAAG,CAAC;QAAE,MAAM,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;AACrG,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,UAAkB,EAClB,IAAkB,EAClB,IAAkB,EAClB,GAAuB;IAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IAClF,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;IACzC,GAAG,CAAC,IAAI,CAAC;QACP,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,OAAO,EAAE,WAAW,QAAQ,EAAE;QAC9B,gBAAgB,EAAE,wBAAwB,QAAQ,EAAE;QACpD,eAAe,EAAE,WAAW,IAAI,IAAI,QAAQ,EAAE;QAC9C,UAAU;QACV,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,mCAAmC;QACjD,iBAAiB,EAAE,oBAAoB;QACvC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC;QACvD,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrD,eAAe,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;QACzD,eAAe,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;QACzD,eAAe,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;QACzD,GAAG,gBAAgB;KACpB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC9F,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,OAAO,QAAQ,KAAK,WAAW,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;QACL,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9D,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;QACL,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxE,EAAE,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtF,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzF,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5E,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,oCAAoC,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/F,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAChF,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1E,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAAkB,EAAE,IAAkB;IACpF,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAC9C,SAAS,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;YACjE,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAuB,EAAE,IAAoB;IACxE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA2B;IAC1D,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM;QAClE,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,MAAM;QAChF,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;QACjD,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3C,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;QAC/C,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3C,gBAAgB,EAAE,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC;QAC7D,eAAe,EAAE,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC;QAC3D,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzC,mBAAmB,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvF,mBAAmB,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvF,mBAAmB,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;KACxF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAwB;IACxD,MAAM,OAAO,GAAG;QACd,aAAa,MAAM,CAAC,OAAO,EAAE;QAC7B,OAAO,MAAM,CAAC,YAAY,EAAE;QAC5B,UAAU,MAAM,CAAC,UAAU,EAAE;QAC7B,UAAU,MAAM,CAAC,MAAM,EAAE;KAC1B,CAAC;IACF,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5F,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACxF,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpG,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9G,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9G,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9G,OAAO,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,QAAQ,CAAC,KAAK,CAAC;QACpB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ;QACtC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,OAA2B,EAAE,GAAyB;IAC5E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,YAAY,CAAC;AAa/D,wBAAsB,cAAc,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0BhG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAanG"}
|
package/dist/status.js
CHANGED
|
@@ -2,6 +2,7 @@ import { abs, gitDirtyCount, packageVersion, pathExists, readJson, resolveRoot }
|
|
|
2
2
|
import { readLoomConfig } from './config.js';
|
|
3
3
|
import { inspectDelegates } from './capabilities.js';
|
|
4
4
|
import { readHeadRef, readRef } from './store.js';
|
|
5
|
+
import { loomStatusMessage, readUiLaunchStatus } from './status-ui.js';
|
|
5
6
|
const packageChecks = [
|
|
6
7
|
{ name: '@shapeshift-labs/frontier', required: true },
|
|
7
8
|
{ name: '@shapeshift-labs/frontier-lang', required: true },
|
|
@@ -9,6 +10,7 @@ const packageChecks = [
|
|
|
9
10
|
{ name: '@shapeshift-labs/frontier-lang-compiler', required: true },
|
|
10
11
|
{ name: '@shapeshift-labs/frontier-swarm', required: true },
|
|
11
12
|
{ name: '@shapeshift-labs/frontier-swarm-codex', required: true },
|
|
13
|
+
{ name: '@shapeshift-labs/frontier-loom-ui', required: true },
|
|
12
14
|
{ name: '@shapeshift-labs/frontier-framework', required: true }
|
|
13
15
|
];
|
|
14
16
|
export async function readLoomStatus(options = {}) {
|
|
@@ -21,10 +23,11 @@ export async function readLoomStatus(options = {}) {
|
|
|
21
23
|
const headObject = headRef ? await readRef(root, headRef).catch(() => undefined) : undefined;
|
|
22
24
|
const packages = await readPackageVersions();
|
|
23
25
|
const delegates = await inspectDelegates();
|
|
26
|
+
const uiLaunch = await readUiLaunchStatus(root);
|
|
24
27
|
return {
|
|
25
28
|
ok: configExists,
|
|
26
29
|
ready: Boolean(config && graph),
|
|
27
|
-
message: configExists ?
|
|
30
|
+
message: configExists ? loomStatusMessage(uiLaunch) : 'missing loom.json',
|
|
28
31
|
root,
|
|
29
32
|
configPath: configExists ? abs(root, 'loom.json') : undefined,
|
|
30
33
|
graphPath,
|
|
@@ -32,6 +35,7 @@ export async function readLoomStatus(options = {}) {
|
|
|
32
35
|
headRef,
|
|
33
36
|
headObject,
|
|
34
37
|
graphSummary: graph?.summary,
|
|
38
|
+
uiLaunch,
|
|
35
39
|
packages,
|
|
36
40
|
delegates
|
|
37
41
|
};
|
package/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,MAAM,aAAa,GAAG;IACpB,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrD,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1D,EAAE,IAAI,EAAE,oCAAoC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9D,EAAE,IAAI,EAAE,yCAAyC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnE,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3D,EAAE,IAAI,EAAE,uCAAuC,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjE,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC7D,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE;CAChE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA6B,EAAE;IAClE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,KAAK,GAAG,SAAS,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAY,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;QAC/B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACzE,IAAI;QACJ,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,SAAS;QACT,aAAa,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC;QACxC,OAAO;QACP,UAAU;QACV,YAAY,EAAE,KAAK,EAAE,OAAO;QAC5B,QAAQ;QACR,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAA6B,EAAE;IACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA8C,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3H,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACpI,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC;QACtG,MAAM;QACN,OAAO;QACP,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,GAAG,GAAkC,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,aAAa;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3F,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/swarm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAEA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAEA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE"}
|
package/dist/swarm.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { runDelegateCommand } from './delegate.js';
|
|
2
2
|
export async function runSwarmCommand(args) {
|
|
3
|
+
if (args[0] === 'dashboard' || args[0] === 'ui')
|
|
4
|
+
return runDelegateCommand('ui', args.slice(1));
|
|
3
5
|
return runDelegateCommand('swarm', args);
|
|
4
6
|
}
|
|
5
7
|
//# sourceMappingURL=swarm.js.map
|
package/dist/swarm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,OAAO,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,OAAO,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapeshift-labs/loom",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Repo-level semantic collaboration CLI over Frontier Lang, Frontier Swarm, and Frontier patches.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -68,8 +68,9 @@
|
|
|
68
68
|
"@shapeshift-labs/frontier-lang": "0.4.89",
|
|
69
69
|
"@shapeshift-labs/frontier-lang-cli": "0.3.44",
|
|
70
70
|
"@shapeshift-labs/frontier-lang-compiler": "0.2.103",
|
|
71
|
-
"@shapeshift-labs/frontier-
|
|
72
|
-
"@shapeshift-labs/frontier-swarm
|
|
71
|
+
"@shapeshift-labs/frontier-loom-ui": "0.1.3",
|
|
72
|
+
"@shapeshift-labs/frontier-swarm": "0.5.21",
|
|
73
|
+
"@shapeshift-labs/frontier-swarm-codex": "0.5.119"
|
|
73
74
|
},
|
|
74
75
|
"devDependencies": {
|
|
75
76
|
"@types/node": "^25.9.1",
|