otacon 0.1.1 → 0.1.3

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 (128) hide show
  1. package/README.md +101 -64
  2. package/dist/cli/browser.js +55 -0
  3. package/dist/cli/browser.js.map +1 -0
  4. package/dist/cli/client.js +11 -0
  5. package/dist/cli/client.js.map +1 -1
  6. package/dist/cli/commands/clean.js +3 -2
  7. package/dist/cli/commands/clean.js.map +1 -1
  8. package/dist/cli/commands/config.js +62 -0
  9. package/dist/cli/commands/config.js.map +1 -0
  10. package/dist/cli/commands/doctor.js +41 -21
  11. package/dist/cli/commands/doctor.js.map +1 -1
  12. package/dist/cli/commands/install.js +53 -30
  13. package/dist/cli/commands/install.js.map +1 -1
  14. package/dist/cli/commands/open.js +14 -14
  15. package/dist/cli/commands/open.js.map +1 -1
  16. package/dist/cli/commands/start.js +8 -22
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/commands/update.js +76 -0
  19. package/dist/cli/commands/update.js.map +1 -0
  20. package/dist/cli/install/assets.js +35 -43
  21. package/dist/cli/install/assets.js.map +1 -1
  22. package/dist/cli/install/locations.js +15 -25
  23. package/dist/cli/install/locations.js.map +1 -1
  24. package/dist/cli/main.js +10 -1
  25. package/dist/cli/main.js.map +1 -1
  26. package/dist/cli/update.js +195 -0
  27. package/dist/cli/update.js.map +1 -0
  28. package/dist/daemon/app.js +281 -54
  29. package/dist/daemon/app.js.map +1 -1
  30. package/dist/daemon/approve.js +49 -11
  31. package/dist/daemon/approve.js.map +1 -1
  32. package/dist/daemon/store.js +39 -2
  33. package/dist/daemon/store.js.map +1 -1
  34. package/dist/daemon/threads.js +11 -0
  35. package/dist/daemon/threads.js.map +1 -1
  36. package/dist/daemon/ui.js +9 -1
  37. package/dist/daemon/ui.js.map +1 -1
  38. package/dist/shared/config.js +301 -45
  39. package/dist/shared/config.js.map +1 -1
  40. package/dist/shared/paths.js +41 -5
  41. package/dist/shared/paths.js.map +1 -1
  42. package/dist/shared/types.js +6 -2
  43. package/dist/shared/types.js.map +1 -1
  44. package/dist/shared/version.js +1 -1
  45. package/dist/ui/assets/{arc-HhPfdCPZ.js → arc-Cp3sPd_U.js} +1 -1
  46. package/dist/ui/assets/architecture-7EHR7CIX-BbwstElO.js +1 -0
  47. package/dist/ui/assets/{architectureDiagram-3BPJPVTR-D2PIxGOb.js → architectureDiagram-3BPJPVTR-C4F3heWP.js} +1 -1
  48. package/dist/ui/assets/{blockDiagram-GPEHLZMM-DQ3Dn17h.js → blockDiagram-GPEHLZMM-DmJoG8ky.js} +1 -1
  49. package/dist/ui/assets/{c4Diagram-AAUBKEIU-DxITrQgS.js → c4Diagram-AAUBKEIU-BDEf52Jp.js} +1 -1
  50. package/dist/ui/assets/channel-BMK3JFRf.js +1 -0
  51. package/dist/ui/assets/{chunk-2J33WTMH-Du1JoPx5.js → chunk-2J33WTMH-Dh_UFriv.js} +1 -1
  52. package/dist/ui/assets/{chunk-3OPIFGDE-Dn7x2Yqf.js → chunk-3OPIFGDE-c66RlAN8.js} +1 -1
  53. package/dist/ui/assets/{chunk-4BX2VUAB-DVnrE-4n.js → chunk-4BX2VUAB-CrGJaCCg.js} +1 -1
  54. package/dist/ui/assets/{chunk-55IACEB6-BAhFAimA.js → chunk-55IACEB6-BvwqEeyq.js} +1 -1
  55. package/dist/ui/assets/{chunk-5ZQYHXKU-0hEZptem.js → chunk-5ZQYHXKU-BfF2IfQe.js} +1 -1
  56. package/dist/ui/assets/{chunk-727SXJPM-C1FN_cI3.js → chunk-727SXJPM-DOEUwc9I.js} +1 -1
  57. package/dist/ui/assets/{chunk-AQP2D5EJ-A656OBd4.js → chunk-AQP2D5EJ-CVf2xV2Z.js} +1 -1
  58. package/dist/ui/assets/{chunk-BSJP7CBP-D8oMbjm8.js → chunk-BSJP7CBP-D_EbTWTC.js} +1 -1
  59. package/dist/ui/assets/{chunk-CSCIHK7Q-DjIL8GLi.js → chunk-CSCIHK7Q-CkxTSMAM.js} +1 -1
  60. package/dist/ui/assets/{chunk-FMBD7UC4-Otblfqvz.js → chunk-FMBD7UC4-DVShhFc7.js} +1 -1
  61. package/dist/ui/assets/{chunk-KSCS5N6A-BOjTvm3H.js → chunk-KSCS5N6A-DnHEEYpq.js} +1 -1
  62. package/dist/ui/assets/{chunk-L5ZTLDWV-CaTLaw6L.js → chunk-L5ZTLDWV-B_gjyajS.js} +1 -1
  63. package/dist/ui/assets/{chunk-LZXEDZCA-Dq5p7qrD.js → chunk-LZXEDZCA-Bsf7basG.js} +2 -2
  64. package/dist/ui/assets/{chunk-ND2GUHAM-jZ_NNnWi.js → chunk-ND2GUHAM-DGepGb8_.js} +1 -1
  65. package/dist/ui/assets/{chunk-NZK2D7GU-U_7l_sCh.js → chunk-NZK2D7GU-BJIlh-gB.js} +1 -1
  66. package/dist/ui/assets/{chunk-O5CBEL6O-MewqqNB7.js → chunk-O5CBEL6O-cdVbOOCs.js} +1 -1
  67. package/dist/ui/assets/chunk-QZHKN3VN-DLNUTn7U.js +1 -0
  68. package/dist/ui/assets/chunk-WU5MYG2G-ipH3YPcA.js +1 -0
  69. package/dist/ui/assets/{chunk-XPW4576I-D5ArxNEF.js → chunk-XPW4576I-DPW39hNO.js} +1 -1
  70. package/dist/ui/assets/classDiagram-4FO5ZUOK-CvIMLlSD.js +1 -0
  71. package/dist/ui/assets/classDiagram-v2-Q7XG4LA2-CvIMLlSD.js +1 -0
  72. package/dist/ui/assets/{cose-bilkent-S5V4N54A-PFXzf7WV.js → cose-bilkent-S5V4N54A-DmMsC6om.js} +1 -1
  73. package/dist/ui/assets/{dagre-BM42HDAG-xrCfjZuZ.js → dagre-BM42HDAG-BmVr7T7Z.js} +1 -1
  74. package/dist/ui/assets/{diagram-2AECGRRQ-BFf-cyKY.js → diagram-2AECGRRQ-e0VnXEyj.js} +1 -1
  75. package/dist/ui/assets/{diagram-5GNKFQAL-kNPV4NfV.js → diagram-5GNKFQAL-SCJGYE6m.js} +1 -1
  76. package/dist/ui/assets/{diagram-KO2AKTUF-ByC1IUwG.js → diagram-KO2AKTUF-DDUZO1Mj.js} +1 -1
  77. package/dist/ui/assets/{diagram-LMA3HP47-DZIJMPK0.js → diagram-LMA3HP47-5x1ypf6a.js} +1 -1
  78. package/dist/ui/assets/{diagram-OG6HWLK6-CSDED9A-.js → diagram-OG6HWLK6-3nDhrQ20.js} +1 -1
  79. package/dist/ui/assets/{dist-YwjsDswi.js → dist-NEinnePC.js} +1 -1
  80. package/dist/ui/assets/{erDiagram-TEJ5UH35-yuzvjE6J.js → erDiagram-TEJ5UH35-BNvwSDNZ.js} +1 -1
  81. package/dist/ui/assets/eventmodeling-FCH6USID-BeFWDbla.js +1 -0
  82. package/dist/ui/assets/{flowDiagram-I6XJVG4X-ApPtVyYM.js → flowDiagram-I6XJVG4X-Bt_wDUhb.js} +1 -1
  83. package/dist/ui/assets/{ganttDiagram-6RSMTGT7-BeMLXtAr.js → ganttDiagram-6RSMTGT7-DVcJ0rNX.js} +1 -1
  84. package/dist/ui/assets/{gitGraph-WXDBUCRP-JmTTBa7j.js → gitGraph-WXDBUCRP-CO_SyAgP.js} +1 -1
  85. package/dist/ui/assets/{gitGraphDiagram-PVQCEYII-Cjjnjs71.js → gitGraphDiagram-PVQCEYII-oDyO3lWI.js} +1 -1
  86. package/dist/ui/assets/index-CJJIQ0dr.css +1 -0
  87. package/dist/ui/assets/index-Dh5CsH24.js +11 -0
  88. package/dist/ui/assets/{info-J43DQDTF-8vZ3gome.js → info-J43DQDTF-Bn17NS7h.js} +1 -1
  89. package/dist/ui/assets/{infoDiagram-5YYISTIA-CnMk1cA-.js → infoDiagram-5YYISTIA-HG1opLLT.js} +1 -1
  90. package/dist/ui/assets/{ishikawaDiagram-YF4QCWOH-Bl8z6huD.js → ishikawaDiagram-YF4QCWOH-Di_yQwi8.js} +1 -1
  91. package/dist/ui/assets/{journeyDiagram-JHISSGLW-DYIVfMpS.js → journeyDiagram-JHISSGLW-DZtHvLeE.js} +1 -1
  92. package/dist/ui/assets/{kanban-definition-UN3LZRKU-BnR0ZzOz.js → kanban-definition-UN3LZRKU-B_RCx3Km.js} +1 -1
  93. package/dist/ui/assets/{line-DcBdQit6.js → line-DenX-zXQ.js} +1 -1
  94. package/dist/ui/assets/{linear-HKjRHFAO.js → linear-dly_ngoq.js} +1 -1
  95. package/dist/ui/assets/{mermaid-parser.core-DkYXrPlA.js → mermaid-parser.core-CRmtm0s9.js} +2 -2
  96. package/dist/ui/assets/{mermaid.core-BmkfCI3b.js → mermaid.core-C_3KVfpx.js} +3 -3
  97. package/dist/ui/assets/{mindmap-definition-RKZ34NQL-sIAd4nDi.js → mindmap-definition-RKZ34NQL-wdzSyYO6.js} +1 -1
  98. package/dist/ui/assets/{packet-YPE3B663-BxbxcfXN.js → packet-YPE3B663-tUyFmR11.js} +1 -1
  99. package/dist/ui/assets/{pie-LRSECV5Y-BJxazjNs.js → pie-LRSECV5Y-Cel48VVp.js} +1 -1
  100. package/dist/ui/assets/{pieDiagram-4H26LBE5-BiOhc9GR.js → pieDiagram-4H26LBE5-B55ypWtu.js} +1 -1
  101. package/dist/ui/assets/{plan-view-CH6NzUDb.js → plan-view-CMoo3_gE.js} +3 -3
  102. package/dist/ui/assets/{quadrantDiagram-W4KKPZXB-CVyHbWgo.js → quadrantDiagram-W4KKPZXB-9WcKQV0a.js} +1 -1
  103. package/dist/ui/assets/{radar-GUYGQ44K-D9ohbnbV.js → radar-GUYGQ44K-w5pk53Vr.js} +1 -1
  104. package/dist/ui/assets/{requirementDiagram-4Y6WPE33-Ba24_hqc.js → requirementDiagram-4Y6WPE33-CzE82fXz.js} +1 -1
  105. package/dist/ui/assets/{sankeyDiagram-5OEKKPKP-CxD4wiPL.js → sankeyDiagram-5OEKKPKP-DSGO39je.js} +1 -1
  106. package/dist/ui/assets/{sequenceDiagram-3UESZ5HK-7qA7lD61.js → sequenceDiagram-3UESZ5HK-BKSDDr0S.js} +1 -1
  107. package/dist/ui/assets/{src-IM8AE8MK.js → src-JXBGgRt-.js} +1 -1
  108. package/dist/ui/assets/{stateDiagram-AJRCARHV-DNElRCuH.js → stateDiagram-AJRCARHV-DZHYA9aj.js} +1 -1
  109. package/dist/ui/assets/stateDiagram-v2-BHNVJYJU-DnAfDlvZ.js +1 -0
  110. package/dist/ui/assets/{timeline-definition-PNZ67QCA-ChYC4Grd.js → timeline-definition-PNZ67QCA-WqJFw7aE.js} +1 -1
  111. package/dist/ui/assets/{treeView-BLDUP644-Il0KnMi_.js → treeView-BLDUP644-DoIQYMiz.js} +1 -1
  112. package/dist/ui/assets/{treemap-LRROVOQU-CIiKcdRo.js → treemap-LRROVOQU-BA9si_Mo.js} +1 -1
  113. package/dist/ui/assets/{vennDiagram-CIIHVFJN-Ulhkum9i.js → vennDiagram-CIIHVFJN-BvWRUfFr.js} +1 -1
  114. package/dist/ui/assets/{wardley-L42UT6IY-BNd4ljz7.js → wardley-L42UT6IY-Cf9PU44t.js} +1 -1
  115. package/dist/ui/assets/{wardleyDiagram-YWT4CUSO-BicXxh84.js → wardleyDiagram-YWT4CUSO-CGuxl7AU.js} +1 -1
  116. package/dist/ui/assets/{xychartDiagram-2RQKCTM6-Duf-m_th.js → xychartDiagram-2RQKCTM6-CNteNXpe.js} +1 -1
  117. package/dist/ui/index.html +2 -2
  118. package/package.json +1 -1
  119. package/dist/ui/assets/architecture-7EHR7CIX-BPLblcyi.js +0 -1
  120. package/dist/ui/assets/channel-ipcU8ZNI.js +0 -1
  121. package/dist/ui/assets/chunk-QZHKN3VN-DzGPH44B.js +0 -1
  122. package/dist/ui/assets/chunk-WU5MYG2G-DyEIVjoo.js +0 -1
  123. package/dist/ui/assets/classDiagram-4FO5ZUOK-Byg2Hl9D.js +0 -1
  124. package/dist/ui/assets/classDiagram-v2-Q7XG4LA2-Byg2Hl9D.js +0 -1
  125. package/dist/ui/assets/eventmodeling-FCH6USID-CZR4eNG-.js +0 -1
  126. package/dist/ui/assets/index-BFQVRcSI.js +0 -11
  127. package/dist/ui/assets/index-Bj_kTrwP.css +0 -1
  128. package/dist/ui/assets/stateDiagram-v2-BHNVJYJU-D6qTYpY3.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"locations.js","sourceRoot":"","sources":["../../../src/cli/install/locations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locations.js","sourceRoot":"","sources":["../../../src/cli/install/locations.ts"],"names":[],"mappings":"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"}
package/dist/cli/main.js CHANGED
@@ -5,6 +5,7 @@
5
5
  import { answerCommand } from "./commands/answer.js";
6
6
  import { askCommand } from "./commands/ask.js";
7
7
  import { cleanCommand } from "./commands/clean.js";
8
+ import { configCommand } from "./commands/config.js";
8
9
  import { doctorCommand } from "./commands/doctor.js";
9
10
  import { exposeCommand } from "./commands/expose.js";
10
11
  import { implementDoneCommand } from "./commands/implement-done.js";
@@ -14,9 +15,13 @@ import { progressCommand } from "./commands/progress.js";
14
15
  import { startCommand } from "./commands/start.js";
15
16
  import { statusCommand } from "./commands/status.js";
16
17
  import { submitCommand } from "./commands/submit.js";
18
+ import { updateCommand } from "./commands/update.js";
17
19
  import { waitCommand } from "./commands/wait.js";
18
20
  import { CliError, printJson } from "./output.js";
19
- const USAGE = "usage: otacon <start|submit|wait|ask|answer|progress|implement-done|status|open|clean|install|doctor|expose> [options]";
21
+ const USAGE = "usage: otacon <start|submit|wait|ask|answer|progress|implement-done|status|open|config|clean|install|doctor|expose|update> [options]\n" +
22
+ " otacon config [open] open the Settings web UI in the browser\n" +
23
+ " otacon config get <key> print the merged value of one config key\n" +
24
+ " otacon update [--check] update the global install to the latest published version";
20
25
  async function dispatch(command, argv) {
21
26
  switch (command) {
22
27
  case "start":
@@ -37,6 +42,8 @@ async function dispatch(command, argv) {
37
42
  return statusCommand(argv);
38
43
  case "open":
39
44
  return openCommand(argv);
45
+ case "config":
46
+ return configCommand(argv);
40
47
  case "clean":
41
48
  return cleanCommand(argv);
42
49
  case "install":
@@ -45,6 +52,8 @@ async function dispatch(command, argv) {
45
52
  return doctorCommand(argv);
46
53
  case "expose":
47
54
  return exposeCommand(argv);
55
+ case "update":
56
+ return updateCommand(argv);
48
57
  default:
49
58
  throw new CliError("E_USAGE", USAGE, 2);
50
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ // `otacon start`'s auto-update gate (DESIGN.md §16). The top of this file is the
2
+ // pure, side-effect-free decision core (Phase 1); `maybeAutoUpdate` at the
3
+ // bottom wires the side effects (Phase 2): the npm update and the re-exec.
4
+ //
5
+ // Decisions that shape the code:
6
+ // - D3: the whole check is throttled to once per hour via the
7
+ // `update-check.json` cache (`updateCheckDue`).
8
+ // - D5: latest is discovered by GET registry.npmjs.org/otacon/latest with a
9
+ // short timeout, fail-open on ANY error (`fetchLatest` → undefined).
10
+ // - D6: a source-tree run (the `.ts` daemon entry signal, `isSourceRun`) is
11
+ // skipped — there is no global npm package to update from a checkout.
12
+ // - D7: update with `npm install -g otacon@latest`; on any failure notify the
13
+ // manual command and proceed on the installed version — never sudo.
14
+ // - D8: `OTACON_UPDATED=1` guards the re-exec'd child against a second check.
15
+ import { spawnSync as nodeSpawnSync } from "node:child_process";
16
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
17
+ import { loadConfig } from "../shared/config.js";
18
+ import { otaconHome, updateCachePath } from "../shared/paths.js";
19
+ import { VERSION } from "../shared/version.js";
20
+ import { isSourceRun } from "./client.js";
21
+ import { notice } from "./output.js";
22
+ import { findRepoRoot, realpathOr } from "./session.js";
23
+ /**
24
+ * True iff `latest` is a strictly greater semver than `current`. Parses
25
+ * major.minor.patch numerically (a leading `v` and any prerelease/build suffix
26
+ * after patch is ignored). A malformed input on either side returns false —
27
+ * never throws — so a garbled registry answer can never trigger an update.
28
+ */
29
+ export function isNewer(latest, current) {
30
+ const a = parseSemver(latest);
31
+ const b = parseSemver(current);
32
+ if (a === undefined || b === undefined)
33
+ return false;
34
+ for (let i = 0; i < 3; i++) {
35
+ const [ai, bi] = [a[i] ?? 0, b[i] ?? 0];
36
+ if (ai > bi)
37
+ return true;
38
+ if (ai < bi)
39
+ return false;
40
+ }
41
+ return false;
42
+ }
43
+ /** Parse `x.y.z` (optional leading `v`, trailing `-pre`/`+build` ignored) into a numeric triple. */
44
+ function parseSemver(version) {
45
+ if (typeof version !== "string")
46
+ return undefined;
47
+ const core = version.trim().replace(/^v/, "").split(/[-+]/, 1)[0] ?? "";
48
+ const parts = core.split(".");
49
+ if (parts.length !== 3)
50
+ return undefined;
51
+ const nums = [];
52
+ for (const part of parts) {
53
+ if (!/^\d+$/.test(part))
54
+ return undefined;
55
+ nums.push(Number(part));
56
+ }
57
+ return [nums[0] ?? 0, nums[1] ?? 0, nums[2] ?? 0];
58
+ }
59
+ /**
60
+ * The 1h throttle (D3): returns true when a fresh check is due — i.e. there is
61
+ * no valid cache, or `nowMs - cache.checkedAt >= windowMs`. A malformed or
62
+ * absent cache (or a non-finite `checkedAt`) counts as due, so a corrupt cache
63
+ * file never wedges the check off.
64
+ */
65
+ export function updateCheckDue(cache, nowMs, windowMs = 3_600_000) {
66
+ if (cache === undefined || typeof cache.checkedAt !== "number" || !Number.isFinite(cache.checkedAt)) {
67
+ return true;
68
+ }
69
+ return nowMs - cache.checkedAt >= windowMs;
70
+ }
71
+ /**
72
+ * GET registry.npmjs.org/otacon/latest and return its `.version` (D5). On ANY
73
+ * error — network failure, non-200, bad JSON, missing/empty version, or the
74
+ * timeout — resolves to `undefined` so the caller fails open and proceeds on
75
+ * the current version. Never throws. Defaults to a 1.5s timeout when no
76
+ * `signal` is supplied.
77
+ */
78
+ export async function fetchLatest(signal) {
79
+ try {
80
+ const response = await fetch("https://registry.npmjs.org/otacon/latest", {
81
+ signal: signal ?? AbortSignal.timeout(1500),
82
+ });
83
+ if (!response.ok)
84
+ return undefined;
85
+ const body = (await response.json());
86
+ return typeof body.version === "string" && body.version.length > 0 ? body.version : undefined;
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ /** Read+parse the throttle cache; a missing/corrupt file is `undefined` (= due). */
93
+ function readCache() {
94
+ try {
95
+ const parsed = JSON.parse(readFileSync(updateCachePath(), "utf8"));
96
+ if (typeof parsed === "object" && parsed !== null && "checkedAt" in parsed) {
97
+ return parsed;
98
+ }
99
+ }
100
+ catch {
101
+ // missing or malformed → treated as due by updateCheckDue(undefined, …)
102
+ }
103
+ return undefined;
104
+ }
105
+ /** Persist `checkedAt: now` BEFORE attempting the update, so a failed update still throttles. */
106
+ function writeCache(nowMs) {
107
+ try {
108
+ mkdirSync(otaconHome(), { recursive: true });
109
+ writeFileSync(updateCachePath(), `${JSON.stringify({ checkedAt: nowMs })}\n`);
110
+ }
111
+ catch {
112
+ // a cache we can't write just means the next start re-checks; never fatal
113
+ }
114
+ }
115
+ /**
116
+ * Run `npm install -g otacon@latest` (D7), the one mutating side effect shared
117
+ * by the auto-update gate (`maybeAutoUpdate`) and the standalone `otacon update`
118
+ * command. stdio is inherited so npm's own progress reaches the human's stderr.
119
+ * Returns `{ ok }`: false on a non-zero exit (a non-writable global dir, an npm
120
+ * error) OR a spawn error (`ENOENT` when npm is missing) — never throws, and
121
+ * never escalates to sudo (D1). `latest` is accepted for symmetry/logging at the
122
+ * call site; the registry tag `otacon@latest` is what npm actually resolves.
123
+ * `spawnSync` is injectable so tests drive both outcomes with no real npm.
124
+ */
125
+ export function runNpmUpdate(_latest, spawnSync = nodeSpawnSync) {
126
+ const install = spawnSync("npm", ["install", "-g", "otacon@latest"], {
127
+ stdio: "inherit",
128
+ });
129
+ return { ok: install.error === undefined && install.status === 0 };
130
+ }
131
+ const REAL_DEPS = {
132
+ fetch: fetchLatest,
133
+ spawnSync: nodeSpawnSync,
134
+ exit: (code) => process.exit(code),
135
+ nowMs: () => Date.now(),
136
+ sourceRun: isSourceRun,
137
+ };
138
+ /**
139
+ * The pre-session auto-update gate, called as the very first thing in
140
+ * `otacon start` (DESIGN.md §16). Guards in order — each early return means
141
+ * "proceed on the installed version" (the no-op path):
142
+ *
143
+ * 1. loop guard — `OTACON_UPDATED` set → the re-exec'd child, don't re-check (D8)
144
+ * 2. dev-run skip — a source checkout has no global package to update (D6)
145
+ * 3. config gate — `update.auto:false` pins the version (D4)
146
+ * 4. throttle — checked within the hour → skip; else stamp the cache now (D3)
147
+ * 5. fetch+compare— registry latest (fail-open) must be strictly newer (D5)
148
+ * 6. update — `npm install -g otacon@latest`; on success notice + re-exec
149
+ * `start <argv>` with OTACON_UPDATED=1 and exit the parent;
150
+ * on ANY failure notice the manual command and return (D1/D7)
151
+ *
152
+ * On the successful-update path this NEVER returns: it re-execs and exits with
153
+ * the child's status. The child runs the new CLI, mints the session, and (via
154
+ * the version handshake in ensureDaemon) restarts the stale daemon — no extra
155
+ * restart code (D9).
156
+ */
157
+ export async function maybeAutoUpdate(argv, deps = REAL_DEPS) {
158
+ // 1. Loop guard (D8): the re-exec'd child must not check again.
159
+ if (process.env.OTACON_UPDATED)
160
+ return;
161
+ // 2. Dev-run skip (D6): a source checkout has no global npm package.
162
+ if (deps.sourceRun())
163
+ return;
164
+ // 3. Config gate (D4): honor project config the same way start.ts resolves the repo.
165
+ const cwd = realpathOr(process.cwd());
166
+ const repo = findRepoRoot(cwd) ?? cwd;
167
+ if (loadConfig(repo).update.auto === false)
168
+ return;
169
+ // 4. Throttle (D3): stamp the cache BEFORE attempting the update so a failed
170
+ // attempt still throttles the next hour (no npm hammering on a flaky network).
171
+ const now = deps.nowMs();
172
+ if (!updateCheckDue(readCache(), now))
173
+ return;
174
+ writeCache(now);
175
+ // 5. Fetch + compare (D5): fail-open on no answer; only act if strictly newer.
176
+ const latest = await deps.fetch();
177
+ if (latest === undefined)
178
+ return;
179
+ if (!isNewer(latest, VERSION))
180
+ return;
181
+ // 6. Update (D7): npm install -g via the shared helper; fail-open on any error.
182
+ if (!runNpmUpdate(latest, deps.spawnSync).ok) {
183
+ // ENOENT (npm missing), non-zero exit, or a non-writable global dir — never
184
+ // escalate to sudo (D1). Notify the manual command and proceed on current.
185
+ notice(`a newer otacon ${latest} is available but auto-update failed; run: npm install -g otacon@latest`);
186
+ return;
187
+ }
188
+ // Success: re-exec the same `start` invocation on the freshly-installed CLI.
189
+ // OTACON_UPDATED=1 trips the loop guard above; stdio is inherited so the child
190
+ // prints the single JSON line on stdout, preserving the start contract.
191
+ notice(`updated otacon ${VERSION} → ${latest}; restarting`);
192
+ const child = deps.spawnSync(process.execPath, [process.argv[1] ?? "", "start", ...argv], { stdio: "inherit", env: { ...process.env, OTACON_UPDATED: "1" } });
193
+ deps.exit(child.status ?? 0);
194
+ }
195
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}