@tryglen/cli 0.5.1 → 0.6.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 +3 -3
- package/dist/_utils/agents-table.d.ts +10 -0
- package/dist/_utils/agents-table.js +26 -0
- package/dist/_utils/agents-table.js.map +1 -0
- package/dist/_utils/cli-error.d.ts +11 -0
- package/dist/_utils/cli-error.js +24 -0
- package/dist/_utils/cli-error.js.map +1 -0
- package/dist/_utils/codex-app-server.js +4 -1
- package/dist/_utils/codex-app-server.js.map +1 -1
- package/dist/_utils/config.js +3 -1
- package/dist/_utils/config.js.map +1 -1
- package/dist/_utils/credentials.d.ts +1 -1
- package/dist/_utils/credentials.js +8 -3
- package/dist/_utils/credentials.js.map +1 -1
- package/dist/_utils/find-bin.d.ts +6 -0
- package/dist/_utils/find-bin.js +85 -0
- package/dist/_utils/find-bin.js.map +1 -0
- package/dist/_utils/http.d.ts +10 -3
- package/dist/_utils/http.js +56 -5
- package/dist/_utils/http.js.map +1 -1
- package/dist/_utils/loopback-server.d.ts +1 -1
- package/dist/_utils/loopback-server.js +17 -2
- package/dist/_utils/loopback-server.js.map +1 -1
- package/dist/_utils/open-browser.js +3 -0
- package/dist/_utils/open-browser.js.map +1 -1
- package/dist/_utils/plugin-status.d.ts +4 -0
- package/dist/_utils/plugin-status.js +23 -0
- package/dist/_utils/plugin-status.js.map +1 -0
- package/dist/_utils/run-bin.d.ts +13 -0
- package/dist/_utils/run-bin.js +51 -0
- package/dist/_utils/run-bin.js.map +1 -0
- package/dist/_utils/state-line.js +3 -1
- package/dist/_utils/state-line.js.map +1 -1
- package/dist/_utils/state.d.ts +1 -1
- package/dist/_utils/state.js +8 -2
- package/dist/_utils/state.js.map +1 -1
- package/dist/_utils/update.d.ts +20 -2
- package/dist/_utils/update.js +111 -15
- package/dist/_utils/update.js.map +1 -1
- package/dist/_utils/version.js +12 -1
- package/dist/_utils/version.js.map +1 -1
- package/dist/_utils/which.d.ts +3 -2
- package/dist/_utils/which.js +5 -12
- package/dist/_utils/which.js.map +1 -1
- package/dist/bin.js +44 -22
- package/dist/bin.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -3
- package/dist/commands/doctor.js +68 -54
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/incognito.d.ts +2 -1
- package/dist/commands/incognito.js +16 -4
- package/dist/commands/incognito.js.map +1 -1
- package/dist/commands/ingest.d.ts +1 -5
- package/dist/commands/ingest.js +47 -16
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/install.d.ts +5 -1
- package/dist/commands/install.js +121 -81
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.js +41 -10
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +2 -1
- package/dist/commands/logout.js +20 -5
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/onboard.d.ts +2 -1
- package/dist/commands/onboard.js +7 -3
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/org.d.ts +3 -2
- package/dist/commands/org.js +40 -9
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/search.d.ts +2 -4
- package/dist/commands/search.js +25 -16
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session-start.d.ts +6 -3
- package/dist/commands/session-start.js +16 -6
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/status.d.ts +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.d.ts +7 -5
- package/dist/commands/statusline.js +18 -8
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/uninstall.d.ts +2 -1
- package/dist/commands/uninstall.js +8 -3
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +10 -3
- package/dist/commands/update.js +111 -12
- package/dist/commands/update.js.map +1 -1
- package/package.json +1 -1
package/dist/_utils/state.d.ts
CHANGED
|
@@ -8,6 +8,6 @@ type GlenState = {
|
|
|
8
8
|
declare const statePath: () => string;
|
|
9
9
|
declare const readState: () => Promise<GlenState | null>;
|
|
10
10
|
declare const writeState: (state: GlenState) => Promise<Result<void, unknown>>;
|
|
11
|
-
declare const clearState: () => Promise<void
|
|
11
|
+
declare const clearState: () => Promise<Result<void, unknown>>;
|
|
12
12
|
export { statePath, readState, writeState, clearState };
|
|
13
13
|
export type { GlenState };
|
package/dist/_utils/state.js
CHANGED
|
@@ -25,7 +25,8 @@ const writeState = async (state) => {
|
|
|
25
25
|
const mk = await fromPromise(mkdir(dirname(filePath), { recursive: true, mode: 0o700 }));
|
|
26
26
|
if (!mk.ok)
|
|
27
27
|
return mk;
|
|
28
|
-
|
|
28
|
+
// pid-suffixed so concurrent writers never clobber each other's tmp file.
|
|
29
|
+
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
29
30
|
const w = await fromPromise(writeFile(tmp, JSON.stringify(state, null, 2)));
|
|
30
31
|
if (!w.ok)
|
|
31
32
|
return w;
|
|
@@ -34,8 +35,13 @@ const writeState = async (state) => {
|
|
|
34
35
|
return mv;
|
|
35
36
|
return { ok: true, value: undefined };
|
|
36
37
|
};
|
|
38
|
+
// ENOENT counts as success (nothing to clear); any other failure is returned
|
|
39
|
+
// so the caller can tell the user the file is still on disk.
|
|
37
40
|
const clearState = async () => {
|
|
38
|
-
await fromPromise(unlink(statePath()));
|
|
41
|
+
const r = await fromPromise(unlink(statePath()));
|
|
42
|
+
if (!r.ok && r.error.code !== "ENOENT")
|
|
43
|
+
return r;
|
|
44
|
+
return { ok: true, value: undefined };
|
|
39
45
|
};
|
|
40
46
|
export { statePath, readState, writeState, clearState };
|
|
41
47
|
//# sourceMappingURL=state.js.map
|
package/dist/_utils/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/_utils/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAU1C,MAAM,SAAS,GAAG,GAAW,EAAE,CAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAExE,MAAM,SAAS,GAAG,KAAK,IAA+B,EAAE;IACtD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAY,CAAC,CAC1C,CACF,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAuC,CAAC;IACzD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,aAAa,EAAE,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC3E,aAAa,EAAE,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC3E,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,EAAE,KAAgB,EAAkC,EAAE;IAC5E,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,WAAW,CAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3D,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,GAAG,QAAQ,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/_utils/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAU1C,MAAM,SAAS,GAAG,GAAW,EAAE,CAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAExE,MAAM,SAAS,GAAG,KAAK,IAA+B,EAAE;IACtD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAY,CAAC,CAC1C,CACF,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAuC,CAAC;IACzD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,aAAa,EAAE,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC3E,aAAa,EAAE,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC3E,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,EAAE,KAAgB,EAAkC,EAAE;IAC5E,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,WAAW,CAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC3D,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,0EAA0E;IAC1E,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC7C,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,6EAA6E;AAC7E,6DAA6D;AAC7D,MAAM,UAAU,GAAG,KAAK,IAAoC,EAAE;IAC5D,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,CAAC,EAAE,IAAK,CAAC,CAAC,KAA+B,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/_utils/update.d.ts
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
|
+
declare const lockPath: () => string;
|
|
1
2
|
declare const shouldCheck: (now: number) => boolean;
|
|
2
3
|
declare const recordCheck: (now: number, latest: string | null) => void;
|
|
3
4
|
declare const fetchLatest: () => Promise<string | null>;
|
|
5
|
+
declare const cachedNewerVersion: () => string | null;
|
|
4
6
|
declare const newer: (a: string, b: string) => boolean;
|
|
5
7
|
declare const isNpmGlobalInstall: () => boolean;
|
|
6
|
-
|
|
8
|
+
type SelfUpdateResult = {
|
|
9
|
+
readonly ok: true;
|
|
10
|
+
} | {
|
|
11
|
+
readonly ok: false;
|
|
12
|
+
readonly reason: "locked" | "npm-failed";
|
|
13
|
+
readonly stderrTail?: string;
|
|
14
|
+
};
|
|
15
|
+
declare const runSelfUpdate: () => SelfUpdateResult;
|
|
7
16
|
/** Detached, TTL'd: never blocks the calling turn. Safe to call from every command. */
|
|
8
17
|
declare const maybeSpawnBackgroundUpdate: () => Promise<void>;
|
|
9
18
|
/** 426 from the server: update NOW, then re-exec the (new) global bin with the original args. */
|
|
10
19
|
declare const handle426AndReexec: (argv: string[]) => never;
|
|
11
|
-
|
|
20
|
+
/**
|
|
21
|
+
* 426 in a hook context: hint + detached background update, never block or
|
|
22
|
+
* re-exec — the hook has a hard timeout and Claude/Codex inject its stdout
|
|
23
|
+
* as context, so a synchronous npm install here would block the user's turn.
|
|
24
|
+
* Returns whether a background update was actually spawned, so callers can
|
|
25
|
+
* pick an honest agent-facing hint (a gated spawn means nothing is updating —
|
|
26
|
+
* the user has to run the install themselves).
|
|
27
|
+
*/
|
|
28
|
+
declare const handle426InHook: () => boolean;
|
|
29
|
+
export { lockPath, shouldCheck, recordCheck, fetchLatest, newer, isNpmGlobalInstall, runSelfUpdate, maybeSpawnBackgroundUpdate, handle426AndReexec, handle426InHook, cachedNewerVersion, };
|
package/dist/_utils/update.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { execFileSync, spawn, spawnSync } from "node:child_process";
|
|
2
2
|
import { mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { runBin } from "./run-bin.js";
|
|
5
6
|
import { cliVersion } from "./version.js";
|
|
6
|
-
|
|
7
|
+
// Mirrors how codex-hooks-setup.ts derives its marker path from statePath():
|
|
8
|
+
// when GLEN_STATE_PATH is set (tests), the glen dir is its dirname.
|
|
9
|
+
const glenDir = () => process.env.GLEN_STATE_PATH
|
|
10
|
+
? dirname(process.env.GLEN_STATE_PATH)
|
|
11
|
+
: join(homedir(), ".glen");
|
|
7
12
|
const checkPath = () => join(glenDir(), "update-check.json");
|
|
8
13
|
const lockPath = () => join(glenDir(), "update.lock");
|
|
9
14
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
@@ -44,6 +49,17 @@ const fetchLatest = async () => {
|
|
|
44
49
|
return null;
|
|
45
50
|
}
|
|
46
51
|
};
|
|
52
|
+
// Reads the TTL'd update-check cache (never hits the network). Returns the
|
|
53
|
+
// newer known version, else null.
|
|
54
|
+
const cachedNewerVersion = () => {
|
|
55
|
+
try {
|
|
56
|
+
const data = JSON.parse(readFileSync(checkPath(), "utf8"));
|
|
57
|
+
return data.latest && newer(data.latest, cliVersion) ? data.latest : null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
47
63
|
const newer = (a, b) => {
|
|
48
64
|
const pa = a.split(".").map(Number);
|
|
49
65
|
const pb = b.split(".").map(Number);
|
|
@@ -66,22 +82,64 @@ const isNpmGlobalInstall = () => {
|
|
|
66
82
|
return false;
|
|
67
83
|
}
|
|
68
84
|
};
|
|
69
|
-
const
|
|
85
|
+
const LOCK_TTL_MS = 10 * 60 * 1000;
|
|
86
|
+
// Acquire the update lock dir atomically (mkdir without recursive throws
|
|
87
|
+
// EEXIST when held). A stale lock — no readable start marker, or one older
|
|
88
|
+
// than LOCK_TTL_MS (e.g. a previous update was SIGKILLed mid-install) — is
|
|
89
|
+
// removed and the mkdir retried ONCE.
|
|
90
|
+
const acquireUpdateLock = () => {
|
|
91
|
+
const tryMkdir = () => {
|
|
92
|
+
try {
|
|
93
|
+
mkdirSync(lockPath());
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
writeFileSync(join(lockPath(), "started"), String(Date.now()));
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// best-effort: a missing marker reads as stale to the next contender
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
};
|
|
106
|
+
if (tryMkdir())
|
|
107
|
+
return true;
|
|
108
|
+
const startedAt = (() => {
|
|
109
|
+
try {
|
|
110
|
+
const n = Number(readFileSync(join(lockPath(), "started"), "utf8"));
|
|
111
|
+
return Number.isFinite(n) ? n : null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
})();
|
|
117
|
+
if (startedAt !== null && Date.now() - startedAt <= LOCK_TTL_MS)
|
|
118
|
+
return false;
|
|
70
119
|
try {
|
|
71
|
-
|
|
120
|
+
rmSync(lockPath(), { recursive: true, force: true });
|
|
72
121
|
}
|
|
73
122
|
catch {
|
|
74
123
|
return false;
|
|
75
124
|
}
|
|
125
|
+
return tryMkdir();
|
|
126
|
+
};
|
|
127
|
+
const runSelfUpdate = () => {
|
|
128
|
+
if (!acquireUpdateLock())
|
|
129
|
+
return { ok: false, reason: "locked" };
|
|
76
130
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
timeout: 120_000,
|
|
131
|
+
const r = runBin("npm", ["install", "-g", "@tryglen/cli@latest"], {
|
|
132
|
+
timeoutMs: 120_000,
|
|
80
133
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
134
|
+
if (!r.ok) {
|
|
135
|
+
const stderrTail = r.error.stderrTail || r.error.spawnError;
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
reason: "npm-failed",
|
|
139
|
+
...(stderrTail ? { stderrTail } : {}),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return { ok: true };
|
|
85
143
|
}
|
|
86
144
|
finally {
|
|
87
145
|
rmSync(lockPath(), { recursive: true, force: true });
|
|
@@ -101,6 +159,9 @@ const maybeSpawnBackgroundUpdate = async () => {
|
|
|
101
159
|
return;
|
|
102
160
|
}
|
|
103
161
|
const child = spawn(process.execPath, [process.argv[1] ?? "glen", "__self-update"], { detached: true, stdio: "ignore" });
|
|
162
|
+
child.on("error", () => {
|
|
163
|
+
// best-effort — an uncaught async 'error' would crash the calling command
|
|
164
|
+
});
|
|
104
165
|
child.unref();
|
|
105
166
|
};
|
|
106
167
|
/** 426 from the server: update NOW, then re-exec the (new) global bin with the original args. */
|
|
@@ -108,15 +169,50 @@ const handle426AndReexec = (argv) => {
|
|
|
108
169
|
if (process.env.GLEN_REEXEC === "1" ||
|
|
109
170
|
autoUpdateDisabled() ||
|
|
110
171
|
!isNpmGlobalInstall() ||
|
|
111
|
-
!runSelfUpdate()) {
|
|
172
|
+
!runSelfUpdate().ok) {
|
|
112
173
|
process.stderr.write("[glen] this CLI is below the server's minimum version; run `npm i -g @tryglen/cli@latest`.\n");
|
|
113
174
|
process.exit(1);
|
|
114
175
|
}
|
|
115
|
-
|
|
176
|
+
// Re-exec via process.execPath + argv[1] (never a bare "glen" — fails
|
|
177
|
+
// off-PATH and exits silently).
|
|
178
|
+
const r = spawnSync(process.execPath, [process.argv[1] ?? "glen", ...argv], {
|
|
116
179
|
stdio: "inherit",
|
|
117
180
|
env: { ...process.env, GLEN_REEXEC: "1" },
|
|
118
181
|
});
|
|
119
|
-
|
|
182
|
+
if (r.status === null || r.error) {
|
|
183
|
+
process.stderr.write("[glen] updated, but could not re-run the command automatically — run it again.\n");
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
process.exit(r.status);
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* 426 in a hook context: hint + detached background update, never block or
|
|
190
|
+
* re-exec — the hook has a hard timeout and Claude/Codex inject its stdout
|
|
191
|
+
* as context, so a synchronous npm install here would block the user's turn.
|
|
192
|
+
* Returns whether a background update was actually spawned, so callers can
|
|
193
|
+
* pick an honest agent-facing hint (a gated spawn means nothing is updating —
|
|
194
|
+
* the user has to run the install themselves).
|
|
195
|
+
*/
|
|
196
|
+
const handle426InHook = () => {
|
|
197
|
+
const spawned = (() => {
|
|
198
|
+
if (autoUpdateDisabled() || !isNpmGlobalInstall())
|
|
199
|
+
return false;
|
|
200
|
+
try {
|
|
201
|
+
const c = spawn(process.execPath, [process.argv[1] ?? "glen", "__self-update"], { detached: true, stdio: "ignore" });
|
|
202
|
+
c.on("error", () => {
|
|
203
|
+
/* best-effort */
|
|
204
|
+
});
|
|
205
|
+
c.unref();
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
})();
|
|
212
|
+
process.stderr.write(spawned
|
|
213
|
+
? "[glen] glen CLI is below the server's minimum version — updating in the background; this turn was not recorded.\n"
|
|
214
|
+
: "[glen] glen CLI is below the server's minimum version — update it: npm i -g @tryglen/cli@latest\n");
|
|
215
|
+
return spawned;
|
|
120
216
|
};
|
|
121
|
-
export { shouldCheck, recordCheck, fetchLatest, newer, isNpmGlobalInstall, runSelfUpdate, maybeSpawnBackgroundUpdate, handle426AndReexec, };
|
|
217
|
+
export { lockPath, shouldCheck, recordCheck, fetchLatest, newer, isNpmGlobalInstall, runSelfUpdate, maybeSpawnBackgroundUpdate, handle426AndReexec, handle426InHook, cachedNewerVersion, };
|
|
122
218
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/_utils/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/_utils/update.ts"],"names":[],"mappings":"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"}
|
package/dist/_utils/version.js
CHANGED
|
@@ -5,6 +5,17 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
// Works from both src/_utils/ (vitest runs TS directly) and dist/_utils/ (built)
|
|
6
6
|
// because both are exactly two levels deep from the package root.
|
|
7
7
|
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json");
|
|
8
|
-
|
|
8
|
+
// A corrupt install (missing/unparseable package.json) must not crash every
|
|
9
|
+
// command — including hooks — at import time. Fall back to "0.0.0", which is
|
|
10
|
+
// older than any published version, so the update paths still fire.
|
|
11
|
+
const cliVersion = (() => {
|
|
12
|
+
try {
|
|
13
|
+
const v = JSON.parse(readFileSync(pkgPath, "utf8")).version;
|
|
14
|
+
return typeof v === "string" ? v : "0.0.0";
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return "0.0.0";
|
|
18
|
+
}
|
|
19
|
+
})();
|
|
9
20
|
export { cliVersion };
|
|
10
21
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/_utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,0DAA0D;AAC1D,iFAAiF;AACjF,kEAAkE;AAClE,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,IAAI,EACJ,IAAI,EACJ,cAAc,CACf,CAAC;AAEF,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/_utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,0DAA0D;AAC1D,iFAAiF;AACjF,kEAAkE;AAClE,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,IAAI,EACJ,IAAI,EACJ,cAAc,CACf,CAAC;AAEF,4EAA4E;AAC5E,6EAA6E;AAC7E,oEAAoE;AACpE,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,CAAC,GACL,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CACzC,CAAC,OAAO,CAAC;QACV,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/_utils/which.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* True when the named agent binary is resolvable (PATH, well-known macOS
|
|
3
|
+
* dirs, login-shell PATH, or a persisted `glen install --<bin>-path`
|
|
4
|
+
* override). See find-bin.ts.
|
|
4
5
|
*/
|
|
5
6
|
declare const isInstalled: (bin: string) => boolean;
|
|
6
7
|
export { isInstalled };
|
package/dist/_utils/which.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { findBin } from "./find-bin.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* True when the named agent binary is resolvable (PATH, well-known macOS
|
|
4
|
+
* dirs, login-shell PATH, or a persisted `glen install --<bin>-path`
|
|
5
|
+
* override). See find-bin.ts.
|
|
5
6
|
*/
|
|
6
|
-
const isInstalled = (bin) =>
|
|
7
|
-
try {
|
|
8
|
-
execFileSync("which", [bin], { stdio: "ignore" });
|
|
9
|
-
return true;
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
7
|
+
const isInstalled = (bin) => findBin(bin) !== null;
|
|
15
8
|
export { isInstalled };
|
|
16
9
|
//# sourceMappingURL=which.js.map
|
package/dist/_utils/which.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/_utils/which.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/_utils/which.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/bin.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { cac } from "cac";
|
|
3
|
+
import { formatCliError } from "./_utils/cli-error.js";
|
|
3
4
|
import { cliVersion } from "./_utils/version.js";
|
|
4
5
|
const cli = cac("glen");
|
|
5
6
|
cli.command("login", "Connect glen via browser sign-in").action(async () => {
|
|
6
7
|
const { login } = await import("./commands/login.js");
|
|
7
8
|
const result = await login();
|
|
8
9
|
if (!result.ok) {
|
|
9
|
-
process.stderr.write(
|
|
10
|
+
process.stderr.write(formatCliError(result.error));
|
|
10
11
|
process.exit(1);
|
|
11
12
|
}
|
|
12
13
|
});
|
|
@@ -16,7 +17,7 @@ cli
|
|
|
16
17
|
const { logout } = await import("./commands/logout.js");
|
|
17
18
|
const result = await logout();
|
|
18
19
|
if (!result.ok) {
|
|
19
|
-
process.stderr.write(
|
|
20
|
+
process.stderr.write(formatCliError(result.error));
|
|
20
21
|
process.exit(1);
|
|
21
22
|
}
|
|
22
23
|
});
|
|
@@ -32,8 +33,8 @@ cli
|
|
|
32
33
|
const { search } = await import("./commands/search.js");
|
|
33
34
|
const result = await search(query);
|
|
34
35
|
if (!result.ok) {
|
|
35
|
-
process.stderr.write(
|
|
36
|
-
process.exit(
|
|
36
|
+
process.stderr.write(formatCliError(result.error));
|
|
37
|
+
process.exit(1);
|
|
37
38
|
}
|
|
38
39
|
});
|
|
39
40
|
cli
|
|
@@ -42,7 +43,7 @@ cli
|
|
|
42
43
|
const { incognito } = await import("./commands/incognito.js");
|
|
43
44
|
const r = await incognito(state);
|
|
44
45
|
if (!r.ok) {
|
|
45
|
-
process.stderr.write(
|
|
46
|
+
process.stderr.write(formatCliError(r.error));
|
|
46
47
|
process.exit(1);
|
|
47
48
|
}
|
|
48
49
|
});
|
|
@@ -50,10 +51,15 @@ cli
|
|
|
50
51
|
.command("ingest", "Ingest a turn from stdin (used by agent hooks)")
|
|
51
52
|
.option("--agent <agent>", "Agent type: claude-code | codex")
|
|
52
53
|
.action(async (options) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
try {
|
|
55
|
+
const { ingest } = await import("./commands/ingest.js");
|
|
56
|
+
await ingest(options.agent);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Hook must never block a prompt — swallow and exit clean. ingest
|
|
60
|
+
// itself emits agent-facing hints for every known failure mode.
|
|
61
|
+
}
|
|
62
|
+
process.exit(0);
|
|
57
63
|
});
|
|
58
64
|
cli
|
|
59
65
|
.command("org <action> [slug]", "Manage organizations: list | switch [slug]")
|
|
@@ -62,7 +68,7 @@ cli
|
|
|
62
68
|
const { orgList } = await import("./commands/org.js");
|
|
63
69
|
const r = await orgList();
|
|
64
70
|
if (!r.ok) {
|
|
65
|
-
process.stderr.write(
|
|
71
|
+
process.stderr.write(formatCliError(r.error));
|
|
66
72
|
process.exit(1);
|
|
67
73
|
}
|
|
68
74
|
return;
|
|
@@ -71,7 +77,7 @@ cli
|
|
|
71
77
|
const { orgSwitch } = await import("./commands/org.js");
|
|
72
78
|
const r = await orgSwitch(slug);
|
|
73
79
|
if (!r.ok) {
|
|
74
|
-
process.stderr.write(
|
|
80
|
+
process.stderr.write(formatCliError(r.error));
|
|
75
81
|
process.exit(1);
|
|
76
82
|
}
|
|
77
83
|
return;
|
|
@@ -82,38 +88,52 @@ cli
|
|
|
82
88
|
cli
|
|
83
89
|
.command("install", "Detect coding agents and install glen plugins")
|
|
84
90
|
.option("--agent <agent>", "Install for one agent non-interactively: claude (alias: claude-code) | codex")
|
|
91
|
+
.option("--codex-path <path>", "Absolute path to the codex binary (when auto-detection fails)")
|
|
92
|
+
.option("--claude-path <path>", "Absolute path to the claude binary (when auto-detection fails)")
|
|
85
93
|
.action(async (options) => {
|
|
86
|
-
// cac yields `true` for a bare
|
|
87
|
-
// it reaches install (which expects a string
|
|
94
|
+
// cac yields `true` for a bare flag with no value — reject it before
|
|
95
|
+
// it reaches install (which expects a string or undefined).
|
|
88
96
|
if (options.agent === true) {
|
|
89
97
|
process.stderr.write("glen install: --agent requires a value (claude | codex)\n");
|
|
90
98
|
process.exit(1);
|
|
91
99
|
}
|
|
100
|
+
if (options.codexPath === true || options.claudePath === true) {
|
|
101
|
+
process.stderr.write("glen install: --codex-path/--claude-path require a value (an absolute path to the binary)\n");
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
92
104
|
const agent = typeof options.agent === "string" ? options.agent : undefined;
|
|
93
105
|
const { install } = await import("./commands/install.js");
|
|
94
|
-
const result = await install(agent
|
|
95
|
-
|
|
106
|
+
const result = await install(agent, {
|
|
107
|
+
codex: typeof options.codexPath === "string" ? options.codexPath : undefined,
|
|
108
|
+
claude: typeof options.claudePath === "string"
|
|
109
|
+
? options.claudePath
|
|
110
|
+
: undefined,
|
|
111
|
+
});
|
|
112
|
+
if (!result.ok) {
|
|
113
|
+
process.stderr.write(formatCliError(result.error));
|
|
96
114
|
process.exit(1);
|
|
115
|
+
}
|
|
97
116
|
});
|
|
98
117
|
cli
|
|
99
118
|
.command("uninstall", "Remove glen hooks from Codex's user config and print plugin removal steps")
|
|
100
119
|
.action(async () => {
|
|
101
120
|
const { uninstall } = await import("./commands/uninstall.js");
|
|
102
121
|
const result = await uninstall();
|
|
103
|
-
|
|
104
|
-
|
|
122
|
+
if (!result.ok) {
|
|
123
|
+
process.stderr.write(formatCliError(result.error));
|
|
105
124
|
process.exit(1);
|
|
125
|
+
}
|
|
106
126
|
});
|
|
107
127
|
cli.command("version", "Print the CLI version").action(() => {
|
|
108
128
|
process.stdout.write(`${cliVersion}\n`);
|
|
109
129
|
});
|
|
110
130
|
cli
|
|
111
|
-
.command("update", "Update the glen CLI
|
|
131
|
+
.command("update", "Update the glen CLI and any installed glen plugins")
|
|
112
132
|
.action(async () => {
|
|
113
133
|
const { update } = await import("./commands/update.js");
|
|
114
134
|
const result = await update();
|
|
115
135
|
if (!result.ok) {
|
|
116
|
-
process.stderr.write(
|
|
136
|
+
process.stderr.write(formatCliError(result.error));
|
|
117
137
|
process.exit(1);
|
|
118
138
|
}
|
|
119
139
|
});
|
|
@@ -124,7 +144,7 @@ cli
|
|
|
124
144
|
const { doctor } = await import("./commands/doctor.js");
|
|
125
145
|
const result = await doctor(options.auto === true);
|
|
126
146
|
if (!result.ok) {
|
|
127
|
-
process.stderr.write(
|
|
147
|
+
process.stderr.write(formatCliError(result.error));
|
|
128
148
|
process.exit(1);
|
|
129
149
|
}
|
|
130
150
|
});
|
|
@@ -137,7 +157,7 @@ cli
|
|
|
137
157
|
}
|
|
138
158
|
catch {
|
|
139
159
|
// Statusline must never break the host UI — output the safe fallback.
|
|
140
|
-
process.stdout.write(
|
|
160
|
+
process.stdout.write('🏔️ glen — ask me to "set up glen"');
|
|
141
161
|
}
|
|
142
162
|
process.exit(0);
|
|
143
163
|
});
|
|
@@ -154,7 +174,7 @@ cli
|
|
|
154
174
|
process.stdout.write(JSON.stringify({
|
|
155
175
|
hookSpecificOutput: {
|
|
156
176
|
hookEventName: "SessionStart",
|
|
157
|
-
additionalContext: "[glen] not
|
|
177
|
+
additionalContext: "[glen] not set up — use the glen-setup skill",
|
|
158
178
|
},
|
|
159
179
|
}));
|
|
160
180
|
}
|
|
@@ -164,7 +184,9 @@ cli
|
|
|
164
184
|
// without blocking the calling turn.
|
|
165
185
|
cli.command("__self-update", "(internal)").action(async () => {
|
|
166
186
|
const { runSelfUpdate } = await import("./_utils/update.js");
|
|
187
|
+
// Detached background run: nobody reads the structured result — exit clean.
|
|
167
188
|
runSelfUpdate();
|
|
189
|
+
process.exit(0);
|
|
168
190
|
});
|
|
169
191
|
// Internal: spawned detached by `glen doctor --auto` to re-merge + re-trust
|
|
170
192
|
// the codex user-layer hooks without blocking the calling turn.
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAExB,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACzE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import type { CliError } from "../_utils/cli-error.js";
|
|
1
2
|
import { type Result } from "../_utils/result.js";
|
|
2
3
|
/**
|
|
3
4
|
* `glen doctor [--auto]`
|
|
4
5
|
*
|
|
5
|
-
* Default mode: prints
|
|
6
|
-
*
|
|
6
|
+
* Default mode: prints machine-readable `status:` lines plus ` → ...`
|
|
7
|
+
* remedy lines. STABLE OUTPUT CONTRACT — the glen-setup skill branches on
|
|
8
|
+
* the exact `status:` prefixes and field names below; never change them
|
|
9
|
+
* without updating the skill in lockstep.
|
|
7
10
|
*
|
|
8
11
|
* `--auto` (quiet) mode: runs maybeSpawnBackgroundUpdate, best-effort
|
|
9
12
|
* detached spawns for plugin update commands, and (marker-gated, 24h-TTL'd
|
|
10
13
|
* via the repair trace) the detached codex user-layer hooks self-heal.
|
|
11
14
|
* No stdout output. Used by the session-start hook so it never blocks a turn.
|
|
12
15
|
*/
|
|
13
|
-
declare const doctor: (auto?: boolean) => Promise<Result<void,
|
|
16
|
+
declare const doctor: (auto?: boolean) => Promise<Result<void, CliError>>;
|
|
14
17
|
export { doctor };
|