@telorun/cli 0.69.0 → 0.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +99 -22
  2. package/dist/cli.js +11 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/cel.d.ts.map +1 -1
  5. package/dist/commands/cel.js +33 -14
  6. package/dist/commands/cel.js.map +1 -1
  7. package/dist/commands/check.d.ts.map +1 -1
  8. package/dist/commands/check.js +43 -8
  9. package/dist/commands/check.js.map +1 -1
  10. package/dist/commands/install.d.ts.map +1 -1
  11. package/dist/commands/install.js +27 -17
  12. package/dist/commands/install.js.map +1 -1
  13. package/dist/commands/module.d.ts.map +1 -1
  14. package/dist/commands/module.js +36 -31
  15. package/dist/commands/module.js.map +1 -1
  16. package/dist/commands/publish.d.ts.map +1 -1
  17. package/dist/commands/publish.js +40 -24
  18. package/dist/commands/publish.js.map +1 -1
  19. package/dist/commands/run.d.ts.map +1 -1
  20. package/dist/commands/run.js +15 -4
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/commands/search.d.ts.map +1 -1
  23. package/dist/commands/search.js +19 -10
  24. package/dist/commands/search.js.map +1 -1
  25. package/dist/commands/upgrade.d.ts.map +1 -1
  26. package/dist/commands/upgrade.js +35 -21
  27. package/dist/commands/upgrade.js.map +1 -1
  28. package/dist/controller-progress.d.ts.map +1 -1
  29. package/dist/controller-progress.js +0 -0
  30. package/dist/controller-progress.js.map +1 -1
  31. package/dist/debug-event-subscriber.d.ts.map +1 -1
  32. package/dist/debug-event-subscriber.js +2 -1
  33. package/dist/debug-event-subscriber.js.map +1 -1
  34. package/dist/logger.d.ts +23 -0
  35. package/dist/logger.d.ts.map +1 -1
  36. package/dist/logger.js +65 -36
  37. package/dist/logger.js.map +1 -1
  38. package/dist/output.d.ts +111 -0
  39. package/dist/output.d.ts.map +1 -0
  40. package/dist/output.js +143 -0
  41. package/dist/output.js.map +1 -0
  42. package/package.json +5 -5
package/README.md CHANGED
@@ -283,13 +283,13 @@ Upgrading apps/my-app/telo.yaml
283
283
 
284
284
  ---
285
285
 
286
- ### `telo [manifest]`
286
+ ### `telo run <path>` (default)
287
287
 
288
- Load and run a Telo manifest.
288
+ Load and run a Telo manifest. `run` is the default command, so `telo ./manifest.yaml` and `telo run ./manifest.yaml` are the same thing.
289
289
 
290
290
  **Arguments:**
291
291
 
292
- - `manifest` - Path to a YAML manifest file or directory. Can be local or a remote URL.
292
+ - `path` - Path to a YAML manifest file, a directory containing `telo.yaml`, or an HTTP(S) URL.
293
293
 
294
294
  **Options:**
295
295
 
@@ -301,6 +301,73 @@ Load and run a Telo manifest.
301
301
 
302
302
  The cache root defaults to `<manifest-dir>/.telo`; set `TELO_CACHE_DIR` to relocate it (resolved once and used for the manifest cache, compiled validators, analysis stamp, and npm install root alike).
303
303
 
304
+ ---
305
+
306
+ ### `telo search <query>`
307
+
308
+ Search resource kinds across every module the [hub](https://hub.telo.run) tracks, matched on name and description. This is how you find a kind before you know which module owns it.
309
+
310
+ **Arguments:**
311
+
312
+ - `query` - What the resource should do, in plain words.
313
+
314
+ **Options:**
315
+
316
+ - `--kinds` - Flat kind hits, one line per resource kind, instead of grouping by module
317
+ - `--json` - Emit the hub response as JSON
318
+ - `--hub-url <url>` - Base URL of the hub. Overrides `TELO_HUB_URL`.
319
+
320
+ ```bash
321
+ telo search "key value store"
322
+ ```
323
+
324
+ ```
325
+ oci://ghcr.io/telorun/kv-store@0.4.0 — Durable key/value storage with atomic conditional writes…
326
+ Store (Provider) A configured durable key/value store: read a value with its version token…
327
+ oci://ghcr.io/telorun/cache@0.11.0 — Caching of computed or fetched values under a key…
328
+ Store (Provider) A configured cache backend that holds values under a key…
329
+ Lookup (Invocable) Reads a cached key and reports the outcome as a miss, a fresh hit or a stale hit…
330
+ ```
331
+
332
+ Each hit prints the exact ref to paste into your `imports:` map, and the kinds that ref makes available.
333
+
334
+ ---
335
+
336
+ ### `telo module <subcommand> <ref>`
337
+
338
+ Inspect a module without importing it. `<ref>` is any form the runtime resolves: a local path, an `oci://` ref, a registry ref, or a direct URL.
339
+
340
+ | Subcommand | What it prints |
341
+ | --- | --- |
342
+ | `versions` | The module's published versions, newest first (one entry for a local path or direct URL) |
343
+ | `manifest` | The module's `telo.yaml`, verified against the inline hash when the ref is pinned |
344
+ | `digest` | The version's content-identity digest — a cheap read that downloads no payload |
345
+ | `resources` | The resource instances the module declares |
346
+ | `kinds` | The resource kinds the module defines, with capability and whether each is exported |
347
+
348
+ ```bash
349
+ telo module versions oci://ghcr.io/telorun/console
350
+ telo module kinds oci://ghcr.io/telorun/console@0.16.0
351
+ ```
352
+
353
+ ---
354
+
355
+ ### `telo cel <subcommand>`
356
+
357
+ Inspect and evaluate Telo's CEL environment — useful for checking an expression's syntax and result without wiring it into a manifest first.
358
+
359
+ | Subcommand | What it does |
360
+ | --- | --- |
361
+ | `functions` | Lists the CEL standard-library functions available in manifests |
362
+ | `eval <expression>` | Evaluates an expression — the body of a `!cel` scalar |
363
+
364
+ ```bash
365
+ telo cel eval "'a-' + string(1+2)"
366
+ # a-3
367
+ ```
368
+
369
+ `eval` runs with no manifest loaded, so `variables`, `resources`, `steps` and the rest of the manifest scope are not available; it is for the pure-expression half of CEL.
370
+
304
371
  ## Examples
305
372
 
306
373
  ### Simple HTTP Server
@@ -311,42 +378,52 @@ Create a file `server.yaml`:
311
378
  kind: Telo.Application
312
379
  metadata:
313
380
  name: Example
381
+ version: 1.0.0
314
382
  imports:
315
- HttpServer: oci://ghcr.io/telorun/http-server@<version>
316
- JavaScript: oci://ghcr.io/telorun/javascript@<version>
383
+ Http: oci://ghcr.io/telorun/http-server@<version>
384
+ Run: oci://ghcr.io/telorun/run@<version>
317
385
  targets:
318
- - Server
386
+ - !ref Server
387
+ ports:
388
+ http:
389
+ env: PORT
390
+ default: 8080
391
+ variables:
392
+ audience:
393
+ env: AUDIENCE
394
+ type: string
395
+ default: World
319
396
  ---
320
397
  kind: Http.Server
321
398
  metadata:
322
399
  name: Server
323
- module: Example
324
- baseUrl: http://localhost:8080
325
- port: 8080
400
+ port: !cel "ports.http"
326
401
  mounts:
327
402
  - path: /api
328
- type: Http.Api.HelloApi
403
+ mount: !ref HelloApi
329
404
  ---
330
405
  kind: Http.Api
331
406
  metadata:
332
407
  name: HelloApi
333
- module: Example
334
408
  routes:
335
409
  - request:
336
410
  path: /hello
337
411
  method: GET
338
412
  handler:
339
- kind: JavaScript.Script
340
- code: |
341
- function main() {
342
- return { message: 'Hello World!' }
343
- }
344
- response:
345
- status: 200
346
- statuses:
347
- 200:
348
- body:
349
- message: "${{ result.message }}"
413
+ kind: Run.Value
414
+ # `bindings:` names a temporary value: computed once, read by bare name
415
+ # wherever this resource's expressions need it.
416
+ bindings:
417
+ who: !cel "variables.audience"
418
+ value:
419
+ message: !cel "'Hello, ' + who + '!'"
420
+ greeted: !cel "who"
421
+ returns:
422
+ - status: 200
423
+ content:
424
+ application/json:
425
+ body:
426
+ message: !cel "result.message"
350
427
  ```
351
428
 
352
429
  Run it:
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import yargs from "yargs";
3
3
  import { hideBin } from "yargs/helpers";
4
+ import { OUTPUT_FORMATS, configureOutput, parseOutputFormat } from "./output.js";
4
5
  import { celCommand } from "./commands/cel.js";
5
6
  import { checkCommand } from "./commands/check.js";
6
7
  import { installCommand } from "./commands/install.js";
@@ -47,6 +48,16 @@ cli
47
48
  default: true,
48
49
  describe: "Persist the analysis/validator cache to disk. Use --no-cache-write for an ephemeral, read-only run (validates in-memory, reads the baked cache but never writes it).",
49
50
  })
51
+ .option("output", {
52
+ alias: "o",
53
+ type: "string",
54
+ choices: OUTPUT_FORMATS,
55
+ default: "text",
56
+ describe: "Output format for the CLI's own output. `json` is a machine contract and never carries colour. Note `telo run` streams the app's stdout/stderr through untouched — the app picks its own encoding via its `logging:` block.",
57
+ })
58
+ // Runs before any handler, so a call site deep inside a command reaches the
59
+ // same decision without the format being threaded through every signature.
60
+ .middleware((argv) => configureOutput(parseOutputFormat(argv.output)), true)
50
61
  .demandCommand(1, "Please specify a command or path to run")
51
62
  .strict()
52
63
  .help()
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACnC,UAAU,CAAC,MAAM,CAAC;KAClB,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAEnC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAe,CAAC;AACpC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAe,CAAC;AACtC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AACxC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAe,CAAC;AACvC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AACxC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAe,CAAC;AACpC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAe,CAAC;AACvC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AAExC,GAAG;KACA,MAAM,CAAC,SAAS,EAAE;IACjB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,wBAAwB;CACnC,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,8BAA8B;CACzC,CAAC;KACD,MAAM,CAAC,kBAAkB,EAAE;IAC1B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,4BAA4B;CACvC,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,2CAA2C;CACtD,CAAC;KACD,MAAM,CAAC,aAAa,EAAE;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI;IACb,QAAQ,EACN,sKAAsK;CACzK,CAAC;KACD,aAAa,CAAC,CAAC,EAAE,yCAAyC,CAAC;KAC3D,MAAM,EAAE;KACR,IAAI,EAAE;KACN,OAAO,EAAE;KACT,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACnC,UAAU,CAAC,MAAM,CAAC;KAClB,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAEnC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAe,CAAC;AACpC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAe,CAAC;AACtC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AACxC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAe,CAAC;AACvC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AACxC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAe,CAAC;AACpC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAe,CAAC;AACvC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAe,CAAC;AAExC,GAAG;KACA,MAAM,CAAC,SAAS,EAAE;IACjB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,wBAAwB;CACnC,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,8BAA8B;CACzC,CAAC;KACD,MAAM,CAAC,kBAAkB,EAAE;IAC1B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,4BAA4B;CACvC,CAAC;KACD,MAAM,CAAC,OAAO,EAAE;IACf,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,2CAA2C;CACtD,CAAC;KACD,MAAM,CAAC,aAAa,EAAE;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI;IACb,QAAQ,EACN,sKAAsK;CACzK,CAAC;KACD,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,MAAe;IACxB,QAAQ,EACN,6NAA6N;CAChO,CAAC;IACF,4EAA4E;IAC5E,2EAA2E;KAC1E,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;KAC3E,aAAa,CAAC,CAAC,EAAE,yCAAyC,CAAC;KAC3D,MAAM,EAAE;KACR,IAAI,EAAE;KACN,OAAO,EAAE;KACT,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cel.d.ts","sourceRoot":"","sources":["../../src/commands/cel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AA6DlC,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAkC5C"}
1
+ {"version":3,"file":"cel.d.ts","sourceRoot":"","sources":["../../src/commands/cel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAgFlC,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAkC5C"}
@@ -1,11 +1,13 @@
1
1
  import { buildCelEnvironment, celFunctionCatalog } from "@telorun/templating";
2
- import { nodeCelHandlers } from "@telorun/kernel";
3
- /** JSON.stringify replacer: cel-js ints are BigInt, which JSON can't serialize. */
4
- const bigintReplacer = (_k, v) => (typeof v === "bigint" ? Number(v) : v);
2
+ import { enableBigIntJson, nodeCelHandlers } from "@telorun/kernel";
3
+ import { output } from "../output.js";
5
4
  function printFunctions(asJson) {
6
5
  const catalog = celFunctionCatalog();
7
- if (asJson) {
8
- console.log(JSON.stringify(catalog, null, 2));
6
+ const out = output();
7
+ // `--json` predates the global flag and is an alias for it. The catalog array
8
+ // IS the contract, so it is emitted bare rather than inside an envelope.
9
+ if (asJson || out.isJson) {
10
+ out.document(catalog);
9
11
  return;
10
12
  }
11
13
  const byCategory = new Map();
@@ -15,26 +17,37 @@ function printFunctions(asJson) {
15
17
  byCategory.set(fn.category, list);
16
18
  }
17
19
  for (const [category, fns] of byCategory) {
18
- console.log(`\n${category}`);
20
+ out.line(`\n${category}`);
19
21
  for (const fn of fns) {
20
22
  const tags = [
21
23
  fn.hostBacked ? "host" : null,
22
24
  fn.deterministic ? null : "non-deterministic",
23
25
  ].filter(Boolean);
24
26
  const suffix = tags.length ? ` [${tags.join(", ")}]` : "";
25
- console.log(` ${fn.signature}${suffix}`);
26
- console.log(` ${fn.summary}`);
27
+ out.line(` ${fn.signature}${suffix}`);
28
+ out.line(` ${fn.summary}`);
27
29
  }
28
30
  }
29
- console.log();
31
+ out.line();
30
32
  }
31
33
  function evalExpression(expr, contextJson, asJson) {
34
+ // The one command that evaluates CEL without a kernel, so it installs the
35
+ // int64 JSON encoding itself — `telo cel eval --json 'size([1,2,3])'` has to
36
+ // print what the same expression produces in a run. Every other path reaches
37
+ // it through `boot()`, which is what keeps the CLI and an embedding Node app
38
+ // identical: hosting a kernel is the only thing that installs it.
39
+ enableBigIntJson();
40
+ const out = output();
32
41
  let context;
33
42
  try {
34
43
  context = contextJson ? JSON.parse(contextJson) : {};
35
44
  }
36
45
  catch (err) {
37
- console.error(`Invalid --context JSON: ${err instanceof Error ? err.message : String(err)}`);
46
+ const message = `Invalid --context JSON: ${err instanceof Error ? err.message : String(err)}`;
47
+ // Prose on stderr plus a non-zero exit — never an envelope on stdout.
48
+ // stdout is the document, and an error object there would be
49
+ // indistinguishable from a CEL expression that evaluated to one.
50
+ out.errLine(message);
38
51
  process.exit(1);
39
52
  }
40
53
  // Real Node handlers so host-backed functions (sha256, base64, …) behave
@@ -45,14 +58,20 @@ function evalExpression(expr, contextJson, asJson) {
45
58
  result = env.parse(expr)(context);
46
59
  }
47
60
  catch (err) {
48
- console.error(err instanceof Error ? err.message : String(err));
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ // Prose on stderr plus a non-zero exit — never an envelope on stdout.
63
+ // stdout is the document, and an error object there would be
64
+ // indistinguishable from a CEL expression that evaluated to one.
65
+ out.errLine(message);
49
66
  process.exit(1);
50
67
  }
51
- if (asJson) {
52
- console.log(JSON.stringify(result, bigintReplacer, 2));
68
+ // The evaluated value IS the contract — emitted bare, exactly as `--json`
69
+ // already did, so the int64 encoding installed above stays observable.
70
+ if (asJson || out.isJson) {
71
+ out.document(result);
53
72
  }
54
73
  else {
55
- console.log(typeof result === "bigint" ? result.toString() : result);
74
+ out.line(String(typeof result === "bigint" ? result.toString() : result));
56
75
  }
57
76
  }
58
77
  export function celCommand(yargs) {
@@ -1 +1 @@
1
- {"version":3,"file":"cel.js","sourceRoot":"","sources":["../../src/commands/cel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cel.js","sourceRoot":"","sources":["../../src/commands/cel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAwOlC,wBAAsB,KAAK,CAAC,IAAI,EAAE;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAoB9C"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AA+PlC,wBAAsB,KAAK,CAAC,IAAI,EAAE;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EhB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAoB9C"}
@@ -6,7 +6,8 @@ import { defaultTransportRegistry } from "@telorun/kernel/transports";
6
6
  import * as fs from "fs/promises";
7
7
  import * as path from "path";
8
8
  import { pathToFileURL } from "url";
9
- import { createLogger, formatAnalysisDiagnostics, formatDiagnostics } from "../logger.js";
9
+ import { createLogger, formatAnalysisDiagnostics, formatDiagnostics, } from "../logger.js";
10
+ import { outErrLine, output } from "../output.js";
10
11
  import { RecordingCacheSource, readOriginDigests, revalidateMutableOciRefs, writeOriginDigests, } from "../manifest-freshness.js";
11
12
  const DEFAULT_REGISTRY_URL = "https://registry.telo.run";
12
13
  function cacheTargetFor(entryPath) {
@@ -70,7 +71,7 @@ async function dropStaleEntry(file, session, log) {
70
71
  await fs.rm(file, { force: true });
71
72
  }
72
73
  catch (err) {
73
- process.stderr.write(`${log.warn(`[manifest-cache] could not remove stale entry ${file}: ${err instanceof Error ? err.message : String(err)}`)}\n`);
74
+ outErrLine(`${log.err.warn(`[manifest-cache] could not remove stale entry ${file}: ${err instanceof Error ? err.message : String(err)}`)}\n`);
74
75
  }
75
76
  session.loader.forget(pathToFileURL(file).href);
76
77
  for (const recorder of session.recorders) {
@@ -110,6 +111,7 @@ knownDigests, log) {
110
111
  return {
111
112
  errorCount: 0,
112
113
  warnCount: 0,
114
+ diagnostics: [],
113
115
  staleFiles: freshness.staleFiles,
114
116
  digests: freshness.digests,
115
117
  };
@@ -141,7 +143,7 @@ knownDigests, log) {
141
143
  await writeOriginDigests(cacheTarget.manifestsDir, digests);
142
144
  }
143
145
  catch (err) {
144
- process.stderr.write(`${log.warn(`[manifest-cache] write failed: ${err instanceof Error ? err.message : String(err)}`)}\n`);
146
+ outErrLine(`${log.err.warn(`[manifest-cache] write failed: ${err instanceof Error ? err.message : String(err)}`)}\n`);
145
147
  }
146
148
  }
147
149
  return { ...counts, staleFiles: [], digests };
@@ -150,8 +152,25 @@ knownDigests, log) {
150
152
  const sourceLine = err.sourceLine;
151
153
  const displayPath = isUrl ? entryPath : path.relative(process.cwd(), entryPath);
152
154
  const loc = sourceLine !== undefined ? `:${sourceLine + 1}` : "";
153
- formatDiagnostics([{ message: err instanceof Error ? err.message : String(err) }], log, `${displayPath}${loc}`);
154
- return { errorCount: 1, warnCount: 0, staleFiles: [], digests: new Map() };
155
+ const message = err instanceof Error ? err.message : String(err);
156
+ formatDiagnostics([{ message }], log, `${displayPath}${loc}`);
157
+ // A load failure is a diagnostic like any other to a `-o json` consumer;
158
+ // dropping it there would make the payload disagree with the exit code.
159
+ return {
160
+ errorCount: 1,
161
+ warnCount: 0,
162
+ diagnostics: [
163
+ {
164
+ file: displayPath,
165
+ line: sourceLine !== undefined ? sourceLine + 1 : 1,
166
+ column: 1,
167
+ severity: "error",
168
+ message,
169
+ },
170
+ ],
171
+ staleFiles: [],
172
+ digests: new Map(),
173
+ };
155
174
  }
156
175
  }
157
176
  export async function check(argv) {
@@ -168,6 +187,7 @@ export async function check(argv) {
168
187
  const session = openSession([...cacheTargets.values()], registryUrl);
169
188
  let totalErrors = 0;
170
189
  let totalWarns = 0;
190
+ const allDiagnostics = [];
171
191
  for (const p of argv.paths) {
172
192
  const cacheTarget = cacheTargetFor(resolveEntryPath(p));
173
193
  let outcome = await checkOne(p, registryUrl, session, cacheTarget, cacheWrite, null, log);
@@ -184,9 +204,11 @@ export async function check(argv) {
184
204
  }
185
205
  totalErrors += outcome.errorCount;
186
206
  totalWarns += outcome.warnCount;
207
+ allDiagnostics.push(...outcome.diagnostics);
187
208
  }
209
+ const out = output();
188
210
  if (totalErrors === 0 && totalWarns === 0) {
189
- console.log(log.ok("✓") + " No issues found");
211
+ out.line(log.ok("✓") + " No issues found");
190
212
  }
191
213
  else {
192
214
  const parts = [];
@@ -194,10 +216,23 @@ export async function check(argv) {
194
216
  parts.push(log.error(`${totalErrors} error${totalErrors !== 1 ? "s" : ""}`));
195
217
  if (totalWarns > 0)
196
218
  parts.push(log.warn(`${totalWarns} warning${totalWarns !== 1 ? "s" : ""}`));
197
- console.log(`\n${parts.join(", ")}`);
219
+ out.line(`\n${parts.join(", ")}`);
198
220
  }
221
+ // Emitted even when clean: an empty `diagnostics` array is the answer, and a
222
+ // consumer must not have to treat "no output" as success.
223
+ out.emit({
224
+ ok: totalErrors === 0,
225
+ errorCount: totalErrors,
226
+ warnCount: totalWarns,
227
+ diagnostics: allDiagnostics,
228
+ });
229
+ // `process.exitCode`, not `process.exit()`: the structured payload was just
230
+ // written, and on a pipe `write` is asynchronous while `exit` does not flush. A
231
+ // large diagnostic set exceeds the 64 KB pipe buffer, and truncated JSON is a
232
+ // parse failure for the one consumer this format exists for. Returning lets
233
+ // the event loop drain.
199
234
  if (totalErrors > 0)
200
- process.exit(1);
235
+ process.exitCode = 1;
201
236
  }
202
237
  export function checkCommand(yargs) {
203
238
  return yargs.command("check <paths..>", "Check one or more Telo manifests for errors without running them", (y) => y
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAqPlC,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CA4BhD"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAsPlC,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CA4BhD"}
@@ -4,6 +4,7 @@ import * as path from "path";
4
4
  import { pathToFileURL } from "url";
5
5
  import { describePlatformTarget, parsePlatformTarget, warmModuleLayers, } from "../bundle/warm-layers.js";
6
6
  import { createLogger } from "../logger.js";
7
+ import { outEmit, outErrLine, outLine } from "../output.js";
7
8
  const DEFAULT_REGISTRY_URL = "https://registry.telo.run";
8
9
  /**
9
10
  * Walks the manifest graph (following imports), collects every
@@ -62,10 +63,10 @@ async function warmAnalysisCache(entryPath, entryDir, registryUrl, log, cacheRoo
62
63
  ],
63
64
  });
64
65
  await kernel.load(entryPath, { analyzeOnly: true, cacheDir: cacheRoot });
65
- console.log(` ${log.ok("✓")} warmed analysis cache in ${log.dim(path.relative(process.cwd(), manifestsDir))}`);
66
+ outLine(` ${log.ok("✓")} warmed analysis cache in ${log.dim(path.relative(process.cwd(), manifestsDir))}`);
66
67
  }
67
68
  catch (err) {
68
- console.error(` ${log.warn("⚠")} analysis cache not warmed: ` +
69
+ outErrLine(` ${log.err.warn("⚠")} analysis cache not warmed: ` +
69
70
  (err instanceof Error ? err.message : String(err)));
70
71
  }
71
72
  }
@@ -99,7 +100,7 @@ async function installOne(inputPath, registryUrl, platform, log) {
99
100
  manifests = flattenForAnalyzer(graph);
100
101
  }
101
102
  catch (err) {
102
- console.error(`${displayPath} ${log.error("error")} ` +
103
+ outErrLine(`${displayPath} ${log.err.error("error")} ` +
103
104
  (err instanceof Error ? err.message : String(err)));
104
105
  return false;
105
106
  }
@@ -119,31 +120,31 @@ async function installOne(inputPath, registryUrl, platform, log) {
119
120
  try {
120
121
  const written = await writeManifestCache(graph, entryDir, registryUrl, manifestsDir);
121
122
  if (written.length > 0) {
122
- console.log(` ${log.ok("✓")} cached ${written.length} manifest${written.length !== 1 ? "s" : ""} to ${log.dim(path.relative(process.cwd(), manifestsDir))}`);
123
+ outLine(` ${log.ok("✓")} cached ${written.length} manifest${written.length !== 1 ? "s" : ""} to ${log.dim(path.relative(process.cwd(), manifestsDir))}`);
123
124
  }
124
125
  // Warm every layer this target could need. `run` fetches lazily, so this
125
126
  // is purely so a later run (or a baked image) needs no network.
126
- const warmed = await warmModuleLayers(graph, entryDir, registryUrl, manifestsDir, platform, (msg) => console.error(` ${log.warn("⚠")} ${msg}`));
127
+ const warmed = await warmModuleLayers(graph, entryDir, registryUrl, manifestsDir, platform, (msg) => outErrLine(` ${log.err.warn("⚠")} ${msg}`));
127
128
  moduleArtifacts = warmed.artifacts;
128
129
  if (warmed.materialized > 0) {
129
- console.log(` ${log.ok("✓")} materialized ${warmed.materialized} module layer${warmed.materialized !== 1 ? "s" : ""} ` +
130
+ outLine(` ${log.ok("✓")} materialized ${warmed.materialized} module layer${warmed.materialized !== 1 ? "s" : ""} ` +
130
131
  `for ${log.dim(describePlatformTarget(platform))}`);
131
132
  }
132
133
  }
133
134
  catch (err) {
134
- console.error(`${displayPath} ${log.error("error")} failed to write manifest cache: ` +
135
+ outErrLine(`${displayPath} ${log.err.error("error")} failed to write manifest cache: ` +
135
136
  (err instanceof Error ? err.message : String(err)));
136
137
  return false;
137
138
  }
138
139
  }
139
140
  const jobs = collectControllerJobs(manifests);
140
141
  if (jobs.length === 0) {
141
- console.log(log.ok("✓") + ` ${displayPath}: no controllers to install`);
142
+ outLine(log.ok("✓") + ` ${displayPath}: no controllers to install`);
142
143
  if (entryDir && cacheRoot)
143
144
  await warmAnalysisCache(entryPath, entryDir, registryUrl, log, cacheRoot);
144
145
  return true;
145
146
  }
146
- console.log(`Installing ${jobs.length} controller${jobs.length !== 1 ? "s" : ""} for ${log.dim(displayPath)}`);
147
+ outLine(`Installing ${jobs.length} controller${jobs.length !== 1 ? "s" : ""} for ${log.dim(displayPath)}`);
147
148
  // The install root is anchored at the entry manifest's directory, mirroring
148
149
  // how `kernel.load(...)` records the entry URL at run time. Every controller
149
150
  // — registry or `local_path` — resolves through `<entry-dir>/.telo/npm/`,
@@ -165,27 +166,27 @@ async function installOne(inputPath, registryUrl, platform, log) {
165
166
  const job = jobs[i];
166
167
  const result = results[i];
167
168
  if (result.status === "fulfilled") {
168
- console.log(` ${log.ok("✓")} ${job.label}`);
169
+ outLine(` ${log.ok("✓")} ${job.label}`);
169
170
  }
170
171
  else {
171
172
  failed++;
172
173
  const reason = result.reason;
173
174
  const msg = reason instanceof Error ? reason.message : String(reason);
174
- console.error(` ${log.error("✗")} ${job.label}`);
175
- console.error(` ${log.dim(msg)}`);
175
+ outErrLine(` ${log.err.error("✗")} ${job.label}`);
176
+ outErrLine(` ${log.err.dim(msg)}`);
176
177
  for (const ref of job.definitions) {
177
- console.error(` ${log.dim(`referenced by ${ref.kind} ${ref.name}`)}`);
178
+ outErrLine(` ${log.err.dim(`referenced by ${ref.kind} ${ref.name}`)}`);
178
179
  }
179
180
  }
180
181
  }
181
182
  const elapsed = ((Date.now() - started) / 1000).toFixed(1);
182
183
  if (failed === 0) {
183
- console.log(`\n${log.ok("✓")} ${jobs.length} installed in ${elapsed}s`);
184
+ outLine(`\n${log.ok("✓")} ${jobs.length} installed in ${elapsed}s`);
184
185
  if (entryDir && cacheRoot)
185
186
  await warmAnalysisCache(entryPath, entryDir, registryUrl, log, cacheRoot);
186
187
  return true;
187
188
  }
188
- console.log(`\n${log.error(`${failed} failed`)}, ${jobs.length - failed} installed in ${elapsed}s`);
189
+ outLine(`\n${log.error(`${failed} failed`)}, ${jobs.length - failed} installed in ${elapsed}s`);
189
190
  return false;
190
191
  }
191
192
  export async function install(argv) {
@@ -197,7 +198,7 @@ export async function install(argv) {
197
198
  platform = parsePlatformTarget(argv.platform);
198
199
  }
199
200
  catch (err) {
200
- console.error(log.error("error") + ` ${err instanceof Error ? err.message : String(err)}`);
201
+ outErrLine(log.err.error("error") + ` ${err instanceof Error ? err.message : String(err)}`);
201
202
  process.exit(1);
202
203
  }
203
204
  // Same fallback chain as `telo run`: --registry-url > TELO_REGISTRY_URL >
@@ -207,13 +208,22 @@ export async function install(argv) {
207
208
  // different registry never reuses this one's cached bytes.
208
209
  const registryUrl = argv.registryUrl ?? process.env.TELO_REGISTRY_URL ?? DEFAULT_REGISTRY_URL;
209
210
  let failed = false;
211
+ const installed = [];
212
+ const failures = [];
210
213
  for (const p of argv.paths) {
211
214
  const ok = await installOne(p, registryUrl, platform, log);
215
+ (ok ? installed : failures).push(p);
212
216
  if (!ok)
213
217
  failed = true;
214
218
  }
219
+ outEmit({ ok: !failed, installed, failed: failures });
220
+ // `process.exitCode`, not `process.exit()`: the structured payload was just
221
+ // written, and on a pipe `write` is asynchronous while `exit` does not flush. A
222
+ // large diagnostic set exceeds the 64 KB pipe buffer, and truncated JSON is a
223
+ // parse failure for the one consumer this format exists for. Returning lets
224
+ // the event loop drain.
215
225
  if (failed)
216
- process.exit(1);
226
+ process.exitCode = 1;
217
227
  }
218
228
  export function installCommand(yargs) {
219
229
  return yargs.command("install <paths..>", "Pre-download all controllers referenced by one or more Telo manifests into the local cache", (y) => y