@justfortytwo/installer 1.0.0-8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/runtime.js CHANGED
@@ -11,14 +11,14 @@
11
11
  //
12
12
  // `.fortytwo/runtime.json` records the running supervisor (its pid, a heartbeat
13
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.
14
+ // read it, and it is removed on exit. Both a fresh heartbeat and a matching OS
15
+ // process-start identity are required: a live PID alone does not prove ownership.
17
16
  import { spawn } from 'node:child_process';
18
17
  import { createInterface } from 'node:readline';
19
18
  import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, rmSync } from 'node:fs';
20
19
  import { join, resolve } from 'node:path';
21
20
  import { findSiblingDir } from './engine.js';
21
+ import { readProcessIdentity } from './process-identity.js';
22
22
  export const SERVICES = [
23
23
  { name: 'telegram', pkg: '@justfortytwo/telegram', bin: 'fortytwo-telegram-bridge', requiredEnv: ['TELEGRAM_BOT_TOKEN'] },
24
24
  { name: 'scheduler', pkg: '@justfortytwo/scheduler', bin: 'fortytwo-scheduler', requiredEnv: [] },
@@ -89,6 +89,8 @@ function writeRuntimeState(root, state) {
89
89
  renameSync(tmp, path);
90
90
  }
91
91
  export function isPidAlive(pid) {
92
+ if (!Number.isSafeInteger(pid) || pid <= 0)
93
+ return false;
92
94
  try {
93
95
  process.kill(pid, 0);
94
96
  return true;
@@ -97,7 +99,13 @@ export function isPidAlive(pid) {
97
99
  return err.code === 'EPERM'; // exists, owned by someone else
98
100
  }
99
101
  }
100
- /** The running supervisor's state, or null if none: no file, stale heartbeat, or dead pid. */
102
+ /** Match a recorded process generation, including when waiting for shutdown. */
103
+ export function sameRuntimeProcess(state, alive = isPidAlive, identity = readProcessIdentity) {
104
+ return Number.isSafeInteger(state.pid) && state.pid > 0
105
+ && typeof state.processIdentity === 'string' && state.processIdentity.length > 0
106
+ && alive(state.pid) && identity(state.pid) === state.processIdentity;
107
+ }
108
+ /** A live supervisor requires a fresh heartbeat AND the same OS process. */
101
109
  export function liveRuntime(root, nowMs = Date.now(), alive = isPidAlive) {
102
110
  const s = readRuntimeState(root);
103
111
  if (!s || typeof s.pid !== 'number')
@@ -105,7 +113,7 @@ export function liveRuntime(root, nowMs = Date.now(), alive = isPidAlive) {
105
113
  const beat = new Date(s.heartbeatAt).getTime();
106
114
  if (!Number.isFinite(beat) || nowMs - beat > RUNTIME_STALE_MS)
107
115
  return null;
108
- return alive(s.pid) ? s : null;
116
+ return sameRuntimeProcess(s, alive) ? s : null;
109
117
  }
110
118
  /** True when a live `fortytwo start` is currently running the named service. */
111
119
  export function serviceRunning(state, name) {
@@ -123,6 +131,9 @@ export function supervise(services, opts) {
123
131
  const signals = opts.signals ?? process;
124
132
  const graceMs = opts.graceMs ?? 10_000;
125
133
  const startedAt = new Date().toISOString();
134
+ const processIdentity = readProcessIdentity(process.pid);
135
+ if (!processIdentity)
136
+ throw new Error('Cannot establish supervisor process identity; refusing to start services.');
126
137
  return new Promise((resolveExit) => {
127
138
  const children = new Map();
128
139
  const exited = new Set();
@@ -131,6 +142,7 @@ export function supervise(services, opts) {
131
142
  let killTimer;
132
143
  const state = () => ({
133
144
  pid: process.pid,
145
+ processIdentity,
134
146
  startedAt,
135
147
  heartbeatAt: new Date().toISOString(),
136
148
  services: services.map((s) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
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,+EAA+E;AAC/E,kFAAkF;AAElF,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;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAa5D,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;AAgBD,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,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,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,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,QAAkC,UAAU,EAC5C,WAA2C,mBAAmB;IAE9D,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;WAClD,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;WAC7E,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,eAAe,CAAC;AACzE,CAAC;AAED,4EAA4E;AAC5E,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,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,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;IAC3C,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAEnH,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,eAAe;YACf,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"}
@@ -0,0 +1,58 @@
1
+ interface Statement {
2
+ get(...args: unknown[]): unknown;
3
+ all(...args: unknown[]): unknown[];
4
+ }
5
+ interface Raw {
6
+ prepare(sql: string): Statement;
7
+ transaction<A extends unknown[], R>(fn: (...args: A) => R): (...args: A) => R;
8
+ close(): void;
9
+ }
10
+ interface Handle {
11
+ k: {
12
+ destroy(): Promise<void>;
13
+ };
14
+ raw: Raw;
15
+ }
16
+ type Direction = 'inbound' | 'outbound' | 'internal';
17
+ interface ImportRow {
18
+ channel: string;
19
+ direction: Direction;
20
+ actor: string;
21
+ kind: string;
22
+ content: string;
23
+ threadId: string | null;
24
+ meta: Record<string, unknown>;
25
+ ts: string;
26
+ legacyMemoryId: number;
27
+ embedding?: Buffer;
28
+ }
29
+ interface MemoryRow {
30
+ id: number;
31
+ ts: string;
32
+ content: string;
33
+ source: string;
34
+ tags: string | null;
35
+ meta: string | null;
36
+ }
37
+ export interface MigrationResult {
38
+ moved: number;
39
+ skipped: boolean;
40
+ /** Why the migration did not run (set only by migrateChatSafely). */
41
+ error?: string;
42
+ }
43
+ /** Test seam: replace memory's deleteByIds (e.g. to simulate a crash before delete). */
44
+ export interface MigrationDeps {
45
+ deleteByIds?: (h: Handle, ids: number[]) => number;
46
+ }
47
+ /** Map one legacy memory row onto a transcript import row. Throws on malformed rows. */
48
+ export declare function mapChatRow(row: MemoryRow, embedding?: Buffer): ImportRow;
49
+ export declare function migrateChatToTranscript(root: string, dbPath: string, deps?: MigrationDeps): Promise<MigrationResult>;
50
+ /**
51
+ * migrateChatToTranscript for init/update: a failure (malformed legacy row,
52
+ * SQLITE_BUSY, incompatible sibling) is returned as `error` instead of thrown,
53
+ * so the rest of init/update (state ledger, launcher) still completes. The move
54
+ * only deletes from memory after a verified import, so memory stays intact.
55
+ */
56
+ export declare function migrateChatSafely(root: string, dbPath: string): Promise<MigrationResult>;
57
+ export {};
58
+ //# sourceMappingURL=transcript-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-migration.d.ts","sourceRoot":"","sources":["../src/transcript-migration.ts"],"names":[],"mappings":"AAmBA,UAAU,SAAS;IAAG,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;CAAE;AAC5F,UAAU,GAAG;IACX,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9E,KAAK,IAAI,IAAI,CAAC;CACf;AACD,UAAU,MAAM;IAAG,CAAC,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE;AAC9D,KAAK,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AACrD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IACpF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAChH;AAeD,UAAU,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAEzH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAWrF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CA0BxE;AAQD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2D9H;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAM9F"}
@@ -0,0 +1,143 @@
1
+ // One-off, idempotent move of chat history out of memory into the transcript.
2
+ //
3
+ // Chat rows (`telegram:*`, `scheduler:wake`) used to live in memory's `memories`
4
+ // table; the transcript now owns them. The move is ordered so no history can be
5
+ // lost and a re-run never duplicates:
6
+ // 1. map every chat row (pure; malformed rows fail before any write),
7
+ // 2. import in batches of 100, one transaction each (importRow is idempotent
8
+ // on legacy_memory_id, so a re-run after a crash re-imports nothing),
9
+ // 3. verify every source id has its transcript row with the same content,
10
+ // 4. only then delete from memory, all in ONE transaction (a failure leaves
11
+ // memory intact),
12
+ // 5. start persona's transcript cursor below every unconsumed row (live, or
13
+ // legacy past the memory checkpoint); never overwrite an existing one.
14
+ // Siblings load through loadSibling: a partial install skips, a broken one fails loud.
15
+ import { mkdirSync } from 'node:fs';
16
+ import { dirname, resolve } from 'node:path';
17
+ import { findSiblingDir, loadSibling } from './engine.js';
18
+ const BATCH = 100;
19
+ const DIRECTIONS = ['inbound', 'outbound', 'internal'];
20
+ const nonEmpty = (v) => typeof v === 'string' && v.length > 0;
21
+ function parseJson(text, id, field) {
22
+ if (text === null || text === '')
23
+ return undefined;
24
+ try {
25
+ return JSON.parse(text);
26
+ }
27
+ catch {
28
+ throw new Error(`memory row ${id}: ${field} is not valid JSON`);
29
+ }
30
+ }
31
+ /** Map one legacy memory row onto a transcript import row. Throws on malformed rows. */
32
+ export function mapChatRow(row, embedding) {
33
+ const rawMeta = parseJson(row.meta, row.id, 'meta') ?? {};
34
+ if (typeof rawMeta !== 'object' || rawMeta === null || Array.isArray(rawMeta))
35
+ throw new Error(`memory row ${row.id}: meta is not an object`);
36
+ const meta = { ...rawMeta };
37
+ const tags = parseJson(row.tags, row.id, 'tags') ?? [];
38
+ if (!Array.isArray(tags))
39
+ throw new Error(`memory row ${row.id}: tags is not an array`);
40
+ // Keep the original tags so nothing from the old row is lost.
41
+ if (tags.length > 0 && !Object.hasOwn(meta, 'tags'))
42
+ meta.tags = tags;
43
+ const base = { meta, ts: row.ts, legacyMemoryId: row.id, ...(embedding ? { embedding } : {}) };
44
+ if (row.source === 'scheduler:wake') {
45
+ const kind = nonEmpty(tags[1]) ? tags[1] : (/^\[scheduler:([^\]]+)\] /.exec(row.content)?.[1] ?? 'wake');
46
+ const prefix = `[scheduler:${kind}] `;
47
+ const content = row.content.startsWith(prefix) ? row.content.slice(prefix.length) : row.content;
48
+ return { ...base, channel: 'scheduler', direction: 'outbound', actor: 'assistant', kind, content, threadId: null };
49
+ }
50
+ if (!row.source.startsWith('telegram:'))
51
+ throw new Error(`memory row ${row.id}: not a chat row (${row.source})`);
52
+ const actor = nonEmpty(meta.actor) ? meta.actor : row.source.slice('telegram:'.length);
53
+ if (!actor)
54
+ throw new Error(`memory row ${row.id}: no actor`);
55
+ const direction = (typeof meta.direction === 'string' && DIRECTIONS.includes(meta.direction))
56
+ ? meta.direction
57
+ : actor === 'owner' ? 'inbound' : 'outbound';
58
+ const kind = nonEmpty(meta.kind) ? meta.kind : 'message';
59
+ const thread = meta.thread_id;
60
+ const threadId = nonEmpty(thread) ? thread : typeof thread === 'number' ? String(thread) : null;
61
+ return { ...base, channel: 'telegram', direction, actor, kind, content: row.content, threadId };
62
+ }
63
+ function batches(items) {
64
+ const out = [];
65
+ for (let i = 0; i < items.length; i += BATCH)
66
+ out.push(items.slice(i, i + BATCH));
67
+ return out;
68
+ }
69
+ export async function migrateChatToTranscript(root, dbPath, deps = {}) {
70
+ const MEMORY = '@justfortytwo/memory', TRANSCRIPT = '@justfortytwo/transcript', PERSONA = '@justfortytwo/persona';
71
+ if (!findSiblingDir(MEMORY, root) || !findSiblingDir(TRANSCRIPT, root))
72
+ return { moved: 0, skipped: true };
73
+ const memory = await loadSibling(MEMORY, root);
74
+ const transcript = await loadSibling(TRANSCRIPT, root);
75
+ if (!memory?.openDb || !memory.runMigrations || !memory.deleteByIds || !transcript?.prepareTranscript || !transcript.createTranscript || !transcript.transcriptHead) {
76
+ throw new Error('Transcript migration requires compatible memory and transcript packages');
77
+ }
78
+ // Persona is optional (no oneiros without it); when installed it must be compatible.
79
+ const persona = findSiblingDir(PERSONA, root) ? await loadSibling(PERSONA, root) : null;
80
+ if (persona && (!persona.readCheckpoint || !persona.initialize))
81
+ throw new Error('Transcript migration requires a compatible persona package');
82
+ const deleteByIds = deps.deleteByIds ?? memory.deleteByIds;
83
+ const path = resolve(root, dbPath);
84
+ mkdirSync(dirname(path), { recursive: true });
85
+ const h = memory.openDb(path);
86
+ try {
87
+ await memory.runMigrations(h.k);
88
+ await transcript.prepareTranscript(h);
89
+ // The transcript only reads/writes rows here; it never embeds during import.
90
+ const log = transcript.createTranscript(h, { embed: async () => { throw new Error('no embedding during migration'); } });
91
+ const rows = h.raw.prepare(`SELECT id, ts, content, source, tags, meta FROM memories
92
+ WHERE substr(source, 1, 9) = 'telegram:' OR source = 'scheduler:wake' ORDER BY id`).all();
93
+ const vec = h.raw.prepare('SELECT embedding FROM memory_vec WHERE rowid = ?');
94
+ const mapped = rows.map((r) => mapChatRow(r, vec.get(BigInt(r.id))?.embedding));
95
+ const importBatch = h.raw.transaction((batch) => { for (const r of batch)
96
+ log.importRow(r); });
97
+ for (const batch of batches(mapped))
98
+ importBatch(batch);
99
+ // Verify before anything leaves memory.
100
+ const byLegacy = h.raw.prepare('SELECT content FROM transcript WHERE legacy_memory_id = ?');
101
+ for (const r of mapped) {
102
+ const t = byLegacy.get(r.legacyMemoryId);
103
+ if (!t || t.content !== r.content)
104
+ throw new Error(`Transcript migration verification failed for memory row ${r.legacyMemoryId}; memory left intact`);
105
+ }
106
+ const ids = mapped.map((r) => r.legacyMemoryId);
107
+ const moved = h.raw.transaction(() => batches(ids).reduce((n, b) => n + deleteByIds(h, b), 0))();
108
+ // The transcript cursor resumes after what oneiros already consumed via memory.
109
+ // Every row NOT consumed (a live row without legacy id, or a legacy row past
110
+ // the memory checkpoint) must stay above the cursor, so the cursor sits just
111
+ // below the lowest such row, else at the head. Live rows can precede migrated
112
+ // ones (e.g. the new bridge ran after a failed update), and then some consumed
113
+ // legacy rows land above the cursor and oneiros re-reads them: the safe
114
+ // direction (re-reading is acceptable, skipping is not), bounded by persona's
115
+ // eligibility and proposal rules.
116
+ const consumed = persona?.readCheckpoint(root);
117
+ if (persona && consumed && !persona.readCheckpoint(root, 'transcript')) {
118
+ const head = transcript.transcriptHead(h);
119
+ const first = h.raw.prepare('SELECT MIN(id) AS id FROM transcript WHERE legacy_memory_id IS NULL OR legacy_memory_id > ?').get(consumed.position);
120
+ persona.initialize(root, { database: head.database, position: first.id === null ? head.position : first.id - 1 }, 'transcript');
121
+ }
122
+ return { moved, skipped: false };
123
+ }
124
+ finally {
125
+ await h.k.destroy();
126
+ h.raw.close();
127
+ }
128
+ }
129
+ /**
130
+ * migrateChatToTranscript for init/update: a failure (malformed legacy row,
131
+ * SQLITE_BUSY, incompatible sibling) is returned as `error` instead of thrown,
132
+ * so the rest of init/update (state ledger, launcher) still completes. The move
133
+ * only deletes from memory after a verified import, so memory stays intact.
134
+ */
135
+ export async function migrateChatSafely(root, dbPath) {
136
+ try {
137
+ return await migrateChatToTranscript(root, dbPath);
138
+ }
139
+ catch (err) {
140
+ return { moved: 0, skipped: true, error: err instanceof Error ? err.message : String(err) };
141
+ }
142
+ }
143
+ //# sourceMappingURL=transcript-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-migration.js","sourceRoot":"","sources":["../src/transcript-migration.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justfortytwo/installer",
3
- "version": "1.0.0-8",
3
+ "version": "1.0.0",
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": {
@@ -47,11 +47,12 @@
47
47
  "fortytwo": {
48
48
  "comment": "Compatibility contract this CLI version was authored against — the SINGLE source of truth for engine sibling versions (deliberately not peerDependencies: npm would hard-fail installer upgrades with ERESOLVE whenever an installed sibling sits outside the new range). init installs these ranges, doctor cross-checks the *installed* siblings against them, update resolves latest-in-range and records the set into .fortytwo/state.json for rollback.",
49
49
  "compat": {
50
- "@justfortytwo/memory": "^0.1.5",
50
+ "@justfortytwo/memory": "1.0.0",
51
51
  "@justfortytwo/gate": "^0.1.0",
52
- "@justfortytwo/persona": "1.0.0-0",
53
- "@justfortytwo/telegram": "1.0.0-1",
54
- "@justfortytwo/scheduler": "1.0.0-1"
52
+ "@justfortytwo/persona": "1.0.0",
53
+ "@justfortytwo/telegram": "1.0.0",
54
+ "@justfortytwo/scheduler": "1.0.0",
55
+ "@justfortytwo/transcript": "^1.0.0"
55
56
  }
56
57
  },
57
58
  "publishConfig": {