@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/README.md +105 -12
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +60 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +22 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +5 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +7 -4
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/update.d.ts +21 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +124 -15
- package/dist/commands/update.js.map +1 -1
- package/dist/oneiros.d.ts +2 -0
- package/dist/oneiros.d.ts.map +1 -0
- package/dist/oneiros.js +28 -0
- package/dist/oneiros.js.map +1 -0
- package/dist/process-identity.d.ts +3 -0
- package/dist/process-identity.d.ts.map +1 -0
- package/dist/process-identity.js +42 -0
- package/dist/process-identity.js.map +1 -0
- package/dist/runtime.d.ts +5 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +17 -5
- package/dist/runtime.js.map +1 -1
- package/dist/transcript-migration.d.ts +58 -0
- package/dist/transcript-migration.d.ts.map +1 -0
- package/dist/transcript-migration.js +143 -0
- package/dist/transcript-migration.js.map +1 -0
- package/package.json +6 -5
package/dist/commands/status.js
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
import { existsSync, readFileSync } from 'node:fs';
|
|
10
10
|
import { join } from 'node:path';
|
|
11
11
|
import { liveRuntime, serviceRunning } from '../runtime.js';
|
|
12
|
-
import { defaultDoctorDeps, HEARTBEAT_STALE_MS } from './doctor.js';
|
|
12
|
+
import { defaultDoctorDeps, extensionWiringProblems, readMcpExtensions, HEARTBEAT_STALE_MS } from './doctor.js';
|
|
13
|
+
import { readInstalledVersion, readSelfCompatRanges } from '../engine.js';
|
|
13
14
|
/** The status lines (pure, for tests). */
|
|
14
15
|
export function statusLines(i) {
|
|
15
16
|
const row = (label, value) => `${label.padEnd(11)}${value}`;
|
|
@@ -25,6 +26,8 @@ export function statusLines(i) {
|
|
|
25
26
|
: hb ? `not running (last heartbeat ${hb.ts})`
|
|
26
27
|
: 'not running'));
|
|
27
28
|
lines.push(row('Memory', i.memoryConfigured ? 'configured via MCP (Claude Code starts it on demand)' : 'not configured (run `fortytwo init`)'));
|
|
29
|
+
for (const p of i.extensionProblems ?? [])
|
|
30
|
+
lines.push(row('Warning', p));
|
|
28
31
|
return lines;
|
|
29
32
|
}
|
|
30
33
|
function memoryConfigured(root) {
|
|
@@ -46,6 +49,7 @@ export async function runStatus(_argv) {
|
|
|
46
49
|
runtime,
|
|
47
50
|
schedulerHeartbeat: defaultDoctorDeps().schedulerHeartbeat(),
|
|
48
51
|
memoryConfigured: memoryConfigured(root),
|
|
52
|
+
extensionProblems: extensionWiringProblems(readMcpExtensions(root), (s) => readInstalledVersion(s, root), readSelfCompatRanges()),
|
|
49
53
|
nowMs: Date.now(),
|
|
50
54
|
});
|
|
51
55
|
process.stdout.write(lines.join('\n') + '\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,mEAAmE;AACnE,4EAA4E;AAC5E,qEAAqE;AAErE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,CAyBjG"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// stop — stop a `fortytwo start` running for this project.
|
|
2
2
|
//
|
|
3
3
|
// Signals ONLY the supervisor recorded in .fortytwo/runtime.json, and only while
|
|
4
|
-
// its heartbeat is fresh (see runtime.ts)
|
|
5
|
-
//
|
|
4
|
+
// its heartbeat is fresh and OS process identity matches (see runtime.ts).
|
|
5
|
+
// It never searches for or kills processes by name. The supervisor
|
|
6
6
|
// then stops its own services. Under Docker/systemd prefer their own stop.
|
|
7
|
-
import {
|
|
7
|
+
import { sameRuntimeProcess, liveRuntime } from '../runtime.js';
|
|
8
8
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
9
9
|
export async function runStop(_argv, opts = {}) {
|
|
10
10
|
const runtime = liveRuntime(process.cwd());
|
|
@@ -13,6 +13,9 @@ export async function runStop(_argv, opts = {}) {
|
|
|
13
13
|
return 0;
|
|
14
14
|
}
|
|
15
15
|
process.stdout.write(`Stopping fortytwo (pid ${runtime.pid})…\n`);
|
|
16
|
+
// Revalidate the original generation immediately before signalling.
|
|
17
|
+
if (!sameRuntimeProcess(runtime))
|
|
18
|
+
return 0;
|
|
16
19
|
try {
|
|
17
20
|
process.kill(runtime.pid, 'SIGTERM');
|
|
18
21
|
}
|
|
@@ -22,7 +25,7 @@ export async function runStop(_argv, opts = {}) {
|
|
|
22
25
|
}
|
|
23
26
|
const deadline = Date.now() + (opts.timeoutMs ?? 20_000);
|
|
24
27
|
while (Date.now() < deadline) {
|
|
25
|
-
if (!
|
|
28
|
+
if (!sameRuntimeProcess(runtime)) {
|
|
26
29
|
process.stdout.write('fortytwo stopped.\n');
|
|
27
30
|
return 0;
|
|
28
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,iFAAiF;AACjF,2EAA2E;AAC3E,mEAAmE;AACnE,2EAA2E;AAE3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEhE,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,oEAAoE;IACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,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,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { type VersionPin, type InstallState } from '../state.js';
|
|
2
2
|
import { type CheckResult } from './doctor.js';
|
|
3
|
+
import { type MigrationResult } from '../transcript-migration.js';
|
|
4
|
+
/**
|
|
5
|
+
* Siblings that extend memory: when memory is installed and this CLI declares
|
|
6
|
+
* one the project lacks, update installs it (it is new to the contract, not a
|
|
7
|
+
* sibling the user chose to omit).
|
|
8
|
+
*/
|
|
9
|
+
export declare const MEMORY_COMPANIONS: readonly string[];
|
|
3
10
|
/** Semver precedence (-1 / 0 / 1), pre-release aware (`1.0.0-0 < 1.0.0`). */
|
|
4
11
|
export declare function compareVersions(a: string, b: string): number;
|
|
5
12
|
/** Highest version in `versions` that satisfies `range`, or null if none do. */
|
|
@@ -11,7 +18,13 @@ export interface InstallResult {
|
|
|
11
18
|
detail: string;
|
|
12
19
|
}
|
|
13
20
|
export interface UpdateDeps {
|
|
21
|
+
/** Running CLI, not the target project package; optional for embedded callers. */
|
|
22
|
+
runningInstallerVersion?: () => string | null;
|
|
23
|
+
persistInstaller?: (exactSpec: string) => InstallResult;
|
|
14
24
|
readState: () => InstallState | null;
|
|
25
|
+
runtimeActive?: () => boolean;
|
|
26
|
+
/** Pre-change sanity check (e.g. .mcp.json parses); a message aborts before anything changes. */
|
|
27
|
+
preflight?: () => string | null;
|
|
15
28
|
installedVersion: (spec: string) => string | null;
|
|
16
29
|
/** spec -> declared semver range (this CLI's fortytwo.compat). */
|
|
17
30
|
compatRanges: Record<string, string>;
|
|
@@ -26,8 +39,8 @@ export interface UpdateDeps {
|
|
|
26
39
|
}>;
|
|
27
40
|
/** Persist the resolved set, rotating current -> previous. */
|
|
28
41
|
record: (pins: VersionPin[]) => void;
|
|
29
|
-
/**
|
|
30
|
-
|
|
42
|
+
/** Reconcile machine-owned runtime assets; never render persona context. */
|
|
43
|
+
reconcile: () => Promise<void>;
|
|
31
44
|
out: (s: string) => void;
|
|
32
45
|
err: (s: string) => void;
|
|
33
46
|
}
|
|
@@ -46,6 +59,12 @@ export declare function performUpdate(deps: UpdateDeps, flags: {
|
|
|
46
59
|
dryRun?: boolean;
|
|
47
60
|
}): Promise<number>;
|
|
48
61
|
export declare function performRollback(deps: RollbackDeps): Promise<number>;
|
|
62
|
+
/**
|
|
63
|
+
* Post-update reconciliation of machine-owned runtime assets. The memory MCP
|
|
64
|
+
* entry is re-wired FIRST (with the transcript extension when installed), so
|
|
65
|
+
* moving chat out of memory never leaves the agent without transcript search.
|
|
66
|
+
*/
|
|
67
|
+
export declare function reconcileRuntime(root: string): Promise<MigrationResult>;
|
|
49
68
|
/** Published versions of a package via `npm view`; [] if unknown/unreachable. */
|
|
50
69
|
export declare function fetchPublishedVersions(pkg: string): Promise<string[]>;
|
|
51
70
|
export declare function runUpdate(argv: string[]): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -3,23 +3,37 @@
|
|
|
3
3
|
// Distribution policy: "semver ranges, latest-compatible". There is NO curated
|
|
4
4
|
// bill-of-materials. update:
|
|
5
5
|
// 1. RESOLVE latest-in-range for every installed @justfortytwo/* sibling
|
|
6
|
-
// (the ranges in this CLI's fortytwo.compat)
|
|
6
|
+
// (the ranges in this CLI's fortytwo.compat), plus any memory companion
|
|
7
|
+
// (transcript) this CLI declares but the project lacks, when memory is
|
|
8
|
+
// installed — otherwise chat would silently stop being recorded.
|
|
7
9
|
// 2. INSTALL that set (npm).
|
|
8
10
|
// 3. ROTATE the ledger (state.json: previous := the pre-update set) the moment
|
|
9
11
|
// the install lands, so rollback always targets the set that was running.
|
|
10
12
|
// 4. POST-VERIFY with doctor. On failure: leave the new set in place but LOUDLY
|
|
11
13
|
// point at `fortytwo rollback` — rollback is MANUAL by design (never auto-
|
|
12
|
-
// revert, so the user can inspect first). On success:
|
|
13
|
-
//
|
|
14
|
+
// revert, so the user can inspect first). On success: reconcile machine-owned
|
|
15
|
+
// runtime assets only, then print doctor's view of the reconciled project.
|
|
16
|
+
// Existing context is never re-rendered by update.
|
|
14
17
|
//
|
|
15
18
|
// rollback re-installs state.json's `previous` set and rotates the ledger back.
|
|
16
19
|
// Both share the resolve/install primitives below and are unit-tested through an
|
|
17
20
|
// injected `*Deps` (so no test touches the network or the real npm).
|
|
18
21
|
import { spawnSync } from 'node:child_process';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
22
|
+
import { isPidAlive, liveRuntime } from '../runtime.js';
|
|
23
|
+
import { HEARTBEAT_STALE_MS } from './doctor.js';
|
|
24
|
+
import { recordVersionSet, readState, } from '../state.js';
|
|
25
|
+
import { compareSemver, readInstalledVersion, readSelfCompatRanges, readSelfVersion, satisfiesRange } from '../engine.js';
|
|
21
26
|
import { runDoctorChecks, defaultDoctorDeps } from './doctor.js';
|
|
22
|
-
import {
|
|
27
|
+
import { reconcileOneiros } from '../oneiros.js';
|
|
28
|
+
import { migrateChatSafely } from '../transcript-migration.js';
|
|
29
|
+
import { readProjectSetting, readMcpJson, writeMcpJson, DEFAULT_DB_PATH, DEFAULT_OLLAMA_BASE_URL, CLI_PACKAGE, cliInstallSpec, TRANSCRIPT_PACKAGE, } from './init.js';
|
|
30
|
+
const MEMORY_PACKAGE = '@justfortytwo/memory';
|
|
31
|
+
/**
|
|
32
|
+
* Siblings that extend memory: when memory is installed and this CLI declares
|
|
33
|
+
* one the project lacks, update installs it (it is new to the contract, not a
|
|
34
|
+
* sibling the user chose to omit).
|
|
35
|
+
*/
|
|
36
|
+
export const MEMORY_COMPANIONS = [TRANSCRIPT_PACKAGE];
|
|
23
37
|
// --- pure: pick the latest published version satisfying a range ---
|
|
24
38
|
/** Semver precedence (-1 / 0 / 1), pre-release aware (`1.0.0-0 < 1.0.0`). */
|
|
25
39
|
export function compareVersions(a, b) {
|
|
@@ -54,14 +68,52 @@ export async function performUpdate(deps, flags) {
|
|
|
54
68
|
deps.err('update: no install found — run `fortytwo init` first.\n');
|
|
55
69
|
return 2;
|
|
56
70
|
}
|
|
71
|
+
if (!flags.dryRun && deps.runtimeActive?.()) {
|
|
72
|
+
deps.err('update: stop the running runtime first (`fortytwo stop`, or your service manager), run `fortytwo update`, then `fortytwo start`. No packages or context were changed.\n');
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
const blocked = deps.preflight?.();
|
|
76
|
+
if (blocked) {
|
|
77
|
+
deps.err(`update: ${blocked}\nNothing was installed or recorded.\n`);
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
if (deps.runningInstallerVersion) {
|
|
81
|
+
const running = deps.runningInstallerVersion();
|
|
82
|
+
const installed = deps.installedVersion(CLI_PACKAGE);
|
|
83
|
+
if (!running || !deps.persistInstaller) {
|
|
84
|
+
deps.err('update: cannot determine or persist the running installer version.\n');
|
|
85
|
+
return 1;
|
|
86
|
+
}
|
|
87
|
+
if (installed && compareVersions(running, installed) < 0) {
|
|
88
|
+
deps.err('update: the project installer is newer than this command. Use the project-local fortytwo update.\n');
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
const spec = cliInstallSpec(running, installed);
|
|
92
|
+
if (spec) {
|
|
93
|
+
deps.out(`update: pin project installer to ${spec}${flags.dryRun ? ' (dry-run)' : ''}\n`);
|
|
94
|
+
if (!flags.dryRun) {
|
|
95
|
+
const result = deps.persistInstaller(spec);
|
|
96
|
+
if (!result.ok) {
|
|
97
|
+
deps.err(`update: installer persistence failed (${result.detail}). Retry update before starting services.\n`);
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
57
103
|
// The engine = the declared compat siblings that are CURRENTLY installed. We
|
|
58
104
|
// upgrade what's there; we don't pull in siblings the user deliberately omitted.
|
|
105
|
+
// Exception: memory companions (transcript) join the set whenever memory is
|
|
106
|
+
// installed, so an update onto a CLI that declares them actually installs them.
|
|
107
|
+
const memoryInstalled = deps.installedVersion(MEMORY_PACKAGE) !== null;
|
|
59
108
|
const ranges = {};
|
|
60
109
|
const current = [];
|
|
61
110
|
for (const [name, range] of Object.entries(deps.compatRanges)) {
|
|
62
111
|
const resolved = deps.installedVersion(name);
|
|
63
|
-
if (resolved === null)
|
|
112
|
+
if (resolved === null) {
|
|
113
|
+
if (memoryInstalled && MEMORY_COMPANIONS.includes(name))
|
|
114
|
+
ranges[name] = range;
|
|
64
115
|
continue;
|
|
116
|
+
}
|
|
65
117
|
ranges[name] = range;
|
|
66
118
|
current.push({ name, range, resolved });
|
|
67
119
|
}
|
|
@@ -73,6 +125,8 @@ export async function performUpdate(deps, flags) {
|
|
|
73
125
|
const versionOf = (pins, name) => pins.find((p) => p.name === name)?.resolved;
|
|
74
126
|
const changed = target.filter((t) => versionOf(current, t.name) !== t.resolved);
|
|
75
127
|
if (changed.length === 0) {
|
|
128
|
+
if (!flags.dryRun)
|
|
129
|
+
await deps.reconcile();
|
|
76
130
|
deps.out('update: already at the latest in-range version:\n' +
|
|
77
131
|
current.map((p) => ` ${p.name}@${p.resolved} (${p.range})`).join('\n') + '\n');
|
|
78
132
|
return 0;
|
|
@@ -80,7 +134,9 @@ export async function performUpdate(deps, flags) {
|
|
|
80
134
|
deps.out('update: resolving latest-in-range →\n' +
|
|
81
135
|
target.map((t) => {
|
|
82
136
|
const from = versionOf(current, t.name);
|
|
83
|
-
|
|
137
|
+
if (!from)
|
|
138
|
+
return ` ${t.name}: ${t.resolved} (new)`;
|
|
139
|
+
return ` ${t.name}: ${from !== t.resolved ? `${from} → ${t.resolved}` : `${t.resolved} (unchanged)`}`;
|
|
84
140
|
}).join('\n') + '\n');
|
|
85
141
|
if (flags.dryRun) {
|
|
86
142
|
deps.out('update: --dry-run, nothing installed.\n');
|
|
@@ -95,14 +151,24 @@ export async function performUpdate(deps, flags) {
|
|
|
95
151
|
}
|
|
96
152
|
// Install landed → rotate the ledger so `previous` = the pre-update set.
|
|
97
153
|
deps.record(target);
|
|
154
|
+
const failed = '\nupdate: installed, but doctor reports required checks FAILED. Inspect, then run `fortytwo rollback` to restore the previous set.\n';
|
|
155
|
+
const pre = await deps.doctor();
|
|
156
|
+
if (!pre.ok) {
|
|
157
|
+
printChecks(pre.results, deps.out);
|
|
158
|
+
deps.err(failed);
|
|
159
|
+
return 1;
|
|
160
|
+
}
|
|
161
|
+
// Reconcile (re-wire .mcp.json, oneiros, chat migration), then report doctor's
|
|
162
|
+
// view of the RECONCILED project: the pre-reconcile run would still flag the
|
|
163
|
+
// extension wiring that reconcile just fixed.
|
|
164
|
+
await deps.reconcile();
|
|
98
165
|
const { results, ok } = await deps.doctor();
|
|
99
166
|
printChecks(results, deps.out);
|
|
100
167
|
if (!ok) {
|
|
101
|
-
deps.err(
|
|
168
|
+
deps.err(failed);
|
|
102
169
|
return 1;
|
|
103
170
|
}
|
|
104
|
-
deps.
|
|
105
|
-
deps.out('\nupdate: healthy — engine upgraded.\n');
|
|
171
|
+
deps.out('\nupdate: healthy — engine upgraded. Start services with `fortytwo start` (or your service manager).\n');
|
|
106
172
|
return 0;
|
|
107
173
|
}
|
|
108
174
|
export async function performRollback(deps) {
|
|
@@ -129,6 +195,27 @@ export async function performRollback(deps) {
|
|
|
129
195
|
return ok ? 0 : 1;
|
|
130
196
|
}
|
|
131
197
|
// --- real wiring ---
|
|
198
|
+
/** The Ollama URL the memory server runs with now (its .mcp.json env), else .env, else the default. */
|
|
199
|
+
function currentOllamaBaseUrl(root) {
|
|
200
|
+
const cfg = readMcpJson(root);
|
|
201
|
+
const url = cfg?.mcpServers?.['fortytwo-memory']?.env?.OLLAMA_BASE_URL;
|
|
202
|
+
if (typeof url === 'string' && url.trim())
|
|
203
|
+
return url;
|
|
204
|
+
return readProjectSetting('OLLAMA_BASE_URL', root) ?? DEFAULT_OLLAMA_BASE_URL;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Post-update reconciliation of machine-owned runtime assets. The memory MCP
|
|
208
|
+
* entry is re-wired FIRST (with the transcript extension when installed), so
|
|
209
|
+
* moving chat out of memory never leaves the agent without transcript search.
|
|
210
|
+
*/
|
|
211
|
+
export async function reconcileRuntime(root) {
|
|
212
|
+
const dbPath = readProjectSetting('DB_PATH', root) ?? DEFAULT_DB_PATH;
|
|
213
|
+
writeMcpJson(root, dbPath, currentOllamaBaseUrl(root));
|
|
214
|
+
await reconcileOneiros(root, dbPath);
|
|
215
|
+
// A failed migration (malformed row, SQLITE_BUSY) is reported, never fatal:
|
|
216
|
+
// memory stays intact and a later init/update retries it.
|
|
217
|
+
return migrateChatSafely(root, dbPath);
|
|
218
|
+
}
|
|
132
219
|
/** Published versions of a package via `npm view`; [] if unknown/unreachable. */
|
|
133
220
|
export function fetchPublishedVersions(pkg) {
|
|
134
221
|
return Promise.resolve().then(() => {
|
|
@@ -144,8 +231,8 @@ export function fetchPublishedVersions(pkg) {
|
|
|
144
231
|
}
|
|
145
232
|
});
|
|
146
233
|
}
|
|
147
|
-
function npmInstall(specs, root) {
|
|
148
|
-
const res = spawnSync('npm', ['install', '--no-audit', '--no-fund', ...specs], { cwd: root, stdio: 'inherit' });
|
|
234
|
+
function npmInstall(specs, root, flags = []) {
|
|
235
|
+
const res = spawnSync('npm', ['install', '--no-audit', '--no-fund', ...flags, ...specs], { cwd: root, stdio: 'inherit' });
|
|
149
236
|
if (res.status === 0)
|
|
150
237
|
return { ok: true, detail: 'ok' };
|
|
151
238
|
return { ok: false, detail: res.error ? res.error.message : `npm exited ${res.status}` };
|
|
@@ -156,15 +243,37 @@ function parseUpdateArgs(argv) {
|
|
|
156
243
|
export async function runUpdate(argv) {
|
|
157
244
|
const root = process.cwd();
|
|
158
245
|
const deps = {
|
|
246
|
+
runningInstallerVersion: readSelfVersion,
|
|
247
|
+
persistInstaller: (spec) => npmInstall([spec], root, ['--save-exact']),
|
|
159
248
|
readState: () => readState(root),
|
|
249
|
+
preflight: () => {
|
|
250
|
+
try {
|
|
251
|
+
readMcpJson(root);
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
return err.message;
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
runtimeActive: () => {
|
|
259
|
+
if (liveRuntime(root))
|
|
260
|
+
return true;
|
|
261
|
+
const heartbeat = defaultDoctorDeps().schedulerHeartbeat();
|
|
262
|
+
return !!heartbeat && Date.now() - Date.parse(heartbeat.ts) <= HEARTBEAT_STALE_MS && isPidAlive(heartbeat.pid);
|
|
263
|
+
},
|
|
160
264
|
installedVersion: readInstalledVersion,
|
|
161
265
|
compatRanges: readSelfCompatRanges(),
|
|
162
266
|
fetchVersions: fetchPublishedVersions,
|
|
163
267
|
install: (specs) => npmInstall(specs, root),
|
|
164
268
|
doctor: () => runDoctorChecks(defaultDoctorDeps()),
|
|
165
269
|
record: (pins) => { recordVersionSet(pins, root); },
|
|
166
|
-
|
|
167
|
-
|
|
270
|
+
reconcile: async () => {
|
|
271
|
+
const { moved, error } = await reconcileRuntime(root);
|
|
272
|
+
if (moved > 0)
|
|
273
|
+
process.stdout.write(`update: moved ${moved} chat row(s) from memory to the transcript\n`);
|
|
274
|
+
if (error)
|
|
275
|
+
process.stderr.write(`update: chat migration skipped: ${error} (memory left intact; fix the cause and re-run \`fortytwo update\`)\n`);
|
|
276
|
+
},
|
|
168
277
|
out: (s) => process.stdout.write(s),
|
|
169
278
|
err: (s) => process.stderr.write(s),
|
|
170
279
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oneiros.d.ts","sourceRoot":"","sources":["../src/oneiros.ts"],"names":[],"mappings":"AAgBA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAelF"}
|
package/dist/oneiros.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Additive runtime reconciliation: never renders or writes owner context.
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { findSiblingDir, loadSibling } from './engine.js';
|
|
5
|
+
export async function reconcileOneiros(root, dbPath) {
|
|
6
|
+
// Respect intentionally partial installs. Installed-but-broken packages fail loud.
|
|
7
|
+
const specs = ['@justfortytwo/persona', '@justfortytwo/memory', '@justfortytwo/scheduler'];
|
|
8
|
+
if (specs.some(s => !findSiblingDir(s, root)))
|
|
9
|
+
return;
|
|
10
|
+
const persona = await loadSibling(specs[0], root);
|
|
11
|
+
const memory = await loadSibling(specs[1], root);
|
|
12
|
+
const scheduler = await loadSibling(specs[2], root);
|
|
13
|
+
if (!persona?.initialize || !memory?.memoryHead || !scheduler?.seedOneiros)
|
|
14
|
+
throw new Error('Oneiros requires compatible persona, memory and scheduler packages');
|
|
15
|
+
const path = resolve(root, dbPath);
|
|
16
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
17
|
+
const h = memory.openDb(path);
|
|
18
|
+
try {
|
|
19
|
+
await memory.runMigrations(h.k);
|
|
20
|
+
persona.initialize(root, memory.memoryHead(h));
|
|
21
|
+
scheduler.seedOneiros(h, new Date().toISOString(), scheduler.recurrenceNext);
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
await h.k.destroy();
|
|
25
|
+
h.raw.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=oneiros.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oneiros.js","sourceRoot":"","sources":["../src/oneiros.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAa1D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAc;IACjE,mFAAmF;IACnF,MAAM,KAAK,GAAG,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;IAC3F,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC;QAAE,OAAO;IACrD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAU,KAAK,CAAC,CAAC,CAAE,EAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAS,KAAK,CAAC,CAAC,CAAE,EAAC,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,WAAW,CAAY,KAAK,CAAC,CAAC,CAAE,EAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAClK,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAC,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,SAAS,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7E,CAAC;YAAS,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-identity.d.ts","sourceRoot":"","sources":["../src/process-identity.ts"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,GAAG,IAAI,CA6B5G"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// OS process generation identity, independent of the project's heartbeat.
|
|
2
|
+
import { readFileSync, readlinkSync } from 'node:fs';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
/** null means identity cannot be established; never fall back to PID existence. */
|
|
5
|
+
export function readProcessIdentity(pid, platform = process.platform) {
|
|
6
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
if (platform === 'linux') {
|
|
10
|
+
const stat = readFileSync(`/proc/${pid}/stat`, 'utf8');
|
|
11
|
+
// comm (field 2) is parenthesized, but may itself contain ')' or whitespace.
|
|
12
|
+
const end = stat.lastIndexOf(')');
|
|
13
|
+
if (!stat.startsWith(`${pid} (`) || end < 0)
|
|
14
|
+
return null;
|
|
15
|
+
const fields = stat.slice(end + 1).trim().split(/\s+/);
|
|
16
|
+
const start = fields[19]; // fields[0] is state (field 3); starttime is field 22
|
|
17
|
+
if (!start || !/^\d+$/.test(start) || ['Z', 'X', 'x'].includes(fields[0] ?? ''))
|
|
18
|
+
return null;
|
|
19
|
+
const boot = readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim();
|
|
20
|
+
const namespace = readlinkSync(`/proc/${pid}/ns/pid`);
|
|
21
|
+
if (!boot || !/^pid:\[\d+\]$/.test(namespace))
|
|
22
|
+
return null;
|
|
23
|
+
return `linux:${boot}:${namespace}:${start}`;
|
|
24
|
+
}
|
|
25
|
+
// BSD/macOS ps exposes an OS-derived start time (second resolution).
|
|
26
|
+
// Fix locale/timezone so callers with different environments compare equally.
|
|
27
|
+
const result = spawnSync('ps', ['-p', String(pid), '-o', 'lstart='], {
|
|
28
|
+
encoding: 'utf8', timeout: 2000, env: { ...process.env, LC_ALL: 'C', TZ: 'UTC' },
|
|
29
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
30
|
+
});
|
|
31
|
+
if (result.error || result.status !== 0)
|
|
32
|
+
return null;
|
|
33
|
+
const start = result.stdout.trim().replace(/\s+/g, ' ');
|
|
34
|
+
if (!/^[A-Z][a-z]{2} [A-Z][a-z]{2} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}$/.test(start))
|
|
35
|
+
return null;
|
|
36
|
+
return `ps:${platform}:${start}`;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=process-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../src/process-identity.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,WAA4B,OAAO,CAAC,QAAQ;IAC3F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC;QACH,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;YACvD,6EAA6E;YAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,sDAAsD;YAChF,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7F,MAAM,IAAI,GAAG,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5E,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3D,OAAO,SAAS,IAAI,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,qEAAqE;QACrE,8EAA8E;QAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;YACnE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;YAChF,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,+DAA+D,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9F,OAAO,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export declare function planServices(root: string, env: NodeJS.ProcessEnv, specs
|
|
|
33
33
|
export interface RuntimeState {
|
|
34
34
|
/** The `fortytwo start` supervisor process. */
|
|
35
35
|
pid: number;
|
|
36
|
+
/** OS process generation; absent in legacy records, which are not trusted. */
|
|
37
|
+
processIdentity?: string;
|
|
36
38
|
startedAt: string;
|
|
37
39
|
/** Refreshed every few seconds while the supervisor is alive. */
|
|
38
40
|
heartbeatAt: string;
|
|
@@ -48,7 +50,9 @@ export declare const RUNTIME_STALE_MS = 30000;
|
|
|
48
50
|
export declare function runtimeStatePath(root: string): string;
|
|
49
51
|
export declare function readRuntimeState(root: string): RuntimeState | null;
|
|
50
52
|
export declare function isPidAlive(pid: number): boolean;
|
|
51
|
-
/**
|
|
53
|
+
/** Match a recorded process generation, including when waiting for shutdown. */
|
|
54
|
+
export declare function sameRuntimeProcess(state: RuntimeState, alive?: (pid: number) => boolean, identity?: (pid: number) => string | null): boolean;
|
|
55
|
+
/** A live supervisor requires a fresh heartbeat AND the same OS process. */
|
|
52
56
|
export declare function liveRuntime(root: string, nowMs?: number, alive?: (pid: number) => boolean): RuntimeState | null;
|
|
53
57
|
/** True when a live `fortytwo start` is currently running the named service. */
|
|
54
58
|
export declare function serviceRunning(state: RuntimeState | null, name: string): boolean;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|