@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,253 @@
|
|
|
1
|
+
/** Lisa-owned policy adapter for TestMu Kane CLI. */
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { readProjectConfig, validateProjectConfig, } from "./project-config.js";
|
|
6
|
+
import { parseKaneResult } from "./kane-cli-parser.js";
|
|
7
|
+
import { isChromeAvailable, runKaneCommand } from "./kane-cli-process.js";
|
|
8
|
+
export { parseKaneResult } from "./kane-cli-parser.js";
|
|
9
|
+
export { isChromeAvailable, runKaneCommand } from "./kane-cli-process.js";
|
|
10
|
+
/** Kane CLI version covered by Lisa's adapter contract tests. */
|
|
11
|
+
export const SUPPORTED_KANE_VERSION = "0.6.3";
|
|
12
|
+
/**
|
|
13
|
+
* Merge committed and local Kane config using per-key local precedence.
|
|
14
|
+
* @param projectRoot - Downstream project root
|
|
15
|
+
* @returns Effective optional provider config
|
|
16
|
+
*/
|
|
17
|
+
export async function readEffectiveKaneConfig(projectRoot) {
|
|
18
|
+
const committed = (await readProjectConfig(projectRoot)).verification?.browser
|
|
19
|
+
?.kane;
|
|
20
|
+
const localPath = path.join(projectRoot, ".lisa.config.local.json");
|
|
21
|
+
if (!existsSync(localPath))
|
|
22
|
+
return committed;
|
|
23
|
+
const parsed = JSON.parse(await readFile(localPath, "utf8"));
|
|
24
|
+
const local = validateProjectConfig(parsed, localPath).verification?.browser
|
|
25
|
+
?.kane;
|
|
26
|
+
return local === undefined ? committed : { ...committed, ...local };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Assert that a request satisfies Lisa's hard Kane safety gate.
|
|
30
|
+
* @param config - Effective provider config
|
|
31
|
+
* @param request - Environment and mutation policy
|
|
32
|
+
*/
|
|
33
|
+
export function assertKaneRunAllowed(config, request) {
|
|
34
|
+
if (config?.enabled !== true) {
|
|
35
|
+
throw new Error("Kane CLI is not enabled for this project");
|
|
36
|
+
}
|
|
37
|
+
if (config.cloudUploadApproved !== true) {
|
|
38
|
+
throw new Error("Kane CLI cloud upload has not been approved for this project");
|
|
39
|
+
}
|
|
40
|
+
if (config.version !== SUPPORTED_KANE_VERSION) {
|
|
41
|
+
throw new Error(`Kane CLI version must be ${SUPPORTED_KANE_VERSION}; configured ${config.version ?? "none"}`);
|
|
42
|
+
}
|
|
43
|
+
if (!config.allowedEnvironments?.includes(request.environment) ||
|
|
44
|
+
["prod", "production"].includes(request.environment.toLowerCase())) {
|
|
45
|
+
throw new Error(`Kane CLI is not allowed in environment ${JSON.stringify(request.environment)}`);
|
|
46
|
+
}
|
|
47
|
+
if (request.mutation !== "full") {
|
|
48
|
+
throw new Error("Kane CLI requires Lisa mutation policy 'full' during the initial provider rollout");
|
|
49
|
+
}
|
|
50
|
+
if (config.projectId === undefined) {
|
|
51
|
+
throw new Error("Kane CLI requires a configured Test Manager projectId");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build the fixed provider argument vector.
|
|
56
|
+
* @param request - Validated run request
|
|
57
|
+
* @param config - Effective provider config
|
|
58
|
+
* @returns Kane argument vector
|
|
59
|
+
*/
|
|
60
|
+
function buildRunArguments(request, config) {
|
|
61
|
+
return [
|
|
62
|
+
"run",
|
|
63
|
+
request.objective,
|
|
64
|
+
"--agent",
|
|
65
|
+
"--headless",
|
|
66
|
+
"--timeout",
|
|
67
|
+
String(config.timeoutSeconds ?? 120),
|
|
68
|
+
"--max-steps",
|
|
69
|
+
String(request.maxSteps ?? 30),
|
|
70
|
+
...(request.url === undefined ? [] : ["--url", request.url]),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Execute a run after asynchronous config resolution.
|
|
75
|
+
* @param request - Objective and resolved Lisa policy context
|
|
76
|
+
* @param config - Effective provider config
|
|
77
|
+
* @param runner - Fixed-argv process runner
|
|
78
|
+
* @returns Normalized provider result
|
|
79
|
+
*/
|
|
80
|
+
async function executeKaneRun(request, config, runner) {
|
|
81
|
+
const timeoutSeconds = config?.timeoutSeconds ?? 120;
|
|
82
|
+
// eslint-disable-next-line no-restricted-syntax -- child inherits existing auth without logging values
|
|
83
|
+
const env = { ...process.env, KANE_CLI_USER_AGENT: "lisa" };
|
|
84
|
+
assertKaneRunAllowed(config, request);
|
|
85
|
+
if (request.objective.trim().length === 0) {
|
|
86
|
+
throw new Error("Kane CLI objective must not be empty");
|
|
87
|
+
}
|
|
88
|
+
if (request.maxSteps !== undefined &&
|
|
89
|
+
(!Number.isInteger(request.maxSteps) ||
|
|
90
|
+
request.maxSteps < 1 ||
|
|
91
|
+
request.maxSteps > 100)) {
|
|
92
|
+
throw new Error("Kane CLI maxSteps must be an integer from 1 to 100");
|
|
93
|
+
}
|
|
94
|
+
return parseKaneResult(await runner("kane-cli", buildRunArguments(request, config), {
|
|
95
|
+
cwd: request.projectRoot,
|
|
96
|
+
timeoutMs: (timeoutSeconds + 15) * 1000,
|
|
97
|
+
env,
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Run one policy-approved Kane browser objective.
|
|
102
|
+
* @param request - Objective and resolved Lisa policy context
|
|
103
|
+
* @param runner - Injectable fixed-argv process runner
|
|
104
|
+
* @returns Normalized provider result
|
|
105
|
+
*/
|
|
106
|
+
export async function runKane(request, runner = runKaneCommand) {
|
|
107
|
+
const config = await readEffectiveKaneConfig(request.projectRoot);
|
|
108
|
+
return await executeKaneRun(request, config, runner);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Return a failed readiness result for an unknown error.
|
|
112
|
+
* @param error - Unknown caught value
|
|
113
|
+
* @returns Failed readiness result
|
|
114
|
+
*/
|
|
115
|
+
function readinessError(error) {
|
|
116
|
+
return {
|
|
117
|
+
status: "fail",
|
|
118
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Evaluate config-only readiness policy.
|
|
123
|
+
* @param config - Enabled effective provider config
|
|
124
|
+
* @returns Failure result or undefined
|
|
125
|
+
*/
|
|
126
|
+
function policyReadinessFailure(config) {
|
|
127
|
+
try {
|
|
128
|
+
assertKaneRunAllowed(config, {
|
|
129
|
+
environment: config.allowedEnvironments?.[0] ?? "",
|
|
130
|
+
mutation: "full",
|
|
131
|
+
});
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return readinessError(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Verify the configured Test Manager target.
|
|
140
|
+
* @param config - Effective provider config
|
|
141
|
+
* @param output - `config show` output
|
|
142
|
+
* @returns Failure detail or undefined
|
|
143
|
+
*/
|
|
144
|
+
function targetFailure(config, output) {
|
|
145
|
+
return [config.projectId, config.folderId]
|
|
146
|
+
.filter((expected) => expected !== undefined)
|
|
147
|
+
.find(expected => !output.includes(expected));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse a numeric credit balance from supported human-readable output forms.
|
|
151
|
+
* @param output - Kane balance output
|
|
152
|
+
* @returns Numeric credits or undefined when not observable
|
|
153
|
+
*/
|
|
154
|
+
function parseCreditBalance(output) {
|
|
155
|
+
const balanceLine = output
|
|
156
|
+
.split(/\r?\n/u)
|
|
157
|
+
.find(line => line.toLowerCase().includes("balance"));
|
|
158
|
+
const balanceFirst = balanceLine === undefined
|
|
159
|
+
? undefined
|
|
160
|
+
: /-?\d+(?:\.\d+)?/u.exec(balanceLine)?.[0];
|
|
161
|
+
return balanceFirst === undefined ? undefined : Number(balanceFirst);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Interpret the final account-balance readiness probe.
|
|
165
|
+
* @param balance - Captured balance command
|
|
166
|
+
* @param projectId - Expected Test Manager project
|
|
167
|
+
* @returns Final readiness result
|
|
168
|
+
*/
|
|
169
|
+
function balanceReadiness(balance, projectId) {
|
|
170
|
+
const credits = parseCreditBalance(balance.stdout);
|
|
171
|
+
if (balance.exitCode !== 0) {
|
|
172
|
+
return {
|
|
173
|
+
status: "warn",
|
|
174
|
+
detail: "Kane CLI is authenticated and configured, but balance could not be verified",
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (credits === undefined) {
|
|
178
|
+
return {
|
|
179
|
+
status: "warn",
|
|
180
|
+
detail: "Kane CLI is authenticated and configured, but its credit balance could not be parsed",
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (credits <= 0) {
|
|
184
|
+
return {
|
|
185
|
+
status: "fail",
|
|
186
|
+
detail: "Kane CLI account has no available credits",
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
status: "ready",
|
|
191
|
+
detail: `Kane CLI ${SUPPORTED_KANE_VERSION} authenticated for project ${projectId}`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Run install, version, auth, target, and balance readiness probes.
|
|
196
|
+
* @param projectRoot - Downstream project root
|
|
197
|
+
* @param runner - Injectable process runner
|
|
198
|
+
* @param chromeAvailable - Injectable host-browser probe
|
|
199
|
+
* @returns Readiness status for doctor and setup
|
|
200
|
+
*/
|
|
201
|
+
export async function probeKaneReadiness(projectRoot, runner = runKaneCommand, chromeAvailable = isChromeAvailable) {
|
|
202
|
+
const config = await readEffectiveKaneConfig(projectRoot);
|
|
203
|
+
const policyFailure = config?.enabled === true ? policyReadinessFailure(config) : undefined;
|
|
204
|
+
if (config?.enabled !== true) {
|
|
205
|
+
return { status: "disabled", detail: "Kane CLI provider is not enabled" };
|
|
206
|
+
}
|
|
207
|
+
if (policyFailure !== undefined)
|
|
208
|
+
return policyFailure;
|
|
209
|
+
if (!chromeAvailable()) {
|
|
210
|
+
return {
|
|
211
|
+
status: "fail",
|
|
212
|
+
detail: "Kane CLI requires Google Chrome or Chromium; install it or set CHROME_PATH",
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// eslint-disable-next-line no-restricted-syntax -- read-only probes inherit existing auth/config
|
|
216
|
+
const env = { ...process.env, KANE_CLI_USER_AGENT: "lisa-doctor" };
|
|
217
|
+
const options = { cwd: projectRoot, timeoutMs: 15_000, env };
|
|
218
|
+
const version = await runner("kane-cli", ["--version"], options);
|
|
219
|
+
const observedVersion = /\b\d+\.\d+\.\d+\b/u.exec(version.stdout)?.[0];
|
|
220
|
+
if (version.exitCode !== 0) {
|
|
221
|
+
return {
|
|
222
|
+
status: "fail",
|
|
223
|
+
detail: `Kane CLI unavailable: ${version.stderr.trim() || "version probe failed"}`,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (observedVersion !== SUPPORTED_KANE_VERSION) {
|
|
227
|
+
return {
|
|
228
|
+
status: "fail",
|
|
229
|
+
detail: `Kane CLI ${SUPPORTED_KANE_VERSION} required; observed ${version.stdout.trim()}`,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const identity = await runner("kane-cli", ["whoami"], options);
|
|
233
|
+
if (identity.exitCode !== 0) {
|
|
234
|
+
return {
|
|
235
|
+
status: "fail",
|
|
236
|
+
detail: `Kane CLI authentication failed: ${identity.stderr.trim() || identity.stdout.trim()}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const shown = await runner("kane-cli", ["config", "show"], options);
|
|
240
|
+
if (shown.exitCode !== 0) {
|
|
241
|
+
return { status: "fail", detail: "Kane CLI config show failed" };
|
|
242
|
+
}
|
|
243
|
+
const missingTarget = targetFailure(config, shown.stdout);
|
|
244
|
+
if (missingTarget !== undefined) {
|
|
245
|
+
return {
|
|
246
|
+
status: "fail",
|
|
247
|
+
detail: `Kane CLI is not configured for expected Test Manager target ${missingTarget}`,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const balance = await runner("kane-cli", ["balance"], options);
|
|
251
|
+
return balanceReadiness(balance, config.projectId);
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=kane-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kane-cli.js","sourceRoot":"","sources":["../../src/core/kane-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|