@miller-tech/uap 2.1.7 → 2.11.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/config/capacity-policy.json +32 -0
- package/config/classify-thresholds.json +9 -0
- package/config/supervise-policy.json +13 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/bin/cli.js +87 -2
- package/dist/bin/cli.js.map +1 -1
- package/dist/capacity/policy.d.ts +67 -0
- package/dist/capacity/policy.d.ts.map +1 -0
- package/dist/capacity/policy.js +133 -0
- package/dist/capacity/policy.js.map +1 -0
- package/dist/capacity/probe.d.ts +23 -0
- package/dist/capacity/probe.d.ts.map +1 -0
- package/dist/capacity/probe.js +93 -0
- package/dist/capacity/probe.js.map +1 -0
- package/dist/classify/baseline.d.ts +24 -0
- package/dist/classify/baseline.d.ts.map +1 -0
- package/dist/classify/baseline.js +140 -0
- package/dist/classify/baseline.js.map +1 -0
- package/dist/classify/index.d.ts +30 -0
- package/dist/classify/index.d.ts.map +1 -0
- package/dist/classify/index.js +84 -0
- package/dist/classify/index.js.map +1 -0
- package/dist/classify/shadow.d.ts +34 -0
- package/dist/classify/shadow.d.ts.map +1 -0
- package/dist/classify/shadow.js +33 -0
- package/dist/classify/shadow.js.map +1 -0
- package/dist/classify/types.d.ts +64 -0
- package/dist/classify/types.d.ts.map +1 -0
- package/dist/classify/types.js +37 -0
- package/dist/classify/types.js.map +1 -0
- package/dist/cli/classify.d.ts +24 -0
- package/dist/cli/classify.d.ts.map +1 -0
- package/dist/cli/classify.js +94 -0
- package/dist/cli/classify.js.map +1 -0
- package/dist/cli/deliver.d.ts.map +1 -1
- package/dist/cli/deliver.js +26 -0
- package/dist/cli/deliver.js.map +1 -1
- package/dist/cli/doctor.d.ts +9 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +49 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/review.d.ts +12 -0
- package/dist/cli/review.d.ts.map +1 -0
- package/dist/cli/review.js +118 -0
- package/dist/cli/review.js.map +1 -0
- package/dist/cli/supervise.d.ts +8 -0
- package/dist/cli/supervise.d.ts.map +1 -0
- package/dist/cli/supervise.js +76 -0
- package/dist/cli/supervise.js.map +1 -0
- package/dist/delivery/convergence-loop.d.ts +8 -0
- package/dist/delivery/convergence-loop.d.ts.map +1 -1
- package/dist/delivery/convergence-loop.js +1 -0
- package/dist/delivery/convergence-loop.js.map +1 -1
- package/dist/delivery/delivery-result.d.ts.map +1 -1
- package/dist/delivery/delivery-result.js +5 -0
- package/dist/delivery/delivery-result.js.map +1 -1
- package/dist/delivery/gate-evidence.d.ts +143 -0
- package/dist/delivery/gate-evidence.d.ts.map +1 -0
- package/dist/delivery/gate-evidence.js +239 -0
- package/dist/delivery/gate-evidence.js.map +1 -0
- package/dist/delivery/index.d.ts +1 -0
- package/dist/delivery/index.d.ts.map +1 -1
- package/dist/delivery/index.js +1 -0
- package/dist/delivery/index.js.map +1 -1
- package/dist/evals/routing-corpus.d.ts +35 -0
- package/dist/evals/routing-corpus.d.ts.map +1 -0
- package/dist/evals/routing-corpus.js +142 -0
- package/dist/evals/routing-corpus.js.map +1 -0
- package/dist/evals/routing-eval.d.ts +104 -0
- package/dist/evals/routing-eval.d.ts.map +1 -0
- package/dist/evals/routing-eval.js +231 -0
- package/dist/evals/routing-eval.js.map +1 -0
- package/dist/evals/tfidf.d.ts +35 -0
- package/dist/evals/tfidf.d.ts.map +1 -0
- package/dist/evals/tfidf.js +132 -0
- package/dist/evals/tfidf.js.map +1 -0
- package/dist/review/prepass.d.ts +88 -0
- package/dist/review/prepass.d.ts.map +1 -0
- package/dist/review/prepass.js +428 -0
- package/dist/review/prepass.js.map +1 -0
- package/dist/review/visual-captures.d.ts +60 -0
- package/dist/review/visual-captures.d.ts.map +1 -0
- package/dist/review/visual-captures.js +222 -0
- package/dist/review/visual-captures.js.map +1 -0
- package/dist/supervise/assess.d.ts +73 -0
- package/dist/supervise/assess.d.ts.map +1 -0
- package/dist/supervise/assess.js +215 -0
- package/dist/supervise/assess.js.map +1 -0
- package/dist/supervise/config.d.ts +13 -0
- package/dist/supervise/config.d.ts.map +1 -0
- package/dist/supervise/config.js +81 -0
- package/dist/supervise/config.js.map +1 -0
- package/dist/supervise/loop.d.ts +78 -0
- package/dist/supervise/loop.d.ts.map +1 -0
- package/dist/supervise/loop.js +311 -0
- package/dist/supervise/loop.js.map +1 -0
- package/dist/supervise/observe.d.ts +31 -0
- package/dist/supervise/observe.d.ts.map +1 -0
- package/dist/supervise/observe.js +172 -0
- package/dist/supervise/observe.js.map +1 -0
- package/dist/supervise/policy.d.ts +16 -0
- package/dist/supervise/policy.d.ts.map +1 -0
- package/dist/supervise/policy.js +147 -0
- package/dist/supervise/policy.js.map +1 -0
- package/dist/supervise/types.d.ts +109 -0
- package/dist/supervise/types.d.ts.map +1 -0
- package/dist/supervise/types.js +11 -0
- package/dist/supervise/types.js.map +1 -0
- package/docs/INDEX.md +9 -3
- package/docs/architecture/adr/0001-automode-risk-floor.md +75 -0
- package/docs/architecture/adr/0002-evidence-bound-ship.md +81 -0
- package/docs/guides/CAPACITY_POLICY.md +98 -0
- package/docs/performance/automode-risk-calibration.md +72 -0
- package/docs/performance/reliability-ladder.md +78 -0
- package/docs/plans/system1-uplift-2026-09-18.md +191 -0
- package/docs/reference/automode-risk.md +134 -0
- package/docs/reference/evidence-bound-ship.md +145 -0
- package/docs/reference/review-prepass.md +77 -0
- package/docs/reference/routing-evals.md +71 -0
- package/docs/reference/semantic-supervisor.md +140 -0
- package/docs/reference/system1-classifier.md +103 -0
- package/docs/reference/visual-captures.md +113 -0
- package/package.json +5 -3
- package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
- package/src/policies/enforcers/__pycache__/expert_review_required.cpython-312.pyc +0 -0
- package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
- package/src/policies/enforcers/enforcement_self_protect.py +25 -2
- package/src/policies/enforcers/evidence_bound_ship.py +257 -0
- package/src/policies/enforcers/expert_review_required.py +120 -0
- package/src/policies/schemas/policies/evidence-bound-ship.md +106 -0
- package/src/policies/schemas/policies/visual-verification.md +8 -0
- package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
- package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
- package/tools/agents/scripts/anthropic_proxy.py +782 -19
- package/tools/agents/scripts/project_telemetry.py +52 -0
- package/tools/agents/scripts/tool_risk.py +789 -0
- package/tools/agents/scripts/tool_risk_calibrate.py +255 -0
- package/tools/agents/tests/fixtures/tool_risk_cases.json +124 -0
- package/tools/agents/tests/test_enforcer_escape_hatches.py +13 -0
- package/tools/agents/tests/test_gate_evidence.py +56 -0
- package/tools/agents/tests/test_tool_risk.py +521 -0
- package/tools/agents/tests/test_verbatim_compact.py +629 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate Evidence (uplift 1.4) — binds a deliver mission's gate outcomes to the
|
|
3
|
+
* exact commit they prove.
|
|
4
|
+
*
|
|
5
|
+
* A deliver mission ends with its gates green against some HEAD; that HEAD is
|
|
6
|
+
* the merge candidate a later ship action (git push / gh pr create/merge) will
|
|
7
|
+
* publish. This module records that pairing as
|
|
8
|
+
* `.uap/evidence/<candidateSha>.json` so the `evidence-bound-ship` enforcer can
|
|
9
|
+
* require, at ship time, proof that the gates passed for THIS commit — not for
|
|
10
|
+
* some earlier or later tree. Stale, missing, malformed, or SHA-mismatched
|
|
11
|
+
* evidence is rejected by the enforcer (fail closed).
|
|
12
|
+
*
|
|
13
|
+
* The artifact lives under `.uap/evidence/`, which enforcement-self-protect
|
|
14
|
+
* lists as a PROTECTED_TARGET with no agent carve-out (including
|
|
15
|
+
* interpreter-mediated writes): the deliver CLI (this module) writes it, an
|
|
16
|
+
* agent shell cannot. `.uap/` itself is git-ignored, so evidence is a local
|
|
17
|
+
* record, never committed payload.
|
|
18
|
+
*
|
|
19
|
+
* Writes are atomic (tmp + rename). The writer validates loudly — an
|
|
20
|
+
* unresolvable HEAD, a DIRTY TREE (the gates provably ran against something
|
|
21
|
+
* other than HEAD), or a malformed gate all throw; the deliver seam wraps the
|
|
22
|
+
* call fail-soft so evidence emission can never break a mission.
|
|
23
|
+
*/
|
|
24
|
+
import type { GateRung, RungResult } from './verifier-ladder.js';
|
|
25
|
+
/** One gate's outcome, as recorded in the evidence artifact. */
|
|
26
|
+
export interface GateOutcome {
|
|
27
|
+
/** Gate name, e.g. 'build', 'npm test' (bounded). */
|
|
28
|
+
name: string;
|
|
29
|
+
/** The exact command that ran, e.g. 'npm run build' (bounded). */
|
|
30
|
+
command: string;
|
|
31
|
+
/** Process exit code; 0 is the only passing value the enforcer accepts. */
|
|
32
|
+
exitCode: number;
|
|
33
|
+
/** Bounded tail of combined output (last OUTPUT_TAIL_MAX chars). */
|
|
34
|
+
outputTail: string;
|
|
35
|
+
/**
|
|
36
|
+
* ISO-8601 time the gate finished. Reconstructed from rung durations
|
|
37
|
+
* relative to the recording time (gates run back-to-back inside one ladder
|
|
38
|
+
* pass), NOT a measured wall-clock per gate — treat as approximate.
|
|
39
|
+
*/
|
|
40
|
+
at: string;
|
|
41
|
+
}
|
|
42
|
+
/** The on-disk evidence artifact schema (version 1). */
|
|
43
|
+
export interface GateEvidence {
|
|
44
|
+
version: 1;
|
|
45
|
+
/** Full commit SHA the gates prove — the merge candidate. */
|
|
46
|
+
candidateSha: string;
|
|
47
|
+
/** ISO-8601 time the evidence was recorded. */
|
|
48
|
+
recordedAt: string;
|
|
49
|
+
/** Deliver run id, when emitted from a deliver mission. */
|
|
50
|
+
runId?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Gate-affecting env hatches (KNOWN_GATE_HATCHES) that were SET when the
|
|
53
|
+
* evidence was recorded. Audit value only — the enforcer does not act on it,
|
|
54
|
+
* but a reviewer reading the artifact can see the gates ran with e.g. the
|
|
55
|
+
* quality gate disabled.
|
|
56
|
+
*/
|
|
57
|
+
hatches: string[];
|
|
58
|
+
gates: GateOutcome[];
|
|
59
|
+
}
|
|
60
|
+
/** Per-gate output tail bound (last-N characters). */
|
|
61
|
+
export declare const OUTPUT_TAIL_MAX = 2000;
|
|
62
|
+
/** Field bounds so a pathological gate cannot mint an unbounded artifact. */
|
|
63
|
+
export declare const NAME_MAX = 200;
|
|
64
|
+
export declare const COMMAND_MAX = 500;
|
|
65
|
+
/** A mission never legitimately runs more gates than this. */
|
|
66
|
+
export declare const MAX_GATES = 100;
|
|
67
|
+
/**
|
|
68
|
+
* Environment variables that weaken or bypass a gate. Mirrors
|
|
69
|
+
* enforcement_self_protect.BYPASS_PATTERNS plus the documented per-gate
|
|
70
|
+
* hatches; recorded into the artifact (when set) for audit. Keep in sync with
|
|
71
|
+
* the enforcer list.
|
|
72
|
+
*/
|
|
73
|
+
export declare const KNOWN_GATE_HATCHES: readonly ["UAP_DELIVER_BYPASS", "UAP_ENFORCE_DELIVERY", "UAP_SELF_PROTECT_OFF", "UAP_NO_WORKTREE", "UAP_WORKDIR_SCOPE_OFF", "UAP_INFRA_PROTECT_OFF", "UAP_NO_REVIEW", "UAP_EVIDENCE_GATE_OFF", "UAP_EVIDENCE_MAX_AGE_HOURS", "UAP_QUALITY_GATE_OFF", "UAP_USER_VALIDATION", "UAP_DELIVER_NO_LOCK", "UAP_ALLOW_GATELESS_ROOT", "UAP_ORACLE_CONSISTENCY", "UAP_SCHEMA_DIFF_INLINE", "UAP_VISUAL_GATE_OFF", "UAP_DESIGN_GATE_OFF"];
|
|
74
|
+
/**
|
|
75
|
+
* Resolve and validate the candidate SHA for `projectDir`.
|
|
76
|
+
*
|
|
77
|
+
* Throws (fails loudly) when HEAD cannot be resolved — not a repo, unborn
|
|
78
|
+
* branch, git missing — or when git answers with something that is not a
|
|
79
|
+
* commit SHA. Evidence written against a guessed SHA would prove nothing, so
|
|
80
|
+
* there is no silent fallback here.
|
|
81
|
+
*/
|
|
82
|
+
export declare function resolveCandidateSha(projectDir: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Require the working tree to be CLEAN before evidence binds HEAD.
|
|
85
|
+
*
|
|
86
|
+
* Evidence claims "the gates passed for commit <sha>". If the tree carries
|
|
87
|
+
* uncommitted changes, the gates actually ran against HEAD-plus-delta and the
|
|
88
|
+
* claim is unprovable — the delta could be anything. The deliver flow this
|
|
89
|
+
* supports is therefore: commit the candidate, run `uap deliver` (baseline
|
|
90
|
+
* check goes green as alreadyDelivered), ship.
|
|
91
|
+
*
|
|
92
|
+
* `.uap/` is git-ignored, so the evidence write itself cannot dirty the tree
|
|
93
|
+
* — but the check runs BEFORE the write regardless.
|
|
94
|
+
*
|
|
95
|
+
* Throws with the offending porcelain lines when the tree is dirty.
|
|
96
|
+
*/
|
|
97
|
+
export declare function assertCleanTree(projectDir: string): void;
|
|
98
|
+
/** Names of KNOWN_GATE_HATCHES set to a non-empty value right now. */
|
|
99
|
+
export declare function activeGateHatches(env?: NodeJS.ProcessEnv): string[];
|
|
100
|
+
/** Path of the evidence artifact for one candidate SHA. */
|
|
101
|
+
export declare function gateEvidencePath(projectDir: string, sha: string): string;
|
|
102
|
+
/** The slice of a DeliveryResult the evidence builder reads. */
|
|
103
|
+
export interface GateEvidenceSource {
|
|
104
|
+
history: ReadonlyArray<{
|
|
105
|
+
passed: boolean;
|
|
106
|
+
gateResults: ReadonlyArray<RungResult>;
|
|
107
|
+
}>;
|
|
108
|
+
/** Baseline ladder results when the run short-circuited as alreadyDelivered
|
|
109
|
+
* (history is empty then — without this the evidence path dead-ends on the
|
|
110
|
+
* exact flow that must work: commit → deliver → ship). */
|
|
111
|
+
baselineGates?: ReadonlyArray<RungResult>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Build the evidence gate list from a mission result.
|
|
115
|
+
*
|
|
116
|
+
* Source precedence: the LAST passing iteration (findLast semantics — evidence
|
|
117
|
+
* must describe the final passing tree, not an early pass the loop later
|
|
118
|
+
* regressed and repaired), else the baseline ladder run (alreadyDelivered),
|
|
119
|
+
* else an empty list (recordGateEvidence then refuses — zero gates prove
|
|
120
|
+
* nothing).
|
|
121
|
+
*
|
|
122
|
+
* Per-gate `at` is reconstructed: rungs carry durations but no wall-clock
|
|
123
|
+
* finish time, and they run back-to-back inside one ladder pass, so gate i's
|
|
124
|
+
* finish ≈ recordedAt − (durations of the gates after it). Approximate —
|
|
125
|
+
* honest ordering, not honest wall-clock.
|
|
126
|
+
*/
|
|
127
|
+
export declare function gateOutcomesFromResult(source: GateEvidenceSource, rungs: ReadonlyArray<Pick<GateRung, 'id' | 'command' | 'args'>>, recordedAt?: Date): GateOutcome[];
|
|
128
|
+
/**
|
|
129
|
+
* Record gate evidence for the current HEAD of `projectDir`.
|
|
130
|
+
*
|
|
131
|
+
* @param projectDir working tree whose HEAD is the merge candidate
|
|
132
|
+
* @param gates outcomes of the mission's gates (must be non-empty)
|
|
133
|
+
* @param opts.runId deliver run id to attribute the evidence to
|
|
134
|
+
* @returns the evidence artifact path
|
|
135
|
+
* @throws on an unresolvable/invalid HEAD, a DIRTY tree, a malformed gate, or
|
|
136
|
+
* an empty list — the caller decides whether that is fatal (the
|
|
137
|
+
* deliver seam wraps this fail-soft; the enforcer consumes only
|
|
138
|
+
* well-formed artifacts).
|
|
139
|
+
*/
|
|
140
|
+
export declare function recordGateEvidence(projectDir: string, gates: GateOutcome[], opts?: {
|
|
141
|
+
runId?: string;
|
|
142
|
+
}): string;
|
|
143
|
+
//# sourceMappingURL=gate-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evidence.d.ts","sourceRoot":"","sources":["../../src/delivery/gate-evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,sDAAsD;AACtD,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,8DAA8D;AAC9D,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,iaAkBrB,CAAC;AAwBX;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAUxD;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAKhF;AA8BD,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;KAAE,CAAC,CAAC;IACpF;;8DAE0D;IAC1D,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,EAC/D,UAAU,GAAE,IAAiB,GAC5B,WAAW,EAAE,CAkCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAAE,EACpB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,MAAM,CAwBR"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gate Evidence (uplift 1.4) — binds a deliver mission's gate outcomes to the
|
|
3
|
+
* exact commit they prove.
|
|
4
|
+
*
|
|
5
|
+
* A deliver mission ends with its gates green against some HEAD; that HEAD is
|
|
6
|
+
* the merge candidate a later ship action (git push / gh pr create/merge) will
|
|
7
|
+
* publish. This module records that pairing as
|
|
8
|
+
* `.uap/evidence/<candidateSha>.json` so the `evidence-bound-ship` enforcer can
|
|
9
|
+
* require, at ship time, proof that the gates passed for THIS commit — not for
|
|
10
|
+
* some earlier or later tree. Stale, missing, malformed, or SHA-mismatched
|
|
11
|
+
* evidence is rejected by the enforcer (fail closed).
|
|
12
|
+
*
|
|
13
|
+
* The artifact lives under `.uap/evidence/`, which enforcement-self-protect
|
|
14
|
+
* lists as a PROTECTED_TARGET with no agent carve-out (including
|
|
15
|
+
* interpreter-mediated writes): the deliver CLI (this module) writes it, an
|
|
16
|
+
* agent shell cannot. `.uap/` itself is git-ignored, so evidence is a local
|
|
17
|
+
* record, never committed payload.
|
|
18
|
+
*
|
|
19
|
+
* Writes are atomic (tmp + rename). The writer validates loudly — an
|
|
20
|
+
* unresolvable HEAD, a DIRTY TREE (the gates provably ran against something
|
|
21
|
+
* other than HEAD), or a malformed gate all throw; the deliver seam wraps the
|
|
22
|
+
* call fail-soft so evidence emission can never break a mission.
|
|
23
|
+
*/
|
|
24
|
+
import { execFileSync } from 'child_process';
|
|
25
|
+
import { mkdirSync, renameSync, writeFileSync } from 'fs';
|
|
26
|
+
import { join } from 'path';
|
|
27
|
+
/** Per-gate output tail bound (last-N characters). */
|
|
28
|
+
export const OUTPUT_TAIL_MAX = 2000;
|
|
29
|
+
/** Field bounds so a pathological gate cannot mint an unbounded artifact. */
|
|
30
|
+
export const NAME_MAX = 200;
|
|
31
|
+
export const COMMAND_MAX = 500;
|
|
32
|
+
/** A mission never legitimately runs more gates than this. */
|
|
33
|
+
export const MAX_GATES = 100;
|
|
34
|
+
/**
|
|
35
|
+
* Environment variables that weaken or bypass a gate. Mirrors
|
|
36
|
+
* enforcement_self_protect.BYPASS_PATTERNS plus the documented per-gate
|
|
37
|
+
* hatches; recorded into the artifact (when set) for audit. Keep in sync with
|
|
38
|
+
* the enforcer list.
|
|
39
|
+
*/
|
|
40
|
+
export const KNOWN_GATE_HATCHES = [
|
|
41
|
+
'UAP_DELIVER_BYPASS',
|
|
42
|
+
'UAP_ENFORCE_DELIVERY',
|
|
43
|
+
'UAP_SELF_PROTECT_OFF',
|
|
44
|
+
'UAP_NO_WORKTREE',
|
|
45
|
+
'UAP_WORKDIR_SCOPE_OFF',
|
|
46
|
+
'UAP_INFRA_PROTECT_OFF',
|
|
47
|
+
'UAP_NO_REVIEW',
|
|
48
|
+
'UAP_EVIDENCE_GATE_OFF',
|
|
49
|
+
'UAP_EVIDENCE_MAX_AGE_HOURS',
|
|
50
|
+
'UAP_QUALITY_GATE_OFF',
|
|
51
|
+
'UAP_USER_VALIDATION',
|
|
52
|
+
'UAP_DELIVER_NO_LOCK',
|
|
53
|
+
'UAP_ALLOW_GATELESS_ROOT',
|
|
54
|
+
'UAP_ORACLE_CONSISTENCY',
|
|
55
|
+
'UAP_SCHEMA_DIFF_INLINE',
|
|
56
|
+
'UAP_VISUAL_GATE_OFF',
|
|
57
|
+
'UAP_DESIGN_GATE_OFF',
|
|
58
|
+
];
|
|
59
|
+
const SHA_RE = /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/; // sha1 (40) or sha256 (64)
|
|
60
|
+
/** git exports repo-context vars into hook environments; strip them so the
|
|
61
|
+
* git calls below resolve against `projectDir`, never a hook's repo. */
|
|
62
|
+
function cleanGitEnv() {
|
|
63
|
+
const env = { ...process.env };
|
|
64
|
+
for (const key of Object.keys(env)) {
|
|
65
|
+
if (key.startsWith('GIT_'))
|
|
66
|
+
delete env[key];
|
|
67
|
+
}
|
|
68
|
+
return env;
|
|
69
|
+
}
|
|
70
|
+
function git(projectDir, args) {
|
|
71
|
+
return execFileSync('git', args, {
|
|
72
|
+
cwd: projectDir,
|
|
73
|
+
encoding: 'utf-8',
|
|
74
|
+
timeout: 5000,
|
|
75
|
+
env: cleanGitEnv(),
|
|
76
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
77
|
+
}).trim();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve and validate the candidate SHA for `projectDir`.
|
|
81
|
+
*
|
|
82
|
+
* Throws (fails loudly) when HEAD cannot be resolved — not a repo, unborn
|
|
83
|
+
* branch, git missing — or when git answers with something that is not a
|
|
84
|
+
* commit SHA. Evidence written against a guessed SHA would prove nothing, so
|
|
85
|
+
* there is no silent fallback here.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveCandidateSha(projectDir) {
|
|
88
|
+
const out = git(projectDir, ['rev-parse', '--verify', 'HEAD^{commit}']);
|
|
89
|
+
if (!SHA_RE.test(out)) {
|
|
90
|
+
throw new Error(`gate-evidence: git rev-parse returned a non-SHA: ${JSON.stringify(out.slice(0, 120))}`);
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Require the working tree to be CLEAN before evidence binds HEAD.
|
|
96
|
+
*
|
|
97
|
+
* Evidence claims "the gates passed for commit <sha>". If the tree carries
|
|
98
|
+
* uncommitted changes, the gates actually ran against HEAD-plus-delta and the
|
|
99
|
+
* claim is unprovable — the delta could be anything. The deliver flow this
|
|
100
|
+
* supports is therefore: commit the candidate, run `uap deliver` (baseline
|
|
101
|
+
* check goes green as alreadyDelivered), ship.
|
|
102
|
+
*
|
|
103
|
+
* `.uap/` is git-ignored, so the evidence write itself cannot dirty the tree
|
|
104
|
+
* — but the check runs BEFORE the write regardless.
|
|
105
|
+
*
|
|
106
|
+
* Throws with the offending porcelain lines when the tree is dirty.
|
|
107
|
+
*/
|
|
108
|
+
export function assertCleanTree(projectDir) {
|
|
109
|
+
const status = git(projectDir, ['status', '--porcelain']);
|
|
110
|
+
if (status !== '') {
|
|
111
|
+
const sample = status.split('\n').slice(0, 10).join('; ');
|
|
112
|
+
throw new Error(`gate-evidence: refusing to bind HEAD with a dirty working tree — the gates ran ` +
|
|
113
|
+
`against uncommitted changes, which the artifact cannot prove (${sample}). ` +
|
|
114
|
+
'Commit the candidate first, then record evidence.');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Names of KNOWN_GATE_HATCHES set to a non-empty value right now. */
|
|
118
|
+
export function activeGateHatches(env = process.env) {
|
|
119
|
+
return KNOWN_GATE_HATCHES.filter((name) => {
|
|
120
|
+
const v = env[name];
|
|
121
|
+
return typeof v === 'string' && v !== '';
|
|
122
|
+
}).sort();
|
|
123
|
+
}
|
|
124
|
+
/** Bound and validate one gate outcome; throws on a malformed entry. */
|
|
125
|
+
function normalizeGate(g, index) {
|
|
126
|
+
if (!g || typeof g !== 'object') {
|
|
127
|
+
throw new Error(`gate-evidence: gate[${index}] is not an object`);
|
|
128
|
+
}
|
|
129
|
+
if (typeof g.name !== 'string' || g.name.trim() === '') {
|
|
130
|
+
throw new Error(`gate-evidence: gate[${index}] has no name`);
|
|
131
|
+
}
|
|
132
|
+
if (typeof g.command !== 'string' || g.command.trim() === '') {
|
|
133
|
+
throw new Error(`gate-evidence: gate[${index}] (${g.name}) has no command`);
|
|
134
|
+
}
|
|
135
|
+
if (!Number.isInteger(g.exitCode)) {
|
|
136
|
+
throw new Error(`gate-evidence: gate[${index}] (${g.name}) has a non-integer exitCode`);
|
|
137
|
+
}
|
|
138
|
+
if (typeof g.at !== 'string' || Number.isNaN(Date.parse(g.at))) {
|
|
139
|
+
throw new Error(`gate-evidence: gate[${index}] (${g.name}) has an unparseable timestamp`);
|
|
140
|
+
}
|
|
141
|
+
const tail = typeof g.outputTail === 'string' ? g.outputTail : '';
|
|
142
|
+
return {
|
|
143
|
+
name: g.name.slice(0, NAME_MAX),
|
|
144
|
+
command: g.command.slice(0, COMMAND_MAX),
|
|
145
|
+
exitCode: g.exitCode,
|
|
146
|
+
// Keep the SUFFIX: a rung's verdict line is at the end of its output.
|
|
147
|
+
outputTail: tail.slice(-OUTPUT_TAIL_MAX),
|
|
148
|
+
at: new Date(g.at).toISOString(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** Path of the evidence artifact for one candidate SHA. */
|
|
152
|
+
export function gateEvidencePath(projectDir, sha) {
|
|
153
|
+
return join(projectDir, '.uap', 'evidence', `${sha}.json`);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Build the evidence gate list from a mission result.
|
|
157
|
+
*
|
|
158
|
+
* Source precedence: the LAST passing iteration (findLast semantics — evidence
|
|
159
|
+
* must describe the final passing tree, not an early pass the loop later
|
|
160
|
+
* regressed and repaired), else the baseline ladder run (alreadyDelivered),
|
|
161
|
+
* else an empty list (recordGateEvidence then refuses — zero gates prove
|
|
162
|
+
* nothing).
|
|
163
|
+
*
|
|
164
|
+
* Per-gate `at` is reconstructed: rungs carry durations but no wall-clock
|
|
165
|
+
* finish time, and they run back-to-back inside one ladder pass, so gate i's
|
|
166
|
+
* finish ≈ recordedAt − (durations of the gates after it). Approximate —
|
|
167
|
+
* honest ordering, not honest wall-clock.
|
|
168
|
+
*/
|
|
169
|
+
export function gateOutcomesFromResult(source, rungs, recordedAt = new Date()) {
|
|
170
|
+
let results;
|
|
171
|
+
for (let i = source.history.length - 1; i >= 0; i--) {
|
|
172
|
+
const rec = source.history[i];
|
|
173
|
+
if (rec.passed && rec.gateResults.length > 0) {
|
|
174
|
+
results = rec.gateResults;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
results ??= source.baselineGates;
|
|
179
|
+
if (!results)
|
|
180
|
+
return [];
|
|
181
|
+
const rungById = new Map(rungs.map((r) => [r.id, r]));
|
|
182
|
+
const ran = results.filter((r) => !r.skipped && r.exitCode !== null);
|
|
183
|
+
const base = recordedAt.getTime();
|
|
184
|
+
const outcomes = new Array(ran.length);
|
|
185
|
+
let suffixMs = 0;
|
|
186
|
+
for (let i = ran.length - 1; i >= 0; i--) {
|
|
187
|
+
const r = ran[i];
|
|
188
|
+
const rung = rungById.get(r.id);
|
|
189
|
+
outcomes[i] = {
|
|
190
|
+
name: r.name,
|
|
191
|
+
// The exact command when the rung is still resolvable; the gate name
|
|
192
|
+
// otherwise (redetected mid-loop rungs may not be in scope).
|
|
193
|
+
command: rung ? [rung.command, ...rung.args].join(' ') : r.name,
|
|
194
|
+
exitCode: r.exitCode,
|
|
195
|
+
outputTail: r.outputTail,
|
|
196
|
+
at: new Date(base - suffixMs).toISOString(),
|
|
197
|
+
};
|
|
198
|
+
suffixMs += r.durationMs;
|
|
199
|
+
}
|
|
200
|
+
return outcomes;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Record gate evidence for the current HEAD of `projectDir`.
|
|
204
|
+
*
|
|
205
|
+
* @param projectDir working tree whose HEAD is the merge candidate
|
|
206
|
+
* @param gates outcomes of the mission's gates (must be non-empty)
|
|
207
|
+
* @param opts.runId deliver run id to attribute the evidence to
|
|
208
|
+
* @returns the evidence artifact path
|
|
209
|
+
* @throws on an unresolvable/invalid HEAD, a DIRTY tree, a malformed gate, or
|
|
210
|
+
* an empty list — the caller decides whether that is fatal (the
|
|
211
|
+
* deliver seam wraps this fail-soft; the enforcer consumes only
|
|
212
|
+
* well-formed artifacts).
|
|
213
|
+
*/
|
|
214
|
+
export function recordGateEvidence(projectDir, gates, opts = {}) {
|
|
215
|
+
const sha = resolveCandidateSha(projectDir);
|
|
216
|
+
// BEFORE any write: evidence must bind exactly what the gates saw.
|
|
217
|
+
assertCleanTree(projectDir);
|
|
218
|
+
if (!Array.isArray(gates) || gates.length === 0) {
|
|
219
|
+
throw new Error('gate-evidence: refusing to record an artifact with zero gates — it would prove nothing');
|
|
220
|
+
}
|
|
221
|
+
const bounded = gates.slice(0, MAX_GATES).map(normalizeGate);
|
|
222
|
+
const evidence = {
|
|
223
|
+
version: 1,
|
|
224
|
+
candidateSha: sha,
|
|
225
|
+
recordedAt: new Date().toISOString(),
|
|
226
|
+
...(opts.runId ? { runId: opts.runId.slice(0, 120) } : {}),
|
|
227
|
+
hatches: activeGateHatches(),
|
|
228
|
+
gates: bounded,
|
|
229
|
+
};
|
|
230
|
+
const path = gateEvidencePath(projectDir, sha);
|
|
231
|
+
mkdirSync(join(projectDir, '.uap', 'evidence'), { recursive: true });
|
|
232
|
+
// Atomic write: a crashed mission must never leave a half-written artifact —
|
|
233
|
+
// the enforcer would read it as malformed and block a legitimate ship.
|
|
234
|
+
const tmp = `${path}.tmp-${process.pid}`;
|
|
235
|
+
writeFileSync(tmp, JSON.stringify(evidence, null, 2) + '\n', 'utf-8');
|
|
236
|
+
renameSync(tmp, path);
|
|
237
|
+
return path;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=gate-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-evidence.js","sourceRoot":"","sources":["../../src/delivery/gate-evidence.ts"],"names":[],"mappings":"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"}
|
package/dist/delivery/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export { InMemoryPracticeStore, FilePracticeStore, extractKeywords, distillPract
|
|
|
30
30
|
export { exploreAndCommit, DEFAULT_STRATEGY_SEEDS, MAX_CANDIDATES, type CandidateResult, type ExplorationResult, type ExplorerConfig, type StrategySeed, } from './explorer.js';
|
|
31
31
|
export { createModelJudge, extractJson, type Judge, type JudgeCandidate, type JudgeVerdict, } from './judge.js';
|
|
32
32
|
export { createModelCritic, parseFixList, type Critic, type Critique, type CritiqueInput, } from './critic.js';
|
|
33
|
+
export { recordGateEvidence, resolveCandidateSha, assertCleanTree, gateEvidencePath, gateOutcomesFromResult, activeGateHatches, KNOWN_GATE_HATCHES, OUTPUT_TAIL_MAX, type GateOutcome, type GateEvidence, type GateEvidenceSource, } from './gate-evidence.js';
|
|
33
34
|
export { detectRungs, runLadder, runRung, formatFeedback, dockerCargoRung, type GateRung, type RungResult, type RungFailureReason, type LadderResult, type LadderOptions, } from './verifier-ladder.js';
|
|
34
35
|
export { applyFileBlocks, applyFileBlocksWithRollback, parseFileBlocks, findProtectedTestFiles, isGateConfigBasename, isTestFilePath, type Applier, type ApplyOptions, type ApplyResult, type FileBlock, type RevertibleApply, } from './applier.js';
|
|
35
36
|
export { planAutoOptimization, DELIVERY_COMPLEXITY_THRESHOLDS, type AutoPlan, type DeliveryComplexity, } from './auto-optimizer.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
|
package/dist/delivery/index.js
CHANGED
|
@@ -30,6 +30,7 @@ export { InMemoryPracticeStore, FilePracticeStore, extractKeywords, distillPract
|
|
|
30
30
|
export { exploreAndCommit, DEFAULT_STRATEGY_SEEDS, MAX_CANDIDATES, } from './explorer.js';
|
|
31
31
|
export { createModelJudge, extractJson, } from './judge.js';
|
|
32
32
|
export { createModelCritic, parseFixList, } from './critic.js';
|
|
33
|
+
export { recordGateEvidence, resolveCandidateSha, assertCleanTree, gateEvidencePath, gateOutcomesFromResult, activeGateHatches, KNOWN_GATE_HATCHES, OUTPUT_TAIL_MAX, } from './gate-evidence.js';
|
|
33
34
|
export { detectRungs, runLadder, runRung, formatFeedback, dockerCargoRung, } from './verifier-ladder.js';
|
|
34
35
|
export { applyFileBlocks, applyFileBlocksWithRollback, parseFileBlocks, findProtectedTestFiles, isGateConfigBasename, isTestFilePath, } from './applier.js';
|
|
35
36
|
export { planAutoOptimization, DELIVERY_COMPLEXITY_THRESHOLDS, } from './auto-optimizer.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delivery/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROUTING CORPUS — loads the routable surfaces (patterns, droids, skills)
|
|
3
|
+
* into a uniform entry list for the routing eval harness.
|
|
4
|
+
*
|
|
5
|
+
* The eval measures whether each entry's description keeps it rank-1
|
|
6
|
+
* separable as the registry grows (agent-dev-team precedent: routing evals
|
|
7
|
+
* with planted traps, CI-enforced).
|
|
8
|
+
*/
|
|
9
|
+
export type RoutingKind = 'pattern' | 'droid' | 'skill';
|
|
10
|
+
export interface RoutingEntry {
|
|
11
|
+
/** Unique key: "<kind>:<id>" — e.g. "pattern:12", "droid:qa-expert". */
|
|
12
|
+
key: string;
|
|
13
|
+
kind: RoutingKind;
|
|
14
|
+
/** Bare id within the kind (pattern id, droid/skill name). */
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
/** Text the ranker embeds: name + description (+ keywords for patterns). */
|
|
18
|
+
text: string;
|
|
19
|
+
/** True when a real frontmatter description was found (false = body fallback). */
|
|
20
|
+
hasDescription: boolean;
|
|
21
|
+
/** Repo-relative source path. */
|
|
22
|
+
source: string;
|
|
23
|
+
}
|
|
24
|
+
interface Frontmatter {
|
|
25
|
+
name?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
}
|
|
28
|
+
/** Minimal frontmatter parser — single-line `key: value` for name/description only. */
|
|
29
|
+
export declare function parseFrontmatter(content: string): Frontmatter;
|
|
30
|
+
/** First non-heading, non-empty body paragraph, for entries without a description. */
|
|
31
|
+
export declare function bodyFallback(content: string, maxLen?: number): string;
|
|
32
|
+
/** Load all (or selected) routing surfaces from a project directory. */
|
|
33
|
+
export declare function loadRoutingCorpus(projectDir: string, kinds?: RoutingKind[]): RoutingEntry[];
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=routing-corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-corpus.d.ts","sourceRoot":"","sources":["../../src/evals/routing-corpus.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,cAAc,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAS7D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CASlE;AA6GD,wEAAwE;AACxE,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,WAAW,EAAkC,GACnD,YAAY,EAAE,CAWhB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ROUTING CORPUS — loads the routable surfaces (patterns, droids, skills)
|
|
3
|
+
* into a uniform entry list for the routing eval harness.
|
|
4
|
+
*
|
|
5
|
+
* The eval measures whether each entry's description keeps it rank-1
|
|
6
|
+
* separable as the registry grows (agent-dev-team precedent: routing evals
|
|
7
|
+
* with planted traps, CI-enforced).
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
/** Minimal frontmatter parser — single-line `key: value` for name/description only. */
|
|
12
|
+
export function parseFrontmatter(content) {
|
|
13
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
14
|
+
if (!match)
|
|
15
|
+
return {};
|
|
16
|
+
const out = {};
|
|
17
|
+
for (const line of match[1].split(/\r?\n/)) {
|
|
18
|
+
const kv = line.match(/^(name|description):\s*(.+)$/);
|
|
19
|
+
if (kv)
|
|
20
|
+
out[kv[1]] = kv[2].trim();
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/** First non-heading, non-empty body paragraph, for entries without a description. */
|
|
25
|
+
export function bodyFallback(content, maxLen = 300) {
|
|
26
|
+
const body = content.replace(/^---\r?\n[\s\S]*?\r?\n---/, '');
|
|
27
|
+
for (const raw of body.split(/\r?\n/)) {
|
|
28
|
+
const line = raw.trim();
|
|
29
|
+
if (line.length < 20)
|
|
30
|
+
continue;
|
|
31
|
+
if (line.startsWith('#') || line.startsWith('>') || line.startsWith('-') || line.startsWith('|'))
|
|
32
|
+
continue;
|
|
33
|
+
return line.slice(0, maxLen);
|
|
34
|
+
}
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
function loadPatterns(projectDir) {
|
|
38
|
+
const indexPath = join(projectDir, '.factory/patterns/index.json');
|
|
39
|
+
if (!existsSync(indexPath))
|
|
40
|
+
return [];
|
|
41
|
+
try {
|
|
42
|
+
const data = JSON.parse(readFileSync(indexPath, 'utf-8'));
|
|
43
|
+
return data.patterns.map((p) => ({
|
|
44
|
+
key: `pattern:${p.id}`,
|
|
45
|
+
kind: 'pattern',
|
|
46
|
+
id: String(p.id),
|
|
47
|
+
name: p.title,
|
|
48
|
+
text: `${p.title} ${p.category} ${(p.keywords ?? []).join(' ')}`,
|
|
49
|
+
hasDescription: true,
|
|
50
|
+
source: '.factory/patterns/index.json',
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// A malformed index.json must fail loudly with context — swallowing it
|
|
55
|
+
// resurfaces later as a misleading "corpus is empty" error.
|
|
56
|
+
throw new Error(`failed to parse ${indexPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function loadMarkdownEntry(kind, filePath, source, fallbackName) {
|
|
60
|
+
let content;
|
|
61
|
+
try {
|
|
62
|
+
content = readFileSync(filePath, 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const fm = parseFrontmatter(content);
|
|
68
|
+
const name = fm.name ?? fallbackName;
|
|
69
|
+
const description = fm.description ?? bodyFallback(content);
|
|
70
|
+
if (!description)
|
|
71
|
+
return null; // unroutable: no text to embed at all
|
|
72
|
+
return {
|
|
73
|
+
key: `${kind}:${name}`,
|
|
74
|
+
kind,
|
|
75
|
+
id: name,
|
|
76
|
+
name,
|
|
77
|
+
text: `${name} ${description}`,
|
|
78
|
+
hasDescription: fm.description !== undefined,
|
|
79
|
+
source,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function loadDroids(projectDir) {
|
|
83
|
+
const dir = join(projectDir, '.factory/droids');
|
|
84
|
+
if (!existsSync(dir))
|
|
85
|
+
return [];
|
|
86
|
+
const entries = [];
|
|
87
|
+
for (const file of readdirSync(dir)) {
|
|
88
|
+
if (!file.endsWith('.md'))
|
|
89
|
+
continue;
|
|
90
|
+
const entry = loadMarkdownEntry('droid', join(dir, file), `.factory/droids/${file}`, file.replace(/\.md$/, ''));
|
|
91
|
+
if (entry)
|
|
92
|
+
entries.push(entry);
|
|
93
|
+
}
|
|
94
|
+
return entries;
|
|
95
|
+
}
|
|
96
|
+
function loadSkills(projectDir) {
|
|
97
|
+
const dir = join(projectDir, '.factory/skills');
|
|
98
|
+
if (!existsSync(dir))
|
|
99
|
+
return [];
|
|
100
|
+
const entries = [];
|
|
101
|
+
for (const item of readdirSync(dir)) {
|
|
102
|
+
const full = join(dir, item);
|
|
103
|
+
// throwIfNoEntry: a dangling symlink or vanished entry skips, not crashes.
|
|
104
|
+
const stat = statSync(full, { throwIfNoEntry: false });
|
|
105
|
+
if (!stat)
|
|
106
|
+
continue;
|
|
107
|
+
if (stat.isDirectory()) {
|
|
108
|
+
const skillFile = join(full, 'SKILL.md');
|
|
109
|
+
if (!existsSync(skillFile))
|
|
110
|
+
continue;
|
|
111
|
+
const entry = loadMarkdownEntry('skill', skillFile, `.factory/skills/${item}/SKILL.md`, item);
|
|
112
|
+
if (entry)
|
|
113
|
+
entries.push(entry);
|
|
114
|
+
}
|
|
115
|
+
else if (item.endsWith('.md') && item !== 'SKILL-TEMPLATE.md') {
|
|
116
|
+
const entry = loadMarkdownEntry('skill', full, `.factory/skills/${item}`, item.replace(/\.md$/, ''));
|
|
117
|
+
if (entry)
|
|
118
|
+
entries.push(entry);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return entries;
|
|
122
|
+
}
|
|
123
|
+
const LOADERS = {
|
|
124
|
+
pattern: loadPatterns,
|
|
125
|
+
droid: loadDroids,
|
|
126
|
+
skill: loadSkills,
|
|
127
|
+
};
|
|
128
|
+
/** Load all (or selected) routing surfaces from a project directory. */
|
|
129
|
+
export function loadRoutingCorpus(projectDir, kinds = ['pattern', 'droid', 'skill']) {
|
|
130
|
+
const seen = new Set();
|
|
131
|
+
const entries = [];
|
|
132
|
+
for (const kind of kinds) {
|
|
133
|
+
for (const entry of LOADERS[kind](projectDir)) {
|
|
134
|
+
if (seen.has(entry.key))
|
|
135
|
+
continue; // e.g. duplicate droid name
|
|
136
|
+
seen.add(entry.key);
|
|
137
|
+
entries.push(entry);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return entries;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=routing-corpus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-corpus.js","sourceRoot":"","sources":["../../src/evals/routing-corpus.ts"],"names":[],"mappings":"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"}
|