@justfortytwo/installer 1.0.0-0 → 1.0.0-10
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 +163 -11
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +11 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/forget.d.ts.map +1 -1
- package/dist/commands/forget.js +6 -4
- package/dist/commands/forget.js.map +1 -1
- package/dist/commands/init.d.ts +86 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +254 -56
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pair.d.ts +8 -0
- package/dist/commands/pair.d.ts.map +1 -1
- package/dist/commands/pair.js +37 -3
- package/dist/commands/pair.js.map +1 -1
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +35 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +14 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +54 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +4 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +34 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/update.d.ts +6 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +50 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/engine.d.ts +32 -8
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +121 -29
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -6
- package/dist/index.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/render.d.ts +4 -3
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +13 -10
- package/dist/render.js.map +1 -1
- package/dist/runtime.d.ts +75 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +219 -0
- package/dist/runtime.js.map +1 -0
- package/dist/shim.d.ts +52 -0
- package/dist/shim.d.ts.map +1 -0
- package/dist/shim.js +163 -0
- package/dist/shim.js.map +1 -0
- package/package.json +7 -31
package/dist/shim.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Identifies a launcher we wrote, so we only ever replace our own file. */
|
|
2
|
+
export declare const SHIM_MARKER = "fortytwo-shim";
|
|
3
|
+
export declare const SHIM_SCRIPT = "#!/bin/sh\n# fortytwo \u2014 user-level launcher installed by @justfortytwo/installer (fortytwo-shim v2).\n# It holds no version and no project path. It finds the Fortytwo project you are\n# in (the nearest directory, from here upward, that contains .fortytwo/) and runs\n# that project's own CLI, node_modules/.bin/fortytwo, from the project root \u2014\n# only if both are owned by you.\n# Safe to delete: `npx @justfortytwo/installer init` puts it back.\nd=$(pwd -P) || exit 1\nwhile :; do\n if [ -d \"$d/.fortytwo\" ]; then\n if [ -x \"$d/node_modules/.bin/fortytwo\" ]; then\n # Only run code you own: a .fortytwo/ or CLI planted by another user (e.g.\n # in a shared /tmp above you) is refused, never executed.\n if [ ! -O \"$d/.fortytwo\" ] || [ ! -O \"$d/node_modules/.bin/fortytwo\" ]; then\n echo \"fortytwo: refusing to run $d/node_modules/.bin/fortytwo: it or $d/.fortytwo is not owned by you.\" >&2\n exit 1\n fi\n cd \"$d\" && exec \"$d/node_modules/.bin/fortytwo\" \"$@\"\n fi\n echo \"fortytwo: $d is a Fortytwo project, but its CLI is not installed there.\" >&2\n echo \"Install it with: (cd \\\"$d\\\" && npm install @justfortytwo/installer)\" >&2\n exit 1\n fi\n [ \"$d\" = / ] && break\n d=$(dirname \"$d\")\ndone\necho \"fortytwo: not inside a Fortytwo project (no .fortytwo/ here or in any parent directory).\" >&2\necho \"Create one with: npx @justfortytwo/installer init\" >&2\nexit 1\n";
|
|
4
|
+
export type ShimResult = {
|
|
5
|
+
status: 'installed' | 'updated' | 'unchanged';
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
/** A `fortytwo` we did not write is in the way (user file, global npm install): left alone. */
|
|
9
|
+
| {
|
|
10
|
+
status: 'foreign';
|
|
11
|
+
path: string;
|
|
12
|
+
}
|
|
13
|
+
/** No writable directory on PATH; nothing written. */
|
|
14
|
+
| {
|
|
15
|
+
status: 'no-dir';
|
|
16
|
+
} | {
|
|
17
|
+
status: 'unsupported';
|
|
18
|
+
platform: string;
|
|
19
|
+
};
|
|
20
|
+
export interface ShimEnv {
|
|
21
|
+
home: string;
|
|
22
|
+
/** The user's PATH. */
|
|
23
|
+
pathEnv: string;
|
|
24
|
+
platform: NodeJS.Platform;
|
|
25
|
+
/** FORTYTWO_BIN_DIR: install into exactly this directory (created if needed). */
|
|
26
|
+
override?: string;
|
|
27
|
+
/** npm's global bin directory, if known (looked up lazily, last resort). */
|
|
28
|
+
npmGlobalBin?: () => string | null;
|
|
29
|
+
}
|
|
30
|
+
export declare function isOurShim(path: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The user's own PATH entries. Entries npm adds while running a bin
|
|
33
|
+
* (node_modules/.bin of the project or of the npx cache) are not the user's
|
|
34
|
+
* PATH and vanish once the command exits, so they never count.
|
|
35
|
+
*/
|
|
36
|
+
export declare function userPathDirs(pathEnv: string): string[];
|
|
37
|
+
/** The first executable `name` on the user's PATH, or null. */
|
|
38
|
+
export declare function findOnPath(name: string, pathEnv: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Where to put the launcher: the first of ~/.local/bin, ~/bin, npm's global bin
|
|
41
|
+
* directory that is already on PATH and writable. null if none is.
|
|
42
|
+
*/
|
|
43
|
+
export declare function chooseShimDir(env: ShimEnv): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Install or refresh the launcher. Idempotent; never replaces a file it did not
|
|
46
|
+
* write. A launcher already on PATH (ours) is refreshed in place rather than
|
|
47
|
+
* duplicated elsewhere.
|
|
48
|
+
*/
|
|
49
|
+
export declare function installShim(env: ShimEnv): ShimResult;
|
|
50
|
+
/** `npm prefix -g`/bin — where npm itself puts user commands (on PATH wherever npm works). */
|
|
51
|
+
export declare function npmGlobalBin(): string | null;
|
|
52
|
+
//# sourceMappingURL=shim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shim.d.ts","sourceRoot":"","sources":["../src/shim.ts"],"names":[],"mappings":"AAmBA,4EAA4E;AAC5E,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,WAAW,i8CA6BvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACjE,+FAA+F;GAC7F;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACrC,sDAAsD;GACpD;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/C;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAItD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQvE;AAYD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAYzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA4BpD;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAI5C"}
|
package/dist/shim.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// shim.ts — the user-level `fortytwo` command.
|
|
2
|
+
//
|
|
3
|
+
// `npx @justfortytwo/installer init` runs from npm's temporary exec cache, so
|
|
4
|
+
// nothing it brings along survives the command. init therefore (a) installs the
|
|
5
|
+
// CLI into the project itself (node_modules/.bin/fortytwo, pinned in
|
|
6
|
+
// package-lock.json) and (b) drops this tiny POSIX launcher into a directory
|
|
7
|
+
// that is ALREADY on the user's PATH. The launcher carries no version and no
|
|
8
|
+
// project path: it finds the Fortytwo project the user is in (the nearest
|
|
9
|
+
// directory, from cwd upward, containing .fortytwo/) and execs THAT project's
|
|
10
|
+
// own CLI from the project root. One launcher serves any number of projects,
|
|
11
|
+
// each running its own pinned CLI version.
|
|
12
|
+
//
|
|
13
|
+
// We never edit shell rc files or PATH. If no suitable directory is on PATH,
|
|
14
|
+
// init says so and the project-local `npx fortytwo` keeps working.
|
|
15
|
+
import { accessSync, chmodSync, constants, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync } from 'node:fs';
|
|
16
|
+
import { spawnSync } from 'node:child_process';
|
|
17
|
+
import { delimiter, join, resolve } from 'node:path';
|
|
18
|
+
/** Identifies a launcher we wrote, so we only ever replace our own file. */
|
|
19
|
+
export const SHIM_MARKER = 'fortytwo-shim';
|
|
20
|
+
export const SHIM_SCRIPT = `#!/bin/sh
|
|
21
|
+
# fortytwo — user-level launcher installed by @justfortytwo/installer (${SHIM_MARKER} v2).
|
|
22
|
+
# It holds no version and no project path. It finds the Fortytwo project you are
|
|
23
|
+
# in (the nearest directory, from here upward, that contains .fortytwo/) and runs
|
|
24
|
+
# that project's own CLI, node_modules/.bin/fortytwo, from the project root —
|
|
25
|
+
# only if both are owned by you.
|
|
26
|
+
# Safe to delete: \`npx @justfortytwo/installer init\` puts it back.
|
|
27
|
+
d=$(pwd -P) || exit 1
|
|
28
|
+
while :; do
|
|
29
|
+
if [ -d "$d/.fortytwo" ]; then
|
|
30
|
+
if [ -x "$d/node_modules/.bin/fortytwo" ]; then
|
|
31
|
+
# Only run code you own: a .fortytwo/ or CLI planted by another user (e.g.
|
|
32
|
+
# in a shared /tmp above you) is refused, never executed.
|
|
33
|
+
if [ ! -O "$d/.fortytwo" ] || [ ! -O "$d/node_modules/.bin/fortytwo" ]; then
|
|
34
|
+
echo "fortytwo: refusing to run $d/node_modules/.bin/fortytwo: it or $d/.fortytwo is not owned by you." >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
cd "$d" && exec "$d/node_modules/.bin/fortytwo" "$@"
|
|
38
|
+
fi
|
|
39
|
+
echo "fortytwo: $d is a Fortytwo project, but its CLI is not installed there." >&2
|
|
40
|
+
echo "Install it with: (cd \\"$d\\" && npm install @justfortytwo/installer)" >&2
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
[ "$d" = / ] && break
|
|
44
|
+
d=$(dirname "$d")
|
|
45
|
+
done
|
|
46
|
+
echo "fortytwo: not inside a Fortytwo project (no .fortytwo/ here or in any parent directory)." >&2
|
|
47
|
+
echo "Create one with: npx @justfortytwo/installer init" >&2
|
|
48
|
+
exit 1
|
|
49
|
+
`;
|
|
50
|
+
export function isOurShim(path) {
|
|
51
|
+
try {
|
|
52
|
+
return readFileSync(path, 'utf8').slice(0, 512).includes(SHIM_MARKER);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function canonical(p) {
|
|
59
|
+
try {
|
|
60
|
+
return realpathSync(p);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return resolve(p);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The user's own PATH entries. Entries npm adds while running a bin
|
|
68
|
+
* (node_modules/.bin of the project or of the npx cache) are not the user's
|
|
69
|
+
* PATH and vanish once the command exits, so they never count.
|
|
70
|
+
*/
|
|
71
|
+
export function userPathDirs(pathEnv) {
|
|
72
|
+
return pathEnv
|
|
73
|
+
.split(delimiter)
|
|
74
|
+
.filter((d) => d && !/[\\/]node_modules[\\/]\.bin[\\/]?$/.test(d) && !/[\\/]_npx[\\/]/.test(d));
|
|
75
|
+
}
|
|
76
|
+
/** The first executable `name` on the user's PATH, or null. */
|
|
77
|
+
export function findOnPath(name, pathEnv) {
|
|
78
|
+
for (const dir of userPathDirs(pathEnv)) {
|
|
79
|
+
const p = join(dir, name);
|
|
80
|
+
try {
|
|
81
|
+
if (statSync(p).isFile()) {
|
|
82
|
+
accessSync(p, constants.X_OK);
|
|
83
|
+
return p;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch { /* not here */ }
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
function writableDir(dir) {
|
|
91
|
+
try {
|
|
92
|
+
mkdirSync(dir, { recursive: true });
|
|
93
|
+
accessSync(dir, constants.W_OK);
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Where to put the launcher: the first of ~/.local/bin, ~/bin, npm's global bin
|
|
102
|
+
* directory that is already on PATH and writable. null if none is.
|
|
103
|
+
*/
|
|
104
|
+
export function chooseShimDir(env) {
|
|
105
|
+
const onPath = new Set(userPathDirs(env.pathEnv).map(canonical));
|
|
106
|
+
const candidates = [
|
|
107
|
+
() => join(env.home, '.local', 'bin'),
|
|
108
|
+
() => join(env.home, 'bin'),
|
|
109
|
+
() => env.npmGlobalBin?.() ?? null,
|
|
110
|
+
];
|
|
111
|
+
for (const next of candidates) {
|
|
112
|
+
const dir = next();
|
|
113
|
+
if (dir && onPath.has(canonical(dir)) && writableDir(dir))
|
|
114
|
+
return dir;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Install or refresh the launcher. Idempotent; never replaces a file it did not
|
|
120
|
+
* write. A launcher already on PATH (ours) is refreshed in place rather than
|
|
121
|
+
* duplicated elsewhere.
|
|
122
|
+
*/
|
|
123
|
+
export function installShim(env) {
|
|
124
|
+
if (env.platform === 'win32')
|
|
125
|
+
return { status: 'unsupported', platform: env.platform };
|
|
126
|
+
let target;
|
|
127
|
+
if (env.override) {
|
|
128
|
+
if (!writableDir(env.override))
|
|
129
|
+
return { status: 'no-dir' };
|
|
130
|
+
target = join(env.override, 'fortytwo');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const existing = findOnPath('fortytwo', env.pathEnv);
|
|
134
|
+
if (existing) {
|
|
135
|
+
if (!isOurShim(existing))
|
|
136
|
+
return { status: 'foreign', path: existing };
|
|
137
|
+
target = existing;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const dir = chooseShimDir(env);
|
|
141
|
+
if (!dir)
|
|
142
|
+
return { status: 'no-dir' };
|
|
143
|
+
target = join(dir, 'fortytwo');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const present = existsSync(target);
|
|
147
|
+
if (present && !isOurShim(target))
|
|
148
|
+
return { status: 'foreign', path: target };
|
|
149
|
+
if (present && readFileSync(target, 'utf8') === SHIM_SCRIPT)
|
|
150
|
+
return { status: 'unchanged', path: target };
|
|
151
|
+
const tmp = `${target}.${process.pid}.tmp`;
|
|
152
|
+
writeFileSync(tmp, SHIM_SCRIPT, { encoding: 'utf8', mode: 0o755 });
|
|
153
|
+
chmodSync(tmp, 0o755);
|
|
154
|
+
renameSync(tmp, target);
|
|
155
|
+
return { status: present ? 'updated' : 'installed', path: target };
|
|
156
|
+
}
|
|
157
|
+
/** `npm prefix -g`/bin — where npm itself puts user commands (on PATH wherever npm works). */
|
|
158
|
+
export function npmGlobalBin() {
|
|
159
|
+
const res = spawnSync('npm', ['prefix', '-g'], { encoding: 'utf8' });
|
|
160
|
+
const prefix = res.status === 0 ? res.stdout.trim() : '';
|
|
161
|
+
return prefix ? join(prefix, 'bin') : null;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=shim.js.map
|
package/dist/shim.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shim.js","sourceRoot":"","sources":["../src/shim.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justfortytwo/installer",
|
|
3
|
-
"version": "1.0.0-
|
|
4
|
-
"description": "All-in-one installer and lifecycle CLI for fortytwo
|
|
3
|
+
"version": "1.0.0-10",
|
|
4
|
+
"description": "All-in-one installer and lifecycle CLI for fortytwo \u2014 scaffolds the persona surface and provisions the npm engine (memory MCP, safety gate, channel adapters, embedder).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Enrico Deleo",
|
|
@@ -44,38 +44,14 @@
|
|
|
44
44
|
"@types/node": "^20.0.0",
|
|
45
45
|
"vitest": "^2.1.0"
|
|
46
46
|
},
|
|
47
|
-
"peerDependencies": {
|
|
48
|
-
"@justfortytwo/memory": "^0.1.5",
|
|
49
|
-
"@justfortytwo/gate": "^0.1.0",
|
|
50
|
-
"@justfortytwo/persona": "^0.1.0",
|
|
51
|
-
"@justfortytwo/telegram": "1.0.0-0",
|
|
52
|
-
"@justfortytwo/scheduler": "^0.1.0"
|
|
53
|
-
},
|
|
54
|
-
"peerDependenciesMeta": {
|
|
55
|
-
"@justfortytwo/memory": {
|
|
56
|
-
"optional": true
|
|
57
|
-
},
|
|
58
|
-
"@justfortytwo/gate": {
|
|
59
|
-
"optional": true
|
|
60
|
-
},
|
|
61
|
-
"@justfortytwo/persona": {
|
|
62
|
-
"optional": true
|
|
63
|
-
},
|
|
64
|
-
"@justfortytwo/telegram": {
|
|
65
|
-
"optional": true
|
|
66
|
-
},
|
|
67
|
-
"@justfortytwo/scheduler": {
|
|
68
|
-
"optional": true
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
47
|
"fortytwo": {
|
|
72
|
-
"comment": "Compatibility contract this CLI version was authored against. doctor cross-checks the *installed*
|
|
48
|
+
"comment": "Compatibility contract this CLI version was authored against \u2014 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.",
|
|
73
49
|
"compat": {
|
|
74
|
-
"@justfortytwo/memory": "
|
|
50
|
+
"@justfortytwo/memory": "1.0.0-2",
|
|
75
51
|
"@justfortytwo/gate": "^0.1.0",
|
|
76
|
-
"@justfortytwo/persona": "
|
|
77
|
-
"@justfortytwo/telegram": "1.0.0-
|
|
78
|
-
"@justfortytwo/scheduler": "
|
|
52
|
+
"@justfortytwo/persona": "1.0.0-2",
|
|
53
|
+
"@justfortytwo/telegram": "1.0.0-2",
|
|
54
|
+
"@justfortytwo/scheduler": "1.0.0-3"
|
|
79
55
|
}
|
|
80
56
|
},
|
|
81
57
|
"publishConfig": {
|