@stigmer/cli 3.15.0 → 3.15.2-dev.20260913223433

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 (102) hide show
  1. package/commands/internal-daemon.d.ts.map +1 -1
  2. package/commands/internal-daemon.js +2 -9
  3. package/commands/internal-daemon.js.map +1 -1
  4. package/commands/up.d.ts.map +1 -1
  5. package/commands/up.js +37 -8
  6. package/commands/up.js.map +1 -1
  7. package/local/artifact.d.ts +13 -3
  8. package/local/artifact.d.ts.map +1 -1
  9. package/local/artifact.js +31 -10
  10. package/local/artifact.js.map +1 -1
  11. package/local/daemon/components.d.ts.map +1 -1
  12. package/local/daemon/components.js +2 -0
  13. package/local/daemon/components.js.map +1 -1
  14. package/local/daemon/host.d.ts +8 -0
  15. package/local/daemon/host.d.ts.map +1 -1
  16. package/local/daemon/host.js +42 -1
  17. package/local/daemon/host.js.map +1 -1
  18. package/local/daemon/index.d.ts +3 -3
  19. package/local/daemon/index.d.ts.map +1 -1
  20. package/local/daemon/index.js +2 -2
  21. package/local/daemon/index.js.map +1 -1
  22. package/local/daemon/launch.d.ts +29 -1
  23. package/local/daemon/launch.d.ts.map +1 -1
  24. package/local/daemon/launch.js +73 -23
  25. package/local/daemon/launch.js.map +1 -1
  26. package/local/daemon/process.d.ts +16 -2
  27. package/local/daemon/process.d.ts.map +1 -1
  28. package/local/daemon/process.js +16 -2
  29. package/local/daemon/process.js.map +1 -1
  30. package/local/daemon/types.d.ts +2 -0
  31. package/local/daemon/types.d.ts.map +1 -1
  32. package/local/paths.d.ts +14 -4
  33. package/local/paths.d.ts.map +1 -1
  34. package/local/paths.js +17 -4
  35. package/local/paths.js.map +1 -1
  36. package/local/runtime/runner.d.ts +4 -0
  37. package/local/runtime/runner.d.ts.map +1 -1
  38. package/local/runtime/runner.js +10 -6
  39. package/local/runtime/runner.js.map +1 -1
  40. package/local/runtime/server.d.ts +5 -0
  41. package/local/runtime/server.d.ts.map +1 -1
  42. package/local/runtime/server.js +13 -8
  43. package/local/runtime/server.js.map +1 -1
  44. package/local/seedpack/content.d.ts +4 -0
  45. package/local/seedpack/content.d.ts.map +1 -1
  46. package/local/seedpack/content.js +11 -11
  47. package/local/seedpack/content.js.map +1 -1
  48. package/local/state/lock.d.ts +3 -2
  49. package/local/state/lock.d.ts.map +1 -1
  50. package/local/state/lock.js +23 -9
  51. package/local/state/lock.js.map +1 -1
  52. package/local/state/proc.d.ts +13 -0
  53. package/local/state/proc.d.ts.map +1 -1
  54. package/local/state/proc.js +15 -0
  55. package/local/state/proc.js.map +1 -1
  56. package/local/temporal/download.d.ts +7 -1
  57. package/local/temporal/download.d.ts.map +1 -1
  58. package/local/temporal/download.js +21 -11
  59. package/local/temporal/download.js.map +1 -1
  60. package/local/temporal/index.d.ts +3 -3
  61. package/local/temporal/index.d.ts.map +1 -1
  62. package/local/temporal/index.js +2 -2
  63. package/local/temporal/index.js.map +1 -1
  64. package/local/temporal/inspect.d.ts +10 -3
  65. package/local/temporal/inspect.d.ts.map +1 -1
  66. package/local/temporal/inspect.js +52 -13
  67. package/local/temporal/inspect.js.map +1 -1
  68. package/local/temporal/manager.d.ts +16 -4
  69. package/local/temporal/manager.d.ts.map +1 -1
  70. package/local/temporal/manager.js +19 -6
  71. package/local/temporal/manager.js.map +1 -1
  72. package/package.json +5 -5
  73. package/src/commands/internal-daemon.ts +2 -10
  74. package/src/commands/up.ts +52 -8
  75. package/src/local/artifact.test.ts +27 -1
  76. package/src/local/artifact.ts +35 -13
  77. package/src/local/daemon/components.ts +2 -0
  78. package/src/local/daemon/daemon.integration.test.ts +33 -0
  79. package/src/local/daemon/host.ts +50 -1
  80. package/src/local/daemon/index.ts +3 -3
  81. package/src/local/daemon/launch.test.ts +136 -0
  82. package/src/local/daemon/launch.ts +108 -27
  83. package/src/local/daemon/process.ts +31 -4
  84. package/src/local/daemon/supervisor.test.ts +1 -1
  85. package/src/local/daemon/types.ts +2 -0
  86. package/src/local/paths.ts +17 -4
  87. package/src/local/runtime/runner.ts +10 -6
  88. package/src/local/runtime/runtime.test.ts +15 -0
  89. package/src/local/runtime/server.test.ts +37 -0
  90. package/src/local/runtime/server.ts +17 -12
  91. package/src/local/seedpack/content.test.ts +21 -0
  92. package/src/local/seedpack/content.ts +15 -16
  93. package/src/local/state/lock.ts +24 -9
  94. package/src/local/state/proc.ts +16 -0
  95. package/src/local/state/state.test.ts +25 -1
  96. package/src/local/temporal/download.test.ts +79 -11
  97. package/src/local/temporal/download.ts +24 -11
  98. package/src/local/temporal/index.ts +11 -3
  99. package/src/local/temporal/inspect.test.ts +83 -0
  100. package/src/local/temporal/inspect.ts +60 -12
  101. package/src/local/temporal/manager.test.ts +34 -1
  102. package/src/local/temporal/manager.ts +22 -8
@@ -1 +1 @@
1
- {"version":3,"file":"internal-daemon.d.ts","sourceRoot":"","sources":["../../src/commands/internal-daemon.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS7D"}
1
+ {"version":3,"file":"internal-daemon.d.ts","sourceRoot":"","sources":["../../src/commands/internal-daemon.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS7D"}
@@ -1,22 +1,15 @@
1
1
  // `stigmer internal-daemon` (hidden) — the long-lived supervised daemon process
2
2
  // that `up` re-execs. It is not meant to be invoked directly; it runs the local
3
3
  // stack until it receives SIGTERM/SIGINT, then exits with the daemon's code.
4
+ // (`stigmer up --foreground` runs the same body in the launching process.)
4
5
  export function registerInternalDaemon(program) {
5
6
  program
6
7
  .command("internal-daemon", { hidden: true })
7
8
  .description("internal: run the supervised local-stack daemon (do not invoke directly)")
8
9
  .action(async () => {
9
- const { runInternalDaemon } = await import("../local/daemon/process.js");
10
+ const { runInternalDaemon, waitForShutdownSignal } = await import("../local/daemon/process.js");
10
11
  const code = await runInternalDaemon({ waitForShutdown: waitForShutdownSignal });
11
12
  process.exit(code);
12
13
  });
13
14
  }
14
- // Resolve when the first SIGTERM/SIGINT arrives — the daemon's shutdown trigger.
15
- function waitForShutdownSignal() {
16
- return new Promise((resolve) => {
17
- const onSignal = () => resolve();
18
- process.once("SIGTERM", onSignal);
19
- process.once("SIGINT", onSignal);
20
- });
21
- }
22
15
  //# sourceMappingURL=internal-daemon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal-daemon.js","sourceRoot":"","sources":["../../src/commands/internal-daemon.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAI7E,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC5C,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,iFAAiF;AACjF,SAAS,qBAAqB;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,OAAO,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"internal-daemon.js","sourceRoot":"","sources":["../../src/commands/internal-daemon.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAI3E,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC5C,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAChG,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBjD"}
1
+ {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BzC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBjD"}
package/commands/up.js CHANGED
@@ -1,12 +1,15 @@
1
1
  // `stigmer up [server]` — start the local Stigmer stack (managed Temporal, the
2
2
  // control-plane server, and the unified runner) as a supervised background
3
- // daemon. `up server` brings up only the control plane.
3
+ // daemon, or with `--foreground` as this very process. `up server` brings up
4
+ // only the control plane.
4
5
  //
5
6
  // Thin handler: parse flags, delegate to the local daemon launcher, render the
6
7
  // outcome. The launcher (and the heavy resolvers it pulls in) load lazily so
7
8
  // `--help` stays fast (DD-001).
8
9
  import { homedir } from "node:os";
9
10
  import { join } from "node:path";
11
+ import { CliExitError } from "../errors/cli-exit-error.js";
12
+ import { ExitCode } from "../errors/exit-codes.js";
10
13
  import { CommandResult, renderResult } from "../output/index.js";
11
14
  import { HEALTH_STATE_FILE, SERVER_PORT } from "../local/constants.js";
12
15
  import { addResultFlags, resultFormat } from "./shared.js";
@@ -14,26 +17,51 @@ import { addResultFlags, resultFormat } from "./shared.js";
14
17
  // flag suppresses probing/reporting it, not the serving itself (one
15
18
  // process, one origin — there is no separate console to not-start).
16
19
  const NO_WEB_HELP = "don't report the web console URL";
20
+ // Foreground is the shape a supervisor wants — a container entrypoint, a
21
+ // systemd unit, a tmux pane: one process to watch, signals delivered to it,
22
+ // the stack's output on its stdio — instead of a detached daemon to poll.
23
+ const FOREGROUND_HELP = "run the stack in this process until Ctrl-C or SIGTERM (for containers and service managers)";
17
24
  export function registerUp(program) {
18
25
  const up = program
19
26
  .command("up")
20
27
  .description("start the local Stigmer stack (server, runner, Temporal)")
21
28
  .option("--server-only", "start only the control plane (no runners)")
22
29
  .option("--no-web", NO_WEB_HELP)
23
- .action((options) => runUp({ serverOnly: options.serverOnly === true, noWeb: options.web === false }, options));
30
+ .option("--foreground", FOREGROUND_HELP)
31
+ .action((options) => runUp({ serverOnly: options.serverOnly === true, noWeb: options.web === false, foreground: options.foreground === true }, options));
24
32
  addResultFlags(up);
25
33
  const server = up
26
34
  .command("server")
27
35
  .description("start only the control plane (no runners)")
28
36
  .option("--no-web", NO_WEB_HELP)
29
- .action((options) => runUp({ serverOnly: true, noWeb: options.web === false }, options));
37
+ .option("--foreground", FOREGROUND_HELP)
38
+ .action((options) => runUp({ serverOnly: true, noWeb: options.web === false, foreground: options.foreground === true }, options));
30
39
  addResultFlags(server);
31
40
  }
32
- async function runUp(opts, flags) {
41
+ async function runUp(run, flags) {
33
42
  process.stderr.write("Starting Stigmer local stack… (first run may take a moment)\n");
34
- const { up } = await import("../local/daemon/launch.js");
35
- await up(opts);
36
- const result = CommandResult.success(opts.serverOnly ? "Stigmer control plane is up" : "Stigmer local stack is up");
43
+ const launch = await import("../local/daemon/launch.js");
44
+ if (!run.foreground) {
45
+ await launch.up(run);
46
+ await renderUpCard(run, flags);
47
+ return;
48
+ }
49
+ // The card renders when the stack is serving and seeded — the moment the
50
+ // detached shape would have returned — and the process then stays up,
51
+ // mirroring the server's and runner's output, until a shutdown signal.
52
+ const code = await launch.upForeground(run, homedir(), {
53
+ onReady: () => renderUpCard(run, flags),
54
+ });
55
+ if (code !== 0) {
56
+ // The daemon body has already logged which component failed and why.
57
+ const { logDir } = await import("../local/paths.js");
58
+ throw new CliExitError("the local stack did not start", ExitCode.General, [
59
+ `Check the component logs under ${logDir(homedir())}.`,
60
+ ]);
61
+ }
62
+ }
63
+ async function renderUpCard(run, flags) {
64
+ const result = CommandResult.success(run.serverOnly ? "Stigmer control plane is up" : "Stigmer local stack is up");
37
65
  const section = result.addSection("Endpoints");
38
66
  section.field("server", `http://localhost:${SERVER_PORT}`);
39
67
  if (await consoleReported()) {
@@ -42,7 +70,8 @@ async function runUp(opts, flags) {
42
70
  // server without one must not advertise a dead URL.
43
71
  section.field("console", `http://localhost:${SERVER_PORT}`);
44
72
  }
45
- result.hint("Check status with: stigmer status").hint("Stop it with: stigmer down");
73
+ result.hint("Check status with: stigmer status");
74
+ result.hint(run.foreground ? "Stop it with: Ctrl-C (or stigmer down from another shell)" : "Stop it with: stigmer down");
46
75
  renderResult(result, resultFormat(flags));
47
76
  }
48
77
  /** Whether the daemon recorded the web console as running (its own probe). */
@@ -1 +1 @@
1
- {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,gCAAgC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAoB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3D,wEAAwE;AACxE,oEAAoE;AACpE,oEAAoE;AACpE,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAEvD,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,EAAE,GAAG,OAAO;SACf,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAC3B,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,EAAE,OAAO,CAAC,CAC1F,CAAC;IACJ,cAAc,CAAC,EAAE,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACpG,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAA6C,EAAE,KAAkB;IACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACtF,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAEf,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACpH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;QAC5B,uEAAuE;QACvE,sEAAsE;QACtE,oDAAoD;QACpD,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACvF,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,eAAe;IAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5E,OAAO,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,11 @@ export interface TarballBinarySource {
6
6
  /** URL of the `.tar.gz` archive. */
7
7
  url: string;
8
8
  /**
9
- * URL of a `shasum -a 256`-format checksum file for {@link url}. When set, the
10
- * downloaded archive's sha256 is verified against it before extraction and any
11
- * mismatch aborts the install.
9
+ * URL of a `shasum -a 256`-format checksum file covering {@link url}. The
10
+ * file may list many assets (a release's `checksums.txt`); the line whose
11
+ * filename is the archive's basename is the one that counts. When set, the
12
+ * downloaded archive's sha256 is verified against it before extraction and
13
+ * any mismatch — or a file with no entry for the archive — aborts the install.
12
14
  */
13
15
  checksumUrl?: string;
14
16
  /** Basename of the entry to extract from the archive. */
@@ -29,6 +31,14 @@ export interface TarballBinarySource {
29
31
  export declare function fetchTarballBinary(src: TarballBinarySource): Promise<void>;
30
32
  /** Lowercase hex sha256 of `bytes`. */
31
33
  export declare function sha256Hex(bytes: Uint8Array): string;
34
+ /**
35
+ * The sha256 a `shasum`/`sha256sum`-format file records for `filename`, lowercase
36
+ * hex, or "" when the file has no entry for it. Each line is "<hex> <filename>";
37
+ * `sha256sum -b` writes the filename with a leading "*" (binary mode), which is
38
+ * not part of the name. A release-wide file lists every asset, so the match is
39
+ * by filename, never by position.
40
+ */
41
+ export declare function parseShasum(content: string, filename: string): string;
32
42
  /**
33
43
  * Extract a single regular-file entry whose basename matches `name` from an
34
44
  * (uncompressed) tar buffer. Minimal POSIX/ustar reader: 512-byte header blocks,
@@ -1 +1 @@
1
- {"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/local/artifact.ts"],"names":[],"mappings":"AAiBA,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAS9D;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhF;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEnD;AA8BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAoBhF"}
1
+ {"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/local/artifact.ts"],"names":[],"mappings":"AAkBA,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAS9D;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhF;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEnD;AAyBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOrE;AASD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAoBhF"}
package/local/artifact.js CHANGED
@@ -2,11 +2,12 @@
2
2
  // `.tar.gz`: release platform/arch mapping, a fetch + gunzip + minimal tar
3
3
  // reader, optional sha256 verification, and an executable write.
4
4
  //
5
- // Both on-demand downloaders — the Temporal CLI (`temporal/download.ts`) and the
6
- // `stigmer-server` control plane (`runtime/server.ts`) — build on this, so the
7
- // fetch/extract contract lives in exactly one place. The tar reader is a tiny
8
- // POSIX/ustar implementation: no native `tar` dependency, which keeps the base
9
- // install lean (DD-002).
5
+ // The Temporal CLI downloader (`temporal/download.ts`) builds on this, and any
6
+ // future release-binary downloader should too, so the fetch/verify/extract
7
+ // contract lives in exactly one place. (The `stigmer-server` Go binary was its
8
+ // second consumer until the server became an npm artifact.) The tar reader is a
9
+ // tiny POSIX/ustar implementation: no native `tar` dependency, which keeps the
10
+ // base install lean (DD-002).
10
11
  import { createHash } from "node:crypto";
11
12
  import { chmodSync, mkdirSync, writeFileSync } from "node:fs";
12
13
  import { dirname } from "node:path";
@@ -45,11 +46,12 @@ export async function fetchTarballBinary(src) {
45
46
  const doFetch = src.fetchImpl ?? fetch;
46
47
  const archive = await fetchBytes(doFetch, src.url, src.label);
47
48
  if (src.checksumUrl !== undefined) {
48
- const expected = parseShasum(await fetchText(doFetch, src.checksumUrl, `${src.label} checksum`));
49
+ const archiveName = archiveBasename(src.url);
50
+ const expected = parseShasum(await fetchText(doFetch, src.checksumUrl, `${src.label} checksum`), archiveName);
49
51
  const actual = sha256Hex(archive);
50
52
  if (expected === "" || expected !== actual) {
51
53
  throw new CliExitError(`${src.label} checksum mismatch — refusing to use the download`, ExitCode.General, [
52
- `expected: ${expected || "(unparseable)"}`,
54
+ `expected: ${expected || `(no entry for ${archiveName} in ${src.checksumUrl})`}`,
53
55
  `actual: ${actual}`,
54
56
  `archive: ${src.url}`,
55
57
  ]);
@@ -91,9 +93,28 @@ async function doFetchOrThrow(doFetch, url, label) {
91
93
  }
92
94
  return res;
93
95
  }
94
- // `shasum`/`sha256sum` output is "<hex> <filename>"; take the first token.
95
- function parseShasum(content) {
96
- return (content.trim().split(/\s+/)[0] ?? "").toLowerCase();
96
+ /**
97
+ * The sha256 a `shasum`/`sha256sum`-format file records for `filename`, lowercase
98
+ * hex, or "" when the file has no entry for it. Each line is "<hex> <filename>";
99
+ * `sha256sum -b` writes the filename with a leading "*" (binary mode), which is
100
+ * not part of the name. A release-wide file lists every asset, so the match is
101
+ * by filename, never by position.
102
+ */
103
+ export function parseShasum(content, filename) {
104
+ for (const line of content.split("\n")) {
105
+ const [hex, name] = line.trim().split(/\s+/, 2);
106
+ if (hex === undefined || name === undefined)
107
+ continue;
108
+ if (name.replace(/^\*/, "") === filename)
109
+ return hex.toLowerCase();
110
+ }
111
+ return "";
112
+ }
113
+ // The archive's basename as the checksum file names it: the last path segment
114
+ // of the URL, with any query string already excluded by URL parsing.
115
+ function archiveBasename(url) {
116
+ const segments = new URL(url).pathname.split("/");
117
+ return segments[segments.length - 1] ?? "";
97
118
  }
98
119
  /**
99
120
  * Extract a single regular-file entry whose basename matches `name` from an
@@ -1 +1 @@
1
- {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/local/artifact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/local/artifact.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAK/D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAwB7G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CA0B7G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,EAAE,CAqC5G"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAK/D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAwB7G;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CA0B7G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,EAAE,CAuC5G"}
@@ -92,6 +92,7 @@ export function buildComponents(config, base = process.env) {
92
92
  // The server is `node <entry>` — the runner's launch shape, one child
93
93
  // contract for both components.
94
94
  resolve: () => ({
95
+ name: "stigmer-server",
95
96
  command: config.server.nodeBin,
96
97
  args: [config.server.entryPath],
97
98
  env: buildServerEnv(config, base),
@@ -109,6 +110,7 @@ export function buildComponents(config, base = process.env) {
109
110
  pidFile: join(config.dataDir, RUNNER_PID_FILE),
110
111
  critical: false,
111
112
  resolve: () => ({
113
+ name: "runner",
112
114
  command: runner.nodeBin,
113
115
  args: [runner.entryPath],
114
116
  cwd: join(config.dataDir, "workspace"),
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/local/daemon/components.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  import type { ChildHandle, Clock, ProcessHost, SpawnRequest } from "./types.js";
2
+ /** Receives one complete output line from a child, with the component that wrote it. */
3
+ export type OutputMirror = (component: string, line: string) => void;
4
+ export interface NodeProcessHostOptions {
5
+ mirror?: OutputMirror;
6
+ }
2
7
  export declare class NodeProcessHost implements ProcessHost {
8
+ private readonly mirror;
9
+ constructor(options?: NodeProcessHostOptions);
3
10
  spawn(request: SpawnRequest): ChildHandle;
11
+ private lineMirror;
4
12
  }
5
13
  /** Real wall-clock implementation of Clock. */
6
14
  export declare const systemClock: Clock;
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/host.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAY,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F,qBAAa,eAAgB,YAAW,WAAW;IACjD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;CAwD1C;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,EAAE,KAGzB,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/host.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAY,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAEtC,OAAO,GAAE,sBAA2B;IAIhD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAuEzC,OAAO,CAAC,UAAU;CAenB;AAED,+CAA+C;AAC/C,eAAO,MAAM,WAAW,EAAE,KAGzB,CAAC"}
@@ -7,10 +7,20 @@
7
7
  // which is what lets `status` report "runner actually polling" instead of mere
8
8
  // liveness. Logs survive normally because the daemon outlives its children; an
9
9
  // abnormal daemon death is handled by orphan cleanup on the next `up`.
10
+ //
11
+ // An optional mirror receives every complete line a child writes, tagged with
12
+ // the component's name. The foreground launcher (`stigmer up --foreground`)
13
+ // uses it to show the stack's output in the terminal — or in `docker logs` —
14
+ // while the log files keep receiving the same bytes. The detached daemon
15
+ // installs no mirror: its own stdout is already redirected to daemon.log.
10
16
  import { spawn } from "node:child_process";
11
17
  import { createWriteStream } from "node:fs";
12
18
  import { killProcessGroup } from "../state/proc.js";
13
19
  export class NodeProcessHost {
20
+ mirror;
21
+ constructor(options = {}) {
22
+ this.mirror = options.mirror;
23
+ }
14
24
  spawn(request) {
15
25
  const out = createWriteStream(request.logFile, { flags: "a" });
16
26
  const child = spawn(request.command, request.args, {
@@ -26,8 +36,13 @@ export class NodeProcessHost {
26
36
  // Keep a small rolling tail so a marker split across chunks is still found.
27
37
  let tail = "";
28
38
  const marker = request.readinessMarker;
39
+ // One line assembler per stream: a chunk can end mid-line, and the two
40
+ // streams interleave, so each keeps its own partial line.
41
+ const mirrorStdout = this.lineMirror(request.name);
42
+ const mirrorStderr = this.lineMirror(request.name);
29
43
  child.stdout?.on("data", (chunk) => {
30
44
  out.write(chunk);
45
+ mirrorStdout(chunk);
31
46
  if (marker !== undefined && !ready) {
32
47
  tail = (tail + chunk.toString("utf8")).slice(-Math.max(marker.length * 2, 256));
33
48
  if (tail.includes(marker)) {
@@ -36,9 +51,14 @@ export class NodeProcessHost {
36
51
  }
37
52
  }
38
53
  });
39
- child.stderr?.on("data", (chunk) => out.write(chunk));
54
+ child.stderr?.on("data", (chunk) => {
55
+ out.write(chunk);
56
+ mirrorStderr(chunk);
57
+ });
40
58
  child.on("exit", (code, signal) => {
41
59
  exited = true;
60
+ mirrorStdout(null);
61
+ mirrorStderr(null);
42
62
  out.end();
43
63
  exitCb?.({ code, signal });
44
64
  });
@@ -65,6 +85,27 @@ export class NodeProcessHost {
65
85
  },
66
86
  };
67
87
  }
88
+ // Assemble complete lines from a byte stream and hand each to the mirror. A
89
+ // `null` chunk flushes the trailing partial line at exit. Without a mirror
90
+ // this is a no-op closure, so the hot path pays nothing in the detached daemon.
91
+ lineMirror(component) {
92
+ const mirror = this.mirror;
93
+ if (mirror === undefined)
94
+ return () => { };
95
+ let partial = "";
96
+ return (chunk) => {
97
+ if (chunk === null) {
98
+ if (partial !== "")
99
+ mirror(component, partial);
100
+ partial = "";
101
+ return;
102
+ }
103
+ const lines = (partial + chunk.toString("utf8")).split("\n");
104
+ partial = lines.pop() ?? "";
105
+ for (const line of lines)
106
+ mirror(component, line);
107
+ };
108
+ }
68
109
  }
69
110
  /** Real wall-clock implementation of Clock. */
70
111
  export const systemClock = {
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/local/daemon/host.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,uEAAuE;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,OAAqB;QACzB,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;YACjD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,MAAM,GAAsC,IAAI,CAAC;QACrD,IAAI,OAAO,GAAwB,IAAI,CAAC;QACxC,IAAI,KAAK,GAAG,KAAK,CAAC;QAElB,4EAA4E;QAC5E,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;QACvC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAChF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,KAAK,GAAG,IAAI,CAAC;oBACb,OAAO,EAAE,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,MAAM,GAAG,IAAI,CAAC;YACd,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,GAAG,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5B,OAAO;YACL,GAAG;YACH,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;YACvB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;gBACd,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,KAAK;oBAAE,EAAE,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,GAAG,GAAG,CAAC;oBAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACrB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;CACjE,CAAC"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/local/daemon/host.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  export { buildComponents, buildRunnerEnv, buildServerEnv } from "./components.js";
2
2
  export { type DaemonConfig, type DaemonEnvInputs, DaemonEnvVar, buildDaemonEnv, readDaemonConfig } from "./env.js";
3
- export { NodeProcessHost, systemClock } from "./host.js";
4
- export { down, isRunning, type UpOptions, up } from "./launch.js";
5
- export { type InternalDaemonDeps, type TemporalControl, runInternalDaemon } from "./process.js";
3
+ export { NodeProcessHost, type NodeProcessHostOptions, type OutputMirror, systemClock } from "./host.js";
4
+ export { down, isRunning, type UpForegroundDeps, type UpOptions, up, upForeground } from "./launch.js";
5
+ export { type InternalDaemonDeps, type TemporalControl, runInternalDaemon, waitForShutdownSignal } from "./process.js";
6
6
  export { HEALTH_CHECK_INTERVAL_MS, MAX_RESTARTS, MAX_UNHEALTHY_CHECKS, ProcessSupervisor, RAPID_CRASH_WINDOW_MS, SETTLE_DELAY_MS, type StartResult, type SupervisorDeps, } from "./supervisor.js";
7
7
  export type { ChildHandle, Clock, ComponentSpec, ExitInfo, ProcessHost, ReadinessGate, SpawnRequest } from "./types.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACvH,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -2,7 +2,7 @@
2
2
  export { buildComponents, buildRunnerEnv, buildServerEnv } from "./components.js";
3
3
  export { DaemonEnvVar, buildDaemonEnv, readDaemonConfig } from "./env.js";
4
4
  export { NodeProcessHost, systemClock } from "./host.js";
5
- export { down, isRunning, up } from "./launch.js";
6
- export { runInternalDaemon } from "./process.js";
5
+ export { down, isRunning, up, upForeground } from "./launch.js";
6
+ export { runInternalDaemon, waitForShutdownSignal } from "./process.js";
7
7
  export { HEALTH_CHECK_INTERVAL_MS, MAX_RESTARTS, MAX_UNHEALTHY_CHECKS, ProcessSupervisor, RAPID_CRASH_WINDOW_MS, SETTLE_DELAY_MS, } from "./supervisor.js";
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/local/daemon/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAA2C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAkB,EAAE,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAiD,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAGhB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/local/daemon/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAA2C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnH,OAAO,EAAE,eAAe,EAAkD,WAAW,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAyC,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAiD,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACvH,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAGhB,MAAM,iBAAiB,CAAC"}
@@ -1,11 +1,39 @@
1
+ import { type OutputMirror } from "./host.js";
2
+ import { type InternalDaemonDeps } from "./process.js";
1
3
  export interface UpOptions {
2
4
  serverOnly?: boolean;
3
5
  noWeb?: boolean;
4
6
  }
5
7
  /** Start the local stack in the background. Throws on any startup failure. */
6
8
  export declare function up(options?: UpOptions, home?: string): Promise<void>;
9
+ /** Seams of the foreground launcher, injectable for tests. */
10
+ export interface UpForegroundDeps {
11
+ /** The daemon body (default: the real one). */
12
+ runDaemon?: (deps: InternalDaemonDeps) => Promise<number>;
13
+ /** Resolves when the stack should shut down (default: the first SIGTERM/SIGINT). */
14
+ waitForShutdown?: () => Promise<void>;
15
+ /** Post-readiness bootstrap (default: the best-effort seedpack apply). */
16
+ bootstrap?: (home: string) => Promise<void>;
17
+ /** Receives each line the server and runner write (default: a `[component]`-prefixed stdout mirror). */
18
+ mirror?: OutputMirror;
19
+ /** Invoked once the stack is serving and seeded — the moment a detached `up` would have returned. */
20
+ onReady?: () => void | Promise<void>;
21
+ }
22
+ /**
23
+ * Start the local stack in THIS process and run it until shutdown is requested.
24
+ * Resolves to the daemon's exit code: 0 after a clean shutdown, 1 when a
25
+ * critical component failed to start (the daemon has already logged why).
26
+ *
27
+ * The same resolution, the same daemon body and the same on-disk state as
28
+ * `up`, so `stigmer status` and `stigmer down` from another shell see an
29
+ * ordinary daemon whose PID happens to be ours. The children receive the very
30
+ * environment a detached daemon would have inherited, and what a detached `up`
31
+ * does once the server answers — the seedpack, the startup record — happens in
32
+ * `onStarted`, at the same point in the stack's life.
33
+ */
34
+ export declare function upForeground(options?: UpOptions, home?: string, deps?: UpForegroundDeps): Promise<number>;
7
35
  /** Stop the local stack. Returns false if nothing was running. */
8
36
  export declare function down(home?: string): Promise<boolean>;
9
- /** Whether the daemon is running: live PID, else a server-port fallback. */
37
+ /** Whether the daemon is running: a live peer's PID, else a server-port fallback. */
10
38
  export declare function isRunning(home?: string): Promise<boolean>;
11
39
  //# sourceMappingURL=launch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"AAsCA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,8EAA8E;AAC9E,wBAAsB,EAAE,CAAC,OAAO,GAAE,SAAc,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzF;AAsCD,kEAAkE;AAClE,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCrE;AAED,4EAA4E;AAC5E,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1E"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../src/local/daemon/launch.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,KAAK,kBAAkB,EAA4C,MAAM,cAAc,CAAC;AAUjG,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAUD,8EAA8E;AAC9E,wBAAsB,EAAE,CAAC,OAAO,GAAE,SAAc,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzF;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,wGAAwG;IACxG,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,qGAAqG;IACrG,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,OAAO,GAAE,SAAc,EACvB,IAAI,GAAE,MAAkB,EACxB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAgBjB;AA6FD,kEAAkE;AAClE,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCrE;AAED,qFAAqF;AACrF,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1E"}