@tryglen/cli 0.34.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.
Files changed (252) hide show
  1. package/README.md +39 -27
  2. package/dist/_utils/agent-adapter.d.ts +0 -13
  3. package/dist/_utils/agent-adapter.js +1 -19
  4. package/dist/_utils/agent-adapter.js.map +1 -1
  5. package/dist/_utils/agents-table.js +1 -9
  6. package/dist/_utils/agents-table.js.map +1 -1
  7. package/dist/_utils/cli-error.js +0 -3
  8. package/dist/_utils/cli-error.js.map +1 -1
  9. package/dist/_utils/codex-app-server.js +0 -2
  10. package/dist/_utils/codex-app-server.js.map +1 -1
  11. package/dist/_utils/codex-hooks-merge.js +0 -11
  12. package/dist/_utils/codex-hooks-merge.js.map +1 -1
  13. package/dist/_utils/codex-hooks-setup.js +0 -18
  14. package/dist/_utils/codex-hooks-setup.js.map +1 -1
  15. package/dist/_utils/codex-paths.js +0 -3
  16. package/dist/_utils/codex-paths.js.map +1 -1
  17. package/dist/_utils/codex-repair-trace.js +0 -3
  18. package/dist/_utils/codex-repair-trace.js.map +1 -1
  19. package/dist/_utils/codex-trust-toml.js +1 -9
  20. package/dist/_utils/codex-trust-toml.js.map +1 -1
  21. package/dist/_utils/collect-import-files.js +0 -7
  22. package/dist/_utils/collect-import-files.js.map +1 -1
  23. package/dist/_utils/config.js +0 -4
  24. package/dist/_utils/config.js.map +1 -1
  25. package/dist/_utils/confirm.js +2 -10
  26. package/dist/_utils/confirm.js.map +1 -1
  27. package/dist/_utils/credentials.js +0 -3
  28. package/dist/_utils/credentials.js.map +1 -1
  29. package/dist/_utils/detect-transcript-format.d.ts +1 -1
  30. package/dist/_utils/detect-transcript-format.js +0 -7
  31. package/dist/_utils/detect-transcript-format.js.map +1 -1
  32. package/dist/_utils/ensure-global-cli.d.ts +0 -12
  33. package/dist/_utils/ensure-global-cli.js +1 -28
  34. package/dist/_utils/ensure-global-cli.js.map +1 -1
  35. package/dist/_utils/ephemeral-session.js +3 -24
  36. package/dist/_utils/ephemeral-session.js.map +1 -1
  37. package/dist/_utils/extract-claude-segments.js +1 -5
  38. package/dist/_utils/extract-claude-segments.js.map +1 -1
  39. package/dist/_utils/extract-codex-segments.js +0 -9
  40. package/dist/_utils/extract-codex-segments.js.map +1 -1
  41. package/dist/_utils/extract-pi-segments.js +1 -5
  42. package/dist/_utils/extract-pi-segments.js.map +1 -1
  43. package/dist/_utils/find-bin.js +0 -8
  44. package/dist/_utils/find-bin.js.map +1 -1
  45. package/dist/_utils/format-search-result.js +3 -19
  46. package/dist/_utils/format-search-result.js.map +1 -1
  47. package/dist/_utils/format-turn-nudges.js +2 -20
  48. package/dist/_utils/format-turn-nudges.js.map +1 -1
  49. package/dist/_utils/git-context.d.ts +0 -2
  50. package/dist/_utils/git-context.js +1 -33
  51. package/dist/_utils/git-context.js.map +1 -1
  52. package/dist/_utils/git-hook-setup.js +0 -1
  53. package/dist/_utils/git-hook-setup.js.map +1 -1
  54. package/dist/_utils/glen-headers.js +1 -4
  55. package/dist/_utils/glen-headers.js.map +1 -1
  56. package/dist/_utils/http.js +1 -8
  57. package/dist/_utils/http.js.map +1 -1
  58. package/dist/_utils/idempotency-key.js +1 -4
  59. package/dist/_utils/idempotency-key.js.map +1 -1
  60. package/dist/_utils/indicator-app.js +4 -26
  61. package/dist/_utils/indicator-app.js.map +1 -1
  62. package/dist/_utils/indicator-health.js +0 -6
  63. package/dist/_utils/indicator-health.js.map +1 -1
  64. package/dist/_utils/ingest-diagnosis.js +0 -5
  65. package/dist/_utils/ingest-diagnosis.js.map +1 -1
  66. package/dist/_utils/ingest-heartbeat.js +1 -6
  67. package/dist/_utils/ingest-heartbeat.js.map +1 -1
  68. package/dist/_utils/install-receipt.d.ts +9 -1
  69. package/dist/_utils/install-receipt.js +18 -3
  70. package/dist/_utils/install-receipt.js.map +1 -1
  71. package/dist/_utils/jcode-bundle.d.ts +3 -0
  72. package/dist/_utils/jcode-bundle.js +16 -0
  73. package/dist/_utils/jcode-bundle.js.map +1 -0
  74. package/dist/_utils/jcode-event.d.ts +3 -0
  75. package/dist/_utils/jcode-event.js +66 -0
  76. package/dist/_utils/jcode-event.js.map +1 -0
  77. package/dist/_utils/jcode-hook-lines.d.ts +5 -0
  78. package/dist/_utils/jcode-hook-lines.js +7 -0
  79. package/dist/_utils/jcode-hook-lines.js.map +1 -0
  80. package/dist/_utils/jcode-hooks-toml.d.ts +8 -0
  81. package/dist/_utils/jcode-hooks-toml.js +148 -0
  82. package/dist/_utils/jcode-hooks-toml.js.map +1 -0
  83. package/dist/_utils/jcode-paths.d.ts +7 -0
  84. package/dist/_utils/jcode-paths.js +10 -0
  85. package/dist/_utils/jcode-paths.js.map +1 -0
  86. package/dist/_utils/jcode-setup.d.ts +27 -0
  87. package/dist/_utils/jcode-setup.js +151 -0
  88. package/dist/_utils/jcode-setup.js.map +1 -0
  89. package/dist/_utils/jcode-skills-sync.d.ts +8 -0
  90. package/dist/_utils/jcode-skills-sync.js +74 -0
  91. package/dist/_utils/jcode-skills-sync.js.map +1 -0
  92. package/dist/_utils/login-check.js +1 -4
  93. package/dist/_utils/login-check.js.map +1 -1
  94. package/dist/_utils/managed-block.d.ts +4 -0
  95. package/dist/_utils/managed-block.js +38 -0
  96. package/dist/_utils/managed-block.js.map +1 -0
  97. package/dist/_utils/normalize-boolean-flags.js +2 -7
  98. package/dist/_utils/normalize-boolean-flags.js.map +1 -1
  99. package/dist/_utils/open-browser.js +1 -3
  100. package/dist/_utils/open-browser.js.map +1 -1
  101. package/dist/_utils/parse-claude-transcript.js +4 -24
  102. package/dist/_utils/parse-claude-transcript.js.map +1 -1
  103. package/dist/_utils/parse-codex-transcript.js +1 -22
  104. package/dist/_utils/parse-codex-transcript.js.map +1 -1
  105. package/dist/_utils/parse-cursor-db.js +2 -21
  106. package/dist/_utils/parse-cursor-db.js.map +1 -1
  107. package/dist/_utils/parse-harbor-atif.js +2 -1
  108. package/dist/_utils/parse-harbor-atif.js.map +1 -1
  109. package/dist/_utils/parse-jcode-session.d.ts +14 -0
  110. package/dist/_utils/parse-jcode-session.js +113 -0
  111. package/dist/_utils/parse-jcode-session.js.map +1 -0
  112. package/dist/_utils/parse-pi-transcript.js +1 -35
  113. package/dist/_utils/parse-pi-transcript.js.map +1 -1
  114. package/dist/_utils/parse-transcript.js +1 -9
  115. package/dist/_utils/parse-transcript.js.map +1 -1
  116. package/dist/_utils/plugin-status.d.ts +1 -1
  117. package/dist/_utils/plugin-status.js +25 -16
  118. package/dist/_utils/plugin-status.js.map +1 -1
  119. package/dist/_utils/post-route.js +0 -7
  120. package/dist/_utils/post-route.js.map +1 -1
  121. package/dist/_utils/pr-review-link.js +0 -2
  122. package/dist/_utils/pr-review-link.js.map +1 -1
  123. package/dist/_utils/proactive-ticket-log.js +1 -11
  124. package/dist/_utils/proactive-ticket-log.js.map +1 -1
  125. package/dist/_utils/record-commit-anchor.js +1 -8
  126. package/dist/_utils/record-commit-anchor.js.map +1 -1
  127. package/dist/_utils/refresh-control-state.js +1 -7
  128. package/dist/_utils/refresh-control-state.js.map +1 -1
  129. package/dist/_utils/render-callback-page.js +0 -7
  130. package/dist/_utils/render-callback-page.js.map +1 -1
  131. package/dist/_utils/resolve-import-workspace.d.ts +0 -7
  132. package/dist/_utils/resolve-import-workspace.js +1 -13
  133. package/dist/_utils/resolve-import-workspace.js.map +1 -1
  134. package/dist/_utils/run-bin.js +0 -2
  135. package/dist/_utils/run-bin.js.map +1 -1
  136. package/dist/_utils/session-map.js +0 -5
  137. package/dist/_utils/session-map.js.map +1 -1
  138. package/dist/_utils/shell-profile.js +1 -28
  139. package/dist/_utils/shell-profile.js.map +1 -1
  140. package/dist/_utils/state-line-memo.d.ts +0 -6
  141. package/dist/_utils/state-line-memo.js +3 -18
  142. package/dist/_utils/state-line-memo.js.map +1 -1
  143. package/dist/_utils/state-line.js +0 -4
  144. package/dist/_utils/state-line.js.map +1 -1
  145. package/dist/_utils/state.js +0 -5
  146. package/dist/_utils/state.js.map +1 -1
  147. package/dist/_utils/sync-mode-from-server.d.ts +0 -18
  148. package/dist/_utils/sync-mode-from-server.js +2 -21
  149. package/dist/_utils/sync-mode-from-server.js.map +1 -1
  150. package/dist/_utils/transcript-turns.d.ts +1 -1
  151. package/dist/_utils/transcript-turns.js +1 -51
  152. package/dist/_utils/transcript-turns.js.map +1 -1
  153. package/dist/_utils/turn-cache.js +1 -8
  154. package/dist/_utils/turn-cache.js.map +1 -1
  155. package/dist/_utils/update.d.ts +0 -10
  156. package/dist/_utils/update.js +8 -30
  157. package/dist/_utils/update.js.map +1 -1
  158. package/dist/_utils/version.js +3 -6
  159. package/dist/_utils/version.js.map +1 -1
  160. package/dist/_utils/which.d.ts +0 -5
  161. package/dist/_utils/which.js +0 -5
  162. package/dist/_utils/which.js.map +1 -1
  163. package/dist/_utils/write-commit-trailer.js +1 -5
  164. package/dist/_utils/write-commit-trailer.js.map +1 -1
  165. package/dist/bin.js +15 -31
  166. package/dist/bin.js.map +1 -1
  167. package/dist/commands/_utils/materialize-skill.js +4 -34
  168. package/dist/commands/_utils/materialize-skill.js.map +1 -1
  169. package/dist/commands/_utils/pack-skill-dir.js +6 -27
  170. package/dist/commands/_utils/pack-skill-dir.js.map +1 -1
  171. package/dist/commands/artifact.js +2 -5
  172. package/dist/commands/artifact.js.map +1 -1
  173. package/dist/commands/code-search.js +0 -6
  174. package/dist/commands/code-search.js.map +1 -1
  175. package/dist/commands/doctor.d.ts +0 -17
  176. package/dist/commands/doctor.js +29 -75
  177. package/dist/commands/doctor.js.map +1 -1
  178. package/dist/commands/feedback.js +2 -10
  179. package/dist/commands/feedback.js.map +1 -1
  180. package/dist/commands/git-hooks.js +0 -3
  181. package/dist/commands/git-hooks.js.map +1 -1
  182. package/dist/commands/import.js +5 -27
  183. package/dist/commands/import.js.map +1 -1
  184. package/dist/commands/incognito.d.ts +0 -5
  185. package/dist/commands/incognito.js +0 -5
  186. package/dist/commands/incognito.js.map +1 -1
  187. package/dist/commands/indicator.d.ts +0 -1
  188. package/dist/commands/indicator.js +0 -1
  189. package/dist/commands/indicator.js.map +1 -1
  190. package/dist/commands/ingest.js +58 -122
  191. package/dist/commands/ingest.js.map +1 -1
  192. package/dist/commands/install.d.ts +1 -0
  193. package/dist/commands/install.js +52 -93
  194. package/dist/commands/install.js.map +1 -1
  195. package/dist/commands/invite.d.ts +0 -6
  196. package/dist/commands/invite.js +0 -16
  197. package/dist/commands/invite.js.map +1 -1
  198. package/dist/commands/login.js +0 -15
  199. package/dist/commands/login.js.map +1 -1
  200. package/dist/commands/onboard.js +0 -6
  201. package/dist/commands/onboard.js.map +1 -1
  202. package/dist/commands/org.js +0 -2
  203. package/dist/commands/org.js.map +1 -1
  204. package/dist/commands/pr-link.js +2 -15
  205. package/dist/commands/pr-link.js.map +1 -1
  206. package/dist/commands/search.js +0 -5
  207. package/dist/commands/search.js.map +1 -1
  208. package/dist/commands/session-start.d.ts +0 -21
  209. package/dist/commands/session-start.js +19 -68
  210. package/dist/commands/session-start.js.map +1 -1
  211. package/dist/commands/set-mode.d.ts +0 -6
  212. package/dist/commands/set-mode.js +2 -12
  213. package/dist/commands/set-mode.js.map +1 -1
  214. package/dist/commands/skill.js +5 -35
  215. package/dist/commands/skill.js.map +1 -1
  216. package/dist/commands/statusline.d.ts +0 -13
  217. package/dist/commands/statusline.js +0 -15
  218. package/dist/commands/statusline.js.map +1 -1
  219. package/dist/commands/suggestions.d.ts +0 -6
  220. package/dist/commands/suggestions.js +0 -7
  221. package/dist/commands/suggestions.js.map +1 -1
  222. package/dist/commands/takeover/_utils/agent-paths.js +2 -3
  223. package/dist/commands/takeover/_utils/agent-paths.js.map +1 -1
  224. package/dist/commands/takeover/_utils/cursor-store.js +1 -3
  225. package/dist/commands/takeover/_utils/cursor-store.js.map +1 -1
  226. package/dist/commands/takeover/_utils/write-codex-desktop-session.js +1 -4
  227. package/dist/commands/takeover/_utils/write-codex-desktop-session.js.map +1 -1
  228. package/dist/commands/takeover/_utils/write-codex-session.js +1 -2
  229. package/dist/commands/takeover/_utils/write-codex-session.js.map +1 -1
  230. package/dist/commands/uninstall.d.ts +0 -1
  231. package/dist/commands/uninstall.js +7 -7
  232. package/dist/commands/uninstall.js.map +1 -1
  233. package/dist/commands/update.d.ts +0 -10
  234. package/dist/commands/update.js +21 -30
  235. package/dist/commands/update.js.map +1 -1
  236. package/dist/jcode/plugin.json +8 -0
  237. package/dist/jcode/preferred-tools.md +3 -0
  238. package/dist/jcode/prompt-overlay.md +15 -0
  239. package/dist/jcode/skills/code-search/SKILL.md +19 -0
  240. package/dist/jcode/skills/controls/SKILL.md +45 -0
  241. package/dist/jcode/skills/create-artifact/SKILL.md +11 -0
  242. package/dist/jcode/skills/create-skill/SKILL.md +41 -0
  243. package/dist/jcode/skills/feedback/SKILL.md +59 -0
  244. package/dist/jcode/skills/forget/SKILL.md +41 -0
  245. package/dist/jcode/skills/import-transcripts/SKILL.md +27 -0
  246. package/dist/jcode/skills/invite/SKILL.md +28 -0
  247. package/dist/jcode/skills/search/SKILL.md +35 -0
  248. package/dist/jcode/skills/session-takeover/SKILL.md +67 -0
  249. package/dist/jcode/skills/setup/SKILL.md +62 -0
  250. package/dist/jcode/skills/use-artifact/SKILL.md +11 -0
  251. package/dist/jcode/skills/use-skill/SKILL.md +10 -0
  252. package/package.json +5 -3
@@ -0,0 +1,148 @@
1
+ import { parse } from "smol-toml";
2
+ import { err, ok } from "./result.js";
3
+ const HOOKS_HEADER_RE = /^\s*\[\s*hooks\s*\]\s*(?:#.*)?$/;
4
+ const isTableHeader = (line) => line.trimStart().startsWith("[");
5
+ const quote = (value) => JSON.stringify(value);
6
+ const parseToml = (toml) => {
7
+ try {
8
+ return ok(parse(toml));
9
+ }
10
+ catch (e) {
11
+ return err(e instanceof Error ? e.message : String(e));
12
+ }
13
+ };
14
+ const readHooksTable = (toml) => {
15
+ const parsed = parseToml(toml);
16
+ if (!parsed.ok)
17
+ return parsed;
18
+ const hooks = parsed.value.hooks;
19
+ if (hooks === undefined)
20
+ return ok({});
21
+ if (hooks === null || typeof hooks !== "object" || Array.isArray(hooks))
22
+ return err("`hooks` is not a table");
23
+ const table = {};
24
+ for (const [key, value] of Object.entries(hooks)) {
25
+ if (typeof value === "string")
26
+ table[key] = value;
27
+ else if (Array.isArray(value) &&
28
+ value.every((v) => typeof v === "string"))
29
+ table[key] = value;
30
+ }
31
+ return ok(table);
32
+ };
33
+ const hookKeyHasUnsupportedShape = (toml, key) => {
34
+ const parsed = parseToml(toml);
35
+ if (!parsed.ok)
36
+ return false;
37
+ const hooks = parsed.value.hooks;
38
+ if (hooks === null || typeof hooks !== "object" || Array.isArray(hooks))
39
+ return false;
40
+ const raw = hooks;
41
+ if (!(key in raw))
42
+ return false;
43
+ const value = raw[key];
44
+ const supported = typeof value === "string" ||
45
+ (Array.isArray(value) && value.every((v) => typeof v === "string"));
46
+ return !supported;
47
+ };
48
+ const hasHookLines = (table, lines) => Object.entries(lines).every(([key, line]) => {
49
+ const current = table[key];
50
+ return typeof current === "string"
51
+ ? current === line
52
+ : (current?.includes(line) ?? false);
53
+ });
54
+ const keySpan = (lines, tableStart, key) => {
55
+ const keyRe = new RegExp(`^\\s*(?:"${key}"|'${key}'|${key})\\s*=`);
56
+ const start = lines.findIndex((line, i) => i > tableStart &&
57
+ !lines.slice(tableStart + 1, i).some(isTableHeader) &&
58
+ keyRe.test(line));
59
+ if (start === -1)
60
+ return null;
61
+ const limit = Math.min(lines.length, start + 50);
62
+ const end = Array.from({ length: limit - start }, (_, k) => start + k).find((j) => parseToml(["[hooks]", ...lines.slice(start, j + 1)].join("\n")).ok);
63
+ return { start, end: end ?? start };
64
+ };
65
+ const withHooksHeader = (lines) => {
66
+ if (lines.some((line) => HOOKS_HEADER_RE.test(line)))
67
+ return lines;
68
+ const trimmed = lines.join("\n").trimEnd();
69
+ return trimmed.length === 0
70
+ ? ["[hooks]"]
71
+ : [...trimmed.split("\n"), "", "[hooks]"];
72
+ };
73
+ const render = (key, values) => values.length === 1
74
+ ? `${key} = ${quote(values[0] ?? "")}`
75
+ : `${key} = [${values.map(quote).join(", ")}]`;
76
+ const upsertHookLines = (toml, lines) => {
77
+ const table = readHooksTable(toml);
78
+ if (!table.ok)
79
+ return table;
80
+ const badKey = Object.keys(lines).find((key) => hookKeyHasUnsupportedShape(toml, key));
81
+ if (badKey)
82
+ return err(`hooks.${badKey} in ~/.jcode/config.toml is not a string or array of strings — glen won't touch it; fix that value and re-run`);
83
+ const out = withHooksHeader(toml.split("\n"));
84
+ const tableStart = out.findIndex((line) => HOOKS_HEADER_RE.test(line));
85
+ for (const [key, line] of Object.entries(lines)) {
86
+ const current = table.value[key];
87
+ const next = current === undefined
88
+ ? [line]
89
+ : typeof current === "string"
90
+ ? current === line
91
+ ? null
92
+ : [current, line]
93
+ : current.includes(line)
94
+ ? null
95
+ : [...current, line];
96
+ if (next === null)
97
+ continue;
98
+ const span = keySpan(out, tableStart, key);
99
+ if (span)
100
+ out.splice(span.start, span.end - span.start + 1, render(key, next));
101
+ else if (current !== undefined)
102
+ return err(`hooks.${key} is defined outside the [hooks] table (dotted key or inline table) — glen only edits the [hooks] table; move it under [hooks] and re-run`);
103
+ else
104
+ out.splice(tableStart + 1, 0, render(key, next));
105
+ }
106
+ const result = `${out.join("\n").replace(/\n*$/, "")}\n`;
107
+ const verify = readHooksTable(result);
108
+ if (!verify.ok)
109
+ return err(`edit produced invalid TOML: ${verify.error}`);
110
+ return hasHookLines(verify.value, lines)
111
+ ? ok(result)
112
+ : err("edit did not take effect — the hook lines are still missing");
113
+ };
114
+ const removeHookLines = (toml, lines) => {
115
+ const table = readHooksTable(toml);
116
+ if (!table.ok)
117
+ return table;
118
+ const badKey = Object.keys(lines).find((key) => hookKeyHasUnsupportedShape(toml, key));
119
+ if (badKey)
120
+ return err(`hooks.${badKey} in ~/.jcode/config.toml is not a string or array of strings — glen won't touch it; fix that value and re-run`);
121
+ const out = toml.split("\n");
122
+ const tableStart = out.findIndex((line) => HOOKS_HEADER_RE.test(line));
123
+ if (tableStart === -1)
124
+ return ok(toml);
125
+ for (const [key, line] of Object.entries(lines)) {
126
+ const current = table.value[key];
127
+ if (current === undefined)
128
+ continue;
129
+ const before = typeof current === "string" ? [current] : current;
130
+ const remaining = before.filter((value) => value !== line);
131
+ if (remaining.length === before.length)
132
+ continue;
133
+ const span = keySpan(out, tableStart, key);
134
+ if (!span)
135
+ continue;
136
+ if (remaining.length === 0)
137
+ out.splice(span.start, span.end - span.start + 1);
138
+ else
139
+ out.splice(span.start, span.end - span.start + 1, `${key} = [${remaining.map(quote).join(", ")}]`);
140
+ }
141
+ const result = out.join("\n");
142
+ const verify = readHooksTable(result);
143
+ return verify.ok
144
+ ? ok(result)
145
+ : err(`edit produced invalid TOML: ${verify.error}`);
146
+ };
147
+ export { readHooksTable, hasHookLines, upsertHookLines, removeHookLines };
148
+ //# sourceMappingURL=jcode-hooks-toml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jcode-hooks-toml.js","sourceRoot":"","sources":["../../src/_utils/jcode-hooks-toml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ declare const jcodeHome: () => string;
2
+ declare const jcodeConfigTomlPath: () => string;
3
+ declare const jcodePromptOverlayPath: () => string;
4
+ declare const jcodePreferredToolsPath: () => string;
5
+ declare const jcodeSkillsDir: () => string;
6
+ declare const jcodeSessionsDir: () => string;
7
+ export { jcodeHome, jcodeConfigTomlPath, jcodePromptOverlayPath, jcodePreferredToolsPath, jcodeSkillsDir, jcodeSessionsDir, };
@@ -0,0 +1,10 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ const jcodeHome = () => process.env.JCODE_HOME || join(homedir(), ".jcode");
4
+ const jcodeConfigTomlPath = () => join(jcodeHome(), "config.toml");
5
+ const jcodePromptOverlayPath = () => join(jcodeHome(), "prompt-overlay.md");
6
+ const jcodePreferredToolsPath = () => join(jcodeHome(), "preferred-tools.md");
7
+ const jcodeSkillsDir = () => join(jcodeHome(), "skills");
8
+ const jcodeSessionsDir = () => join(jcodeHome(), "sessions");
9
+ export { jcodeHome, jcodeConfigTomlPath, jcodePromptOverlayPath, jcodePreferredToolsPath, jcodeSkillsDir, jcodeSessionsDir, };
10
+ //# sourceMappingURL=jcode-paths.js.map
@@ -0,0 +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,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"}
@@ -0,0 +1,27 @@
1
+ import { type CliError } from "./cli-error.js";
2
+ import { type Result } from "./result.js";
3
+ type FileSnapshot = {
4
+ readonly path: string;
5
+ readonly existed: boolean;
6
+ readonly before: string | null;
7
+ readonly installedHash: string;
8
+ };
9
+ type JcodeFilesSnapshot = {
10
+ readonly configToml: FileSnapshot;
11
+ readonly promptOverlay: FileSnapshot;
12
+ readonly preferredTools: FileSnapshot;
13
+ readonly skillDirs: readonly string[];
14
+ };
15
+ type Written = "written" | "unchanged";
16
+ type JcodeInstallOutcome = {
17
+ readonly hooks: Written;
18
+ readonly promptOverlay: Written;
19
+ readonly preferredTools: Written;
20
+ readonly skills: {
21
+ readonly copied: string[];
22
+ readonly skipped: string[];
23
+ };
24
+ };
25
+ declare const installJcode: () => Promise<Result<JcodeInstallOutcome, CliError>>;
26
+ declare const uninstallJcode: (snapshot?: JcodeFilesSnapshot) => Promise<Result<void, string[]>>;
27
+ export { installJcode, uninstallJcode };
@@ -0,0 +1,151 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import { causeOf, cliErr } from "./cli-error.js";
5
+ import { installReceipt } from "./install-receipt.js";
6
+ import { jcodeBundleDir, jcodeBundleVersion } from "./jcode-bundle.js";
7
+ import { GLEN_JCODE_HOOK_LINES } from "./jcode-hook-lines.js";
8
+ import { removeHookLines, upsertHookLines } from "./jcode-hooks-toml.js";
9
+ import { jcodeConfigTomlPath, jcodePreferredToolsPath, jcodePromptOverlayPath, jcodeSkillsDir, } from "./jcode-paths.js";
10
+ import { removeJcodeSkills, syncJcodeSkills } from "./jcode-skills-sync.js";
11
+ import { stripManagedBlock, upsertManagedBlock } from "./managed-block.js";
12
+ import { err, fromPromise, ok } from "./result.js";
13
+ const sha256 = (text) => createHash("sha256").update(text).digest("hex");
14
+ const readOptional = async (path) => {
15
+ const r = await fromPromise(readFile(path, "utf8"));
16
+ return r.ok ? r.value : null;
17
+ };
18
+ const atomicWrite = async (path, content) => {
19
+ const mk = await fromPromise(mkdir(dirname(path), { recursive: true }));
20
+ if (!mk.ok)
21
+ return mk;
22
+ const tmp = `${path}.${process.pid}.tmp`;
23
+ const w = await fromPromise(writeFile(tmp, content));
24
+ if (!w.ok)
25
+ return w;
26
+ return fromPromise(rename(tmp, path));
27
+ };
28
+ const writeFailure = (path, cause) => cliErr({
29
+ what: `could not write ${path}`,
30
+ why: causeOf(cause),
31
+ path,
32
+ remedy: "check ownership of ~/.jcode (e.g. `sudo chown -R $USER ~/.jcode`), then re-run `glen install --agent jcode`",
33
+ });
34
+ const converge = async (path, before, next) => {
35
+ const snapshot = {
36
+ path,
37
+ existed: before !== null,
38
+ before,
39
+ installedHash: sha256(next),
40
+ };
41
+ if (before === next)
42
+ return ok({ snapshot, status: "unchanged" });
43
+ const w = await atomicWrite(path, next);
44
+ return w.ok
45
+ ? ok({ snapshot, status: "written" })
46
+ : err(writeFailure(path, w.error));
47
+ };
48
+ const installJcode = async () => {
49
+ const bundle = jcodeBundleDir();
50
+ const overlayBody = await readOptional(join(bundle, "prompt-overlay.md"));
51
+ const preferredBody = await readOptional(join(bundle, "preferred-tools.md"));
52
+ if (overlayBody === null || preferredBody === null)
53
+ return err(cliErr({
54
+ what: "the bundled jcode plugin is missing from this glen install",
55
+ path: bundle,
56
+ remedy: "reinstall the CLI: `npm install -g @tryglen/cli@latest`, then re-run `glen install --agent jcode`",
57
+ }));
58
+ const configPath = jcodeConfigTomlPath();
59
+ const configBefore = await readOptional(configPath);
60
+ const edited = upsertHookLines(configBefore ?? "", GLEN_JCODE_HOOK_LINES);
61
+ if (!edited.ok)
62
+ return err(cliErr({
63
+ what: "~/.jcode/config.toml could not be updated with glen's hooks",
64
+ why: edited.error,
65
+ path: configPath,
66
+ remedy: "fix the TOML (or move the file aside), then re-run `glen install --agent jcode`",
67
+ }));
68
+ const hooks = await converge(configPath, configBefore, edited.value);
69
+ if (!hooks.ok)
70
+ return hooks;
71
+ const overlayPath = jcodePromptOverlayPath();
72
+ const overlayBefore = await readOptional(overlayPath);
73
+ const overlay = await converge(overlayPath, overlayBefore, upsertManagedBlock(overlayBefore ?? "", overlayBody));
74
+ if (!overlay.ok)
75
+ return overlay;
76
+ const preferredPath = jcodePreferredToolsPath();
77
+ const preferredBefore = await readOptional(preferredPath);
78
+ const preferred = await converge(preferredPath, preferredBefore, upsertManagedBlock(preferredBefore ?? "", preferredBody));
79
+ if (!preferred.ok)
80
+ return preferred;
81
+ const skills = await syncJcodeSkills(join(bundle, "skills"), jcodeSkillsDir(), jcodeBundleVersion() ?? "0.0.0");
82
+ if (!skills.ok)
83
+ return err(cliErr({
84
+ what: "could not install the glen skills into ~/.jcode/skills",
85
+ why: skills.error,
86
+ path: jcodeSkillsDir(),
87
+ remedy: "check ownership of ~/.jcode/skills, then re-run `glen install --agent jcode`",
88
+ }));
89
+ const receipt = await installReceipt.recordJcodeFiles({
90
+ configToml: hooks.value.snapshot,
91
+ promptOverlay: overlay.value.snapshot,
92
+ preferredTools: preferred.value.snapshot,
93
+ skillDirs: skills.value.copied.map((name) => join(jcodeSkillsDir(), name)),
94
+ });
95
+ if (!receipt.ok)
96
+ return err(cliErr({
97
+ what: "jcode files were written, but the uninstall receipt could not be saved",
98
+ path: installReceipt.path(),
99
+ remedy: "check ownership of ~/.glen, then re-run `glen install --agent jcode`",
100
+ }));
101
+ return ok({
102
+ hooks: hooks.value.status,
103
+ promptOverlay: overlay.value.status,
104
+ preferredTools: preferred.value.status,
105
+ skills: skills.value,
106
+ });
107
+ };
108
+ const restoreManaged = async (path, createdByGlen) => {
109
+ const before = await readOptional(path);
110
+ if (before === null)
111
+ return null;
112
+ const next = stripManagedBlock(before);
113
+ if (next === before)
114
+ return null;
115
+ if (createdByGlen && next.trim() === "") {
116
+ const gone = await fromPromise(unlink(path));
117
+ return gone.ok ? null : `could not remove ${path}: ${causeOf(gone.error)}`;
118
+ }
119
+ const w = await atomicWrite(path, next);
120
+ return w.ok ? null : `could not write ${path}: ${causeOf(w.error)}`;
121
+ };
122
+ const uninstallJcode = async (snapshot) => {
123
+ const residuals = [];
124
+ const configPath = snapshot?.configToml.path ?? jcodeConfigTomlPath();
125
+ const configBefore = await readOptional(configPath);
126
+ if (configBefore !== null) {
127
+ const stripped = removeHookLines(configBefore, GLEN_JCODE_HOOK_LINES);
128
+ if (!stripped.ok)
129
+ residuals.push(`${configPath}: ${stripped.error} — remove glen's two hook lines by hand`);
130
+ else if (stripped.value !== configBefore) {
131
+ const onlyHeader = stripped.value.trim() === "[hooks]" || stripped.value.trim() === "";
132
+ const done = snapshot?.configToml.existed === false && onlyHeader
133
+ ? await fromPromise(unlink(configPath))
134
+ : await atomicWrite(configPath, stripped.value);
135
+ if (!done.ok)
136
+ residuals.push(`could not restore ${configPath}: ${causeOf(done.error)}`);
137
+ }
138
+ }
139
+ const overlayResidual = await restoreManaged(snapshot?.promptOverlay.path ?? jcodePromptOverlayPath(), snapshot?.promptOverlay.existed === false);
140
+ if (overlayResidual)
141
+ residuals.push(overlayResidual);
142
+ const preferredResidual = await restoreManaged(snapshot?.preferredTools.path ?? jcodePreferredToolsPath(), snapshot?.preferredTools.existed === false);
143
+ if (preferredResidual)
144
+ residuals.push(preferredResidual);
145
+ const skills = await removeJcodeSkills(jcodeSkillsDir());
146
+ if (!skills.ok)
147
+ residuals.push(skills.error);
148
+ return residuals.length > 0 ? err(residuals) : ok(undefined);
149
+ };
150
+ export { installJcode, uninstallJcode };
151
+ //# sourceMappingURL=jcode-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jcode-setup.js","sourceRoot":"","sources":["../../src/_utils/jcode-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Result } from "./result.js";
2
+ declare const syncJcodeSkills: (sourceDir: string, targetDir: string, version: string) => Promise<Result<{
3
+ copied: string[];
4
+ skipped: string[];
5
+ }, string>>;
6
+ declare const removeJcodeSkills: (targetDir: string) => Promise<Result<string[], string>>;
7
+ declare const installedJcodeSkillsVersion: (targetDir: string) => Promise<string | null>;
8
+ export { syncJcodeSkills, removeJcodeSkills, installedJcodeSkillsVersion };
@@ -0,0 +1,74 @@
1
+ import { cp, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { err, fromPromise, ok } from "./result.js";
4
+ // Only dirs with the .glen-owned marker may be touched; a same-named user dir is never overwritten.
5
+ const OWNED_MARKER = ".glen-owned";
6
+ const isOwned = async (dir) => (await fromPromise(readFile(join(dir, OWNED_MARKER), "utf8"))).ok;
7
+ const skillDirsOf = async (dir) => {
8
+ const entries = await fromPromise(readdir(dir, { withFileTypes: true }));
9
+ if (!entries.ok)
10
+ return [];
11
+ return entries.value
12
+ .filter((entry) => entry.isDirectory())
13
+ .map((entry) => entry.name)
14
+ .sort();
15
+ };
16
+ const syncJcodeSkills = async (sourceDir, targetDir, version) => {
17
+ const names = await skillDirsOf(sourceDir);
18
+ if (names.length === 0)
19
+ return err(`no skills found in ${sourceDir}`);
20
+ const made = await fromPromise(mkdir(targetDir, { recursive: true }));
21
+ if (!made.ok)
22
+ return err(`could not create ${targetDir}`);
23
+ const copied = [];
24
+ const skipped = [];
25
+ for (const name of names) {
26
+ const target = join(targetDir, name);
27
+ const exists = (await fromPromise(readdir(target))).ok;
28
+ if (exists && !(await isOwned(target))) {
29
+ skipped.push(name);
30
+ continue;
31
+ }
32
+ const replaced = await fromPromise(rm(target, { recursive: true, force: true }));
33
+ if (!replaced.ok)
34
+ return err(`could not replace ${target}`);
35
+ const copiedDir = await fromPromise(cp(join(sourceDir, name), target, { recursive: true }));
36
+ if (!copiedDir.ok)
37
+ return err(`could not copy skill ${name} to ${target}`);
38
+ const marked = await fromPromise(writeFile(join(target, OWNED_MARKER), `${JSON.stringify({ version })}\n`));
39
+ if (!marked.ok)
40
+ return err(`could not mark ${target} as glen-owned`);
41
+ copied.push(name);
42
+ }
43
+ return ok({ copied, skipped });
44
+ };
45
+ const removeJcodeSkills = async (targetDir) => {
46
+ const removed = [];
47
+ for (const name of await skillDirsOf(targetDir)) {
48
+ const dir = join(targetDir, name);
49
+ if (!(await isOwned(dir)))
50
+ continue;
51
+ const gone = await fromPromise(rm(dir, { recursive: true, force: true }));
52
+ if (!gone.ok)
53
+ return err(`could not remove ${dir}`);
54
+ removed.push(name);
55
+ }
56
+ return ok(removed);
57
+ };
58
+ const installedJcodeSkillsVersion = async (targetDir) => {
59
+ for (const name of await skillDirsOf(targetDir)) {
60
+ const raw = await fromPromise(readFile(join(targetDir, name, OWNED_MARKER), "utf8"));
61
+ if (!raw.ok)
62
+ continue;
63
+ try {
64
+ const parsed = JSON.parse(raw.value);
65
+ return typeof parsed.version === "string" ? parsed.version : null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ return null;
72
+ };
73
+ export { syncJcodeSkills, removeJcodeSkills, installedJcodeSkillsVersion };
74
+ //# sourceMappingURL=jcode-skills-sync.js.map
@@ -0,0 +1 @@
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":"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"}
1
+ {"version":3,"file":"login-check.js","sourceRoot":"","sources":["../../src/_utils/login-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ declare const upsertManagedBlock: (text: string, body: string) => string;
2
+ declare const stripManagedBlock: (text: string) => string;
3
+ declare const hasManagedBlock: (text: string) => boolean;
4
+ export { upsertManagedBlock, stripManagedBlock, hasManagedBlock };
@@ -0,0 +1,38 @@
1
+ const BEGIN = "<!-- glen:begin (managed by `glen install`; edits inside this block are overwritten) -->";
2
+ const END = "<!-- glen:end -->";
3
+ const blockFor = (body) => `${BEGIN}\n${body.trim()}\n${END}\n`;
4
+ const spanOf = (text) => {
5
+ const start = text.indexOf(BEGIN);
6
+ if (start === -1)
7
+ return null;
8
+ const endMarker = text.indexOf(END, start);
9
+ if (endMarker === -1)
10
+ return null;
11
+ return { start, end: endMarker + END.length };
12
+ };
13
+ const upsertManagedBlock = (text, body) => {
14
+ const span = spanOf(text);
15
+ if (span) {
16
+ const rest = text.slice(span.end).replace(/^\n/, "");
17
+ return `${text.slice(0, span.start)}${blockFor(body)}${rest}`;
18
+ }
19
+ const base = text.trimEnd();
20
+ return base.length === 0 ? blockFor(body) : `${base}\n\n${blockFor(body)}`;
21
+ };
22
+ const stripManagedBlock = (text) => {
23
+ const span = spanOf(text);
24
+ if (!span)
25
+ return text;
26
+ const before = text.slice(0, span.start).replace(/\n+$/, "");
27
+ const rest = text.slice(span.end).replace(/^\n+/, "");
28
+ if (!before && !rest)
29
+ return "";
30
+ if (!before)
31
+ return rest;
32
+ if (!rest)
33
+ return `${before}\n`;
34
+ return `${before}\n\n${rest}`;
35
+ };
36
+ const hasManagedBlock = (text) => spanOf(text) !== null;
37
+ export { upsertManagedBlock, stripManagedBlock, hasManagedBlock };
38
+ //# sourceMappingURL=managed-block.js.map
@@ -0,0 +1 @@
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 handing mri its boolean list, so a
2
- // multi-word boolean flag typed as `--dry-run` is NOT recognized as boolean
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,wEAAwE;AACxE,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,4DAA4D;AAC5D,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"}
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;QACrB,wEAAwE;IAC1E,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
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"}