@justfortytwo/installer 1.0.0-5 → 1.0.0-6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,8 +12,14 @@ assistant built on Claude Code. One package ships two bins:
12
12
  npm install @justfortytwo/installer # in your project (or a fresh directory)
13
13
  npx create-fortytwo init # capture your details, install the engine,
14
14
  # and scaffold the persona
15
+ npx fortytwo start # run fortytwo (foreground; Ctrl+C stops it)
16
+ npx fortytwo pair # in a second terminal: connect Telegram
15
17
  ```
16
18
 
19
+ (Drop the `npx` if the `fortytwo` bin is on your `PATH`.) `pair` prints a code;
20
+ send `/login <code>` to your bot from the chat you want to connect. Until then
21
+ the bot ignores everyone, so it is safe to run `start` before any chat is paired.
22
+
17
23
  You only install **this** package — `init` installs the engine packages it needs
18
24
  on demand (`@justfortytwo/gate`, `/memory`, `/persona`, `/telegram`, `/scheduler`).
19
25
  During the 1.0 pre-release, `/telegram`, `/scheduler` and `/persona` are pinned
@@ -52,8 +58,11 @@ gitignored `.fortytwo/identity.json`; neither is ever committed.
52
58
 
53
59
  | Verb | What it does |
54
60
  |------------|--------------|
61
+ | `start` | Run fortytwo in the foreground: load the project `.env` (the shell/container env wins over it), start every installed and configured service (the Telegram bridge needs `TELEGRAM_BOT_TOKEN`; the scheduler daemon needs nothing), prefix and forward their logs, and stop them all on Ctrl+C/SIGTERM. If a service exits, the others are stopped and `start` exits non-zero. It never daemonizes or restarts anything — see [Running as a service](#running-as-a-service). |
62
+ | `status` | Show whether fortytwo, the Telegram bridge and the scheduler are running, and whether memory is configured. Exits 0 when `fortytwo start` is running, 3 when not (usable as a health check). |
63
+ | `stop` | Stop the `fortytwo start` running for this project. It signals only the process recorded in `.fortytwo/runtime.json`, and only while that record's heartbeat is fresh; it never looks for processes by name. |
55
64
  | `init` | Install any missing engine packages, then capture your assistant's name + owner details (interactive, or via flags/env for CI). Writes `.fortytwo/identity.json`, secrets + `ALLOWED_CHAT_IDS` to `.env`, wires `.mcp.json`, renders the persona, provisions local infra (pulls the embedder model, migrates the memory DB), and records the installed version set. |
56
- | `pair` | Issue a one-time `/login` pairing code, persisted to the bridge's bindings db so the separately-running bridge can redeem it (the dynamic counterpart to the static `ALLOWED_CHAT_IDS` allowlist). |
65
+ | `pair` | Issue a one-time `/login` pairing code, persisted to the bridge's bindings db so the running bridge can redeem it (the dynamic counterpart to the static `ALLOWED_CHAT_IDS` allowlist). Refuses, and tells you to run `fortytwo start`, when Telegram isn't running; `--force` issues a code anyway (for a bridge you run yourself). |
57
66
  | `doctor` | Health-check the engine: assert the gate's `POLICY_SCHEMA_VERSION` and memory's `MEMORY_TOOL_CONTRACT_VERSION` match what this CLI expects, confirm the memory DB is migrated, cross-check installed sibling versions against the declared compatibility ranges, and check the embedder model is pulled (warn-only). |
58
67
  | `update` | Resolve the latest in-range version of each **installed** engine package, install it, rotate the rollback baseline, then run `doctor` to verify. `--dry-run` reports the resolved set without installing. |
59
68
  | `rollback` | Re-install the previous version set recorded before the last `update`, then run `doctor`. Manual by design — never auto-triggered, so you can inspect a bad upgrade first. |
@@ -63,11 +72,57 @@ gitignored `.fortytwo/identity.json`; neither is ever committed.
63
72
 
64
73
  Run `fortytwo <verb> --help` for verb-specific options.
65
74
 
66
- > **Status:** `init`, `pair`, `doctor`, `forget`, `unbind`, `update`, and
67
- > `rollback` are functional — `update` resolves latest-in-range from npm,
75
+ > **Status:** `init`, `start`, `status`, `stop`, `pair`, `doctor`, `forget`,
76
+ > `unbind`, `update`, and `rollback` are functional — `update` resolves latest-in-range from npm,
68
77
  > installs, rotates the rollback ledger, and post-verifies with `doctor`;
69
78
  > `rollback` restores the recorded previous set. `enrich` is still a stub.
70
79
 
80
+ ## Running as a service
81
+
82
+ `fortytwo start` stays in the foreground on purpose, so the thing that runs it
83
+ owns restarts and logs. Use it directly as the service command:
84
+
85
+ ```yaml
86
+ # docker-compose.yml (excerpt)
87
+ services:
88
+ fortytwo:
89
+ command: ["fortytwo", "start"]
90
+ working_dir: /workspace # the project init was run in
91
+ init: true # reap processes the bridge's Claude sessions leave
92
+ restart: unless-stopped
93
+ ```
94
+
95
+ ```ini
96
+ # systemd unit (excerpt)
97
+ [Service]
98
+ WorkingDirectory=/path/to/project
99
+ ExecStart=/usr/bin/env npx fortytwo start
100
+ Restart=on-failure
101
+ ```
102
+
103
+ On SIGTERM it stops its services (SIGKILL after 10 s) and exits 0; if a service
104
+ dies on its own, it stops the rest and exits non-zero, so `restart` policies
105
+ kick in. Use `docker compose stop` / `systemctl stop` there rather than
106
+ `fortytwo stop`.
107
+
108
+ **Environment precedence** for the services: the process env (shell, container,
109
+ systemd `Environment=`) > the project `.env` > defaults. `FORTYTWO_ROOT`
110
+ defaults to the project directory. You never need to `source .env` yourself.
111
+
112
+ ### Advanced: running a service by hand
113
+
114
+ For development and debugging, each service still ships its own bin. They do not
115
+ load `.env`, so export it and `FORTYTWO_ROOT` yourself:
116
+
117
+ ```sh
118
+ set -a; . ./.env; set +a
119
+ FORTYTWO_ROOT=$PWD npx fortytwo-telegram-bridge # Telegram bridge only
120
+ npx fortytwo-scheduler # scheduler daemon only
121
+ ```
122
+
123
+ `fortytwo status` won't show a hand-run bridge, and `fortytwo pair` needs
124
+ `--force` to issue a code for it.
125
+
71
126
  ## Update safety
72
127
 
73
128
  Distribution follows a **semver-ranges, latest-compatible** policy — there is no
@@ -86,6 +86,8 @@ export declare function askMissingAnswers(fields: ManifestField[], missing: stri
86
86
  export declare function collectChannelSecrets(existing: Record<string, string>, ask: (prompt: string) => Promise<string>): Promise<Record<string, string>>;
87
87
  /** The value of `key` in .env content (last assignment wins; surrounding quotes stripped), or undefined. */
88
88
  export declare function readEnvValue(content: string, key: string): string | undefined;
89
+ /** All `KEY=value` assignments in .env content (last wins; surrounding quotes stripped; other lines ignored). */
90
+ export declare function parseEnvContent(content: string): Record<string, string>;
89
91
  /**
90
92
  * A runtime setting for a command run inside the project: the shell env wins,
91
93
  * else the value `init` saved in `<root>/.env`. The CLI never loads .env into
@@ -111,5 +113,15 @@ export declare function resolveOllamaBaseUrl(opts: {
111
113
  saved?: string;
112
114
  ask?: (prompt: string) => Promise<string>;
113
115
  }): Promise<string>;
116
+ /**
117
+ * The closing "what now" lines. Points at the user-facing lifecycle
118
+ * (`fortytwo start`, `fortytwo pair`), never at the internal service bins.
119
+ * Telegram is optional: its bridge only starts with TELEGRAM_BOT_TOKEN, so say
120
+ * so here rather than let `start` skip it silently.
121
+ */
122
+ export declare function nextSteps(o: {
123
+ hasBotToken: boolean;
124
+ allowedChatIds?: string;
125
+ }): string[];
114
126
  export declare function runInit(argv: string[]): Promise<number>;
115
127
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -354,13 +354,17 @@ const isHttpUrl = (v) => {
354
354
  };
355
355
  /** The value of `key` in .env content (last assignment wins; surrounding quotes stripped), or undefined. */
356
356
  export function readEnvValue(content, key) {
357
- let value;
357
+ return parseEnvContent(content)[key] || undefined;
358
+ }
359
+ /** All `KEY=value` assignments in .env content (last wins; surrounding quotes stripped; other lines ignored). */
360
+ export function parseEnvContent(content) {
361
+ const vars = {};
358
362
  for (const line of content.split(/\r?\n/)) {
359
363
  const m = line.match(/^([A-Z0-9_]+)=(.*)$/);
360
- if (m && m[1] === key)
361
- value = m[2].trim().replace(/^(['"])(.*)\1$/, '$2');
364
+ if (m)
365
+ vars[m[1]] = m[2].trim().replace(/^(['"])(.*)\1$/, '$2');
362
366
  }
363
- return value || undefined;
367
+ return vars;
364
368
  }
365
369
  /**
366
370
  * A runtime setting for a command run inside the project: the shell env wins,
@@ -403,6 +407,26 @@ export async function resolveOllamaBaseUrl(opts) {
403
407
  }
404
408
  throw new Error('init: no valid Ollama base URL given (expected http(s)://host:port)');
405
409
  }
410
+ /**
411
+ * The closing "what now" lines. Points at the user-facing lifecycle
412
+ * (`fortytwo start`, `fortytwo pair`), never at the internal service bins.
413
+ * Telegram is optional: its bridge only starts with TELEGRAM_BOT_TOKEN, so say
414
+ * so here rather than let `start` skip it silently.
415
+ */
416
+ export function nextSteps(o) {
417
+ const lines = ['', 'Fortytwo is ready.', '', 'Start it with:', ' fortytwo start', ''];
418
+ if (!o.hasBotToken) {
419
+ lines.push('To use Telegram, first set TELEGRAM_BOT_TOKEN in .env (create a bot with @BotFather).');
420
+ }
421
+ if (o.allowedChatIds) {
422
+ lines.push(`Telegram chat(s) ${o.allowedChatIds} are already authorized. To connect another, with fortytwo running:`);
423
+ }
424
+ else {
425
+ lines.push('Then connect Telegram with:');
426
+ }
427
+ lines.push(' fortytwo pair');
428
+ return lines;
429
+ }
406
430
  export async function runInit(argv) {
407
431
  const root = process.cwd();
408
432
  const opts = parseInitArgs(argv);
@@ -480,28 +504,10 @@ export async function runInit(argv) {
480
504
  for (const n of provisionNotes)
481
505
  out.write(` ${n}\n`);
482
506
  out.write(`✓ recorded ${pins.length} installed engine package(s)\n`);
483
- // Telegram is an OPTIONAL channel; init only wires its secrets into .env when
484
- // you pass them (--telegram-bot-token / --allowed-chat-ids, or the matching env
485
- // vars). The bridge REFUSES TO START without TELEGRAM_BOT_TOKEN, so surface that
486
- // requirement here rather than letting the bridge fail on first launch.
487
- const next = ['\nNext — to use the Telegram channel (optional):'];
488
- if (!opts.secrets.TELEGRAM_BOT_TOKEN) {
489
- next.push(" • set TELEGRAM_BOT_TOKEN in .env — create a bot with @BotFather (the bridge won't start without it)");
490
- }
491
- next.push(' • start the channel bridge');
492
- if (opts.secrets.ALLOWED_CHAT_IDS) {
493
- next.push(` • ${opts.secrets.ALLOWED_CHAT_IDS} is already authorized — add more chats with \`fortytwo pair\` → \`/login <code>\``);
494
- }
495
- else {
496
- next.push(' • authorize a chat: run `fortytwo pair` and send `/login <code>`, or set ALLOWED_CHAT_IDS in .env');
497
- }
498
- // The scheduler is now part of the engine (installed above), but — like the
499
- // bridge — it's a long-running process the operator starts, not a supervised
500
- // service. Surface how to run it; doctor reports its liveness via the heartbeat.
501
- next.push('\nNext — to run scheduled / proactive jobs (briefings, sweeps, reminders):');
502
- next.push(' • start the scheduler daemon: `fortytwo-scheduler` under a restart loop (see @justfortytwo/scheduler)');
503
- next.push(' • it seeds the recurring jobs on first boot; `fortytwo doctor` reports whether it is running');
504
- out.write(next.join('\n') + '\n');
507
+ out.write(nextSteps({
508
+ hasBotToken: !!opts.secrets.TELEGRAM_BOT_TOKEN,
509
+ allowedChatIds: opts.secrets.ALLOWED_CHAT_IDS,
510
+ }).join('\n') + '\n');
505
511
  return 0;
506
512
  }
507
513
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,qCAAqC;AACrC,0EAA0E;AAC1E,kFAAkF;AAClF,6EAA6E;AAC7E,8DAA8D;AAC9D,0GAA0G;AAC1G,4FAA4F;AAC5F,oEAAoE;AACpE,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,iBAAiB;AAEjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1H,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAmBhD,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,YAAY,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AACzC,CAAC;AACD,SAAS,OAAO,CAAC,CAAU;IACzB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1F,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAuB,EACvB,OAAsB;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;QACnF,MAAM,KAAK,GAAsB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAA4B;IAC5E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAC3D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC/B,CAAC;AAOD,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAC5B,QAA0B,EAC1B,IAAqE;IAErE,MAAM,GAAG,GAAc,QAAQ,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACtD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IACtC,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG;QAClC,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC;QACpC,iFAAiF;QACjF,uFAAuF;QACvF,GAAG,EAAE;YACH,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,WAAW;YAC3C,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,uBAAuB;SAC/D;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAC9B,YAAoC,EACpC,WAA4C;IAE5C,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAElF,SAAS,QAAQ,CAAC,OAA+B,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc,EAAE,aAAqB;IACvE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAqB,UAAU,CAAC,IAAI,CAAC;QACjD,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAe;QACvD,CAAC,CAAC,IAAI,CAAC;IACT,aAAa,CACX,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACnF,MAAM,CACP,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB,CAChC,YAAoC,EACpC,SAAoC;IAEpC,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAA6B;IACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAClG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,4CAA4C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAChE,6BAA6B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC5C,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAChH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,MAAM,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,oCAAoC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC5E,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,qBAAqB,GAAmB;IAC5C,UAAU,EAAE,iBAAiB;IAC7B,SAAS,EAAE,eAAe;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,KAAa,EACb,OAAuB,qBAAqB;IAE5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,2BAA2B,OAAO,8BAA8B,KAAK,uDAAuD,CAAC;IACtI,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,cAAc,KAAK,iBAAiB,OAAO,EAAE,CAAC;IACjF,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO,OAAO,iCAAiC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,GAAG;QAAE,OAAO,oBAAoB,KAAK,QAAQ,OAAO,KAAK,GAAG,qDAAqD,CAAC;IACtH,OAAO,YAAY,KAAK,OAAO,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,SAAS,CAAC,IAAmE;IAC1F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACxE,yCAAyC;IACzC,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,OAAQ,GAAmC,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACxH,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAuC,CAAC;QAC7E,IAAI,CAAC;YACH,MAAO,GAAmE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBAAC,MAAO,MAAM,CAAC,CAAuC,EAAE,OAAO,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACvG,IAAI,CAAC;gBAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAaD,mFAAmF;AACnF,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,WAA+B,CAAC;IACpC,IAAI,aAAiC,CAAC;IACtC,4FAA4F;IAC5F,IAAI,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC;IAC9D,MAAM,YAAY,GAA2B;QAC3C,oBAAoB,EAAE,oBAAoB;QAC1C,kBAAkB,EAAE,kBAAkB;KACvC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;YAAC,SAAS,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACzD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,SAAS;YAAE,WAAW,GAAG,GAAG,CAAC;aACrC,IAAI,IAAI,KAAK,iBAAiB;YAAE,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;aACxE,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,GAAG,GAAG,CAAC;aACrC,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;;YAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,6BAA6B;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,OAAO,CAAC,kBAAkB,KAAK,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAClG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,CAAC,gBAAgB,KAAK,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC5F,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,GAAwC,EACxC,OAA+B,EAAE;IAEjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,GAAG,KAAK,sEAAsE,CAAC;IAC5F,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,GAAG,kCAAkC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,OAAiB,EACjB,OAAgB,EAChB,GAAwC;IAExC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM;YAClC,CAAC,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,aAAa,CAAC,MAAuB,EAAE,OAAiB,EAAE,OAAgB;IACvF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgC,EAChC,GAAwC;IAExC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,6EAA6E,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChH,IAAI,KAAK;YAAE,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,gGAAgG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjI,IAAI,GAAG;YAAE,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,CAAS,EAAW,EAAE;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,4GAA4G;AAC5G,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,GAAW;IACvD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACpD,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5C,IAAI,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,OAAe,OAAO,CAAC,GAAG,EAAE;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAM1C;IACC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,uBAAuB,CAAC;IACnF,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC/B,IAAI,MAAM,GAAG,wDAAwD,QAAQ,KAAK,CAAC;IACnF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC7B,IAAI,SAAS,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACrC,MAAM,GAAG,MAAM,MAAM,kFAAkF,QAAQ,KAAK,CAAC;IACvH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,CAAoD;IAC5E,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,cAAc,qEAAqE,CAAC,CAAC;IACxH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAE9D,sEAAsE;IACtE,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAA6B;QACjF,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvG,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;IAErC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACjE,qFAAqF,CACtF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAa;QACzB,eAAe,EAAE,CAAC;QAClB,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE9B,gFAAgF;IAChF,gFAAgF;IAChF,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,IAAI,CAAC,aAAa;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAChC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;KACxG,CAAC;IACF,IAAI,aAAqB,CAAC;IAC1B,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1C,aAAa,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,sDAAsD;IACtD,QAAQ,CACN;QACE,eAAe,EAAE,aAAa,EAAE,qDAAqD;QACrF,WAAW;QACX,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,GAAG,IAAI,CAAC,OAAO;KAChB,EACD,IAAI,CACL,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEtC,UAAU;IACV,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,GAAG,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC;IACxF,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC3D,GAAG,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC;IACxG,KAAK,MAAM,CAAC,IAAI,cAAc;QAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,gCAAgC,CAAC,CAAC;IACrE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;QAClB,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB;QAC9C,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;KAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -3,6 +3,8 @@ export interface PairFlags {
3
3
  channel: string;
4
4
  /** Optional TTL override (seconds) for the code. */
5
5
  ttlSeconds?: number;
6
+ /** Issue a code even though `fortytwo start` is not running Telegram (e.g. a hand-run bridge). */
7
+ force?: boolean;
6
8
  }
7
9
  export declare function parsePairArgs(argv: string[]): PairFlags;
8
10
  /**
@@ -11,5 +13,11 @@ export declare function parsePairArgs(argv: string[]): PairFlags;
11
13
  * or a code minted here would land in a db the bridge never reads.
12
14
  */
13
15
  export declare function resolveBindingsDbPath(root: string): string;
16
+ /**
17
+ * Why a code minted now could not be redeemed, or null if Telegram is running
18
+ * under `fortytwo start`. A code is only useful while the bridge is up to read
19
+ * `/login <code>`, so pair refuses to print one otherwise.
20
+ */
21
+ export declare function telegramUnavailableMessage(root: string, nowMs?: number): string | null;
14
22
  export declare function runPair(argv: string[]): Promise<number>;
15
23
  //# sourceMappingURL=pair.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IACxB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAUvD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AASD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB7D"}
1
+ {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACxB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kGAAkG;IAClG,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAWvD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAclG;AASD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B7D"}
@@ -9,12 +9,18 @@
9
9
  import { resolve, dirname } from 'node:path';
10
10
  import { mkdirSync } from 'node:fs';
11
11
  import { loadTelegram } from '../engine.js';
12
+ import { liveRuntime, serviceRunning } from '../runtime.js';
13
+ import { readProjectSetting } from './init.js';
12
14
  export function parsePairArgs(argv) {
13
15
  const f = { channel: 'telegram' };
14
16
  for (let i = 0; i < argv.length; i++) {
15
17
  const a = argv[i];
16
18
  if (a === undefined || !a.startsWith('--'))
17
19
  continue;
20
+ if (a === '--force') {
21
+ f.force = true;
22
+ continue;
23
+ }
18
24
  const v = argv[++i] ?? '';
19
25
  if (a === '--channel')
20
26
  f.channel = v || 'telegram';
@@ -29,9 +35,30 @@ export function parsePairArgs(argv) {
29
35
  * or a code minted here would land in a db the bridge never reads.
30
36
  */
31
37
  export function resolveBindingsDbPath(root) {
32
- return process.env.TELEGRAM_BINDINGS_DB
33
- ? resolve(root, process.env.TELEGRAM_BINDINGS_DB)
34
- : resolve(root, 'state', 'telegram-bindings.db');
38
+ // Shell env, else the project's .env — the same value `fortytwo start` passes the bridge.
39
+ const custom = readProjectSetting('TELEGRAM_BINDINGS_DB', root);
40
+ return custom ? resolve(root, custom) : resolve(root, 'state', 'telegram-bindings.db');
41
+ }
42
+ /**
43
+ * Why a code minted now could not be redeemed, or null if Telegram is running
44
+ * under `fortytwo start`. A code is only useful while the bridge is up to read
45
+ * `/login <code>`, so pair refuses to print one otherwise.
46
+ */
47
+ export function telegramUnavailableMessage(root, nowMs = Date.now()) {
48
+ const runtime = liveRuntime(root, nowMs);
49
+ if (serviceRunning(runtime, 'telegram'))
50
+ return null;
51
+ const skipped = runtime?.skipped.find((s) => s.name === 'telegram');
52
+ return [
53
+ skipped ? `Telegram is not running (${skipped.reason}).` : 'Telegram is not running.',
54
+ ...(skipped ? ['Fix that in .env, then restart Fortytwo:'] : ['Start Fortytwo with:']),
55
+ ' fortytwo start',
56
+ '',
57
+ 'Then run:',
58
+ ' fortytwo pair',
59
+ '',
60
+ '(Running the bridge yourself? `fortytwo pair --force` issues a code anyway.)',
61
+ ].join('\n');
35
62
  }
36
63
  export async function runPair(argv) {
37
64
  const flags = parsePairArgs(argv);
@@ -39,6 +66,13 @@ export async function runPair(argv) {
39
66
  process.stderr.write(`pair: unsupported channel "${flags.channel}" (only telegram at v0).\n`);
40
67
  return 2;
41
68
  }
69
+ if (!flags.force) {
70
+ const why = telegramUnavailableMessage(process.cwd());
71
+ if (why) {
72
+ process.stderr.write(why + '\n');
73
+ return 1;
74
+ }
75
+ }
42
76
  const tg = (await loadTelegram());
43
77
  if (!tg || typeof tg.SqliteBindingStore !== 'function' || typeof tg.TelegramAdapter !== 'function') {
44
78
  process.stderr.write('pair: @justfortytwo/telegram (>=0.1.1, with persisted challenges) is not installed.\n');
@@ -1 +1 @@
1
- {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runStart(_argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAeA,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB/D"}
@@ -0,0 +1,35 @@
1
+ // start — run fortytwo's long-running services in the foreground.
2
+ //
3
+ // Loads the project .env (the shell/container env wins over it), starts every
4
+ // service that is installed and configured (the Telegram bridge needs
5
+ // TELEGRAM_BOT_TOKEN; the scheduler needs nothing) and supervises them until
6
+ // Ctrl+C / SIGTERM or until one exits — see runtime.ts. Never daemonizes: use it
7
+ // directly as the container/service command (`fortytwo start`) and let
8
+ // Docker/Podman/systemd own restarts. The services' own bins
9
+ // (fortytwo-telegram-bridge, fortytwo-scheduler) stay available for debugging.
10
+ import { existsSync, readFileSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { parseEnvContent } from './init.js';
13
+ import { buildServiceEnv, liveRuntime, planServices, supervise } from '../runtime.js';
14
+ export async function runStart(_argv) {
15
+ const root = process.cwd();
16
+ const running = liveRuntime(root);
17
+ if (running) {
18
+ process.stderr.write(`start: fortytwo is already running (pid ${running.pid}). Stop it with \`fortytwo stop\`.\n`);
19
+ return 1;
20
+ }
21
+ const envPath = join(root, '.env');
22
+ const fileEnv = existsSync(envPath) ? parseEnvContent(readFileSync(envPath, 'utf8')) : {};
23
+ const env = buildServiceEnv(process.env, fileEnv, root);
24
+ const { run, skipped } = planServices(root, env);
25
+ for (const s of skipped)
26
+ process.stdout.write(`[fortytwo] ${s.name}: not started (${s.reason})\n`);
27
+ if (run.length === 0) {
28
+ process.stderr.write('start: no fortytwo service can run here. Run `fortytwo init` in this project first, ' +
29
+ 'and set TELEGRAM_BOT_TOKEN in .env for the Telegram channel.\n');
30
+ return 1;
31
+ }
32
+ process.stdout.write(`[fortytwo] starting ${run.map((s) => s.name).join(' + ')} (Ctrl+C to stop)\n`);
33
+ return supervise(run, { root, env, skipped });
34
+ }
35
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,8EAA8E;AAC9E,sEAAsE;AACtE,6EAA6E;AAC7E,iFAAiF;AACjF,uEAAuE;AACvE,6DAA6D;AAC7D,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAe;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,OAAO,CAAC,GAAG,sCAAsC,CAAC,CAAC;QACnH,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACnG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sFAAsF;YACtF,gEAAgE,CACjE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrG,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type RuntimeState } from '../runtime.js';
2
+ export interface StatusInput {
3
+ runtime: RuntimeState | null;
4
+ schedulerHeartbeat: {
5
+ pid: number;
6
+ ts: string;
7
+ } | null;
8
+ memoryConfigured: boolean;
9
+ nowMs: number;
10
+ }
11
+ /** The status lines (pure, for tests). */
12
+ export declare function statusLines(i: StatusInput): string[];
13
+ export declare function runStatus(_argv: string[]): Promise<number>;
14
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAWA,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAG/E,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE,CAkBpD;AAaD,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAWhE"}
@@ -0,0 +1,54 @@
1
+ // status — is fortytwo running, and which of its services?
2
+ //
3
+ // Reads what already exists instead of searching for processes: the runtime
4
+ // state `fortytwo start` keeps in .fortytwo/runtime.json (Telegram bridge), the
5
+ // scheduler's own heartbeat file (so a scheduler run by hand shows up too), and
6
+ // .mcp.json for memory, which Claude Code itself starts on demand.
7
+ // Exit code: 0 when `fortytwo start` is running, 3 when it is not (LSB "not
8
+ // running"), so `fortytwo status` works as a container health check.
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { liveRuntime, serviceRunning } from '../runtime.js';
12
+ import { defaultDoctorDeps, HEARTBEAT_STALE_MS } from './doctor.js';
13
+ /** The status lines (pure, for tests). */
14
+ export function statusLines(i) {
15
+ const row = (label, value) => `${label.padEnd(11)}${value}`;
16
+ const lines = [];
17
+ lines.push(row('Fortytwo', i.runtime ? `running (pid ${i.runtime.pid}, since ${i.runtime.startedAt})` : 'not running (start it with `fortytwo start`)'));
18
+ const skippedTg = i.runtime?.skipped.find((s) => s.name === 'telegram');
19
+ lines.push(row('Telegram', serviceRunning(i.runtime, 'telegram') ? 'running'
20
+ : skippedTg ? `not started (${skippedTg.reason})`
21
+ : 'not running'));
22
+ const hb = i.schedulerHeartbeat;
23
+ const age = hb ? i.nowMs - new Date(hb.ts).getTime() : Infinity;
24
+ lines.push(row('Scheduler', hb && age <= HEARTBEAT_STALE_MS ? `running (heartbeat ${Math.max(0, Math.round(age / 1000))}s ago)`
25
+ : hb ? `not running (last heartbeat ${hb.ts})`
26
+ : 'not running'));
27
+ lines.push(row('Memory', i.memoryConfigured ? 'configured via MCP (Claude Code starts it on demand)' : 'not configured (run `fortytwo init`)'));
28
+ return lines;
29
+ }
30
+ function memoryConfigured(root) {
31
+ const path = join(root, '.mcp.json');
32
+ if (!existsSync(path))
33
+ return false;
34
+ try {
35
+ const cfg = JSON.parse(readFileSync(path, 'utf8'));
36
+ return !!cfg.mcpServers?.['fortytwo-memory'];
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ export async function runStatus(_argv) {
43
+ const root = process.cwd();
44
+ const runtime = liveRuntime(root);
45
+ const lines = statusLines({
46
+ runtime,
47
+ schedulerHeartbeat: defaultDoctorDeps().schedulerHeartbeat(),
48
+ memoryConfigured: memoryConfigured(root),
49
+ nowMs: Date.now(),
50
+ });
51
+ process.stdout.write(lines.join('\n') + '\n');
52
+ return runtime ? 0 : 3;
53
+ }
54
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runStop(_argv: string[], opts?: {
2
+ timeoutMs?: number;
3
+ }): Promise<number>;
4
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBjG"}
@@ -0,0 +1,34 @@
1
+ // stop — stop a `fortytwo start` running for this project.
2
+ //
3
+ // Signals ONLY the supervisor recorded in .fortytwo/runtime.json, and only while
4
+ // its heartbeat is fresh (see runtime.ts), so a stale file can never hit a
5
+ // reused pid. It never searches for or kills processes by name. The supervisor
6
+ // then stops its own services. Under Docker/systemd prefer their own stop.
7
+ import { isPidAlive, liveRuntime } from '../runtime.js';
8
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
9
+ export async function runStop(_argv, opts = {}) {
10
+ const runtime = liveRuntime(process.cwd());
11
+ if (!runtime) {
12
+ process.stdout.write('fortytwo is not running.\n');
13
+ return 0;
14
+ }
15
+ process.stdout.write(`Stopping fortytwo (pid ${runtime.pid})…\n`);
16
+ try {
17
+ process.kill(runtime.pid, 'SIGTERM');
18
+ }
19
+ catch (err) {
20
+ process.stderr.write(`stop: could not signal pid ${runtime.pid}: ${err.message}\n`);
21
+ return 1;
22
+ }
23
+ const deadline = Date.now() + (opts.timeoutMs ?? 20_000);
24
+ while (Date.now() < deadline) {
25
+ if (!isPidAlive(runtime.pid)) {
26
+ process.stdout.write('fortytwo stopped.\n');
27
+ return 0;
28
+ }
29
+ await sleep(200);
30
+ }
31
+ process.stderr.write(`stop: fortytwo (pid ${runtime.pid}) is still running after SIGTERM.\n`);
32
+ return 1;
33
+ }
34
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAe,EAAE,OAA+B,EAAE;IAC9E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,GAAG,KAAM,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC/F,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC5C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,GAAG,qCAAqC,CAAC,CAAC;IAC9F,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- export type Verb = 'init' | 'pair' | 'doctor' | 'update' | 'rollback' | 'enrich' | 'forget' | 'unbind';
2
+ export type Verb = 'init' | 'pair' | 'doctor' | 'update' | 'rollback' | 'enrich' | 'forget' | 'unbind' | 'start' | 'stop' | 'status';
3
3
  /**
4
4
  * Decide the verb. `create-fortytwo` with no verb means `init`; `fortytwo` with
5
5
  * no verb prints usage. The invoked-as name comes from argv[1]'s basename.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA4BA,MAAM,MAAM,IAAI,GACZ,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,CAAC;AAwBb;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CASnF;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA+BA,MAAM,MAAM,IAAI,GACZ,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,CAAC;AA4Bb;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CASnF;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBxE"}
package/dist/index.js CHANGED
@@ -24,6 +24,9 @@ import { runRollback } from './commands/rollback.js';
24
24
  import { runEnrich } from './commands/enrich.js';
25
25
  import { runForget } from './commands/forget.js';
26
26
  import { runUnbind } from './commands/unbind.js';
27
+ import { runStart } from './commands/start.js';
28
+ import { runStop } from './commands/stop.js';
29
+ import { runStatus } from './commands/status.js';
27
30
  const USAGE = `fortytwo — install + lifecycle CLI for fortytwo
28
31
 
29
32
  Usage:
@@ -33,7 +36,11 @@ Usage:
33
36
  Verbs:
34
37
  init Capture identity, write .env + .fortytwo/identity.json, render
35
38
  persona, provision (embedder check/pull at OLLAMA_BASE_URL + db migrate).
36
- pair Issue a one-time /login pairing code for a channel (e.g. Telegram).
39
+ start Run fortytwo in the foreground (Telegram bridge + scheduler), loading
40
+ .env; Ctrl+C or SIGTERM stops it. Use it as the container/service command.
41
+ status Show whether fortytwo and its services are running (exit 3 if not).
42
+ stop Stop the \`fortytwo start\` running for this project.
43
+ pair Issue a one-time /login pairing code for Telegram (needs \`fortytwo start\`).
37
44
  doctor Health-check the engine: memory MCP contract, gate, db migrations,
38
45
  embedder model, and installed versions vs fortytwo.compat.
39
46
  update Resolve latest-in-range, install, run doctor, report. Points to
@@ -51,7 +58,7 @@ Run "fortytwo <verb> --help" for verb-specific options.
51
58
  */
52
59
  export function resolveVerb(argv, invokedAs) {
53
60
  const first = argv[0];
54
- const verbs = ['init', 'pair', 'doctor', 'update', 'rollback', 'enrich', 'forget', 'unbind'];
61
+ const verbs = ['init', 'start', 'stop', 'status', 'pair', 'doctor', 'update', 'rollback', 'enrich', 'forget', 'unbind'];
55
62
  if (first && verbs.includes(first))
56
63
  return first;
57
64
  if (!first || first === '--help' || first === '-h' || first === 'help') {
@@ -73,6 +80,9 @@ export async function main(argv = process.argv.slice(2)) {
73
80
  case 'enrich': return runEnrich(rest);
74
81
  case 'forget': return runForget(rest);
75
82
  case 'unbind': return runUnbind(rest);
83
+ case 'start': return runStart(rest);
84
+ case 'stop': return runStop(rest);
85
+ case 'status': return runStatus(rest);
76
86
  case 'help':
77
87
  process.stdout.write(USAGE);
78
88
  return 0;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { EventEmitter } from 'node:events';
2
+ /** A long-running service `fortytwo start` can supervise. */
3
+ export interface ServiceSpec {
4
+ name: string;
5
+ /** npm package that ships the service. */
6
+ pkg: string;
7
+ /** Its bin name (the low-level command, e.g. for debugging). */
8
+ bin: string;
9
+ /** Env vars without which the service refuses to start; it is skipped instead. */
10
+ requiredEnv: string[];
11
+ }
12
+ export declare const SERVICES: ServiceSpec[];
13
+ export interface PlannedService {
14
+ name: string;
15
+ script: string;
16
+ }
17
+ export interface SkippedService {
18
+ name: string;
19
+ reason: string;
20
+ }
21
+ /**
22
+ * The environment the services run with. Precedence: the supervisor's own
23
+ * process env (shell, container, systemd) > the project's .env > defaults.
24
+ * FORTYTWO_ROOT defaults to the project root: the bridge resolves its bindings
25
+ * db and config from it, and would otherwise fall back to its own package dir.
26
+ */
27
+ export declare function buildServiceEnv(processEnv: NodeJS.ProcessEnv, fileEnv: Record<string, string>, root: string): NodeJS.ProcessEnv;
28
+ /** Which services to run: installed in the project AND configured; the rest are skipped with a reason. */
29
+ export declare function planServices(root: string, env: NodeJS.ProcessEnv, specs?: ServiceSpec[]): {
30
+ run: PlannedService[];
31
+ skipped: SkippedService[];
32
+ };
33
+ export interface RuntimeState {
34
+ /** The `fortytwo start` supervisor process. */
35
+ pid: number;
36
+ startedAt: string;
37
+ /** Refreshed every few seconds while the supervisor is alive. */
38
+ heartbeatAt: string;
39
+ services: {
40
+ name: string;
41
+ pid: number | null;
42
+ state: 'running' | 'exited';
43
+ }[];
44
+ skipped: SkippedService[];
45
+ }
46
+ /** A heartbeat older than this means the supervisor is gone (killed without cleanup). */
47
+ export declare const RUNTIME_STALE_MS = 30000;
48
+ export declare function runtimeStatePath(root: string): string;
49
+ export declare function readRuntimeState(root: string): RuntimeState | null;
50
+ export declare function isPidAlive(pid: number): boolean;
51
+ /** The running supervisor's state, or null if none: no file, stale heartbeat, or dead pid. */
52
+ export declare function liveRuntime(root: string, nowMs?: number, alive?: (pid: number) => boolean): RuntimeState | null;
53
+ /** True when a live `fortytwo start` is currently running the named service. */
54
+ export declare function serviceRunning(state: RuntimeState | null, name: string): boolean;
55
+ export interface SuperviseOptions {
56
+ root: string;
57
+ env: NodeJS.ProcessEnv;
58
+ skipped?: SkippedService[];
59
+ out?: (line: string) => void;
60
+ err?: (line: string) => void;
61
+ /** Where SIGINT/SIGTERM arrive (default: this process). Injected by tests. */
62
+ signals?: EventEmitter;
63
+ /** How long services get to exit after SIGTERM before SIGKILL. */
64
+ graceMs?: number;
65
+ /** runtime.json heartbeat interval. */
66
+ heartbeatMs?: number;
67
+ }
68
+ /**
69
+ * Run `services` as foreground children until a signal arrives or one of them
70
+ * exits; then stop the others (SIGTERM, then SIGKILL after graceMs) and resolve
71
+ * with the exit code: 0 for a requested stop, non-zero when a service failed.
72
+ * Children are never detached, so none outlive the supervisor's shutdown.
73
+ */
74
+ export declare function supervise(services: PlannedService[], opts: SuperviseOptions): Promise<number>;
75
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,QAAQ,EAAE,WAAW,EAGjC,CAAC;AAEF,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAChE,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAEhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,UAAU,CAKnB;AAED,0GAA0G;AAC1G,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,GAAE,WAAW,EAAa,GAC9B;IAAE,GAAG,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAsBtD;AAID,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAA;KAAE,EAAE,CAAC;IAC9E,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMlE;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAmB,EAC1B,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAoB,GAC3C,YAAY,GAAG,IAAI,CAMrB;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhF;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsF7F"}
@@ -0,0 +1,219 @@
1
+ // runtime.ts — foreground supervisor for fortytwo's long-running services.
2
+ //
3
+ // `fortytwo start` runs the installed + configured services (the Telegram bridge,
4
+ // the scheduler daemon) as CHILD processes of one foreground process: it loads
5
+ // the project .env, spawns each service's own bin from the project's
6
+ // node_modules, prefixes and forwards their logs, and on SIGINT/SIGTERM — or as
7
+ // soon as any service exits — stops the rest and exits. It never daemonizes and
8
+ // never restarts a service: restart policy belongs to whatever runs
9
+ // `fortytwo start` (Docker/Podman, systemd, another supervisor). This is process
10
+ // lifecycle only; each service's logic stays in its own package.
11
+ //
12
+ // `.fortytwo/runtime.json` records the running supervisor (its pid, a heartbeat
13
+ // refreshed every few seconds, and its children). `status`, `stop` and `pair`
14
+ // read it, and it is removed on exit. A stale heartbeat means "not running", so a
15
+ // file left behind by a killed supervisor can never make `stop` signal a pid that
16
+ // has since been reused.
17
+ import { spawn } from 'node:child_process';
18
+ import { createInterface } from 'node:readline';
19
+ import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, rmSync } from 'node:fs';
20
+ import { join, resolve } from 'node:path';
21
+ import { findSiblingDir } from './engine.js';
22
+ export const SERVICES = [
23
+ { name: 'telegram', pkg: '@justfortytwo/telegram', bin: 'fortytwo-telegram-bridge', requiredEnv: ['TELEGRAM_BOT_TOKEN'] },
24
+ { name: 'scheduler', pkg: '@justfortytwo/scheduler', bin: 'fortytwo-scheduler', requiredEnv: [] },
25
+ ];
26
+ /**
27
+ * The environment the services run with. Precedence: the supervisor's own
28
+ * process env (shell, container, systemd) > the project's .env > defaults.
29
+ * FORTYTWO_ROOT defaults to the project root: the bridge resolves its bindings
30
+ * db and config from it, and would otherwise fall back to its own package dir.
31
+ */
32
+ export function buildServiceEnv(processEnv, fileEnv, root) {
33
+ const env = { ...fileEnv };
34
+ for (const [k, v] of Object.entries(processEnv))
35
+ if (v !== undefined)
36
+ env[k] = v;
37
+ env.FORTYTWO_ROOT ??= resolve(root);
38
+ return env;
39
+ }
40
+ /** Which services to run: installed in the project AND configured; the rest are skipped with a reason. */
41
+ export function planServices(root, env, specs = SERVICES) {
42
+ const run = [];
43
+ const skipped = [];
44
+ for (const spec of specs) {
45
+ const dir = findSiblingDir(spec.pkg, root);
46
+ if (!dir) {
47
+ skipped.push({ name: spec.name, reason: `${spec.pkg} not installed` });
48
+ continue;
49
+ }
50
+ let bin;
51
+ try {
52
+ bin = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')).bin;
53
+ }
54
+ catch {
55
+ bin = undefined;
56
+ }
57
+ const rel = typeof bin === 'string' ? bin : bin?.[spec.bin];
58
+ if (typeof rel !== 'string' || !rel) {
59
+ skipped.push({ name: spec.name, reason: `${spec.pkg} has no ${spec.bin} bin` });
60
+ continue;
61
+ }
62
+ const missing = spec.requiredEnv.filter((k) => !env[k]);
63
+ if (missing.length > 0) {
64
+ skipped.push({ name: spec.name, reason: `${missing.join(', ')} not set` });
65
+ continue;
66
+ }
67
+ run.push({ name: spec.name, script: join(dir, rel) });
68
+ }
69
+ return { run, skipped };
70
+ }
71
+ /** A heartbeat older than this means the supervisor is gone (killed without cleanup). */
72
+ export const RUNTIME_STALE_MS = 30_000;
73
+ export function runtimeStatePath(root) {
74
+ return join(resolve(root), '.fortytwo', 'runtime.json');
75
+ }
76
+ export function readRuntimeState(root) {
77
+ try {
78
+ return JSON.parse(readFileSync(runtimeStatePath(root), 'utf8'));
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ function writeRuntimeState(root, state) {
85
+ const path = runtimeStatePath(root);
86
+ mkdirSync(join(resolve(root), '.fortytwo'), { recursive: true });
87
+ const tmp = `${path}.tmp`;
88
+ writeFileSync(tmp, JSON.stringify(state, null, 2) + '\n', 'utf8');
89
+ renameSync(tmp, path);
90
+ }
91
+ export function isPidAlive(pid) {
92
+ try {
93
+ process.kill(pid, 0);
94
+ return true;
95
+ }
96
+ catch (err) {
97
+ return err.code === 'EPERM'; // exists, owned by someone else
98
+ }
99
+ }
100
+ /** The running supervisor's state, or null if none: no file, stale heartbeat, or dead pid. */
101
+ export function liveRuntime(root, nowMs = Date.now(), alive = isPidAlive) {
102
+ const s = readRuntimeState(root);
103
+ if (!s || typeof s.pid !== 'number')
104
+ return null;
105
+ const beat = new Date(s.heartbeatAt).getTime();
106
+ if (!Number.isFinite(beat) || nowMs - beat > RUNTIME_STALE_MS)
107
+ return null;
108
+ return alive(s.pid) ? s : null;
109
+ }
110
+ /** True when a live `fortytwo start` is currently running the named service. */
111
+ export function serviceRunning(state, name) {
112
+ return !!state?.services.some((s) => s.name === name && s.state === 'running');
113
+ }
114
+ /**
115
+ * Run `services` as foreground children until a signal arrives or one of them
116
+ * exits; then stop the others (SIGTERM, then SIGKILL after graceMs) and resolve
117
+ * with the exit code: 0 for a requested stop, non-zero when a service failed.
118
+ * Children are never detached, so none outlive the supervisor's shutdown.
119
+ */
120
+ export function supervise(services, opts) {
121
+ const out = opts.out ?? ((l) => { process.stdout.write(l + '\n'); });
122
+ const err = opts.err ?? ((l) => { process.stderr.write(l + '\n'); });
123
+ const signals = opts.signals ?? process;
124
+ const graceMs = opts.graceMs ?? 10_000;
125
+ const startedAt = new Date().toISOString();
126
+ return new Promise((resolveExit) => {
127
+ const children = new Map();
128
+ const exited = new Set();
129
+ let stopping = false;
130
+ let exitCode = 0;
131
+ let killTimer;
132
+ const state = () => ({
133
+ pid: process.pid,
134
+ startedAt,
135
+ heartbeatAt: new Date().toISOString(),
136
+ services: services.map((s) => ({
137
+ name: s.name,
138
+ pid: children.get(s.name)?.pid ?? null,
139
+ state: exited.has(s.name) ? 'exited' : 'running',
140
+ })),
141
+ skipped: opts.skipped ?? [],
142
+ });
143
+ const beat = () => { try {
144
+ writeRuntimeState(opts.root, state());
145
+ }
146
+ catch { /* best-effort */ } };
147
+ const killAll = (sig) => {
148
+ for (const [name, child] of children)
149
+ if (!exited.has(name))
150
+ child.kill(sig);
151
+ };
152
+ const stop = () => {
153
+ if (stopping)
154
+ return;
155
+ stopping = true;
156
+ killAll('SIGTERM');
157
+ killTimer = setTimeout(() => killAll('SIGKILL'), graceMs);
158
+ };
159
+ const onSignal = (sig) => {
160
+ if (stopping) {
161
+ err(`[fortytwo] ${sig} again: killing services now`);
162
+ killAll('SIGKILL');
163
+ return;
164
+ }
165
+ out(`[fortytwo] ${sig} received: stopping services…`);
166
+ stop();
167
+ };
168
+ const onSigint = () => onSignal('SIGINT');
169
+ const onSigterm = () => onSignal('SIGTERM');
170
+ signals.on('SIGINT', onSigint);
171
+ signals.on('SIGTERM', onSigterm);
172
+ const heartbeat = setInterval(beat, opts.heartbeatMs ?? 5_000);
173
+ const finish = () => {
174
+ clearInterval(heartbeat);
175
+ if (killTimer)
176
+ clearTimeout(killTimer);
177
+ signals.off('SIGINT', onSigint);
178
+ signals.off('SIGTERM', onSigterm);
179
+ try {
180
+ rmSync(runtimeStatePath(opts.root), { force: true });
181
+ }
182
+ catch { /* best-effort */ }
183
+ resolveExit(exitCode);
184
+ };
185
+ const onExit = (name, code, signal) => {
186
+ if (exited.has(name))
187
+ return;
188
+ exited.add(name);
189
+ if (!stopping) {
190
+ err(`[fortytwo] ${name} exited unexpectedly (${signal ? `signal ${signal}` : `code ${code}`}); stopping fortytwo`);
191
+ exitCode = code && code !== 0 ? code : 1;
192
+ stop();
193
+ }
194
+ else {
195
+ out(`[fortytwo] ${name} stopped`);
196
+ }
197
+ beat();
198
+ if (exited.size === services.length)
199
+ finish();
200
+ };
201
+ for (const svc of services) {
202
+ const child = spawn(process.execPath, [svc.script], {
203
+ cwd: opts.root,
204
+ env: opts.env,
205
+ stdio: ['ignore', 'pipe', 'pipe'],
206
+ });
207
+ children.set(svc.name, child);
208
+ createInterface({ input: child.stdout }).on('line', (l) => out(`[${svc.name}] ${l}`));
209
+ createInterface({ input: child.stderr }).on('line', (l) => err(`[${svc.name}] ${l}`));
210
+ child.on('error', (e) => {
211
+ err(`[fortytwo] ${svc.name} failed to start: ${e.message}`);
212
+ onExit(svc.name, 1, null);
213
+ });
214
+ child.on('exit', (code, signal) => onExit(svc.name, code, signal));
215
+ }
216
+ beat();
217
+ });
218
+ }
219
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,kFAAkF;AAClF,+EAA+E;AAC/E,qEAAqE;AACrE,gFAAgF;AAChF,gFAAgF;AAChF,oEAAoE;AACpE,iFAAiF;AACjF,iEAAiE;AACjE,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,kFAAkF;AAClF,kFAAkF;AAClF,yBAAyB;AAEzB,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAa7C,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE,0BAA0B,EAAE,WAAW,EAAE,CAAC,oBAAoB,CAAC,EAAE;IACzH,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,yBAAyB,EAAE,GAAG,EAAE,oBAAoB,EAAE,WAAW,EAAE,EAAE,EAAE;CAClG,CAAC;AAKF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,UAA6B,EAC7B,OAA+B,EAC/B,IAAY;IAEZ,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjF,GAAG,CAAC,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,GAAsB,EACtB,QAAuB,QAAQ;IAE/B,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC/F,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAuB,CAAC,GAAG,CAAC;QAC/F,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,GAAG,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,GAA2C,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACjH,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAcD,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAiB,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAmB;IAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,gCAAgC;IAC1F,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,QAAgB,IAAI,CAAC,GAAG,EAAE,EAC1B,QAAkC,UAAU;IAE5C,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,KAA0B,EAAE,IAAY;IACrE,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AACjF,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,QAA0B,EAAE,IAAsB;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,IAAI,OAAO,CAAS,CAAC,WAAW,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAqC,CAAC;QAE1C,MAAM,KAAK,GAAG,GAAiB,EAAE,CAAC,CAAC;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS;YACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI;gBACtC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACjD,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,MAAM,OAAO,GAAG,CAAC,GAAmB,EAAE,EAAE;YACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,QAAQ;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,CAAC,SAAS,CAAC,CAAC;YACnB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,GAAmB,EAAE,EAAE;YACvC,IAAI,QAAQ,EAAE,CAAC;gBAAC,GAAG,CAAC,cAAc,GAAG,8BAA8B,CAAC,CAAC;gBAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACnG,GAAG,CAAC,cAAc,GAAG,+BAA+B,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC;gBAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACzF,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAmB,EAAE,MAA6B,EAAE,EAAE;YAClF,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,cAAc,IAAI,yBAAyB,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,sBAAsB,CAAC,CAAC;gBACnH,QAAQ,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,EAAE,CAAC;YACP,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;gBAAE,MAAM,EAAE,CAAC;QAChD,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAClD,GAAG,EAAE,IAAI,CAAC,IAAI;gBACd,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9B,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACvF,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACvF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACtB,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justfortytwo/installer",
3
- "version": "1.0.0-5",
3
+ "version": "1.0.0-6",
4
4
  "description": "All-in-one installer and lifecycle CLI for fortytwo — scaffolds the persona surface and provisions the npm engine (memory MCP, safety gate, channel adapters, embedder).",
5
5
  "license": "MIT",
6
6
  "author": {