@quickchatai/quickreview 1.2.0 → 1.3.2
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 +116 -53
- package/bin/qcr.js +1 -1
- package/config.example.toml +25 -7
- package/deploy/ansible/README.md +20 -12
- package/deploy/ansible/inventory.example.ini +1 -1
- package/deploy/collect-secrets.sh +1 -1
- package/deploy/qcr-update.sh +1 -1
- package/dist/extensions/cli/home.js +14 -0
- package/dist/extensions/cli/home.js.map +1 -0
- package/dist/extensions/cli/selfimprove.js +18 -0
- package/dist/extensions/cli/selfimprove.js.map +1 -0
- package/dist/extensions/home.js +350 -0
- package/dist/extensions/home.js.map +1 -0
- package/dist/extensions/login-route.js +1 -1
- package/dist/extensions/login-route.js.map +1 -1
- package/dist/extensions/onboarding.js +8 -7
- package/dist/extensions/onboarding.js.map +1 -1
- package/dist/extensions/selfimprove.js +49 -0
- package/dist/extensions/selfimprove.js.map +1 -0
- package/dist/extensions/setup-scan.js +23 -592
- package/dist/extensions/setup-scan.js.map +1 -1
- package/dist/extensions/setup.js +2 -47
- package/dist/extensions/setup.js.map +1 -1
- package/dist/extensions/vendor/openviking-pi/index.js +4 -0
- package/dist/extensions/vendor/openviking-pi/index.js.map +1 -1
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +3 -1
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -1
- package/dist/extensions/vendor/openviking-pi/sync.js +81 -0
- package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -1
- package/dist/src/archive/restore.js +18 -15
- package/dist/src/archive/restore.js.map +1 -1
- package/dist/src/botworker.js +13 -2
- package/dist/src/botworker.js.map +1 -1
- package/dist/src/channelfs.js +3 -26
- package/dist/src/channelfs.js.map +1 -1
- package/dist/src/cli.js +14 -50
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.js +16 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/daemon.js +33 -4
- package/dist/src/daemon.js.map +1 -1
- package/dist/src/debuground.js +1 -0
- package/dist/src/debuground.js.map +1 -1
- package/dist/src/debugroundpi.js +1 -0
- package/dist/src/debugroundpi.js.map +1 -1
- package/dist/src/engine/caserunner-sdk.js +15 -251
- package/dist/src/engine/caserunner-sdk.js.map +1 -1
- package/dist/src/home/adapters.js +349 -0
- package/dist/src/home/adapters.js.map +1 -0
- package/dist/src/home/advanced.js +318 -0
- package/dist/src/home/advanced.js.map +1 -0
- package/dist/src/home/advancedtools.js +57 -0
- package/dist/src/home/advancedtools.js.map +1 -0
- package/dist/src/home/autoreview.js +325 -0
- package/dist/src/home/autoreview.js.map +1 -0
- package/dist/src/home/daemonstatus.js +32 -0
- package/dist/src/home/daemonstatus.js.map +1 -0
- package/dist/src/home/devicelogin.js +61 -0
- package/dist/src/home/devicelogin.js.map +1 -0
- package/dist/src/home/launch.js +202 -0
- package/dist/src/home/launch.js.map +1 -0
- package/dist/src/home/loginowner.js +205 -0
- package/dist/src/home/loginowner.js.map +1 -0
- package/dist/src/home/memory.js +122 -0
- package/dist/src/home/memory.js.map +1 -0
- package/dist/src/home/model.js +811 -0
- package/dist/src/home/model.js.map +1 -0
- package/dist/src/home/panel.js +520 -0
- package/dist/src/home/panel.js.map +1 -0
- package/dist/src/home/ports.js +19 -0
- package/dist/src/home/ports.js.map +1 -0
- package/dist/src/home/review.js +163 -0
- package/dist/src/home/review.js.map +1 -0
- package/dist/src/home/reviews.js +478 -0
- package/dist/src/home/reviews.js.map +1 -0
- package/dist/src/home/setup.js +507 -0
- package/dist/src/home/setup.js.map +1 -0
- package/dist/src/home/setupadapters.js +214 -0
- package/dist/src/home/setupadapters.js.map +1 -0
- package/dist/src/home/setupcard.js +199 -0
- package/dist/src/home/setupcard.js.map +1 -0
- package/dist/src/home/setuptools.js +45 -0
- package/dist/src/home/setuptools.js.map +1 -0
- package/dist/src/home/spend.js +160 -0
- package/dist/src/home/spend.js.map +1 -0
- package/dist/src/home/switches.js +209 -0
- package/dist/src/home/switches.js.map +1 -0
- package/dist/src/home/switchon.js +439 -0
- package/dist/src/home/switchon.js.map +1 -0
- package/dist/src/home/toolnames.js +41 -0
- package/dist/src/home/toolnames.js.map +1 -0
- package/dist/src/home/tune.js +341 -0
- package/dist/src/home/tune.js.map +1 -0
- package/dist/src/home/words.js +7 -0
- package/dist/src/home/words.js.map +1 -0
- package/dist/src/homes.js +14 -0
- package/dist/src/homes.js.map +1 -1
- package/dist/src/install.js +1 -1
- package/dist/src/install.js.map +1 -1
- package/dist/src/ipc/workerspec.js +8 -0
- package/dist/src/ipc/workerspec.js.map +1 -1
- package/dist/src/ledgercheck.js +39 -10
- package/dist/src/ledgercheck.js.map +1 -1
- package/dist/src/live/publish.js +1 -1
- package/dist/src/live/publish.js.map +1 -1
- package/dist/src/livecli.js +1 -1
- package/dist/src/livecli.js.map +1 -1
- package/dist/src/loginrefresh/handover.js +121 -0
- package/dist/src/loginrefresh/handover.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +54 -3
- package/dist/src/loginrefresh/lock.js.map +1 -1
- package/dist/src/loginrefresh/refresher.js +33 -5
- package/dist/src/loginrefresh/refresher.js.map +1 -1
- package/dist/src/loginrefresh/supervisor.js +18 -1
- package/dist/src/loginrefresh/supervisor.js.map +1 -1
- package/dist/src/npmverbs.js +42 -12
- package/dist/src/npmverbs.js.map +1 -1
- package/dist/src/onboard/choices.js +6 -3
- package/dist/src/onboard/choices.js.map +1 -1
- package/dist/src/onboard/engine.js +33 -292
- package/dist/src/onboard/engine.js.map +1 -1
- package/dist/src/onboard/steps/bringup.js +3 -2
- package/dist/src/onboard/steps/bringup.js.map +1 -1
- package/dist/src/onboard/steps/configfill.js +18 -7
- package/dist/src/onboard/steps/configfill.js.map +1 -1
- package/dist/src/onboard/steps/loginshare.js +213 -0
- package/dist/src/onboard/steps/loginshare.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +14 -2
- package/dist/src/onboard/steps/memory.js.map +1 -1
- package/dist/src/onboard/steps/repoconfig.js +72 -0
- package/dist/src/onboard/steps/repoconfig.js.map +1 -0
- package/dist/src/onboard/toolnames.js +2 -2
- package/dist/src/onboard/toolnames.js.map +1 -1
- package/dist/src/piagentdir.js +13 -0
- package/dist/src/piagentdir.js.map +1 -0
- package/dist/src/pilogin.js +31 -16
- package/dist/src/pilogin.js.map +1 -1
- package/dist/src/qcrbin.js +16 -11
- package/dist/src/qcrbin.js.map +1 -1
- package/dist/src/reviewargs.js +122 -0
- package/dist/src/reviewargs.js.map +1 -0
- package/dist/src/reviewcli.js +7 -161
- package/dist/src/reviewcli.js.map +1 -1
- package/dist/src/reviewdetach.js +76 -11
- package/dist/src/reviewdetach.js.map +1 -1
- package/dist/src/scancli.js +39 -691
- package/dist/src/scancli.js.map +1 -1
- package/dist/src/selfimprove.js +66 -0
- package/dist/src/selfimprove.js.map +1 -0
- package/dist/src/session-command-supervisor.js +38 -9
- package/dist/src/session-command-supervisor.js.map +1 -1
- package/dist/src/setup/adapters.js +5 -223
- package/dist/src/setup/adapters.js.map +1 -1
- package/dist/src/setup/caserunner.js +15 -249
- package/dist/src/setup/caserunner.js.map +1 -1
- package/dist/src/setup/engine.js +32 -341
- package/dist/src/setup/engine.js.map +1 -1
- package/dist/src/setup/facts.js +3 -592
- package/dist/src/setup/facts.js.map +1 -1
- package/dist/src/setup/findings.js +3 -947
- package/dist/src/setup/findings.js.map +1 -1
- package/dist/src/setup/presentation.js +3 -8
- package/dist/src/setup/presentation.js.map +1 -1
- package/dist/src/setup/scan.js +3 -724
- package/dist/src/setup/scan.js.map +1 -1
- package/dist/src/setup/scanbuild.js +9 -92
- package/dist/src/setup/scanbuild.js.map +1 -1
- package/dist/src/setup/scanlease.js +3 -250
- package/dist/src/setup/scanlease.js.map +1 -1
- package/dist/src/setup/scanreport.js +3 -288
- package/dist/src/setup/scanreport.js.map +1 -1
- package/dist/src/setup/scanrun.js +3 -1732
- package/dist/src/setup/scanrun.js.map +1 -1
- package/dist/src/setup/scantree.js +3 -256
- package/dist/src/setup/scantree.js.map +1 -1
- package/dist/src/setup/stage2request.js +3 -258
- package/dist/src/setup/stage2request.js.map +1 -1
- package/dist/src/setup/unitcut.js +3 -436
- package/dist/src/setup/unitcut.js.map +1 -1
- package/dist/src/state.js +75 -9
- package/dist/src/state.js.map +1 -1
- package/dist/src/takeover.js +1 -0
- package/dist/src/takeover.js.map +1 -1
- package/dist/src/takeoverpi.js +2 -1
- package/dist/src/takeoverpi.js.map +1 -1
- package/dist/src/tui/alerts.js +4 -1
- package/dist/src/tui/alerts.js.map +1 -1
- package/dist/src/tui/board.js +2 -2
- package/dist/src/tui/board.js.map +1 -1
- package/dist/src/tui/companion.js +2 -1
- package/dist/src/tui/companion.js.map +1 -1
- package/dist/src/tui/deploytab.js +2 -2
- package/dist/src/tui/deploytab.js.map +1 -1
- package/dist/src/tui/index.js +9 -6
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/memory.js +3 -16
- package/dist/src/tui/memory.js.map +1 -1
- package/dist/src/tui/memoryurl.js +22 -0
- package/dist/src/tui/memoryurl.js.map +1 -0
- package/dist/src/tui/remote.js +1 -1
- package/dist/src/tui/remote.js.map +1 -1
- package/dist/src/tui/route.js +2 -2
- package/dist/src/tui/route.js.map +1 -1
- package/dist/src/tui/setupstate.js +8 -5
- package/dist/src/tui/setupstate.js.map +1 -1
- package/dist/src/tui/sshtriage.js +1 -1
- package/dist/src/tui/sshtriage.js.map +1 -1
- package/dist/src/verdicts.js +12 -0
- package/dist/src/verdicts.js.map +1 -1
- package/dist/src/wire.js +9 -4
- package/dist/src/wire.js.map +1 -1
- package/dist/src/workerbreaker.js +32 -5
- package/dist/src/workerbreaker.js.map +1 -1
- package/dist/src/workerworld.js +4 -0
- package/dist/src/workerworld.js.map +1 -1
- package/docker/README.md +1 -1
- package/docker/entrypoint.sh +40 -6
- package/docker-compose.yml +16 -1
- package/extensions/cli/home.ts +14 -0
- package/extensions/cli/selfimprove.ts +18 -0
- package/extensions/home.ts +484 -0
- package/extensions/login-route.ts +1 -1
- package/extensions/onboarding.ts +8 -7
- package/extensions/selfimprove.ts +65 -0
- package/extensions/setup-scan.ts +79 -766
- package/extensions/setup.ts +14 -70
- package/extensions/vendor/openviking-pi/NOTICE +5 -0
- package/extensions/vendor/openviking-pi/README.md +39 -5
- package/extensions/vendor/openviking-pi/index.ts +4 -0
- package/extensions/vendor/openviking-pi/patches/0014-one-turn-sync-in-flight.patch +239 -0
- package/extensions/vendor/openviking-pi/qcr-hooks.ts +3 -1
- package/extensions/vendor/openviking-pi/sync.ts +80 -0
- package/extensions/vendor/openviking-pi/upstream.json +2 -1
- package/package.json +6 -4
- package/prompts/onboarding.md +8 -7
- package/schemas/review-result.v1.json +60 -0
- package/scripts/deploy.sh +8 -6
- package/scripts/qcr-host.sh +28 -5
- package/scripts/vm-ghcr-login.sh +7 -4
- package/src/archive/restore.ts +18 -21
- package/src/botworker.ts +13 -2
- package/src/channelfs.ts +3 -26
- package/src/cli.ts +13 -54
- package/src/config.ts +38 -0
- package/src/daemon.ts +34 -4
- package/src/debuground.ts +3 -0
- package/src/debugroundpi.ts +1 -0
- package/src/engine/caserunner-sdk.ts +29 -314
- package/src/home/adapters.ts +418 -0
- package/src/home/advanced.ts +421 -0
- package/src/home/advancedtools.ts +96 -0
- package/src/home/autoreview.ts +385 -0
- package/src/home/daemonstatus.ts +55 -0
- package/src/home/devicelogin.ts +107 -0
- package/src/home/launch.ts +257 -0
- package/src/home/loginowner.ts +248 -0
- package/src/home/memory.ts +176 -0
- package/src/home/model.ts +965 -0
- package/src/home/panel.ts +666 -0
- package/src/home/ports.ts +338 -0
- package/src/home/review.ts +206 -0
- package/src/home/reviews.ts +565 -0
- package/src/home/setup.ts +689 -0
- package/src/home/setupadapters.ts +217 -0
- package/src/home/setupcard.ts +288 -0
- package/src/home/setuptools.ts +57 -0
- package/src/home/spend.ts +194 -0
- package/src/home/switches.ts +293 -0
- package/src/home/switchon.ts +554 -0
- package/src/home/toolnames.ts +46 -0
- package/src/home/tune.ts +405 -0
- package/src/home/words.ts +8 -0
- package/src/homes.ts +17 -0
- package/src/install.ts +1 -1
- package/src/ipc/workerspec.ts +15 -0
- package/src/ledgercheck.ts +45 -9
- package/src/live/publish.ts +4 -1
- package/src/livecli.ts +6 -1
- package/src/loginrefresh/handover.ts +138 -0
- package/src/loginrefresh/lock.ts +72 -3
- package/src/loginrefresh/refresher.ts +34 -5
- package/src/loginrefresh/supervisor.ts +25 -2
- package/src/npmverbs.ts +51 -11
- package/src/onboard/choices.ts +6 -3
- package/src/onboard/engine.ts +64 -434
- package/src/onboard/steps/bringup.ts +3 -2
- package/src/onboard/steps/configfill.ts +23 -7
- package/src/onboard/steps/loginshare.ts +258 -0
- package/src/onboard/steps/memory.ts +18 -2
- package/src/onboard/steps/repoconfig.ts +85 -0
- package/src/onboard/toolnames.ts +2 -2
- package/src/piagentdir.ts +12 -0
- package/src/pilogin.ts +32 -16
- package/src/qcrbin.ts +16 -11
- package/src/reviewargs.ts +119 -0
- package/src/reviewcli.ts +6 -167
- package/src/reviewdetach.ts +107 -13
- package/src/scancli.ts +75 -826
- package/src/selfimprove.ts +90 -0
- package/src/session-command-supervisor.ts +41 -8
- package/src/setup/adapters.ts +13 -221
- package/src/setup/caserunner.ts +34 -273
- package/src/setup/engine.ts +62 -496
- package/src/setup/facts.ts +3 -627
- package/src/setup/findings.ts +3 -1264
- package/src/setup/presentation.ts +3 -18
- package/src/setup/scan.ts +3 -1033
- package/src/setup/scanbuild.ts +20 -114
- package/src/setup/scanlease.ts +3 -297
- package/src/setup/scanreport.ts +3 -373
- package/src/setup/scanrun.ts +3 -2268
- package/src/setup/scantree.ts +3 -259
- package/src/setup/stage2request.ts +3 -347
- package/src/setup/unitcut.ts +3 -523
- package/src/state.ts +126 -11
- package/src/takeover.ts +5 -0
- package/src/takeoverpi.ts +3 -2
- package/src/tui/alerts.ts +9 -2
- package/src/tui/board.ts +2 -2
- package/src/tui/companion.ts +2 -1
- package/src/tui/deploytab.ts +2 -2
- package/src/tui/index.ts +9 -6
- package/src/tui/memory.ts +3 -15
- package/src/tui/memoryurl.ts +22 -0
- package/src/tui/remote.ts +1 -1
- package/src/tui/route.ts +2 -2
- package/src/tui/setupstate.ts +20 -16
- package/src/tui/sshtriage.ts +1 -1
- package/src/verdicts.ts +13 -0
- package/src/wire.ts +9 -4
- package/src/workerbreaker.ts +41 -5
- package/src/workerworld.ts +9 -1
- package/dist/src/live/projection.js +0 -450
- package/dist/src/live/projection.js.map +0 -1
- package/dist/src/live/read.js +0 -60
- package/dist/src/live/read.js.map +0 -1
- package/dist/src/onboard/launch.js +0 -75
- package/dist/src/onboard/launch.js.map +0 -1
- package/dist/src/setup/ledger.js +0 -207
- package/dist/src/setup/ledger.js.map +0 -1
- package/dist/src/setup/stage2.js +0 -617
- package/dist/src/setup/stage2.js.map +0 -1
- package/dist/src/setup/textsniff.js +0 -89
- package/dist/src/setup/textsniff.js.map +0 -1
- package/src/live/projection.ts +0 -491
- package/src/live/read.ts +0 -86
- package/src/onboard/launch.ts +0 -103
- package/src/setup/ledger.ts +0 -324
- package/src/setup/stage2.ts +0 -926
- package/src/setup/textsniff.ts +0 -95
package/dist/src/npmverbs.js
CHANGED
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
// qcr login [provider] pi's own /login, in the pinned pi (src/picli.ts),
|
|
6
6
|
// into the user's pi agent dir. pi's UI is the flow:
|
|
7
7
|
// qcr types /login for the person and steps aside.
|
|
8
|
+
// When auto-review's refresher holds that login, it
|
|
9
|
+
// is paused first and released after, as the home's
|
|
10
|
+
// re-login does (src/loginrefresh/handover.ts).
|
|
8
11
|
// qcr pi [args] the pinned pi with the qcr plugin preloaded
|
|
9
|
-
// (`-e <the plugin package's dir>`)
|
|
12
|
+
// (`-e <the plugin package's dir>`) and the app's
|
|
13
|
+
// own /selfimprove beside it (`-e` its shim,
|
|
14
|
+
// `APP_PI_EXTENSIONS`), args passed on.
|
|
10
15
|
// qcr update the package manager that installed qcr (npm, pnpm or
|
|
11
16
|
// bun) updates it globally. The release image keeps its
|
|
12
17
|
// own route (a release), and a checkout its git.
|
|
@@ -15,11 +20,11 @@
|
|
|
15
20
|
// `npmVerbDeps()` is the real assembly.
|
|
16
21
|
import { spawnSync } from "node:child_process";
|
|
17
22
|
import { existsSync, realpathSync } from "node:fs";
|
|
18
|
-
import { homedir } from "node:os";
|
|
19
23
|
import { delimiter, join } from "node:path";
|
|
20
24
|
import { pluginPackageDir } from "./coreext.js";
|
|
21
25
|
import { detectInstall } from "./installkind.js";
|
|
22
26
|
import { readLogins } from "./loginhint.js";
|
|
27
|
+
import { piAgentDir } from "./piagentdir.js";
|
|
23
28
|
import { piCliPath } from "./picli.js";
|
|
24
29
|
/** The npm package this CLI is published as. */
|
|
25
30
|
export const CLI_PACKAGE = "@quickchatai/quickreview";
|
|
@@ -42,13 +47,9 @@ export function updateCommand(installer, pkg = CLI_PACKAGE) {
|
|
|
42
47
|
return ["bun", "add", "-g", spec];
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (set !== "")
|
|
49
|
-
return set;
|
|
50
|
-
return join((env["HOME"] ?? "").trim() || homedir(), ".pi", "agent");
|
|
51
|
-
}
|
|
50
|
+
// pi's agent dir lives in a leaf of its own, so the home reads the same rule
|
|
51
|
+
// without these verbs.
|
|
52
|
+
export { piAgentDir };
|
|
52
53
|
/** The providers pi holds a credential for in `agentDir`, from its auth.json;
|
|
53
54
|
* empty when there is none or it cannot be read. Never a token. */
|
|
54
55
|
export function loggedInProviders(agentDir) {
|
|
@@ -79,9 +80,18 @@ export function npmVerbDeps(pkgRoot) {
|
|
|
79
80
|
out: (l) => console.log(l),
|
|
80
81
|
err: (l) => console.error(l),
|
|
81
82
|
execPath: process.execPath,
|
|
83
|
+
holdLogin: async (agentDir) => {
|
|
84
|
+
const { holdRefresher } = await import("./loginrefresh/handover.js");
|
|
85
|
+
return holdRefresher(agentDir);
|
|
86
|
+
},
|
|
82
87
|
};
|
|
83
88
|
}
|
|
84
|
-
/**
|
|
89
|
+
/** The app's own extensions `qcr pi` loads beside the plugin, as paths under
|
|
90
|
+
* the CLI package's root: the commands that are the app's, not the plugin's
|
|
91
|
+
* (ADR 0001). */
|
|
92
|
+
export const APP_PI_EXTENSIONS = ["extensions/cli/selfimprove.ts"];
|
|
93
|
+
/** `qcr pi [args]`: the pinned pi with the plugin and the app's own
|
|
94
|
+
* extensions preloaded; pi's exit code. */
|
|
85
95
|
export function cmdPi(args, deps) {
|
|
86
96
|
let pi;
|
|
87
97
|
let plugin;
|
|
@@ -93,7 +103,8 @@ export function cmdPi(args, deps) {
|
|
|
93
103
|
deps.err(`qcr pi: ${err instanceof Error ? err.message : String(err)}`);
|
|
94
104
|
return 1;
|
|
95
105
|
}
|
|
96
|
-
const
|
|
106
|
+
const app = APP_PI_EXTENSIONS.flatMap((e) => ["-e", join(deps.pkgRoot, e)]);
|
|
107
|
+
const r = deps.run(deps.execPath, [pi, "-e", plugin, ...app, ...args], {});
|
|
97
108
|
if (r.error) {
|
|
98
109
|
deps.err(`qcr pi: pi could not start: ${r.error.message}`);
|
|
99
110
|
return 1;
|
|
@@ -142,6 +153,23 @@ export async function cmdLogin(args, deps) {
|
|
|
142
153
|
return 1;
|
|
143
154
|
}
|
|
144
155
|
const agentDir = piAgentDir(deps.env);
|
|
156
|
+
// The refresher first, when one runs: a refresh that read the old grant and
|
|
157
|
+
// lands after the login would write it back over the new one.
|
|
158
|
+
const hold = await deps.holdLogin(agentDir);
|
|
159
|
+
if (!hold.ok) {
|
|
160
|
+
deps.err(`qcr login: ${hold.why}; nothing was changed.`);
|
|
161
|
+
return 1;
|
|
162
|
+
}
|
|
163
|
+
if (hold.held)
|
|
164
|
+
deps.out("qcr login: auto-review's login refresher is paused while you log in.");
|
|
165
|
+
try {
|
|
166
|
+
return await runLogin(provider, pi, agentDir, deps);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
hold.release();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async function runLogin(provider, pi, agentDir, deps) {
|
|
145
173
|
const before = loggedInProviders(agentDir);
|
|
146
174
|
let status;
|
|
147
175
|
if (onPath("tmux", deps.env["PATH"])) {
|
|
@@ -167,7 +195,9 @@ export async function cmdLogin(args, deps) {
|
|
|
167
195
|
}
|
|
168
196
|
else {
|
|
169
197
|
deps.out(`qcr login: opening pi — type /login${provider ? ` ${provider}` : ""} and pick your provider, then quit pi (the login lands in ${agentDir}).`);
|
|
170
|
-
|
|
198
|
+
// --no-approve as on the tmux route (src/pilogin.ts): a login needs
|
|
199
|
+
// nothing from this folder, so pi neither asks to trust it nor trusts it.
|
|
200
|
+
const r = deps.run(deps.execPath, [pi, "--no-approve"], {});
|
|
171
201
|
if (r.error) {
|
|
172
202
|
deps.err(`qcr login: pi could not start: ${r.error.message}`);
|
|
173
203
|
return 1;
|
package/dist/src/npmverbs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npmverbs.js","sourceRoot":"","sources":["../../src/npmverbs.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,8EAA8E;AAC9E,iEAAiE;AACjE,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"npmverbs.js","sourceRoot":"","sources":["../../src/npmverbs.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
// record each key, and the test proves each named step really does — so a
|
|
17
17
|
// key that only ever gets read cannot survive review.
|
|
18
18
|
//
|
|
19
|
-
// A key private to one step — the go-live decision, the
|
|
20
|
-
// vm-deploy record, the model prefix, the memory key-file path — stays a local
|
|
19
|
+
// A key private to one step — the go-live decision, the vm-deploy record, the model prefix, the memory key-file path — stays a local
|
|
21
20
|
// constant in that step. This file is about the handoffs.
|
|
22
21
|
//
|
|
23
22
|
// Nothing here imports a step (the steps import this), so there is no cycle and
|
|
@@ -51,6 +50,10 @@ export const MEMORY_CHOICE_IDS = ["configure", "declined"];
|
|
|
51
50
|
export const CHOICE_KEYS = {
|
|
52
51
|
/** The operator's uid, captured by preflight: the containers run as it. */
|
|
53
52
|
uid: "qcr_uid",
|
|
53
|
+
/** When the bring-up step last brought the stack up (an ISO timestamp).
|
|
54
|
+
* Written by bringup; read by the login-share step, which recreates a
|
|
55
|
+
* stack brought up before so the daemon gets its login mount. */
|
|
56
|
+
broughtUpAt: "stack_brought_up_at",
|
|
54
57
|
/** `Topology`. Written by the topology step; read by everything that has to
|
|
55
58
|
* know where the stack runs (transport selection, the VM-only steps). */
|
|
56
59
|
topology: "topology",
|
|
@@ -136,6 +139,7 @@ export const CHOICE_KEYS = {
|
|
|
136
139
|
*/
|
|
137
140
|
export const CHOICE_WRITERS = {
|
|
138
141
|
uid: ["preflight"],
|
|
142
|
+
broughtUpAt: ["bringup"],
|
|
139
143
|
githubAuth: ["github_account"],
|
|
140
144
|
accountLogin: ["github_account"],
|
|
141
145
|
accountRepo: ["github_account"],
|
|
@@ -181,7 +185,6 @@ export const CHOICE_WRITERS = {
|
|
|
181
185
|
export const PRIVATE_CHOICE_KEYS = {
|
|
182
186
|
llm_model_prefix: "llm_auth",
|
|
183
187
|
openviking_keys_file: "memory",
|
|
184
|
-
stack_brought_up_at: "bringup",
|
|
185
188
|
go_live_decision: "go_live",
|
|
186
189
|
};
|
|
187
190
|
/** The bot login GitHub gives an App with this slug. One rule, one place —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../../src/onboard/choices.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,YAAY;AACZ,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,iBAAiB;AACjB,EAAE;AACF,+EAA+E;AAC/E,2EAA2E;AAC3E,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,2DAA2D;AAC3D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../../src/onboard/choices.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
// OnboardingEngine: the onboarding wizard's checklist, the plugin's setup
|
|
2
|
+
// checklist (@quickchatai/pi-quickreview/src/setupchecklist.ts, the step registry
|
|
3
|
+
// and its engine) bound to this app's adapters and state. pi is a thin
|
|
4
|
+
// driver over it (extensions/onboarding.ts registers one tool per step); the
|
|
5
|
+
// engine itself is fully drivable from tests and from a non-LLM fallback
|
|
6
|
+
// entry, and nothing in here touches the network, Docker, or a real pi except
|
|
7
|
+
// through the adapters.
|
|
8
|
+
//
|
|
9
|
+
// What this module adds to the core's checklist:
|
|
10
|
+
// - the wizard's adapter set (OnboardAdapters) and its step type;
|
|
11
|
+
// - where the checklist lives: state/onboarding/checklist.json, tmp+rename
|
|
12
|
+
// atomic, re-verified on resume (the core's resumability contract);
|
|
13
|
+
// - the finish path's first-run marker, state/companion/first-run.json
|
|
14
|
+
// ({"completed_at": "<iso>"}), written exactly once: the contract the
|
|
15
|
+
// companion's first-run greeting consumes. Keep the path and shape
|
|
16
|
+
// stable.
|
|
17
|
+
import { SetupChecklist, checklistCompleteNow, readChecklistFile, writeAtomic, } from "@quickchatai/pi-quickreview/src/setupchecklist.js";
|
|
18
|
+
import { existsSync } from "node:fs";
|
|
19
|
+
import { join, resolve } from "node:path";
|
|
20
|
+
export { CHECKLIST_VERSION, failures, readTextOrNull, writeAtomic, } from "@quickchatai/pi-quickreview/src/setupchecklist.js";
|
|
6
21
|
// ---- checklist file ---------------------------------------------------------
|
|
7
|
-
export const CHECKLIST_VERSION = 1;
|
|
8
22
|
export function checklistPath(stateDir) {
|
|
9
23
|
return join(stateDir, "onboarding", "checklist.json");
|
|
10
24
|
}
|
|
@@ -13,317 +27,44 @@ export function checklistPath(stateDir) {
|
|
|
13
27
|
export function firstRunMarkerPath(stateDir) {
|
|
14
28
|
return join(stateDir, "companion", "first-run.json");
|
|
15
29
|
}
|
|
16
|
-
function isPlainObject(v) {
|
|
17
|
-
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
18
|
-
}
|
|
19
30
|
/** Read the checklist; null when absent or unreadable (both mean "fresh"). */
|
|
20
31
|
export function readChecklist(stateDir) {
|
|
21
|
-
|
|
22
|
-
if (!existsSync(path))
|
|
23
|
-
return null;
|
|
24
|
-
try {
|
|
25
|
-
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
26
|
-
if (typeof raw !== "object" || raw === null)
|
|
27
|
-
return null;
|
|
28
|
-
const file = raw;
|
|
29
|
-
// Every field the engine dereferences is checked here: a file that parses
|
|
30
|
-
// but lacks one (hand-edited, foreign) would otherwise throw out of a
|
|
31
|
-
// step predicate or record() on every call — a wedge, not a fresh start.
|
|
32
|
-
if (typeof file.version !== "number")
|
|
33
|
-
return null;
|
|
34
|
-
if (!isPlainObject(file.choices))
|
|
35
|
-
return null;
|
|
36
|
-
if (file.completed_at !== null && typeof file.completed_at !== "string")
|
|
37
|
-
return null;
|
|
38
|
-
if (!isPlainObject(file.steps))
|
|
39
|
-
return null;
|
|
40
|
-
for (const rec of Object.values(file.steps)) {
|
|
41
|
-
if (!isPlainObject(rec) || !isPlainObject(rec.data))
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
return file;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
32
|
+
return readChecklistFile(checklistPath(stateDir));
|
|
49
33
|
}
|
|
50
34
|
/** Does the checklist file say onboarding finished? The CLI's post-exit
|
|
51
35
|
* handoff reads exactly this (the finish tool only sets it after a full green
|
|
52
36
|
* re-verification, so "the file says so" is a verified claim). */
|
|
53
37
|
export function checklistComplete(stateDir) {
|
|
54
38
|
const file = readChecklist(stateDir);
|
|
55
|
-
return file !== null &&
|
|
56
|
-
}
|
|
57
|
-
/** Is onboarding complete NOW: finished once, and not reopened since. The one
|
|
58
|
-
* reading of the two fields, for the file on disk and the engine's copy. */
|
|
59
|
-
function completeNow(file) {
|
|
60
|
-
return typeof file.completed_at === "string" && !file.reopened_at;
|
|
39
|
+
return file !== null && checklistCompleteNow(file);
|
|
61
40
|
}
|
|
62
41
|
/** `<sandbox root>` — the parent of `paths.stateDir`, by the adapters'
|
|
63
42
|
* contract (stateDir = `<sandbox root>/state`). The one place that says so. */
|
|
64
43
|
export function sandboxRoot(paths) {
|
|
65
44
|
return resolve(paths.stateDir, "..");
|
|
66
45
|
}
|
|
67
|
-
|
|
68
|
-
* through (the checklist, config.toml, .env, the inventory): a reader, the
|
|
69
|
-
* daemon's own loader one bind mount away included, never sees a half-written
|
|
70
|
-
* file, and an interrupted write leaves the previous file whole. */
|
|
71
|
-
export function writeAtomic(path, content) {
|
|
72
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
73
|
-
const tmp = join(dirname(path), `.${basename(path)}.onboard.tmp`);
|
|
74
|
-
writeFileSync(tmp, content);
|
|
75
|
-
renameSync(tmp, path);
|
|
76
|
-
}
|
|
77
|
-
/** A file's text, or null when it cannot be read for any reason. For a read
|
|
78
|
-
* where only ABSENCE may be null, read it yourself. */
|
|
79
|
-
export function readTextOrNull(path) {
|
|
80
|
-
try {
|
|
81
|
-
return readFileSync(path, "utf8");
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
export class OnboardingEngine {
|
|
88
|
-
adapters;
|
|
89
|
-
registry;
|
|
90
|
-
checklist;
|
|
46
|
+
export class OnboardingEngine extends SetupChecklist {
|
|
91
47
|
constructor(steps, adapters) {
|
|
92
|
-
|
|
93
|
-
this.registry = [...steps].sort((a, b) => a.order - b.order);
|
|
94
|
-
const loaded = readChecklist(adapters.paths.stateDir);
|
|
95
|
-
if (loaded === null && existsSync(checklistPath(adapters.paths.stateDir))) {
|
|
96
|
-
adapters.log?.("onboarding: checklist file unreadable — starting fresh (recorded choices and step progress were reset)");
|
|
97
|
-
}
|
|
98
|
-
this.checklist = loaded ?? this.fresh();
|
|
99
|
-
}
|
|
100
|
-
fresh() {
|
|
101
|
-
const now = this.adapters.clock().toISOString();
|
|
102
|
-
return {
|
|
103
|
-
version: CHECKLIST_VERSION,
|
|
104
|
-
created_at: now,
|
|
105
|
-
updated_at: now,
|
|
106
|
-
completed_at: null,
|
|
107
|
-
choices: {},
|
|
108
|
-
steps: {},
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
save() {
|
|
112
|
-
this.checklist.updated_at = this.adapters.clock().toISOString();
|
|
113
|
-
writeAtomic(checklistPath(this.adapters.paths.stateDir), `${JSON.stringify(this.checklist, null, 2)}\n`);
|
|
114
|
-
}
|
|
115
|
-
record(id) {
|
|
116
|
-
const existing = this.checklist.steps[id];
|
|
117
|
-
if (existing)
|
|
118
|
-
return existing;
|
|
119
|
-
const created = {
|
|
120
|
-
status: "pending",
|
|
121
|
-
completed_at: null,
|
|
122
|
-
verified_at: null,
|
|
123
|
-
note: null,
|
|
124
|
-
data: {},
|
|
125
|
-
};
|
|
126
|
-
this.checklist.steps[id] = created;
|
|
127
|
-
return created;
|
|
128
|
-
}
|
|
129
|
-
ctxFor(id, input = {}) {
|
|
130
|
-
return {
|
|
131
|
-
adapters: this.adapters,
|
|
132
|
-
input,
|
|
133
|
-
choices: this.checklist.choices,
|
|
134
|
-
data: this.record(id).data,
|
|
135
|
-
recordChoice: (key, value) => {
|
|
136
|
-
this.checklist.choices[key] = value;
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
/** The registered steps, in order (the pi tools register off this). */
|
|
141
|
-
stepDefs() {
|
|
142
|
-
return this.registry;
|
|
143
|
-
}
|
|
144
|
-
enabled(step) {
|
|
145
|
-
return step.enabled ? step.enabled(this.checklist.choices) : true;
|
|
146
|
-
}
|
|
147
|
-
choices() {
|
|
148
|
-
return this.checklist.choices;
|
|
149
|
-
}
|
|
150
|
-
isComplete() {
|
|
151
|
-
return completeNow(this.checklist);
|
|
152
|
-
}
|
|
153
|
-
/** A completed checklist no longer verifies: withdraw the current-completion
|
|
154
|
-
* claim (the post-exit handoff reads it) without touching the history. */
|
|
155
|
-
reopen() {
|
|
156
|
-
if (this.checklist.completed_at === null || this.checklist.reopened_at)
|
|
157
|
-
return;
|
|
158
|
-
this.checklist.reopened_at = this.adapters.clock().toISOString();
|
|
159
|
-
}
|
|
160
|
-
list() {
|
|
161
|
-
return this.registry.map((step) => {
|
|
162
|
-
const rec = this.checklist.steps[step.id];
|
|
163
|
-
return {
|
|
164
|
-
id: step.id,
|
|
165
|
-
title: step.title,
|
|
166
|
-
explain: step.explain,
|
|
167
|
-
status: this.enabled(step) ? (rec?.status ?? "pending") : "disabled",
|
|
168
|
-
note: rec?.note ?? null,
|
|
169
|
-
...(step.optional ? { optional: true } : {}),
|
|
170
|
-
};
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Resume: re-verify every enabled claimed-done step against reality. A step
|
|
175
|
-
* whose verify() fails is demoted to pending with the failures in its note —
|
|
176
|
-
* the file's claim is never trusted alone. A fully-done checklist therefore
|
|
177
|
-
* re-runs as verify-only. Persists once at the end.
|
|
178
|
-
*/
|
|
179
|
-
async reconcile() {
|
|
180
|
-
const report = { verified: [], demoted: [] };
|
|
181
|
-
for (const step of this.registry) {
|
|
182
|
-
if (!this.enabled(step))
|
|
183
|
-
continue;
|
|
184
|
-
const rec = this.checklist.steps[step.id];
|
|
185
|
-
if (!rec || rec.status !== "done") {
|
|
186
|
-
this.reopen();
|
|
187
|
-
continue;
|
|
188
|
-
}
|
|
189
|
-
const outcome = await this.safeVerify(step);
|
|
190
|
-
if (outcome.ok) {
|
|
191
|
-
rec.verified_at = this.adapters.clock().toISOString();
|
|
192
|
-
report.verified.push(step.id);
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
const fails = failures(outcome.checks);
|
|
196
|
-
rec.status = "pending";
|
|
197
|
-
rec.note = `re-verification failed: ${fails.join("; ") || "unknown"}`;
|
|
198
|
-
this.reopen();
|
|
199
|
-
report.demoted.push({ id: step.id, failures: fails });
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
this.save();
|
|
203
|
-
return report;
|
|
204
|
-
}
|
|
205
|
-
/** Run one step, optionally with the operator's answer (`input`, the pi
|
|
206
|
-
* tool's params). Unknown/disabled ids are refusals-as-answers, never
|
|
207
|
-
* throws (the caller is an LLM tool belt). Persists after the step. */
|
|
208
|
-
async runStep(id, input = {}) {
|
|
209
|
-
const step = this.registry.find((s) => s.id === id);
|
|
210
|
-
if (!step) {
|
|
211
|
-
return {
|
|
212
|
-
id,
|
|
213
|
-
ok: false,
|
|
214
|
-
checks: [],
|
|
215
|
-
failures: [`unknown step "${id}" — known: ${this.registry.map((s) => s.id).join(", ")}`],
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
if (!this.enabled(step)) {
|
|
219
|
-
return {
|
|
220
|
-
id,
|
|
221
|
-
ok: false,
|
|
222
|
-
checks: [],
|
|
223
|
-
failures: [`step "${id}" is disabled by the recorded choices`],
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
const rec = this.record(id);
|
|
227
|
-
rec.status = "pending";
|
|
228
|
-
this.reopen();
|
|
229
|
-
this.save();
|
|
230
|
-
let report;
|
|
231
|
-
try {
|
|
232
|
-
report = await step.run(this.ctxFor(id, input));
|
|
233
|
-
}
|
|
234
|
-
catch (err) {
|
|
235
|
-
report = {
|
|
236
|
-
ok: false,
|
|
237
|
-
checks: [{ name: id, ok: false, detail: `step threw: ${String(err)}` }],
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
if (report.data)
|
|
241
|
-
rec.data = { ...rec.data, ...report.data };
|
|
242
|
-
if (report.ok) {
|
|
243
|
-
rec.status = "done";
|
|
244
|
-
rec.completed_at = this.adapters.clock().toISOString();
|
|
245
|
-
rec.verified_at = null;
|
|
246
|
-
rec.note = null;
|
|
247
|
-
// A run acts on the installation (choices, config, deploys) after the
|
|
248
|
-
// full verification that backed the completion claim: only the next
|
|
249
|
-
// green finish() may make that claim again.
|
|
250
|
-
this.reopen();
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
rec.status = "pending";
|
|
254
|
-
rec.note = `last run failed: ${failures(report.checks).join("; ") || "unknown"}`;
|
|
255
|
-
this.reopen();
|
|
256
|
-
}
|
|
257
|
-
this.save();
|
|
258
|
-
return { id, ok: report.ok, checks: report.checks, failures: failures(report.checks) };
|
|
259
|
-
}
|
|
260
|
-
async safeVerify(step) {
|
|
261
|
-
try {
|
|
262
|
-
return await step.verify(this.ctxFor(step.id));
|
|
263
|
-
}
|
|
264
|
-
catch (err) {
|
|
265
|
-
return {
|
|
266
|
-
ok: false,
|
|
267
|
-
checks: [{ name: step.id, ok: false, detail: `verify threw: ${String(err)}` }],
|
|
268
|
-
};
|
|
269
|
-
}
|
|
48
|
+
super(steps, adapters, { file: checklistPath(adapters.paths.stateDir) });
|
|
270
49
|
}
|
|
271
50
|
/**
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*/
|
|
277
|
-
async verifyAll() {
|
|
278
|
-
const results = [];
|
|
279
|
-
for (const step of this.registry) {
|
|
280
|
-
if (!this.enabled(step))
|
|
281
|
-
continue;
|
|
282
|
-
const outcome = await this.safeVerify(step);
|
|
283
|
-
const rec = this.record(step.id);
|
|
284
|
-
if (outcome.ok) {
|
|
285
|
-
rec.verified_at = this.adapters.clock().toISOString();
|
|
286
|
-
if (rec.status !== "done") {
|
|
287
|
-
rec.status = "done";
|
|
288
|
-
rec.completed_at = rec.completed_at ?? rec.verified_at;
|
|
289
|
-
rec.note = "verified green without a recorded run";
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
results.push({
|
|
293
|
-
id: step.id,
|
|
294
|
-
ok: outcome.ok,
|
|
295
|
-
failures: failures(outcome.checks),
|
|
296
|
-
...(step.optional ? { optional: true } : {}),
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
this.save();
|
|
300
|
-
return { ok: results.every((r) => r.ok || r.optional === true), results };
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* The finish tool's engine half: re-run the full verification checklist.
|
|
304
|
-
* Anything red ⇒ refuse with the failures (the caller returns them as the
|
|
305
|
-
* tool result and does not exit). All green ⇒ mark the checklist complete
|
|
306
|
-
* and write the first-run marker — once: a marker already on disk is left
|
|
51
|
+
* The finish tool's engine half: the checklist's full verification. Anything
|
|
52
|
+
* red ⇒ refuse with the failures (the caller returns them as the tool
|
|
53
|
+
* result and does not exit). All green ⇒ the checklist is complete, and the
|
|
54
|
+
* first-run marker is written — once: a marker already on disk is left
|
|
307
55
|
* untouched, so the completed_at the companion greets on never moves.
|
|
308
56
|
*/
|
|
309
57
|
async finish() {
|
|
310
|
-
const
|
|
311
|
-
if (!
|
|
312
|
-
|
|
313
|
-
this.save();
|
|
314
|
-
return { ok: false, results: all.results };
|
|
315
|
-
}
|
|
316
|
-
const completedAt = this.checklist.completed_at ?? this.adapters.clock().toISOString();
|
|
317
|
-
this.checklist.completed_at = completedAt;
|
|
318
|
-
this.checklist.reopened_at = null;
|
|
319
|
-
this.save();
|
|
58
|
+
const done = await super.finish();
|
|
59
|
+
if (!done.ok)
|
|
60
|
+
return done;
|
|
320
61
|
const marker = firstRunMarkerPath(this.adapters.paths.stateDir);
|
|
321
62
|
let markerWritten = false;
|
|
322
63
|
if (!existsSync(marker)) {
|
|
323
|
-
writeAtomic(marker, `${JSON.stringify({ completed_at:
|
|
64
|
+
writeAtomic(marker, `${JSON.stringify({ completed_at: done.completed_at })}\n`);
|
|
324
65
|
markerWritten = true;
|
|
325
66
|
}
|
|
326
|
-
return { ok: true, completed_at:
|
|
67
|
+
return { ok: true, completed_at: done.completed_at, marker_written: markerWritten };
|
|
327
68
|
}
|
|
328
69
|
}
|
|
329
70
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/onboard/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/onboard/engine.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,kFAAkF;AAClF,uEAAuE;AACvE,6EAA6E;AAC7E,yEAAyE;AACzE,8EAA8E;AAC9E,wBAAwB;AACxB,EAAE;AACF,iDAAiD;AACjD,oEAAoE;AACpE,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,cAAc;AACd,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,GAOZ,MAAM,mDAAmD,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,GASZ,MAAM,mDAAmD,CAAC;AA0D3D,gFAAgF;AAEhF,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACxD,CAAC;AAED;uEACuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;kEAEkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,KAAK,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,WAAW,CAAC,KAAoC;IAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAQD,MAAM,OAAO,gBAAiB,SAAQ,cAA+B;IACnE,YACE,KAAgE,EAChE,QAAyB;QAEzB,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACM,KAAK,CAAC,MAAM;QACnB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;YAChF,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -51,12 +51,13 @@ import { installName } from "../../install.js";
|
|
|
51
51
|
import { composeArgs, composeAvailable, composePs, composeFileCheck, composeTail, containerStateCheck, hostCommands, ingressOptionOf, MEMORY_SERVICE, memoryImage, memoryOn, nodeStreamRunner, pullArgs, readEnvText, readTextOrNull, releaseImage, releaseVersion, rootOf, secretsDirFor, writeAtomic, } from "./compose.js";
|
|
52
52
|
import { assertNoDryRunEdit, patchToml } from "./configfill.js";
|
|
53
53
|
import { declaredEmbedderOf, describeEmbedder, embedderEnvEntries, embedderInputsCheck, localEmbedderEnvEntries, } from "./embeddings.js";
|
|
54
|
+
import { CHOICE_KEYS } from "../choices.js";
|
|
54
55
|
import { readEnvKey, readTomlKey, setEnvKey } from "./ingress.js";
|
|
55
56
|
import { UID_CHOICE_KEY } from "./preflight.js";
|
|
56
57
|
import { topologyOf } from "./topology.js";
|
|
57
58
|
export const BRINGUP_STEP_ID = "bringup";
|
|
58
59
|
/** Recorded timestamp of this step's successful bring-up. */
|
|
59
|
-
export const BROUGHT_UP_CHOICE_KEY =
|
|
60
|
+
export const BROUGHT_UP_CHOICE_KEY = CHOICE_KEYS.broughtUpAt;
|
|
60
61
|
/**
|
|
61
62
|
* The note, in the operator's words, emitted before the pull begins.
|
|
62
63
|
* Exported so the test can assert both its content and its ordering.
|
|
@@ -374,7 +375,7 @@ export function bringUpStep(opts = {}) {
|
|
|
374
375
|
}));
|
|
375
376
|
const ok = checks.every((c) => c.ok);
|
|
376
377
|
if (ok)
|
|
377
|
-
ctx.recordChoice(
|
|
378
|
+
ctx.recordChoice(CHOICE_KEYS.broughtUpAt, ctx.adapters.clock().toISOString());
|
|
378
379
|
return { ok, checks, data: { profile, up_at: ctx.adapters.clock().toISOString() } };
|
|
379
380
|
},
|
|
380
381
|
async verify(ctx) {
|