@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/commands/doctor.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { isCodexHooksInstalled } from "../_utils/codex-hooks-setup.js";
|
|
3
3
|
import { readRepairTrace } from "../_utils/codex-repair-trace.js";
|
|
4
|
+
import { readCredentials } from "../_utils/credentials.js";
|
|
5
|
+
import { findBin } from "../_utils/find-bin.js";
|
|
6
|
+
import { glenPluginStatus } from "../_utils/plugin-status.js";
|
|
4
7
|
import { ok } from "../_utils/result.js";
|
|
5
8
|
import { readState } from "../_utils/state.js";
|
|
6
|
-
import { fetchLatest, isNpmGlobalInstall, maybeSpawnBackgroundUpdate, } from "../_utils/update.js";
|
|
9
|
+
import { fetchLatest, isNpmGlobalInstall, maybeSpawnBackgroundUpdate, newer, } from "../_utils/update.js";
|
|
7
10
|
import { cliVersion } from "../_utils/version.js";
|
|
8
11
|
import { isInstalled } from "../_utils/which.js";
|
|
9
12
|
/**
|
|
10
13
|
* `glen doctor [--auto]`
|
|
11
14
|
*
|
|
12
|
-
* Default mode: prints
|
|
13
|
-
*
|
|
15
|
+
* Default mode: prints machine-readable `status:` lines plus ` → ...`
|
|
16
|
+
* remedy lines. STABLE OUTPUT CONTRACT — the glen-setup skill branches on
|
|
17
|
+
* the exact `status:` prefixes and field names below; never change them
|
|
18
|
+
* without updating the skill in lockstep.
|
|
14
19
|
*
|
|
15
20
|
* `--auto` (quiet) mode: runs maybeSpawnBackgroundUpdate, best-effort
|
|
16
21
|
* detached spawns for plugin update commands, and (marker-gated, 24h-TTL'd
|
|
@@ -24,10 +29,7 @@ const doctor = async (auto = false) => {
|
|
|
24
29
|
// Upgrade claude plugin if claude is installed
|
|
25
30
|
if (isInstalled("claude")) {
|
|
26
31
|
try {
|
|
27
|
-
const c = spawn("claude", ["plugin", "update", "glen@glen"], {
|
|
28
|
-
detached: true,
|
|
29
|
-
stdio: "ignore",
|
|
30
|
-
});
|
|
32
|
+
const c = spawn(findBin("claude") ?? "claude", ["plugin", "update", "glen@glen"], { detached: true, stdio: "ignore" });
|
|
31
33
|
c.on("error", () => {
|
|
32
34
|
/* best-effort — ENOENT etc. arrives async; never crash the hook */
|
|
33
35
|
});
|
|
@@ -40,10 +42,7 @@ const doctor = async (auto = false) => {
|
|
|
40
42
|
// Upgrade codex plugin if codex is installed
|
|
41
43
|
if (isInstalled("codex")) {
|
|
42
44
|
try {
|
|
43
|
-
const c = spawn("codex", ["plugin", "marketplace", "upgrade", "glen"], {
|
|
44
|
-
detached: true,
|
|
45
|
-
stdio: "ignore",
|
|
46
|
-
});
|
|
45
|
+
const c = spawn(findBin("codex") ?? "codex", ["plugin", "marketplace", "upgrade", "glen"], { detached: true, stdio: "ignore" });
|
|
47
46
|
c.on("error", () => {
|
|
48
47
|
/* best-effort — ENOENT etc. arrives async; never crash the hook */
|
|
49
48
|
});
|
|
@@ -78,55 +77,70 @@ const doctor = async (auto = false) => {
|
|
|
78
77
|
}
|
|
79
78
|
return ok(undefined);
|
|
80
79
|
}
|
|
81
|
-
//
|
|
80
|
+
// -------------------------------------------------------------------------
|
|
81
|
+
// Normal diagnostic mode — STABLE OUTPUT CONTRACT (see docblock): the
|
|
82
|
+
// glen-setup skill parses the `status:` lines; keep prefixes/fields EXACT.
|
|
83
|
+
// -------------------------------------------------------------------------
|
|
82
84
|
process.stdout.write("glen doctor\n\n");
|
|
83
|
-
process.stdout.write(`Version: ${cliVersion}\n`);
|
|
84
85
|
const latest = await fetchLatest();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
: "other (local/pnpm/yarn/…)";
|
|
89
|
-
process.stdout.write(`Install channel: ${channel}\n`);
|
|
90
|
-
if (latest && latest !== cliVersion) {
|
|
91
|
-
process.stdout.write(`\nUpdate available: v${latest}.\n`);
|
|
92
|
-
if (isNpmGlobalInstall()) {
|
|
93
|
-
process.stdout.write(" Run `glen update` to install it.\n");
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
process.stdout.write(" Update with your package manager (e.g. npm i -g @tryglen/cli@latest).\n");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
86
|
+
const channel = isNpmGlobalInstall() ? "npm-global" : "other";
|
|
87
|
+
process.stdout.write(`status: cli=${cliVersion} latest=${latest ?? "unknown"} channel=${channel}\n`);
|
|
88
|
+
const creds = await readCredentials();
|
|
99
89
|
const state = await readState();
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
const orgField = state
|
|
91
|
+
? `"${state.activeOrgName ?? state.activeOrgSlug ?? state.activeOrgId}"`
|
|
92
|
+
: "missing";
|
|
93
|
+
process.stdout.write(`status: login=${creds ? "ok" : "missing"} org=${orgField}\n`);
|
|
94
|
+
const claudeDetected = isInstalled("claude");
|
|
95
|
+
const claudePlugin = claudeDetected ? glenPluginStatus("claude") : null;
|
|
96
|
+
process.stdout.write(claudeDetected
|
|
97
|
+
? `status: claude=detected plugin=${claudePlugin}\n`
|
|
98
|
+
: "status: claude=not-found\n");
|
|
99
|
+
const codexDetected = isInstalled("codex");
|
|
100
|
+
const codexPlugin = codexDetected ? glenPluginStatus("codex") : null;
|
|
101
|
+
const hooksRegistered = codexDetected && (await isCodexHooksInstalled());
|
|
102
|
+
process.stdout.write(codexDetected
|
|
103
|
+
? `status: codex=detected plugin=${codexPlugin} hooks=${hooksRegistered ? "registered" : "not-registered"}\n`
|
|
104
|
+
: "status: codex=not-found\n");
|
|
105
|
+
// codex-self-heal line: printed only when hooks=registered.
|
|
106
|
+
const trace = hooksRegistered ? await readRepairTrace() : null;
|
|
107
|
+
const selfHealFailed = hooksRegistered && trace !== null && !trace.ok;
|
|
108
|
+
if (hooksRegistered) {
|
|
109
|
+
const selfHeal = trace === null
|
|
110
|
+
? "never-ran"
|
|
111
|
+
: trace.ok
|
|
112
|
+
? "ok"
|
|
113
|
+
: `failed: ${trace.error ?? "unknown"}`;
|
|
114
|
+
process.stdout.write(`status: codex-self-heal=${selfHeal}\n`);
|
|
104
115
|
}
|
|
105
|
-
|
|
106
|
-
|
|
116
|
+
// Remedy lines — one per problem, in check order.
|
|
117
|
+
const remedies = [];
|
|
118
|
+
if (latest && newer(latest, cliVersion))
|
|
119
|
+
remedies.push("run `glen update`");
|
|
120
|
+
if (!creds)
|
|
121
|
+
remedies.push("run `glen login`");
|
|
122
|
+
if (creds && !state)
|
|
123
|
+
remedies.push("run `glen org list` then `glen org switch <slug>`");
|
|
124
|
+
for (const [bin, detected, plugin] of [
|
|
125
|
+
["claude", claudeDetected, claudePlugin],
|
|
126
|
+
["codex", codexDetected, codexPlugin],
|
|
127
|
+
]) {
|
|
128
|
+
if (detected && plugin === "not-installed")
|
|
129
|
+
remedies.push(`run \`glen install --agent ${bin}\``);
|
|
130
|
+
if (!detected)
|
|
131
|
+
remedies.push(`if ${bin} IS installed: run \`which ${bin}\`, then \`glen install --${bin}-path <path>\``);
|
|
107
132
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const hooksInstalled = await isCodexHooksInstalled();
|
|
116
|
-
process.stdout.write(hooksInstalled
|
|
117
|
-
? " codex: detected — user-layer hooks registered (re-run `glen install` to repair)\n"
|
|
118
|
-
: " codex: detected — hooks NOT registered; run `glen install`\n" +
|
|
119
|
-
" (Codex ignores plugin-manifest hooks — openai/codex#16430)\n");
|
|
120
|
-
if (hooksInstalled) {
|
|
121
|
-
const trace = await readRepairTrace();
|
|
122
|
-
if (trace && !trace.ok) {
|
|
123
|
-
process.stdout.write(` last self-heal FAILED (${trace.error ?? "unknown"}) — run \`glen install\` to repair\n`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
process.stdout.write(" update plugin: `codex plugin marketplace upgrade glen`\n");
|
|
133
|
+
if (codexDetected && !hooksRegistered)
|
|
134
|
+
remedies.push("run `glen install --agent codex`");
|
|
135
|
+
if (selfHealFailed)
|
|
136
|
+
remedies.push("run `glen install --agent codex`");
|
|
137
|
+
if (remedies.length === 0) {
|
|
138
|
+
process.stdout.write("\nEverything looks good. Run `glen update` anytime to refresh plugins.\n");
|
|
139
|
+
return ok(undefined);
|
|
127
140
|
}
|
|
128
|
-
|
|
129
|
-
|
|
141
|
+
process.stdout.write("\n");
|
|
142
|
+
for (const remedy of remedies) {
|
|
143
|
+
process.stdout.write(` → ${remedy}\n`);
|
|
130
144
|
}
|
|
131
145
|
return ok(undefined);
|
|
132
146
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type CliError } from "../_utils/cli-error.js";
|
|
1
2
|
import { type Result } from "../_utils/result.js";
|
|
2
|
-
declare const incognito: (stateArg: string) => Promise<Result<void,
|
|
3
|
+
declare const incognito: (stateArg: string) => Promise<Result<void, CliError>>;
|
|
3
4
|
export { incognito };
|
|
@@ -1,15 +1,27 @@
|
|
|
1
|
+
import { causeOf, cliErr } from "../_utils/cli-error.js";
|
|
1
2
|
import { err, ok } from "../_utils/result.js";
|
|
2
|
-
import { readState, writeState } from "../_utils/state.js";
|
|
3
|
+
import { readState, statePath, writeState } from "../_utils/state.js";
|
|
3
4
|
const incognito = async (stateArg) => {
|
|
4
5
|
if (stateArg !== "on" && stateArg !== "off")
|
|
5
|
-
return err(
|
|
6
|
+
return err(cliErr({
|
|
7
|
+
what: `invalid argument "${stateArg}"`,
|
|
8
|
+
remedy: "use: glen incognito on | off",
|
|
9
|
+
}));
|
|
6
10
|
const current = await readState();
|
|
7
11
|
if (!current)
|
|
8
|
-
return err(
|
|
12
|
+
return err(cliErr({
|
|
13
|
+
what: "no active organization",
|
|
14
|
+
remedy: "run `glen org switch` (or `glen login`) first",
|
|
15
|
+
}));
|
|
9
16
|
const next = { ...current, incognito: stateArg === "on" };
|
|
10
17
|
const w = await writeState(next);
|
|
11
18
|
if (!w.ok)
|
|
12
|
-
return err(
|
|
19
|
+
return err(cliErr({
|
|
20
|
+
what: "could not save incognito state",
|
|
21
|
+
why: causeOf(w.error),
|
|
22
|
+
path: statePath(),
|
|
23
|
+
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`) and retry",
|
|
24
|
+
}));
|
|
13
25
|
process.stdout.write(next.incognito
|
|
14
26
|
? "🏔️ Incognito ON — glen records nothing until you run `glen incognito off`.\n"
|
|
15
27
|
: "🏔️ Incognito off — glen is recording again.\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incognito.js","sourceRoot":"","sources":["../../src/commands/incognito.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"incognito.js","sourceRoot":"","sources":["../../src/commands/incognito.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,SAAS,GAAG,KAAK,EAAE,QAAgB,EAAmC,EAAE;IAC5E,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK;QACzC,OAAO,GAAG,CACR,MAAM,CAAC;YACL,IAAI,EAAE,qBAAqB,QAAQ,GAAG;YACtC,MAAM,EAAE,8BAA8B;SACvC,CAAC,CACH,CAAC;IACJ,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,OAAO;QACV,OAAO,GAAG,CACR,MAAM,CAAC;YACL,IAAI,EAAE,wBAAwB;YAC9B,MAAM,EAAE,+CAA+C;SACxD,CAAC,CACH,CAAC;IACJ,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;IAC1D,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,EAAE;QACP,OAAO,GAAG,CACR,MAAM,CAAC;YACL,IAAI,EAAE,gCAAgC;YACtC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YACrB,IAAI,EAAE,SAAS,EAAE;YACjB,MAAM,EACJ,2EAA2E;SAC9E,CAAC,CACH,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS;QACZ,CAAC,CAAC,+EAA+E;QACjF,CAAC,CAAC,gDAAgD,CACrD,CAAC;IACF,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
import { type Result } from "../_utils/result.js";
|
|
2
|
-
|
|
3
|
-
readonly code: number;
|
|
4
|
-
readonly message: string;
|
|
5
|
-
};
|
|
6
|
-
declare const ingest: (agent?: string) => Promise<Result<void, IngestError>>;
|
|
2
|
+
declare const ingest: (agent?: string) => Promise<Result<void, never>>;
|
|
7
3
|
export { ingest };
|
package/dist/commands/ingest.js
CHANGED
|
@@ -8,23 +8,38 @@ import { gitContext } from "../_utils/git-context.js";
|
|
|
8
8
|
import { buildGlenHeaders } from "../_utils/glen-headers.js";
|
|
9
9
|
import { httpJson } from "../_utils/http.js";
|
|
10
10
|
import { parseTranscript } from "../_utils/parse-transcript.js";
|
|
11
|
-
import {
|
|
11
|
+
import { fromPromise, ok } from "../_utils/result.js";
|
|
12
12
|
import { formatStateLine } from "../_utils/state-line.js";
|
|
13
13
|
import { readState } from "../_utils/state.js";
|
|
14
|
-
import {
|
|
14
|
+
import { cachedNewerVersion, handle426InHook, maybeSpawnBackgroundUpdate, } from "../_utils/update.js";
|
|
15
15
|
import { cliVersion } from "../_utils/version.js";
|
|
16
16
|
const readStdin = async () => {
|
|
17
|
+
if (process.stdin.isTTY)
|
|
18
|
+
return ""; // manual run in a terminal — don't hang
|
|
17
19
|
const chunks = [];
|
|
18
20
|
for await (const chunk of process.stdin)
|
|
19
21
|
chunks.push(chunk);
|
|
20
22
|
return Buffer.concat(chunks).toString("utf8");
|
|
21
23
|
};
|
|
24
|
+
// Appended to agent-facing failure hints: when the TTL'd update-check cache
|
|
25
|
+
// already knows about a newer version, suggest `glen update` (never hits the
|
|
26
|
+
// network — hooks must stay fast).
|
|
27
|
+
const updateAddendum = () => {
|
|
28
|
+
const v = cachedNewerVersion();
|
|
29
|
+
return v
|
|
30
|
+
? ` Note: glen v${v} is available (you have v${cliVersion}) — \`glen update\` may fix this.`
|
|
31
|
+
: "";
|
|
32
|
+
};
|
|
22
33
|
const readTranscriptLines = async (path) => {
|
|
23
34
|
const r = await fromPromise(readFile(path, "utf8"));
|
|
24
35
|
if (!r.ok)
|
|
25
36
|
return [];
|
|
26
37
|
return r.value.split("\n").filter(Boolean);
|
|
27
38
|
};
|
|
39
|
+
// Hook invariant: ingest NEVER returns an error and bin.ts NEVER exits
|
|
40
|
+
// nonzero for it — a nonzero hook exit blocks the user's prompt (exit 2 is
|
|
41
|
+
// Claude Code's blocking code). Every failure mode instead emits an
|
|
42
|
+
// agent-facing hint via emit() and resolves ok.
|
|
28
43
|
const ingest = async (agent) => {
|
|
29
44
|
void maybeSpawnBackgroundUpdate();
|
|
30
45
|
const stdinRaw = await readStdin();
|
|
@@ -55,13 +70,11 @@ const ingest = async (agent) => {
|
|
|
55
70
|
};
|
|
56
71
|
const creds = await readCredentials();
|
|
57
72
|
if (!creds) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
return err({ code: 1, message: "not connected" });
|
|
73
|
+
// One shared path for every agent: emit the hint (codex gets the JSON
|
|
74
|
+
// envelope, claude-code gets plain stdout) and exit clean — a non-zero
|
|
75
|
+
// exit blocks the prompt (Claude) or drops the output (Codex).
|
|
76
|
+
emit("[glen] not connected — run `glen login`");
|
|
77
|
+
return ok(undefined);
|
|
65
78
|
}
|
|
66
79
|
const state = await readState();
|
|
67
80
|
const transcriptPath = typeof event.transcript_path === "string"
|
|
@@ -112,24 +125,42 @@ const ingest = async (agent) => {
|
|
|
112
125
|
body: JSON.stringify(body),
|
|
113
126
|
timeoutMs: config.ingestTimeoutMs,
|
|
114
127
|
});
|
|
115
|
-
if (!res.ok)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
128
|
+
if (!res.ok) {
|
|
129
|
+
// Fail open: stderr breadcrumb for humans, context hint for the agent.
|
|
130
|
+
process.stderr.write(`glen: ingest failed (${res.error.detail}). Memory was not recorded this turn.\n`);
|
|
131
|
+
emit(`[glen] memory capture failed this turn (${res.error.detail}). ` +
|
|
132
|
+
`If this keeps happening, tell the user to check their connection.${updateAddendum()}`);
|
|
133
|
+
return ok(undefined);
|
|
134
|
+
}
|
|
135
|
+
if (res.value.status === 426) {
|
|
136
|
+
// Server-forced minimum version: NEVER update synchronously inside a hook
|
|
137
|
+
// (Claude's 60s timeout would kill it) — background update + hint instead.
|
|
138
|
+
// When the spawn is gated (auto-update disabled / not npm-global) nothing
|
|
139
|
+
// is updating, so tell the agent the user must update manually.
|
|
140
|
+
const spawned = handle426InHook();
|
|
141
|
+
emit(spawned
|
|
142
|
+
? "[glen] glen is updating itself in the background — this turn was not recorded; retry your prompt in a minute."
|
|
143
|
+
: "[glen] glen needs an update before memories can be captured — tell the user to run `npm i -g @tryglen/cli@latest`.");
|
|
144
|
+
return ok(undefined);
|
|
145
|
+
}
|
|
119
146
|
if (res.value.status === 401 || res.value.status === 403) {
|
|
120
147
|
if (res.value.rawText.includes("no active organization")) {
|
|
121
148
|
// Server reports no org bound — hint the user and fail open so the hook
|
|
122
149
|
// never blocks the turn.
|
|
123
150
|
process.stderr.write("[glen] no active organization — run `glen org switch`\n");
|
|
151
|
+
emit("[glen] no active organization — run `glen org switch`");
|
|
124
152
|
return ok(undefined);
|
|
125
153
|
}
|
|
126
|
-
// Don't clear credentials here — a concurrent
|
|
127
|
-
// saved a fresh key.
|
|
128
|
-
|
|
154
|
+
// Expired/revoked key. Don't clear credentials here — a concurrent
|
|
155
|
+
// `glen login` may have just saved a fresh key. Instruct the agent.
|
|
156
|
+
emit(`[glen] ACTION NEEDED: this machine's glen connection expired or was revoked — memories are NOT being captured. Tell the user to run \`glen login\` to reconnect.${updateAddendum()}`);
|
|
157
|
+
return ok(undefined);
|
|
129
158
|
}
|
|
130
159
|
if (!res.value.isOk) {
|
|
131
160
|
// Fail open (don't block the prompt), but surface the error so it's not invisible.
|
|
132
161
|
process.stderr.write(`glen: ingest failed (HTTP ${res.value.status}). Memory was not recorded this turn.\n`);
|
|
162
|
+
emit(`[glen] memory capture failed this turn (HTTP ${res.value.status}). ` +
|
|
163
|
+
`If this keeps happening, tell the user to check their connection.${updateAddendum()}`);
|
|
133
164
|
return ok(undefined);
|
|
134
165
|
}
|
|
135
166
|
const stateLine = formatStateLine(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAe,
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { type CliError } from "../_utils/cli-error.js";
|
|
1
2
|
import { type Result } from "../_utils/result.js";
|
|
2
|
-
declare const install: (agentBin?: string
|
|
3
|
+
declare const install: (agentBin?: string, paths?: {
|
|
4
|
+
codex?: string | undefined;
|
|
5
|
+
claude?: string | undefined;
|
|
6
|
+
}) => Promise<Result<void, CliError>>;
|
|
3
7
|
export { install };
|