@tryglen/cli 0.5.2 โ 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 +114 -62
- 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/install.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { execFileSync } from "node:child_process";
|
|
2
1
|
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
3
2
|
import { homedir } from "node:os";
|
|
4
3
|
import { dirname, join } from "node:path";
|
|
5
4
|
import prompts from "prompts";
|
|
5
|
+
import { AGENTS } from "../_utils/agents-table.js";
|
|
6
|
+
import { causeOf, cliErr, formatCliError, } from "../_utils/cli-error.js";
|
|
6
7
|
import { installCodexHooks } from "../_utils/codex-hooks-setup.js";
|
|
7
8
|
import { readCredentials } from "../_utils/credentials.js";
|
|
8
9
|
import { ensureGlobalCli } from "../_utils/ensure-global-cli.js";
|
|
10
|
+
import { agentsJsonPath, findBin, isExecutable, persistAgentPath, } from "../_utils/find-bin.js";
|
|
11
|
+
import { glenPluginStatus } from "../_utils/plugin-status.js";
|
|
9
12
|
import { err, fromPromise, ok } from "../_utils/result.js";
|
|
13
|
+
import { runBin } from "../_utils/run-bin.js";
|
|
10
14
|
import { isInstalled } from "../_utils/which.js";
|
|
11
15
|
import { login } from "./login.js";
|
|
12
16
|
// ---------------------------------------------------------------------------
|
|
@@ -14,26 +18,35 @@ import { login } from "./login.js";
|
|
|
14
18
|
// ---------------------------------------------------------------------------
|
|
15
19
|
const claudeSettingsPath = () => process.env.GLEN_CLAUDE_SETTINGS_PATH ??
|
|
16
20
|
join(homedir(), ".claude", "settings.json");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Path overrides (--claude-path / --codex-path) โ validated and persisted to
|
|
23
|
+
// ~/.glen/agents.json BEFORE detection, so findBin picks them up immediately.
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const applyPathOverrides = async (paths) => {
|
|
26
|
+
for (const bin of ["claude", "codex"]) {
|
|
27
|
+
const path = paths?.[bin];
|
|
28
|
+
if (path === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
if (!isExecutable(path)) {
|
|
31
|
+
return err(cliErr({
|
|
32
|
+
what: `--${bin}-path is not an executable file`,
|
|
33
|
+
path,
|
|
34
|
+
remedy: `run \`which ${bin}\` in your terminal and pass that exact path`,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
const persisted = await persistAgentPath(bin, path);
|
|
38
|
+
if (!persisted.ok) {
|
|
39
|
+
return err(cliErr({
|
|
40
|
+
what: `could not save the ${bin} path override`,
|
|
41
|
+
why: causeOf(persisted.error),
|
|
42
|
+
path: agentsJsonPath(),
|
|
43
|
+
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`), then re-run `glen install`",
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
process.stdout.write(` โ ${bin} path saved: ${path}\n`);
|
|
47
|
+
}
|
|
48
|
+
return ok(undefined);
|
|
49
|
+
};
|
|
37
50
|
// ---------------------------------------------------------------------------
|
|
38
51
|
// Step label: last two args make a readable name ("marketplace add", "install glen@glen")
|
|
39
52
|
// ---------------------------------------------------------------------------
|
|
@@ -42,26 +55,37 @@ const stepLabel = (step) => step.slice(1).join(" ");
|
|
|
42
55
|
// Statusline for Claude Code โ configured by default (no opt-in prompt).
|
|
43
56
|
// An existing statusLine is never overwritten; we print a merge note instead.
|
|
44
57
|
// ---------------------------------------------------------------------------
|
|
58
|
+
// Read + parse the settings file. Missing file โ empty settings; an
|
|
59
|
+
// unreadable/corrupt file โ the root-cause parse error (kept so the user
|
|
60
|
+
// sees WHY their settings file was rejected, not just that it was).
|
|
61
|
+
const readClaudeSettings = async (filePath) => {
|
|
62
|
+
const rawResult = await fromPromise(readFile(filePath, "utf-8"));
|
|
63
|
+
if (!rawResult.ok)
|
|
64
|
+
return { settings: {} };
|
|
65
|
+
const parseResult = await fromPromise(new Promise((resolve) => resolve(JSON.parse(rawResult.value))));
|
|
66
|
+
if (!parseResult.ok)
|
|
67
|
+
return { parseError: causeOf(parseResult.error) };
|
|
68
|
+
if (!parseResult.value || typeof parseResult.value !== "object")
|
|
69
|
+
return { parseError: "settings file is not a JSON object" };
|
|
70
|
+
return { settings: parseResult.value };
|
|
71
|
+
};
|
|
45
72
|
const handleClaudeStatusline = async () => {
|
|
46
73
|
const filePath = claudeSettingsPath();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
else {
|
|
59
|
-
// Parse failure โ treat as existing-with-statusline (don't touch)
|
|
60
|
-
parseFailed = true;
|
|
61
|
-
}
|
|
74
|
+
const read = await readClaudeSettings(filePath);
|
|
75
|
+
// Corrupt JSON: structured inline error (statusline failure must not abort
|
|
76
|
+
// the install) โ tell the user exactly what to fix and what to add.
|
|
77
|
+
if ("parseError" in read) {
|
|
78
|
+
process.stdout.write(formatCliError(cliErr({
|
|
79
|
+
what: "~/.claude/settings.json is not valid JSON",
|
|
80
|
+
why: read.parseError,
|
|
81
|
+
path: filePath,
|
|
82
|
+
remedy: 'fix the JSON, then add: "statusLine": { "type": "command", "command": "glen statusline" }',
|
|
83
|
+
})));
|
|
84
|
+
return;
|
|
62
85
|
}
|
|
86
|
+
const existingSettings = read.settings;
|
|
63
87
|
// If statusLine already exists, print snippet + merge note; do NOT touch
|
|
64
|
-
if (
|
|
88
|
+
if ("statusLine" in existingSettings) {
|
|
65
89
|
process.stdout.write(" โน statusLine already configured. To add glen, merge this into your existing command:\n");
|
|
66
90
|
process.stdout.write(` "statusLine": { "type": "command", "command": "glen statusline" }\n`);
|
|
67
91
|
process.stdout.write(` (manual merge required โ glen won't overwrite your existing statusLine)\n`);
|
|
@@ -72,20 +96,29 @@ const handleClaudeStatusline = async () => {
|
|
|
72
96
|
...existingSettings,
|
|
73
97
|
statusLine: { type: "command", command: "glen statusline" },
|
|
74
98
|
};
|
|
99
|
+
const writeFailure = (why) => {
|
|
100
|
+
process.stdout.write(formatCliError(cliErr({
|
|
101
|
+
what: "could not write the statusline config",
|
|
102
|
+
why: causeOf(why),
|
|
103
|
+
path: filePath,
|
|
104
|
+
remedy: "check ownership of ~/.claude (e.g. `sudo chown -R $USER ~/.claude`), then re-run `glen install`",
|
|
105
|
+
})));
|
|
106
|
+
};
|
|
75
107
|
const mk = await fromPromise(mkdir(dirname(filePath), { recursive: true }));
|
|
76
108
|
if (!mk.ok) {
|
|
77
|
-
|
|
109
|
+
writeFailure(mk.error);
|
|
78
110
|
return;
|
|
79
111
|
}
|
|
80
|
-
|
|
112
|
+
// pid-suffixed so concurrent writers never clobber each other's tmp file.
|
|
113
|
+
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
81
114
|
const w = await fromPromise(writeFile(tmp, JSON.stringify(updated, null, 2)));
|
|
82
115
|
if (!w.ok) {
|
|
83
|
-
|
|
116
|
+
writeFailure(w.error);
|
|
84
117
|
return;
|
|
85
118
|
}
|
|
86
119
|
const mv = await fromPromise(rename(tmp, filePath));
|
|
87
120
|
if (!mv.ok) {
|
|
88
|
-
|
|
121
|
+
writeFailure(mv.error);
|
|
89
122
|
return;
|
|
90
123
|
}
|
|
91
124
|
process.stdout.write(" โ statusline configured\n");
|
|
@@ -148,7 +181,7 @@ const promptConnect = async () => {
|
|
|
148
181
|
}
|
|
149
182
|
const result = await login();
|
|
150
183
|
if (!result.ok) {
|
|
151
|
-
process.stdout.write(
|
|
184
|
+
process.stdout.write(formatCliError(result.error));
|
|
152
185
|
process.stdout.write(" Run `glen login` to try again.\n\n");
|
|
153
186
|
}
|
|
154
187
|
};
|
|
@@ -207,15 +240,21 @@ const ensureCliBinary = () => {
|
|
|
207
240
|
// ---------------------------------------------------------------------------
|
|
208
241
|
// Main install command
|
|
209
242
|
// ---------------------------------------------------------------------------
|
|
210
|
-
const install = async (agentBin) => {
|
|
243
|
+
const install = async (agentBin, paths) => {
|
|
211
244
|
process.stdout.write("\n ๐๏ธ glen โ install agent plugins\n\n");
|
|
245
|
+
const overrides = await applyPathOverrides(paths);
|
|
246
|
+
if (!overrides.ok)
|
|
247
|
+
return overrides;
|
|
212
248
|
ensureCliBinary();
|
|
213
249
|
const detected = AGENTS.filter((a) => isInstalled(a.bin));
|
|
214
250
|
if (detected.length === 0) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
251
|
+
// No login nudge here โ a connect prompt before the user learns nothing
|
|
252
|
+
// was detected is confusing, and pointless without an agent to feed.
|
|
253
|
+
return err(cliErr({
|
|
254
|
+
what: "no coding agents detected",
|
|
255
|
+
why: "looked for `claude` and `codex` on PATH, in /opt/homebrew/bin, /usr/local/bin, ~/.local/bin, ~/bin, and via your login shell",
|
|
256
|
+
remedy: "if one IS installed: run `which codex` (or `which claude`) in your terminal, then `glen install --codex-path <that path>`. Docs: https://tryglen.com/docs/plugins",
|
|
257
|
+
}));
|
|
219
258
|
}
|
|
220
259
|
process.stdout.write(" Detected coding agents:\n");
|
|
221
260
|
for (const a of detected) {
|
|
@@ -244,9 +283,12 @@ const install = async (agentBin) => {
|
|
|
244
283
|
return (response.plugins ?? []);
|
|
245
284
|
})();
|
|
246
285
|
if (agentBin !== undefined && selected.length === 0) {
|
|
247
|
-
process.stdout.write(` โ "${agentBin}" is not an installed agent (expected: claude | codex).\n`);
|
|
248
286
|
await connectOrHint(agentBin);
|
|
249
|
-
return err(
|
|
287
|
+
return err(cliErr({
|
|
288
|
+
what: `"${agentBin}" is not an installed agent`,
|
|
289
|
+
why: "expected: claude | codex",
|
|
290
|
+
remedy: `if it IS installed, run \`which ${normalized}\` in your terminal and pass \`glen install --${normalized}-path <path>\``,
|
|
291
|
+
}));
|
|
250
292
|
}
|
|
251
293
|
if (selected.length === 0) {
|
|
252
294
|
process.stdout.write(" No plugins selected.\n");
|
|
@@ -255,20 +297,30 @@ const install = async (agentBin) => {
|
|
|
255
297
|
}
|
|
256
298
|
const results = [];
|
|
257
299
|
for (const agent of selected) {
|
|
258
|
-
|
|
259
|
-
|
|
300
|
+
// Resolve once per agent โ every step runs against the same binary the
|
|
301
|
+
// detection (and any --<bin>-path override) found.
|
|
302
|
+
const resolvedBin = findBin(agent.bin) ?? agent.bin;
|
|
303
|
+
// Converge: already installed โ run the update steps instead of failing
|
|
304
|
+
// the `plugin add/install` step on a re-run; unknown โ attempt install.
|
|
305
|
+
const status = glenPluginStatus(agent.bin);
|
|
306
|
+
const converging = status === "installed";
|
|
307
|
+
process.stdout.write(converging
|
|
308
|
+
? `\n Updating ${agent.name} plugin:\n`
|
|
309
|
+
: `\n Installing ${agent.name} plugin:\n`);
|
|
310
|
+
for (const step of converging ? agent.updateSteps : agent.steps) {
|
|
260
311
|
const label = stepLabel(step);
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
|
|
312
|
+
const r = runBin(resolvedBin, step);
|
|
313
|
+
// Each step's outcome counts toward the final summary โ a failed
|
|
314
|
+
// `plugin add` must not report "Done! โฆ memory is active".
|
|
315
|
+
results.push(r.ok);
|
|
316
|
+
if (r.ok) {
|
|
317
|
+
process.stdout.write(` ${label}... โ\n`);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
const cause = r.error.stderrTail || r.error.spawnError || `exit ${r.error.code}`;
|
|
321
|
+
process.stdout.write(` ${label}... โ ${cause}\n`);
|
|
322
|
+
process.stdout.write(` โ run \`${agent.bin} ${step.join(" ")}\` manually to see the full error\n`);
|
|
323
|
+
}
|
|
272
324
|
}
|
|
273
325
|
results.push(await handlePostInstall(agent));
|
|
274
326
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
CHANGED
package/dist/commands/login.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { createHash, randomBytes } from "node:crypto";
|
|
2
2
|
import { buildConnectUrl } from "../_utils/build-connect-url.js";
|
|
3
|
+
import { causeOf, cliErr } from "../_utils/cli-error.js";
|
|
3
4
|
import { config } from "../_utils/config.js";
|
|
4
|
-
import { writeCredentials } from "../_utils/credentials.js";
|
|
5
|
-
import { httpJson } from "../_utils/http.js";
|
|
5
|
+
import { credentialsPath, writeCredentials } from "../_utils/credentials.js";
|
|
6
|
+
import { httpJson, networkRemedy } from "../_utils/http.js";
|
|
6
7
|
import { startLoopbackServer } from "../_utils/loopback-server.js";
|
|
7
8
|
import { openBrowser } from "../_utils/open-browser.js";
|
|
8
|
-
import { err, ok } from "../_utils/result.js";
|
|
9
|
+
import { err, fromPromise, ok } from "../_utils/result.js";
|
|
9
10
|
import { writeState } from "../_utils/state.js";
|
|
10
11
|
const WAIT_MS = 10 * 60_000;
|
|
11
12
|
const login = async () => {
|
|
12
13
|
const state = randomBytes(32).toString("hex");
|
|
13
14
|
const verifier = randomBytes(48).toString("base64url");
|
|
14
15
|
const challenge = createHash("sha256").update(verifier).digest("base64url");
|
|
15
|
-
const
|
|
16
|
+
const started = await fromPromise(startLoopbackServer(WAIT_MS, state));
|
|
17
|
+
if (!started.ok) {
|
|
18
|
+
// startLoopbackServer rejects with the CliError it built (listen failure
|
|
19
|
+
// โ EADDRINUSE/EACCES); pass it through unchanged (cliErr is identity).
|
|
20
|
+
return err(cliErr(started.error));
|
|
21
|
+
}
|
|
22
|
+
const { redirectUri, waitForCallback } = started.value;
|
|
16
23
|
const url = buildConnectUrl({
|
|
17
24
|
connectUrl: config.connectUrl,
|
|
18
25
|
callback: redirectUri,
|
|
@@ -24,10 +31,16 @@ const login = async () => {
|
|
|
24
31
|
openBrowser(url);
|
|
25
32
|
const cb = await waitForCallback().catch(() => null);
|
|
26
33
|
if (!cb?.code) {
|
|
27
|
-
return err(
|
|
34
|
+
return err(cliErr({
|
|
35
|
+
what: "login timed out or was cancelled",
|
|
36
|
+
remedy: "retry `glen login`; if the browser never opened, paste the printed URL manually",
|
|
37
|
+
}));
|
|
28
38
|
}
|
|
29
39
|
if (cb.state !== state) {
|
|
30
|
-
return err(
|
|
40
|
+
return err(cliErr({
|
|
41
|
+
what: "login state mismatch (possible local interception)",
|
|
42
|
+
remedy: "retry `glen login`",
|
|
43
|
+
}));
|
|
31
44
|
}
|
|
32
45
|
const exchangeResult = await httpJson(config.exchangeUrl, {
|
|
33
46
|
method: "POST",
|
|
@@ -36,18 +49,36 @@ const login = async () => {
|
|
|
36
49
|
timeoutMs: 15_000,
|
|
37
50
|
});
|
|
38
51
|
if (!exchangeResult.ok)
|
|
39
|
-
return err(
|
|
52
|
+
return err(cliErr({
|
|
53
|
+
what: "key exchange failed",
|
|
54
|
+
why: exchangeResult.error.detail,
|
|
55
|
+
remedy: networkRemedy(exchangeResult.error),
|
|
56
|
+
}));
|
|
40
57
|
if (!exchangeResult.value.isOk)
|
|
41
|
-
return err(
|
|
58
|
+
return err(cliErr({
|
|
59
|
+
what: "key exchange failed",
|
|
60
|
+
why: exchangeResult.value.rawText.length > 0
|
|
61
|
+
? exchangeResult.value.rawText.slice(0, 200)
|
|
62
|
+
: `HTTP ${exchangeResult.value.status}`,
|
|
63
|
+
remedy: "retry `glen login`; if it persists, contact support",
|
|
64
|
+
}));
|
|
42
65
|
const payload = exchangeResult.value.json;
|
|
43
66
|
if (!payload?.apikey || typeof payload.apikey !== "string")
|
|
44
|
-
return err(
|
|
67
|
+
return err(cliErr({
|
|
68
|
+
what: "key exchange returned no key",
|
|
69
|
+
remedy: "retry `glen login`; if it persists, contact support",
|
|
70
|
+
}));
|
|
45
71
|
const writeResult = await writeCredentials({
|
|
46
72
|
type: "apikey",
|
|
47
73
|
key: payload.apikey,
|
|
48
74
|
});
|
|
49
75
|
if (!writeResult.ok)
|
|
50
|
-
return err(
|
|
76
|
+
return err(cliErr({
|
|
77
|
+
what: "could not save credentials",
|
|
78
|
+
why: causeOf(writeResult.error),
|
|
79
|
+
path: credentialsPath(),
|
|
80
|
+
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`) and retry",
|
|
81
|
+
}));
|
|
51
82
|
// Defensively parse the org from the exchange payload.
|
|
52
83
|
// All three fields must be strings; anything else is treated as null.
|
|
53
84
|
const rawOrg = payload.org ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { causeOf, cliErr } from "../_utils/cli-error.js";
|
|
2
|
+
import { clearCredentials, credentialsPath } from "../_utils/credentials.js";
|
|
3
|
+
import { err, ok } from "../_utils/result.js";
|
|
4
|
+
import { clearState, statePath } from "../_utils/state.js";
|
|
4
5
|
const logout = async () => {
|
|
5
|
-
await clearCredentials();
|
|
6
|
-
|
|
6
|
+
const creds = await clearCredentials();
|
|
7
|
+
if (!creds.ok)
|
|
8
|
+
return err(cliErr({
|
|
9
|
+
what: "could not remove credentials",
|
|
10
|
+
why: causeOf(creds.error),
|
|
11
|
+
path: credentialsPath(),
|
|
12
|
+
remedy: `fix ownership first (\`sudo chown -R $USER ~/.glen\`), then remove it: rm ${credentialsPath()}`,
|
|
13
|
+
}));
|
|
14
|
+
const state = await clearState();
|
|
15
|
+
if (!state.ok)
|
|
16
|
+
return err(cliErr({
|
|
17
|
+
what: "could not remove session state",
|
|
18
|
+
why: causeOf(state.error),
|
|
19
|
+
path: statePath(),
|
|
20
|
+
remedy: `fix ownership first (\`sudo chown -R $USER ~/.glen\`), then remove it: rm ${statePath()}`,
|
|
21
|
+
}));
|
|
7
22
|
process.stdout.write("โ Signed out of glen (credentials removed).\n");
|
|
8
23
|
return ok(undefined);
|
|
9
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,GAAG,KAAK,IAAqC,EAAE;IACzD,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,GAAG,CACR,MAAM,CAAC;YACL,IAAI,EAAE,8BAA8B;YACpC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,eAAe,EAAE;YACvB,MAAM,EAAE,6EAA6E,eAAe,EAAE,EAAE;SACzG,CAAC,CACH,CAAC;IACJ,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,GAAG,CACR,MAAM,CAAC;YACL,IAAI,EAAE,gCAAgC;YACtC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,SAAS,EAAE;YACjB,MAAM,EAAE,6EAA6E,SAAS,EAAE,EAAE;SACnG,CAAC,CACH,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -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 maybeOnboard: () => Promise<Result<"ran" | "skip",
|
|
3
|
+
declare const maybeOnboard: () => Promise<Result<"ran" | "skip", CliError>>;
|
|
3
4
|
export { maybeOnboard };
|
package/dist/commands/onboard.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatCliError } from "../_utils/cli-error.js";
|
|
1
2
|
import { readCredentials } from "../_utils/credentials.js";
|
|
2
3
|
import { ok } from "../_utils/result.js";
|
|
3
4
|
import { install } from "./install.js";
|
|
@@ -9,9 +10,12 @@ const maybeOnboard = async () => {
|
|
|
9
10
|
if (creds || !process.stdout.isTTY)
|
|
10
11
|
return ok("skip");
|
|
11
12
|
process.stdout.write("\n ๐๏ธ glen โ let's get you set up\n");
|
|
12
|
-
// install() prints its own guidance for
|
|
13
|
-
// agents detected"
|
|
14
|
-
|
|
13
|
+
// install() prints its own guidance for successful outcomes; a failure
|
|
14
|
+
// (e.g. "no agents detected") is returned structured, so print it here โ
|
|
15
|
+
// onboarding continues to the summary regardless.
|
|
16
|
+
const installed = await install();
|
|
17
|
+
if (!installed.ok)
|
|
18
|
+
process.stdout.write(formatCliError(installed.error));
|
|
15
19
|
process.stdout.write("\n That's it! Open Claude Code or Codex โ glen runs automatically.\n" +
|
|
16
20
|
" Anytime: `glen status` ยท `glen org switch` ยท `glen --help`\n\n");
|
|
17
21
|
return ok("ran");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAe,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,MAAM,YAAY,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAe,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,MAAM,YAAY,GAAG,KAAK,IAA+C,EAAE;IACzE,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IAEtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAE9D,uEAAuE;IACvE,yEAAyE;IACzE,kDAAkD;IAClD,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uEAAuE;QACrE,kEAAkE,CACrE,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/commands/org.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { type CliError } from "../_utils/cli-error.js";
|
|
1
2
|
import { type Result } from "../_utils/result.js";
|
|
2
|
-
declare const orgList: () => Promise<Result<void,
|
|
3
|
-
declare const orgSwitch: (slug?: string) => Promise<Result<void,
|
|
3
|
+
declare const orgList: () => Promise<Result<void, CliError>>;
|
|
4
|
+
declare const orgSwitch: (slug?: string) => Promise<Result<void, CliError>>;
|
|
4
5
|
export { orgList, orgSwitch };
|
package/dist/commands/org.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import prompts from "prompts";
|
|
2
|
+
import { causeOf, cliErr } from "../_utils/cli-error.js";
|
|
2
3
|
import { config } from "../_utils/config.js";
|
|
3
4
|
import { readCredentials } from "../_utils/credentials.js";
|
|
4
5
|
import { buildGlenHeaders } from "../_utils/glen-headers.js";
|
|
5
|
-
import { httpJson } from "../_utils/http.js";
|
|
6
|
+
import { httpJson, networkRemedy } from "../_utils/http.js";
|
|
6
7
|
import { err, ok } from "../_utils/result.js";
|
|
7
|
-
import { readState, writeState } from "../_utils/state.js";
|
|
8
|
+
import { readState, statePath, writeState } from "../_utils/state.js";
|
|
8
9
|
import { cliVersion } from "../_utils/version.js";
|
|
9
10
|
const fetchOrgs = async () => {
|
|
10
11
|
const creds = await readCredentials();
|
|
11
12
|
if (!creds)
|
|
12
|
-
return err("
|
|
13
|
+
return err(cliErr({ what: "not connected", remedy: "run `glen login` first" }));
|
|
13
14
|
const state = await readState();
|
|
14
15
|
const res = await httpJson(config.listOrgsUrl, {
|
|
15
16
|
method: "POST",
|
|
@@ -21,14 +22,28 @@ const fetchOrgs = async () => {
|
|
|
21
22
|
timeoutMs: config.listOrgsTimeoutMs,
|
|
22
23
|
});
|
|
23
24
|
if (!res.ok)
|
|
24
|
-
return err(
|
|
25
|
+
return err(cliErr({
|
|
26
|
+
what: "could not reach glen",
|
|
27
|
+
why: res.error.detail,
|
|
28
|
+
remedy: networkRemedy(res.error),
|
|
29
|
+
}));
|
|
25
30
|
if (res.value.status === 401 || res.value.status === 403)
|
|
26
|
-
return err(
|
|
31
|
+
return err(cliErr({
|
|
32
|
+
what: "your session lost its organization",
|
|
33
|
+
remedy: "run `glen login` to reconnect",
|
|
34
|
+
}));
|
|
27
35
|
if (!res.value.isOk)
|
|
28
|
-
return err(
|
|
36
|
+
return err(cliErr({
|
|
37
|
+
what: `glen returned HTTP ${res.value.status}`,
|
|
38
|
+
why: res.value.rawText.slice(0, 200) || `HTTP ${res.value.status}`,
|
|
39
|
+
remedy: "try again in a minute โ if it persists, check https://tryglen.com/status",
|
|
40
|
+
}));
|
|
29
41
|
const orgs = res.value.json?.orgs;
|
|
30
42
|
if (!orgs)
|
|
31
|
-
return err(
|
|
43
|
+
return err(cliErr({
|
|
44
|
+
what: "unexpected response from glen",
|
|
45
|
+
remedy: "update the CLI (`glen update`) and retry",
|
|
46
|
+
}));
|
|
32
47
|
return ok(orgs);
|
|
33
48
|
};
|
|
34
49
|
const applySwitch = async (target) => {
|
|
@@ -40,7 +55,12 @@ const applySwitch = async (target) => {
|
|
|
40
55
|
incognito: current?.incognito ?? false,
|
|
41
56
|
});
|
|
42
57
|
if (!w.ok)
|
|
43
|
-
return err(
|
|
58
|
+
return err(cliErr({
|
|
59
|
+
what: "could not save org selection",
|
|
60
|
+
why: causeOf(w.error),
|
|
61
|
+
path: statePath(),
|
|
62
|
+
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`) and retry",
|
|
63
|
+
}));
|
|
44
64
|
process.stdout.write(`๐๏ธ Active organization is now ${target.name} (${target.slug}).\n`);
|
|
45
65
|
return ok(undefined);
|
|
46
66
|
};
|
|
@@ -53,13 +73,24 @@ const orgList = async () => {
|
|
|
53
73
|
return ok(undefined);
|
|
54
74
|
};
|
|
55
75
|
const orgSwitch = async (slug) => {
|
|
76
|
+
// No slug + no TTY: the interactive picker would hang (or silently no-op) โ
|
|
77
|
+
// fail fast with the scripted alternative before any network call.
|
|
78
|
+
if (!slug && !process.stdin.isTTY)
|
|
79
|
+
return err(cliErr({
|
|
80
|
+
what: "no organization specified",
|
|
81
|
+
remedy: "non-interactive shell โ pass a slug: glen org switch <slug> (see `glen org list`)",
|
|
82
|
+
}));
|
|
56
83
|
const orgs = await fetchOrgs();
|
|
57
84
|
if (!orgs.ok)
|
|
58
85
|
return orgs;
|
|
59
86
|
if (slug) {
|
|
60
87
|
const target = orgs.value.find((o) => o.slug === slug || o.orgId === slug);
|
|
61
88
|
if (!target)
|
|
62
|
-
return err(
|
|
89
|
+
return err(cliErr({
|
|
90
|
+
what: `no organization "${slug}"`,
|
|
91
|
+
why: `available: ${orgs.value.map((o) => o.slug).join(", ")}`,
|
|
92
|
+
remedy: "run `glen org list` and pass one of the listed slugs",
|
|
93
|
+
}));
|
|
63
94
|
return applySwitch(target);
|
|
64
95
|
}
|
|
65
96
|
const response = await prompts({
|