@codyswann/lisa 2.247.2 → 2.250.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 +5 -0
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +1102 -0
- package/dist/cli/doctor-kane.d.ts +15 -0
- package/dist/cli/doctor-kane.d.ts.map +1 -0
- package/dist/cli/doctor-kane.js +28 -0
- package/dist/cli/doctor-kane.js.map +1 -0
- package/dist/cli/doctor-worker-epoch.d.ts +11 -0
- package/dist/cli/doctor-worker-epoch.d.ts.map +1 -0
- package/dist/cli/doctor-worker-epoch.js +234 -0
- package/dist/cli/doctor-worker-epoch.js.map +1 -0
- package/dist/cli/doctor.d.ts +3 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +6 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +56 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/kane-cmd.d.ts +45 -0
- package/dist/cli/kane-cmd.d.ts.map +1 -0
- package/dist/cli/kane-cmd.js +91 -0
- package/dist/cli/kane-cmd.js.map +1 -0
- package/dist/cli/ui-lisa-version.d.ts.map +1 -1
- package/dist/cli/ui-lisa-version.js +1 -5
- package/dist/cli/ui-lisa-version.js.map +1 -1
- package/dist/core/kane-cli-parser.d.ts +9 -0
- package/dist/core/kane-cli-parser.d.ts.map +1 -0
- package/dist/core/kane-cli-parser.js +145 -0
- package/dist/core/kane-cli-parser.js.map +1 -0
- package/dist/core/kane-cli-process.d.ts +15 -0
- package/dist/core/kane-cli-process.d.ts.map +1 -0
- package/dist/core/kane-cli-process.js +77 -0
- package/dist/core/kane-cli-process.js.map +1 -0
- package/dist/core/kane-cli-types.d.ts +61 -0
- package/dist/core/kane-cli-types.d.ts.map +1 -0
- package/dist/core/kane-cli-types.js +3 -0
- package/dist/core/kane-cli-types.js.map +1 -0
- package/dist/core/kane-cli.d.ts +42 -0
- package/dist/core/kane-cli.d.ts.map +1 -0
- package/dist/core/kane-cli.js +253 -0
- package/dist/core/kane-cli.js.map +1 -0
- package/dist/core/kane-pilot-report.d.ts +21 -0
- package/dist/core/kane-pilot-report.d.ts.map +1 -0
- package/dist/core/kane-pilot-report.js +169 -0
- package/dist/core/kane-pilot-report.js.map +1 -0
- package/dist/core/kane-pilot-types.d.ts +60 -0
- package/dist/core/kane-pilot-types.d.ts.map +1 -0
- package/dist/core/kane-pilot-types.js +2 -0
- package/dist/core/kane-pilot-types.js.map +1 -0
- package/dist/core/kane-pilot.d.ts +25 -0
- package/dist/core/kane-pilot.d.ts.map +1 -0
- package/dist/core/kane-pilot.js +255 -0
- package/dist/core/kane-pilot.js.map +1 -0
- package/dist/core/project-config-kane.d.ts +27 -0
- package/dist/core/project-config-kane.d.ts.map +1 -0
- package/dist/core/project-config-kane.js +152 -0
- package/dist/core/project-config-kane.js.map +1 -0
- package/dist/core/project-config.d.ts +11 -0
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +7 -5
- package/dist/core/project-config.js.map +1 -1
- package/package.json +1 -1
- 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-codify-verification/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-kane-browser/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-kane/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-track/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa/agents/product-specialist.md +2 -0
- package/plugins/lisa/agents/quality-specialist.md +4 -1
- package/plugins/lisa/agents/verification-specialist.md +2 -2
- package/plugins/lisa/commands/improve-harness.md +6 -0
- package/plugins/lisa/commands/track.md +6 -0
- package/plugins/lisa/rules/eager/config-resolution.md +9 -0
- package/plugins/lisa/rules/eager/convergent-review.md +19 -0
- package/plugins/lisa/rules/eager/tracked-work.md +7 -0
- package/plugins/lisa/rules/eager/verification.md +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +26 -1
- package/plugins/lisa/rules/reference/convergent-review.md +69 -0
- package/plugins/lisa/rules/reference/tracked-work.md +26 -0
- package/plugins/lisa/rules/reference/verification.md +4 -2
- package/plugins/lisa/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-github-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa/skills/lisa-improve-harness/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-jira-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa/skills/lisa-kane-browser/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-linear-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa/skills/lisa-setup-kane/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa/skills/lisa-track/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa/skills/lisa-tracker-claim/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-agy/agents/product-specialist.md +2 -0
- package/plugins/lisa-agy/agents/quality-specialist.md +4 -1
- package/plugins/lisa-agy/agents/verification-specialist.md +2 -2
- package/plugins/lisa-agy/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-agy/commands/lisa/track.md +6 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-agy/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-agy/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-agy/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-agy/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-agy/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-agy/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-agy/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-agy/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +1 -0
- 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/agents/product-specialist.agent.md +2 -0
- package/plugins/lisa-copilot/agents/quality-specialist.agent.md +4 -1
- package/plugins/lisa-copilot/agents/verification-specialist.agent.md +2 -2
- package/plugins/lisa-copilot/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-copilot/commands/lisa/track.md +6 -0
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +9 -0
- package/plugins/lisa-copilot/rules/eager/convergent-review.md +19 -0
- package/plugins/lisa-copilot/rules/eager/tracked-work.md +7 -0
- package/plugins/lisa-copilot/rules/eager/verification.md +1 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +26 -1
- package/plugins/lisa-copilot/rules/reference/convergent-review.md +69 -0
- package/plugins/lisa-copilot/rules/reference/tracked-work.md +26 -0
- package/plugins/lisa-copilot/rules/reference/verification.md +4 -2
- package/plugins/lisa-copilot/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-copilot/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-copilot/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-copilot/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-copilot/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-copilot/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-copilot/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-copilot/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-copilot/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/product-specialist.md +2 -0
- package/plugins/lisa-cursor/agents/quality-specialist.md +4 -1
- package/plugins/lisa-cursor/agents/verification-specialist.md +2 -2
- package/plugins/lisa-cursor/commands/lisa/improve-harness.md +6 -0
- package/plugins/lisa-cursor/commands/lisa/track.md +6 -0
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +26 -1
- package/plugins/lisa-cursor/rules/config-resolution.mdc +9 -0
- package/plugins/lisa-cursor/rules/convergent-review-reference.mdc +74 -0
- package/plugins/lisa-cursor/rules/convergent-review.mdc +24 -0
- package/plugins/lisa-cursor/rules/tracked-work-reference.mdc +31 -0
- package/plugins/lisa-cursor/rules/tracked-work.mdc +12 -0
- package/plugins/lisa-cursor/rules/verification-reference.mdc +4 -2
- package/plugins/lisa-cursor/rules/verification.mdc +1 -1
- package/plugins/lisa-cursor/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/lisa-cursor/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/lisa-cursor/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-cursor/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-cursor/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/lisa-cursor/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/lisa-cursor/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +71 -0
- package/plugins/lisa-cursor/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-cursor/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -0
- 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/agents/product-specialist.md +2 -0
- package/plugins/src/base/agents/quality-specialist.md +4 -1
- package/plugins/src/base/agents/verification-specialist.md +2 -2
- package/plugins/src/base/commands/improve-harness.md +6 -0
- package/plugins/src/base/commands/track.md +6 -0
- package/plugins/src/base/rules/eager/config-resolution.md +9 -0
- package/plugins/src/base/rules/eager/convergent-review.md +19 -0
- package/plugins/src/base/rules/eager/tracked-work.md +7 -0
- package/plugins/src/base/rules/eager/verification.md +1 -1
- package/plugins/src/base/rules/reference/config-resolution.md +26 -1
- package/plugins/src/base/rules/reference/convergent-review.md +69 -0
- package/plugins/src/base/rules/reference/tracked-work.md +26 -0
- package/plugins/src/base/rules/reference/verification.md +4 -2
- package/plugins/src/base/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +7 -0
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +3 -0
- package/plugins/src/base/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-implement/SKILL.md +50 -14
- package/plugins/src/base/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/src/base/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/src/base/skills/lisa-linear-claim/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-parity-coderabbit/SKILL.md +10 -0
- package/plugins/src/base/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-review-local/SKILL.md +11 -0
- package/plugins/src/base/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/src/base/skills/lisa-track/SKILL.md +71 -0
- package/plugins/src/base/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/src/base/skills/lisa-use-the-product/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -0
- package/rails/copy-overwrite/lefthook.yml +10 -0
- package/scripts/lisa-work-item.mjs +5 -0
- package/typescript/copy-contents/.husky/commit-msg +9 -23
- package/typescript/copy-contents/.husky/pre-push +10 -0
- package/typescript/copy-contents/.husky/prepare-commit-msg +15 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/** Manifest validation and execution for the Kane longitudinal pilot. */
|
|
2
|
+
import { appendFile, readFile } from "node:fs/promises";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { runKane } from "./kane-cli.js";
|
|
5
|
+
import { buildKanePilotReport, DEFAULT_KANE_PILOT_THRESHOLDS, } from "./kane-pilot-report.js";
|
|
6
|
+
export { buildKanePilotReport, DEFAULT_KANE_PILOT_THRESHOLDS };
|
|
7
|
+
/**
|
|
8
|
+
* Validate an optional exterior policy review.
|
|
9
|
+
* @param value - Untrusted policy-review value
|
|
10
|
+
* @returns Valid review or undefined
|
|
11
|
+
*/
|
|
12
|
+
function parsePolicyReview(value) {
|
|
13
|
+
if (value === undefined)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
16
|
+
throw new Error("Kane pilot policyReview must be an object");
|
|
17
|
+
}
|
|
18
|
+
const review = value;
|
|
19
|
+
if (typeof review.reviewedAt !== "string" ||
|
|
20
|
+
Number.isNaN(Date.parse(review.reviewedAt))) {
|
|
21
|
+
throw new Error("Kane pilot policyReview.reviewedAt must be an ISO timestamp");
|
|
22
|
+
}
|
|
23
|
+
if (!Number.isInteger(review.incidents) || Number(review.incidents) < 0) {
|
|
24
|
+
throw new Error("Kane pilot policyReview.incidents must be a non-negative integer");
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
reviewedAt: review.reviewedAt,
|
|
28
|
+
incidents: Number(review.incidents),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate one pilot case.
|
|
33
|
+
* @param value - Untrusted case value
|
|
34
|
+
* @returns Valid pilot case
|
|
35
|
+
*/
|
|
36
|
+
function parsePilotCase(value) {
|
|
37
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
38
|
+
throw new Error("Kane pilot case must be an object");
|
|
39
|
+
}
|
|
40
|
+
const record = value;
|
|
41
|
+
for (const field of ["id", "objective", "url"]) {
|
|
42
|
+
if (typeof record[field] !== "string" || record[field].length === 0) {
|
|
43
|
+
throw new Error(`Kane pilot case ${field} must be a string`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (record.baselineSeconds !== undefined &&
|
|
47
|
+
(typeof record.baselineSeconds !== "number" || record.baselineSeconds <= 0)) {
|
|
48
|
+
throw new Error("Kane pilot baselineSeconds must be positive");
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
id: record.id,
|
|
52
|
+
objective: record.objective,
|
|
53
|
+
url: record.url,
|
|
54
|
+
...(record.baselineSeconds === undefined
|
|
55
|
+
? {}
|
|
56
|
+
: { baselineSeconds: record.baselineSeconds }),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Validate one pilot application.
|
|
61
|
+
* @param value - Untrusted application value
|
|
62
|
+
* @returns Valid pilot application
|
|
63
|
+
*/
|
|
64
|
+
function parsePilotApplication(value) {
|
|
65
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
66
|
+
throw new Error("Kane pilot application must be an object");
|
|
67
|
+
}
|
|
68
|
+
const record = value;
|
|
69
|
+
for (const field of ["name", "projectRoot", "environment"]) {
|
|
70
|
+
if (typeof record[field] !== "string" || record[field].length === 0) {
|
|
71
|
+
throw new Error(`Kane pilot application ${field} must be a string`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(record.cases) || record.cases.length === 0) {
|
|
75
|
+
throw new Error("Kane pilot application must define cases");
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: record.name,
|
|
79
|
+
projectRoot: record.projectRoot,
|
|
80
|
+
environment: record.environment,
|
|
81
|
+
cases: record.cases.map(parsePilotCase),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate an untrusted pilot manifest.
|
|
86
|
+
* @param value - Parsed manifest value
|
|
87
|
+
* @returns Valid pilot manifest
|
|
88
|
+
*/
|
|
89
|
+
export function parseKanePilotManifest(value) {
|
|
90
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
91
|
+
throw new Error("Kane pilot manifest must be an object");
|
|
92
|
+
}
|
|
93
|
+
const record = value;
|
|
94
|
+
const policyReview = parsePolicyReview(record.policyReview);
|
|
95
|
+
if (record.version !== 1)
|
|
96
|
+
throw new Error("Kane pilot version must be 1");
|
|
97
|
+
if (typeof record.startedAt !== "string" ||
|
|
98
|
+
Number.isNaN(Date.parse(record.startedAt))) {
|
|
99
|
+
throw new Error("Kane pilot startedAt must be an ISO timestamp");
|
|
100
|
+
}
|
|
101
|
+
if (typeof record.resultsFile !== "string" ||
|
|
102
|
+
record.resultsFile.length === 0 ||
|
|
103
|
+
path.isAbsolute(record.resultsFile) ||
|
|
104
|
+
record.resultsFile.split(/[\\/]/u).includes("..")) {
|
|
105
|
+
throw new Error("Kane pilot resultsFile must be a safe relative path");
|
|
106
|
+
}
|
|
107
|
+
if (!Array.isArray(record.applications) || record.applications.length < 2) {
|
|
108
|
+
throw new Error("Kane pilot requires at least two applications");
|
|
109
|
+
}
|
|
110
|
+
if (record.maximumCreditsPerRun !== undefined &&
|
|
111
|
+
(typeof record.maximumCreditsPerRun !== "number" ||
|
|
112
|
+
record.maximumCreditsPerRun <= 0)) {
|
|
113
|
+
throw new Error("maximumCreditsPerRun must be a positive number");
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
version: 1,
|
|
117
|
+
startedAt: record.startedAt,
|
|
118
|
+
resultsFile: record.resultsFile,
|
|
119
|
+
applications: record.applications.map(parsePilotApplication),
|
|
120
|
+
...(policyReview === undefined ? {} : { policyReview }),
|
|
121
|
+
...(record.maximumCreditsPerRun === undefined
|
|
122
|
+
? {}
|
|
123
|
+
: { maximumCreditsPerRun: record.maximumCreditsPerRun }),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Convert one adapter result into a longitudinal record.
|
|
128
|
+
* @param application - Pilot application
|
|
129
|
+
* @param testCase - Pilot journey
|
|
130
|
+
* @param result - Normalized adapter result
|
|
131
|
+
* @returns Durable pilot record
|
|
132
|
+
*/
|
|
133
|
+
function toPilotRecord(application, testCase, result) {
|
|
134
|
+
return {
|
|
135
|
+
timestamp: new Date().toISOString(),
|
|
136
|
+
application: application.name,
|
|
137
|
+
caseId: testCase.id,
|
|
138
|
+
outcome: result.outcome,
|
|
139
|
+
...(result.terminal?.duration === undefined
|
|
140
|
+
? {}
|
|
141
|
+
: { durationSeconds: result.terminal.duration }),
|
|
142
|
+
...(testCase.baselineSeconds === undefined
|
|
143
|
+
? {}
|
|
144
|
+
: { baselineSeconds: testCase.baselineSeconds }),
|
|
145
|
+
...(result.terminal?.credits === undefined
|
|
146
|
+
? {}
|
|
147
|
+
: { credits: result.terminal.credits }),
|
|
148
|
+
evidenceCaptured: result.evidencePack !== undefined,
|
|
149
|
+
evidenceComplete: result.evidencePack !== undefined &&
|
|
150
|
+
result.terminal?.test_url !== undefined,
|
|
151
|
+
policyIncident: false,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Parse one stored record fail-closed.
|
|
156
|
+
* @param value - Parsed JSONL value
|
|
157
|
+
* @returns Valid pilot record
|
|
158
|
+
*/
|
|
159
|
+
function parseStoredRecord(value) {
|
|
160
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
161
|
+
throw new Error("Kane pilot record must be an object");
|
|
162
|
+
}
|
|
163
|
+
const record = value;
|
|
164
|
+
const outcomes = [
|
|
165
|
+
"passed",
|
|
166
|
+
"product_failed",
|
|
167
|
+
"tool_failed",
|
|
168
|
+
"timed_out",
|
|
169
|
+
];
|
|
170
|
+
if (typeof record.timestamp !== "string" ||
|
|
171
|
+
Number.isNaN(Date.parse(record.timestamp)) ||
|
|
172
|
+
typeof record.application !== "string" ||
|
|
173
|
+
typeof record.caseId !== "string" ||
|
|
174
|
+
!outcomes.includes(record.outcome) ||
|
|
175
|
+
typeof record.evidenceComplete !== "boolean" ||
|
|
176
|
+
typeof record.policyIncident !== "boolean") {
|
|
177
|
+
throw new Error("Kane pilot record has an invalid required field");
|
|
178
|
+
}
|
|
179
|
+
for (const field of [
|
|
180
|
+
"durationSeconds",
|
|
181
|
+
"baselineSeconds",
|
|
182
|
+
"credits",
|
|
183
|
+
]) {
|
|
184
|
+
if (record[field] !== undefined && typeof record[field] !== "number") {
|
|
185
|
+
throw new Error(`Kane pilot record ${field} must be numeric`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (record.evidenceCaptured !== undefined &&
|
|
189
|
+
typeof record.evidenceCaptured !== "boolean") {
|
|
190
|
+
throw new Error("Kane pilot record evidenceCaptured must be boolean");
|
|
191
|
+
}
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Read validated JSONL records, treating an absent file as empty.
|
|
196
|
+
* @param resultsPath - Absolute results path
|
|
197
|
+
* @returns Validated records
|
|
198
|
+
*/
|
|
199
|
+
async function readRecords(resultsPath) {
|
|
200
|
+
try {
|
|
201
|
+
return (await readFile(resultsPath, "utf8"))
|
|
202
|
+
.split(/\r?\n/u)
|
|
203
|
+
.filter(line => line.trim().length > 0)
|
|
204
|
+
.map(line => parseStoredRecord(JSON.parse(line)));
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (error.code === "ENOENT")
|
|
208
|
+
return [];
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Execute each configured case once and append immutable records.
|
|
214
|
+
* @param manifestPath - Pilot manifest path
|
|
215
|
+
* @param runner - Injectable adapter runner
|
|
216
|
+
* @returns Current pilot report
|
|
217
|
+
*/
|
|
218
|
+
export async function executeKanePilot(manifestPath, runner = runKane) {
|
|
219
|
+
const absoluteManifest = path.resolve(manifestPath);
|
|
220
|
+
const manifest = parseKanePilotManifest(JSON.parse(await readFile(absoluteManifest, "utf8")));
|
|
221
|
+
const manifestDirectory = path.dirname(absoluteManifest);
|
|
222
|
+
const resultsPath = path.resolve(manifestDirectory, manifest.resultsFile);
|
|
223
|
+
if (!resultsPath.startsWith(`${manifestDirectory}${path.sep}`)) {
|
|
224
|
+
throw new Error("Kane pilot resultsFile escapes the manifest directory");
|
|
225
|
+
}
|
|
226
|
+
const cases = manifest.applications.flatMap(application => application.cases.map(testCase => ({ application, testCase })));
|
|
227
|
+
const records = await cases.reduce(async (previous, entry) => {
|
|
228
|
+
const existing = await previous;
|
|
229
|
+
const result = await runner({
|
|
230
|
+
projectRoot: path.resolve(manifestDirectory, entry.application.projectRoot),
|
|
231
|
+
environment: entry.application.environment,
|
|
232
|
+
mutation: "full",
|
|
233
|
+
objective: entry.testCase.objective,
|
|
234
|
+
url: entry.testCase.url,
|
|
235
|
+
});
|
|
236
|
+
return [
|
|
237
|
+
...existing,
|
|
238
|
+
toPilotRecord(entry.application, entry.testCase, result),
|
|
239
|
+
];
|
|
240
|
+
}, Promise.resolve([]));
|
|
241
|
+
await appendFile(resultsPath, `${records.map(record => JSON.stringify(record)).join("\n")}\n`, "utf8");
|
|
242
|
+
return await readKanePilotReport(absoluteManifest);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Read accumulated JSONL records and evaluate the adoption gates.
|
|
246
|
+
* @param manifestPath - Pilot manifest path
|
|
247
|
+
* @returns Current pilot report
|
|
248
|
+
*/
|
|
249
|
+
export async function readKanePilotReport(manifestPath) {
|
|
250
|
+
const absoluteManifest = path.resolve(manifestPath);
|
|
251
|
+
const manifest = parseKanePilotManifest(JSON.parse(await readFile(absoluteManifest, "utf8")));
|
|
252
|
+
const resultsPath = path.resolve(path.dirname(absoluteManifest), manifest.resultsFile);
|
|
253
|
+
return buildKanePilotReport(manifest, await readRecords(resultsPath), new Date());
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=kane-pilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot.js","sourceRoot":"","sources":["../../src/core/kane-pilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Validation contract for the optional Kane browser provider config. */
|
|
2
|
+
/** Kane CLI empirical-browser provider configuration. */
|
|
3
|
+
export interface KaneBrowserConfig {
|
|
4
|
+
readonly enabled?: boolean;
|
|
5
|
+
readonly version?: string;
|
|
6
|
+
readonly cloudUploadApproved?: boolean;
|
|
7
|
+
readonly allowedEnvironments?: readonly string[];
|
|
8
|
+
readonly projectId?: string;
|
|
9
|
+
readonly folderId?: string;
|
|
10
|
+
readonly timeoutSeconds?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Browser-provider configuration nested under `verification`. */
|
|
13
|
+
export interface BrowserVerificationConfig {
|
|
14
|
+
readonly kane?: KaneBrowserConfig;
|
|
15
|
+
}
|
|
16
|
+
/** Empirical verification provider configuration. */
|
|
17
|
+
export interface VerificationConfig {
|
|
18
|
+
readonly browser?: BrowserVerificationConfig;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate the optional verification tree.
|
|
22
|
+
* @param value - Untrusted verification value
|
|
23
|
+
* @param source - Config source shown in errors
|
|
24
|
+
* @returns Valid verification config or undefined
|
|
25
|
+
*/
|
|
26
|
+
export declare function validateVerificationConfig(value: unknown, source: string): VerificationConfig | undefined;
|
|
27
|
+
//# sourceMappingURL=project-config-kane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-config-kane.d.ts","sourceRoot":"","sources":["../../src/core/project-config-kane.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAkMD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,kBAAkB,GAAG,SAAS,CAqBhC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Validation contract for the optional Kane browser provider config. */
|
|
2
|
+
const PRODUCTION_ENVIRONMENTS = new Set(["prod", "production"]);
|
|
3
|
+
/**
|
|
4
|
+
* Detect ASCII control characters without a control-character regex.
|
|
5
|
+
* @param value - Candidate string
|
|
6
|
+
* @returns True when a control character is present
|
|
7
|
+
*/
|
|
8
|
+
function containsControlCharacter(value) {
|
|
9
|
+
return Array.from(value).some(character => {
|
|
10
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
11
|
+
return codePoint < 32 || codePoint === 127;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate an optional non-empty string.
|
|
16
|
+
* @param value - Untrusted field value
|
|
17
|
+
* @param source - Config source shown in errors
|
|
18
|
+
* @param field - Dotted field name
|
|
19
|
+
* @returns Valid string or undefined
|
|
20
|
+
*/
|
|
21
|
+
function optionalString(value, source, field) {
|
|
22
|
+
if (value === undefined)
|
|
23
|
+
return undefined;
|
|
24
|
+
if (typeof value !== "string" ||
|
|
25
|
+
value.trim() !== value ||
|
|
26
|
+
value.length === 0 ||
|
|
27
|
+
containsControlCharacter(value)) {
|
|
28
|
+
throw new Error(`Invalid ${field} in ${source}: expected a non-empty string`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate an optional boolean.
|
|
34
|
+
* @param value - Untrusted field value
|
|
35
|
+
* @param source - Config source shown in errors
|
|
36
|
+
* @param field - Dotted field name
|
|
37
|
+
* @returns Valid boolean or undefined
|
|
38
|
+
*/
|
|
39
|
+
function optionalBoolean(value, source, field) {
|
|
40
|
+
if (value === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
if (typeof value !== "boolean") {
|
|
43
|
+
throw new Error(`Invalid ${field} in ${source}: expected a boolean`);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validate the non-production allow-list.
|
|
49
|
+
* @param value - Untrusted allow-list
|
|
50
|
+
* @param source - Config source shown in errors
|
|
51
|
+
* @returns Valid environment names or undefined
|
|
52
|
+
*/
|
|
53
|
+
function allowedEnvironments(value, source) {
|
|
54
|
+
if (value === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
57
|
+
throw new Error(`Invalid verification.browser.kane.allowedEnvironments in ${source}: expected a non-empty string array`);
|
|
58
|
+
}
|
|
59
|
+
const environments = value.map((entry, index) => optionalString(entry, source, `verification.browser.kane.allowedEnvironments[${String(index)}]`));
|
|
60
|
+
if (environments.some(environment => environment === undefined)) {
|
|
61
|
+
throw new Error(`Invalid verification.browser.kane.allowedEnvironments in ${source}: expected strings`);
|
|
62
|
+
}
|
|
63
|
+
const normalized = environments;
|
|
64
|
+
if (normalized.some(environment => PRODUCTION_ENVIRONMENTS.has(environment.toLowerCase()))) {
|
|
65
|
+
throw new Error(`Invalid verification.browser.kane.allowedEnvironments in ${source}: production is never permitted`);
|
|
66
|
+
}
|
|
67
|
+
if (new Set(normalized).size !== normalized.length) {
|
|
68
|
+
throw new Error(`Invalid verification.browser.kane.allowedEnvironments in ${source}: duplicate values are not allowed`);
|
|
69
|
+
}
|
|
70
|
+
return normalized;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate the bounded provider timeout.
|
|
74
|
+
* @param value - Untrusted timeout value
|
|
75
|
+
* @param source - Config source shown in errors
|
|
76
|
+
* @returns Valid seconds or undefined
|
|
77
|
+
*/
|
|
78
|
+
function optionalTimeout(value, source) {
|
|
79
|
+
if (value === undefined)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (!Number.isInteger(value) || Number(value) < 1 || Number(value) > 600) {
|
|
82
|
+
throw new Error(`Invalid verification.browser.kane.timeoutSeconds in ${source}: expected an integer from 1 to 600`);
|
|
83
|
+
}
|
|
84
|
+
return Number(value);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Require an exact semantic version when a version is present.
|
|
88
|
+
* @param version - Optional provider version
|
|
89
|
+
* @param source - Config source shown in errors
|
|
90
|
+
*/
|
|
91
|
+
function assertExactVersion(version, source) {
|
|
92
|
+
if (version !== undefined && !/^\d+\.\d+\.\d+$/u.test(version)) {
|
|
93
|
+
throw new Error(`Invalid verification.browser.kane.version in ${source}: expected an exact semantic version`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validate the optional Kane provider block.
|
|
98
|
+
* @param value - Untrusted provider value
|
|
99
|
+
* @param source - Config source shown in errors
|
|
100
|
+
* @returns Valid provider config or undefined
|
|
101
|
+
*/
|
|
102
|
+
function validateKaneConfig(value, source) {
|
|
103
|
+
if (value === undefined)
|
|
104
|
+
return undefined;
|
|
105
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
106
|
+
throw new Error(`Invalid verification.browser.kane in ${source}: expected an object`);
|
|
107
|
+
}
|
|
108
|
+
const input = value;
|
|
109
|
+
const enabled = optionalBoolean(input.enabled, source, "verification.browser.kane.enabled");
|
|
110
|
+
const cloudUploadApproved = optionalBoolean(input.cloudUploadApproved, source, "verification.browser.kane.cloudUploadApproved");
|
|
111
|
+
const version = optionalString(input.version, source, "verification.browser.kane.version");
|
|
112
|
+
const environments = allowedEnvironments(input.allowedEnvironments, source);
|
|
113
|
+
const projectId = optionalString(input.projectId, source, "verification.browser.kane.projectId");
|
|
114
|
+
const folderId = optionalString(input.folderId, source, "verification.browser.kane.folderId");
|
|
115
|
+
const timeoutSeconds = optionalTimeout(input.timeoutSeconds, source);
|
|
116
|
+
assertExactVersion(version, source);
|
|
117
|
+
return {
|
|
118
|
+
...(enabled === undefined ? {} : { enabled }),
|
|
119
|
+
...(version === undefined ? {} : { version }),
|
|
120
|
+
...(cloudUploadApproved === undefined ? {} : { cloudUploadApproved }),
|
|
121
|
+
...(environments === undefined
|
|
122
|
+
? {}
|
|
123
|
+
: { allowedEnvironments: environments }),
|
|
124
|
+
...(projectId === undefined ? {} : { projectId }),
|
|
125
|
+
...(folderId === undefined ? {} : { folderId }),
|
|
126
|
+
...(timeoutSeconds === undefined ? {} : { timeoutSeconds }),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Validate the optional verification tree.
|
|
131
|
+
* @param value - Untrusted verification value
|
|
132
|
+
* @param source - Config source shown in errors
|
|
133
|
+
* @returns Valid verification config or undefined
|
|
134
|
+
*/
|
|
135
|
+
export function validateVerificationConfig(value, source) {
|
|
136
|
+
if (value === undefined)
|
|
137
|
+
return undefined;
|
|
138
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
139
|
+
throw new Error(`Invalid verification in ${source}: expected an object`);
|
|
140
|
+
}
|
|
141
|
+
const browser = value.browser;
|
|
142
|
+
if (browser === undefined)
|
|
143
|
+
return {};
|
|
144
|
+
if (browser === null ||
|
|
145
|
+
typeof browser !== "object" ||
|
|
146
|
+
Array.isArray(browser)) {
|
|
147
|
+
throw new Error(`Invalid verification.browser in ${source}: expected an object`);
|
|
148
|
+
}
|
|
149
|
+
const kane = validateKaneConfig(browser.kane, source);
|
|
150
|
+
return { browser: kane === undefined ? {} : { kane } };
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=project-config-kane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-config-kane.js","sourceRoot":"","sources":["../../src/core/project-config-kane.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type Harness } from "./config.js";
|
|
2
|
+
import { type VerificationConfig } from "./project-config-kane.js";
|
|
3
|
+
export type { BrowserVerificationConfig, KaneBrowserConfig, VerificationConfig, } from "./project-config-kane.js";
|
|
2
4
|
/** Filename of the per-project config, relative to the destination root */
|
|
3
5
|
export declare const PROJECT_CONFIG_FILENAME = ".lisa.config.json";
|
|
4
6
|
/** Default durable project-rules destination used by governance skills. */
|
|
@@ -36,6 +38,8 @@ export interface ProjectConfig {
|
|
|
36
38
|
readonly projectRulesFile?: string;
|
|
37
39
|
/** Optional overrides for the machine-managed learnings ledger. */
|
|
38
40
|
readonly learnings?: LearningsConfig;
|
|
41
|
+
/** Optional empirical verification provider configuration. */
|
|
42
|
+
readonly verification?: VerificationConfig;
|
|
39
43
|
}
|
|
40
44
|
/**
|
|
41
45
|
* Resolve the validated project-rules path from config or its default.
|
|
@@ -124,6 +128,13 @@ export declare function shouldPersistProjectConfig(params: {
|
|
|
124
128
|
* @returns The effective harness to use for this run
|
|
125
129
|
*/
|
|
126
130
|
export declare function resolveHarness(flagValue: Harness | undefined, projectConfig: ProjectConfig): Harness;
|
|
131
|
+
/**
|
|
132
|
+
* Type-guard validator for raw parsed config. Throws on invalid harness value.
|
|
133
|
+
* @param parsed - Raw value parsed from JSON (untrusted shape)
|
|
134
|
+
* @param configPath - Absolute path to the source file (used in error messages)
|
|
135
|
+
* @returns A typed ProjectConfig with only the keys we recognize
|
|
136
|
+
*/
|
|
137
|
+
export declare function validateProjectConfig(parsed: unknown, configPath: string): ProjectConfig;
|
|
127
138
|
/**
|
|
128
139
|
* Narrow an unknown value to the Harness type
|
|
129
140
|
* @param value - Untrusted value to test
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAYA,OAAO,EAML,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAYA,OAAO,EAML,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAE3E,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AAEjE;;;;;;;;;GASG;AACH,eAAO,MAAM,8BAA8B,QAG1C,CAAC;AAgCF,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAKrE;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQzE;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,aAAa,GACpB,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAQxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE3E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,GAAG,OAAO,CAQV;AA6BD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,aAAa,EAAE,aAAa,GAC3B,OAAO,CAQT;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,GACjB,aAAa,CAoBf;AA+KD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAK1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,CAWtE"}
|
|
@@ -11,6 +11,7 @@ import * as fse from "fs-extra";
|
|
|
11
11
|
import { readFile, writeFile } from "node:fs/promises";
|
|
12
12
|
import * as path from "node:path";
|
|
13
13
|
import { ACCEPTED_HARNESS_INPUTS, DEFAULT_HARNESS, HARNESS_ALIASES, HARNESS_VALUES, LEGACY_HARNESS_ALIASES, } from "./config.js";
|
|
14
|
+
import { validateVerificationConfig, } from "./project-config-kane.js";
|
|
14
15
|
/** Filename of the per-project config, relative to the destination root */
|
|
15
16
|
export const PROJECT_CONFIG_FILENAME = ".lisa.config.json";
|
|
16
17
|
/** Default durable project-rules destination used by governance skills. */
|
|
@@ -203,7 +204,7 @@ export function resolveHarness(flagValue, projectConfig) {
|
|
|
203
204
|
* @param configPath - Absolute path to the source file (used in error messages)
|
|
204
205
|
* @returns A typed ProjectConfig with only the keys we recognize
|
|
205
206
|
*/
|
|
206
|
-
function validateProjectConfig(parsed, configPath) {
|
|
207
|
+
export function validateProjectConfig(parsed, configPath) {
|
|
207
208
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
208
209
|
throw new Error(`Invalid ${PROJECT_CONFIG_FILENAME} at ${configPath}: expected JSON object`);
|
|
209
210
|
}
|
|
@@ -213,10 +214,12 @@ function validateProjectConfig(parsed, configPath) {
|
|
|
213
214
|
? undefined
|
|
214
215
|
: validateProjectRulesFile(obj.projectRulesFile, configPath);
|
|
215
216
|
const learnings = validateLearningsConfig(obj.learnings, configPath);
|
|
217
|
+
const verification = validateVerificationConfig(obj.verification, configPath);
|
|
216
218
|
return {
|
|
217
219
|
...(harness === undefined ? {} : { harness }),
|
|
218
220
|
...(projectRulesFile === undefined ? {} : { projectRulesFile }),
|
|
219
221
|
...(learnings === undefined ? {} : { learnings }),
|
|
222
|
+
...(verification === undefined ? {} : { verification }),
|
|
220
223
|
};
|
|
221
224
|
}
|
|
222
225
|
/**
|
|
@@ -388,11 +391,10 @@ export async function detectLegacyHarnessMigration(destDir) {
|
|
|
388
391
|
return undefined;
|
|
389
392
|
}
|
|
390
393
|
const raw = await readRawObject(configPath);
|
|
391
|
-
|
|
392
|
-
if (typeof value !== "string") {
|
|
394
|
+
if (typeof raw.harness !== "string") {
|
|
393
395
|
return undefined;
|
|
394
396
|
}
|
|
395
|
-
const to = LEGACY_HARNESS_ALIASES[
|
|
396
|
-
return to === undefined ? undefined : { from:
|
|
397
|
+
const to = LEGACY_HARNESS_ALIASES[raw.harness];
|
|
398
|
+
return to === undefined ? undefined : { from: raw.harness, to };
|
|
397
399
|
}
|
|
398
400
|
//# sourceMappingURL=project-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,cAAc,EACd,sBAAsB,GAEvB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.
|
|
105
|
+
"version": "2.250.0",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -51,6 +51,8 @@ Before creating anything new, find what the project already has. Use the Tool Di
|
|
|
51
51
|
|
|
52
52
|
Do NOT install a new framework if one already exists for the verification type. Use what's there.
|
|
53
53
|
|
|
54
|
+
If the empirical proof came from Kane, consume its exact objective, observable assertions, URL, and local evidence pack as inputs. Do not commit Kane `_test.md` recordings, generated code, or auto-healed selectors as the authoritative regression. Encode the same behavior in the project's existing native runner under the deterministic rules below.
|
|
55
|
+
|
|
54
56
|
### 2. Map verification type → framework
|
|
55
57
|
|
|
56
58
|
| Verification type | Preferred framework (use whichever the project already has) |
|
|
@@ -66,6 +66,13 @@ as applicable to the current repo:
|
|
|
66
66
|
7. **Optional wiki delegation** — when a repo-local `wiki/` exists, either summarize the
|
|
67
67
|
specialized `lisa-wiki-doctor` verdict or explicitly report that deeper wiki checks are
|
|
68
68
|
available there. The base doctor stays narrower than full wiki migration enforcement.
|
|
69
|
+
8. **Optional Kane browser provider** — when `verification.browser.kane.enabled` is true, run the
|
|
70
|
+
Lisa-owned readiness probe. Require explicit cloud-upload approval, the contract-tested exact
|
|
71
|
+
version, a non-production environment allow-list, local Chrome/Chromium, Test Manager
|
|
72
|
+
project/folder targeting, `whoami` authentication, and nonzero/observable credit readiness.
|
|
73
|
+
Report missing executable/browser, auth failure, wrong target, zero credits, and control-plane
|
|
74
|
+
failure separately. If Kane is not enabled, report an informational `OK`/not enabled rather than
|
|
75
|
+
probing or installing it.
|
|
69
76
|
|
|
70
77
|
If a check family is not applicable to the current repo, report `SKIP` with the reason.
|
|
71
78
|
|