@procedures/node 0.3.0 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6C,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAmHlK;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,eAMrB,CAAC;eAEU,UAAU;AAEzB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAE7F"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAoE,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAwHzL;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,eAMrB,CAAC;eAEU,UAAU;AAEzB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAE7F"}
package/dist/module.js CHANGED
@@ -76,20 +76,24 @@ const nodeStatusProcedure = createProcedure()
76
76
  return nodeStatus(input);
77
77
  })
78
78
  .build();
79
- // node.logs (roadmap R44)
79
+ // node.logs (roadmap R44). One value, or with follow one item for each line (a stream).
80
80
  const nodeLogsProcedure = createProcedure()
81
81
  .path(["node", "logs"])
82
82
  .input(zodAdapter(NodeLogsInputSchema))
83
83
  .output(zodAdapter(NodeLogsOutputSchema))
84
84
  .meta({
85
- description: "The output of a process of node.spawn: the last 64 KiB of stdout and stderr",
85
+ description: "The output of a process of node.spawn: the last 64 KiB of stdout and stderr, or with follow a stream of its lines",
86
86
  args: ["processId"],
87
- shorts: { lines: "n" },
87
+ shorts: { lines: "n", follow: "f" },
88
88
  output: "json",
89
89
  // It reads the output that the process registry keeps for a process of node.spawn
90
90
  effects: { reads: ["jobs"], writes: [] },
91
+ // With follow, the stream runs as long as the process (roadmap R15)
92
+ stream: { unbounded: true },
91
93
  })
92
- .handler(async (input) => nodeLogs(input))
94
+ // With follow, the promise gives a stream: invokeProcedure reads a returned async iterable as a
95
+ // stream, and the handler types of the core do not describe that case
96
+ .handler((input, ctx) => nodeLogs(input, ctx))
93
97
  .build();
94
98
  /**
95
99
  * The module of this package, for `createRegistry()`: its procedures as data. Importing this
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,23 @@
5
5
  * the output of each process and keeps its end: the last 64 KiB, stdout and stderr together.
6
6
  * So the procedure gives that end, also after the process ended (the registry keeps the records
7
7
  * of the last 50 ended processes). It knows only the processes of this host process.
8
+ *
9
+ * With `follow`, the procedure gives a stream: the kept output as `output` lines, then each new
10
+ * line of stdout and stderr, then one `exit` item at the end of the process. The stream ends at
11
+ * the end of the process, at an abort of the caller and when the reader stops. Each end removes
12
+ * the subscription of the stream from the process registry.
8
13
  */
9
- import type { NodeLogsInput, NodeLogsOutput } from "../../types.js";
14
+ import type { NodeLogItem, NodeLogsInput, NodeLogsOutput } from "../../types.js";
10
15
  /** The last `count` lines of a text. A line end at the end of the text does not count as a line. */
11
16
  export declare function lastLines(text: string, count: number): string;
17
+ /** The lines of a text without their line ends (LF or CRLF). A line end at the end adds no line. */
18
+ export declare function splitLines(text: string): string[];
19
+ /** The context that node.logs reads: the abort of the caller. */
20
+ export interface NodeLogsContext {
21
+ signal?: AbortSignal | undefined;
22
+ }
12
23
  /**
13
- * The end of the output of a process of node.spawn
24
+ * The end of the output of a process of node.spawn, or with `follow` a stream of its lines
14
25
  */
15
- export declare function nodeLogs(input: NodeLogsInput): Promise<NodeLogsOutput>;
26
+ export declare function nodeLogs(input: NodeLogsInput, ctx?: NodeLogsContext): Promise<NodeLogsOutput | AsyncGenerator<NodeLogItem, void, undefined>>;
16
27
  //# sourceMappingURL=logs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/procedures/node/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMpE,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAW5E"}
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/procedures/node/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMjF,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIjD;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAYtJ"}
@@ -5,6 +5,11 @@
5
5
  * the output of each process and keeps its end: the last 64 KiB, stdout and stderr together.
6
6
  * So the procedure gives that end, also after the process ended (the registry keeps the records
7
7
  * of the last 50 ended processes). It knows only the processes of this host process.
8
+ *
9
+ * With `follow`, the procedure gives a stream: the kept output as `output` lines, then each new
10
+ * line of stdout and stderr, then one `exit` item at the end of the process. The stream ends at
11
+ * the end of the process, at an abort of the caller and when the reader stops. Each end removes
12
+ * the subscription of the stream from the process registry.
8
13
  */
9
14
  import { processManager } from "../../process-manager.js";
10
15
  // The CSI and OSC escape sequences of terminals (colors, styles, links), as client-shell removes them
@@ -17,14 +22,23 @@ export function lastLines(text, count) {
17
22
  return text;
18
23
  return lines.slice(-count).join("\n") + (text.endsWith("\n") ? "\n" : "");
19
24
  }
25
+ /** The lines of a text without their line ends (LF or CRLF). A line end at the end adds no line. */
26
+ export function splitLines(text) {
27
+ if (text === "")
28
+ return [];
29
+ const lines = (text.endsWith("\n") ? text.slice(0, -1) : text).split("\n");
30
+ return lines.map((line) => (line.endsWith("\r") ? line.slice(0, -1) : line));
31
+ }
20
32
  /**
21
- * The end of the output of a process of node.spawn
33
+ * The end of the output of a process of node.spawn, or with `follow` a stream of its lines
22
34
  */
23
- export async function nodeLogs(input) {
35
+ export async function nodeLogs(input, ctx = {}) {
24
36
  const info = processManager.get(input.processId);
25
37
  if (!info) {
26
38
  throw new Error(`node.logs: no process ${input.processId}. node.status lists the processes of node.spawn on this host.`);
27
39
  }
40
+ if (input.follow)
41
+ return followLogs(input, ctx.signal);
28
42
  let output = processManager.output(input.processId);
29
43
  if (input.stripAnsi)
30
44
  output = output.replace(ANSI, "");
@@ -35,4 +49,43 @@ export async function nodeLogs(input) {
35
49
  result.exitCode = info.exitCode;
36
50
  return result;
37
51
  }
52
+ /** The lines of a process: the kept output, the new lines and the exit. */
53
+ async function* followLogs(input, signal) {
54
+ const clean = (line) => (input.stripAnsi ? line.replace(ANSI, "") : line);
55
+ // The start of a line that has no line end yet, for each stream
56
+ const partial = { stdout: "", stderr: "" };
57
+ for await (const item of processManager.follow(input.processId, { backlog: true, signal })) {
58
+ switch (item.type) {
59
+ case "backlog": {
60
+ const kept = input.lines !== undefined ? lastLines(item.text, input.lines) : item.text;
61
+ for (const line of splitLines(kept))
62
+ yield { type: "output", line: clean(line) };
63
+ break;
64
+ }
65
+ case "output": {
66
+ const lines = (partial[item.stream] + item.text).split("\n");
67
+ partial[item.stream] = lines.pop() ?? "";
68
+ for (const line of lines)
69
+ yield { type: item.stream, line: clean(line.endsWith("\r") ? line.slice(0, -1) : line) };
70
+ break;
71
+ }
72
+ case "dropped":
73
+ yield { type: "dropped", bytes: item.bytes };
74
+ break;
75
+ case "end": {
76
+ for (const stream of ["stdout", "stderr"]) {
77
+ if (partial[stream] !== "")
78
+ yield { type: stream, line: clean(partial[stream]) };
79
+ }
80
+ const exit = { type: "exit", status: item.info.status === "error" ? "error" : "exited" };
81
+ if (item.info.exitCode !== undefined)
82
+ exit.exitCode = item.info.exitCode;
83
+ if (item.info.signal !== undefined)
84
+ exit.signal = item.info.signal;
85
+ yield exit;
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ }
38
91
  //# sourceMappingURL=logs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/procedures/node/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,sGAAsG;AACtG,MAAM,IAAI,GAAG,4DAA4D,CAAC;AAE1E,oGAAoG;AACpG,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAoB;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,SAAS,+DAA+D,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAmB,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1F,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/procedures/node/logs.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  * - the processes end when the host ends (before, they were detached and kept running);
9
9
  * - the registry removes old exit records, and `cleanup` removes the rest.
10
10
  */
11
+ import { type FollowOptions, type ProcessFollowItem } from "@procedures/shell/command";
11
12
  import type { ProcessInfo } from "./types.js";
12
13
  /** The group of the node processes in the process registry. */
13
14
  export declare const NODE_GROUP = "node";
@@ -36,6 +37,11 @@ declare class ProcessManager {
36
37
  * The end of the output of a process (the last 64 KiB)
37
38
  */
38
39
  output(processId: string): string;
40
+ /**
41
+ * The output of a process as a stream, until the process ends or the signal aborts: `follow`
42
+ * of the process registry. A process of another group gives an empty stream.
43
+ */
44
+ follow(processId: string, options?: FollowOptions): AsyncGenerator<ProcessFollowItem, void, undefined>;
39
45
  /**
40
46
  * Get status of all or specific processes
41
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,+DAA+D;AAC/D,eAAO,MAAM,UAAU,SAAS,CAAC;AAejC,cAAM,cAAc;IAClB;;OAEG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAC3G,WAAW,CASb;IAED;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAG9C;IAED;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlF;IAED;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhC;IAED;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAK3C;IAED;;OAEG;IACH,OAAO,IAAI,MAAM,CAMhB;CACF;AAGD,eAAO,MAAM,cAAc,EAAE,cAAqC,CAAC"}
1
+ {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAa,KAAK,aAAa,EAA2B,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC3H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,+DAA+D;AAC/D,eAAO,MAAM,UAAU,SAAS,CAAC;AAejC,cAAM,cAAc;IAClB;;OAEG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAAE,GAC3G,WAAW,CASb;IAED;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAG9C;IAED;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlF;IAED;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,SAAS,CAAC,CAEzG;IAED;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAK3C;IAED;;OAEG;IACH,OAAO,IAAI,MAAM,CAMhB;CACF;AAGD,eAAO,MAAM,cAAc,EAAE,cAAqC,CAAC"}
@@ -66,6 +66,13 @@ class ProcessManager {
66
66
  output(processId) {
67
67
  return this.get(processId) ? processes.output(processId) : "";
68
68
  }
69
+ /**
70
+ * The output of a process as a stream, until the process ends or the signal aborts: `follow`
71
+ * of the process registry. A process of another group gives an empty stream.
72
+ */
73
+ follow(processId, options = {}) {
74
+ return this.get(processId) ? processes.follow(processId, options) : (async function* () { })();
75
+ }
69
76
  /**
70
77
  * Get status of all or specific processes
71
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -87,6 +87,11 @@ export interface NodeLogsInput {
87
87
  lines?: number | undefined;
88
88
  /** Remove the ANSI escape codes (colors) from the output */
89
89
  stripAnsi?: boolean | undefined;
90
+ /**
91
+ * True: the result is a stream. It gives the kept output, then each new line, until the process
92
+ * ends or the caller aborts. `lines` limits the kept output.
93
+ */
94
+ follow?: boolean | undefined;
90
95
  }
91
96
  export interface NodeLogsOutput {
92
97
  processId: string;
@@ -97,6 +102,32 @@ export interface NodeLogsOutput {
97
102
  /** The end of the output (stdout and stderr together, the last 64 KiB) */
98
103
  output: string;
99
104
  }
105
+ /** One item of `node.logs` with `follow`. */
106
+ export type NodeLogItem =
107
+ /** A line of the output that the registry kept before the call: stdout and stderr together. */
108
+ {
109
+ type: "output";
110
+ line: string;
111
+ }
112
+ /** A new line of the process, without its line end. */
113
+ | {
114
+ type: "stdout" | "stderr";
115
+ line: string;
116
+ }
117
+ /** The reader was slow, and the stream dropped this many bytes of output. */
118
+ | {
119
+ type: "dropped";
120
+ bytes: number;
121
+ }
122
+ /** The end of the process: the last item. */
123
+ | {
124
+ type: "exit";
125
+ status: "exited" | "error";
126
+ exitCode?: number | undefined;
127
+ signal?: string | undefined;
128
+ };
100
129
  export declare const NodeLogsInputSchema: z.ZodType<NodeLogsInput>;
101
- export declare const NodeLogsOutputSchema: z.ZodType<NodeLogsOutput>;
130
+ export declare const NodeLogsValueSchema: z.ZodType<NodeLogsOutput>;
131
+ /** node.logs: one result, or with follow a stream of lines and one last exit item. */
132
+ export declare const NodeLogsOutputSchema: z.ZodType<NodeLogsOutput | NodeLogItem>;
102
133
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -91,11 +91,33 @@ export const NodeLogsInputSchema = z.object({
91
91
  processId: z.string().min(1).describe("Process ID returned from node.spawn"),
92
92
  lines: z.number().int().min(1).optional().describe("Only the last lines of the output"),
93
93
  stripAnsi: z.boolean().optional().describe("Remove the ANSI escape codes (colors) from the output"),
94
+ follow: z
95
+ .boolean()
96
+ .optional()
97
+ .describe("Give a stream: the kept output, then each new line, until the process ends or the caller aborts"),
94
98
  });
95
- export const NodeLogsOutputSchema = z.looseObject({
99
+ export const NodeLogsValueSchema = z.looseObject({
96
100
  processId: z.string().describe("The id of the process"),
97
101
  status: z.enum(["running", "exited", "error"]).describe("The state of the process"),
98
102
  exitCode: z.number().optional().describe("The exit code, when the process exited"),
99
103
  output: z.string().describe("The end of the output: stdout and stderr together, the last 64 KiB"),
100
104
  });
105
+ /** node.logs: one result, or with follow a stream of lines and one last exit item. */
106
+ export const NodeLogsOutputSchema = z.union([
107
+ NodeLogsValueSchema,
108
+ z.looseObject({
109
+ type: z.enum(["output", "stdout", "stderr"]).describe("The stream of the line: output for a line that the registry kept"),
110
+ line: z.string().describe("One line of the output, without its line end"),
111
+ }),
112
+ z.looseObject({
113
+ type: z.literal("dropped").describe("A gap: the reader was slow"),
114
+ bytes: z.number().describe("The number of bytes that the stream dropped"),
115
+ }),
116
+ z.looseObject({
117
+ type: z.literal("exit").describe("The end of the process and of the stream"),
118
+ status: z.enum(["exited", "error"]).describe("The state of the process at its end"),
119
+ exitCode: z.number().optional().describe("The exit code, when the process exited"),
120
+ signal: z.string().optional().describe("The signal that ended the process"),
121
+ }),
122
+ ]);
101
123
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@procedures/node",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "description": "Node.js process procedures: run scripts, spawn and manage long-running processes and read their logs, with output caps and process-tree cleanup.",
6
6
  "keywords": [
7
7
  "node",
@@ -57,8 +57,8 @@
57
57
  "provenance": true
58
58
  },
59
59
  "dependencies": {
60
- "@procedures/client": "0.3.0",
61
- "@procedures/shell": "0.3.0",
60
+ "@procedures/client": "0.4.0",
61
+ "@procedures/shell": "0.4.0",
62
62
  "zod": "^4.6.5"
63
63
  },
64
64
  "devDependencies": {
package/src/module.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * Procedure Registration for Node.js process management
5
5
  */
6
6
 
7
- import { createProcedure, zodAdapter, defineModule, type ProcedureModule, PROCEDURE_REGISTRY, registerModules, type ProcedureRegistry } from "@procedures/client";
7
+ import { createProcedure, zodAdapter, defineModule, type ProcedureContext, type ProcedureModule, PROCEDURE_REGISTRY, registerModules, type ProcedureRegistry } from "@procedures/client";
8
8
  import { nodeRun } from "./procedures/node/run.js";
9
9
  import { nodeSpawn } from "./procedures/node/spawn.js";
10
10
  import { nodeKill } from "./procedures/node/kill.js";
@@ -26,6 +26,7 @@ import {
26
26
  type NodeStatusOutput,
27
27
  type NodeLogsInput,
28
28
  type NodeLogsOutput,
29
+ type NodeLogItem,
29
30
  NodeRunOutputSchema,
30
31
  NodeSpawnOutputSchema,
31
32
  NodeKillOutputSchema,
@@ -103,20 +104,24 @@ const nodeStatusProcedure = createProcedure()
103
104
  })
104
105
  .build();
105
106
 
106
- // node.logs (roadmap R44)
107
+ // node.logs (roadmap R44). One value, or with follow one item for each line (a stream).
107
108
  const nodeLogsProcedure = createProcedure()
108
109
  .path(["node", "logs"])
109
110
  .input(zodAdapter<NodeLogsInput>(NodeLogsInputSchema))
110
- .output(zodAdapter<NodeLogsOutput>(NodeLogsOutputSchema))
111
+ .output(zodAdapter<NodeLogsOutput | NodeLogItem>(NodeLogsOutputSchema))
111
112
  .meta({
112
- description: "The output of a process of node.spawn: the last 64 KiB of stdout and stderr",
113
+ description: "The output of a process of node.spawn: the last 64 KiB of stdout and stderr, or with follow a stream of its lines",
113
114
  args: ["processId"],
114
- shorts: { lines: "n" },
115
+ shorts: { lines: "n", follow: "f" },
115
116
  output: "json",
116
117
  // It reads the output that the process registry keeps for a process of node.spawn
117
118
  effects: { reads: ["jobs"], writes: [] },
119
+ // With follow, the stream runs as long as the process (roadmap R15)
120
+ stream: { unbounded: true },
118
121
  })
119
- .handler(async (input: NodeLogsInput): Promise<NodeLogsOutput> => nodeLogs(input))
122
+ // With follow, the promise gives a stream: invokeProcedure reads a returned async iterable as a
123
+ // stream, and the handler types of the core do not describe that case
124
+ .handler((input: NodeLogsInput, ctx: ProcedureContext) => nodeLogs(input, ctx) as unknown as Promise<NodeLogsOutput | NodeLogItem>)
120
125
  .build();
121
126
 
122
127
  /**
@@ -5,9 +5,14 @@
5
5
  * the output of each process and keeps its end: the last 64 KiB, stdout and stderr together.
6
6
  * So the procedure gives that end, also after the process ended (the registry keeps the records
7
7
  * of the last 50 ended processes). It knows only the processes of this host process.
8
+ *
9
+ * With `follow`, the procedure gives a stream: the kept output as `output` lines, then each new
10
+ * line of stdout and stderr, then one `exit` item at the end of the process. The stream ends at
11
+ * the end of the process, at an abort of the caller and when the reader stops. Each end removes
12
+ * the subscription of the stream from the process registry.
8
13
  */
9
14
 
10
- import type { NodeLogsInput, NodeLogsOutput } from "../../types.js";
15
+ import type { NodeLogItem, NodeLogsInput, NodeLogsOutput } from "../../types.js";
11
16
  import { processManager } from "../../process-manager.js";
12
17
 
13
18
  // The CSI and OSC escape sequences of terminals (colors, styles, links), as client-shell removes them
@@ -21,14 +26,27 @@ export function lastLines(text: string, count: number): string {
21
26
  return lines.slice(-count).join("\n") + (text.endsWith("\n") ? "\n" : "");
22
27
  }
23
28
 
29
+ /** The lines of a text without their line ends (LF or CRLF). A line end at the end adds no line. */
30
+ export function splitLines(text: string): string[] {
31
+ if (text === "") return [];
32
+ const lines = (text.endsWith("\n") ? text.slice(0, -1) : text).split("\n");
33
+ return lines.map((line) => (line.endsWith("\r") ? line.slice(0, -1) : line));
34
+ }
35
+
36
+ /** The context that node.logs reads: the abort of the caller. */
37
+ export interface NodeLogsContext {
38
+ signal?: AbortSignal | undefined;
39
+ }
40
+
24
41
  /**
25
- * The end of the output of a process of node.spawn
42
+ * The end of the output of a process of node.spawn, or with `follow` a stream of its lines
26
43
  */
27
- export async function nodeLogs(input: NodeLogsInput): Promise<NodeLogsOutput> {
44
+ export async function nodeLogs(input: NodeLogsInput, ctx: NodeLogsContext = {}): Promise<NodeLogsOutput | AsyncGenerator<NodeLogItem, void, undefined>> {
28
45
  const info = processManager.get(input.processId);
29
46
  if (!info) {
30
47
  throw new Error(`node.logs: no process ${input.processId}. node.status lists the processes of node.spawn on this host.`);
31
48
  }
49
+ if (input.follow) return followLogs(input, ctx.signal);
32
50
  let output = processManager.output(input.processId);
33
51
  if (input.stripAnsi) output = output.replace(ANSI, "");
34
52
  if (input.lines !== undefined) output = lastLines(output, input.lines);
@@ -36,3 +54,38 @@ export async function nodeLogs(input: NodeLogsInput): Promise<NodeLogsOutput> {
36
54
  if (info.exitCode !== undefined) result.exitCode = info.exitCode;
37
55
  return result;
38
56
  }
57
+
58
+ /** The lines of a process: the kept output, the new lines and the exit. */
59
+ async function* followLogs(input: NodeLogsInput, signal: AbortSignal | undefined): AsyncGenerator<NodeLogItem, void, undefined> {
60
+ const clean = (line: string): string => (input.stripAnsi ? line.replace(ANSI, "") : line);
61
+ // The start of a line that has no line end yet, for each stream
62
+ const partial = { stdout: "", stderr: "" };
63
+ for await (const item of processManager.follow(input.processId, { backlog: true, signal })) {
64
+ switch (item.type) {
65
+ case "backlog": {
66
+ const kept = input.lines !== undefined ? lastLines(item.text, input.lines) : item.text;
67
+ for (const line of splitLines(kept)) yield { type: "output", line: clean(line) };
68
+ break;
69
+ }
70
+ case "output": {
71
+ const lines = (partial[item.stream] + item.text).split("\n");
72
+ partial[item.stream] = lines.pop() ?? "";
73
+ for (const line of lines) yield { type: item.stream, line: clean(line.endsWith("\r") ? line.slice(0, -1) : line) };
74
+ break;
75
+ }
76
+ case "dropped":
77
+ yield { type: "dropped", bytes: item.bytes };
78
+ break;
79
+ case "end": {
80
+ for (const stream of ["stdout", "stderr"] as const) {
81
+ if (partial[stream] !== "") yield { type: stream, line: clean(partial[stream]) };
82
+ }
83
+ const exit: Extract<NodeLogItem, { type: "exit" }> = { type: "exit", status: item.info.status === "error" ? "error" : "exited" };
84
+ if (item.info.exitCode !== undefined) exit.exitCode = item.info.exitCode;
85
+ if (item.info.signal !== undefined) exit.signal = item.info.signal;
86
+ yield exit;
87
+ break;
88
+ }
89
+ }
90
+ }
91
+ }
@@ -9,7 +9,7 @@
9
9
  * - the registry removes old exit records, and `cleanup` removes the rest.
10
10
  */
11
11
 
12
- import { processes, type ManagedProcessInfo } from "@procedures/shell/command";
12
+ import { processes, type FollowOptions, type ManagedProcessInfo, type ProcessFollowItem } from "@procedures/shell/command";
13
13
  import type { ProcessInfo } from "./types.js";
14
14
 
15
15
  /** The group of the node processes in the process registry. */
@@ -76,6 +76,14 @@ class ProcessManager {
76
76
  return this.get(processId) ? processes.output(processId) : "";
77
77
  }
78
78
 
79
+ /**
80
+ * The output of a process as a stream, until the process ends or the signal aborts: `follow`
81
+ * of the process registry. A process of another group gives an empty stream.
82
+ */
83
+ follow(processId: string, options: FollowOptions = {}): AsyncGenerator<ProcessFollowItem, void, undefined> {
84
+ return this.get(processId) ? processes.follow(processId, options) : (async function* () {})();
85
+ }
86
+
79
87
  /**
80
88
  * Get status of all or specific processes
81
89
  */
package/src/types.ts CHANGED
@@ -194,6 +194,11 @@ export interface NodeLogsInput {
194
194
  lines?: number | undefined;
195
195
  /** Remove the ANSI escape codes (colors) from the output */
196
196
  stripAnsi?: boolean | undefined;
197
+ /**
198
+ * True: the result is a stream. It gives the kept output, then each new line, until the process
199
+ * ends or the caller aborts. `lines` limits the kept output.
200
+ */
201
+ follow?: boolean | undefined;
197
202
  }
198
203
 
199
204
  export interface NodeLogsOutput {
@@ -206,15 +211,49 @@ export interface NodeLogsOutput {
206
211
  output: string;
207
212
  }
208
213
 
214
+ /** One item of `node.logs` with `follow`. */
215
+ export type NodeLogItem =
216
+ /** A line of the output that the registry kept before the call: stdout and stderr together. */
217
+ | { type: "output"; line: string }
218
+ /** A new line of the process, without its line end. */
219
+ | { type: "stdout" | "stderr"; line: string }
220
+ /** The reader was slow, and the stream dropped this many bytes of output. */
221
+ | { type: "dropped"; bytes: number }
222
+ /** The end of the process: the last item. */
223
+ | { type: "exit"; status: "exited" | "error"; exitCode?: number | undefined; signal?: string | undefined };
224
+
209
225
  export const NodeLogsInputSchema: z.ZodType<NodeLogsInput> = z.object({
210
226
  processId: z.string().min(1).describe("Process ID returned from node.spawn"),
211
227
  lines: z.number().int().min(1).optional().describe("Only the last lines of the output"),
212
228
  stripAnsi: z.boolean().optional().describe("Remove the ANSI escape codes (colors) from the output"),
229
+ follow: z
230
+ .boolean()
231
+ .optional()
232
+ .describe("Give a stream: the kept output, then each new line, until the process ends or the caller aborts"),
213
233
  });
214
234
 
215
- export const NodeLogsOutputSchema: z.ZodType<NodeLogsOutput> = z.looseObject({
235
+ export const NodeLogsValueSchema: z.ZodType<NodeLogsOutput> = z.looseObject({
216
236
  processId: z.string().describe("The id of the process"),
217
237
  status: z.enum(["running", "exited", "error"]).describe("The state of the process"),
218
238
  exitCode: z.number().optional().describe("The exit code, when the process exited"),
219
239
  output: z.string().describe("The end of the output: stdout and stderr together, the last 64 KiB"),
220
240
  });
241
+
242
+ /** node.logs: one result, or with follow a stream of lines and one last exit item. */
243
+ export const NodeLogsOutputSchema: z.ZodType<NodeLogsOutput | NodeLogItem> = z.union([
244
+ NodeLogsValueSchema,
245
+ z.looseObject({
246
+ type: z.enum(["output", "stdout", "stderr"]).describe("The stream of the line: output for a line that the registry kept"),
247
+ line: z.string().describe("One line of the output, without its line end"),
248
+ }),
249
+ z.looseObject({
250
+ type: z.literal("dropped").describe("A gap: the reader was slow"),
251
+ bytes: z.number().describe("The number of bytes that the stream dropped"),
252
+ }),
253
+ z.looseObject({
254
+ type: z.literal("exit").describe("The end of the process and of the stream"),
255
+ status: z.enum(["exited", "error"]).describe("The state of the process at its end"),
256
+ exitCode: z.number().optional().describe("The exit code, when the process exited"),
257
+ signal: z.string().optional().describe("The signal that ended the process"),
258
+ }),
259
+ ]);