@codyswann/lisa 2.247.3 → 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.d.ts +3 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +4 -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,21 @@
|
|
|
1
|
+
import type { KanePilotManifest, KanePilotRecord, KanePilotReport } from "./kane-pilot-types.js";
|
|
2
|
+
/** Default thresholds from Lisa's approved Kane integration plan. */
|
|
3
|
+
export declare const DEFAULT_KANE_PILOT_THRESHOLDS: Readonly<{
|
|
4
|
+
minimumRuns: 50;
|
|
5
|
+
minimumDays: 30;
|
|
6
|
+
evidenceCapturePercent: 90;
|
|
7
|
+
maximumProviderFailurePercent: 5;
|
|
8
|
+
maximumInconsistentVerdictPercent: 5;
|
|
9
|
+
minimumTimeReductionPercent: 30;
|
|
10
|
+
evidenceCompletenessPercent: 95;
|
|
11
|
+
maximumPolicyIncidents: 0;
|
|
12
|
+
}>;
|
|
13
|
+
/**
|
|
14
|
+
* Compute the collecting, adopt, or reject pilot verdict.
|
|
15
|
+
* @param manifest - Validated pilot manifest
|
|
16
|
+
* @param records - Validated accumulated records
|
|
17
|
+
* @param now - Evaluation time
|
|
18
|
+
* @returns Pilot report
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildKanePilotReport(manifest: KanePilotManifest, records: readonly KanePilotRecord[], now: Date): KanePilotReport;
|
|
21
|
+
//# sourceMappingURL=kane-pilot-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot-report.d.ts","sourceRoot":"","sources":["../../src/core/kane-pilot-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,qEAAqE;AACrE,eAAO,MAAM,6BAA6B;;;;;;;;;EASxC,CAAC;AA0KH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,GAAG,EAAE,IAAI,GACR,eAAe,CA8CjB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/** Default thresholds from Lisa's approved Kane integration plan. */
|
|
2
|
+
export const DEFAULT_KANE_PILOT_THRESHOLDS = Object.freeze({
|
|
3
|
+
minimumRuns: 50,
|
|
4
|
+
minimumDays: 30,
|
|
5
|
+
evidenceCapturePercent: 90,
|
|
6
|
+
maximumProviderFailurePercent: 5,
|
|
7
|
+
maximumInconsistentVerdictPercent: 5,
|
|
8
|
+
minimumTimeReductionPercent: 30,
|
|
9
|
+
evidenceCompletenessPercent: 95,
|
|
10
|
+
maximumPolicyIncidents: 0,
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Calculate a count as a bounded percentage.
|
|
14
|
+
* @param count - Matching record count
|
|
15
|
+
* @param total - Total record count
|
|
16
|
+
* @returns Percentage rounded to two decimals
|
|
17
|
+
*/
|
|
18
|
+
function percentage(count, total) {
|
|
19
|
+
return total === 0 ? 0 : Number(((count / total) * 100).toFixed(2));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Calculate the median of an ordered or unordered numeric sample.
|
|
23
|
+
* @param values - Numeric sample
|
|
24
|
+
* @returns Median or undefined for an empty sample
|
|
25
|
+
*/
|
|
26
|
+
function median(values) {
|
|
27
|
+
if (values.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
const ordered = [...values].sort((left, right) => left - right);
|
|
30
|
+
const middle = Math.floor(ordered.length / 2);
|
|
31
|
+
if (ordered.length % 2 === 1)
|
|
32
|
+
return ordered[middle];
|
|
33
|
+
return (ordered[middle - 1] + ordered[middle]) / 2;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Group records by application and case without mutable accumulator state.
|
|
37
|
+
* @param records - Pilot records
|
|
38
|
+
* @returns Outcome/count observations per case
|
|
39
|
+
*/
|
|
40
|
+
function caseObservations(records) {
|
|
41
|
+
const keys = [
|
|
42
|
+
...new Set(records.map(record => `${record.application}\u0000${record.caseId}`)),
|
|
43
|
+
];
|
|
44
|
+
return keys.map(key => {
|
|
45
|
+
const matching = records.filter(record => `${record.application}\u0000${record.caseId}` === key);
|
|
46
|
+
return {
|
|
47
|
+
outcomes: new Set(matching.map(record => record.outcome)),
|
|
48
|
+
count: matching.length,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Calculate every quantitative pilot metric.
|
|
54
|
+
* @param records - Append-only pilot records
|
|
55
|
+
* @param manifest - Pilot policy-review and budget configuration
|
|
56
|
+
* @returns Aggregate metrics
|
|
57
|
+
*/
|
|
58
|
+
function calculateMetrics(records, manifest) {
|
|
59
|
+
const total = records.length;
|
|
60
|
+
const observations = caseObservations(records);
|
|
61
|
+
const reductions = records
|
|
62
|
+
.filter(record => record.durationSeconds !== undefined &&
|
|
63
|
+
record.baselineSeconds !== undefined)
|
|
64
|
+
.map(record => (1 -
|
|
65
|
+
record.durationSeconds /
|
|
66
|
+
record.baselineSeconds) *
|
|
67
|
+
100);
|
|
68
|
+
const credits = records
|
|
69
|
+
.map(record => record.credits)
|
|
70
|
+
.filter((credit) => credit !== undefined);
|
|
71
|
+
const medianReduction = median(reductions);
|
|
72
|
+
return {
|
|
73
|
+
evidenceCapturePercent: percentage(records.filter(record => record.evidenceCaptured ?? record.evidenceComplete).length, total),
|
|
74
|
+
providerFailurePercent: percentage(records.filter(record => ["tool_failed", "timed_out"].includes(record.outcome)).length, total),
|
|
75
|
+
inconsistentVerdictPercent: percentage(observations.filter(observation => observation.outcomes.size > 1).length, observations.length),
|
|
76
|
+
evidenceCompletenessPercent: percentage(records.filter(record => record.evidenceComplete).length, total),
|
|
77
|
+
policyIncidents: Math.max(records.filter(record => record.policyIncident).length, manifest.policyReview?.incidents ?? 0),
|
|
78
|
+
...(medianReduction === undefined
|
|
79
|
+
? {}
|
|
80
|
+
: { timeReductionPercent: Number(medianReduction.toFixed(2)) }),
|
|
81
|
+
...(credits.length === 0
|
|
82
|
+
? {}
|
|
83
|
+
: {
|
|
84
|
+
averageCreditsPerRun: Number((credits.reduce((sum, credit) => sum + credit, 0) / credits.length).toFixed(2)),
|
|
85
|
+
}),
|
|
86
|
+
hasRepeatedCaseObservation: observations.length > 0 &&
|
|
87
|
+
observations.every(observation => observation.count >= 2),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* List failed adoption thresholds.
|
|
92
|
+
* @param manifest - Pilot budget configuration
|
|
93
|
+
* @param metrics - Calculated metrics
|
|
94
|
+
* @returns Human-readable failed gates
|
|
95
|
+
*/
|
|
96
|
+
function failureReasons(manifest, metrics) {
|
|
97
|
+
return [
|
|
98
|
+
metrics.evidenceCapturePercent < 90
|
|
99
|
+
? "evidence capture below 90%"
|
|
100
|
+
: undefined,
|
|
101
|
+
metrics.providerFailurePercent > 5
|
|
102
|
+
? "provider failure rate above 5%"
|
|
103
|
+
: undefined,
|
|
104
|
+
metrics.inconsistentVerdictPercent > 5
|
|
105
|
+
? "inconsistent verdict rate above 5%"
|
|
106
|
+
: undefined,
|
|
107
|
+
metrics.timeReductionPercent !== undefined &&
|
|
108
|
+
metrics.timeReductionPercent < 30
|
|
109
|
+
? "median workflow time reduction below 30%"
|
|
110
|
+
: undefined,
|
|
111
|
+
metrics.evidenceCompletenessPercent < 95
|
|
112
|
+
? "evidence completeness below 95%"
|
|
113
|
+
: undefined,
|
|
114
|
+
metrics.policyIncidents > 0 ? "policy incidents detected" : undefined,
|
|
115
|
+
metrics.averageCreditsPerRun !== undefined &&
|
|
116
|
+
manifest.maximumCreditsPerRun !== undefined &&
|
|
117
|
+
metrics.averageCreditsPerRun > manifest.maximumCreditsPerRun
|
|
118
|
+
? "average credit usage exceeds the manifest budget"
|
|
119
|
+
: undefined,
|
|
120
|
+
].filter((reason) => reason !== undefined);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Compute the collecting, adopt, or reject pilot verdict.
|
|
124
|
+
* @param manifest - Validated pilot manifest
|
|
125
|
+
* @param records - Validated accumulated records
|
|
126
|
+
* @param now - Evaluation time
|
|
127
|
+
* @returns Pilot report
|
|
128
|
+
*/
|
|
129
|
+
export function buildKanePilotReport(manifest, records, now) {
|
|
130
|
+
const daysElapsed = Math.max(0, Math.floor((now.getTime() - Date.parse(manifest.startedAt)) / (24 * 60 * 60 * 1000)));
|
|
131
|
+
const metrics = calculateMetrics(records, manifest);
|
|
132
|
+
const failures = failureReasons(manifest, metrics);
|
|
133
|
+
const policyReviewMature = manifest.policyReview !== undefined &&
|
|
134
|
+
Date.parse(manifest.policyReview.reviewedAt) <= now.getTime() &&
|
|
135
|
+
Date.parse(manifest.policyReview.reviewedAt) -
|
|
136
|
+
Date.parse(manifest.startedAt) >=
|
|
137
|
+
DEFAULT_KANE_PILOT_THRESHOLDS.minimumDays * 24 * 60 * 60 * 1000;
|
|
138
|
+
const collecting = daysElapsed < DEFAULT_KANE_PILOT_THRESHOLDS.minimumDays ||
|
|
139
|
+
records.length < DEFAULT_KANE_PILOT_THRESHOLDS.minimumRuns ||
|
|
140
|
+
!metrics.hasRepeatedCaseObservation ||
|
|
141
|
+
!policyReviewMature;
|
|
142
|
+
return {
|
|
143
|
+
verdict: collecting
|
|
144
|
+
? "collecting"
|
|
145
|
+
: failures.length === 0
|
|
146
|
+
? "adopt"
|
|
147
|
+
: "reject",
|
|
148
|
+
reasons: collecting
|
|
149
|
+
? [
|
|
150
|
+
`collect until at least ${String(DEFAULT_KANE_PILOT_THRESHOLDS.minimumDays)} days, ${String(DEFAULT_KANE_PILOT_THRESHOLDS.minimumRuns)} runs, two observations per case, and a mature exterior policy review`,
|
|
151
|
+
...failures,
|
|
152
|
+
]
|
|
153
|
+
: failures,
|
|
154
|
+
daysElapsed,
|
|
155
|
+
totalRuns: records.length,
|
|
156
|
+
evidenceCapturePercent: metrics.evidenceCapturePercent,
|
|
157
|
+
providerFailurePercent: metrics.providerFailurePercent,
|
|
158
|
+
inconsistentVerdictPercent: metrics.inconsistentVerdictPercent,
|
|
159
|
+
evidenceCompletenessPercent: metrics.evidenceCompletenessPercent,
|
|
160
|
+
policyIncidents: metrics.policyIncidents,
|
|
161
|
+
...(metrics.timeReductionPercent === undefined
|
|
162
|
+
? {}
|
|
163
|
+
: { timeReductionPercent: metrics.timeReductionPercent }),
|
|
164
|
+
...(metrics.averageCreditsPerRun === undefined
|
|
165
|
+
? {}
|
|
166
|
+
: { averageCreditsPerRun: metrics.averageCreditsPerRun }),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=kane-pilot-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot-report.js","sourceRoot":"","sources":["../../src/core/kane-pilot-report.ts"],"names":[],"mappings":"AAQA,qEAAqE;AACrE,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IACzD,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,sBAAsB,EAAE,EAAE;IAC1B,6BAA6B,EAAE,CAAC;IAChC,iCAAiC,EAAE,CAAC;IACpC,2BAA2B,EAAE,EAAE;IAC/B,2BAA2B,EAAE,EAAE;IAC/B,sBAAsB,EAAE,CAAC;CAC1B,CAAC,CAAC;AAcH;;;;;GAKG;AACH,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa;IAC9C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,MAAyB;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,CAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAY,GAAI,OAAO,CAAC,MAAM,CAAY,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,OAAmC;IAI3D,MAAM,IAAI,GAAG;QACX,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CACrE;KACF,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,CAChE,CAAC;QACF,OAAO;YACL,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzD,KAAK,EAAE,QAAQ,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,OAAmC,EACnC,QAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO;SACvB,MAAM,CACL,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,eAAe,KAAK,SAAS;QACpC,MAAM,CAAC,eAAe,KAAK,SAAS,CACvC;SACA,GAAG,CACF,MAAM,CAAC,EAAE,CACP,CAAC,CAAC;QACC,MAAM,CAAC,eAA0B;YAC/B,MAAM,CAAC,eAA0B,CAAC;QACvC,GAAG,CACN,CAAC;IACJ,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7B,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO;QACL,sBAAsB,EAAE,UAAU,CAChC,OAAO,CAAC,MAAM,CACZ,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAC7D,CAAC,MAAM,EACR,KAAK,CACN;QACD,sBAAsB,EAAE,UAAU,CAChC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACtB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CACtD,CAAC,MAAM,EACR,KAAK,CACN;QACD,0BAA0B,EAAE,UAAU,CACpC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EACxE,YAAY,CAAC,MAAM,CACpB;QACD,2BAA2B,EAAE,UAAU,CACrC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EACxD,KAAK,CACN;QACD,eAAe,EAAE,IAAI,CAAC,GAAG,CACvB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,EACtD,QAAQ,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,CACtC;QACD,GAAG,CAAC,eAAe,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,oBAAoB,EAAE,MAAM,CAC1B,CACE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAClE,CAAC,OAAO,CAAC,CAAC,CAAC,CACb;aACF,CAAC;QACN,0BAA0B,EACxB,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,QAA2B,EAC3B,OAAqB;IAErB,OAAO;QACL,OAAO,CAAC,sBAAsB,GAAG,EAAE;YACjC,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,SAAS;QACb,OAAO,CAAC,sBAAsB,GAAG,CAAC;YAChC,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,SAAS;QACb,OAAO,CAAC,0BAA0B,GAAG,CAAC;YACpC,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,SAAS;QACb,OAAO,CAAC,oBAAoB,KAAK,SAAS;YAC1C,OAAO,CAAC,oBAAoB,GAAG,EAAE;YAC/B,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,SAAS;QACb,OAAO,CAAC,2BAA2B,GAAG,EAAE;YACtC,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,SAAS;QACb,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS;QACrE,OAAO,CAAC,oBAAoB,KAAK,SAAS;YAC1C,QAAQ,CAAC,oBAAoB,KAAK,SAAS;YAC3C,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB;YAC1D,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,SAAS;KACd,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA2B,EAC3B,OAAmC,EACnC,GAAS;IAET,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,KAAK,CACR,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CACzE,CACF,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,kBAAkB,GACtB,QAAQ,CAAC,YAAY,KAAK,SAAS;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE;QAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9B,6BAA6B,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACpE,MAAM,UAAU,GACd,WAAW,GAAG,6BAA6B,CAAC,WAAW;QACvD,OAAO,CAAC,MAAM,GAAG,6BAA6B,CAAC,WAAW;QAC1D,CAAC,OAAO,CAAC,0BAA0B;QACnC,CAAC,kBAAkB,CAAC;IACtB,OAAO;QACL,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACrB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ;QACd,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC;gBACE,0BAA0B,MAAM,CAAC,6BAA6B,CAAC,WAAW,CAAC,UAAU,MAAM,CAAC,6BAA6B,CAAC,WAAW,CAAC,uEAAuE;gBAC7M,GAAG,QAAQ;aACZ;YACH,CAAC,CAAC,QAAQ;QACZ,WAAW;QACX,SAAS,EAAE,OAAO,CAAC,MAAM;QACzB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,0BAA0B,EAAE,OAAO,CAAC,0BAA0B;QAC9D,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;QAChE,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,GAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,SAAS;YAC5C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,SAAS;YAC5C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** Durable manifest, record, and report types for the Kane pilot. */
|
|
2
|
+
import type { KaneOutcome } from "./kane-cli.js";
|
|
3
|
+
/** One repeatable pilot journey. */
|
|
4
|
+
export interface KanePilotCase {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly objective: string;
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly baselineSeconds?: number;
|
|
9
|
+
}
|
|
10
|
+
/** One disposable downstream application participating in the pilot. */
|
|
11
|
+
export interface KanePilotApplication {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly projectRoot: string;
|
|
14
|
+
readonly environment: string;
|
|
15
|
+
readonly cases: readonly KanePilotCase[];
|
|
16
|
+
}
|
|
17
|
+
/** Exterior review of security, privacy, and policy incidents. */
|
|
18
|
+
export interface KanePilotPolicyReview {
|
|
19
|
+
readonly reviewedAt: string;
|
|
20
|
+
readonly incidents: number;
|
|
21
|
+
}
|
|
22
|
+
/** Checked-in pilot manifest. */
|
|
23
|
+
export interface KanePilotManifest {
|
|
24
|
+
readonly version: 1;
|
|
25
|
+
readonly startedAt: string;
|
|
26
|
+
readonly applications: readonly KanePilotApplication[];
|
|
27
|
+
readonly resultsFile: string;
|
|
28
|
+
readonly maximumCreditsPerRun?: number;
|
|
29
|
+
readonly policyReview?: KanePilotPolicyReview;
|
|
30
|
+
}
|
|
31
|
+
/** Append-only record for one case execution. */
|
|
32
|
+
export interface KanePilotRecord {
|
|
33
|
+
readonly timestamp: string;
|
|
34
|
+
readonly application: string;
|
|
35
|
+
readonly caseId: string;
|
|
36
|
+
readonly outcome: KaneOutcome;
|
|
37
|
+
readonly durationSeconds?: number;
|
|
38
|
+
readonly baselineSeconds?: number;
|
|
39
|
+
readonly credits?: number;
|
|
40
|
+
readonly evidenceCaptured?: boolean;
|
|
41
|
+
readonly evidenceComplete: boolean;
|
|
42
|
+
readonly policyIncident: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** Pilot adoption status. */
|
|
45
|
+
export type KanePilotVerdict = "collecting" | "adopt" | "reject";
|
|
46
|
+
/** Aggregated metrics and gate verdict. */
|
|
47
|
+
export interface KanePilotReport {
|
|
48
|
+
readonly verdict: KanePilotVerdict;
|
|
49
|
+
readonly reasons: readonly string[];
|
|
50
|
+
readonly daysElapsed: number;
|
|
51
|
+
readonly totalRuns: number;
|
|
52
|
+
readonly evidenceCapturePercent: number;
|
|
53
|
+
readonly providerFailurePercent: number;
|
|
54
|
+
readonly inconsistentVerdictPercent: number;
|
|
55
|
+
readonly timeReductionPercent?: number;
|
|
56
|
+
readonly evidenceCompletenessPercent: number;
|
|
57
|
+
readonly policyIncidents: number;
|
|
58
|
+
readonly averageCreditsPerRun?: number;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=kane-pilot-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot-types.d.ts","sourceRoot":"","sources":["../../src/core/kane-pilot-types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C;AAED,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,6BAA6B;AAC7B,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjE,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot-types.js","sourceRoot":"","sources":["../../src/core/kane-pilot-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { runKane } from "./kane-cli.js";
|
|
2
|
+
import { buildKanePilotReport, DEFAULT_KANE_PILOT_THRESHOLDS } from "./kane-pilot-report.js";
|
|
3
|
+
import type { KanePilotManifest, KanePilotReport } from "./kane-pilot-types.js";
|
|
4
|
+
export { buildKanePilotReport, DEFAULT_KANE_PILOT_THRESHOLDS };
|
|
5
|
+
export type { KanePilotApplication, KanePilotCase, KanePilotManifest, KanePilotPolicyReview, KanePilotRecord, KanePilotReport, KanePilotVerdict, } from "./kane-pilot-types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Validate an untrusted pilot manifest.
|
|
8
|
+
* @param value - Parsed manifest value
|
|
9
|
+
* @returns Valid pilot manifest
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseKanePilotManifest(value: unknown): KanePilotManifest;
|
|
12
|
+
/**
|
|
13
|
+
* Execute each configured case once and append immutable records.
|
|
14
|
+
* @param manifestPath - Pilot manifest path
|
|
15
|
+
* @param runner - Injectable adapter runner
|
|
16
|
+
* @returns Current pilot report
|
|
17
|
+
*/
|
|
18
|
+
export declare function executeKanePilot(manifestPath: string, runner?: typeof runKane): Promise<KanePilotReport>;
|
|
19
|
+
/**
|
|
20
|
+
* Read accumulated JSONL records and evaluate the adoption gates.
|
|
21
|
+
* @param manifestPath - Pilot manifest path
|
|
22
|
+
* @returns Current pilot report
|
|
23
|
+
*/
|
|
24
|
+
export declare function readKanePilotReport(manifestPath: string): Promise<KanePilotReport>;
|
|
25
|
+
//# sourceMappingURL=kane-pilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-pilot.d.ts","sourceRoot":"","sources":["../../src/core/kane-pilot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAwC,MAAM,eAAe,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAGV,iBAAiB,EAGjB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,CAAC;AAC/D,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAyF/B;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAyCxE;AAoGD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,OAAiB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAuC1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC,CAc1B"}
|
|
@@ -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"}
|