@shapeshift-labs/loom 0.1.14 → 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 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, and
100
- delegate command availability.
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, and Frontier Framework.
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, scoring, cleanup,
218
- repair-links, and verification commands provided by
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,CAwBhF"}
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"}
@@ -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
- cliPath = resolveDelegateTarget(target.command).cliPath;
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 packageVersion(target.packageName) ?? null,
47
+ version: await readDelegateVersion(packageRoot, target.packageName),
43
48
  cliPath,
44
- resolution: available ? 'package-bin' : null,
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];
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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,CAqC1D,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;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUlG;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAazF"}
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 packageRoot = findPackageRoot(target.packageName);
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 { target, cliPath: path.join(packageRoot, bin) };
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, ...args], { stdio: 'inherit' });
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
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,IAAI,MAAM,CAgCjC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BR,CAAC;AACF,CAAC"}
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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,YAAY,CAAC;AAY/D,wBAAsB,cAAc,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBhG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAanG"}
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 ? 'loom project detected' : 'missing loom.json',
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
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"}
@@ -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,CAErE"}
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.14",
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",
@@ -65,11 +65,12 @@
65
65
  "dependencies": {
66
66
  "@shapeshift-labs/frontier": "0.1.9",
67
67
  "@shapeshift-labs/frontier-framework": "0.1.4",
68
- "@shapeshift-labs/frontier-lang": "0.4.88",
69
- "@shapeshift-labs/frontier-lang-cli": "0.3.43",
70
- "@shapeshift-labs/frontier-lang-compiler": "0.2.102",
71
- "@shapeshift-labs/frontier-swarm": "0.5.20",
72
- "@shapeshift-labs/frontier-swarm-codex": "0.5.116"
68
+ "@shapeshift-labs/frontier-lang": "0.4.89",
69
+ "@shapeshift-labs/frontier-lang-cli": "0.3.44",
70
+ "@shapeshift-labs/frontier-lang-compiler": "0.2.103",
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",