@codyswann/lisa 4.22.9 → 4.22.11
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/all/copy-overwrite/scripts/check-release-package-identity.mjs +51 -41
- package/all/copy-overwrite/scripts/lib/process-tree-runner.mjs +127 -0
- package/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +63 -8
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +36 -6
- package/all/copy-overwrite/scripts/lisa-postinstall.mjs +35 -13
- package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +11 -3
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +41 -8
- package/all/copy-overwrite/scripts/lisa-schema-validate.mjs +2 -2
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +2 -1
- package/cdk/package-lisa/package.lisa.json +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +26 -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/nightly-e2e-guard-behavior-certificate.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +61 -52
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/plugin-templates/parity-safety-net.sh +36 -6
- package/nestjs/package-lisa/package.lisa.json +1 -1
- package/package.json +3 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +1 -1
- package/plugins/lisa/hooks/parity-safety-net.sh +36 -6
- package/plugins/lisa/hooks/threshold-ratchet-families.mjs +31 -7
- package/plugins/lisa/rules/reference/base-rules.md +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +5 -14
- package/plugins/lisa/scripts/install-remote-agent-aws.mjs +5 -1
- package/plugins/lisa/scripts/rollup-blocker-classification.mjs +18 -3
- package/plugins/lisa/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/lisa/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/lisa/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/lisa/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/lisa/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/lisa/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/lisa/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/lisa/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/lisa/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/lisa/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/lisa/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/lisa/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/lisa/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/lisa/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/lisa/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/lisa/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/lisa/skills/lisa-tracker-sync/SKILL.md +1 -1
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +36 -6
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/install-remote-agent-aws.mjs +5 -1
- package/plugins/lisa-agy/scripts/rollup-blocker-classification.mjs +18 -3
- package/plugins/lisa-agy/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/lisa-agy/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/lisa-agy/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/lisa-agy/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/lisa-agy/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/lisa-agy/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/lisa-agy/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/lisa-agy/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/lisa-agy/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/lisa-agy/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/lisa-agy/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/lisa-agy/skills/lisa-tracker-sync/SKILL.md +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/parity-safety-net.sh +36 -6
- package/plugins/lisa-copilot/hooks/threshold-ratchet-families.mjs +31 -7
- package/plugins/lisa-copilot/rules/reference/base-rules.md +1 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +5 -14
- package/plugins/lisa-copilot/scripts/install-remote-agent-aws.mjs +5 -1
- package/plugins/lisa-copilot/scripts/rollup-blocker-classification.mjs +18 -3
- package/plugins/lisa-copilot/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/lisa-copilot/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/lisa-copilot/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/lisa-copilot/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/lisa-copilot/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/lisa-copilot/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/lisa-copilot/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/lisa-copilot/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/lisa-copilot/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/lisa-copilot/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/lisa-copilot/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/lisa-copilot/skills/lisa-tracker-sync/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +36 -6
- package/plugins/lisa-cursor/hooks/threshold-ratchet-families.mjs +31 -7
- package/plugins/lisa-cursor/rules/base-rules-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +5 -14
- package/plugins/lisa-cursor/scripts/install-remote-agent-aws.mjs +5 -1
- package/plugins/lisa-cursor/scripts/rollup-blocker-classification.mjs +18 -3
- package/plugins/lisa-cursor/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/lisa-cursor/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/lisa-cursor/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/lisa-cursor/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/lisa-cursor/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/lisa-cursor/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/lisa-cursor/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/lisa-cursor/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/lisa-cursor/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/lisa-cursor/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/lisa-cursor/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/lisa-cursor/skills/lisa-tracker-sync/SKILL.md +1 -1
- 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/parity-safety-net.sh +36 -6
- package/plugins/src/base/hooks/threshold-ratchet-families.mjs +31 -7
- package/plugins/src/base/rules/reference/base-rules.md +1 -1
- package/plugins/src/base/rules/reference/config-resolution.md +5 -14
- package/plugins/src/base/scripts/install-remote-agent-aws.mjs +5 -1
- package/plugins/src/base/scripts/rollup-blocker-classification.mjs +18 -3
- package/plugins/src/base/skills/lisa-atlassian-access/SKILL.md +10 -13
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +4 -2
- package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +29 -4
- package/plugins/src/base/skills/lisa-github-sync/SKILL.md +8 -3
- package/plugins/src/base/skills/lisa-jam-access/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-jira-journey/SKILL.md +5 -0
- package/plugins/src/base/skills/lisa-jira-journey/scripts/parse-plan.py +36 -2
- package/plugins/src/base/skills/lisa-jira-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-linear-access/SKILL.md +8 -12
- package/plugins/src/base/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-nightly-lower-code-complexity/SKILL.md +7 -1
- package/plugins/src/base/skills/lisa-notion-access/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-posthog-access/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +19 -3
- package/plugins/src/base/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +10 -6
- package/plugins/src/base/skills/lisa-sentry-access/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-setup-atlassian/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +9 -12
- package/plugins/src/base/skills/lisa-setup-notion/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-setup-remote-aws/SKILL.md +7 -2
- package/plugins/src/base/skills/lisa-setup-remote-env/SKILL.md +6 -1
- package/plugins/src/base/skills/lisa-setup-remote-env/assets/session-start.sh +19 -0
- package/plugins/src/base/skills/lisa-setup-remote-env/assets/setup.sh +1 -0
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +25 -4
- package/plugins/src/base/skills/lisa-setup-workstation/scripts/bounded-child.mjs +9 -0
- package/plugins/src/base/skills/lisa-setup-workstation/scripts/workstation.mjs +29 -21
- package/plugins/src/base/skills/lisa-sonarcloud-access/SKILL.md +7 -10
- package/plugins/src/base/skills/lisa-tracker-sync/SKILL.md +1 -1
- package/rails/copy-overwrite/scripts/threshold-ratchet-families.mjs +31 -7
- package/scripts/check-release-package-identity.mjs +51 -41
- package/scripts/lisa-remote-env/session-start.sh +19 -0
- package/scripts/lisa-remote-env/setup.sh +1 -0
- package/scripts/two-channel-couplings.json +1 -1
- package/typescript/copy-contents/.husky/pre-push +1 -1
- package/typescript/copy-overwrite/scripts/threshold-ratchet-families.mjs +31 -7
- package/typescript/package-lisa/package.lisa.json +1 -1
|
@@ -90,6 +90,33 @@ function tarMember(tarballPath, member) {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
/** Create the one npm archive whose bytes will be published. */
|
|
94
|
+
function createCandidateArchive(root, packDestination) {
|
|
95
|
+
mkdirSync(packDestination, { recursive: true });
|
|
96
|
+
if (readdirSync(packDestination).length !== 0) {
|
|
97
|
+
mismatch(`pack destination must be empty (${packDestination})`);
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
return String(
|
|
101
|
+
boundedExecFileSync(
|
|
102
|
+
"npm",
|
|
103
|
+
[
|
|
104
|
+
"pack",
|
|
105
|
+
"--ignore-scripts",
|
|
106
|
+
"--silent",
|
|
107
|
+
"--pack-destination",
|
|
108
|
+
packDestination,
|
|
109
|
+
],
|
|
110
|
+
{ cwd: root, encoding: "utf8", timeout: 120_000 }
|
|
111
|
+
)
|
|
112
|
+
);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
mismatch(
|
|
115
|
+
`npm pack failed before publication (${error instanceof Error ? error.message : String(error)})`
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
93
120
|
/** Extract the one workspace package version certified by generated bytes. */
|
|
94
121
|
function certificateVersion(bytes, label) {
|
|
95
122
|
const match = String(bytes).match(
|
|
@@ -115,18 +142,24 @@ export function assertReleaseCommit(releaseCommit) {
|
|
|
115
142
|
* @returns {{headCommit: string, tagCommit: string, releaseCommit: string}}
|
|
116
143
|
*/
|
|
117
144
|
export function assertCheckoutIdentity({ root, releaseCommit, tag }) {
|
|
118
|
-
assertReleaseCommit(releaseCommit);
|
|
145
|
+
const validatedReleaseCommit = assertReleaseCommit(releaseCommit);
|
|
119
146
|
const headCommit = gitCommit(root, "HEAD");
|
|
120
|
-
if (headCommit !==
|
|
147
|
+
if (headCommit !== validatedReleaseCommit) {
|
|
121
148
|
mismatch(
|
|
122
|
-
`HEAD ${headCommit} does not match release commit ${
|
|
149
|
+
`HEAD ${headCommit} does not match release commit ${validatedReleaseCommit}`
|
|
123
150
|
);
|
|
124
151
|
}
|
|
125
152
|
const tagCommit = gitCommit(root, tag);
|
|
126
|
-
if (tagCommit !==
|
|
127
|
-
mismatch(
|
|
153
|
+
if (tagCommit !== validatedReleaseCommit) {
|
|
154
|
+
mismatch(
|
|
155
|
+
`tag ${tag} resolves ${tagCommit}, expected ${validatedReleaseCommit}`
|
|
156
|
+
);
|
|
128
157
|
}
|
|
129
|
-
return Object.freeze({
|
|
158
|
+
return Object.freeze({
|
|
159
|
+
headCommit,
|
|
160
|
+
tagCommit,
|
|
161
|
+
releaseCommit: validatedReleaseCommit,
|
|
162
|
+
});
|
|
130
163
|
}
|
|
131
164
|
|
|
132
165
|
/**
|
|
@@ -140,21 +173,21 @@ export function packAndValidateReleaseCandidate({
|
|
|
140
173
|
releaseCommit,
|
|
141
174
|
packDestination,
|
|
142
175
|
}) {
|
|
143
|
-
assertReleaseCommit(releaseCommit);
|
|
176
|
+
const validatedReleaseCommit = assertReleaseCommit(releaseCommit);
|
|
144
177
|
const packageJson = readJson(path.join(root, "package.json"), "package.json");
|
|
145
178
|
if (packageJson.version !== version) {
|
|
146
179
|
mismatch(
|
|
147
180
|
`package.json version ${JSON.stringify(packageJson.version)} expected ${version}`
|
|
148
181
|
);
|
|
149
182
|
}
|
|
150
|
-
if (packageJson.lisaReleaseCommit !==
|
|
183
|
+
if (packageJson.lisaReleaseCommit !== validatedReleaseCommit) {
|
|
151
184
|
mismatch(
|
|
152
|
-
`package.json lisaReleaseCommit ${JSON.stringify(packageJson.lisaReleaseCommit)} expected ${
|
|
185
|
+
`package.json lisaReleaseCommit ${JSON.stringify(packageJson.lisaReleaseCommit)} expected ${validatedReleaseCommit}`
|
|
153
186
|
);
|
|
154
187
|
}
|
|
155
|
-
if (packageJson.gitHead !==
|
|
188
|
+
if (packageJson.gitHead !== validatedReleaseCommit) {
|
|
156
189
|
mismatch(
|
|
157
|
-
`package.json gitHead ${JSON.stringify(packageJson.gitHead)} expected ${
|
|
190
|
+
`package.json gitHead ${JSON.stringify(packageJson.gitHead)} expected ${validatedReleaseCommit}`
|
|
158
191
|
);
|
|
159
192
|
}
|
|
160
193
|
|
|
@@ -172,30 +205,7 @@ export function packAndValidateReleaseCandidate({
|
|
|
172
205
|
}
|
|
173
206
|
}
|
|
174
207
|
|
|
175
|
-
|
|
176
|
-
if (readdirSync(packDestination).length !== 0) {
|
|
177
|
-
mismatch(`pack destination must be empty (${packDestination})`);
|
|
178
|
-
}
|
|
179
|
-
let packOutput;
|
|
180
|
-
try {
|
|
181
|
-
packOutput = String(
|
|
182
|
-
boundedExecFileSync(
|
|
183
|
-
"npm",
|
|
184
|
-
[
|
|
185
|
-
"pack",
|
|
186
|
-
"--ignore-scripts",
|
|
187
|
-
"--silent",
|
|
188
|
-
"--pack-destination",
|
|
189
|
-
packDestination,
|
|
190
|
-
],
|
|
191
|
-
{ cwd: root, encoding: "utf8", timeout: 120_000 }
|
|
192
|
-
)
|
|
193
|
-
);
|
|
194
|
-
} catch (error) {
|
|
195
|
-
mismatch(
|
|
196
|
-
`npm pack failed before publication (${error instanceof Error ? error.message : String(error)})`
|
|
197
|
-
);
|
|
198
|
-
}
|
|
208
|
+
const packOutput = createCandidateArchive(root, packDestination);
|
|
199
209
|
const candidates = readdirSync(packDestination).filter(file =>
|
|
200
210
|
file.endsWith(".tgz")
|
|
201
211
|
);
|
|
@@ -223,14 +233,14 @@ export function packAndValidateReleaseCandidate({
|
|
|
223
233
|
`packed package version ${JSON.stringify(packedPackage.version)} expected ${version}`
|
|
224
234
|
);
|
|
225
235
|
}
|
|
226
|
-
if (packedPackage.lisaReleaseCommit !==
|
|
236
|
+
if (packedPackage.lisaReleaseCommit !== validatedReleaseCommit) {
|
|
227
237
|
mismatch(
|
|
228
|
-
`packed lisaReleaseCommit ${JSON.stringify(packedPackage.lisaReleaseCommit)} expected ${
|
|
238
|
+
`packed lisaReleaseCommit ${JSON.stringify(packedPackage.lisaReleaseCommit)} expected ${validatedReleaseCommit}`
|
|
229
239
|
);
|
|
230
240
|
}
|
|
231
|
-
if (packedPackage.gitHead !==
|
|
241
|
+
if (packedPackage.gitHead !== validatedReleaseCommit) {
|
|
232
242
|
mismatch(
|
|
233
|
-
`packed gitHead ${JSON.stringify(packedPackage.gitHead)} expected ${
|
|
243
|
+
`packed gitHead ${JSON.stringify(packedPackage.gitHead)} expected ${validatedReleaseCommit}`
|
|
234
244
|
);
|
|
235
245
|
}
|
|
236
246
|
|
|
@@ -241,7 +251,7 @@ export function packAndValidateReleaseCandidate({
|
|
|
241
251
|
packedCertificateVersion = certificateVersion(member, "packed certificate");
|
|
242
252
|
if (packedCertificateVersion !== version) {
|
|
243
253
|
mismatch(
|
|
244
|
-
`packed certificate names ${packedCertificateVersion}, expected ${version} at release commit ${
|
|
254
|
+
`packed certificate names ${packedCertificateVersion}, expected ${version} at release commit ${validatedReleaseCommit} (${PACKED_CERTIFICATE})`
|
|
245
255
|
);
|
|
246
256
|
}
|
|
247
257
|
certificateMemberSha256 = sha256(member);
|
|
@@ -249,7 +259,7 @@ export function packAndValidateReleaseCandidate({
|
|
|
249
259
|
|
|
250
260
|
return Object.freeze({
|
|
251
261
|
version,
|
|
252
|
-
releaseCommit,
|
|
262
|
+
releaseCommit: validatedReleaseCommit,
|
|
253
263
|
certificateVersion: packedCertificateVersion,
|
|
254
264
|
tarballPath,
|
|
255
265
|
tarballSha256: sha256(tarballBytes),
|
|
@@ -46,8 +46,27 @@ here="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)"
|
|
|
46
46
|
# SessionStart hosts are fail-open, so they surface that result and still allow
|
|
47
47
|
# the agent session to continue.
|
|
48
48
|
bash "${here}/setup.sh" --phase=toolchain "$@"
|
|
49
|
+
|
|
50
|
+
# The toolchain child cannot export into this parent shell. Its durable output
|
|
51
|
+
# is linked into ~/.local/bin, so make that directory visible before the next
|
|
52
|
+
# child tries to execute the provider CLI it just installed.
|
|
53
|
+
case ":$PATH:" in
|
|
54
|
+
*":$HOME/.local/bin:"*) ;;
|
|
55
|
+
*) PATH="$HOME/.local/bin:$PATH"; export PATH ;;
|
|
56
|
+
esac
|
|
57
|
+
|
|
49
58
|
bash "${here}/setup.sh" --phase=secrets "$@"
|
|
50
59
|
|
|
60
|
+
# Materialization writes a Lisa-owned block into .profile that sources the
|
|
61
|
+
# generated environment and removes ambient AWS credential poison. The project
|
|
62
|
+
# hook is another non-login child, so load that block here and let the child
|
|
63
|
+
# inherit the exact environment materialization just produced.
|
|
64
|
+
if [ -r "$HOME/.profile" ]; then
|
|
65
|
+
# The materializer owns this runtime path.
|
|
66
|
+
# shellcheck disable=SC1090
|
|
67
|
+
. "$HOME/.profile"
|
|
68
|
+
fi
|
|
69
|
+
|
|
51
70
|
# A project hook is part of the remote toolchain contract too. It covers tools
|
|
52
71
|
# that cannot be expressed by the pinned manifest, so skipping it on a cached
|
|
53
72
|
# session can leave fresh credentials with no client capable of using them.
|
|
@@ -132,6 +132,7 @@ for candidate in \
|
|
|
132
132
|
".claude/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
133
133
|
".agents/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
134
134
|
".codex/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
135
|
+
".opencode/skills/lisa/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
135
136
|
"plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs" \
|
|
136
137
|
"node_modules/@codyswann/lisa/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs"; do
|
|
137
138
|
if [ -f "$candidate" ]; then
|
|
@@ -553,7 +553,7 @@ fi
|
|
|
553
553
|
# measured, and the honest command for such a project is still `test:cov` —
|
|
554
554
|
# slower, but answering to the floor that was configured for what it runs.
|
|
555
555
|
COVERAGE_SCRIPT="test:cov"
|
|
556
|
-
if node -e 'const s=require("./package.json").scripts||{};const u=s["test:cov:unit"];process.exit(typeof u==="string"&&u.
|
|
556
|
+
if node -e 'const s=require("./package.json").scripts||{};const u=s["test:cov:unit"];const marker=/^(?:env(?:\s+-\S+)*\s+)?(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*LISA_COVERAGE_SCOPE=unit(?:\s|$)/;process.exit(typeof u==="string"&&marker.test(u.trim())?0:1)' >/dev/null 2>&1; then
|
|
557
557
|
COVERAGE_SCRIPT="test:cov:unit"
|
|
558
558
|
fi
|
|
559
559
|
|
|
@@ -95,11 +95,11 @@ export const FAMILIES = [
|
|
|
95
95
|
* Unknown keys stay unwatched until their direction is explicit here.
|
|
96
96
|
* @type {Readonly<Record<string, "min"|"max">>}
|
|
97
97
|
*/
|
|
98
|
-
export const LIGHTHOUSE_ASSERTION_DIRECTIONS = {
|
|
98
|
+
export const LIGHTHOUSE_ASSERTION_DIRECTIONS = Object.freeze({
|
|
99
99
|
minScore: "min",
|
|
100
100
|
maxNumericValue: "max",
|
|
101
101
|
maxLength: "max",
|
|
102
|
-
};
|
|
102
|
+
});
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Extract numeric Lighthouse assertions with a direction chosen per key.
|
|
@@ -112,10 +112,22 @@ export const LIGHTHOUSE_ASSERTION_DIRECTIONS = {
|
|
|
112
112
|
*/
|
|
113
113
|
export function extractLighthouseAssertions(conf) {
|
|
114
114
|
const out = new Map();
|
|
115
|
-
const
|
|
115
|
+
const root =
|
|
116
116
|
conf && typeof conf === "object" && !Array.isArray(conf)
|
|
117
|
-
? /** @type {Record<string, unknown>} */ (conf)
|
|
117
|
+
? /** @type {Record<string, unknown>} */ (conf)
|
|
118
118
|
: undefined;
|
|
119
|
+
const ci =
|
|
120
|
+
root?.ci && typeof root.ci === "object" && !Array.isArray(root.ci)
|
|
121
|
+
? /** @type {Record<string, unknown>} */ (root.ci)
|
|
122
|
+
: undefined;
|
|
123
|
+
const assert =
|
|
124
|
+
ci?.assert && typeof ci.assert === "object" && !Array.isArray(ci.assert)
|
|
125
|
+
? /** @type {Record<string, unknown>} */ (ci.assert)
|
|
126
|
+
: undefined;
|
|
127
|
+
// Lighthouse CI's canonical shape is `ci.assert.assertions`. Keep the
|
|
128
|
+
// historical top-level shape as a compatibility lane for already-generated
|
|
129
|
+
// project configs, but never merge the two into an ambiguous hybrid.
|
|
130
|
+
const assertions = assert?.assertions ?? root?.assertions;
|
|
119
131
|
if (
|
|
120
132
|
!assertions ||
|
|
121
133
|
typeof assertions !== "object" ||
|
|
@@ -124,9 +136,21 @@ export function extractLighthouseAssertions(conf) {
|
|
|
124
136
|
return out;
|
|
125
137
|
}
|
|
126
138
|
for (const [audit, spec] of Object.entries(assertions)) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
const options =
|
|
140
|
+
Array.isArray(spec) &&
|
|
141
|
+
spec.length >= 2 &&
|
|
142
|
+
spec[1] &&
|
|
143
|
+
typeof spec[1] === "object" &&
|
|
144
|
+
!Array.isArray(spec[1])
|
|
145
|
+
? /** @type {Record<string, unknown>} */ (spec[1])
|
|
146
|
+
: spec && typeof spec === "object" && !Array.isArray(spec)
|
|
147
|
+
? /** @type {Record<string, unknown>} */ (spec)
|
|
148
|
+
: undefined;
|
|
149
|
+
if (!options) continue;
|
|
150
|
+
for (const [key, value] of Object.entries(options)) {
|
|
151
|
+
const direction = Object.hasOwn(LIGHTHOUSE_ASSERTION_DIRECTIONS, key)
|
|
152
|
+
? LIGHTHOUSE_ASSERTION_DIRECTIONS[key]
|
|
153
|
+
: undefined;
|
|
130
154
|
if (direction && typeof value === "number" && Number.isFinite(value)) {
|
|
131
155
|
out.set(`${audit}.${key}`, { value, direction });
|
|
132
156
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"format": "prettier --check . --write",
|
|
8
8
|
"test": "vitest run",
|
|
9
9
|
"test:unit": "vitest run --exclude='**/integration/**'",
|
|
10
|
-
"test:integration:lisa": "vitest run '.integration.' 'integration/'
|
|
10
|
+
"test:integration:lisa": "vitest run '.integration.' 'integration/'",
|
|
11
11
|
"test:cov": "vitest run --coverage",
|
|
12
12
|
"test:cov:unit": "LISA_COVERAGE_SCOPE=unit vitest run --coverage --exclude='**/integration/**'",
|
|
13
13
|
"test:mutation": "node scripts/lisa-mutation.mjs",
|