@tryglen/cli 0.38.4 → 0.39.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.
Files changed (32) hide show
  1. package/README.md +1 -1
  2. package/dist/_generated/contract/procedures.gen.js +2 -1
  3. package/dist/_generated/contract/procedures.gen.js.map +1 -1
  4. package/dist/_generated/contract/zod.gen.js +62 -0
  5. package/dist/_generated/contract/zod.gen.js.map +1 -1
  6. package/dist/bin.js +2 -2
  7. package/dist/bin.js.map +1 -1
  8. package/dist/commands/import/_utils/chunk-turns.js +21 -0
  9. package/dist/commands/import/_utils/chunk-turns.js.map +1 -0
  10. package/dist/commands/import/_utils/send-with-retry.js +15 -0
  11. package/dist/commands/import/_utils/send-with-retry.js.map +1 -0
  12. package/dist/commands/import/import.options.js +16 -1
  13. package/dist/commands/import/import.options.js.map +1 -1
  14. package/dist/commands/import/index.js +244 -42
  15. package/dist/commands/import/index.js.map +1 -1
  16. package/dist/commands/takeover/_utils/agent-paths.js +2 -1
  17. package/dist/commands/takeover/_utils/agent-paths.js.map +1 -1
  18. package/dist/commands/takeover/_utils/codex-thread-messages.js +23 -0
  19. package/dist/commands/takeover/_utils/codex-thread-messages.js.map +1 -0
  20. package/dist/commands/takeover/_utils/import-codex-desktop-thread.js +2 -19
  21. package/dist/commands/takeover/_utils/import-codex-desktop-thread.js.map +1 -1
  22. package/dist/commands/takeover/_utils/verify-codex-session.js +50 -0
  23. package/dist/commands/takeover/_utils/verify-codex-session.js.map +1 -0
  24. package/dist/commands/takeover/_utils/write-codex-session.js +22 -3
  25. package/dist/commands/takeover/_utils/write-codex-session.js.map +1 -1
  26. package/dist/core/state/import-job.js +66 -0
  27. package/dist/core/state/import-job.js.map +1 -0
  28. package/dist/core/system/env.js +0 -1
  29. package/dist/core/system/env.js.map +1 -1
  30. package/dist/jcode/plugin.json +1 -1
  31. package/dist/jcode/skills/import-transcripts/SKILL.md +12 -5
  32. package/package.json +1 -1
@@ -7,13 +7,16 @@ import { agentPaths } from "./agent-paths.js";
7
7
  import { nativeFile } from "./native-file.js";
8
8
  import { probeAgent } from "./probe-agent.js";
9
9
  import { provenanceContext } from "./provenance-context.js";
10
- const writeCodexSession = (payload, workspace) => {
10
+ import { verifyCodexSession } from "./verify-codex-session.js";
11
+ const writeCodexSession = (payload, workspace, options = {}) => {
12
+ const verify = options.verify ?? verifyCodexSession;
11
13
  const createdAt = new Date();
12
14
  const targetPath = agentPaths.codex(payload.destinationSessionId, createdAt);
13
15
  const probe = async () => probeAgent({
14
16
  displayName: "Codex CLI",
15
17
  binName: "codex",
16
- versionPattern: /^codex-cli 0\.(14[3-9]|15\d|160)\./,
18
+ // No upper bound: each install is read back by Codex itself (see install below).
19
+ versionPattern: /^codex-cli (?:0\.(?:119|1[2-9]\d|[2-9]\d{2}|\d{4,})|[1-9]\d*\.\d+)\./,
17
20
  model: "gpt-5.4",
18
21
  // Below the reported 258,400-token window on purpose, so other configured models can't overfit.
19
22
  contextWindowTokens: 128_000,
@@ -111,7 +114,23 @@ const writeCodexSession = (payload, workspace) => {
111
114
  probe,
112
115
  stage,
113
116
  parse,
114
- install: (staged) => nativeFile.install(staged.path, targetPath, staged.recoveryCommand),
117
+ install: async (staged) => {
118
+ const installed = await nativeFile.install(staged.path, targetPath, staged.recoveryCommand);
119
+ if (!installed.ok)
120
+ return installed;
121
+ const checked = await probe();
122
+ if (!checked.ok)
123
+ return checked;
124
+ const verified = await verify({
125
+ binary: checked.value.binary,
126
+ sessionId: payload.destinationSessionId,
127
+ messages: payload.messages,
128
+ });
129
+ if (verified.ok)
130
+ return installed;
131
+ void (await files.remove(targetPath));
132
+ return verified;
133
+ },
115
134
  launch: async () => {
116
135
  const checked = await probe();
117
136
  if (!checked.ok)
@@ -1 +1 @@
1
- {"version":3,"file":"write-codex-session.js","sourceRoot":"","sources":["../../../../src/commands/takeover/_utils/write-codex-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-codex-session.js","sourceRoot":"","sources":["../../../../src/commands/takeover/_utils/write-codex-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { dirname, join } from "node:path";
2
+ import { mapErr } from "../errors/result.js";
3
+ import { field } from "../json/json-field.js";
4
+ import { parseJson } from "../json/parse-json.js";
5
+ import { files } from "../system/files.js";
6
+ import { glenState } from "./state.js";
7
+ // The worker saves progress after every batch call, and one call with all its retries takes
8
+ // under 10 minutes, so a running job this quiet has died without finishing.
9
+ const STALE_MS = 15 * 60 * 1000;
10
+ const jobPath = () => join(dirname(glenState.path()), "import-job.json");
11
+ const numberAt = (value, key) => {
12
+ const v = field(value, key);
13
+ return typeof v === "number" && Number.isFinite(v) ? v : null;
14
+ };
15
+ const jobOf = (value) => {
16
+ const id = field(value, "id");
17
+ const status = field(value, "status");
18
+ const stoppedBy = field(value, "stoppedBy");
19
+ const startedAt = numberAt(value, "startedAt");
20
+ const updatedAt = numberAt(value, "updatedAt");
21
+ const conversations = numberAt(value, "conversations");
22
+ const totalTurns = numberAt(value, "totalTurns");
23
+ const imported = numberAt(value, "imported");
24
+ const existing = numberAt(value, "existing");
25
+ const failedConversations = numberAt(value, "failedConversations");
26
+ if (typeof id !== "string")
27
+ return null;
28
+ if (status !== "running" && status !== "finished")
29
+ return null;
30
+ if (startedAt === null ||
31
+ updatedAt === null ||
32
+ conversations === null ||
33
+ totalTurns === null ||
34
+ imported === null ||
35
+ existing === null ||
36
+ failedConversations === null)
37
+ return null;
38
+ return {
39
+ id,
40
+ status,
41
+ startedAt,
42
+ updatedAt,
43
+ conversations,
44
+ totalTurns,
45
+ imported,
46
+ existing,
47
+ failedConversations,
48
+ ...(typeof stoppedBy === "string" ? { stoppedBy } : {}),
49
+ };
50
+ };
51
+ const read = async () => {
52
+ const raw = await files.readTextIfExists(jobPath());
53
+ if (!raw.ok || raw.value === null)
54
+ return null;
55
+ const parsed = parseJson(raw.value);
56
+ return parsed.ok ? jobOf(parsed.value) : null;
57
+ };
58
+ const write = async (job) => mapErr(await files.writeAtomic(jobPath(), JSON.stringify(job)), (f) => files.toError(f, {
59
+ code: "import.job_write_failed",
60
+ what: "could not save the import progress",
61
+ remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`)",
62
+ }));
63
+ const isStale = (job, now = Date.now()) => job.status === "running" && now - job.updatedAt > STALE_MS;
64
+ const importJob = { read, write, isStale };
65
+ export { importJob };
66
+ //# sourceMappingURL=import-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-job.js","sourceRoot":"","sources":["../../../src/core/state/import-job.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,6 @@ const STRINGS = [
31
31
  "GLEN_CLAUDE_HOME",
32
32
  "GLEN_CLAUDE_SETTINGS_PATH",
33
33
  "GLEN_CLAUDE_BIN",
34
- "GLEN_CODEX_HOME",
35
34
  "GLEN_CODEX_BIN",
36
35
  "GLEN_CODEX_DESKTOP_BIN",
37
36
  "GLEN_CURSOR_BIN",
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/core/system/env.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACd,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,IAAI;IACJ,UAAU;IACV,aAAa;IACb,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,qBAAqB;IACrB,6BAA6B;IAC7B,eAAe;IACf,+BAA+B;IAC/B,qBAAqB;IACrB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,2BAA2B;IAC3B,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,wBAAwB;IACxB,oBAAoB;IACpB,4BAA4B;IAC5B,4BAA4B;IAC5B,yBAAyB;IACzB,uBAAuB;IACvB,kBAAkB;IAClB,2BAA2B;IAC3B,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,wBAAwB;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,cAAc;IACd,aAAa;IACb,uBAAuB;IACvB,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,oBAAoB;IACpB,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,gCAAgC;CACxB,CAAC;AAEX,MAAM,KAAK,GAAG;IACZ,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,aAAa;IACb,yBAAyB;IACzB,sBAAsB;IACtB,yBAAyB;CACjB,CAAC;AAMX,MAAM,GAAG,GAAG,GAAQ,EAAE,CACpB,MAAM,CAAC,WAAW,CAAC;IACjB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IACvD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM;KACpD,CAAC;CACH,CAAQ,CAAC;AAEZ,OAAO,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/core/system/env.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACd,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,IAAI;IACJ,UAAU;IACV,aAAa;IACb,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,qBAAqB;IACrB,6BAA6B;IAC7B,eAAe;IACf,+BAA+B;IAC/B,qBAAqB;IACrB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,2BAA2B;IAC3B,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,wBAAwB;IACxB,oBAAoB;IACpB,4BAA4B;IAC5B,4BAA4B;IAC5B,yBAAyB;IACzB,uBAAuB;IACvB,kBAAkB;IAClB,2BAA2B;IAC3B,iBAAiB;IACjB,gBAAgB;IAChB,wBAAwB;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,cAAc;IACd,aAAa;IACb,uBAAuB;IACvB,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,oBAAoB;IACpB,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,gCAAgC;CACxB,CAAC;AAEX,MAAM,KAAK,GAAG;IACZ,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,aAAa;IACb,yBAAyB;IACzB,sBAAsB;IACtB,yBAAyB;CACjB,CAAC;AAMX,MAAM,GAAG,GAAG,GAAQ,EAAE,CACpB,MAAM,CAAC,WAAW,CAAC;IACjB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IACvD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM;KACpD,CAAC;CACH,CAAQ,CAAC;AAEZ,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glen",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Shared team memory for coding agents — capture on every turn and skill-driven recall via the glen CLI.",
5
5
  "author": { "name": "Glen", "url": "https://tryglen.com" },
6
6
  "homepage": "https://tryglen.com",
@@ -3,9 +3,15 @@ name: import-transcripts
3
3
  description: Import the user's old local coding-agent transcripts (Claude Code, Codex, Cursor, or Pi sessions from before glen was installed) into glen's shared team memory. Use when the user asks to import, backfill, or migrate past sessions/conversations/chat history into glen.
4
4
  ---
5
5
 
6
- Run `glen import <path…>` via Bash. It parses local transcripts, replays them
7
- into glen turn by turn, and is safe to re-run — already-imported turns are
8
- skipped automatically.
6
+ Run `glen import <path…>` via Bash. It parses local transcripts, starts the
7
+ import in the background and returns right away, so don't wait on it. Tell the
8
+ user it is running. glen does not tell you when it finishes: run
9
+ `glen import --status` to check on it (it says running, finished, or stopped,
10
+ with counts), and check again later if the user wants to know it is done.
11
+
12
+ It is safe to re-run: already-imported turns are skipped automatically, so
13
+ re-running the same command resumes or retries a stopped import. Pass `--wait`
14
+ only if the user wants it to run in the foreground.
9
15
 
10
16
  Where old transcripts live:
11
17
 
@@ -23,5 +29,6 @@ auto-detected per file). Preview with `glen import --dry-run <path…>` — it
23
29
  lists every conversation and turn count without writing anything. For large
24
30
  directories, offer the dry run first so the user can confirm the scope.
25
31
 
26
- If it prints "no active organization", tell the user to run `glen org switch`.
27
- If it prints "not connected", tell the user to run `glen login`.
32
+ If it (or `glen import --status`) prints "no active organization", tell the
33
+ user to run `glen org switch`. If it prints "not connected" or "connection
34
+ expired", tell the user to run `glen login`. Then re-run the same import.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryglen/cli",
3
- "version": "0.38.4",
3
+ "version": "0.39.0",
4
4
  "description": "Glen CLI — memory for coding agents",
5
5
  "type": "module",
6
6
  "bin": {