@tryglen/cli 0.36.0 → 0.37.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 +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.d.ts +1 -0
- package/dist/_utils/codex-hooks-setup.js +5 -18
- package/dist/_utils/codex-hooks-setup.js.map +1 -1
- package/dist/_utils/codex-paths.d.ts +2 -1
- package/dist/_utils/codex-paths.js +4 -4
- 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-rules-setup.d.ts +4 -0
- package/dist/_utils/codex-rules-setup.js +34 -0
- package/dist/_utils/codex-rules-setup.js.map +1 -0
- 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 +10 -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 +7 -7
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +0 -10
- package/dist/commands/update.js +6 -32
- package/dist/commands/update.js.map +1 -1
- package/dist/jcode/plugin.json +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { cp, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { err, fromPromise, ok } from "./result.js";
|
|
4
|
-
// glen
|
|
5
|
-
// `.glen-owned` marker in each directory glen copied is the only thing that
|
|
6
|
-
// lets converge/uninstall touch it — a same-named user directory without the
|
|
7
|
-
// marker is left alone (and reported), never overwritten.
|
|
4
|
+
// Only dirs with the .glen-owned marker may be touched; a same-named user dir is never overwritten.
|
|
8
5
|
const OWNED_MARKER = ".glen-owned";
|
|
9
6
|
const isOwned = async (dir) => (await fromPromise(readFile(join(dir, OWNED_MARKER), "utf8"))).ok;
|
|
10
7
|
const skillDirsOf = async (dir) => {
|
|
@@ -58,8 +55,6 @@ const removeJcodeSkills = async (targetDir) => {
|
|
|
58
55
|
}
|
|
59
56
|
return ok(removed);
|
|
60
57
|
};
|
|
61
|
-
// Version stamped on the first owned dir found — all owned dirs are written
|
|
62
|
-
// in one sync, so one is representative. null = nothing owned installed.
|
|
63
58
|
const installedJcodeSkillsVersion = async (targetDir) => {
|
|
64
59
|
for (const name of await skillDirsOf(targetDir)) {
|
|
65
60
|
const raw = await fromPromise(readFile(join(targetDir, name, OWNED_MARKER), "utf8"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jcode-skills-sync.js","sourceRoot":"","sources":["../../src/_utils/jcode-skills-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAe,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEhE,
|
|
1
|
+
{"version":3,"file":"jcode-skills-sync.js","sourceRoot":"","sources":["../../src/_utils/jcode-skills-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@ import { installReceipt } from "./install-receipt.js";
|
|
|
7
7
|
import { fromPromise } from "./result.js";
|
|
8
8
|
const WARNING_LINE = "glen: installed here, but no agent turns have ever been recorded from this machine — hooks fire where the agent process runs. Run `glen doctor` here for a diagnosis.";
|
|
9
9
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
10
|
-
// Same dir-derivation rule as the heartbeat file: co-located with GLEN_STATE_PATH.
|
|
11
10
|
const memoPath = () => join(process.env.GLEN_STATE_PATH
|
|
12
11
|
? dirname(process.env.GLEN_STATE_PATH)
|
|
13
12
|
: join(homedir(), ".glen"), "login-check-memo.json");
|
|
@@ -33,9 +32,7 @@ const writeMemo = async (lastPrintedAt) => {
|
|
|
33
32
|
await writeFile(tmp, JSON.stringify({ lastPrintedAt }));
|
|
34
33
|
await rename(tmp, path);
|
|
35
34
|
}
|
|
36
|
-
catch {
|
|
37
|
-
/* best-effort — a memo write must never break the login-check hook */
|
|
38
|
-
}
|
|
35
|
+
catch { }
|
|
39
36
|
};
|
|
40
37
|
const runLoginCheck = async (now = Date.now()) => {
|
|
41
38
|
const creds = await readCredentials();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-check.js","sourceRoot":"","sources":["../../src/_utils/login-check.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;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,YAAY,GAChB,uKAAuK,CAAC;AAE1K,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,
|
|
1
|
+
{"version":3,"file":"login-check.js","sourceRoot":"","sources":["../../src/_utils/login-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
// A marker-delimited region glen owns inside a file the USER also edits
|
|
2
|
-
// (jcode's ~/.jcode/prompt-overlay.md and preferred-tools.md). Everything
|
|
3
|
-
// outside the markers is preserved byte-for-byte; upsert replaces the region
|
|
4
|
-
// in place or appends one; strip removes it and the blank line it added.
|
|
5
1
|
const BEGIN = "<!-- glen:begin (managed by `glen install`; edits inside this block are overwritten) -->";
|
|
6
2
|
const END = "<!-- glen:end -->";
|
|
7
3
|
const blockFor = (body) => `${BEGIN}\n${body.trim()}\n${END}\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-block.js","sourceRoot":"","sources":["../../src/_utils/managed-block.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"managed-block.js","sourceRoot":"","sources":["../../src/_utils/managed-block.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GACT,0FAA0F,CAAC;AAC7F,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAEhC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;AAEhF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAyC,EAAE;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,MAAM,IAAI,CAAC;IAChC,OAAO,GAAG,MAAM,OAAO,IAAI,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
// cac camelCases option names before
|
|
2
|
-
//
|
|
3
|
-
// at parse time and greedily consumes the next argv token as its "value"
|
|
4
|
-
// (`glen import --dry-run ~/x` → dryRun="~/x", path lost). Rewriting the
|
|
5
|
-
// kebab token to its camelCase twin before parsing makes mri match it as the
|
|
6
|
-
// boolean it is; cac maps it back to the same `options.dryRun`. Tokens after
|
|
7
|
-
// a `--` separator are user payload and are left untouched.
|
|
1
|
+
// cac camelCases option names before mri sees them, so `--dry-run` isn't treated as boolean and eats the next arg.
|
|
2
|
+
// Rewrite to camelCase before parsing; leave tokens after `--` alone.
|
|
8
3
|
const normalizeBooleanFlags = (argv, flags) => {
|
|
9
4
|
const camelOf = new Map(flags.map((f) => [
|
|
10
5
|
f,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-boolean-flags.js","sourceRoot":"","sources":["../../src/_utils/normalize-boolean-flags.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"normalize-boolean-flags.js","sourceRoot":"","sources":["../../src/_utils/normalize-boolean-flags.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,sEAAsE;AACtE,MAAM,qBAAqB,GAAG,CAC5B,IAAuB,EACvB,KAAwB,EACd,EAAE;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACf,CAAC;QACD,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE;KACjF,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAC3B,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAC3E,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -11,9 +11,7 @@ const openBrowser = (url) => {
|
|
|
11
11
|
detached: true,
|
|
12
12
|
shell: process.platform === "win32",
|
|
13
13
|
});
|
|
14
|
-
child.on("error", () => {
|
|
15
|
-
// best-effort — the caller already printed the URL as a manual fallback
|
|
16
|
-
});
|
|
14
|
+
child.on("error", () => { });
|
|
17
15
|
child.unref();
|
|
18
16
|
};
|
|
19
17
|
export { openBrowser };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/_utils/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,GAAG,CAAC,GAAW,EAAQ,EAAE;IACxC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC7B,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/_utils/open-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,GAAG,CAAC,GAAW,EAAQ,EAAE;IACxC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC7B,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -14,9 +14,6 @@ const parseLine = (line) => {
|
|
|
14
14
|
const messageOf = (e) => e.message !== null && typeof e.message === "object"
|
|
15
15
|
? e.message
|
|
16
16
|
: null;
|
|
17
|
-
// Text of a Claude message: a plain string (typical human prompt) or the
|
|
18
|
-
// concatenated `text` content blocks (assistant output; thinking/tool_use
|
|
19
|
-
// blocks are not conversation text).
|
|
20
17
|
const textOf = (content) => {
|
|
21
18
|
if (typeof content === "string")
|
|
22
19
|
return content;
|
|
@@ -30,8 +27,6 @@ const textOf = (content) => {
|
|
|
30
27
|
.map((p) => p.text)
|
|
31
28
|
.join("\n");
|
|
32
29
|
};
|
|
33
|
-
// User-role lines that are tool results, not human prompts: a tool_result
|
|
34
|
-
// content block and/or the top-level toolUseResult sibling.
|
|
35
30
|
const isToolResult = (e) => {
|
|
36
31
|
if (e.toolUseResult !== undefined)
|
|
37
32
|
return true;
|
|
@@ -41,7 +36,6 @@ const isToolResult = (e) => {
|
|
|
41
36
|
typeof p === "object" &&
|
|
42
37
|
p.type === "tool_result"));
|
|
43
38
|
};
|
|
44
|
-
// Harness-injected user lines that were never typed by the human.
|
|
45
39
|
const INJECTED_PREFIXES = [
|
|
46
40
|
"<command-name>",
|
|
47
41
|
"<command-message>",
|
|
@@ -49,15 +43,8 @@ const INJECTED_PREFIXES = [
|
|
|
49
43
|
"<local-command-stderr>",
|
|
50
44
|
"Caveat:",
|
|
51
45
|
];
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
// CONVERSATION line (user/assistant, not sidechain/meta) that is nobody's
|
|
55
|
-
// parent — so abandoned branches aren't imported twice. Restricting leaf
|
|
56
|
-
// candidates to conversation lines matters: harness bookkeeping (meta command
|
|
57
|
-
// lines, attachments) can trail the file as childless roots, and picking one
|
|
58
|
-
// of those as the leaf would walk a one-line branch and drop the whole
|
|
59
|
-
// session. Falls back to file order when the chain is unwalkable (format
|
|
60
|
-
// drift), which matches the active branch in almost all sessions.
|
|
46
|
+
// Leaf = the last user/assistant line nobody points at. Trailing bookkeeping lines can be childless roots,
|
|
47
|
+
// and picking one as the leaf would drop the whole session.
|
|
61
48
|
const activeBranch = (entries) => {
|
|
62
49
|
const withUuid = entries.filter((e) => typeof e.uuid === "string");
|
|
63
50
|
const byUuid = new Map(withUuid.map((e) => [e.uuid, e]));
|
|
@@ -80,19 +67,15 @@ const activeBranch = (entries) => {
|
|
|
80
67
|
const chain = walk(leaf, [], new Set());
|
|
81
68
|
return chain.length > 0 ? chain : entries;
|
|
82
69
|
};
|
|
83
|
-
// Parse one Claude Code session file (~/.claude/projects/<munged-cwd>/<uuid>.jsonl)
|
|
84
|
-
// into the normalized transcript shape. Tolerant by design: unknown line types,
|
|
85
|
-
// missing fields, and unparseable lines are skipped, never fatal — the format
|
|
86
|
-
// is undocumented and drifts across versions.
|
|
87
70
|
const parseClaudeTranscript = (lines, fallbackSessionId) => {
|
|
88
71
|
const entries = lines.map(parseLine).filter((e) => e !== null);
|
|
89
72
|
const conversation = activeBranch(entries).filter((e) => {
|
|
90
73
|
if (e.type !== "user" && e.type !== "assistant")
|
|
91
74
|
return false;
|
|
92
75
|
if (e.isSidechain === true)
|
|
93
|
-
return false;
|
|
76
|
+
return false;
|
|
94
77
|
if (e.isMeta === true)
|
|
95
|
-
return false;
|
|
78
|
+
return false;
|
|
96
79
|
return messageOf(e) !== null;
|
|
97
80
|
});
|
|
98
81
|
const messages = [];
|
|
@@ -110,9 +93,6 @@ const parseClaudeTranscript = (lines, fallbackSessionId) => {
|
|
|
110
93
|
continue;
|
|
111
94
|
}
|
|
112
95
|
if (e.type === "user") {
|
|
113
|
-
// Claude returns tool OUTPUTS as their own user line — lift the
|
|
114
|
-
// tool_result blocks onto the preceding assistant message's segments and
|
|
115
|
-
// drop the line from the top-level prose stream (spec: full I/O capture).
|
|
116
96
|
if (isToolResult(e)) {
|
|
117
97
|
const prev = messages[messages.length - 1];
|
|
118
98
|
const resultSegs = extractClaudeSegments(msg ?? {}).filter((s) => s.kind === "tool_result");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-claude-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-claude-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAQnF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAgB,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAgB;YACnB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAgB,EAAE,CAC3C,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;IACjD,CAAC,CAAE,CAAC,CAAC,OAAiB;IACtB,CAAC,CAAC,IAAI,CAAC;AAEX,
|
|
1
|
+
{"version":3,"file":"parse-claude-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-claude-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAQnF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAgB,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAgB;YACnB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAgB,EAAE,CAC3C,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;IACjD,CAAC,CAAE,CAAC,CAAC,OAAiB;IACtB,CAAC,CAAC,IAAI,CAAC;AAEX,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CACL,CAAC,CAAC,EAAuC,EAAE,CACzC,CAAC,KAAK,IAAI;QACV,OAAO,CAAC,KAAK,QAAQ;QACpB,CAAW,CAAC,IAAI,KAAK,MAAM;QAC5B,OAAQ,CAAW,CAAC,IAAI,KAAK,QAAQ,CACxC;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAW,EAAE;IACzC,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IACtC,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,KAAK,IAAI;YACV,OAAO,CAAC,KAAK,QAAQ;YACpB,CAAW,CAAC,IAAI,KAAK,aAAa,CACtC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,gBAAgB;IAChB,mBAAmB;IACnB,wBAAwB;IACxB,wBAAwB;IACxB,SAAS;CACV,CAAC;AAEF,2GAA2G;AAC3G,4DAA4D;AAC5D,MAAM,YAAY,GAAG,CAAC,OAAyB,EAAoB,EAAE;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CACrD,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;SAC5B,OAAO,EAAE;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GACR,SAAS,CAAC,IAAI,CACZ,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;QAC7C,CAAC,CAAC,WAAW,KAAK,IAAI;QACtB,CAAC,CAAC,MAAM,KAAK,IAAI,CACpB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAC1B,MAAM,IAAI,GAAG,CACX,CAAoB,EACpB,GAAqB,EACrB,IAAyB,EACP,EAAE;QACpB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC;QACrE,OAAO,IAAI,CACT,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EACvE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EACX,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC5B,KAAwB,EACxB,iBAAyB,EACA,EAAE;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;gBAC9C,IAAI;gBACJ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;aACzC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,CAAC;gBACF,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;oBAC5D,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;wBAC9B,GAAG,IAAI;wBACP,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC;qBACpD,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YAChE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,QAAQ,EAAE,qBAAqB,CAAC,GAAG,IAAI,EAAE,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,QAAQ,EAAE,qBAAqB,CAAC,GAAG,IAAI,EAAE,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,CAC7D,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,CAAC;SAChC,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;SAC/B,IAAI,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAEnD,OAAO;QACL,SAAS,EAAG,KAAK,EAAE,SAAgC,IAAI,iBAAiB;QACxE,KAAK,EAAE,aAAa;QACpB,GAAG,EAAE,QAAQ,EAAE,GAAyB;QACxC,MAAM,EAAE,WAAW,EAAE,SAA+B;QACpD,KAAK,EAAE,SAAS;QAChB,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -11,8 +11,6 @@ const parseLine = (line) => {
|
|
|
11
11
|
return null;
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
|
-
// User-role message items Codex injects itself (environment context, AGENTS.md
|
|
15
|
-
// instructions, permission notes) — never typed by the human.
|
|
16
14
|
const INJECTED_PREFIXES = [
|
|
17
15
|
"<environment_context>",
|
|
18
16
|
"<user_instructions>",
|
|
@@ -20,9 +18,6 @@ const INJECTED_PREFIXES = [
|
|
|
20
18
|
"<turn_context>",
|
|
21
19
|
"<ide_context>",
|
|
22
20
|
];
|
|
23
|
-
// Text of a Responses-API message item: `input_text` parts (user) and
|
|
24
|
-
// `output_text` parts (assistant); other part kinds (images, refusals) are
|
|
25
|
-
// not conversation text.
|
|
26
21
|
const textOf = (content) => {
|
|
27
22
|
if (!Array.isArray(content))
|
|
28
23
|
return "";
|
|
@@ -40,7 +35,7 @@ const messageFrom = (item, timestamp) => {
|
|
|
40
35
|
return null;
|
|
41
36
|
const role = item.role;
|
|
42
37
|
if (role !== "user" && role !== "assistant")
|
|
43
|
-
return null;
|
|
38
|
+
return null;
|
|
44
39
|
const text = textOf(item.content);
|
|
45
40
|
if (role === "user" && INJECTED_PREFIXES.some((p) => text.startsWith(p)))
|
|
46
41
|
return null;
|
|
@@ -53,12 +48,6 @@ const messageFrom = (item, timestamp) => {
|
|
|
53
48
|
...(segments.length > 0 ? { segments } : {}),
|
|
54
49
|
};
|
|
55
50
|
};
|
|
56
|
-
// Append segments from a `reasoning`/`function_call`/`function_call_output`
|
|
57
|
-
// item to the last pushed assistant message (they arrive as their own
|
|
58
|
-
// response_item lines, interleaved after the prose they belong to). If there
|
|
59
|
-
// is no trailing assistant message yet, start one carrying only segments —
|
|
60
|
-
// Task 3's truncation and Task 6's segment-only-message handling let it
|
|
61
|
-
// survive downstream folding with an empty `text`.
|
|
62
51
|
const appendSegments = (messages, segments) => {
|
|
63
52
|
const last = messages[messages.length - 1];
|
|
64
53
|
if (last && last.role === "assistant") {
|
|
@@ -70,13 +59,6 @@ const appendSegments = (messages, segments) => {
|
|
|
70
59
|
}
|
|
71
60
|
messages.push({ role: "assistant", text: "", segments });
|
|
72
61
|
};
|
|
73
|
-
// Parse one Codex CLI rollout file (~/.codex/sessions/YYYY/MM/DD/
|
|
74
|
-
// rollout-<date>-<uuid>.jsonl) into the normalized transcript shape. Only
|
|
75
|
-
// `session_meta` / `turn_context` / `response_item` lines matter — `event_msg`
|
|
76
|
-
// lines duplicate the same content as a UI stream, so they are skipped to
|
|
77
|
-
// avoid double-importing every message. Pre-envelope rollouts (bare
|
|
78
|
-
// ResponseItem objects without {timestamp,type,payload}) are handled too.
|
|
79
|
-
// Tolerant by design: unknown types and malformed lines are skipped.
|
|
80
62
|
const parseCodexTranscript = (lines, fallbackSessionId) => {
|
|
81
63
|
const parsed = lines.map(parseLine).filter((e) => e !== null);
|
|
82
64
|
const result = {
|
|
@@ -106,13 +88,10 @@ const parseCodexTranscript = (lines, fallbackSessionId) => {
|
|
|
106
88
|
}
|
|
107
89
|
if (line.type === "turn_context" && payload) {
|
|
108
90
|
result.cwd ??= typeof payload.cwd === "string" ? payload.cwd : undefined;
|
|
109
|
-
// Latest turn_context wins: the model can change mid-session.
|
|
110
91
|
if (typeof payload.model === "string")
|
|
111
92
|
result.model = payload.model;
|
|
112
93
|
continue;
|
|
113
94
|
}
|
|
114
|
-
// Envelope form (current) or a bare pre-envelope ResponseItem (2025-era
|
|
115
|
-
// rollouts wrote items without the {timestamp,type,payload} wrapper).
|
|
116
95
|
const item = line.type === "response_item" && payload
|
|
117
96
|
? payload
|
|
118
97
|
: payload === null &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-codex-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-codex-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AASnF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAgB,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAgB;YACnB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"parse-codex-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-codex-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,7 @@ import { normalizeTranscriptTimestamp } from "./normalize-transcript-timestamp.j
|
|
|
7
7
|
import { err, ok } from "./result.js";
|
|
8
8
|
const loadSqlite = async () => {
|
|
9
9
|
try {
|
|
10
|
-
// Indirect specifier: @types/node@20
|
|
11
|
-
// node:sqlite declarations, so a literal import() would fail tsc even
|
|
12
|
-
// though the module exists at runtime on Node >= 22.5.
|
|
10
|
+
// Indirect specifier: @types/node@20 has no node:sqlite types, so a literal import() fails tsc.
|
|
13
11
|
const specifier = "node:sqlite";
|
|
14
12
|
const sqlite = (await import(specifier));
|
|
15
13
|
return sqlite.DatabaseSync ?? null;
|
|
@@ -31,10 +29,6 @@ const parseJson = (value) => {
|
|
|
31
29
|
return null;
|
|
32
30
|
}
|
|
33
31
|
};
|
|
34
|
-
// Cursor stores three generations of chat data; all use type 1 = user,
|
|
35
|
-
// 2 = assistant on the message ("bubble") level; the legacy aichat pane used
|
|
36
|
-
// "user"/"ai" strings in some builds. Bubbles with empty text but populated
|
|
37
|
-
// tool data are tool steps, not blank messages — skipped via empty text.
|
|
38
32
|
const bubbleMessage = (bubble) => {
|
|
39
33
|
if (bubble.glenTakeoverProvenance === true)
|
|
40
34
|
return null;
|
|
@@ -64,8 +58,6 @@ const bubbleMessage = (bubble) => {
|
|
|
64
58
|
const occurredAt = normalizeTranscriptTimestamp(bubble.timestamp ?? bubble.createdAt ?? bubble.created_at);
|
|
65
59
|
return { role, text, ...(occurredAt ? { occurredAt } : {}) };
|
|
66
60
|
};
|
|
67
|
-
// A query against a table that may not exist in this generation of the db
|
|
68
|
-
// (workspace dbs have no cursorDiskKV, some have no chat keys at all).
|
|
69
61
|
const tryRows = (db, sql, params = []) => {
|
|
70
62
|
try {
|
|
71
63
|
return db.prepare(sql).all(...params);
|
|
@@ -86,8 +78,6 @@ const composerTranscripts = (db) => {
|
|
|
86
78
|
const composerId = typeof composer.composerId === "string"
|
|
87
79
|
? composer.composerId
|
|
88
80
|
: key.slice("composerData:".length);
|
|
89
|
-
// Older builds inline the whole conversation; newer ones store headers and
|
|
90
|
-
// one bubbleId:<composerId>:<bubbleId> row per message.
|
|
91
81
|
const inline = Array.isArray(composer.conversation)
|
|
92
82
|
? composer.conversation
|
|
93
83
|
: null;
|
|
@@ -118,7 +108,6 @@ const composerTranscripts = (db) => {
|
|
|
118
108
|
}
|
|
119
109
|
return transcripts;
|
|
120
110
|
};
|
|
121
|
-
// Legacy (pre-composer) chat pane: one ItemTable blob with tabs[].bubbles[].
|
|
122
111
|
const legacyChatTranscripts = (db) => {
|
|
123
112
|
const rows = tryRows(db, "SELECT value FROM ItemTable WHERE key = 'workbench.panel.aichat.view.aichat.chatdata'");
|
|
124
113
|
const data = parseJson(rowValue(rows[0]));
|
|
@@ -146,10 +135,7 @@ const legacyChatTranscripts = (db) => {
|
|
|
146
135
|
}
|
|
147
136
|
return transcripts;
|
|
148
137
|
};
|
|
149
|
-
//
|
|
150
|
-
// transcripts. The db is copied to a temp dir first — Cursor holds a write
|
|
151
|
-
// lock (and a -wal journal) while running, and we must never write to the
|
|
152
|
-
// original. Requires node:sqlite (Node >= 22.5).
|
|
138
|
+
// Copy the db first: Cursor holds a write lock while running, and we must never write to the original.
|
|
153
139
|
const parseCursorDb = async (dbPath) => {
|
|
154
140
|
const DatabaseSync = await loadSqlite();
|
|
155
141
|
if (!DatabaseSync)
|
|
@@ -158,9 +144,6 @@ const parseCursorDb = async (dbPath) => {
|
|
|
158
144
|
path: dbPath,
|
|
159
145
|
remedy: "re-run `glen import` with Node 22.5 or newer (e.g. `nvm install 22`)",
|
|
160
146
|
}));
|
|
161
|
-
// sqlite opens lazily, so a non-database file wouldn't fail until the first
|
|
162
|
-
// query — which the table-may-not-exist guards would then swallow. Check the
|
|
163
|
-
// container magic up front for an honest error instead of a silent zero.
|
|
164
147
|
const header = await (async () => {
|
|
165
148
|
try {
|
|
166
149
|
const handle = await open(dbPath, "r");
|
|
@@ -184,8 +167,6 @@ const parseCursorDb = async (dbPath) => {
|
|
|
184
167
|
const copied = await (async () => {
|
|
185
168
|
try {
|
|
186
169
|
await copyFile(dbPath, tempDb);
|
|
187
|
-
// The write-ahead log holds recent commits; copy it so fresh chats are
|
|
188
|
-
// visible. Best-effort — a db checkpointed by Cursor has none.
|
|
189
170
|
if (existsSync(`${dbPath}-wal`))
|
|
190
171
|
await copyFile(`${dbPath}-wal`, `${tempDb}-wal`);
|
|
191
172
|
if (existsSync(`${dbPath}-shm`))
|