@open-mercato/cezar 0.1.5-pr506.357

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 (264) hide show
  1. package/README.md +573 -0
  2. package/dist/config.d.ts +144 -0
  3. package/dist/config.js +106 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/core/agent-runner.d.ts +169 -0
  6. package/dist/core/agent-runner.js +23 -0
  7. package/dist/core/agent-runner.js.map +1 -0
  8. package/dist/core/backend-detect.d.ts +16 -0
  9. package/dist/core/backend-detect.js +118 -0
  10. package/dist/core/backend-detect.js.map +1 -0
  11. package/dist/core/claude-cli-runner.d.ts +56 -0
  12. package/dist/core/claude-cli-runner.js +416 -0
  13. package/dist/core/claude-cli-runner.js.map +1 -0
  14. package/dist/core/claude-ui-mapper.d.ts +71 -0
  15. package/dist/core/claude-ui-mapper.js +567 -0
  16. package/dist/core/claude-ui-mapper.js.map +1 -0
  17. package/dist/core/codex-app-server-runner.d.ts +29 -0
  18. package/dist/core/codex-app-server-runner.js +489 -0
  19. package/dist/core/codex-app-server-runner.js.map +1 -0
  20. package/dist/core/codex-ui-mapper.d.ts +63 -0
  21. package/dist/core/codex-ui-mapper.js +491 -0
  22. package/dist/core/codex-ui-mapper.js.map +1 -0
  23. package/dist/core/ndjson.d.ts +6 -0
  24. package/dist/core/ndjson.js +23 -0
  25. package/dist/core/ndjson.js.map +1 -0
  26. package/dist/core/opencode-server-runner.d.ts +30 -0
  27. package/dist/core/opencode-server-runner.js +488 -0
  28. package/dist/core/opencode-server-runner.js.map +1 -0
  29. package/dist/core/opencode-ui-mapper.d.ts +105 -0
  30. package/dist/core/opencode-ui-mapper.js +588 -0
  31. package/dist/core/opencode-ui-mapper.js.map +1 -0
  32. package/dist/core/process-usage.d.ts +63 -0
  33. package/dist/core/process-usage.js +181 -0
  34. package/dist/core/process-usage.js.map +1 -0
  35. package/dist/core/runner-factory.d.ts +8 -0
  36. package/dist/core/runner-factory.js +22 -0
  37. package/dist/core/runner-factory.js.map +1 -0
  38. package/dist/core/tool-display.d.ts +30 -0
  39. package/dist/core/tool-display.js +156 -0
  40. package/dist/core/tool-display.js.map +1 -0
  41. package/dist/core/ui-events.d.ts +308 -0
  42. package/dist/core/ui-events.js +25 -0
  43. package/dist/core/ui-events.js.map +1 -0
  44. package/dist/core/usage.d.ts +11 -0
  45. package/dist/core/usage.js +15 -0
  46. package/dist/core/usage.js.map +1 -0
  47. package/dist/git-worktree.d.ts +88 -0
  48. package/dist/git-worktree.js +297 -0
  49. package/dist/git-worktree.js.map +1 -0
  50. package/dist/handoff.d.ts +62 -0
  51. package/dist/handoff.js +147 -0
  52. package/dist/handoff.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +466 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/install-as-command.d.ts +39 -0
  57. package/dist/install-as-command.js +51 -0
  58. package/dist/install-as-command.js.map +1 -0
  59. package/dist/pack-check.d.ts +17 -0
  60. package/dist/pack-check.js +27 -0
  61. package/dist/pack-check.js.map +1 -0
  62. package/dist/paths.d.ts +23 -0
  63. package/dist/paths.js +34 -0
  64. package/dist/paths.js.map +1 -0
  65. package/dist/planner.d.ts +17 -0
  66. package/dist/planner.js +248 -0
  67. package/dist/planner.js.map +1 -0
  68. package/dist/release/snapshot.d.ts +64 -0
  69. package/dist/release/snapshot.js +75 -0
  70. package/dist/release/snapshot.js.map +1 -0
  71. package/dist/release/stable.d.ts +46 -0
  72. package/dist/release/stable.js +57 -0
  73. package/dist/release/stable.js.map +1 -0
  74. package/dist/runs/auto-name.d.ts +75 -0
  75. package/dist/runs/auto-name.js +168 -0
  76. package/dist/runs/auto-name.js.map +1 -0
  77. package/dist/runs/retention.d.ts +60 -0
  78. package/dist/runs/retention.js +86 -0
  79. package/dist/runs/retention.js.map +1 -0
  80. package/dist/runs/review-gate.d.ts +18 -0
  81. package/dist/runs/review-gate.js +21 -0
  82. package/dist/runs/review-gate.js.map +1 -0
  83. package/dist/runs/store.d.ts +408 -0
  84. package/dist/runs/store.js +526 -0
  85. package/dist/runs/store.js.map +1 -0
  86. package/dist/runs/task-refs.d.ts +24 -0
  87. package/dist/runs/task-refs.js +74 -0
  88. package/dist/runs/task-refs.js.map +1 -0
  89. package/dist/runs/ui-event-sink.d.ts +81 -0
  90. package/dist/runs/ui-event-sink.js +210 -0
  91. package/dist/runs/ui-event-sink.js.map +1 -0
  92. package/dist/server/capabilities.d.ts +33 -0
  93. package/dist/server/capabilities.js +43 -0
  94. package/dist/server/capabilities.js.map +1 -0
  95. package/dist/server/forge/github.d.ts +70 -0
  96. package/dist/server/forge/github.js +375 -0
  97. package/dist/server/forge/github.js.map +1 -0
  98. package/dist/server/forge/index.d.ts +24 -0
  99. package/dist/server/forge/index.js +45 -0
  100. package/dist/server/forge/index.js.map +1 -0
  101. package/dist/server/forge/types.d.ts +80 -0
  102. package/dist/server/forge/types.js +2 -0
  103. package/dist/server/forge/types.js.map +1 -0
  104. package/dist/server/git-changes.d.ts +195 -0
  105. package/dist/server/git-changes.js +497 -0
  106. package/dist/server/git-changes.js.map +1 -0
  107. package/dist/server/git.d.ts +26 -0
  108. package/dist/server/git.js +103 -0
  109. package/dist/server/git.js.map +1 -0
  110. package/dist/server/github.d.ts +8 -0
  111. package/dist/server/github.js +8 -0
  112. package/dist/server/github.js.map +1 -0
  113. package/dist/server/launch-key.d.ts +7 -0
  114. package/dist/server/launch-key.js +33 -0
  115. package/dist/server/launch-key.js.map +1 -0
  116. package/dist/server/open-in-app.d.ts +51 -0
  117. package/dist/server/open-in-app.js +189 -0
  118. package/dist/server/open-in-app.js.map +1 -0
  119. package/dist/server/open-in-terminal.d.ts +25 -0
  120. package/dist/server/open-in-terminal.js +120 -0
  121. package/dist/server/open-in-terminal.js.map +1 -0
  122. package/dist/server/pr.d.ts +7 -0
  123. package/dist/server/pr.js +7 -0
  124. package/dist/server/pr.js.map +1 -0
  125. package/dist/server/server.d.ts +41 -0
  126. package/dist/server/server.js +1390 -0
  127. package/dist/server/server.js.map +1 -0
  128. package/dist/server/static-ui.d.ts +49 -0
  129. package/dist/server/static-ui.js +92 -0
  130. package/dist/server/static-ui.js.map +1 -0
  131. package/dist/server/wsl.d.ts +25 -0
  132. package/dist/server/wsl.js +92 -0
  133. package/dist/server/wsl.js.map +1 -0
  134. package/dist/server-install/engine.d.ts +33 -0
  135. package/dist/server-install/engine.js +314 -0
  136. package/dist/server-install/engine.js.map +1 -0
  137. package/dist/server-install/platforms/macosx-ngrok.d.ts +6 -0
  138. package/dist/server-install/platforms/macosx-ngrok.js +345 -0
  139. package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
  140. package/dist/server-install/platforms/ubuntu-vps.d.ts +39 -0
  141. package/dist/server-install/platforms/ubuntu-vps.js +746 -0
  142. package/dist/server-install/platforms/ubuntu-vps.js.map +1 -0
  143. package/dist/server-install/state.d.ts +26 -0
  144. package/dist/server-install/state.js +125 -0
  145. package/dist/server-install/state.js.map +1 -0
  146. package/dist/server-install/steps.d.ts +109 -0
  147. package/dist/server-install/steps.js +330 -0
  148. package/dist/server-install/steps.js.map +1 -0
  149. package/dist/server-install/strategies.d.ts +4 -0
  150. package/dist/server-install/strategies.js +20 -0
  151. package/dist/server-install/strategies.js.map +1 -0
  152. package/dist/server-install/types.d.ts +597 -0
  153. package/dist/server-install/types.js +98 -0
  154. package/dist/server-install/types.js.map +1 -0
  155. package/dist/server-install/ui.d.ts +42 -0
  156. package/dist/server-install/ui.js +130 -0
  157. package/dist/server-install/ui.js.map +1 -0
  158. package/dist/skills-banner.d.ts +21 -0
  159. package/dist/skills-banner.js +40 -0
  160. package/dist/skills-banner.js.map +1 -0
  161. package/dist/skills-remote.d.ts +35 -0
  162. package/dist/skills-remote.js +266 -0
  163. package/dist/skills-remote.js.map +1 -0
  164. package/dist/skills.d.ts +45 -0
  165. package/dist/skills.js +182 -0
  166. package/dist/skills.js.map +1 -0
  167. package/dist/todos.d.ts +63 -0
  168. package/dist/todos.js +168 -0
  169. package/dist/todos.js.map +1 -0
  170. package/dist/ui-state.d.ts +12 -0
  171. package/dist/ui-state.js +25 -0
  172. package/dist/ui-state.js.map +1 -0
  173. package/dist/update-check.d.ts +12 -0
  174. package/dist/update-check.js +41 -0
  175. package/dist/update-check.js.map +1 -0
  176. package/dist/workflows/load.d.ts +15 -0
  177. package/dist/workflows/load.js +56 -0
  178. package/dist/workflows/load.js.map +1 -0
  179. package/dist/workflows/run.d.ts +281 -0
  180. package/dist/workflows/run.js +1511 -0
  181. package/dist/workflows/run.js.map +1 -0
  182. package/dist/workflows/types.d.ts +307 -0
  183. package/dist/workflows/types.js +171 -0
  184. package/dist/workflows/types.js.map +1 -0
  185. package/package.json +90 -0
  186. package/scripts/check-pack.mjs +46 -0
  187. package/scripts/dev.mjs +74 -0
  188. package/scripts/install-as-command.mjs +120 -0
  189. package/scripts/mock-claude.mjs +310 -0
  190. package/scripts/release-snapshot.mjs +130 -0
  191. package/scripts/release.mjs +119 -0
  192. package/scripts/test-process-usage.mjs +47 -0
  193. package/web/dist/assets/arrow-left-BE957rJs.js +1 -0
  194. package/web/dist/assets/bundle-mjs-DLPpRFyl.js +1 -0
  195. package/web/dist/assets/centered-state-BddhEEtO.js +43 -0
  196. package/web/dist/assets/chunk-BO2N2NFS-f5igTtpB.js +131 -0
  197. package/web/dist/assets/command-CjhFbABo.js +1 -0
  198. package/web/dist/assets/compare-variants-Cs52IAEG.js +1 -0
  199. package/web/dist/assets/core-BuMqAF_1.js +12 -0
  200. package/web/dist/assets/css-BsVw1vtW.js +1 -0
  201. package/web/dist/assets/dialog-DFvXTkFv.js +1 -0
  202. package/web/dist/assets/diff-view-C9b8AITq.js +4 -0
  203. package/web/dist/assets/diff-woXpYk--.js +1 -0
  204. package/web/dist/assets/dist-FBs4wmIY.js +1 -0
  205. package/web/dist/assets/dist-o_kVMXjg.js +1 -0
  206. package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
  207. package/web/dist/assets/file-BVuztAOd.js +1 -0
  208. package/web/dist/assets/folder-0pJ1NZ_S.js +1 -0
  209. package/web/dist/assets/git-pull-request-DJkAMT0f.js +1 -0
  210. package/web/dist/assets/git-toolbar-CwhQdx3J.js +1 -0
  211. package/web/dist/assets/github-D0rAX4-r.js +1 -0
  212. package/web/dist/assets/go-rLFTqkRN.js +1 -0
  213. package/web/dist/assets/highlighted-body-OFNGDK62-DGHHie_q.js +1 -0
  214. package/web/dist/assets/highlighter-BKVEsACy.js +3 -0
  215. package/web/dist/assets/html-BY76lXLH.js +1 -0
  216. package/web/dist/assets/index-CEkI7QxN.css +2 -0
  217. package/web/dist/assets/index-CO2lH2et.js +11 -0
  218. package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  219. package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  220. package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
  221. package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  222. package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  223. package/web/dist/assets/json-qhed-kSA.js +1 -0
  224. package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
  225. package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
  226. package/web/dist/assets/lib-CNGa3Dig.js +1 -0
  227. package/web/dist/assets/loader-circle-BV3DO9mE.js +1 -0
  228. package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
  229. package/web/dist/assets/markdown-D4-ADgH9.js +1 -0
  230. package/web/dist/assets/mermaid-GHXKKRXX-DM2VsGBG.js +1 -0
  231. package/web/dist/assets/open-mercato-toBr6SOa.svg +11 -0
  232. package/web/dist/assets/prompt-templates-C7ptKvDd.js +15 -0
  233. package/web/dist/assets/python-gzcpVVnB.js +1 -0
  234. package/web/dist/assets/react-dom-Ddtik4qM.js +1 -0
  235. package/web/dist/assets/refresh-cw-DCa-Rlwz.js +1 -0
  236. package/web/dist/assets/repo-git-DIhryGDx.js +1 -0
  237. package/web/dist/assets/run-diff-Dyow8B1q.js +3 -0
  238. package/web/dist/assets/run-header-jx9-18b8.js +1 -0
  239. package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
  240. package/web/dist/assets/search-x-CoCyl7zT.js +1 -0
  241. package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
  242. package/web/dist/assets/skill-detail-DB7x_FQp.js +1 -0
  243. package/web/dist/assets/skills-98vCroU8.js +1 -0
  244. package/web/dist/assets/skills-BKIoqD6K.js +1 -0
  245. package/web/dist/assets/sql-BsFa4tDR.js +1 -0
  246. package/web/dist/assets/square-terminal-B6PZX4Qp.js +1 -0
  247. package/web/dist/assets/tab-link-C5--YMQd.js +1 -0
  248. package/web/dist/assets/task-changes-ejxPGVJw.js +1 -0
  249. package/web/dist/assets/task-commits-C6GO5qT-.js +1 -0
  250. package/web/dist/assets/task-files-CatpCBXa.js +2 -0
  251. package/web/dist/assets/task-thread-BMbXDM3d.js +5 -0
  252. package/web/dist/assets/tasks-table-dgezlCcg.js +1 -0
  253. package/web/dist/assets/trash-2-CDtxmmc8.js +1 -0
  254. package/web/dist/assets/triangle-alert-6su4Js5O.js +1 -0
  255. package/web/dist/assets/tsx-udAQXfEw.js +1 -0
  256. package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
  257. package/web/dist/assets/upload-Bp7hQxll.js +1 -0
  258. package/web/dist/assets/use-desktop-CvTwojOJ.js +3 -0
  259. package/web/dist/assets/utils-rQGbOrwc.js +1 -0
  260. package/web/dist/assets/workflows-Dy2c6790.js +11 -0
  261. package/web/dist/assets/x-Br_jIDBw.js +1 -0
  262. package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
  263. package/web/dist/index.html +70 -0
  264. package/web/open-mercato.svg +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ubuntu-vps.js","sourceRoot":"","sources":["../../../src/server-install/platforms/ubuntu-vps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ServerState, type StepOutcome } from './types.js';
2
+ /**
3
+ * `~/.cezar/server.json` I/O and the single-writer lock. Reads degrade to a
4
+ * fresh record on any corruption (house pattern — never crash the wizard);
5
+ * writes are atomic (tmp + rename) and `0600`, since the file is the input to
6
+ * uninstall's "reverse exactly what was created" logic.
7
+ */
8
+ /** Load the host-level state, degrading to a fresh record on any error. */
9
+ export declare function loadServerState(): ServerState;
10
+ /** Atomically persist state as `0600`, creating `~/.cezar` (`0700`) if needed. */
11
+ export declare function saveServerState(state: ServerState): void;
12
+ /** A step is resolved (needs no run on resume) when it is done or skipped. */
13
+ export declare function isResolved(outcome: StepOutcome | undefined): boolean;
14
+ /**
15
+ * First step id in `orderedIds` that is not yet resolved — the resume point.
16
+ * `undefined` means every step is resolved (install complete).
17
+ */
18
+ export declare function firstIncompleteStep(orderedIds: readonly string[], state: ServerState): string | undefined;
19
+ export declare class LockHeldError extends Error {
20
+ }
21
+ /**
22
+ * Acquire the exclusive install lock. Throws `LockHeldError` if a *live*
23
+ * process already holds it; a stale lock (dead pid) is reclaimed. Returns a
24
+ * release function.
25
+ */
26
+ export declare function acquireLock(): () => void;
@@ -0,0 +1,125 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import { cezarHomeDir, serverLockPath, serverStatePath } from '../paths.js';
4
+ import { freshServerState, serverStateSchema } from './types.js';
5
+ /**
6
+ * `~/.cezar/server.json` I/O and the single-writer lock. Reads degrade to a
7
+ * fresh record on any corruption (house pattern — never crash the wizard);
8
+ * writes are atomic (tmp + rename) and `0600`, since the file is the input to
9
+ * uninstall's "reverse exactly what was created" logic.
10
+ */
11
+ /** Load the host-level state, degrading to a fresh record on any error. */
12
+ export function loadServerState() {
13
+ const path = serverStatePath();
14
+ let raw;
15
+ try {
16
+ raw = readFileSync(path, 'utf8');
17
+ }
18
+ catch {
19
+ return freshServerState();
20
+ }
21
+ try {
22
+ const parsed = serverStateSchema.safeParse(JSON.parse(raw));
23
+ if (parsed.success)
24
+ return parsed.data;
25
+ }
26
+ catch {
27
+ // malformed JSON — fall through to fresh
28
+ }
29
+ return freshServerState();
30
+ }
31
+ /** Atomically persist state as `0600`, creating `~/.cezar` (`0700`) if needed. */
32
+ export function saveServerState(state) {
33
+ const path = serverStatePath();
34
+ const dir = dirname(path);
35
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
36
+ const tmp = `${path}.tmp`;
37
+ writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
38
+ renameSync(tmp, path);
39
+ try {
40
+ chmodSync(path, 0o600); // best-effort — ignored on some filesystems
41
+ }
42
+ catch {
43
+ // non-fatal
44
+ }
45
+ }
46
+ /** A step is resolved (needs no run on resume) when it is done or skipped. */
47
+ export function isResolved(outcome) {
48
+ return outcome?.status === 'done' || outcome?.status === 'skipped';
49
+ }
50
+ /**
51
+ * First step id in `orderedIds` that is not yet resolved — the resume point.
52
+ * `undefined` means every step is resolved (install complete).
53
+ */
54
+ export function firstIncompleteStep(orderedIds, state) {
55
+ return orderedIds.find((id) => !isResolved(state.steps[id]));
56
+ }
57
+ export class LockHeldError extends Error {
58
+ }
59
+ /**
60
+ * Acquire the exclusive install lock. Throws `LockHeldError` if a *live*
61
+ * process already holds it; a stale lock (dead pid) is reclaimed. Returns a
62
+ * release function.
63
+ */
64
+ export function acquireLock() {
65
+ const path = serverLockPath();
66
+ mkdirSync(cezarHomeDir(), { recursive: true, mode: 0o700 });
67
+ // `wx` makes creation atomic — a plain exists-then-write check would let two
68
+ // concurrent wizards both "acquire". One reclaim retry handles a stale lock;
69
+ // if the second attempt still collides, someone live beat us to it.
70
+ for (let attempt = 0; attempt < 2; attempt++) {
71
+ try {
72
+ writeFileSync(path, `${process.pid}\n`, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
73
+ let released = false;
74
+ return () => {
75
+ if (released)
76
+ return;
77
+ released = true;
78
+ try {
79
+ if (existsSync(path) && readLockPid(path) === process.pid)
80
+ rmSync(path);
81
+ }
82
+ catch {
83
+ // non-fatal
84
+ }
85
+ };
86
+ }
87
+ catch (err) {
88
+ if (err.code !== 'EEXIST')
89
+ throw err;
90
+ const holder = readLockPid(path);
91
+ if (holder !== null && holder !== process.pid && isProcessAlive(holder)) {
92
+ throw new LockHeldError(`another server-install/uninstall is already running (pid ${holder}). ` +
93
+ `If that is wrong, remove ${path} and retry.`);
94
+ }
95
+ // stale (dead pid, unreadable, or our own) — reclaim and retry the wx write
96
+ try {
97
+ rmSync(path);
98
+ }
99
+ catch {
100
+ // raced with another reclaimer; the retry below decides
101
+ }
102
+ }
103
+ }
104
+ throw new LockHeldError(`could not acquire ${path} — another server-install/uninstall grabbed it first; retry in a moment.`);
105
+ }
106
+ function readLockPid(path) {
107
+ try {
108
+ const pid = Number.parseInt(readFileSync(path, 'utf8').trim(), 10);
109
+ return Number.isInteger(pid) && pid > 0 ? pid : null;
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }
115
+ function isProcessAlive(pid) {
116
+ try {
117
+ process.kill(pid, 0);
118
+ return true;
119
+ }
120
+ catch (err) {
121
+ // ESRCH = no such process; EPERM = alive but not ours (still alive)
122
+ return err.code === 'EPERM';
123
+ }
124
+ }
125
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/server-install/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { type BackendCheck } from '../core/backend-detect.js';
2
+ import { type InstallContext, type InstallStep, type Runner, type StepArtifact } from './types.js';
3
+ /**
4
+ * Platform-agnostic step helpers. The star is `sudoStep`: the wizard runs as a
5
+ * normal account and never escalates silently. It prints the exact command,
6
+ * lets the operator run it via `sudo` or run it themselves, then proves the box
7
+ * is actually in the expected state with `verify()` before advancing — and
8
+ * offers a redo when verification fails.
9
+ */
10
+ /** Real command runner (Node child_process). */
11
+ export declare const defaultRunner: Runner;
12
+ /** Run a probe and assert its result. Returns false in dry-run (nothing is verifiably present). */
13
+ export declare function verifyCommand(ctx: InstallContext, program: string, args: string[], matcher?: (r: {
14
+ code: number;
15
+ stdout: string;
16
+ stderr: string;
17
+ }) => boolean): Promise<boolean>;
18
+ /**
19
+ * True when `sudo -n true` succeeds — the box grants passwordless sudo, OR a
20
+ * sudo timestamp from an earlier command in this session is still cached.
21
+ * Both mean "sudo will run right now without prompting", which is exactly the
22
+ * question `--yes` mode needs answered before choosing sudo over delegate.
23
+ */
24
+ export declare function hasPasswordlessSudo(ctx: InstallContext): Promise<boolean>;
25
+ /** A bare DNS hostname — no scheme, no path, no shell/nginx metacharacters. */
26
+ export declare const HOSTNAME_RE: RegExp;
27
+ export declare class StepCancelled extends Error {
28
+ }
29
+ export declare class StepAborted extends Error {
30
+ }
31
+ /** Thrown from an optional step's `run()` to record it as `skipped` (e.g. certbot DNS not ready). */
32
+ export declare class StepSkipped extends Error {
33
+ }
34
+ export interface SudoStepOpts {
35
+ /** One-line description of what/why (shown above the command). */
36
+ description: string;
37
+ /** The privileged shell command (without a leading `sudo`). May use pipes/redirects. */
38
+ command: string;
39
+ /**
40
+ * Optional human-readable context (e.g. the file contents being written) shown
41
+ * in its own box before the raw command — keeps big base64 file-writes legible.
42
+ */
43
+ note?: string;
44
+ /**
45
+ * Optional step: when verification keeps failing the operator can *skip* it
46
+ * (thrown as `StepSkipped`) instead of aborting the whole install. Used by SSL
47
+ * (certbot can legitimately fail on external DNS / rate limits).
48
+ */
49
+ skippable?: boolean;
50
+ /** Shown next to the "Skip" choice — how to finish this step by hand later. */
51
+ skipHint?: string;
52
+ /**
53
+ * Secret payload fed to the command's stdin (`cat > file` style) so it never
54
+ * appears in the process argv (`ps`-readable) or in root's shell history.
55
+ * Sudo mode pipes it; delegate mode shows it once, on screen only, for the
56
+ * operator to paste after the command.
57
+ */
58
+ input?: string;
59
+ /** Human name for the stdin payload, e.g. "credential line". */
60
+ inputLabel?: string;
61
+ /** Prove the command actually took effect. Runs after every attempt. */
62
+ verify: (ctx: InstallContext) => Promise<boolean>;
63
+ }
64
+ /**
65
+ * A strong random cockpit password: guaranteed to mix lower/upper letters, a
66
+ * digit and a symbol, drawn from a crypto RNG, with visually-ambiguous glyphs
67
+ * (0/O/1/l/I) removed. Offered by the identity step so operators don't fall back
68
+ * to a weak hand-picked password.
69
+ */
70
+ export declare function generatePassword(length?: number): string;
71
+ /**
72
+ * Execute one privileged command with the operator in the loop:
73
+ * print → run-via-sudo OR delegate → verify → redo-on-mismatch.
74
+ *
75
+ * - Dry-run: prints the intended command and returns (no exec, no verify).
76
+ * - `--yes` with passwordless sudo: runs non-interactively.
77
+ * - `--yes` without passwordless sudo: falls back to delegate (never blocks on a hidden prompt).
78
+ *
79
+ * Throws `StepCancelled` if the user cancels, `StepAborted` if they give up after a failed verify.
80
+ */
81
+ /** Single-quote a shell string so a copy-paste of `display` runs exactly what we run. */
82
+ export declare function shquote(s: string): string;
83
+ export declare function sudoStep(ctx: InstallContext, opts: SudoStepOpts): Promise<void>;
84
+ /** Convenience: an `owned` file/service/etc. artifact. */
85
+ export declare function owned(type: string, fields: Omit<StepArtifact, 'kind' | 'type'>): StepArtifact;
86
+ /** Convenience: a `shared` artifact (listed, not removed, on uninstall). */
87
+ export declare function shared(type: string, fields: Omit<StepArtifact, 'kind' | 'type'>): StepArtifact;
88
+ /**
89
+ * The dependency step, built from `detectEnvironment()` (reused verbatim). It
90
+ * shows the missing tools as a checkbox, installs the selected ones, and prints
91
+ * the per-tool authorization instruction (agent CLIs need an interactive login
92
+ * a wizard cannot fully automate). `detect` is injectable for tests.
93
+ */
94
+ /** How a given platform installs one missing tool. Platform-agnostic seam. */
95
+ export type ToolInstaller = (ctx: InstallContext, name: string) => Promise<void>;
96
+ export interface DepStepOpts {
97
+ detect?: () => Promise<BackendCheck[]>;
98
+ /** Per-platform installer; defaults to the apt/npm (Ubuntu) one. */
99
+ installTool?: ToolInstaller;
100
+ /** Per-tool manual-removal hint shown by uninstall. */
101
+ removeHint?: (name: string) => string;
102
+ }
103
+ export declare function depCheckStep(opts?: DepStepOpts): InstallStep;
104
+ /** Ubuntu/Debian installer: apt for gh, sudo npm -g for the agent CLIs (system node). */
105
+ export declare const aptInstallTool: ToolInstaller;
106
+ /** macOS installer: brew (no sudo) for gh, npm -g for the agent CLIs. */
107
+ export declare const brewInstallTool: ToolInstaller;
108
+ /** macOS-flavored removal hints (brew instead of apt). */
109
+ export declare function brewRemoveHint(name: string): string;
@@ -0,0 +1,330 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { randomInt } from 'node:crypto';
3
+ import { detectEnvironment } from '../core/backend-detect.js';
4
+ import { CANCEL, } from './types.js';
5
+ /**
6
+ * Platform-agnostic step helpers. The star is `sudoStep`: the wizard runs as a
7
+ * normal account and never escalates silently. It prints the exact command,
8
+ * lets the operator run it via `sudo` or run it themselves, then proves the box
9
+ * is actually in the expected state with `verify()` before advancing — and
10
+ * offers a redo when verification fails.
11
+ */
12
+ /** Real command runner (Node child_process). */
13
+ export const defaultRunner = {
14
+ capture(program, args, opts) {
15
+ // spawn (not execFile) so a secret can be fed via stdin instead of argv.
16
+ return new Promise((resolve) => {
17
+ const child = spawn(program, args, { stdio: ['pipe', 'pipe', 'pipe'] });
18
+ let stdout = '';
19
+ let stderr = '';
20
+ child.stdout?.on('data', (d) => (stdout += String(d)));
21
+ child.stderr?.on('data', (d) => (stderr += String(d)));
22
+ child.on('error', () => resolve({ code: 127, stdout, stderr }));
23
+ child.on('close', (code) => resolve({ code: code ?? 0, stdout, stderr }));
24
+ // A child that exits before draining stdin makes the write emit EPIPE;
25
+ // swallow it so `capture` never crashes the CLI.
26
+ child.stdin?.on('error', () => { });
27
+ if (opts?.input != null)
28
+ child.stdin?.end(opts.input);
29
+ else
30
+ child.stdin?.end();
31
+ });
32
+ },
33
+ interactive(program, args, opts) {
34
+ return new Promise((resolve) => {
35
+ // With `input`, stdin is piped (sudo still prompts on /dev/tty, not stdin).
36
+ // `env` adds variables for in-child `$VAR` expansion — the other secret
37
+ // channel besides stdin that keeps values out of argv.
38
+ const child = spawn(program, args, {
39
+ stdio: [opts?.input != null ? 'pipe' : 'inherit', 'inherit', 'inherit'],
40
+ env: opts?.env ? { ...process.env, ...opts.env } : undefined,
41
+ });
42
+ child.on('error', () => resolve(127));
43
+ child.on('close', (code) => resolve(code ?? 0));
44
+ if (opts?.input != null) {
45
+ child.stdin?.on('error', () => { }); // EPIPE if the child exits early
46
+ child.stdin?.end(opts.input);
47
+ }
48
+ });
49
+ },
50
+ };
51
+ /** Run a probe and assert its result. Returns false in dry-run (nothing is verifiably present). */
52
+ export async function verifyCommand(ctx, program, args, matcher = (r) => r.code === 0) {
53
+ if (ctx.dryRun)
54
+ return false;
55
+ return matcher(await ctx.runner.capture(program, args));
56
+ }
57
+ /**
58
+ * True when `sudo -n true` succeeds — the box grants passwordless sudo, OR a
59
+ * sudo timestamp from an earlier command in this session is still cached.
60
+ * Both mean "sudo will run right now without prompting", which is exactly the
61
+ * question `--yes` mode needs answered before choosing sudo over delegate.
62
+ */
63
+ export async function hasPasswordlessSudo(ctx) {
64
+ if (ctx.dryRun)
65
+ return false;
66
+ return (await ctx.runner.capture('sudo', ['-n', 'true'])).code === 0;
67
+ }
68
+ /** A bare DNS hostname — no scheme, no path, no shell/nginx metacharacters. */
69
+ export const HOSTNAME_RE = /^(?=.{1,253}$)([a-z0-9](-?[a-z0-9])*\.)+[a-z]{2,}$/i;
70
+ export class StepCancelled extends Error {
71
+ }
72
+ export class StepAborted extends Error {
73
+ }
74
+ /** Thrown from an optional step's `run()` to record it as `skipped` (e.g. certbot DNS not ready). */
75
+ export class StepSkipped extends Error {
76
+ }
77
+ /**
78
+ * A strong random cockpit password: guaranteed to mix lower/upper letters, a
79
+ * digit and a symbol, drawn from a crypto RNG, with visually-ambiguous glyphs
80
+ * (0/O/1/l/I) removed. Offered by the identity step so operators don't fall back
81
+ * to a weak hand-picked password.
82
+ */
83
+ export function generatePassword(length = 16) {
84
+ const lower = 'abcdefghijkmnpqrstuvwxyz'; // no l
85
+ const upper = 'ABCDEFGHJKLMNPQRSTUVWXYZ'; // no I, O
86
+ const digits = '23456789'; // no 0, 1
87
+ const symbols = '!@#$%^&*-_=+';
88
+ const all = lower + upper + digits + symbols;
89
+ const pick = (set) => set.charAt(randomInt(set.length));
90
+ const chars = [pick(lower), pick(upper), pick(digits), pick(symbols)];
91
+ while (chars.length < Math.max(length, 8))
92
+ chars.push(pick(all));
93
+ // Fisher–Yates shuffle so the guaranteed-class chars aren't always in front.
94
+ for (let i = chars.length - 1; i > 0; i--) {
95
+ const j = randomInt(i + 1);
96
+ const tmp = chars[i];
97
+ chars[i] = chars[j];
98
+ chars[j] = tmp;
99
+ }
100
+ return chars.join('');
101
+ }
102
+ /**
103
+ * Execute one privileged command with the operator in the loop:
104
+ * print → run-via-sudo OR delegate → verify → redo-on-mismatch.
105
+ *
106
+ * - Dry-run: prints the intended command and returns (no exec, no verify).
107
+ * - `--yes` with passwordless sudo: runs non-interactively.
108
+ * - `--yes` without passwordless sudo: falls back to delegate (never blocks on a hidden prompt).
109
+ *
110
+ * Throws `StepCancelled` if the user cancels, `StepAborted` if they give up after a failed verify.
111
+ */
112
+ /** Single-quote a shell string so a copy-paste of `display` runs exactly what we run. */
113
+ export function shquote(s) {
114
+ return `'${s.replace(/'/g, `'\\''`)}'`;
115
+ }
116
+ export async function sudoStep(ctx, opts) {
117
+ const { ui } = ctx;
118
+ // What we actually run — and what the operator copy-pastes in the delegate path.
119
+ const display = `sudo bash -lc ${shquote(opts.command)}`;
120
+ if (ctx.dryRun) {
121
+ ui.info(opts.input != null
122
+ ? `DRY RUN — would run: ${display} (with the ${opts.inputLabel ?? 'payload'} on stdin)`
123
+ : `DRY RUN — would run: ${display}`);
124
+ return;
125
+ }
126
+ const passwordless = await hasPasswordlessSudo(ctx);
127
+ for (;;) {
128
+ ui.info(opts.description);
129
+ if (opts.note)
130
+ ui.message(opts.note);
131
+ ui.message(display);
132
+ let mode;
133
+ if (ctx.assumeYes) {
134
+ mode = passwordless ? 'sudo' : 'delegate';
135
+ }
136
+ else if (ctx.prefs.sudoMode) {
137
+ // Remembered from an earlier answer — don't ask again this run (issue #6).
138
+ mode = ctx.prefs.sudoMode;
139
+ }
140
+ else {
141
+ // Default to "I'll run it myself as root" — the safe, no-surprise choice
142
+ // for operators who prefer to paste privileged commands into a root shell.
143
+ const choice = await ui.select({
144
+ message: 'How should this privileged command run?',
145
+ options: [
146
+ { value: 'delegate', label: "I'll run it myself as root", hint: 'paste & run as root, then confirm' },
147
+ { value: 'sudo', label: 'Run it now via sudo', hint: 'streams output here' },
148
+ ],
149
+ initialValue: 'delegate',
150
+ });
151
+ if (choice === CANCEL)
152
+ throw new StepCancelled();
153
+ mode = choice;
154
+ ctx.prefs.sudoMode = choice; // reuse this choice for every later privileged command
155
+ }
156
+ if (mode === 'sudo') {
157
+ const code = await ctx.runner.interactive('sudo', ['bash', '-lc', opts.command], opts.input != null ? { input: opts.input } : undefined);
158
+ if (code !== 0)
159
+ ui.warn(`command exited with code ${code}`);
160
+ }
161
+ else {
162
+ ui.info('Copy the command above and run it as root on the server (paste into a root shell, or prefix with sudo), then confirm below.');
163
+ if (opts.input != null) {
164
+ // Screen-only: pasted as stdin it stays out of argv AND shell history.
165
+ ui.info(`The command reads from stdin — after starting it, paste this ${opts.inputLabel ?? 'line'} and press Ctrl-D:`);
166
+ ui.message(opts.input);
167
+ }
168
+ if (!ctx.assumeYes) {
169
+ const done = await ui.confirm({ message: 'Have you run it as root?', initialValue: true });
170
+ if (done === CANCEL)
171
+ throw new StepCancelled();
172
+ }
173
+ }
174
+ if (await opts.verify(ctx)) {
175
+ ui.success('Verified.');
176
+ return;
177
+ }
178
+ ui.error('That did not take effect — the verification check still fails.');
179
+ if (ctx.assumeYes) {
180
+ throw opts.skippable
181
+ ? new StepSkipped(`verification failed for: ${opts.command}`)
182
+ : new StepAborted(`verification failed for: ${opts.command}`);
183
+ }
184
+ if (opts.skippable) {
185
+ const next = await ui.select({
186
+ message: 'That did not verify. What now?',
187
+ options: [
188
+ { value: 'retry', label: 'Try again' },
189
+ { value: 'skip', label: 'Skip this step', hint: opts.skipHint },
190
+ ],
191
+ initialValue: 'retry',
192
+ });
193
+ if (next === CANCEL)
194
+ throw new StepCancelled();
195
+ if (next === 'skip')
196
+ throw new StepSkipped(`skipped: ${opts.command}`);
197
+ continue;
198
+ }
199
+ const redo = await ui.confirm({ message: 'Try again?', initialValue: true });
200
+ if (redo === CANCEL || redo === false)
201
+ throw new StepAborted(`gave up on: ${opts.command}`);
202
+ }
203
+ }
204
+ /** Convenience: an `owned` file/service/etc. artifact. */
205
+ export function owned(type, fields) {
206
+ return { kind: 'owned', type, ...fields };
207
+ }
208
+ /** Convenience: a `shared` artifact (listed, not removed, on uninstall). */
209
+ export function shared(type, fields) {
210
+ return { kind: 'shared', type, ...fields };
211
+ }
212
+ export function depCheckStep(opts = {}) {
213
+ const detect = opts.detect ?? detectEnvironment;
214
+ const install = opts.installTool ?? aptInstallTool;
215
+ const hintFor = opts.removeHint ?? removeHintFor;
216
+ return {
217
+ id: 'deps',
218
+ title: 'Dependencies (agent CLIs + gh)',
219
+ async check(ctx) {
220
+ if (ctx.dryRun)
221
+ return false;
222
+ const checks = await detect();
223
+ // Satisfied when at least one agent CLI is present and authed.
224
+ return checks.some((c) => ['claude', 'codex', 'opencode'].includes(c.name) && c.available);
225
+ },
226
+ async run(ctx) {
227
+ const checks = await detect();
228
+ const missing = checks.filter((c) => !c.available && c.name !== 'git');
229
+ if (missing.length === 0) {
230
+ ctx.ui.success('All dependencies present.');
231
+ return { artifacts: [] };
232
+ }
233
+ const pick = await ctx.ui.multiselect({
234
+ message: 'Missing tools — select the ones to install',
235
+ options: missing.map((c) => ({ value: c.name, label: c.name, hint: c.hint })),
236
+ required: false,
237
+ });
238
+ if (pick === CANCEL)
239
+ throw new StepCancelled();
240
+ const installed = [];
241
+ for (const name of pick) {
242
+ const check = missing.find((c) => c.name === name);
243
+ await install(ctx, name);
244
+ installed.push(shared('package', { name, removeHint: hintFor(name) }));
245
+ if (check?.hint)
246
+ ctx.ui.note(check.hint, `Authorize ${name}`);
247
+ }
248
+ return { artifacts: installed };
249
+ },
250
+ async undo(ctx, created) {
251
+ // Dependencies are `shared` — never auto-removed. List them for the operator.
252
+ const pkgs = created?.artifacts ?? [];
253
+ if (pkgs.length === 0)
254
+ return;
255
+ ctx.ui.note(pkgs.map((a) => a.removeHint ?? a.name ?? '').filter(Boolean).join('\n'), 'These tools were installed for cezar but may be used elsewhere — remove manually if you want them gone');
256
+ },
257
+ };
258
+ }
259
+ const NPM_GLOBAL = {
260
+ claude: '@anthropic-ai/claude-code',
261
+ codex: '@openai/codex',
262
+ };
263
+ /** Ubuntu/Debian installer: apt for gh, sudo npm -g for the agent CLIs (system node). */
264
+ export const aptInstallTool = async (ctx, name) => {
265
+ if (name === 'gh') {
266
+ await sudoStep(ctx, {
267
+ description: 'Install the GitHub CLI (only needed for PR creation).',
268
+ command: 'apt-get update && apt-get install -y gh',
269
+ verify: (c) => verifyCommand(c, 'gh', ['--version']),
270
+ });
271
+ return;
272
+ }
273
+ await installViaNpmOrNote(ctx, name, true);
274
+ };
275
+ /** macOS installer: brew (no sudo) for gh, npm -g for the agent CLIs. */
276
+ export const brewInstallTool = async (ctx, name) => {
277
+ if (name === 'gh') {
278
+ if (ctx.dryRun) {
279
+ ctx.ui.info('DRY RUN — would run: brew install gh');
280
+ return;
281
+ }
282
+ await ctx.runner.interactive('brew', ['install', 'gh']);
283
+ return;
284
+ }
285
+ await installViaNpmOrNote(ctx, name, false);
286
+ };
287
+ async function installViaNpmOrNote(ctx, name, sudo) {
288
+ if (name === 'opencode') {
289
+ ctx.ui.note('Install OpenCode from https://opencode.ai, then re-run.', 'opencode');
290
+ return;
291
+ }
292
+ const pkg = NPM_GLOBAL[name];
293
+ if (!pkg) {
294
+ ctx.ui.warn(`no known installer for ${name} — install it manually`);
295
+ return;
296
+ }
297
+ if (sudo) {
298
+ await sudoStep(ctx, {
299
+ description: `Install ${name} globally via npm.`,
300
+ command: `npm install -g ${pkg}`,
301
+ verify: (c) => verifyCommand(c, name, ['--version']),
302
+ });
303
+ return;
304
+ }
305
+ if (ctx.dryRun) {
306
+ ctx.ui.info(`DRY RUN — would run: npm install -g ${pkg}`);
307
+ return;
308
+ }
309
+ await ctx.runner.interactive('npm', ['install', '-g', pkg]);
310
+ }
311
+ function removeHintFor(name) {
312
+ const npm = {
313
+ claude: 'npm rm -g @anthropic-ai/claude-code',
314
+ codex: 'npm rm -g @openai/codex',
315
+ };
316
+ if (name === 'gh')
317
+ return 'sudo apt-get remove -y gh';
318
+ return npm[name] ?? `# remove ${name} manually`;
319
+ }
320
+ /** macOS-flavored removal hints (brew instead of apt). */
321
+ export function brewRemoveHint(name) {
322
+ const npm = {
323
+ claude: 'npm rm -g @anthropic-ai/claude-code',
324
+ codex: 'npm rm -g @openai/codex',
325
+ };
326
+ if (name === 'gh')
327
+ return 'brew uninstall gh';
328
+ return npm[name] ?? `# remove ${name} manually`;
329
+ }
330
+ //# sourceMappingURL=steps.js.map