@phamvuhoang/otto-core 0.20.0 → 0.22.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/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +212 -19
- package/dist/loop.js.map +1 -1
- package/dist/model-tier.d.ts +5 -0
- package/dist/model-tier.d.ts.map +1 -1
- package/dist/model-tier.js +13 -0
- package/dist/model-tier.js.map +1 -1
- package/dist/panel.d.ts +37 -3
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +126 -39
- package/dist/panel.js.map +1 -1
- package/dist/plan-artifacts.d.ts +10 -0
- package/dist/plan-artifacts.d.ts.map +1 -0
- package/dist/plan-artifacts.js +63 -0
- package/dist/plan-artifacts.js.map +1 -0
- package/dist/plan-gate.d.ts +10 -1
- package/dist/plan-gate.d.ts.map +1 -1
- package/dist/plan-gate.js +22 -4
- package/dist/plan-gate.js.map +1 -1
- package/dist/plan-report-cli.d.ts +2 -1
- package/dist/plan-report-cli.d.ts.map +1 -1
- package/dist/plan-report-cli.js +9 -32
- package/dist/plan-report-cli.js.map +1 -1
- package/dist/plan-rubric.d.ts +24 -0
- package/dist/plan-rubric.d.ts.map +1 -1
- package/dist/plan-rubric.js +122 -0
- package/dist/plan-rubric.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +3 -1
- package/dist/render.js.map +1 -1
- package/dist/report-finalize.d.ts +26 -0
- package/dist/report-finalize.d.ts.map +1 -0
- package/dist/report-finalize.js +222 -0
- package/dist/report-finalize.js.map +1 -0
- package/dist/report-rubric.d.ts +1 -1
- package/dist/report-rubric.d.ts.map +1 -1
- package/dist/report-rubric.js +3 -3
- package/dist/report-rubric.js.map +1 -1
- package/dist/review-severity.d.ts +41 -0
- package/dist/review-severity.d.ts.map +1 -0
- package/dist/review-severity.js +101 -0
- package/dist/review-severity.js.map +1 -0
- package/dist/risk.d.ts +3 -2
- package/dist/risk.d.ts.map +1 -1
- package/dist/risk.js +8 -7
- package/dist/risk.js.map +1 -1
- package/dist/run-report.d.ts +8 -0
- package/dist/run-report.d.ts.map +1 -1
- package/dist/run-report.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/stage-exec.d.ts.map +1 -1
- package/dist/stage-exec.js +3 -2
- package/dist/stage-exec.js.map +1 -1
- package/package.json +1 -1
- package/templates/lens-guidance/correctness.md +1 -0
- package/templates/lens-guidance/security.md +1 -0
- package/templates/lens-guidance/structural.md +25 -0
- package/templates/lens-guidance/task-fit.md +1 -0
- package/templates/lens-guidance/tests.md +1 -0
- package/templates/plan.md +36 -4
- package/templates/quality-report.md +18 -9
- package/templates/report-rewrite.md +25 -0
- package/templates/review-lens.md +16 -1
- package/templates/review-synth.md +18 -2
- package/templates/review-verify.md +11 -6
package/dist/model-tier.d.ts
CHANGED
|
@@ -45,6 +45,11 @@ export declare function routeModel(opts: {
|
|
|
45
45
|
tier: ModelTier;
|
|
46
46
|
reasons: string[];
|
|
47
47
|
};
|
|
48
|
+
/** Base model tier per review lens (P14). Structural/security reasoning gets the
|
|
49
|
+
* strong tier; mechanical lenses run cheaper. Pin (OTTO_MODEL/OTTO_CLAUDE_MODEL)
|
|
50
|
+
* and failure-escalation still take precedence in resolveStageModel/routeModel. */
|
|
51
|
+
export declare const LENS_TIER: Record<string, ModelTier>;
|
|
52
|
+
export declare function tierForLens(lens: string): ModelTier;
|
|
48
53
|
/** The model decision for one stage: the spec, the tier (when routed), and why. */
|
|
49
54
|
export type StageModel = {
|
|
50
55
|
spec: string | undefined;
|
package/dist/model-tier.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-tier.d.ts","sourceRoot":"","sources":["../src/model-tier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,yCAAyC;AACzC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEnD,kGAAkG;AAClG,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE/D,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,UAI5B,CAAC;AAQF,uFAAuF;AACvF,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,UAAU,CAOZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,cAAc,EACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO9C;AAUD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBzC;AAED,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,UAAU,CAYb"}
|
|
1
|
+
{"version":3,"file":"model-tier.d.ts","sourceRoot":"","sources":["../src/model-tier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,yCAAyC;AACzC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEnD,kGAAkG;AAClG,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE/D,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,UAI5B,CAAC;AAQF,uFAAuF;AACvF,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,UAAU,CAOZ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,cAAc,EACzB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO9C;AAUD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBzC;AAED;;oFAEoF;AACpF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAM/C,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,UAAU,CAYb"}
|
package/dist/model-tier.js
CHANGED
|
@@ -78,6 +78,19 @@ export function routeModel(opts) {
|
|
|
78
78
|
}
|
|
79
79
|
return { tier, reasons };
|
|
80
80
|
}
|
|
81
|
+
/** Base model tier per review lens (P14). Structural/security reasoning gets the
|
|
82
|
+
* strong tier; mechanical lenses run cheaper. Pin (OTTO_MODEL/OTTO_CLAUDE_MODEL)
|
|
83
|
+
* and failure-escalation still take precedence in resolveStageModel/routeModel. */
|
|
84
|
+
export const LENS_TIER = {
|
|
85
|
+
structural: "strong",
|
|
86
|
+
security: "strong",
|
|
87
|
+
correctness: "mid",
|
|
88
|
+
"task-fit": "mid",
|
|
89
|
+
tests: "cheap",
|
|
90
|
+
};
|
|
91
|
+
export function tierForLens(lens) {
|
|
92
|
+
return LENS_TIER[lens] ?? "mid";
|
|
93
|
+
}
|
|
81
94
|
/**
|
|
82
95
|
* Resolve the model spec for one stage. Precedence (back-compat invariant):
|
|
83
96
|
* an explicit pin (OTTO_${RUNTIME}_MODEL / OTTO_MODEL) wins and disables
|
package/dist/model-tier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-tier.js","sourceRoot":"","sources":["../src/model-tier.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-tier.js","sourceRoot":"","sources":["../src/model-tier.ts"],"names":[],"mappings":"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"}
|
package/dist/panel.d.ts
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AgentRuntimeId } from "./agent-runtime.js";
|
|
2
|
+
import { type TierLadder } from "./model-tier.js";
|
|
3
|
+
import type { RiskAssessment } from "./risk.js";
|
|
4
|
+
import { type Finding } from "./review-severity.js";
|
|
2
5
|
import type { StageResult } from "./runner.js";
|
|
3
|
-
import type
|
|
6
|
+
import { type TokenMode } from "./tokens.js";
|
|
7
|
+
/** Which lenses actually run this iteration. Router off → the full configured
|
|
8
|
+
* pool (today's behavior). Router on → risk-routed subset (Task 5). */
|
|
9
|
+
export declare function routedLenses(changedPaths: string[], available: string[], adaptiveRouter: boolean): string[];
|
|
10
|
+
/** Parse every lens's findings file, tag with its lens, and dedupe across lenses
|
|
11
|
+
* so the verifier sees each issue once. `total` is the pre-dedupe count. */
|
|
12
|
+
export declare function mergeLensFindings(files: {
|
|
13
|
+
lens: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}[]): {
|
|
16
|
+
findings: Finding[];
|
|
17
|
+
total: number;
|
|
18
|
+
};
|
|
4
19
|
/** Per-sub-agent control returned by the loop: budget-stop + adaptive cooldown. */
|
|
5
20
|
export type PanelStageControl = {
|
|
6
21
|
stop: boolean;
|
|
@@ -15,6 +30,18 @@ export type RunPanelOptions = {
|
|
|
15
30
|
cooldownMs: number;
|
|
16
31
|
tokenMode?: TokenMode;
|
|
17
32
|
signal?: AbortSignal;
|
|
33
|
+
/** Changed paths this iteration; routes the lens subset when the adaptive
|
|
34
|
+
* router is on. Default `[]` (with router off) keeps the full pool. */
|
|
35
|
+
changedPaths?: string[];
|
|
36
|
+
/** Adaptive router on → risk-routed lens subset. Default false → full pool. */
|
|
37
|
+
adaptiveRouter?: boolean;
|
|
38
|
+
/** Model routing on → per-lens tier resolves through the ladder. Default false
|
|
39
|
+
* → runtime default model for every lens (today's behavior). */
|
|
40
|
+
modelRouting?: boolean;
|
|
41
|
+
/** tier → model ladder consulted when `modelRouting` resolves a lens tier. */
|
|
42
|
+
tierLadder?: TierLadder;
|
|
43
|
+
/** Change-risk assessment that modulates the routed per-lens tier. */
|
|
44
|
+
riskAssessment?: RiskAssessment;
|
|
18
45
|
/** Active runtime id; threaded into each sub-stage so panel logs are runtime-labelled. */
|
|
19
46
|
agentId?: AgentRuntimeId;
|
|
20
47
|
/** Resume/switch note injected into each panel sub-stage prompt. */
|
|
@@ -30,8 +57,15 @@ export type RunPanelOptions = {
|
|
|
30
57
|
* can write one evidence record per substage. The lens substages are named by
|
|
31
58
|
* their lens (free text from OTTO_REVIEW_LENSES); verify/synth use their stage
|
|
32
59
|
* names. `startedAt` is the ISO timestamp captured before the substage ran.
|
|
60
|
+
* `reviewSeverity` is passed only for the verify and synth substages.
|
|
33
61
|
*/
|
|
34
|
-
recordStage?: (stageName: string, sr: StageResult, startedAt: string
|
|
62
|
+
recordStage?: (stageName: string, sr: StageResult, startedAt: string, reviewSeverity?: {
|
|
63
|
+
blocker: number;
|
|
64
|
+
major: number;
|
|
65
|
+
minor: number;
|
|
66
|
+
nit: number;
|
|
67
|
+
suppressed: number;
|
|
68
|
+
}) => void;
|
|
35
69
|
};
|
|
36
70
|
/** Harness-orchestrated reviewer panel: read-only lens reviews → one synth fix(review) commit. */
|
|
37
71
|
export declare function runPanel(opts: RunPanelOptions): Promise<StageResult>;
|
package/dist/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D;wEACwE;AACxE,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,cAAc,EAAE,OAAO,GACtB,MAAM,EAAE,CAWV;AAED;6EAC6E;AAC7E,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACtC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKxC;AAuFD,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;4EACwE;IACxE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;qEACiE;IACjE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0FAA0F;IAC1F,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,iBAAiB,CAAC;IACjD;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAChG,IAAI,CAAC;CACX,CAAC;AAkBF,kGAAkG;AAClG,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CA+N1E"}
|
package/dist/panel.js
CHANGED
|
@@ -1,9 +1,64 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join, posix } from "node:path";
|
|
3
|
+
import { DEFAULT_AGENT } from "./agent-runtime.js";
|
|
3
4
|
import { git } from "./git.js";
|
|
4
5
|
import { executeStage } from "./stage-exec.js";
|
|
6
|
+
import { tierForLens } from "./model-tier.js";
|
|
5
7
|
import { sleep } from "./pacing.js";
|
|
8
|
+
import { classifyRisk, reviewDepthForLevel, selectLenses } from "./risk.js";
|
|
9
|
+
import { dedupeFindings, parseFindings, severityCounts, } from "./review-severity.js";
|
|
6
10
|
import { bold, dim, green, red, SYM } from "./stream-render.js";
|
|
11
|
+
import { emptyTokenUsage } from "./tokens.js";
|
|
12
|
+
/** Which lenses actually run this iteration. Router off → the full configured
|
|
13
|
+
* pool (today's behavior). Router on → risk-routed subset (Task 5). */
|
|
14
|
+
export function routedLenses(changedPaths, available, adaptiveRouter) {
|
|
15
|
+
if (!adaptiveRouter)
|
|
16
|
+
return [...available];
|
|
17
|
+
const depth = reviewDepthForLevel(classifyRisk(changedPaths).level);
|
|
18
|
+
const routed = selectLenses(depth, available);
|
|
19
|
+
if (routed.length)
|
|
20
|
+
return routed;
|
|
21
|
+
// depth === "single" → no lens subset, but the panel always runs ≥1 lens.
|
|
22
|
+
// Fall back to the medium subset (correctness/tests/task-fit — drops the
|
|
23
|
+
// strong-tier structural/security lenses, matching the low-risk depth) before
|
|
24
|
+
// the full pool, so a low-risk change still gets a proportionate review.
|
|
25
|
+
const medium = selectLenses("lenses", available);
|
|
26
|
+
return medium.length ? medium : [...available];
|
|
27
|
+
}
|
|
28
|
+
/** Parse every lens's findings file, tag with its lens, and dedupe across lenses
|
|
29
|
+
* so the verifier sees each issue once. `total` is the pre-dedupe count. */
|
|
30
|
+
export function mergeLensFindings(files) {
|
|
31
|
+
const all = [];
|
|
32
|
+
for (const { lens, text } of files)
|
|
33
|
+
all.push(...parseFindings(text, lens).findings);
|
|
34
|
+
return { findings: dedupeFindings(all), total: all.length };
|
|
35
|
+
}
|
|
36
|
+
/** Serialize a deduped finding back to a wire-format line:
|
|
37
|
+
* `SEVERITY | file:line | claim | why | fix?` (the trailing `| fix` is omitted
|
|
38
|
+
* when there is no suggested fix). The verifier globs `findings-*.md`, so the
|
|
39
|
+
* single merged file matches and is read exactly once. */
|
|
40
|
+
function findingToWire(f) {
|
|
41
|
+
const loc = f.line ? `${f.file}:${f.line}` : f.file;
|
|
42
|
+
const head = `${f.severity} | ${loc} | ${f.claim} | ${f.why}`;
|
|
43
|
+
return f.suggestedFix ? `${head} | ${f.suggestedFix}` : head;
|
|
44
|
+
}
|
|
45
|
+
/** Bounded-concurrency map over `items` (inline to avoid coupling to fanout.ts).
|
|
46
|
+
* Preserves input order in the result array regardless of completion order. */
|
|
47
|
+
async function boundedMap(items, limit, fn) {
|
|
48
|
+
const out = new Array(items.length);
|
|
49
|
+
let next = 0;
|
|
50
|
+
const width = Math.max(1, Math.min(limit, items.length));
|
|
51
|
+
const worker = async () => {
|
|
52
|
+
while (next < items.length) {
|
|
53
|
+
const i = next++;
|
|
54
|
+
out[i] = await fn(items[i], i);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await Promise.all(Array.from({ length: width }, worker));
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/** Max lens agents run concurrently (independent read-only reviews of one HEAD). */
|
|
61
|
+
const LENS_CONCURRENCY = 4;
|
|
7
62
|
const LENS_STAGE = {
|
|
8
63
|
name: "review-lens",
|
|
9
64
|
template: "review-lens.md",
|
|
@@ -28,19 +83,6 @@ function outcomeLine(note, ok = true) {
|
|
|
28
83
|
const mark = ok ? green(SYM.check) : red(SYM.cross);
|
|
29
84
|
process.stderr.write(`${dim(SYM.cont)} ${mark} ${dim(note)}\n`);
|
|
30
85
|
}
|
|
31
|
-
/** Human count of a lens's findings from its free-form output ("skip" = no commit to review). */
|
|
32
|
-
function findingsNote(result) {
|
|
33
|
-
const t = result.trim();
|
|
34
|
-
if (/<lens>\s*SKIP\s*<\/lens>/i.test(t))
|
|
35
|
-
return "skipped (no commit)";
|
|
36
|
-
const n = t
|
|
37
|
-
.split("\n")
|
|
38
|
-
.map((l) => l.trim())
|
|
39
|
-
.filter((l) => /^[-*]\s+\S/.test(l)).length;
|
|
40
|
-
if (n === 0)
|
|
41
|
-
return "no findings";
|
|
42
|
-
return `${n} finding${n === 1 ? "" : "s"}`;
|
|
43
|
-
}
|
|
44
86
|
function readVerdicts(panelHostDir) {
|
|
45
87
|
try {
|
|
46
88
|
const txt = readFileSync(join(panelHostDir, "verdicts.md"), "utf8");
|
|
@@ -75,7 +117,9 @@ function lensMutatedRepo(workspaceDir, baseHead) {
|
|
|
75
117
|
}
|
|
76
118
|
/** Harness-orchestrated reviewer panel: read-only lens reviews → one synth fix(review) commit. */
|
|
77
119
|
export async function runPanel(opts) {
|
|
78
|
-
const {
|
|
120
|
+
const { workspaceDir, packageDir, iteration, maxRetries, cooldownMs, tokenMode = "off", signal, agentId, resumeNote = "", onStage, recordStage, } = opts;
|
|
121
|
+
// Router off → the full configured pool (today's behavior); on → risk-routed.
|
|
122
|
+
const lenses = routedLenses(opts.changedPaths ?? [], opts.lenses, opts.adaptiveRouter ?? false);
|
|
79
123
|
const isoNow = () => new Date().toISOString();
|
|
80
124
|
const panelRel = `panel-${process.pid}-${iteration}-${Date.now()}`;
|
|
81
125
|
const panelHostDir = join(workspaceDir, ".otto-tmp", panelRel);
|
|
@@ -104,33 +148,76 @@ export async function runPanel(opts) {
|
|
|
104
148
|
return false;
|
|
105
149
|
};
|
|
106
150
|
try {
|
|
107
|
-
// 1. Lenses — each finds defects through one lens, read-only.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
151
|
+
// 1. Lenses — each finds defects through one lens, read-only. Run them
|
|
152
|
+
// concurrently (bounded) since they are independent reads of the same
|
|
153
|
+
// HEAD. The per-lens reset guard is UNSAFE while siblings run, so we do
|
|
154
|
+
// NOT restore inside the parallel region — the worktree started
|
|
155
|
+
// tracked-clean (when enforceReadOnly), so a single end-of-batch reset
|
|
156
|
+
// below undoes any read-only violation by any lens before verify runs.
|
|
157
|
+
phaseLine(`${lenses.length} lenses (parallel): ${lenses.join(", ")}`);
|
|
158
|
+
const lensStartedAt = isoNow();
|
|
159
|
+
// boundedMap preserves input (lens-index) order in `results`.
|
|
160
|
+
const results = await boundedMap(lenses, LENS_CONCURRENCY, (lens) => executeStage({
|
|
161
|
+
stage: { ...LENS_STAGE, tier: tierForLens(lens) },
|
|
162
|
+
vars: { LENS: lens, RESUME: resumeNote },
|
|
163
|
+
workspaceDir,
|
|
164
|
+
packageDir,
|
|
165
|
+
iteration,
|
|
166
|
+
maxRetries,
|
|
167
|
+
tokenMode,
|
|
168
|
+
signal,
|
|
169
|
+
agentId,
|
|
170
|
+
logLabel: `lens-${lens}`,
|
|
171
|
+
modelRouting: opts.modelRouting,
|
|
172
|
+
tierLadder: opts.tierLadder,
|
|
173
|
+
riskAssessment: opts.riskAssessment,
|
|
174
|
+
}).then((sr) => ({ lens, sr })));
|
|
175
|
+
// One reset for the whole batch: undoes any tracked mutation/commit a lens
|
|
176
|
+
// made in violation of the read-only contract, before the verifier reads.
|
|
177
|
+
restoreIfMutated("lenses");
|
|
178
|
+
// Emit evidence + budget control in lens-INDEX order (deterministic), even
|
|
179
|
+
// though the agents ran concurrently. onStage still owns the budget stop —
|
|
180
|
+
// but since every lens already ran, a stop just skips verify + synth.
|
|
181
|
+
let stop = false;
|
|
182
|
+
let cooldownFactor = 1;
|
|
183
|
+
for (const { lens, sr } of results) {
|
|
184
|
+
const parsed = parseFindings(sr.result, lens).findings.length;
|
|
185
|
+
outcomeLine(/<lens>\s*SKIP\s*<\/lens>/i.test(sr.result.trim())
|
|
186
|
+
? "skipped (no commit)"
|
|
187
|
+
: `${parsed} finding${parsed === 1 ? "" : "s"}`);
|
|
127
188
|
recordStage?.(lens, sr, lensStartedAt);
|
|
128
189
|
const ctrl = onStage?.(sr) ?? { stop: false, cooldownFactor: 1 };
|
|
129
190
|
if (ctrl.stop)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
191
|
+
stop = true;
|
|
192
|
+
// Lenses ran concurrently, so there is one batch cooldown — pace it by the
|
|
193
|
+
// most-throttled lens (max factor) to honor adaptive backoff.
|
|
194
|
+
cooldownFactor = Math.max(cooldownFactor, ctrl.cooldownFactor);
|
|
195
|
+
}
|
|
196
|
+
if (stop) {
|
|
197
|
+
// Budget exhausted — skip verify + synth, return the last lens result.
|
|
198
|
+
return results[results.length - 1].sr;
|
|
133
199
|
}
|
|
200
|
+
// Merge + dedupe across lenses into a single findings-merged.md so the
|
|
201
|
+
// verifier (which globs findings-*.md) reads each issue exactly once. We
|
|
202
|
+
// deliberately do NOT also write per-lens findings-<lens>.md files — both
|
|
203
|
+
// would double-count under the glob.
|
|
204
|
+
const { findings } = mergeLensFindings(results.map((r) => ({ lens: r.lens, text: r.sr.result })));
|
|
205
|
+
const counts = severityCounts(findings);
|
|
206
|
+
if (findings.length === 0) {
|
|
207
|
+
// Nothing to verify or fix — return a synthetic clean result.
|
|
208
|
+
outcomeLine("no findings — skipping verify + synth");
|
|
209
|
+
return {
|
|
210
|
+
result: "<review>OK</review>",
|
|
211
|
+
costUsd: 0,
|
|
212
|
+
isError: false,
|
|
213
|
+
apiErrorStatus: null,
|
|
214
|
+
usage: emptyTokenUsage(),
|
|
215
|
+
runtimeId: agentId ?? DEFAULT_AGENT,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
writeFileSync(join(panelHostDir, "findings-merged.md"), findings.map(findingToWire).join("\n") + "\n", "utf8");
|
|
219
|
+
if (cooldownMs > 0)
|
|
220
|
+
await sleep(cooldownMs * cooldownFactor, signal);
|
|
134
221
|
// 2. Adversarial verify — a skeptic refutes the lens findings, writing
|
|
135
222
|
// verdicts.md (CONFIRMED/REJECTED) so synth only fixes survivors.
|
|
136
223
|
phaseLine("adversarial verify");
|
|
@@ -148,7 +235,7 @@ export async function runPanel(opts) {
|
|
|
148
235
|
logLabel: "verify",
|
|
149
236
|
});
|
|
150
237
|
restoreIfMutated("verify");
|
|
151
|
-
recordStage?.(VERIFY_STAGE.name, verify, verifyStartedAt);
|
|
238
|
+
recordStage?.(VERIFY_STAGE.name, verify, verifyStartedAt, counts);
|
|
152
239
|
const verdicts = readVerdicts(panelHostDir);
|
|
153
240
|
if (verdicts.exists) {
|
|
154
241
|
outcomeLine(`${verdicts.confirmed} confirmed, ${verdicts.rejected} rejected`);
|
|
@@ -204,7 +291,7 @@ export async function runPanel(opts) {
|
|
|
204
291
|
else {
|
|
205
292
|
outcomeLine("clean — no fix needed");
|
|
206
293
|
}
|
|
207
|
-
recordStage?.(SYNTH_STAGE.name, synth, synthStartedAt);
|
|
294
|
+
recordStage?.(SYNTH_STAGE.name, synth, synthStartedAt, counts);
|
|
208
295
|
onStage?.(synth);
|
|
209
296
|
return synth;
|
|
210
297
|
}
|
package/dist/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type TaskPlanDocument = {
|
|
2
|
+
taskKey: string;
|
|
3
|
+
specPath: string;
|
|
4
|
+
planPath: string;
|
|
5
|
+
doc: string;
|
|
6
|
+
updatedMs: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function readTaskPlanDocuments(workspaceDir: string): TaskPlanDocument[];
|
|
9
|
+
export declare function latestTaskPlanDocument(workspaceDir: string): TaskPlanDocument | null;
|
|
10
|
+
//# sourceMappingURL=plan-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-artifacts.d.ts","sourceRoot":"","sources":["../src/plan-artifacts.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAsBF,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,GACnB,gBAAgB,EAAE,CA4BpB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,GACnB,gBAAgB,GAAG,IAAI,CASzB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
function readOptional(path) {
|
|
4
|
+
try {
|
|
5
|
+
return readFileSync(path, "utf8");
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return "";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function updatedMs(paths) {
|
|
12
|
+
let latest = 0;
|
|
13
|
+
for (const p of paths) {
|
|
14
|
+
try {
|
|
15
|
+
latest = Math.max(latest, statSync(p).mtimeMs);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Missing spec.md or plan.md is fine; callers score whatever exists.
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return latest;
|
|
22
|
+
}
|
|
23
|
+
export function readTaskPlanDocuments(workspaceDir) {
|
|
24
|
+
const tasksDir = join(workspaceDir, ".otto", "tasks");
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = readdirSync(tasksDir, { withFileTypes: true })
|
|
28
|
+
.filter((e) => e.isDirectory())
|
|
29
|
+
.map((e) => e.name)
|
|
30
|
+
.sort();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const docs = [];
|
|
36
|
+
for (const taskKey of entries) {
|
|
37
|
+
const specPath = join(".otto", "tasks", taskKey, "spec.md");
|
|
38
|
+
const planPath = join(".otto", "tasks", taskKey, "plan.md");
|
|
39
|
+
const absSpec = join(workspaceDir, specPath);
|
|
40
|
+
const absPlan = join(workspaceDir, planPath);
|
|
41
|
+
const doc = [readOptional(absSpec), readOptional(absPlan)].join("\n");
|
|
42
|
+
if (doc.trim() === "")
|
|
43
|
+
continue;
|
|
44
|
+
docs.push({
|
|
45
|
+
taskKey,
|
|
46
|
+
specPath,
|
|
47
|
+
planPath,
|
|
48
|
+
doc,
|
|
49
|
+
updatedMs: updatedMs([absSpec, absPlan]),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return docs;
|
|
53
|
+
}
|
|
54
|
+
export function latestTaskPlanDocument(workspaceDir) {
|
|
55
|
+
const docs = readTaskPlanDocuments(workspaceDir);
|
|
56
|
+
if (docs.length === 0)
|
|
57
|
+
return null;
|
|
58
|
+
return docs
|
|
59
|
+
.slice()
|
|
60
|
+
.sort((a, b) => a.updatedMs - b.updatedMs || a.taskKey.localeCompare(b.taskKey))
|
|
61
|
+
.at(-1);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=plan-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-artifacts.js","sourceRoot":"","sources":["../src/plan-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aACrD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAuB,EAAE,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAChC,IAAI,CAAC,IAAI,CAAC;YACR,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,GAAG;YACH,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,YAAoB;IAEpB,MAAM,IAAI,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAI;SACR,KAAK,EAAE;SACP,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAC1E;SACA,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;AACb,CAAC"}
|
package/dist/plan-gate.d.ts
CHANGED
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
* `--plan-report` quality flag. Pure: takes a {@link PlanRubricScore}, returns the
|
|
8
8
|
* verdict; triggers no re-plan itself (loop wiring is a follow-up).
|
|
9
9
|
*/
|
|
10
|
-
import type { PlanRubricScore } from "./plan-rubric.js";
|
|
10
|
+
import type { PlanDepthScore, PlanRubricScore } from "./plan-rubric.js";
|
|
11
11
|
/**
|
|
12
12
|
* Default ratio a plan must reach to clear the gate. 0.75 = three-quarters of the
|
|
13
13
|
* rubric criteria; tuned so a plan missing one or two sections still passes but a
|
|
14
14
|
* thin plan (no scope guard, no tasks, no verify) does not.
|
|
15
15
|
*/
|
|
16
16
|
export declare const DEFAULT_PLAN_QUALITY_THRESHOLD = 0.75;
|
|
17
|
+
export declare const DEFAULT_PLAN_DEPTH_THRESHOLD = 1;
|
|
17
18
|
export type PlanGateVerdict = {
|
|
18
19
|
passed: boolean;
|
|
19
20
|
/** The plan's rubric ratio (0..1). */
|
|
@@ -24,6 +25,12 @@ export type PlanGateVerdict = {
|
|
|
24
25
|
missing: string[];
|
|
25
26
|
/** Criteria still needed to reach the threshold; 0 when passed. */
|
|
26
27
|
shortfall: number;
|
|
28
|
+
/** Optional depth-gate ratio when a caller supplies the P13 depth score. */
|
|
29
|
+
depthRatio?: number;
|
|
30
|
+
/** Depth threshold applied, when present. */
|
|
31
|
+
depthThreshold?: number;
|
|
32
|
+
/** Depth criteria missing, when present. */
|
|
33
|
+
depthMissing?: string[];
|
|
27
34
|
};
|
|
28
35
|
/**
|
|
29
36
|
* Assess a rubric score against the quality threshold. A plan passes when its
|
|
@@ -32,6 +39,8 @@ export type PlanGateVerdict = {
|
|
|
32
39
|
*/
|
|
33
40
|
export declare function assessPlanGate(score: PlanRubricScore, opts?: {
|
|
34
41
|
threshold?: number;
|
|
42
|
+
depth?: PlanDepthScore;
|
|
43
|
+
depthThreshold?: number;
|
|
35
44
|
}): PlanGateVerdict;
|
|
36
45
|
/**
|
|
37
46
|
* Render a gate verdict: a `PASS`/`FAIL` line with the ratio vs threshold, and —
|
package/dist/plan-gate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-gate.d.ts","sourceRoot":"","sources":["../src/plan-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-gate.d.ts","sourceRoot":"","sources":["../src/plan-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,GACL,eAAe,CAoBjB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAqBzD"}
|
package/dist/plan-gate.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* thin plan (no scope guard, no tasks, no verify) does not.
|
|
14
14
|
*/
|
|
15
15
|
export const DEFAULT_PLAN_QUALITY_THRESHOLD = 0.75;
|
|
16
|
+
export const DEFAULT_PLAN_DEPTH_THRESHOLD = 1;
|
|
16
17
|
/**
|
|
17
18
|
* Assess a rubric score against the quality threshold. A plan passes when its
|
|
18
19
|
* ratio is at or above the threshold; otherwise `shortfall` is how many more
|
|
@@ -20,14 +21,23 @@ export const DEFAULT_PLAN_QUALITY_THRESHOLD = 0.75;
|
|
|
20
21
|
*/
|
|
21
22
|
export function assessPlanGate(score, opts = {}) {
|
|
22
23
|
const threshold = opts.threshold ?? DEFAULT_PLAN_QUALITY_THRESHOLD;
|
|
23
|
-
const
|
|
24
|
+
const depthThreshold = opts.depthThreshold ?? DEFAULT_PLAN_DEPTH_THRESHOLD;
|
|
25
|
+
const depthPassed = opts.depth ? opts.depth.ratio >= depthThreshold : true;
|
|
26
|
+
const passed = score.ratio >= threshold && depthPassed;
|
|
24
27
|
const needed = Math.ceil(threshold * score.maxScore) - score.metCount;
|
|
25
28
|
return {
|
|
26
29
|
passed,
|
|
27
30
|
ratio: score.ratio,
|
|
28
31
|
threshold,
|
|
29
32
|
missing: score.missing,
|
|
30
|
-
shortfall:
|
|
33
|
+
shortfall: score.ratio >= threshold ? 0 : Math.max(0, needed),
|
|
34
|
+
...(opts.depth
|
|
35
|
+
? {
|
|
36
|
+
depthRatio: opts.depth.ratio,
|
|
37
|
+
depthThreshold,
|
|
38
|
+
depthMissing: opts.depth.missing,
|
|
39
|
+
}
|
|
40
|
+
: {}),
|
|
31
41
|
};
|
|
32
42
|
}
|
|
33
43
|
const pct = new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 });
|
|
@@ -40,7 +50,15 @@ export function formatPlanGate(v) {
|
|
|
40
50
|
`(${pct.format(v.ratio * 100)}% vs ${pct.format(v.threshold * 100)}% threshold)`;
|
|
41
51
|
if (v.passed)
|
|
42
52
|
return head;
|
|
43
|
-
|
|
44
|
-
|
|
53
|
+
const lines = [head];
|
|
54
|
+
if (v.shortfall > 0) {
|
|
55
|
+
lines.push(` re-plan to add ${v.shortfall} more: ${v.missing.join(", ") || "—"}`);
|
|
56
|
+
}
|
|
57
|
+
if (v.depthRatio != null &&
|
|
58
|
+
v.depthThreshold != null &&
|
|
59
|
+
v.depthRatio < v.depthThreshold) {
|
|
60
|
+
lines.push(` deepen plan: ${pct.format(v.depthRatio * 100)}% vs ${pct.format(v.depthThreshold * 100)}% depth threshold; missing ${v.depthMissing?.join(", ") || "—"}`);
|
|
61
|
+
}
|
|
62
|
+
return lines.join("\n");
|
|
45
63
|
}
|
|
46
64
|
//# sourceMappingURL=plan-gate.js.map
|
package/dist/plan-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-gate.js","sourceRoot":"","sources":["../src/plan-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-gate.js","sourceRoot":"","sources":["../src/plan-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAoB9C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAsB,EACtB,OAII,EAAE;IAEN,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,8BAA8B,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,4BAA4B,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,IAAI,WAAW,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;IACtE,OAAO;QACL,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS;QACT,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,KAAK;YACZ,CAAC,CAAC;gBACE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBAC5B,cAAc;gBACd,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;aACjC;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAkB;IAC/C,MAAM,IAAI,GACR,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG;QAC3C,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC;IACnF,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CACR,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CACvE,CAAC;IACJ,CAAC;IACD,IACE,CAAC,CAAC,UAAU,IAAI,IAAI;QACpB,CAAC,CAAC,cAAc,IAAI,IAAI;QACxB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,cAAc,EAC/B,CAAC;QACD,KAAK,CAAC,IAAI,CACR,kBAAkB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAC5J,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PlanRubricScore } from "./plan-rubric.js";
|
|
1
|
+
import { type PlanDepthScore, type PlanRubricScore } from "./plan-rubric.js";
|
|
2
2
|
/**
|
|
3
3
|
* `otto-afk --plan-report` read-only surface (issue #63 P8, slice 3).
|
|
4
4
|
*
|
|
@@ -19,6 +19,7 @@ export type PlanReportDeps = {
|
|
|
19
19
|
export type TaskPlanScore = {
|
|
20
20
|
taskKey: string;
|
|
21
21
|
score: PlanRubricScore;
|
|
22
|
+
depth: PlanDepthScore;
|
|
22
23
|
};
|
|
23
24
|
/**
|
|
24
25
|
* Render the per-task plan scorecards into one report. Pure: takes the already
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-report-cli.d.ts","sourceRoot":"","sources":["../src/plan-report-cli.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"plan-report-cli.d.ts","sourceRoot":"","sources":["../src/plan-report-cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;GAQG;AAEH,4FAA4F;AAC5F,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,CAAC;AASF,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAY/D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAMnE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,GAAE,cAA4B,GACjC,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|