@codyswann/lisa 4.28.4 → 4.29.0
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 +3 -1
- package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -1
- package/all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh +3 -2
- package/all/copy-overwrite/scripts/lisa-postinstall.mjs +6 -2
- package/cdk/create-only/vitest.config.local.ts +5 -1
- package/cdk/package-lisa/package.lisa.json +14 -7
- package/dist/cli/apply.d.ts +20 -0
- package/dist/cli/apply.d.ts.map +1 -1
- package/dist/cli/apply.js +70 -3
- package/dist/cli/apply.js.map +1 -1
- package/dist/cli/doctor-apply-freshness.d.ts.map +1 -1
- package/dist/cli/doctor-apply-freshness.js +10 -4
- package/dist/cli/doctor-apply-freshness.js.map +1 -1
- package/dist/cli/lisa-test-run-bootstrap.d.ts +3 -0
- package/dist/cli/lisa-test-run-bootstrap.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-bootstrap.js +201 -0
- package/dist/cli/lisa-test-run-bootstrap.js.map +1 -0
- package/dist/cli/lisa-test-run-ipc.d.ts +42 -0
- package/dist/cli/lisa-test-run-ipc.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-ipc.js +200 -0
- package/dist/cli/lisa-test-run-ipc.js.map +1 -0
- package/dist/cli/lisa-test-run-process-group.d.ts +30 -0
- package/dist/cli/lisa-test-run-process-group.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-process-group.js +123 -0
- package/dist/cli/lisa-test-run-process-group.js.map +1 -0
- package/dist/cli/lisa-test-run-reaper.d.ts +3 -0
- package/dist/cli/lisa-test-run-reaper.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-reaper.js +195 -0
- package/dist/cli/lisa-test-run-reaper.js.map +1 -0
- package/dist/cli/lisa-test-run-runtime.d.ts +46 -0
- package/dist/cli/lisa-test-run-runtime.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-runtime.js +123 -0
- package/dist/cli/lisa-test-run-runtime.js.map +1 -0
- package/dist/cli/lisa-test-run-supervisor.d.ts +13 -0
- package/dist/cli/lisa-test-run-supervisor.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-supervisor.js +268 -0
- package/dist/cli/lisa-test-run-supervisor.js.map +1 -0
- package/dist/cli/lisa-test-run.d.ts +3 -0
- package/dist/cli/lisa-test-run.d.ts.map +1 -0
- package/dist/cli/lisa-test-run.js +66 -0
- package/dist/cli/lisa-test-run.js.map +1 -0
- package/dist/cli/shared-options.d.ts +11 -4
- package/dist/cli/shared-options.d.ts.map +1 -1
- package/dist/cli/shared-options.js +8 -8
- package/dist/cli/shared-options.js.map +1 -1
- package/dist/configs/vitest/base.d.ts.map +1 -1
- package/dist/configs/vitest/base.js +5 -2
- package/dist/configs/vitest/base.js.map +1 -1
- package/dist/configs/vitest/cdk.d.ts +4 -0
- package/dist/configs/vitest/cdk.d.ts.map +1 -1
- package/dist/configs/vitest/cdk.js +5 -0
- package/dist/configs/vitest/cdk.js.map +1 -1
- package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
- package/dist/configs/vitest/harper-fabric.js +1 -0
- package/dist/configs/vitest/harper-fabric.js.map +1 -1
- package/dist/configs/vitest/nestjs.d.ts.map +1 -1
- package/dist/configs/vitest/nestjs.js +1 -0
- package/dist/configs/vitest/nestjs.js.map +1 -1
- package/dist/configs/vitest/phaser.d.ts.map +1 -1
- package/dist/configs/vitest/phaser.js +1 -0
- package/dist/configs/vitest/phaser.js.map +1 -1
- package/dist/configs/vitest/scratch-authority.d.ts +25 -0
- package/dist/configs/vitest/scratch-authority.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-authority.js +107 -0
- package/dist/configs/vitest/scratch-authority.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts +5 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.js +219 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup.d.ts +28 -0
- package/dist/configs/vitest/scratch-bound-cleanup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup.js +155 -0
- package/dist/configs/vitest/scratch-bound-cleanup.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts +17 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.js +149 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.js.map +1 -0
- package/dist/configs/vitest/scratch-global-setup.d.ts +17 -9
- package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
- package/dist/configs/vitest/scratch-global-setup.js +103 -35
- package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
- package/dist/configs/vitest/scratch-leak-setup.d.ts +2 -0
- package/dist/configs/vitest/scratch-leak-setup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-leak-setup.js +108 -0
- package/dist/configs/vitest/scratch-leak-setup.js.map +1 -0
- package/dist/configs/vitest/scratch-namespace-authority.d.ts +80 -0
- package/dist/configs/vitest/scratch-namespace-authority.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-namespace-authority.js +291 -0
- package/dist/configs/vitest/scratch-namespace-authority.js.map +1 -0
- package/dist/configs/vitest/scratch-owner.d.ts +131 -0
- package/dist/configs/vitest/scratch-owner.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-owner.js +297 -0
- package/dist/configs/vitest/scratch-owner.js.map +1 -0
- package/dist/configs/vitest/scratch-route-profile.d.ts +36 -0
- package/dist/configs/vitest/scratch-route-profile.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-route-profile.js +217 -0
- package/dist/configs/vitest/scratch-route-profile.js.map +1 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.d.ts +33 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.js +137 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.js.map +1 -0
- package/dist/configs/vitest/scratch-run-root-intent.d.ts +66 -0
- package/dist/configs/vitest/scratch-run-root-intent.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-run-root-intent.js +183 -0
- package/dist/configs/vitest/scratch-run-root-intent.js.map +1 -0
- package/dist/configs/vitest/scratch-setup.d.ts.map +1 -1
- package/dist/configs/vitest/scratch-setup.js +45 -15
- package/dist/configs/vitest/scratch-setup.js.map +1 -1
- package/dist/configs/vitest/scratch-supervision-intent.d.ts +8 -0
- package/dist/configs/vitest/scratch-supervision-intent.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision-intent.js +125 -0
- package/dist/configs/vitest/scratch-supervision-intent.js.map +1 -0
- package/dist/configs/vitest/scratch-supervision-protocol.d.ts +12 -0
- package/dist/configs/vitest/scratch-supervision-protocol.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision-protocol.js +230 -0
- package/dist/configs/vitest/scratch-supervision-protocol.js.map +1 -0
- package/dist/configs/vitest/scratch-supervision.d.ts +64 -0
- package/dist/configs/vitest/scratch-supervision.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision.js +209 -0
- package/dist/configs/vitest/scratch-supervision.js.map +1 -0
- package/dist/configs/vitest/scratch-sweep.d.ts +66 -0
- package/dist/configs/vitest/scratch-sweep.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-sweep.js +82 -0
- package/dist/configs/vitest/scratch-sweep.js.map +1 -0
- package/dist/configs/vitest/scratch.d.ts +14 -187
- package/dist/configs/vitest/scratch.d.ts.map +1 -1
- package/dist/configs/vitest/scratch.js +18 -285
- package/dist/configs/vitest/scratch.js.map +1 -1
- package/dist/configs/vitest/typescript.d.ts.map +1 -1
- package/dist/configs/vitest/typescript.js +1 -0
- package/dist/configs/vitest/typescript.js.map +1 -1
- package/dist/core/apply-mode.d.ts +80 -29
- package/dist/core/apply-mode.d.ts.map +1 -1
- package/dist/core/apply-mode.js +23 -2
- package/dist/core/apply-mode.js.map +1 -1
- package/dist/core/apply-receipt.d.ts +5 -1
- package/dist/core/apply-receipt.d.ts.map +1 -1
- package/dist/core/apply-receipt.js.map +1 -1
- package/dist/core/config.d.ts +24 -12
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +8 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +63 -15
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +28 -5
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/utils/postinstall-trampoline-source.js +10 -1
- package/dist/utils/postinstall-trampoline-source.js.map +1 -1
- package/expo/package-lisa/package.lisa.json +14 -14
- package/harper-fabric/package-lisa/package.lisa.json +8 -3
- package/nestjs/create-only/vitest.config.local.ts +5 -1
- package/nestjs/package-lisa/package.lisa.json +14 -8
- package/npm-package/package-lisa/package.lisa.json +8 -0
- package/package.json +17 -13
- package/phaser/package-lisa/package.lisa.json +9 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/hooks/sonar-secrets.sh +3 -2
- package/scripts/install-claude-plugins.sh +7 -2
- package/typescript/create-only/vitest.config.local.ts +5 -1
- package/typescript/package-lisa/package.lisa.json +14 -8
package/README.md
CHANGED
|
@@ -184,7 +184,9 @@ whenever a project seems to have stopped tracking upstream changes; a repo can
|
|
|
184
184
|
otherwise sit silently stale for months.
|
|
185
185
|
|
|
186
186
|
The same check covers a second, quieter gap. A package install runs apply in
|
|
187
|
-
**postinstall-safe** mode
|
|
187
|
+
**postinstall-safe** mode — declared by the `LISA_POSTINSTALL=1` /
|
|
188
|
+
`--postinstall-safe` marker every Lisa-written postinstall invocation carries —
|
|
189
|
+
which deliberately skips every
|
|
188
190
|
agent emit — Codex, Claude, agy, Copilot, OpenCode — and the Sonar integration,
|
|
189
191
|
because those rewrite host-owned files. So no `bun install` at any version can
|
|
190
192
|
reconcile `.codex/config.toml`; only a full `lisa apply .` does. Doctor now says
|
|
@@ -1523,7 +1523,8 @@ const QUALITY_FALLBACKS = Object.freeze({
|
|
|
1523
1523
|
],
|
|
1524
1524
|
},
|
|
1525
1525
|
test_node_suites: {
|
|
1526
|
-
command:
|
|
1526
|
+
command:
|
|
1527
|
+
"lisa-test-run --profile <stack-or-node> --adapter direct -- node <lisa>/scripts/lisa-test-node.mjs",
|
|
1527
1528
|
seedRun: ["test:node"],
|
|
1528
1529
|
steps: ["🧪 Run .mjs suites (lisa-test-node)"],
|
|
1529
1530
|
},
|
|
@@ -137,10 +137,11 @@ is_inactive() {
|
|
|
137
137
|
# The FIFO is a rendezvous, not storage: a named pipe holds no data at rest, so
|
|
138
138
|
# the value still never lands on disk (CWE-922) and a kill at any point leaves an
|
|
139
139
|
# empty pipe behind rather than a readable token. The directory is `mktemp -d`,
|
|
140
|
-
# which is 0700.
|
|
140
|
+
# which is 0700. Its explicit Lisa prefix makes an interrupted resolver
|
|
141
|
+
# attributable to the owning scratch lifecycle instead of anonymous `tmp.*`.
|
|
141
142
|
resolve_secret() {
|
|
142
143
|
local resolver="$1" name="$2" value="" child="" dir="" fifo=""
|
|
143
|
-
dir="$(mktemp -d)" || return 0
|
|
144
|
+
dir="$(mktemp -d "${TMPDIR:-/tmp}/lisa-sonar-resolver.XXXXXXXX")" || return 0
|
|
144
145
|
fifo="$dir/resolver"
|
|
145
146
|
if ! mkfifo -m 600 "$fifo" 2>/dev/null; then
|
|
146
147
|
rm -rf "$dir"
|
|
@@ -152,7 +152,11 @@ export function runPostinstall(cwd = process.cwd(), env = process.env) {
|
|
|
152
152
|
try {
|
|
153
153
|
child = boundedSpawnSync(
|
|
154
154
|
process.execPath,
|
|
155
|
-
|
|
155
|
+
// `--postinstall-safe` is what selects the reduced apply, NOT
|
|
156
|
+
// `--skip-git-check` (CodySwannGT/lisa#3066). Both are needed here: an
|
|
157
|
+
// install has already dirtied package.json and the lockfile, and an
|
|
158
|
+
// install must not regenerate committed agent trees.
|
|
159
|
+
[LISA_ENTRY, "--yes", "--skip-git-check", "--postinstall-safe", "."],
|
|
156
160
|
{
|
|
157
161
|
cwd,
|
|
158
162
|
env: { ...env, LISA_BOOTSTRAP: "1" },
|
|
@@ -209,7 +213,7 @@ export function runPostinstall(cwd = process.cwd(), env = process.env) {
|
|
|
209
213
|
" The error is printed above. Run `lisa doctor` for the recorded state, or",
|
|
210
214
|
" re-run the apply directly to see it in isolation:",
|
|
211
215
|
"",
|
|
212
|
-
` node ${LISA_ENTRY} --yes --skip-git-check .`,
|
|
216
|
+
` node ${LISA_ENTRY} --yes --skip-git-check --postinstall-safe .`,
|
|
213
217
|
"",
|
|
214
218
|
].join("\n")
|
|
215
219
|
);
|
|
@@ -28,7 +28,11 @@
|
|
|
28
28
|
import type { ViteUserConfig } from "vitest/config";
|
|
29
29
|
|
|
30
30
|
const config: ViteUserConfig = {
|
|
31
|
-
|
|
31
|
+
test: {
|
|
32
|
+
// Scratch redirection must install before the leak guard, and the guard's
|
|
33
|
+
// afterAll must run after project hooks so cleanup is attributed correctly.
|
|
34
|
+
sequence: { setupFiles: "list", hooks: "stack" },
|
|
35
|
+
},
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
export default config;
|
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
"cdk": "cdk",
|
|
7
7
|
"build": "tsc --noEmit",
|
|
8
8
|
"prepare": "husky install || true",
|
|
9
|
-
"test": "vitest run",
|
|
10
|
-
"test:unit": "vitest run --exclude='**/integration/**'",
|
|
11
|
-
"test:integration:lisa": "vitest run '.integration.' 'integration/'",
|
|
12
|
-
"test:cov": "vitest run --coverage",
|
|
13
|
-
"test:
|
|
14
|
-
"test:
|
|
9
|
+
"test": "lisa-test-run --profile cdk --adapter vitest -- vitest run",
|
|
10
|
+
"test:unit": "lisa-test-run --profile cdk --adapter vitest -- vitest run --exclude='**/integration/**'",
|
|
11
|
+
"test:integration:lisa": "lisa-test-run --profile cdk --adapter vitest -- vitest run '.integration.' 'integration/'",
|
|
12
|
+
"test:cov": "lisa-test-run --profile cdk --adapter vitest -- vitest run --coverage",
|
|
13
|
+
"test:cov:unit": "LISA_COVERAGE_SCOPE=unit lisa-test-run --profile cdk --adapter vitest -- vitest run --coverage --exclude='**/integration/**'",
|
|
14
|
+
"test:mutation": "LISA_TEST_SCRATCH_PREFIXES='[\"lisa-mutation-\",\"worker-\"]' lisa-test-run --profile cdk --adapter direct -- node scripts/lisa-mutation.mjs",
|
|
15
|
+
"test:watch": "lisa-test-run --profile cdk --adapter vitest -- vitest",
|
|
15
16
|
"lint:lisa": "oxlint && eslint . --quiet",
|
|
16
17
|
"lint:fix": "oxlint --fix && eslint . --fix",
|
|
17
|
-
"test:node": "node scripts/lisa-test-node.mjs"
|
|
18
|
+
"test:node": "LISA_TEST_SCRATCH_PREFIXES='[\"node-\"]' lisa-test-run --profile cdk --adapter direct -- node scripts/lisa-test-node.mjs"
|
|
18
19
|
},
|
|
19
20
|
"dependencies": {
|
|
20
21
|
"aws-cdk-github-oidc": "^2.4.1",
|
|
@@ -68,6 +69,12 @@
|
|
|
68
69
|
"adopt": {
|
|
69
70
|
"scripts": {
|
|
70
71
|
"test:integration": [
|
|
72
|
+
"lisa-test-run --profile cdk --adapter vitest -- vitest run '.integration.' 'integration/' --passWithNoTests",
|
|
73
|
+
"lisa-test-run --profile cdk --adapter vitest -- vitest run '.integration.' 'integration/'",
|
|
74
|
+
"lisa-test-run --profile cdk -- vitest run '.integration.' 'integration/' --passWithNoTests",
|
|
75
|
+
"lisa-test-run --profile cdk -- vitest run '.integration.' 'integration/'",
|
|
76
|
+
"lisa-test-run -- vitest run '.integration.' 'integration/' --passWithNoTests",
|
|
77
|
+
"lisa-test-run -- vitest run '.integration.' 'integration/'",
|
|
71
78
|
"vitest run '.integration.' 'integration/' --passWithNoTests",
|
|
72
79
|
"vitest run '.integration.' 'integration/'",
|
|
73
80
|
"vitest run tests/integration",
|
package/dist/cli/apply.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
|
+
import { type ApplyModeInputs } from "../core/apply-mode.js";
|
|
1
2
|
import { type CLIOptions } from "./shared-options.js";
|
|
3
|
+
/**
|
|
4
|
+
* The one-time notice for the retired meaning of `--skip-git-check`.
|
|
5
|
+
*
|
|
6
|
+
* Until CodySwannGT/lisa#3066 the flag also selected the reduced
|
|
7
|
+
* `postinstall-safe` subset. Every Lisa-written postinstall invocation now
|
|
8
|
+
* declares its own context instead, so those callers are unaffected — but a
|
|
9
|
+
* hand-written or copied command that passes only the flag gets a DIFFERENT
|
|
10
|
+
* apply than it used to, and a change of meaning that arrives silently is the
|
|
11
|
+
* defect restated rather than fixed.
|
|
12
|
+
*
|
|
13
|
+
* It warns rather than fails. A hard failure would abort the apply for every
|
|
14
|
+
* consumer whose `package.json` still carries the pre-fix hook text, turning a
|
|
15
|
+
* template-sync change into a fleet-wide stop on template updates — strictly
|
|
16
|
+
* worse than the bug. The hook migrates itself on the first apply, so the
|
|
17
|
+
* notice is also self-limiting.
|
|
18
|
+
* @param state - The resolved apply-mode inputs for this invocation.
|
|
19
|
+
* @returns The notice, or undefined when nothing changed for this caller.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getRetiredSkipGitCheckNotice(state: ApplyModeInputs): string | undefined;
|
|
2
22
|
/**
|
|
3
23
|
* Apply Lisa to the given destination with the given options.
|
|
4
24
|
*
|
package/dist/cli/apply.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAC;AAgB/B,OAAO,EACL,KAAK,UAAU,EAGhB,MAAM,qBAAqB,CAAC;AAoO7B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,eAAe,GACrB,MAAM,GAAG,SAAS,CAepB;AAmCD;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
package/dist/cli/apply.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { resolveApplyMode } from "../core/apply-mode.js";
|
|
3
|
+
import { LISA_POSTINSTALL_ENV, resolveApplyMode, resolvePostinstallDeclaration, } from "../core/apply-mode.js";
|
|
4
4
|
import { recordSuccessfulApply } from "../core/apply-receipt.js";
|
|
5
5
|
import { getBootstrapApplySkipNotice } from "../core/bootstrap-environment.js";
|
|
6
6
|
import { ACCEPTED_HARNESS_INPUTS } from "../core/config.js";
|
|
@@ -32,7 +32,12 @@ function printUsageAndExit() {
|
|
|
32
32
|
console.log(" -n, --dry-run Show what would be done without making changes");
|
|
33
33
|
console.log(" -y, --yes Non-interactive mode (auto-accept defaults, overwrite on conflict)");
|
|
34
34
|
console.log(" -v, --validate Validate project compatibility without applying changes");
|
|
35
|
-
console.log(" --skip-git-check Skip dirty git working directory check
|
|
35
|
+
console.log(" --skip-git-check Skip the dirty git working directory check. The apply still");
|
|
36
|
+
console.log(" runs in full, including every agent emit.");
|
|
37
|
+
console.log(" --postinstall-safe");
|
|
38
|
+
console.log(" Declare a package-manager install lifecycle: runs the reduced");
|
|
39
|
+
console.log(" subset (no agent emit, no Sonar). Same as LISA_POSTINSTALL=1.");
|
|
40
|
+
console.log(" --full-apply Run the FULL apply even inside a declared postinstall");
|
|
36
41
|
console.log(" --refresh-templates [paths]");
|
|
37
42
|
console.log(" Let a non-interactive apply replace managed files it would");
|
|
38
43
|
console.log(" otherwise report as out of date. Optionally scope to a");
|
|
@@ -99,7 +104,8 @@ async function migrateLegacyHarnessIfNeeded(destDir, logger) {
|
|
|
99
104
|
* @param parts.yesMode - Whether prompts auto-accept
|
|
100
105
|
* @param parts.validateOnly - Whether to validate instead of apply
|
|
101
106
|
* @param parts.skipGitCheck - Whether the dirty-tree prompt is skipped
|
|
102
|
-
* @param parts.
|
|
107
|
+
* @param parts.postinstall - Whether this apply declared a postinstall context
|
|
108
|
+
* @param parts.fullApply - Whether to force the full apply anyway
|
|
103
109
|
* @param parts.refreshTemplates - Opted-in managed files, if any
|
|
104
110
|
* @param parts.harness - Target harness for emitted artifacts
|
|
105
111
|
* @returns The config to hand to Lisa
|
|
@@ -157,6 +163,64 @@ async function finalizeSuccessfulApply(parts) {
|
|
|
157
163
|
stalePaths,
|
|
158
164
|
});
|
|
159
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* The one-time notice for the retired meaning of `--skip-git-check`.
|
|
168
|
+
*
|
|
169
|
+
* Until CodySwannGT/lisa#3066 the flag also selected the reduced
|
|
170
|
+
* `postinstall-safe` subset. Every Lisa-written postinstall invocation now
|
|
171
|
+
* declares its own context instead, so those callers are unaffected — but a
|
|
172
|
+
* hand-written or copied command that passes only the flag gets a DIFFERENT
|
|
173
|
+
* apply than it used to, and a change of meaning that arrives silently is the
|
|
174
|
+
* defect restated rather than fixed.
|
|
175
|
+
*
|
|
176
|
+
* It warns rather than fails. A hard failure would abort the apply for every
|
|
177
|
+
* consumer whose `package.json` still carries the pre-fix hook text, turning a
|
|
178
|
+
* template-sync change into a fleet-wide stop on template updates — strictly
|
|
179
|
+
* worse than the bug. The hook migrates itself on the first apply, so the
|
|
180
|
+
* notice is also self-limiting.
|
|
181
|
+
* @param state - The resolved apply-mode inputs for this invocation.
|
|
182
|
+
* @returns The notice, or undefined when nothing changed for this caller.
|
|
183
|
+
*/
|
|
184
|
+
export function getRetiredSkipGitCheckNotice(state) {
|
|
185
|
+
if (!state.skipGitCheck ||
|
|
186
|
+
state.postinstall === true ||
|
|
187
|
+
state.fullApply === true) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
return ("--skip-git-check now waives ONLY the clean-tree check; this apply runs in " +
|
|
191
|
+
"FULL, including every agent emit and the Sonar integration. It used to " +
|
|
192
|
+
"also select the reduced postinstall-safe subset (CodySwannGT/lisa#3066). " +
|
|
193
|
+
`Pass --postinstall-safe (or set ${LISA_POSTINSTALL_ENV}=1) if you wanted ` +
|
|
194
|
+
"the reduced apply.");
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Read this process's postinstall declaration.
|
|
198
|
+
*
|
|
199
|
+
* The environment spelling is not optional here: the declaration originates in
|
|
200
|
+
* the hook text inside a consumer's own `package.json`, and a shell command
|
|
201
|
+
* prefix is the only way that text can reach the process it launches.
|
|
202
|
+
* @param options - Parsed CLI options for this invocation.
|
|
203
|
+
* @returns True when this apply declared itself a package-manager install.
|
|
204
|
+
*/
|
|
205
|
+
function readPostinstallDeclaration(options) {
|
|
206
|
+
// Lisa's CLI is not a Nest service or a Lambda handler; it must introspect
|
|
207
|
+
// the environment its own postinstall hook hands it, and routing this one
|
|
208
|
+
// presence check through a config service would add indirection rather than
|
|
209
|
+
// type-safety.
|
|
210
|
+
// eslint-disable-next-line no-restricted-syntax -- see above
|
|
211
|
+
return resolvePostinstallDeclaration(options.postinstallSafe, process.env);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Announce the retired meaning of `--skip-git-check` when it applies.
|
|
215
|
+
* @param logger - Where the notice goes.
|
|
216
|
+
* @param state - The resolved apply-mode inputs for this invocation.
|
|
217
|
+
*/
|
|
218
|
+
function warnIfRetiredSkipGitCheck(logger, state) {
|
|
219
|
+
const notice = getRetiredSkipGitCheckNotice(state);
|
|
220
|
+
if (notice !== undefined) {
|
|
221
|
+
logger.warn(notice);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
160
224
|
/**
|
|
161
225
|
* Apply Lisa to the given destination with the given options.
|
|
162
226
|
*
|
|
@@ -184,18 +248,21 @@ export async function runApply(destination, options) {
|
|
|
184
248
|
const configFileExists = await projectConfigExists(destDir);
|
|
185
249
|
const harness = resolveHarness(options.harness, projectConfig);
|
|
186
250
|
const refreshTemplates = parseRefreshTemplates(options.refreshTemplates);
|
|
251
|
+
const postinstall = readPostinstallDeclaration(options);
|
|
187
252
|
const config = buildApplyConfig({
|
|
188
253
|
destDir,
|
|
189
254
|
dryRun,
|
|
190
255
|
yesMode,
|
|
191
256
|
validateOnly,
|
|
192
257
|
skipGitCheck: options.skipGitCheck ?? false,
|
|
258
|
+
postinstall,
|
|
193
259
|
fullApply: options.fullApply ?? false,
|
|
194
260
|
refreshTemplates,
|
|
195
261
|
harness,
|
|
196
262
|
});
|
|
197
263
|
const deps = createDependencies(dryRun, yesMode, logger);
|
|
198
264
|
const lisa = new Lisa(config, deps);
|
|
265
|
+
warnIfRetiredSkipGitCheck(logger, config);
|
|
199
266
|
try {
|
|
200
267
|
const result = options.validate
|
|
201
268
|
? await lisa.validate()
|
package/dist/cli/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-apply-freshness.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-apply-freshness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor-apply-freshness.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-apply-freshness.ts"],"names":[],"mappings":"AAkFA,wEAAwE;AACxE,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAoLD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CA2BzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CASjD"}
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
* version stamp means none has finished since that version. Both are reported
|
|
16
16
|
* with the version and date, and with the command that reproduces the failure.
|
|
17
17
|
*
|
|
18
|
-
* A third silence lives in the same subsystem: postinstall-safe mode
|
|
19
|
-
*
|
|
20
|
-
* emit. That is deliberate — those emits rewrite host-owned files — but it
|
|
18
|
+
* A third silence lives in the same subsystem: postinstall-safe mode (what a
|
|
19
|
+
* package manager's install declares, via `--postinstall-safe` /
|
|
20
|
+
* `LISA_POSTINSTALL=1`) skips every agent emit. That is deliberate — those emits rewrite host-owned files — but it
|
|
21
21
|
* means no `bun install` at any version can reconcile `.codex/config.toml`, so
|
|
22
22
|
* repos on the newest Lisa still carry a deprecated `codex_hooks` key and an
|
|
23
23
|
* audit reasonably but wrongly concluded "apply just hasn't re-run". Same shape
|
|
@@ -51,7 +51,13 @@ import { getPackageVersion } from "./version.js";
|
|
|
51
51
|
const CHECK_NAME = "Templates applied by this Lisa version?";
|
|
52
52
|
const YAML_CHECK_NAME = "YAML runtime usable?";
|
|
53
53
|
const REAPPLY_COMMAND = "node node_modules/@codyswann/lisa/dist/index.js --yes --skip-git-check .";
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* A plain operator apply, which performs the agent emits.
|
|
56
|
+
*
|
|
57
|
+
* `REAPPLY_COMMAND` above performs them too now — since
|
|
58
|
+
* CodySwannGT/lisa#3066 `--skip-git-check` waives only the clean-tree check —
|
|
59
|
+
* but this is the form to hand someone whose tree is already clean.
|
|
60
|
+
*/
|
|
55
61
|
const FULL_APPLY_COMMAND = "node node_modules/@codyswann/lisa/dist/index.js .";
|
|
56
62
|
/**
|
|
57
63
|
* How many stale paths to name inline before deferring to the receipt.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-apply-freshness.js","sourceRoot":"","sources":["../../src/cli/doctor-apply-freshness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,GAAG,yCAAyC,CAAC;AAC7D,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,eAAe,GACnB,0EAA0E,CAAC;AAC7E
|
|
1
|
+
{"version":3,"file":"doctor-apply-freshness.js","sourceRoot":"","sources":["../../src/cli/doctor-apply-freshness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-bootstrap.d.ts","sourceRoot":"","sources":["../../src/cli/lisa-test-run-bootstrap.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Inert process-group leader that gates a supervised test payload on GO. */
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { env } from "node:process";
|
|
5
|
+
import { parseScratchProtocolMessage } from "../configs/vitest/scratch-supervision.js";
|
|
6
|
+
/** Private deterministic IPC-close seam, never inherited by the payload. */
|
|
7
|
+
const TEST_FAULT_ENV = "LISA_TEST_RUN_TEST_FAULT";
|
|
8
|
+
/** Signals the foreground supervisor owns and the group leader must survive. */
|
|
9
|
+
const SUPERVISED_SIGNALS = [
|
|
10
|
+
"SIGINT",
|
|
11
|
+
"SIGTERM",
|
|
12
|
+
"SIGHUP",
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Parse the exact bounded inert command envelope.
|
|
16
|
+
* @param value - Parsed IPC command body
|
|
17
|
+
* @returns Validated command
|
|
18
|
+
*/
|
|
19
|
+
function validateCommand(value) {
|
|
20
|
+
const candidate = value;
|
|
21
|
+
if (typeof value !== "object" ||
|
|
22
|
+
value === null ||
|
|
23
|
+
candidate.schema !== 1 ||
|
|
24
|
+
!Array.isArray(candidate.argv) ||
|
|
25
|
+
candidate.argv.length === 0 ||
|
|
26
|
+
!candidate.argv.every(argument => typeof argument === "string") ||
|
|
27
|
+
typeof candidate.env !== "object" ||
|
|
28
|
+
candidate.env === null ||
|
|
29
|
+
!Object.values(candidate.env).every(entry => typeof entry === "string")) {
|
|
30
|
+
throw new Error("Invalid lisa-test-run bootstrap command schema");
|
|
31
|
+
}
|
|
32
|
+
return candidate;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Forward one signal to the payload when it is still present.
|
|
36
|
+
* @param payload - Current payload process
|
|
37
|
+
* @param signal - Signal to deliver
|
|
38
|
+
*/
|
|
39
|
+
function signalPayload(payload, signal) {
|
|
40
|
+
try {
|
|
41
|
+
payload?.kill(signal);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// A concurrently exiting payload is already drained.
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Kill the payload and mark operational failure after channel loss.
|
|
49
|
+
* @param state - Bootstrap lifecycle state
|
|
50
|
+
*/
|
|
51
|
+
function failClosed(state) {
|
|
52
|
+
if (state.failingClosed)
|
|
53
|
+
return;
|
|
54
|
+
// eslint-disable-next-line functional/immutable-data -- one-process protocol state transition
|
|
55
|
+
state.failingClosed = true;
|
|
56
|
+
if (!state.payloadExited)
|
|
57
|
+
signalPayload(state.payload, "SIGKILL");
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
if (process.connected)
|
|
60
|
+
process.disconnect();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Send one exact response with callback-safe channel settlement.
|
|
64
|
+
* @param state - Bootstrap lifecycle state
|
|
65
|
+
* @param message - Exact protocol response
|
|
66
|
+
*/
|
|
67
|
+
function sendResponse(state, message) {
|
|
68
|
+
const type = message["type"];
|
|
69
|
+
const fault = env[TEST_FAULT_ENV];
|
|
70
|
+
const closeForFault = (fault === "bootstrap-close-command-ready" && type === "COMMAND_READY") ||
|
|
71
|
+
(fault === "bootstrap-close-payload-exit" && type === "PAYLOAD_EXIT");
|
|
72
|
+
if (closeForFault && process.connected)
|
|
73
|
+
process.disconnect();
|
|
74
|
+
if (!process.connected || process.send === undefined) {
|
|
75
|
+
failClosed(state);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
process.send(message, error => {
|
|
80
|
+
if (error !== null)
|
|
81
|
+
failClosed(state);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
failClosed(state);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Start one payload only after the ordered COMMAND/GO handshake.
|
|
90
|
+
* @param state - Bootstrap lifecycle state
|
|
91
|
+
* @param command - Immutable payload command
|
|
92
|
+
*/
|
|
93
|
+
function startPayload(state, command) {
|
|
94
|
+
// eslint-disable-next-line functional/immutable-data -- ordered protocol transition before spawn
|
|
95
|
+
state.phase = "running";
|
|
96
|
+
const payload = spawn(command.argv[0], command.argv.slice(1), {
|
|
97
|
+
cwd: process.cwd(),
|
|
98
|
+
env: command.env,
|
|
99
|
+
detached: false,
|
|
100
|
+
shell: false,
|
|
101
|
+
stdio: "inherit",
|
|
102
|
+
});
|
|
103
|
+
// eslint-disable-next-line functional/immutable-data -- single owned payload handle
|
|
104
|
+
state.payload = payload;
|
|
105
|
+
payload.once("error", error => {
|
|
106
|
+
sendResponse(state, {
|
|
107
|
+
schema: 1,
|
|
108
|
+
type: "PAYLOAD_ERROR",
|
|
109
|
+
message: error.message,
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
payload.once("exit", (code, signal) => {
|
|
113
|
+
// eslint-disable-next-line functional/immutable-data -- terminal payload state
|
|
114
|
+
state.payloadExited = true;
|
|
115
|
+
// eslint-disable-next-line functional/immutable-data -- terminal payload state
|
|
116
|
+
state.phase = "payload-exited";
|
|
117
|
+
sendResponse(state, { schema: 1, type: "PAYLOAD_EXIT", code, signal });
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Deliver a forwarded signal, treating one outside `running` as the race it is.
|
|
122
|
+
*
|
|
123
|
+
* Two windows produce a legitimate out-of-phase SIGNAL: the supervisor arms its
|
|
124
|
+
* handlers before it sends GO, so a signal there arrives in `await-go`; and the
|
|
125
|
+
* payload's own exit records `payload-exited` before PAYLOAD_EXIT reaches the
|
|
126
|
+
* supervisor, so a signal forwarded in that gap arrives after there is anything
|
|
127
|
+
* left to signal. Refusing either would fail this process closed -- exit 1 and
|
|
128
|
+
* an abrupt disconnect -- reporting an ordinary signal-terminated run as a
|
|
129
|
+
* protocol refusal plus an unexpected channel loss.
|
|
130
|
+
* @param state - Bootstrap lifecycle state
|
|
131
|
+
* @param signal - Signal the supervisor forwarded
|
|
132
|
+
*/
|
|
133
|
+
function forwardSignal(state, signal) {
|
|
134
|
+
if (state.phase !== "running")
|
|
135
|
+
return;
|
|
136
|
+
signalPayload(state.payload, signal);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Apply one already-validated message to the exact protocol phase.
|
|
140
|
+
* @param state - Bootstrap lifecycle state
|
|
141
|
+
* @param message - Untrusted IPC message
|
|
142
|
+
*/
|
|
143
|
+
function handleMessage(state, message) {
|
|
144
|
+
const protocol = parseScratchProtocolMessage(message);
|
|
145
|
+
const type = protocol.type;
|
|
146
|
+
if (state.phase === "await-command" && type === "COMMAND") {
|
|
147
|
+
// eslint-disable-next-line functional/immutable-data -- command becomes immutable after the one accepted transition
|
|
148
|
+
state.command = validateCommand(protocol["command"]);
|
|
149
|
+
// eslint-disable-next-line functional/immutable-data -- ordered protocol transition
|
|
150
|
+
state.phase = "await-go";
|
|
151
|
+
sendResponse(state, { schema: 1, type: "COMMAND_READY" });
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (state.phase === "await-go" && type === "GO" && state.command) {
|
|
155
|
+
startPayload(state, state.command);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (type === "SIGNAL") {
|
|
159
|
+
forwardSignal(state, protocol["signal"]);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (type === "STOP" && state.phase !== "stopping") {
|
|
163
|
+
// eslint-disable-next-line functional/immutable-data -- terminal protocol transition
|
|
164
|
+
state.phase = "stopping";
|
|
165
|
+
if (!state.payloadExited)
|
|
166
|
+
signalPayload(state.payload, "SIGKILL");
|
|
167
|
+
process.disconnect();
|
|
168
|
+
process.exit(0);
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Unexpected ${type} in bootstrap state ${state.phase}`);
|
|
171
|
+
}
|
|
172
|
+
/** Run the process-group leader protocol. */
|
|
173
|
+
function main() {
|
|
174
|
+
const state = {
|
|
175
|
+
payloadExited: false,
|
|
176
|
+
failingClosed: false,
|
|
177
|
+
phase: "await-command",
|
|
178
|
+
};
|
|
179
|
+
for (const signal of SUPERVISED_SIGNALS) {
|
|
180
|
+
process.on(signal, () => undefined);
|
|
181
|
+
}
|
|
182
|
+
sendResponse(state, { schema: 1, type: "BOOTSTRAP_READY", pid: process.pid });
|
|
183
|
+
process.on("message", message => {
|
|
184
|
+
try {
|
|
185
|
+
handleMessage(state, message);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
process.stderr.write(`lisa-test-run bootstrap refused protocol: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
189
|
+
failClosed(state);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
process.on("disconnect", () => failClosed(state));
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
main();
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
process.stderr.write(`lisa-test-run bootstrap failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=lisa-test-run-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-bootstrap.js","sourceRoot":"","sources":["../../src/cli/lisa-test-run-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Exact, bounded parent-side IPC operations for lisa-test-run companions. */
|
|
2
|
+
import type { ChildProcess } from "node:child_process";
|
|
3
|
+
import { type ScratchProtocolMessageV1 } from "../configs/vitest/scratch-supervision.js";
|
|
4
|
+
/** Child outcome retained until cleanup and disarm are proven. */
|
|
5
|
+
export interface PayloadOutcome {
|
|
6
|
+
readonly code: number | null;
|
|
7
|
+
readonly signal: NodeJS.Signals | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Wait for one exact child acknowledgement or fail closed.
|
|
11
|
+
* @param child - Protocol companion
|
|
12
|
+
* @param expected - Exact expected type
|
|
13
|
+
* @param correlation - Optional exact root token
|
|
14
|
+
* @returns Promise settled by the exact validated acknowledgement
|
|
15
|
+
*/
|
|
16
|
+
export declare function waitForMessage(child: ChildProcess, expected: string, correlation?: string): Promise<ScratchProtocolMessageV1>;
|
|
17
|
+
/**
|
|
18
|
+
* Wait until a protocol companion is absent from the process table.
|
|
19
|
+
* @param child - Protocol companion
|
|
20
|
+
* @returns Promise settled after exit
|
|
21
|
+
*/
|
|
22
|
+
export declare function waitForExit(child: ChildProcess): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Send one versioned message or reject a closed IPC channel.
|
|
25
|
+
* @param child - Protocol companion
|
|
26
|
+
* @param message - Exact message body without schema
|
|
27
|
+
* @returns Callback-settled send promise
|
|
28
|
+
*/
|
|
29
|
+
export declare function sendMessage(child: ChildProcess, message: Readonly<Record<string, unknown>>): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Wait for the payload result and reject every other message.
|
|
32
|
+
* @param bootstrap - Inert bootstrap leader
|
|
33
|
+
* @param signalEscalating - Whether parent signal escalation owns its exit
|
|
34
|
+
* @returns Exact payload result
|
|
35
|
+
*/
|
|
36
|
+
export declare function waitForPayload(bootstrap: ChildProcess, signalEscalating?: () => boolean): Promise<PayloadOutcome>;
|
|
37
|
+
/**
|
|
38
|
+
* Stop the inert leader and wait for it to leave the target group.
|
|
39
|
+
* @param bootstrap - Inert bootstrap leader
|
|
40
|
+
*/
|
|
41
|
+
export declare function stopBootstrap(bootstrap: ChildProcess): Promise<void>;
|
|
42
|
+
//# sourceMappingURL=lisa-test-run-ipc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-ipc.d.ts","sourceRoot":"","sources":["../../src/cli/lisa-test-run-ipc.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,0CAA0C,CAAC;AAgDlD,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACxC;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,wBAAwB,CAAC,CAsCnC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,YAAY,EACvB,gBAAgB,GAAE,MAAM,OAAqB,GAC5C,OAAO,CAAC,cAAc,CAAC,CAkCzB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1E"}
|