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.
- package/README.md +101 -64
- package/dist/cli/browser.js +55 -0
- package/dist/cli/browser.js.map +1 -0
- package/dist/cli/client.js +11 -0
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/commands/clean.js +3 -2
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/config.js +62 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.js +41 -21
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install.js +53 -30
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/open.js +14 -14
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/start.js +8 -22
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/update.js +76 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/install/assets.js +35 -43
- package/dist/cli/install/assets.js.map +1 -1
- package/dist/cli/install/locations.js +15 -25
- package/dist/cli/install/locations.js.map +1 -1
- package/dist/cli/main.js +10 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/update.js +195 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/daemon/app.js +281 -54
- package/dist/daemon/app.js.map +1 -1
- package/dist/daemon/approve.js +49 -11
- package/dist/daemon/approve.js.map +1 -1
- package/dist/daemon/store.js +39 -2
- package/dist/daemon/store.js.map +1 -1
- package/dist/daemon/threads.js +11 -0
- package/dist/daemon/threads.js.map +1 -1
- package/dist/daemon/ui.js +9 -1
- package/dist/daemon/ui.js.map +1 -1
- package/dist/shared/config.js +301 -45
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/paths.js +41 -5
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/types.js +6 -2
- package/dist/shared/types.js.map +1 -1
- package/dist/shared/version.js +1 -1
- package/dist/ui/assets/{arc-HhPfdCPZ.js → arc-Cp3sPd_U.js} +1 -1
- package/dist/ui/assets/architecture-7EHR7CIX-BbwstElO.js +1 -0
- package/dist/ui/assets/{architectureDiagram-3BPJPVTR-D2PIxGOb.js → architectureDiagram-3BPJPVTR-C4F3heWP.js} +1 -1
- package/dist/ui/assets/{blockDiagram-GPEHLZMM-DQ3Dn17h.js → blockDiagram-GPEHLZMM-DmJoG8ky.js} +1 -1
- package/dist/ui/assets/{c4Diagram-AAUBKEIU-DxITrQgS.js → c4Diagram-AAUBKEIU-BDEf52Jp.js} +1 -1
- package/dist/ui/assets/channel-BMK3JFRf.js +1 -0
- package/dist/ui/assets/{chunk-2J33WTMH-Du1JoPx5.js → chunk-2J33WTMH-Dh_UFriv.js} +1 -1
- package/dist/ui/assets/{chunk-3OPIFGDE-Dn7x2Yqf.js → chunk-3OPIFGDE-c66RlAN8.js} +1 -1
- package/dist/ui/assets/{chunk-4BX2VUAB-DVnrE-4n.js → chunk-4BX2VUAB-CrGJaCCg.js} +1 -1
- package/dist/ui/assets/{chunk-55IACEB6-BAhFAimA.js → chunk-55IACEB6-BvwqEeyq.js} +1 -1
- package/dist/ui/assets/{chunk-5ZQYHXKU-0hEZptem.js → chunk-5ZQYHXKU-BfF2IfQe.js} +1 -1
- package/dist/ui/assets/{chunk-727SXJPM-C1FN_cI3.js → chunk-727SXJPM-DOEUwc9I.js} +1 -1
- package/dist/ui/assets/{chunk-AQP2D5EJ-A656OBd4.js → chunk-AQP2D5EJ-CVf2xV2Z.js} +1 -1
- package/dist/ui/assets/{chunk-BSJP7CBP-D8oMbjm8.js → chunk-BSJP7CBP-D_EbTWTC.js} +1 -1
- package/dist/ui/assets/{chunk-CSCIHK7Q-DjIL8GLi.js → chunk-CSCIHK7Q-CkxTSMAM.js} +1 -1
- package/dist/ui/assets/{chunk-FMBD7UC4-Otblfqvz.js → chunk-FMBD7UC4-DVShhFc7.js} +1 -1
- package/dist/ui/assets/{chunk-KSCS5N6A-BOjTvm3H.js → chunk-KSCS5N6A-DnHEEYpq.js} +1 -1
- package/dist/ui/assets/{chunk-L5ZTLDWV-CaTLaw6L.js → chunk-L5ZTLDWV-B_gjyajS.js} +1 -1
- package/dist/ui/assets/{chunk-LZXEDZCA-Dq5p7qrD.js → chunk-LZXEDZCA-Bsf7basG.js} +2 -2
- package/dist/ui/assets/{chunk-ND2GUHAM-jZ_NNnWi.js → chunk-ND2GUHAM-DGepGb8_.js} +1 -1
- package/dist/ui/assets/{chunk-NZK2D7GU-U_7l_sCh.js → chunk-NZK2D7GU-BJIlh-gB.js} +1 -1
- package/dist/ui/assets/{chunk-O5CBEL6O-MewqqNB7.js → chunk-O5CBEL6O-cdVbOOCs.js} +1 -1
- package/dist/ui/assets/chunk-QZHKN3VN-DLNUTn7U.js +1 -0
- package/dist/ui/assets/chunk-WU5MYG2G-ipH3YPcA.js +1 -0
- package/dist/ui/assets/{chunk-XPW4576I-D5ArxNEF.js → chunk-XPW4576I-DPW39hNO.js} +1 -1
- package/dist/ui/assets/classDiagram-4FO5ZUOK-CvIMLlSD.js +1 -0
- package/dist/ui/assets/classDiagram-v2-Q7XG4LA2-CvIMLlSD.js +1 -0
- package/dist/ui/assets/{cose-bilkent-S5V4N54A-PFXzf7WV.js → cose-bilkent-S5V4N54A-DmMsC6om.js} +1 -1
- package/dist/ui/assets/{dagre-BM42HDAG-xrCfjZuZ.js → dagre-BM42HDAG-BmVr7T7Z.js} +1 -1
- package/dist/ui/assets/{diagram-2AECGRRQ-BFf-cyKY.js → diagram-2AECGRRQ-e0VnXEyj.js} +1 -1
- package/dist/ui/assets/{diagram-5GNKFQAL-kNPV4NfV.js → diagram-5GNKFQAL-SCJGYE6m.js} +1 -1
- package/dist/ui/assets/{diagram-KO2AKTUF-ByC1IUwG.js → diagram-KO2AKTUF-DDUZO1Mj.js} +1 -1
- package/dist/ui/assets/{diagram-LMA3HP47-DZIJMPK0.js → diagram-LMA3HP47-5x1ypf6a.js} +1 -1
- package/dist/ui/assets/{diagram-OG6HWLK6-CSDED9A-.js → diagram-OG6HWLK6-3nDhrQ20.js} +1 -1
- package/dist/ui/assets/{dist-YwjsDswi.js → dist-NEinnePC.js} +1 -1
- package/dist/ui/assets/{erDiagram-TEJ5UH35-yuzvjE6J.js → erDiagram-TEJ5UH35-BNvwSDNZ.js} +1 -1
- package/dist/ui/assets/eventmodeling-FCH6USID-BeFWDbla.js +1 -0
- package/dist/ui/assets/{flowDiagram-I6XJVG4X-ApPtVyYM.js → flowDiagram-I6XJVG4X-Bt_wDUhb.js} +1 -1
- package/dist/ui/assets/{ganttDiagram-6RSMTGT7-BeMLXtAr.js → ganttDiagram-6RSMTGT7-DVcJ0rNX.js} +1 -1
- package/dist/ui/assets/{gitGraph-WXDBUCRP-JmTTBa7j.js → gitGraph-WXDBUCRP-CO_SyAgP.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-PVQCEYII-Cjjnjs71.js → gitGraphDiagram-PVQCEYII-oDyO3lWI.js} +1 -1
- package/dist/ui/assets/index-CJJIQ0dr.css +1 -0
- package/dist/ui/assets/index-Dh5CsH24.js +11 -0
- package/dist/ui/assets/{info-J43DQDTF-8vZ3gome.js → info-J43DQDTF-Bn17NS7h.js} +1 -1
- package/dist/ui/assets/{infoDiagram-5YYISTIA-CnMk1cA-.js → infoDiagram-5YYISTIA-HG1opLLT.js} +1 -1
- package/dist/ui/assets/{ishikawaDiagram-YF4QCWOH-Bl8z6huD.js → ishikawaDiagram-YF4QCWOH-Di_yQwi8.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-JHISSGLW-DYIVfMpS.js → journeyDiagram-JHISSGLW-DZtHvLeE.js} +1 -1
- package/dist/ui/assets/{kanban-definition-UN3LZRKU-BnR0ZzOz.js → kanban-definition-UN3LZRKU-B_RCx3Km.js} +1 -1
- package/dist/ui/assets/{line-DcBdQit6.js → line-DenX-zXQ.js} +1 -1
- package/dist/ui/assets/{linear-HKjRHFAO.js → linear-dly_ngoq.js} +1 -1
- package/dist/ui/assets/{mermaid-parser.core-DkYXrPlA.js → mermaid-parser.core-CRmtm0s9.js} +2 -2
- package/dist/ui/assets/{mermaid.core-BmkfCI3b.js → mermaid.core-C_3KVfpx.js} +3 -3
- package/dist/ui/assets/{mindmap-definition-RKZ34NQL-sIAd4nDi.js → mindmap-definition-RKZ34NQL-wdzSyYO6.js} +1 -1
- package/dist/ui/assets/{packet-YPE3B663-BxbxcfXN.js → packet-YPE3B663-tUyFmR11.js} +1 -1
- package/dist/ui/assets/{pie-LRSECV5Y-BJxazjNs.js → pie-LRSECV5Y-Cel48VVp.js} +1 -1
- package/dist/ui/assets/{pieDiagram-4H26LBE5-BiOhc9GR.js → pieDiagram-4H26LBE5-B55ypWtu.js} +1 -1
- package/dist/ui/assets/{plan-view-CH6NzUDb.js → plan-view-CMoo3_gE.js} +3 -3
- package/dist/ui/assets/{quadrantDiagram-W4KKPZXB-CVyHbWgo.js → quadrantDiagram-W4KKPZXB-9WcKQV0a.js} +1 -1
- package/dist/ui/assets/{radar-GUYGQ44K-D9ohbnbV.js → radar-GUYGQ44K-w5pk53Vr.js} +1 -1
- package/dist/ui/assets/{requirementDiagram-4Y6WPE33-Ba24_hqc.js → requirementDiagram-4Y6WPE33-CzE82fXz.js} +1 -1
- package/dist/ui/assets/{sankeyDiagram-5OEKKPKP-CxD4wiPL.js → sankeyDiagram-5OEKKPKP-DSGO39je.js} +1 -1
- package/dist/ui/assets/{sequenceDiagram-3UESZ5HK-7qA7lD61.js → sequenceDiagram-3UESZ5HK-BKSDDr0S.js} +1 -1
- package/dist/ui/assets/{src-IM8AE8MK.js → src-JXBGgRt-.js} +1 -1
- package/dist/ui/assets/{stateDiagram-AJRCARHV-DNElRCuH.js → stateDiagram-AJRCARHV-DZHYA9aj.js} +1 -1
- package/dist/ui/assets/stateDiagram-v2-BHNVJYJU-DnAfDlvZ.js +1 -0
- package/dist/ui/assets/{timeline-definition-PNZ67QCA-ChYC4Grd.js → timeline-definition-PNZ67QCA-WqJFw7aE.js} +1 -1
- package/dist/ui/assets/{treeView-BLDUP644-Il0KnMi_.js → treeView-BLDUP644-DoIQYMiz.js} +1 -1
- package/dist/ui/assets/{treemap-LRROVOQU-CIiKcdRo.js → treemap-LRROVOQU-BA9si_Mo.js} +1 -1
- package/dist/ui/assets/{vennDiagram-CIIHVFJN-Ulhkum9i.js → vennDiagram-CIIHVFJN-BvWRUfFr.js} +1 -1
- package/dist/ui/assets/{wardley-L42UT6IY-BNd4ljz7.js → wardley-L42UT6IY-Cf9PU44t.js} +1 -1
- package/dist/ui/assets/{wardleyDiagram-YWT4CUSO-BicXxh84.js → wardleyDiagram-YWT4CUSO-CGuxl7AU.js} +1 -1
- package/dist/ui/assets/{xychartDiagram-2RQKCTM6-Duf-m_th.js → xychartDiagram-2RQKCTM6-CNteNXpe.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/architecture-7EHR7CIX-BPLblcyi.js +0 -1
- package/dist/ui/assets/channel-ipcU8ZNI.js +0 -1
- package/dist/ui/assets/chunk-QZHKN3VN-DzGPH44B.js +0 -1
- package/dist/ui/assets/chunk-WU5MYG2G-DyEIVjoo.js +0 -1
- package/dist/ui/assets/classDiagram-4FO5ZUOK-Byg2Hl9D.js +0 -1
- package/dist/ui/assets/classDiagram-v2-Q7XG4LA2-Byg2Hl9D.js +0 -1
- package/dist/ui/assets/eventmodeling-FCH6USID-CZR4eNG-.js +0 -1
- package/dist/ui/assets/index-BFQVRcSI.js +0 -11
- package/dist/ui/assets/index-Bj_kTrwP.css +0 -1
- 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":"AAAA,uEAAuE;AACvE,yEAAyE;AACzE,4EAA4E;AAC5E,0CAA0C;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
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
|
}
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,+EAA+E;AAC/E,0EAA0E;AAC1E,iDAAiD;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,KAAK,GACT,
|
|
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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"}
|