@tryglen/cli 0.36.0 → 0.36.1
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 +39 -27
- package/dist/_utils/agent-adapter.d.ts +0 -15
- package/dist/_utils/agent-adapter.js +0 -20
- package/dist/_utils/agent-adapter.js.map +1 -1
- package/dist/_utils/agents-table.js +1 -9
- package/dist/_utils/agents-table.js.map +1 -1
- package/dist/_utils/cli-error.js +0 -3
- package/dist/_utils/cli-error.js.map +1 -1
- package/dist/_utils/codex-app-server.js +0 -2
- package/dist/_utils/codex-app-server.js.map +1 -1
- package/dist/_utils/codex-hooks-merge.js +0 -11
- package/dist/_utils/codex-hooks-merge.js.map +1 -1
- package/dist/_utils/codex-hooks-setup.js +0 -18
- package/dist/_utils/codex-hooks-setup.js.map +1 -1
- package/dist/_utils/codex-paths.js +0 -3
- package/dist/_utils/codex-paths.js.map +1 -1
- package/dist/_utils/codex-repair-trace.js +0 -3
- package/dist/_utils/codex-repair-trace.js.map +1 -1
- package/dist/_utils/codex-trust-toml.js +1 -9
- package/dist/_utils/codex-trust-toml.js.map +1 -1
- package/dist/_utils/collect-import-files.js +0 -7
- package/dist/_utils/collect-import-files.js.map +1 -1
- package/dist/_utils/config.js +0 -4
- package/dist/_utils/config.js.map +1 -1
- package/dist/_utils/confirm.js +2 -10
- package/dist/_utils/confirm.js.map +1 -1
- package/dist/_utils/credentials.js +0 -3
- package/dist/_utils/credentials.js.map +1 -1
- package/dist/_utils/detect-transcript-format.js +0 -7
- package/dist/_utils/detect-transcript-format.js.map +1 -1
- package/dist/_utils/ensure-global-cli.d.ts +0 -12
- package/dist/_utils/ensure-global-cli.js +1 -28
- package/dist/_utils/ensure-global-cli.js.map +1 -1
- package/dist/_utils/ephemeral-session.js +3 -24
- package/dist/_utils/ephemeral-session.js.map +1 -1
- package/dist/_utils/extract-claude-segments.js +1 -5
- package/dist/_utils/extract-claude-segments.js.map +1 -1
- package/dist/_utils/extract-codex-segments.js +0 -9
- package/dist/_utils/extract-codex-segments.js.map +1 -1
- package/dist/_utils/extract-pi-segments.js +1 -5
- package/dist/_utils/extract-pi-segments.js.map +1 -1
- package/dist/_utils/find-bin.js +0 -8
- package/dist/_utils/find-bin.js.map +1 -1
- package/dist/_utils/format-search-result.js +3 -19
- package/dist/_utils/format-search-result.js.map +1 -1
- package/dist/_utils/format-turn-nudges.js +2 -20
- package/dist/_utils/format-turn-nudges.js.map +1 -1
- package/dist/_utils/git-context.d.ts +0 -2
- package/dist/_utils/git-context.js +1 -33
- package/dist/_utils/git-context.js.map +1 -1
- package/dist/_utils/git-hook-setup.js +0 -1
- package/dist/_utils/git-hook-setup.js.map +1 -1
- package/dist/_utils/glen-headers.js +1 -4
- package/dist/_utils/glen-headers.js.map +1 -1
- package/dist/_utils/http.js +1 -8
- package/dist/_utils/http.js.map +1 -1
- package/dist/_utils/idempotency-key.js +1 -4
- package/dist/_utils/idempotency-key.js.map +1 -1
- package/dist/_utils/indicator-app.js +4 -26
- package/dist/_utils/indicator-app.js.map +1 -1
- package/dist/_utils/indicator-health.js +0 -6
- package/dist/_utils/indicator-health.js.map +1 -1
- package/dist/_utils/ingest-diagnosis.js +0 -5
- package/dist/_utils/ingest-diagnosis.js.map +1 -1
- package/dist/_utils/ingest-heartbeat.js +1 -6
- package/dist/_utils/ingest-heartbeat.js.map +1 -1
- package/dist/_utils/install-receipt.js +0 -3
- package/dist/_utils/install-receipt.js.map +1 -1
- package/dist/_utils/jcode-bundle.js +0 -7
- package/dist/_utils/jcode-bundle.js.map +1 -1
- package/dist/_utils/jcode-event.js +2 -18
- package/dist/_utils/jcode-event.js.map +1 -1
- package/dist/_utils/jcode-hook-lines.js +1 -5
- package/dist/_utils/jcode-hook-lines.js.map +1 -1
- package/dist/_utils/jcode-hooks-toml.js +1 -9
- package/dist/_utils/jcode-hooks-toml.js.map +1 -1
- package/dist/_utils/jcode-paths.js +0 -3
- package/dist/_utils/jcode-paths.js.map +1 -1
- package/dist/_utils/jcode-setup.js +0 -7
- package/dist/_utils/jcode-setup.js.map +1 -1
- package/dist/_utils/jcode-skills-sync.js +1 -6
- package/dist/_utils/jcode-skills-sync.js.map +1 -1
- package/dist/_utils/login-check.js +1 -4
- package/dist/_utils/login-check.js.map +1 -1
- package/dist/_utils/managed-block.js +0 -4
- package/dist/_utils/managed-block.js.map +1 -1
- package/dist/_utils/normalize-boolean-flags.js +2 -7
- package/dist/_utils/normalize-boolean-flags.js.map +1 -1
- package/dist/_utils/open-browser.js +1 -3
- package/dist/_utils/open-browser.js.map +1 -1
- package/dist/_utils/parse-claude-transcript.js +4 -24
- package/dist/_utils/parse-claude-transcript.js.map +1 -1
- package/dist/_utils/parse-codex-transcript.js +1 -22
- package/dist/_utils/parse-codex-transcript.js.map +1 -1
- package/dist/_utils/parse-cursor-db.js +2 -21
- package/dist/_utils/parse-cursor-db.js.map +1 -1
- package/dist/_utils/parse-jcode-session.js +0 -15
- package/dist/_utils/parse-jcode-session.js.map +1 -1
- package/dist/_utils/parse-pi-transcript.js +1 -35
- package/dist/_utils/parse-pi-transcript.js.map +1 -1
- package/dist/_utils/parse-transcript.js +1 -9
- package/dist/_utils/parse-transcript.js.map +1 -1
- package/dist/_utils/plugin-status.js +0 -19
- package/dist/_utils/plugin-status.js.map +1 -1
- package/dist/_utils/post-route.js +0 -7
- package/dist/_utils/post-route.js.map +1 -1
- package/dist/_utils/pr-review-link.js +0 -2
- package/dist/_utils/pr-review-link.js.map +1 -1
- package/dist/_utils/proactive-ticket-log.js +1 -11
- package/dist/_utils/proactive-ticket-log.js.map +1 -1
- package/dist/_utils/record-commit-anchor.js +1 -8
- package/dist/_utils/record-commit-anchor.js.map +1 -1
- package/dist/_utils/refresh-control-state.js +1 -7
- package/dist/_utils/refresh-control-state.js.map +1 -1
- package/dist/_utils/render-callback-page.js +0 -7
- package/dist/_utils/render-callback-page.js.map +1 -1
- package/dist/_utils/resolve-import-workspace.d.ts +0 -7
- package/dist/_utils/resolve-import-workspace.js +1 -13
- package/dist/_utils/resolve-import-workspace.js.map +1 -1
- package/dist/_utils/run-bin.js +0 -2
- package/dist/_utils/run-bin.js.map +1 -1
- package/dist/_utils/session-map.js +0 -5
- package/dist/_utils/session-map.js.map +1 -1
- package/dist/_utils/shell-profile.js +1 -28
- package/dist/_utils/shell-profile.js.map +1 -1
- package/dist/_utils/state-line-memo.d.ts +0 -6
- package/dist/_utils/state-line-memo.js +3 -18
- package/dist/_utils/state-line-memo.js.map +1 -1
- package/dist/_utils/state-line.js +0 -4
- package/dist/_utils/state-line.js.map +1 -1
- package/dist/_utils/state.js +0 -5
- package/dist/_utils/state.js.map +1 -1
- package/dist/_utils/sync-mode-from-server.d.ts +0 -18
- package/dist/_utils/sync-mode-from-server.js +2 -21
- package/dist/_utils/sync-mode-from-server.js.map +1 -1
- package/dist/_utils/transcript-turns.js +1 -51
- package/dist/_utils/transcript-turns.js.map +1 -1
- package/dist/_utils/turn-cache.js +1 -8
- package/dist/_utils/turn-cache.js.map +1 -1
- package/dist/_utils/update.d.ts +0 -10
- package/dist/_utils/update.js +8 -30
- package/dist/_utils/update.js.map +1 -1
- package/dist/_utils/version.js +3 -6
- package/dist/_utils/version.js.map +1 -1
- package/dist/_utils/which.d.ts +0 -5
- package/dist/_utils/which.js +0 -5
- package/dist/_utils/which.js.map +1 -1
- package/dist/_utils/write-commit-trailer.js +1 -5
- package/dist/_utils/write-commit-trailer.js.map +1 -1
- package/dist/bin.js +6 -25
- package/dist/bin.js.map +1 -1
- package/dist/commands/_utils/materialize-skill.js +4 -34
- package/dist/commands/_utils/materialize-skill.js.map +1 -1
- package/dist/commands/_utils/pack-skill-dir.js +6 -27
- package/dist/commands/_utils/pack-skill-dir.js.map +1 -1
- package/dist/commands/artifact.js +2 -5
- package/dist/commands/artifact.js.map +1 -1
- package/dist/commands/code-search.js +0 -6
- package/dist/commands/code-search.js.map +1 -1
- package/dist/commands/doctor.d.ts +0 -17
- package/dist/commands/doctor.js +15 -79
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/feedback.js +2 -10
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/git-hooks.js +0 -3
- package/dist/commands/git-hooks.js.map +1 -1
- package/dist/commands/import.js +5 -27
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/incognito.d.ts +0 -5
- package/dist/commands/incognito.js +0 -5
- package/dist/commands/incognito.js.map +1 -1
- package/dist/commands/indicator.d.ts +0 -1
- package/dist/commands/indicator.js +0 -1
- package/dist/commands/indicator.js.map +1 -1
- package/dist/commands/ingest.js +37 -111
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/install.js +7 -93
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/invite.d.ts +0 -6
- package/dist/commands/invite.js +0 -16
- package/dist/commands/invite.js.map +1 -1
- package/dist/commands/login.js +0 -15
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/onboard.js +0 -6
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/org.js +0 -2
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/pr-link.js +2 -15
- package/dist/commands/pr-link.js.map +1 -1
- package/dist/commands/search.js +0 -5
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session-start.d.ts +0 -21
- package/dist/commands/session-start.js +6 -65
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/set-mode.d.ts +0 -6
- package/dist/commands/set-mode.js +2 -12
- package/dist/commands/set-mode.js.map +1 -1
- package/dist/commands/skill.js +5 -35
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/statusline.d.ts +0 -13
- package/dist/commands/statusline.js +0 -15
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/suggestions.d.ts +0 -6
- package/dist/commands/suggestions.js +0 -7
- package/dist/commands/suggestions.js.map +1 -1
- package/dist/commands/takeover/_utils/agent-paths.js +2 -3
- package/dist/commands/takeover/_utils/agent-paths.js.map +1 -1
- package/dist/commands/takeover/_utils/cursor-store.js +1 -3
- package/dist/commands/takeover/_utils/cursor-store.js.map +1 -1
- package/dist/commands/takeover/_utils/write-codex-desktop-session.js +1 -4
- package/dist/commands/takeover/_utils/write-codex-desktop-session.js.map +1 -1
- package/dist/commands/takeover/_utils/write-codex-session.js +1 -2
- package/dist/commands/takeover/_utils/write-codex-session.js.map +1 -1
- package/dist/commands/uninstall.d.ts +0 -1
- package/dist/commands/uninstall.js +3 -7
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +0 -10
- package/dist/commands/update.js +4 -32
- package/dist/commands/update.js.map +1 -1
- package/dist/jcode/plugin.json +1 -1
- package/package.json +1 -1
package/dist/_utils/http.js
CHANGED
|
@@ -40,10 +40,6 @@ const classifyFetchError = (e, url) => {
|
|
|
40
40
|
};
|
|
41
41
|
const httpJson = async (url, options = {}) => {
|
|
42
42
|
const { method = "GET", headers, body, timeoutMs } = options;
|
|
43
|
-
// Staging/preview deployments sit behind Vercel deployment protection; the
|
|
44
|
-
// bypass token must ride on EVERY request or Vercel 401s before the app
|
|
45
|
-
// runs. Env-gated so production use (unset) sends nothing extra — pairs
|
|
46
|
-
// with GLEN_BASE_URL for pointing the CLI at a preview deploy.
|
|
47
43
|
const bypassToken = process.env.GLEN_VERCEL_PROTECTION_BYPASS;
|
|
48
44
|
const mergedHeaders = {
|
|
49
45
|
...(bypassToken ? { "x-vercel-protection-bypass": bypassToken } : {}),
|
|
@@ -81,7 +77,7 @@ const httpJson = async (url, options = {}) => {
|
|
|
81
77
|
return rawText.length > 0 ? JSON.parse(rawText) : null;
|
|
82
78
|
}
|
|
83
79
|
catch {
|
|
84
|
-
return null;
|
|
80
|
+
return null;
|
|
85
81
|
}
|
|
86
82
|
})();
|
|
87
83
|
return {
|
|
@@ -94,9 +90,6 @@ const httpJson = async (url, options = {}) => {
|
|
|
94
90
|
},
|
|
95
91
|
};
|
|
96
92
|
};
|
|
97
|
-
// Remedy for a transport failure: HttpFailure.detail stays purely
|
|
98
|
-
// descriptive; the actionable part lives here, on the CliError side. Only
|
|
99
|
-
// refused/dns plausibly point at a misconfigured custom base URL.
|
|
100
93
|
const networkRemedy = (failure) => failure.kind === "refused" || failure.kind === "dns"
|
|
101
94
|
? "check your connection and retry; if you use a custom GLEN_BASE_URL, verify it"
|
|
102
95
|
: "check your connection and retry";
|
package/dist/_utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/_utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/_utils/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
// The
|
|
3
|
-
// string (turn_id from codex events when no transcript is available). Both are
|
|
4
|
-
// serialised via template literal and separated from sessionId by a null byte
|
|
5
|
-
// to prevent prefix-collision attacks.
|
|
2
|
+
// The null-byte separator prevents prefix collisions between sessionId and the index.
|
|
6
3
|
const idempotencyKey = (sessionId, userMessageIndexOrTurnId) => createHash("sha256")
|
|
7
4
|
.update(`${sessionId}\0${userMessageIndexOrTurnId}`)
|
|
8
5
|
.digest("hex");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency-key.js","sourceRoot":"","sources":["../../src/_utils/idempotency-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,
|
|
1
|
+
{"version":3,"file":"idempotency-key.js","sourceRoot":"","sources":["../../src/_utils/idempotency-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,sFAAsF;AACtF,MAAM,cAAc,GAAG,CACrB,SAAiB,EACjB,wBAAyC,EACjC,EAAE,CACV,UAAU,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,GAAG,SAAS,KAAK,wBAAwB,EAAE,CAAC;KACnD,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -5,23 +5,14 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { err, fromPromise, ok } from "./result.js";
|
|
6
6
|
import { runBin } from "./run-bin.js";
|
|
7
7
|
const LABEL = "com.tryglen.indicator";
|
|
8
|
-
// Two levels up from _utils/ is the package root, from both src/ (vitest runs TS
|
|
9
|
-
// directly) and dist/ (built) — same trick as version.ts.
|
|
10
8
|
const indicatorExecutable = () => process.env.GLEN_INDICATOR_APP ??
|
|
11
9
|
join(dirname(fileURLToPath(import.meta.url)), "..", "..", "dist", "macos", "glen.app", "Contents", "MacOS", "glen");
|
|
12
10
|
const launchAgentPath = () => process.env.GLEN_LAUNCH_AGENT_PATH ??
|
|
13
11
|
join(homedir(), "Library", "LaunchAgents", `${LABEL}.plist`);
|
|
14
|
-
// dist/bin.js beside this module once built (src/bin.ts under vitest, which
|
|
15
|
-
// never registers for real).
|
|
16
12
|
const cliEntrypoint = () => process.env.GLEN_CLI_ENTRYPOINT ??
|
|
17
13
|
join(dirname(fileURLToPath(import.meta.url)), "..", "bin.js");
|
|
18
|
-
// KeepAlive
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
// GLEN_NODE/GLEN_CLI let the app change modes by exec'ing this exact CLI.
|
|
22
|
-
// launchd hands a GUI agent PATH=/usr/bin:/bin:/usr/sbin:/sbin, and `sh -l`
|
|
23
|
-
// only rebuilds it from /etc/paths*, so a `glen` installed under nvm or a
|
|
24
|
-
// custom npm prefix — a PATH entry that lives in ~/.zshrc — is unreachable.
|
|
14
|
+
// No KeepAlive: "Quit glen" must stay quit until the next login.
|
|
15
|
+
// GLEN_NODE/GLEN_CLI: launchd gives GUI agents a minimal PATH, so a glen under nvm is unreachable otherwise.
|
|
25
16
|
const launchAgentPlist = (executable) => `<?xml version="1.0" encoding="UTF-8"?>
|
|
26
17
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
27
18
|
<plist version="1.0">
|
|
@@ -48,8 +39,6 @@ const registerIndicator = async () => {
|
|
|
48
39
|
const written = await fromPromise(writeFile(path, launchAgentPlist(indicatorExecutable())));
|
|
49
40
|
if (!written.ok)
|
|
50
41
|
return err(`write ${path}: ${String(written.error)}`);
|
|
51
|
-
// bootstrap refuses a label that is already loaded, so clear it first. A
|
|
52
|
-
// missing service is the normal case on a fresh install, not an error.
|
|
53
42
|
runBin("launchctl", ["bootout", `${domain()}/${LABEL}`]);
|
|
54
43
|
const loaded = runBin("launchctl", ["bootstrap", domain(), path]);
|
|
55
44
|
if (!loaded.ok)
|
|
@@ -58,8 +47,6 @@ const registerIndicator = async () => {
|
|
|
58
47
|
};
|
|
59
48
|
const unregisterIndicator = async () => {
|
|
60
49
|
const path = launchAgentPath();
|
|
61
|
-
// No plist means nothing was ever registered — stay silent rather than
|
|
62
|
-
// shelling out, so a repeat uninstall touches nothing.
|
|
63
50
|
if (!(await fromPromise(access(path))).ok)
|
|
64
51
|
return ok(undefined);
|
|
65
52
|
runBin("launchctl", ["bootout", `${domain()}/${LABEL}`]);
|
|
@@ -72,9 +59,7 @@ const unregisterIndicator = async () => {
|
|
|
72
59
|
return ok(undefined);
|
|
73
60
|
};
|
|
74
61
|
const indicatorRunning = () => runBin("launchctl", ["print", `${domain()}/${LABEL}`]).ok;
|
|
75
|
-
//
|
|
76
|
-
// which the SessionStart hook already runs. Without a persisted opt-out that
|
|
77
|
-
// convergence would silently undo `glen indicator stop` on the next session.
|
|
62
|
+
// Persisted opt-out: doctor --auto re-converges the indicator every session and would otherwise undo `glen indicator stop`.
|
|
78
63
|
const optOutPath = () => process.env.GLEN_INDICATOR_OPTOUT_PATH ??
|
|
79
64
|
join(homedir(), ".glen", "indicator-disabled");
|
|
80
65
|
const indicatorOptedOut = async () => (await fromPromise(access(optOutPath()))).ok;
|
|
@@ -86,15 +71,10 @@ const setIndicatorOptOut = async (optedOut) => {
|
|
|
86
71
|
await fromPromise(mkdir(dirname(optOutPath()), { recursive: true }));
|
|
87
72
|
await fromPromise(writeFile(optOutPath(), ""));
|
|
88
73
|
};
|
|
89
|
-
// A registered indicator whose plist predates GLEN_CLI can't change modes: it
|
|
90
|
-
// falls back to a PATH lookup that launchd's environment often can't satisfy.
|
|
91
|
-
// Re-register it rather than leaving those users with a dead menu.
|
|
92
74
|
const launchAgentStale = async () => {
|
|
93
75
|
const current = await fromPromise(readFile(launchAgentPath(), "utf-8"));
|
|
94
76
|
return current.ok ? !current.value.includes("GLEN_CLI") : false;
|
|
95
77
|
};
|
|
96
|
-
// Best-effort convergence for installs and updates: never fights an explicit
|
|
97
|
-
// opt-out, never reports failure to a hook.
|
|
98
78
|
const ensureIndicatorRunning = async () => {
|
|
99
79
|
if (process.platform !== "darwin")
|
|
100
80
|
return false;
|
|
@@ -102,9 +82,7 @@ const ensureIndicatorRunning = async () => {
|
|
|
102
82
|
return false;
|
|
103
83
|
if (indicatorRunning() && !(await launchAgentStale()))
|
|
104
84
|
return true;
|
|
105
|
-
//
|
|
106
|
-
// failing to spawn it every login, silently. `glen doctor` then reports
|
|
107
|
-
// not-running with no way to tell why.
|
|
85
|
+
// Never register a missing binary: launchd would fail silently at every login.
|
|
108
86
|
if (!(await fromPromise(access(indicatorExecutable()))).ok)
|
|
109
87
|
return false;
|
|
110
88
|
return (await registerIndicator()).ok;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indicator-app.js","sourceRoot":"","sources":["../../src/_utils/indicator-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAe,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,KAAK,GAAG,uBAAuB,CAAC;AAEtC,
|
|
1
|
+
{"version":3,"file":"indicator-app.js","sourceRoot":"","sources":["../../src/_utils/indicator-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ import { readFile } from "node:fs/promises";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { fromPromise } from "./result.js";
|
|
5
|
-
// Stale means the indicator stopped writing — i.e. it is not running — which is
|
|
6
|
-
// a different problem from "running but hidden", and gets a different remedy.
|
|
7
5
|
const STALE_AFTER_MINUTES = 5;
|
|
8
6
|
const indicatorHealthPath = () => process.env.GLEN_INDICATOR_HEALTH_PATH ??
|
|
9
7
|
join(homedir(), ".glen", "indicator-health.json");
|
|
@@ -26,10 +24,6 @@ const readIndicatorHealth = async (now = Date.now()) => {
|
|
|
26
24
|
ageMinutes: Math.max(0, (now - checkedAt) / 60_000),
|
|
27
25
|
};
|
|
28
26
|
};
|
|
29
|
-
// One decision tree for both `glen doctor` and `glen indicator status`. A health
|
|
30
|
-
// report outlives the process that wrote it, so an unregistered indicator must
|
|
31
|
-
// never inherit its last "visible" — that reads as "it's fine" when nothing is
|
|
32
|
-
// on screen.
|
|
33
27
|
const visibilityLabel = (registered, health) => {
|
|
34
28
|
if (!registered)
|
|
35
29
|
return "not-running";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indicator-health.js","sourceRoot":"","sources":["../../src/_utils/indicator-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,
|
|
1
|
+
{"version":3,"file":"indicator-health.js","sourceRoot":"","sources":["../../src/_utils/indicator-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,mBAAmB,GAAG,GAAW,EAAE,CACvC,OAAO,CAAC,GAAG,CAAC,0BAA0B;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;AAEpD,MAAM,mBAAmB,GAAG,KAAK,EAC/B,MAAc,IAAI,CAAC,GAAG,EAAE,EACS,EAAE;IACnC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACxE,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,IAAI,GAAG,MAAM,CAAC,KAAuC,CAAC;IAC5D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI;QAC9B,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACjE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,UAAmB,EACnB,MAA8B,EACtB,EAAE;IACV,IAAI,CAAC,UAAU;QAAE,OAAO,aAAa,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,MAAM,CAAC,UAAU,GAAG,mBAAmB;QAAE,OAAO,OAAO,CAAC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { GLEN_OWNER_PREFIX } from "./codex-hooks-merge.js";
|
|
2
|
-
// Under an hour post-install, silence is still "warming up", not a fault.
|
|
3
2
|
const FRESH_INSTALL_MS = 60 * 60 * 1000;
|
|
4
3
|
const diagnoseIngest = (input) => {
|
|
5
4
|
const entry = input.heartbeat[input.agent];
|
|
6
5
|
if (entry) {
|
|
7
6
|
const lastSuccessAt = entry.lastSuccessAt ?? null;
|
|
8
|
-
// Ran but no outcome (logged out / glen off / no completed turn) = idle,
|
|
9
|
-
// not failing — the hook plumbing is proven.
|
|
10
7
|
if (entry.lastOutcome === undefined)
|
|
11
8
|
return { state: "idle", lastSuccessAt };
|
|
12
9
|
return entry.lastOutcome === "success"
|
|
@@ -23,8 +20,6 @@ const UNTRUSTED_REMEDY = "open your agent and trust the glen hooks (/hooks), the
|
|
|
23
20
|
const PATH_REMEDY = "`glen` is not on your login shell's PATH — run `glen update` or add the npm global bin dir to PATH";
|
|
24
21
|
const TOPOLOGY_REMEDY = "no cause found on this machine — if you connect to this machine from a local agent (Codex --remote / SSH), hooks run HERE; if the agent process runs elsewhere, install glen there and run `glen doctor` on that machine as the connecting user";
|
|
25
22
|
const HOOK_QUERY_FAILED_REMEDY = "could not query codex hook trust (codex app-server failed) — run `glen install --agent codex` to re-register and re-trust the hooks";
|
|
26
|
-
// Narrows never-ingested-despite-registered-hooks to untrusted hook / PATH
|
|
27
|
-
// gap / topology mismatch. Deps injected so tests spawn nothing.
|
|
28
23
|
const codexNeverDifferential = async (deps) => {
|
|
29
24
|
const hooks = await deps.listHooks();
|
|
30
25
|
if (!hooks.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-diagnosis.js","sourceRoot":"","sources":["../../src/_utils/ingest-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,
|
|
1
|
+
{"version":3,"file":"ingest-diagnosis.js","sourceRoot":"","sources":["../../src/_utils/ingest-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAIxC,MAAM,cAAc,GAAG,CAAC,KAQvB,EAAwD,EAAE;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;QAClD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YACjC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC,WAAW,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;YAChC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW;QACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,KAAK,GACT,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,aAAa,GAAG,gBAAgB,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,gBAAgB,GACpB,oHAAoH,CAAC;AACvH,MAAM,WAAW,GACf,oGAAoG,CAAC;AACvG,MAAM,eAAe,GACnB,iPAAiP,CAAC;AACpP,MAAM,wBAAwB,GAC5B,qIAAqI,CAAC;AAExI,MAAM,sBAAsB,GAAG,KAAK,EAAE,IAKrC,EAAqB,EAAE;IACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,MAAM;QACnB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACnD,CAAC,CAAC,WAAW,KAAK,SAAS,CAC9B,CAAC;IACF,IAAI,iBAAiB;QAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;QAC3D,KAAK;QACL,iBAAiB;KAClB,CAAC,CAAC;IACH,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE1D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -4,9 +4,6 @@ import { dirname, join } from "node:path";
|
|
|
4
4
|
const heartbeatPath = () => join(process.env.GLEN_STATE_PATH
|
|
5
5
|
? dirname(process.env.GLEN_STATE_PATH)
|
|
6
6
|
: join(homedir(), ".glen"), "ingest-heartbeat.json");
|
|
7
|
-
// An entry only counts as "a hook ran here" when it carries a real timestamp —
|
|
8
|
-
// a hand-edited or half-written file must not fake a heartbeat (the login-check
|
|
9
|
-
// and doctor gates both read "any entry exists" as proof the plumbing works).
|
|
10
7
|
const isEntry = (value) => !!value &&
|
|
11
8
|
typeof value === "object" &&
|
|
12
9
|
Number.isFinite(value.lastRunAt);
|
|
@@ -29,9 +26,7 @@ const write = async (map) => {
|
|
|
29
26
|
await writeFile(tmp, JSON.stringify(map));
|
|
30
27
|
await rename(tmp, path);
|
|
31
28
|
}
|
|
32
|
-
catch {
|
|
33
|
-
/* best-effort — a heartbeat write must never break a hook */
|
|
34
|
-
}
|
|
29
|
+
catch { }
|
|
35
30
|
};
|
|
36
31
|
const recordHeartbeatRun = async (agent) => {
|
|
37
32
|
const map = await readHeartbeat();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-heartbeat.js","sourceRoot":"","sources":["../../src/_utils/ingest-heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,aAAa,GAAG,GAAW,EAAE,CACjC,IAAI,CACF,OAAO,CAAC,GAAG,CAAC,eAAe;IACzB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,EAC5B,uBAAuB,CACxB,CAAC;AAEJ
|
|
1
|
+
{"version":3,"file":"ingest-heartbeat.js","sourceRoot":"","sources":["../../src/_utils/ingest-heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -144,7 +144,6 @@ const recordCodexFiles = async (snapshot) => update((current) => ({
|
|
|
144
144
|
...current,
|
|
145
145
|
codexFiles: current.codexFiles ?? snapshot,
|
|
146
146
|
}));
|
|
147
|
-
// First install wins, like codexFiles: `before` must stay the pre-glen bytes.
|
|
148
147
|
const recordJcodeFiles = async (snapshot) => update((current) => ({
|
|
149
148
|
...current,
|
|
150
149
|
jcodeFiles: current.jcodeFiles ?? snapshot,
|
|
@@ -163,8 +162,6 @@ const recordPendingInstall = async (pendingInstall) => update((current) => ({ ..
|
|
|
163
162
|
// or a machine that has never recorded a turn would look permanently fresh.
|
|
164
163
|
const recordInstalledAt = async (iso) => update((current) => current.installedAt ? current : { ...current, installedAt: iso });
|
|
165
164
|
const clearPendingInstall = async () => update(({ pendingInstall: _pendingInstall, ...current }) => current);
|
|
166
|
-
// Most durable source first: installedAt → pendingInstall (not yet POSTed) →
|
|
167
|
-
// receipt mtime (pre-installedAt receipts) → null (no receipt).
|
|
168
165
|
const installedAt = async () => {
|
|
169
166
|
const receipt = await read();
|
|
170
167
|
if (receipt?.installedAt)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-receipt.js","sourceRoot":"","sources":["../../src/_utils/install-receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAe,WAAW,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"install-receipt.js","sourceRoot":"","sources":["../../src/_utils/install-receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
// The jcode plugin ships INSIDE the CLI tarball: `pnpm build` copies
|
|
5
|
-
// packages/jcode-plugin into dist/jcode (see package.json build:jcode). At
|
|
6
|
-
// runtime this module lives at dist/_utils/jcode-bundle.js, so the bundle is
|
|
7
|
-
// its parent's `jcode/` sibling. GLEN_JCODE_BUNDLE_DIR overrides it for tests
|
|
8
|
-
// (which run from src/, where no bundle exists) and points at
|
|
9
|
-
// packages/jcode-plugin — the same layout as the built bundle.
|
|
10
4
|
const jcodeBundleDir = () => process.env.GLEN_JCODE_BUNDLE_DIR ||
|
|
11
5
|
join(dirname(fileURLToPath(import.meta.url)), "..", "jcode");
|
|
12
|
-
// Version stamped on installed skill dirs so doctor can re-sync on drift.
|
|
13
6
|
const jcodeBundleVersion = () => {
|
|
14
7
|
try {
|
|
15
8
|
const manifest = JSON.parse(readFileSync(join(jcodeBundleDir(), "plugin.json"), "utf8"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-bundle.js","sourceRoot":"","sources":["../../src/_utils/jcode-bundle.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,
|
|
1
|
+
{"version":3,"file":"jcode-bundle.js","sourceRoot":"","sources":["../../src/_utils/jcode-bundle.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,MAAM,cAAc,GAAG,GAAW,EAAE,CAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB;IACjC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAE/D,MAAM,kBAAkB,GAAG,GAAkB,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CACnC,CAAC;QAC3B,OAAO,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { readJcodeTurn, readJcodeUserPrompt } from "./parse-jcode-session.js";
|
|
2
|
-
// jcode delivers hook events as JCODE_HOOK_* env vars with stdin at
|
|
3
|
-
// /dev/null: JCODE_HOOK_EVENT / _SESSION_ID / _CWD plus per-event fields, and
|
|
4
|
-
// JCODE_HOOK_PAYLOAD, a JSON mirror of every field (lowercased keys, capped
|
|
5
|
-
// at 16 KB). The individual vars win; the payload is the fallback.
|
|
6
2
|
const payloadOf = (env) => {
|
|
7
3
|
try {
|
|
8
4
|
const parsed = JSON.parse(env.JCODE_HOOK_PAYLOAD ?? "");
|
|
@@ -16,18 +12,8 @@ const payloadOf = (env) => {
|
|
|
16
12
|
};
|
|
17
13
|
const str = (value) => typeof value === "string" && value ? value : null;
|
|
18
14
|
const field = (env, suffix, key) => str(env[`JCODE_HOOK_${suffix}`]) ?? str(payloadOf(env)[key]);
|
|
19
|
-
// turn_end
|
|
20
|
-
//
|
|
21
|
-
// session snapshot (measured ~5-7s later), so the answer is sourced two ways:
|
|
22
|
-
// 1. Preferred — the full reply from the session file, waited for up to
|
|
23
|
-
// GLEN_JCODE_SESSION_RETRIES * 500ms (default ~15s; the hook is detached,
|
|
24
|
-
// so the wait never blocks jcode). This captures replies longer than the
|
|
25
|
-
// env's 4000-char cap.
|
|
26
|
-
// 2. Fallback — if the assistant hasn't landed in the file within that
|
|
27
|
-
// window, pair the prompt already in the file with the answer jcode
|
|
28
|
-
// passes in the hook env (LAST_ASSISTANT_TEXT, first 4000 chars). This
|
|
29
|
-
// guarantees the turn is recorded rather than silently dropped.
|
|
30
|
-
// Only when neither yields a prompt+answer is nothing sent.
|
|
15
|
+
// jcode fires turn_end ~5-7s before the reply reaches the session file. Wait for it (the hook is detached),
|
|
16
|
+
// then fall back to the env's LAST_ASSISTANT_TEXT (first 4000 chars) so the turn is never dropped.
|
|
31
17
|
const DEFAULT_SESSION_RETRIES = 30;
|
|
32
18
|
const readJcodeStopEvent = async (env) => {
|
|
33
19
|
const sessionId = field(env, "SESSION_ID", "session_id");
|
|
@@ -53,8 +39,6 @@ const readJcodeStopEvent = async (env) => {
|
|
|
53
39
|
text: turn.text,
|
|
54
40
|
turn_id: turn.turnId,
|
|
55
41
|
};
|
|
56
|
-
// Assistant reply not flushed in time — pair the file's prompt with the
|
|
57
|
-
// env's answer so the turn is still captured.
|
|
58
42
|
const fallbackText = field(env, "LAST_ASSISTANT_TEXT", "last_assistant_text");
|
|
59
43
|
const userPrompt = await readJcodeUserPrompt(sessionId);
|
|
60
44
|
if (userPrompt && fallbackText)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-event.js","sourceRoot":"","sources":["../../src/_utils/jcode-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,
|
|
1
|
+
{"version":3,"file":"jcode-event.js","sourceRoot":"","sources":["../../src/_utils/jcode-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,MAAM,SAAS,GAAG,CAAC,GAAsB,EAA2B,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAY,CAAC;QACnE,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,KAAc,EAAiB,EAAE,CAC5C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAEpD,MAAM,KAAK,GAAG,CACZ,GAAsB,EACtB,MAAc,EACd,GAAW,EACI,EAAE,CACjB,GAAG,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,4GAA4G;AAC5G,mGAAmG;AACnG,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,kBAAkB,GAAG,KAAK,EAC9B,GAAsB,EACmB,EAAE;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,uBAAuB,CAAC;IAC5B,MAAM,IAAI,GAAG;QACX,eAAe,EAAE,MAAM;QACvB,UAAU,EAAE,SAAS;QACrB,GAAG;QACH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI;QACN,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC;IACJ,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,UAAU,IAAI,YAAY;QAC5B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,UAAU,CAAC,MAAM;SAC3B,CAAC;IACJ,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,GAAsB,EACU,EAAE;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,eAAe;QAChE,OAAO,IAAI,CAAC;IACd,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO;QACL,eAAe,EAAE,cAAc;QAC/B,UAAU,EAAE,SAAS;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE;QAC9C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
// FROZEN
|
|
2
|
-
// jcode has no hooks.json: these are the exact strings `glen install --agent
|
|
3
|
-
// jcode` writes into the user's ~/.jcode/config.toml [hooks] table. Both
|
|
4
|
-
// events are jcode observers — spawned detached, stdout discarded, the event
|
|
5
|
-
// delivered as JCODE_HOOK_* env vars — so the commands never inject anything.
|
|
1
|
+
// FROZEN: pinned by ingest.contract.test.ts. These exact strings are written into ~/.jcode/config.toml.
|
|
6
2
|
const GLEN_JCODE_HOOK_LINES = {
|
|
7
3
|
session_start: "glen session-start --agent jcode",
|
|
8
4
|
turn_end: "glen ingest --agent jcode",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-hook-lines.js","sourceRoot":"","sources":["../../src/_utils/jcode-hook-lines.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"jcode-hook-lines.js","sourceRoot":"","sources":["../../src/_utils/jcode-hook-lines.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,MAAM,qBAAqB,GAAG;IAC5B,aAAa,EAAE,kCAAkC;IACjD,QAAQ,EAAE,2BAA2B;CAC7B,CAAC;AAEX,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -2,7 +2,6 @@ import { parse } from "smol-toml";
|
|
|
2
2
|
import { err, ok } from "./result.js";
|
|
3
3
|
const HOOKS_HEADER_RE = /^\s*\[\s*hooks\s*\]\s*(?:#.*)?$/;
|
|
4
4
|
const isTableHeader = (line) => line.trimStart().startsWith("[");
|
|
5
|
-
// TOML basic strings share JSON's escaping for everything our values contain.
|
|
6
5
|
const quote = (value) => JSON.stringify(value);
|
|
7
6
|
const parseToml = (toml) => {
|
|
8
7
|
try {
|
|
@@ -31,15 +30,10 @@ const readHooksTable = (toml) => {
|
|
|
31
30
|
}
|
|
32
31
|
return ok(table);
|
|
33
32
|
};
|
|
34
|
-
// True when `hooks.<key>` is present but its value is neither a string nor
|
|
35
|
-
// an array of strings (e.g. an inline table or a bare number) — a shape
|
|
36
|
-
// readHooksTable silently drops. Callers use this to refuse editing one of
|
|
37
|
-
// glen's own keys rather than treat a dropped value as absent and overwrite
|
|
38
|
-
// whatever the user configured there.
|
|
39
33
|
const hookKeyHasUnsupportedShape = (toml, key) => {
|
|
40
34
|
const parsed = parseToml(toml);
|
|
41
35
|
if (!parsed.ok)
|
|
42
|
-
return false;
|
|
36
|
+
return false;
|
|
43
37
|
const hooks = parsed.value.hooks;
|
|
44
38
|
if (hooks === null || typeof hooks !== "object" || Array.isArray(hooks))
|
|
45
39
|
return false;
|
|
@@ -57,8 +51,6 @@ const hasHookLines = (table, lines) => Object.entries(lines).every(([key, line])
|
|
|
57
51
|
? current === line
|
|
58
52
|
: (current?.includes(line) ?? false);
|
|
59
53
|
});
|
|
60
|
-
// Line range [start, end] of `key = <value>` inside the [hooks] table. A
|
|
61
|
-
// multi-line array is followed to the line where the fragment parses.
|
|
62
54
|
const keySpan = (lines, tableStart, key) => {
|
|
63
55
|
const keyRe = new RegExp(`^\\s*(?:"${key}"|'${key}'|${key})\\s*=`);
|
|
64
56
|
const start = lines.findIndex((line, i) => i > tableStart &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-hooks-toml.js","sourceRoot":"","sources":["../../src/_utils/jcode-hooks-toml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jcode-hooks-toml.js","sourceRoot":"","sources":["../../src/_utils/jcode-hooks-toml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
// JCODE_HOME mirrors jcode's own installer override (`${JCODE_HOME:-$HOME/.jcode}`)
|
|
4
|
-
// so glen's tests and the CI smoke sandbox the config the same way. An empty
|
|
5
|
-
// string counts as unset (|| not ??) so it can never yield a relative path.
|
|
6
3
|
const jcodeHome = () => process.env.JCODE_HOME || join(homedir(), ".jcode");
|
|
7
4
|
const jcodeConfigTomlPath = () => join(jcodeHome(), "config.toml");
|
|
8
5
|
const jcodePromptOverlayPath = () => join(jcodeHome(), "prompt-overlay.md");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-paths.js","sourceRoot":"","sources":["../../src/_utils/jcode-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"jcode-paths.js","sourceRoot":"","sources":["../../src/_utils/jcode-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,GAAW,EAAE,CAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAEtD,MAAM,mBAAmB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3E,MAAM,sBAAsB,GAAG,GAAW,EAAE,CAC1C,IAAI,CAAC,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACzC,MAAM,uBAAuB,GAAG,GAAW,EAAE,CAC3C,IAAI,CAAC,SAAS,EAAE,EAAE,oBAAoB,CAAC,CAAC;AAC1C,MAAM,cAAc,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AACjE,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAErE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,GACjB,CAAC"}
|
|
@@ -31,8 +31,6 @@ const writeFailure = (path, cause) => cliErr({
|
|
|
31
31
|
path,
|
|
32
32
|
remedy: "check ownership of ~/.jcode (e.g. `sudo chown -R $USER ~/.jcode`), then re-run `glen install --agent jcode`",
|
|
33
33
|
});
|
|
34
|
-
// Write `next` only when it differs from `before`; returns the snapshot for
|
|
35
|
-
// the receipt plus whether anything changed.
|
|
36
34
|
const converge = async (path, before, next) => {
|
|
37
35
|
const snapshot = {
|
|
38
36
|
path,
|
|
@@ -57,7 +55,6 @@ const installJcode = async () => {
|
|
|
57
55
|
path: bundle,
|
|
58
56
|
remedy: "reinstall the CLI: `npm install -g @tryglen/cli@latest`, then re-run `glen install --agent jcode`",
|
|
59
57
|
}));
|
|
60
|
-
// 1. Hooks — refuse rather than guess when the user's TOML doesn't parse.
|
|
61
58
|
const configPath = jcodeConfigTomlPath();
|
|
62
59
|
const configBefore = await readOptional(configPath);
|
|
63
60
|
const edited = upsertHookLines(configBefore ?? "", GLEN_JCODE_HOOK_LINES);
|
|
@@ -71,7 +68,6 @@ const installJcode = async () => {
|
|
|
71
68
|
const hooks = await converge(configPath, configBefore, edited.value);
|
|
72
69
|
if (!hooks.ok)
|
|
73
70
|
return hooks;
|
|
74
|
-
// 2. Prompt layers — managed blocks, user text outside them untouched.
|
|
75
71
|
const overlayPath = jcodePromptOverlayPath();
|
|
76
72
|
const overlayBefore = await readOptional(overlayPath);
|
|
77
73
|
const overlay = await converge(overlayPath, overlayBefore, upsertManagedBlock(overlayBefore ?? "", overlayBody));
|
|
@@ -82,7 +78,6 @@ const installJcode = async () => {
|
|
|
82
78
|
const preferred = await converge(preferredPath, preferredBefore, upsertManagedBlock(preferredBefore ?? "", preferredBody));
|
|
83
79
|
if (!preferred.ok)
|
|
84
80
|
return preferred;
|
|
85
|
-
// 3. Skills — owned dirs only.
|
|
86
81
|
const skills = await syncJcodeSkills(join(bundle, "skills"), jcodeSkillsDir(), jcodeBundleVersion() ?? "0.0.0");
|
|
87
82
|
if (!skills.ok)
|
|
88
83
|
return err(cliErr({
|
|
@@ -110,8 +105,6 @@ const installJcode = async () => {
|
|
|
110
105
|
skills: skills.value,
|
|
111
106
|
});
|
|
112
107
|
};
|
|
113
|
-
// Remove a managed block; delete the file when glen created it and nothing
|
|
114
|
-
// else is left.
|
|
115
108
|
const restoreManaged = async (path, createdByGlen) => {
|
|
116
109
|
const before = await readOptional(path);
|
|
117
110
|
if (before === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-setup.js","sourceRoot":"","sources":["../../src/_utils/jcode-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAe,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jcode-setup.js","sourceRoot":"","sources":["../../src/_utils/jcode-setup.ts"],"names":[],"mappings":"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"}
|