@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,314 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { cezarHomeDir } from '../paths.js';
4
+ import { acquireLock, isResolved, loadServerState, saveServerState } from './state.js';
5
+ import { StepAborted, StepCancelled, StepSkipped, defaultRunner } from './steps.js';
6
+ import { createAutoUi, createClackUi } from './ui.js';
7
+ import { CANCEL, PreflightError, } from './types.js';
8
+ /**
9
+ * Record a step outcome WITHOUT losing the artifact ledger: `server.json`
10
+ * exists so uninstall can reverse what was created, so a re-run that is
11
+ * cancelled/skipped/failed must keep the artifacts recorded by the previous
12
+ * successful run. Only a successful `run()` (which re-creates or supersedes
13
+ * them) may replace `created`.
14
+ */
15
+ function recordOutcome(state, id, status) {
16
+ state.steps[id] = { status, created: state.steps[id]?.created ?? null };
17
+ }
18
+ /** An outcome uninstall must reverse: completed, failed mid-run, or anything
19
+ * that still has recorded artifacts (e.g. a done step later downgraded). */
20
+ function needsUndo(outcome) {
21
+ if (!outcome)
22
+ return false;
23
+ if (outcome.status === 'done' || outcome.status === 'failed')
24
+ return true;
25
+ return (outcome.created?.artifacts.length ?? 0) > 0;
26
+ }
27
+ /**
28
+ * A `CEZ_DRY_RUN` preview persists a full ledger with no real side effects
29
+ * (the packaged e2e round-trip depends on that). Two invariants keep previews
30
+ * from destroying real state:
31
+ *
32
+ * 1. A dry-run NEVER persists over a REAL record — the preview mutates its
33
+ * in-memory copy only, so a preview on an installed host can't stamp
34
+ * `dryRun: true` onto (or delete steps from) the genuine ledger.
35
+ * 2. A REAL run never resumes from a preview record — steps would all report
36
+ * "already done" while nothing is installed. It self-heals by resetting.
37
+ */
38
+ function reconcileDryRun(state, opts, ui) {
39
+ const realRecord = !state.dryRun && (state.installed || Object.keys(state.steps).length > 0);
40
+ if (opts.dryRun && realRecord) {
41
+ ui.info('DRY RUN over a real install record — previewing only, nothing will be saved to server.json.');
42
+ return { persist: false };
43
+ }
44
+ if (!opts.dryRun && state.dryRun) {
45
+ ui.info('The recorded state came from a CEZ_DRY_RUN preview — starting from a clean slate.');
46
+ state.steps = {};
47
+ state.installed = false;
48
+ state.platform = undefined;
49
+ state.publicUrl = undefined;
50
+ state.ephemeral = undefined;
51
+ }
52
+ if (opts.dryRun)
53
+ state.dryRun = true;
54
+ else
55
+ delete state.dryRun;
56
+ return { persist: true };
57
+ }
58
+ function buildContext(state, opts) {
59
+ // Real `--yes` runs fail closed on prompts they cannot answer; dry-run
60
+ // previews stay lenient so they can walk every step.
61
+ const ui = opts.ui ??
62
+ (opts.dryRun || opts.assumeYes
63
+ ? createAutoUi({}, (m) => console.log(m), { strictValidate: !opts.dryRun })
64
+ : createClackUi());
65
+ const ctx = {
66
+ state,
67
+ ui,
68
+ runner: opts.runner ?? defaultRunner,
69
+ save: async () => saveServerState(state),
70
+ dryRun: opts.dryRun,
71
+ assumeYes: opts.assumeYes,
72
+ reconfigure: opts.reconfigure,
73
+ repoRoot: opts.repoRoot,
74
+ now: opts.now,
75
+ prefs: {},
76
+ };
77
+ const { persist } = reconcileDryRun(state, opts, ui);
78
+ if (!persist)
79
+ ctx.save = async () => { };
80
+ return ctx;
81
+ }
82
+ export async function runInstall(strategy, opts) {
83
+ const release = acquireLock();
84
+ try {
85
+ const state = loadServerState();
86
+ // buildContext reconciles dry-run records first, so a preview of platform A
87
+ // never blocks a real install of platform B (the reset clears `platform`).
88
+ const ctx = buildContext(state, opts);
89
+ if (state.platform && state.platform !== strategy.id) {
90
+ throw new PreflightError(`this host already has a ${state.platform} install recorded — run \`server-uninstall\` first to switch platforms`);
91
+ }
92
+ state.platform = strategy.id;
93
+ state.createdAt ??= opts.now;
94
+ state.updatedAt = opts.now;
95
+ await strategy.preflight(ctx); // throws PreflightError to refuse politely
96
+ const steps = strategy.steps(ctx);
97
+ const knownIds = new Set(steps.map((s) => s.id));
98
+ const unknownIds = [...opts.reconfigure].filter((id) => !knownIds.has(id));
99
+ if (unknownIds.length > 0) {
100
+ throw new PreflightError(`unknown --reconfigure step id(s): ${unknownIds.join(', ')} — ` +
101
+ `valid ids for ${strategy.id}: ${[...knownIds].join(', ')}`);
102
+ }
103
+ if (opts.reinstall) {
104
+ ctx.ui.info(`Reinstalling ${strategy.label} — every step will re-run.`);
105
+ }
106
+ else {
107
+ const resolvedCount = steps.filter((s) => isResolved(state.steps[s.id])).length;
108
+ if (resolvedCount > 0) {
109
+ ctx.ui.info(`Resuming ${strategy.label} — ${resolvedCount}/${steps.length} steps already done.`);
110
+ }
111
+ }
112
+ for (const step of steps) {
113
+ // `--reinstall` forces every step; `--reconfigure` forces the named ones.
114
+ const forced = opts.reinstall === true || opts.reconfigure.has(step.id);
115
+ if (!forced && isResolved(state.steps[step.id])) {
116
+ ctx.ui.info(`= ${step.title} (already done)`);
117
+ continue;
118
+ }
119
+ // Already satisfied on the box (fresh install, nothing recorded yet)?
120
+ if (!forced && (await step.check(ctx))) {
121
+ state.steps[step.id] = { status: 'done', created: state.steps[step.id]?.created ?? null };
122
+ await ctx.save();
123
+ ctx.ui.info(`= ${step.title} (already present)`);
124
+ continue;
125
+ }
126
+ if (step.optional) {
127
+ // `--yes` = accept safe defaults, and the safe default for an optional
128
+ // step (SSL against a real domain, autostart) is to SKIP it — never run
129
+ // it non-interactively against placeholder input.
130
+ if (ctx.assumeYes) {
131
+ recordOutcome(state, step.id, 'skipped');
132
+ await ctx.save();
133
+ ctx.ui.info(`— ${step.title} (skipped: --yes)`);
134
+ continue;
135
+ }
136
+ const proceed = await ctx.ui.confirm({ message: `Set up ${step.title}?`, initialValue: true });
137
+ if (proceed === CANCEL) {
138
+ recordOutcome(state, step.id, 'pending');
139
+ await ctx.save();
140
+ ctx.ui.warn(`Cancelled at "${step.title}". Progress saved — re-run to resume.`);
141
+ return { status: 'cancelled', state };
142
+ }
143
+ if (proceed !== true) {
144
+ recordOutcome(state, step.id, 'skipped');
145
+ await ctx.save();
146
+ ctx.ui.info(`— ${step.title} (skipped)`);
147
+ continue;
148
+ }
149
+ }
150
+ try {
151
+ const created = await step.run(ctx);
152
+ state.steps[step.id] = { status: 'done', created };
153
+ state.updatedAt = opts.now;
154
+ await ctx.save();
155
+ }
156
+ catch (err) {
157
+ if (err instanceof StepSkipped) {
158
+ recordOutcome(state, step.id, 'skipped');
159
+ await ctx.save();
160
+ ctx.ui.info(`— ${step.title} (skipped: ${err.message})`);
161
+ continue;
162
+ }
163
+ if (err instanceof StepCancelled) {
164
+ recordOutcome(state, step.id, 'pending');
165
+ await ctx.save();
166
+ ctx.ui.warn(`Cancelled at "${step.title}". Progress saved — re-run to resume.`);
167
+ return { status: 'cancelled', state };
168
+ }
169
+ if (err instanceof StepAborted) {
170
+ recordOutcome(state, step.id, 'failed');
171
+ await ctx.save();
172
+ ctx.ui.error(`Stopped at "${step.title}": ${err.message}`);
173
+ return { status: 'failed', state };
174
+ }
175
+ recordOutcome(state, step.id, 'failed');
176
+ await ctx.save();
177
+ throw err;
178
+ }
179
+ }
180
+ const requiredAllDone = steps
181
+ .filter((s) => !s.optional)
182
+ .every((s) => state.steps[s.id]?.status === 'done');
183
+ state.installed = requiredAllDone;
184
+ state.updatedAt = opts.now;
185
+ await ctx.save();
186
+ return { status: 'complete', state };
187
+ }
188
+ finally {
189
+ release();
190
+ }
191
+ }
192
+ export async function runUninstall(strategy, opts) {
193
+ const release = acquireLock();
194
+ try {
195
+ const state = loadServerState();
196
+ const ctx = buildContext(state, opts);
197
+ // Same guard as install/deploy: undoing with the wrong strategy would skip
198
+ // the real artifacts and (before this guard existed) destroy their ledger.
199
+ if (state.platform && state.platform !== strategy.id) {
200
+ throw new PreflightError(`this host has a ${state.platform} install recorded — run \`server-uninstall --platform ${state.platform}\``);
201
+ }
202
+ if (liveInstancesExist()) {
203
+ ctx.ui.warn('Other cezar instances are registered under ~/.cezar/instances/.');
204
+ const proceed = await ctx.ui.confirm({
205
+ message: 'Removing the shared proxy/service will break them. Continue?',
206
+ initialValue: false,
207
+ });
208
+ if (proceed !== true)
209
+ return { status: 'cancelled', state };
210
+ }
211
+ // Reverse order: undo the last-created first. `failed` outcomes are undone
212
+ // too — the step may have created artifacts before failing, and every undo
213
+ // is written to work from constants with a null/partial `created`.
214
+ const steps = [...strategy.steps(ctx)].reverse();
215
+ for (const step of steps) {
216
+ const outcome = state.steps[step.id];
217
+ if (!needsUndo(outcome))
218
+ continue;
219
+ try {
220
+ await step.undo(ctx, outcome.created ?? null);
221
+ delete state.steps[step.id];
222
+ state.updatedAt = opts.now;
223
+ await ctx.save();
224
+ }
225
+ catch (err) {
226
+ if (err instanceof StepCancelled) {
227
+ ctx.ui.warn(`Cancelled during uninstall at "${step.title}". Re-run to continue.`);
228
+ return { status: 'cancelled', state };
229
+ }
230
+ ctx.ui.error(`Failed to reverse "${step.title}": ${err instanceof Error ? err.message : String(err)}`);
231
+ return { status: 'failed', state };
232
+ }
233
+ }
234
+ // Drop entries that never had a system effect; anything left was recorded
235
+ // by a step id this binary doesn't know (a newer cezar) and was NOT
236
+ // reversed — keep its ledger and say so instead of silently erasing it.
237
+ for (const id of Object.keys(state.steps)) {
238
+ if (!needsUndo(state.steps[id]))
239
+ delete state.steps[id];
240
+ }
241
+ const leftover = Object.keys(state.steps);
242
+ state.installed = false;
243
+ state.updatedAt = opts.now;
244
+ if (leftover.length > 0) {
245
+ ctx.ui.warn(`Not reversed (recorded by a different cezar version): ${leftover.join(', ')}. ` +
246
+ 'Their record is kept — re-run server-uninstall with the cezar version that installed them.');
247
+ await ctx.save();
248
+ return { status: 'failed', state };
249
+ }
250
+ // A completed uninstall leaves the record empty so the host can be
251
+ // re-installed with any platform (the install guard keys off `platform`,
252
+ // so it must be cleared here too).
253
+ state.platform = undefined;
254
+ state.publicUrl = undefined;
255
+ state.ephemeral = undefined;
256
+ await ctx.save();
257
+ return { status: 'complete', state };
258
+ }
259
+ finally {
260
+ release();
261
+ }
262
+ }
263
+ /**
264
+ * Reload the running cockpit to pick up a new cezar version — the standardized
265
+ * `server-deploy` flow. Delegates to the platform's `redeploy` (restart service
266
+ * + re-verify); holds the single-writer lock for the whole run.
267
+ */
268
+ export async function runDeploy(strategy, opts) {
269
+ const release = acquireLock();
270
+ try {
271
+ const state = loadServerState();
272
+ const ctx = buildContext(state, opts);
273
+ if (state.platform && state.platform !== strategy.id) {
274
+ throw new PreflightError(`this host has a ${state.platform} install recorded — deploy it with --platform ${state.platform}`);
275
+ }
276
+ if (!state.installed) {
277
+ ctx.ui.warn(`no completed ${strategy.label} install is recorded on this host — run \`server-install --platform ${strategy.id}\` first.`);
278
+ return { status: 'failed', state };
279
+ }
280
+ if (!strategy.redeploy) {
281
+ ctx.ui.warn(`${strategy.label} does not support server-deploy.`);
282
+ return { status: 'failed', state };
283
+ }
284
+ try {
285
+ await strategy.redeploy(ctx);
286
+ }
287
+ catch (err) {
288
+ if (err instanceof StepAborted || err instanceof StepCancelled) {
289
+ ctx.ui.error(`Deploy did not complete: ${err.message}`);
290
+ return { status: 'failed', state };
291
+ }
292
+ throw err;
293
+ }
294
+ state.updatedAt = opts.now;
295
+ await ctx.save();
296
+ return { status: 'complete', state };
297
+ }
298
+ finally {
299
+ release();
300
+ }
301
+ }
302
+ /** True when at least one repo instance is registered (multi-project registry). */
303
+ function liveInstancesExist() {
304
+ const dir = join(cezarHomeDir(), 'instances');
305
+ if (!existsSync(dir))
306
+ return false;
307
+ try {
308
+ return readdirSync(dir).some((f) => f.endsWith('.json'));
309
+ }
310
+ catch {
311
+ return false;
312
+ }
313
+ }
314
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/server-install/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type PlatformStrategy } from '../types.js';
2
+ /** launchd agent that keeps an authenticated ngrok tunnel to the local cockpit up. */
3
+ export declare function launchdPlist(port: number, basicAuth: string, domain?: string, ngrokBin?: string): string;
4
+ /** launchd agent that keeps the cezar cockpit running on the given port. */
5
+ export declare function cezarLaunchdPlist(repoRoot: string, port: number, argv: string[]): string;
6
+ export declare const macosxNgrok: PlatformStrategy;