@mingyuxu/check 0.1.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.
Files changed (237) hide show
  1. package/README.md +7 -0
  2. package/dist/critic/critique.d.ts +31 -0
  3. package/dist/critic/critique.d.ts.map +1 -0
  4. package/dist/critic/critique.js +68 -0
  5. package/dist/critic/critique.js.map +1 -0
  6. package/dist/critic/observe.d.ts +48 -0
  7. package/dist/critic/observe.d.ts.map +1 -0
  8. package/dist/critic/observe.js +62 -0
  9. package/dist/critic/observe.js.map +1 -0
  10. package/dist/domain/actions.d.ts +67 -0
  11. package/dist/domain/actions.d.ts.map +1 -0
  12. package/dist/domain/actions.js +123 -0
  13. package/dist/domain/actions.js.map +1 -0
  14. package/dist/domain/invalidation.d.ts +18 -0
  15. package/dist/domain/invalidation.d.ts.map +1 -0
  16. package/dist/domain/invalidation.js +44 -0
  17. package/dist/domain/invalidation.js.map +1 -0
  18. package/dist/domain/registers.d.ts +45 -0
  19. package/dist/domain/registers.d.ts.map +1 -0
  20. package/dist/domain/registers.js +121 -0
  21. package/dist/domain/registers.js.map +1 -0
  22. package/dist/domain/view.d.ts +48 -0
  23. package/dist/domain/view.d.ts.map +1 -0
  24. package/dist/domain/view.js +70 -0
  25. package/dist/domain/view.js.map +1 -0
  26. package/dist/forge/attribution.d.ts +18 -0
  27. package/dist/forge/attribution.d.ts.map +1 -0
  28. package/dist/forge/attribution.js +83 -0
  29. package/dist/forge/attribution.js.map +1 -0
  30. package/dist/forge/bakeoff.d.ts +35 -0
  31. package/dist/forge/bakeoff.d.ts.map +1 -0
  32. package/dist/forge/bakeoff.js +48 -0
  33. package/dist/forge/bakeoff.js.map +1 -0
  34. package/dist/forge/contracts.d.ts +67 -0
  35. package/dist/forge/contracts.d.ts.map +1 -0
  36. package/dist/forge/contracts.js +70 -0
  37. package/dist/forge/contracts.js.map +1 -0
  38. package/dist/forge/evaluate-scenario.d.ts +17 -0
  39. package/dist/forge/evaluate-scenario.d.ts.map +1 -0
  40. package/dist/forge/evaluate-scenario.js +93 -0
  41. package/dist/forge/evaluate-scenario.js.map +1 -0
  42. package/dist/forge/evaluate.d.ts +25 -0
  43. package/dist/forge/evaluate.d.ts.map +1 -0
  44. package/dist/forge/evaluate.js +81 -0
  45. package/dist/forge/evaluate.js.map +1 -0
  46. package/dist/forge/feedback.d.ts +21 -0
  47. package/dist/forge/feedback.d.ts.map +1 -0
  48. package/dist/forge/feedback.js +41 -0
  49. package/dist/forge/feedback.js.map +1 -0
  50. package/dist/forge/reflect.d.ts +35 -0
  51. package/dist/forge/reflect.d.ts.map +1 -0
  52. package/dist/forge/reflect.js +72 -0
  53. package/dist/forge/reflect.js.map +1 -0
  54. package/dist/forge/scorer.d.ts +67 -0
  55. package/dist/forge/scorer.d.ts.map +1 -0
  56. package/dist/forge/scorer.js +99 -0
  57. package/dist/forge/scorer.js.map +1 -0
  58. package/dist/forge/trace.d.ts +25 -0
  59. package/dist/forge/trace.d.ts.map +1 -0
  60. package/dist/forge/trace.js +51 -0
  61. package/dist/forge/trace.js.map +1 -0
  62. package/dist/index.d.ts +78 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +47 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/knowledge/loader.d.ts +19 -0
  67. package/dist/knowledge/loader.d.ts.map +1 -0
  68. package/dist/knowledge/loader.js +76 -0
  69. package/dist/knowledge/loader.js.map +1 -0
  70. package/dist/knowledge/retrieval.d.ts +23 -0
  71. package/dist/knowledge/retrieval.d.ts.map +1 -0
  72. package/dist/knowledge/retrieval.js +100 -0
  73. package/dist/knowledge/retrieval.js.map +1 -0
  74. package/dist/knowledge/skill.d.ts +22 -0
  75. package/dist/knowledge/skill.d.ts.map +1 -0
  76. package/dist/knowledge/skill.js +112 -0
  77. package/dist/knowledge/skill.js.map +1 -0
  78. package/dist/knowledge/write.d.ts +35 -0
  79. package/dist/knowledge/write.d.ts.map +1 -0
  80. package/dist/knowledge/write.js +84 -0
  81. package/dist/knowledge/write.js.map +1 -0
  82. package/dist/manage.d.ts +7 -0
  83. package/dist/manage.d.ts.map +1 -0
  84. package/dist/manage.js +36 -0
  85. package/dist/manage.js.map +1 -0
  86. package/dist/methods/loader.d.ts +18 -0
  87. package/dist/methods/loader.d.ts.map +1 -0
  88. package/dist/methods/loader.js +65 -0
  89. package/dist/methods/loader.js.map +1 -0
  90. package/dist/nodes/aggregate.d.ts +2 -0
  91. package/dist/nodes/aggregate.d.ts.map +1 -0
  92. package/dist/nodes/aggregate.js +101 -0
  93. package/dist/nodes/aggregate.js.map +1 -0
  94. package/dist/nodes/base.d.ts +31 -0
  95. package/dist/nodes/base.d.ts.map +1 -0
  96. package/dist/nodes/base.js +44 -0
  97. package/dist/nodes/base.js.map +1 -0
  98. package/dist/nodes/cognition.d.ts +2 -0
  99. package/dist/nodes/cognition.d.ts.map +1 -0
  100. package/dist/nodes/cognition.js +263 -0
  101. package/dist/nodes/cognition.js.map +1 -0
  102. package/dist/nodes/confidence.d.ts +9 -0
  103. package/dist/nodes/confidence.d.ts.map +1 -0
  104. package/dist/nodes/confidence.js +19 -0
  105. package/dist/nodes/confidence.js.map +1 -0
  106. package/dist/nodes/deliver.d.ts +2 -0
  107. package/dist/nodes/deliver.d.ts.map +1 -0
  108. package/dist/nodes/deliver.js +37 -0
  109. package/dist/nodes/deliver.js.map +1 -0
  110. package/dist/nodes/evidence.d.ts +2 -0
  111. package/dist/nodes/evidence.d.ts.map +1 -0
  112. package/dist/nodes/evidence.js +118 -0
  113. package/dist/nodes/evidence.js.map +1 -0
  114. package/dist/nodes/ground.d.ts +2 -0
  115. package/dist/nodes/ground.d.ts.map +1 -0
  116. package/dist/nodes/ground.js +22 -0
  117. package/dist/nodes/ground.js.map +1 -0
  118. package/dist/nodes/parse.d.ts +2 -0
  119. package/dist/nodes/parse.d.ts.map +1 -0
  120. package/dist/nodes/parse.js +72 -0
  121. package/dist/nodes/parse.js.map +1 -0
  122. package/dist/nodes/scope.d.ts +4 -0
  123. package/dist/nodes/scope.d.ts.map +1 -0
  124. package/dist/nodes/scope.js +63 -0
  125. package/dist/nodes/scope.js.map +1 -0
  126. package/dist/nodes/shape.d.ts +2 -0
  127. package/dist/nodes/shape.d.ts.map +1 -0
  128. package/dist/nodes/shape.js +111 -0
  129. package/dist/nodes/shape.js.map +1 -0
  130. package/dist/ontology/checkskill.d.ts +26 -0
  131. package/dist/ontology/checkskill.d.ts.map +1 -0
  132. package/dist/ontology/checkskill.js +89 -0
  133. package/dist/ontology/checkskill.js.map +1 -0
  134. package/dist/ontology/functions.d.ts +29 -0
  135. package/dist/ontology/functions.d.ts.map +1 -0
  136. package/dist/ontology/functions.js +143 -0
  137. package/dist/ontology/functions.js.map +1 -0
  138. package/dist/ontology/loader.d.ts +44 -0
  139. package/dist/ontology/loader.d.ts.map +1 -0
  140. package/dist/ontology/loader.js +254 -0
  141. package/dist/ontology/loader.js.map +1 -0
  142. package/dist/ontology/runtime-graph.d.ts +22 -0
  143. package/dist/ontology/runtime-graph.d.ts.map +1 -0
  144. package/dist/ontology/runtime-graph.js +111 -0
  145. package/dist/ontology/runtime-graph.js.map +1 -0
  146. package/dist/ontology/store.d.ts +65 -0
  147. package/dist/ontology/store.d.ts.map +1 -0
  148. package/dist/ontology/store.js +179 -0
  149. package/dist/ontology/store.js.map +1 -0
  150. package/dist/parsers/exec.d.ts +9 -0
  151. package/dist/parsers/exec.d.ts.map +1 -0
  152. package/dist/parsers/exec.js +41 -0
  153. package/dist/parsers/exec.js.map +1 -0
  154. package/dist/parsers/runner.d.ts +2 -0
  155. package/dist/parsers/runner.d.ts.map +1 -0
  156. package/dist/parsers/runner.js +26 -0
  157. package/dist/parsers/runner.js.map +1 -0
  158. package/dist/parsers/store.d.ts +32 -0
  159. package/dist/parsers/store.d.ts.map +1 -0
  160. package/dist/parsers/store.js +64 -0
  161. package/dist/parsers/store.js.map +1 -0
  162. package/dist/parsers/synthesize.d.ts +26 -0
  163. package/dist/parsers/synthesize.d.ts.map +1 -0
  164. package/dist/parsers/synthesize.js +63 -0
  165. package/dist/parsers/synthesize.js.map +1 -0
  166. package/dist/planner.d.ts +89 -0
  167. package/dist/planner.d.ts.map +1 -0
  168. package/dist/planner.js +785 -0
  169. package/dist/planner.js.map +1 -0
  170. package/dist/project.d.ts +4 -0
  171. package/dist/project.d.ts.map +1 -0
  172. package/dist/project.js +42 -0
  173. package/dist/project.js.map +1 -0
  174. package/dist/scenario-builder.d.ts +56 -0
  175. package/dist/scenario-builder.d.ts.map +1 -0
  176. package/dist/scenario-builder.js +366 -0
  177. package/dist/scenario-builder.js.map +1 -0
  178. package/dist/schemas/index.d.ts +12 -0
  179. package/dist/schemas/index.d.ts.map +1 -0
  180. package/dist/schemas/index.js +8 -0
  181. package/dist/schemas/index.js.map +1 -0
  182. package/dist/schemas/judgment.d.ts +38 -0
  183. package/dist/schemas/judgment.d.ts.map +1 -0
  184. package/dist/schemas/judgment.js +45 -0
  185. package/dist/schemas/judgment.js.map +1 -0
  186. package/dist/schemas/payloads.d.ts +53 -0
  187. package/dist/schemas/payloads.d.ts.map +1 -0
  188. package/dist/schemas/payloads.js +54 -0
  189. package/dist/schemas/payloads.js.map +1 -0
  190. package/dist/schemas/result.d.ts +36 -0
  191. package/dist/schemas/result.d.ts.map +1 -0
  192. package/dist/schemas/result.js +26 -0
  193. package/dist/schemas/result.js.map +1 -0
  194. package/dist/schemas/spec.d.ts +40 -0
  195. package/dist/schemas/spec.d.ts.map +1 -0
  196. package/dist/schemas/spec.js +82 -0
  197. package/dist/schemas/spec.js.map +1 -0
  198. package/dist/schemas/target.d.ts +28 -0
  199. package/dist/schemas/target.d.ts.map +1 -0
  200. package/dist/schemas/target.js +36 -0
  201. package/dist/schemas/target.js.map +1 -0
  202. package/dist/schemas/workflow.d.ts +21 -0
  203. package/dist/schemas/workflow.d.ts.map +1 -0
  204. package/dist/schemas/workflow.js +100 -0
  205. package/dist/schemas/workflow.js.map +1 -0
  206. package/dist/skills/judge-runner.d.ts +2 -0
  207. package/dist/skills/judge-runner.d.ts.map +1 -0
  208. package/dist/skills/judge-runner.js +29 -0
  209. package/dist/skills/judge-runner.js.map +1 -0
  210. package/dist/skills/judge-synth.d.ts +31 -0
  211. package/dist/skills/judge-synth.d.ts.map +1 -0
  212. package/dist/skills/judge-synth.js +87 -0
  213. package/dist/skills/judge-synth.js.map +1 -0
  214. package/dist/subagents/worker.d.ts +5 -0
  215. package/dist/subagents/worker.d.ts.map +1 -0
  216. package/dist/subagents/worker.js +58 -0
  217. package/dist/subagents/worker.js.map +1 -0
  218. package/dist/workflows/context.d.ts +26 -0
  219. package/dist/workflows/context.d.ts.map +1 -0
  220. package/dist/workflows/context.js +23 -0
  221. package/dist/workflows/context.js.map +1 -0
  222. package/dist/workflows/executor.d.ts +44 -0
  223. package/dist/workflows/executor.d.ts.map +1 -0
  224. package/dist/workflows/executor.js +146 -0
  225. package/dist/workflows/executor.js.map +1 -0
  226. package/dist/workflows/merge.d.ts +4 -0
  227. package/dist/workflows/merge.d.ts.map +1 -0
  228. package/dist/workflows/merge.js +21 -0
  229. package/dist/workflows/merge.js.map +1 -0
  230. package/dist/workflows/run.d.ts +20 -0
  231. package/dist/workflows/run.d.ts.map +1 -0
  232. package/dist/workflows/run.js +66 -0
  233. package/dist/workflows/run.js.map +1 -0
  234. package/knowledge/methods/prose-rule.method.md +21 -0
  235. package/knowledge/methods/ratio-limit.method.md +31 -0
  236. package/knowledge/ontology/verification.yaml +268 -0
  237. package/package.json +36 -0
@@ -0,0 +1,121 @@
1
+ /**
2
+ * v4/v5 领域运行时:把盘上的 Target 列表实例化为 Ontology 对象图,再由 Method
3
+ * 合成为 CheckSkill。这里没有流程编号,只有带类型的对象、关系和函数输入/输出。
4
+ */
5
+ import { createHash } from "node:crypto";
6
+ import { basename } from "node:path";
7
+ import { methodRef, selectMethod } from "../methods/loader.js";
8
+ import { buildCheckSkill } from "../ontology/checkskill.js";
9
+ export function targetDigest(targets) {
10
+ const stable = targets.map((t) => ({
11
+ id: t.target_id, applicability: t.applicability, retrieval: t.retrieval,
12
+ judge: t.judge, outcome: t.outcome_domain, meta: t.meta,
13
+ }));
14
+ return createHash("sha256").update(JSON.stringify(stable)).digest("hex").slice(0, 16);
15
+ }
16
+ /** LLM 未标 rule_kind 时的保守分类。只识别高置信模式,其余交给通用 Method。 */
17
+ export function inferRuleKind(t) {
18
+ const stated = String(t.meta.rule_kind ?? "").trim();
19
+ if (stated)
20
+ return stated;
21
+ const text = [t.meta.name, t.judge.rubric_text, ...(t.retrieval.content_keywords ?? [])].join(" ");
22
+ if (/(%|%|百分之|比例).*(不得超过|不超过|不低于|至少|上限|下限)|(?:不得超过|不超过|不低于|至少).*(%|%|百分之|比例)/.test(text))
23
+ return "ratio_limit";
24
+ if (/(禁止|不得|严禁)/.test(text))
25
+ return "prohibition";
26
+ if (/(资质|资格|许可|牌照)/.test(text))
27
+ return "qualification";
28
+ if (/(披露|公示|告知)/.test(text))
29
+ return "disclosure";
30
+ if (/(阈值|不少于|不高于|至少|至多)/.test(text))
31
+ return "threshold";
32
+ return "procedure";
33
+ }
34
+ export function instantiateDomain(targets, methods, opts) {
35
+ const regulationId = basename(opts.regulationPath || "regulation");
36
+ const objects = [{
37
+ type: "Regulation", id: regulationId,
38
+ data: { regulation_id: regulationId, title: regulationId, source_file: opts.regulationPath },
39
+ }];
40
+ const links = [];
41
+ const selections = [];
42
+ const checkskills = {};
43
+ const unresolved = [];
44
+ for (const t of targets) {
45
+ const ruleKind = inferRuleKind(t);
46
+ const clauseId = String(t.meta.rule_clause_id ?? `${regulationId}:${t.target_id}`);
47
+ const prov = t.meta.provenance ?? {};
48
+ t.meta.rule_kind = ruleKind;
49
+ t.meta.rule_clause_id = clauseId;
50
+ objects.push({
51
+ type: "RuleClause", id: clauseId,
52
+ data: {
53
+ clause_id: clauseId,
54
+ source_ref: { regulation_id: regulationId, article: prov.section ?? prov.chunk_id ?? "unknown" },
55
+ text: prov.source_quote ?? t.judge.rubric_text ?? "",
56
+ rule_kind: ruleKind,
57
+ normative: "mandatory",
58
+ status: "active",
59
+ },
60
+ });
61
+ links.push({ type: "hasClause", from: regulationId, to: clauseId });
62
+ const targetId = t.target_id;
63
+ const rubricId = `${targetId}:rubric`;
64
+ const requirementId = `${targetId}:evidence`;
65
+ objects.push({ type: "VerificationTarget", id: targetId, data: { target_id: targetId, name: t.meta.name ?? targetId, task_type: t.task_type, applicability: t.applicability, outcome_domain: t.outcome_domain, status: "draft" } }, { type: "Rubric", id: rubricId, data: { rubric_id: rubricId, criteria: t.judge.rubric_text ?? "", constraint: t.judge.constraint ?? null } }, { type: "EvidenceRequirement", id: requirementId, data: { req_id: requirementId, description: "判定必须引用文档原文;无充分证据时 needs_review", evidence_kind: "quote" } });
66
+ links.push({ type: "derivesTo", from: clauseId, to: targetId }, { type: "judgedBy", from: targetId, to: rubricId }, { type: "requires", from: targetId, to: requirementId });
67
+ const method = selectMethod(methods, ruleKind);
68
+ if (!method) {
69
+ unresolved.push({ target_id: targetId, rule_kind: ruleKind, reason: "没有匹配的 Method" });
70
+ continue;
71
+ }
72
+ const mref = methodRef(method);
73
+ t.meta.built_by_method = mref;
74
+ t.meta.method_source = method.source;
75
+ if (method.emits_function)
76
+ t.judge.function_ref = method.emits_function;
77
+ applyTypedMethod(t, ruleKind);
78
+ const selection = {
79
+ target_id: targetId, clause_id: clauseId, rule_kind: ruleKind,
80
+ method_ref: mref, method_source: method.source,
81
+ emits_function: method.emits_function ?? "judge.prose_grounded",
82
+ };
83
+ selections.push(selection);
84
+ const skill = buildCheckSkill(t, {
85
+ ontologyVersion: opts.ontologyVersion,
86
+ builtByMethod: mref,
87
+ methodFunction: selection.emits_function,
88
+ lifecycle: opts.lifecycle ?? "draft",
89
+ winnerSpec: opts.winnerSpec,
90
+ frozenAt: opts.frozenAt,
91
+ eval: opts.eval,
92
+ });
93
+ checkskills[targetId] = skill;
94
+ objects.push({ type: "Method", id: mref, data: { method_id: method.method_id, version: method.version, applies_to_rule_kind: method.applies_to_rule_kind, produces: method.produces, emits_function: method.emits_function, source: method.source } }, { type: "CheckSkill", id: String(skill.id), data: skill });
95
+ links.push({ type: "realizedBy", from: targetId, to: String(skill.id) }, { type: "builtByMethod", from: String(skill.id), to: mref });
96
+ }
97
+ return {
98
+ ontology_version: opts.ontologyVersion,
99
+ target_digest: targetDigest(targets),
100
+ objects: dedupe(objects, (o) => `${o.type}:${o.id}`),
101
+ links: dedupe(links, (l) => `${l.type}:${l.from}:${l.to}`),
102
+ method_selection: selections,
103
+ checkskills,
104
+ unresolved,
105
+ };
106
+ }
107
+ function applyTypedMethod(t, ruleKind) {
108
+ if (ruleKind !== "ratio_limit")
109
+ return;
110
+ const text = String(t.judge.rubric_text ?? "");
111
+ const m = /(不得超过|不超过|不高于|至多|不低于|不少于|至少|等于|≤|>=|≥|<=|=)\s*(\d+(?:\.\d+)?)\s*(%|%|百分之)?/.exec(text);
112
+ if (!m)
113
+ return;
114
+ const op = /不低于|不少于|至少|≥|>=/.test(m[1]) ? ">=" : /等于|^=$/.test(m[1]) ? "==" : "<=";
115
+ t.judge.kind = "threshold_compare";
116
+ t.judge.constraint = { op, value: Number(m[2]), unit: m[3] ? "percent" : undefined };
117
+ }
118
+ function dedupe(rows, key) {
119
+ return [...new Map(rows.map((row) => [key(row), row])).values()];
120
+ }
121
+ //# sourceMappingURL=registers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registers.js","sourceRoot":"","sources":["../../src/domain/registers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Session } from "@mingyuxu/core";
2
+ import type { VerificationAgent } from "../planner.js";
3
+ import type { ActionDescription } from "./actions.js";
4
+ export interface DomainView {
5
+ scenario: string;
6
+ goal: string;
7
+ ontology: {
8
+ version: string;
9
+ source: string;
10
+ valid: boolean;
11
+ issues: string[];
12
+ layers: Array<{
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ object_types: string[];
17
+ instance_count: number;
18
+ }>;
19
+ invariants: Array<{
20
+ id: string;
21
+ rule: string;
22
+ }>;
23
+ };
24
+ state: Record<string, unknown>;
25
+ available_actions: ActionDescription[];
26
+ available_functions: Array<{
27
+ id: string;
28
+ description: string;
29
+ input: unknown;
30
+ output: unknown;
31
+ }>;
32
+ promotion: {
33
+ ready: boolean;
34
+ reason: string;
35
+ summary?: string;
36
+ };
37
+ instances: {
38
+ graph_revision: number;
39
+ graph_valid: boolean;
40
+ objects: unknown[];
41
+ links: unknown[];
42
+ methods: unknown[];
43
+ };
44
+ stale: Record<string, unknown>;
45
+ knowledge_gaps: unknown[];
46
+ }
47
+ export declare function buildDomainView(agent: VerificationAgent, session: Session, focus?: string): DomainView;
48
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/domain/view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjH,UAAU,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,mBAAmB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjG,SAAS,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,SAAS,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IACtH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,cAAc,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAkDtG"}
@@ -0,0 +1,70 @@
1
+ /** 为 Agent 投影当前场景最相关的 Ontology + 资产 + 可执行 Action,而不是灌入整库。 */
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { loadOntology, ontologyPath, validateOntology } from "../ontology/loader.js";
5
+ import { loadMethods, methodRef } from "../methods/loader.js";
6
+ import { loadStale } from "./invalidation.js";
7
+ import { ScenarioOntologyStore } from "../ontology/store.js";
8
+ import { createVerificationActionRegistry } from "./actions.js";
9
+ import { createFinanceFunctionRegistry } from "../ontology/functions.js";
10
+ export function buildDomainView(agent, session, focus) {
11
+ const ontology = loadOntology(agent.root);
12
+ const issues = validateOntology(ontology);
13
+ const home = session.home(agent.workspace);
14
+ const store = new ScenarioOntologyStore(home, ontology);
15
+ const graph = store.read();
16
+ const objects = graph.objects.length ? graph.objects : readRows(join(home, "build", "domain", "objects.json"), "objects");
17
+ const links = graph.links.length ? graph.links : readRows(join(home, "build", "domain", "links.json"), "links");
18
+ const methodSelections = readRows(join(home, "build", "method_selection.json"), "selections");
19
+ const unresolved = readRows(join(home, "build", "domain", "unresolved.json"), "unresolved");
20
+ const query = focus?.trim().toLowerCase();
21
+ const matches = (value) => !query || JSON.stringify(value).toLowerCase().includes(query);
22
+ const filteredObjects = objects.filter(matches);
23
+ const filteredLinks = links.filter(matches);
24
+ const counts = new Map();
25
+ for (const row of objects)
26
+ counts.set(String(row.type), (counts.get(String(row.type)) ?? 0) + 1);
27
+ return {
28
+ scenario: session.scenarioKey,
29
+ goal: session.goal,
30
+ ontology: {
31
+ version: ontology.version,
32
+ source: ontologyPath(agent.root) ?? "",
33
+ valid: issues.length === 0,
34
+ issues,
35
+ layers: Object.values(ontology.layers).map((layer) => ({
36
+ id: layer.id,
37
+ name: layer.name,
38
+ description: layer.description,
39
+ object_types: layer.objects,
40
+ instance_count: layer.objects.reduce((sum, type) => sum + (counts.get(type) ?? 0), 0),
41
+ })),
42
+ invariants: ontology.coreInvariants,
43
+ },
44
+ state: agent.stateSnapshot(session),
45
+ available_actions: createVerificationActionRegistry(agent, session).describe({ agent, session }, agent.capabilities(session).find((row) => row.recommended)?.name),
46
+ available_functions: createFinanceFunctionRegistry().list(),
47
+ promotion: agent.promotionState(session),
48
+ instances: {
49
+ graph_revision: graph.revision,
50
+ graph_valid: graph.validation.valid,
51
+ objects: filteredObjects,
52
+ links: filteredLinks,
53
+ methods: methodSelections.length ? methodSelections.filter(matches) : loadMethods(agent.root).map((m) => ({ ref: methodRef(m), rule_kind: m.applies_to_rule_kind, produces: m.produces })),
54
+ },
55
+ stale: loadStale(home).entries,
56
+ knowledge_gaps: unresolved,
57
+ };
58
+ }
59
+ function readRows(path, key) {
60
+ if (!existsSync(path))
61
+ return [];
62
+ try {
63
+ const value = JSON.parse(readFileSync(path, "utf-8"));
64
+ return Array.isArray(value?.[key]) ? value[key] : [];
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ }
70
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/domain/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface FailureAttribution {
2
+ case_id: string;
3
+ target_id: string;
4
+ kind: "false_negative" | "false_positive" | "mismatch";
5
+ first_error_stage: "parse" | "scope" | "retrieval" | "extraction" | "judge" | "aggregate";
6
+ confidence: number;
7
+ rationale: string;
8
+ next_probe: string;
9
+ }
10
+ export interface AttemptDiff {
11
+ from?: string;
12
+ to?: string;
13
+ changed_paths: string[];
14
+ }
15
+ export declare function attributeEvaluation(result: Record<string, any>): FailureAttribution[];
16
+ export declare function latestAttemptDiff(home: string): AttemptDiff;
17
+ export declare function diffJson(before: unknown, after: unknown, prefix?: string): string[];
18
+ //# sourceMappingURL=attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/forge/attribution.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,UAAU,CAAC;IACvD,iBAAiB,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;CAAE;AAErF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,kBAAkB,EAAE,CA+BrF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAO3D;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAK,GAAG,MAAM,EAAE,CAc/E"}
@@ -0,0 +1,83 @@
1
+ /** 失败归因的确定性第一层:先定位最早可疑阶段,再交给 Agent/专家读取完整 trace。 */
2
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ export function attributeEvaluation(result) {
5
+ const fn = keys(result.false_negatives), fp = keys(result.false_positives);
6
+ return (result.mismatches ?? []).map((row) => {
7
+ const key = `${row.case}|${row.target}`;
8
+ const kind = fn.has(key) ? "false_negative" : fp.has(key) ? "false_positive" : "mismatch";
9
+ const actual = String(row.actual ?? "missing");
10
+ if (["missing", "needs_review", "review_required", "undefined", "null"].includes(actual))
11
+ return {
12
+ case_id: String(row.case), target_id: String(row.target), kind,
13
+ first_error_stage: "retrieval", confidence: 0.75,
14
+ rationale: "执行结果缺失或进入复核,最早应先检查适用性和证据召回。",
15
+ next_probe: "重放该 case,检查 scope、命中区块和 evidence 列表。",
16
+ };
17
+ if (kind === "false_negative")
18
+ return {
19
+ case_id: String(row.case), target_id: String(row.target), kind,
20
+ first_error_stage: "judge", confidence: 0.65,
21
+ rationale: "已产生明确结果但漏报,优先怀疑例外、阈值或判据过松。",
22
+ next_probe: "固定现有证据,单独重放 judge 并比较 rubric/constraint。",
23
+ };
24
+ if (kind === "false_positive")
25
+ return {
26
+ case_id: String(row.case), target_id: String(row.target), kind,
27
+ first_error_stage: "judge", confidence: 0.65,
28
+ rationale: "已产生明确误报,优先怀疑证据边界、例外或判据过严。",
29
+ next_probe: "检查 evidence 是否跨段污染,再单独重放 judge。",
30
+ };
31
+ return {
32
+ case_id: String(row.case), target_id: String(row.target), kind,
33
+ first_error_stage: "aggregate", confidence: 0.45,
34
+ rationale: "非 predicate 结果不一致,现有摘要不足以定位更早节点。",
35
+ next_probe: "读取节点级 trace,对比 extraction、单位和 aggregate 输入。",
36
+ };
37
+ });
38
+ }
39
+ export function latestAttemptDiff(home) {
40
+ const build = join(home, "build");
41
+ if (!existsSync(build))
42
+ return { changed_paths: [] };
43
+ const dirs = readdirSync(build).filter((name) => /^attempt-\d+$/.test(name)).sort();
44
+ if (dirs.length < 2)
45
+ return { to: dirs.at(-1), changed_paths: [] };
46
+ const [from, to] = dirs.slice(-2);
47
+ return { from, to, changed_paths: diffJson(read(join(build, from, "attempt.json")), read(join(build, to, "attempt.json"))) };
48
+ }
49
+ export function diffJson(before, after, prefix = "") {
50
+ if (Object.is(before, after))
51
+ return [];
52
+ if (Array.isArray(before) && Array.isArray(after)) {
53
+ if (before.length !== after.length)
54
+ return [prefix || "$"];
55
+ return before.flatMap((value, index) => diffJson(value, after[index], `${prefix}[${index}]`));
56
+ }
57
+ if (!isRecord(before) || !isRecord(after))
58
+ return [prefix || "$"];
59
+ const out = [];
60
+ for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {
61
+ const path = prefix ? `${prefix}.${key}` : key;
62
+ if (!(key in before) || !(key in after))
63
+ out.push(path);
64
+ else
65
+ out.push(...diffJson(before[key], after[key], path));
66
+ }
67
+ return out.slice(0, 500);
68
+ }
69
+ function read(path) {
70
+ try {
71
+ return JSON.parse(readFileSync(path, "utf-8"));
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ function keys(rows) {
78
+ return new Set((Array.isArray(rows) ? rows : []).map((row) => `${row.case}|${row.target}`));
79
+ }
80
+ function isRecord(value) {
81
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
82
+ }
83
+ //# sourceMappingURL=attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/forge/attribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { PipelineSpec } from "../schemas/spec.js";
2
+ import type { Target } from "../schemas/target.js";
3
+ import { type Oracle, type ScoreReport } from "./scorer.js";
4
+ import type { LLMLike } from "../workflows/context.js";
5
+ export interface PackLike {
6
+ profile: Record<string, unknown>;
7
+ refdata: Record<string, unknown>;
8
+ targets: Target[];
9
+ }
10
+ export interface BakeoffRow {
11
+ candidate: string;
12
+ accuracy: number;
13
+ n: number;
14
+ llm_calls: number;
15
+ mismatches: number;
16
+ recall?: number | null;
17
+ precision?: number | null;
18
+ fn?: number;
19
+ }
20
+ export interface BakeoffResult {
21
+ ranking: BakeoffRow[];
22
+ winner: string | null;
23
+ accuracy_bar: number;
24
+ stamp: string;
25
+ winner_mismatches: unknown[];
26
+ winner_report?: ScoreReport | null;
27
+ }
28
+ export declare function runBakeoff(pack: PackLike, candidates: Record<string, PipelineSpec>, oracle: Oracle, opts?: {
29
+ llm?: LLMLike | null;
30
+ accuracyBar?: number;
31
+ winnerMetric?: string;
32
+ historyPath?: string;
33
+ stamp?: string;
34
+ }): Promise<BakeoffResult>;
35
+ //# sourceMappingURL=bakeoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakeoff.d.ts","sourceRoot":"","sources":["../../src/forge/bakeoff.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACrH,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Bake-off —— N 个候选生产线在一个 oracle 上打分排名,选胜者。
3
+ * 胜负由沙箱分数定,不由说服力定。从 Python bakeoff.py 忠实移植(异步)。
4
+ */
5
+ import { appendFileSync, mkdirSync } from "node:fs";
6
+ import { dirname } from "node:path";
7
+ import { Executor } from "../workflows/executor.js";
8
+ import { Scorer } from "./scorer.js";
9
+ export async function runBakeoff(pack, candidates, oracle, opts = {}) {
10
+ const accuracyBar = opts.accuracyBar ?? 0.9;
11
+ const winnerMetric = opts.winnerMetric ?? "accuracy";
12
+ const rows = [];
13
+ const detail = {};
14
+ for (const [name, spec] of Object.entries(candidates)) {
15
+ const ex = new Executor(spec, { profileVocab: pack.profile, refdata: pack.refdata, llm: opts.llm });
16
+ const rep = await new Scorer(ex).score(pack.targets, oracle);
17
+ const row = { candidate: name, accuracy: rep.accuracy, n: rep.n, llm_calls: rep.llm_calls, mismatches: rep.mismatches.length };
18
+ if (rep.recall != null) {
19
+ row.recall = rep.recall;
20
+ row.precision = rep.precision;
21
+ row.fn = rep.confusion.fn;
22
+ }
23
+ detail[name] = rep;
24
+ rows.push(row);
25
+ }
26
+ if (winnerMetric === "recall") {
27
+ rows.sort((a, b) => -((a.recall ?? -1) - (b.recall ?? -1)) || -(a.accuracy - b.accuracy) || a.llm_calls - b.llm_calls || a.candidate.localeCompare(b.candidate));
28
+ }
29
+ else {
30
+ rows.sort((a, b) => -(a.accuracy - b.accuracy) || a.llm_calls - b.llm_calls || a.candidate.localeCompare(b.candidate));
31
+ }
32
+ const passing = rows.filter((r) => r.accuracy >= accuracyBar);
33
+ let winner;
34
+ if (passing.length) {
35
+ winner = [...passing].sort((a, b) => a.llm_calls - b.llm_calls || a.candidate.localeCompare(b.candidate))[0].candidate;
36
+ }
37
+ else {
38
+ winner = rows.length ? rows[0].candidate : null;
39
+ }
40
+ const wrep = winner ? detail[winner] : null;
41
+ const result = { ranking: rows, winner, accuracy_bar: accuracyBar, stamp: opts.stamp ?? "", winner_mismatches: wrep?.mismatches ?? [], winner_report: wrep };
42
+ if (opts.historyPath) {
43
+ mkdirSync(dirname(opts.historyPath), { recursive: true });
44
+ appendFileSync(opts.historyPath, JSON.stringify(result) + "\n", "utf-8");
45
+ }
46
+ return result;
47
+ }
48
+ //# sourceMappingURL=bakeoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakeoff.js","sourceRoot":"","sources":["../../src/forge/bakeoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { FailureAttribution } from "./attribution.js";
2
+ export declare const EVALUATION_CONTRACT_VERSION = 1;
3
+ export interface EvaluationSuiteContract {
4
+ schema_version: 1;
5
+ suite_id: string;
6
+ name: string;
7
+ version: string;
8
+ oracle_ref: string;
9
+ case_count: number;
10
+ case_ids: string[];
11
+ source: string;
12
+ }
13
+ export interface EvaluationRunContract {
14
+ schema_version: 1;
15
+ eval_run_id: string;
16
+ scenario_ref: string;
17
+ suite_ref: string;
18
+ pack_ref: string;
19
+ pack_version: string;
20
+ started_at: number;
21
+ completed_at: number;
22
+ status: "completed";
23
+ }
24
+ export interface EvaluationReportContract {
25
+ schema_version: 1;
26
+ report_id: string;
27
+ eval_run_ref: string;
28
+ accuracy: number;
29
+ precision: number | null;
30
+ recall: number | null;
31
+ case_count: number;
32
+ gate_status: "passed" | "regression" | "not_evaluated";
33
+ metrics: Record<string, unknown>;
34
+ }
35
+ export interface FailurePatternContract {
36
+ schema_version: 1;
37
+ failure_id: string;
38
+ eval_run_ref: string;
39
+ kind: "false_negative" | "false_positive" | "mismatch";
40
+ case_id: string;
41
+ target_id: string;
42
+ expected: unknown;
43
+ actual: unknown;
44
+ diagnosis: string;
45
+ first_error_stage?: string;
46
+ attribution_confidence?: number;
47
+ }
48
+ export interface EvaluationContracts {
49
+ suite: EvaluationSuiteContract;
50
+ run: EvaluationRunContract;
51
+ report: EvaluationReportContract;
52
+ failures: FailurePatternContract[];
53
+ }
54
+ export declare function buildEvaluationContracts(input: {
55
+ scenarioKey: string;
56
+ suiteName: string;
57
+ oraclePath: string;
58
+ oracle: unknown;
59
+ caseIds: string[];
60
+ packRef: string;
61
+ packVersion: string;
62
+ attributions?: FailureAttribution[];
63
+ result: Record<string, any>;
64
+ startedAt: number;
65
+ completedAt: number;
66
+ }): EvaluationContracts;
67
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/forge/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,CAAC,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,CAAC,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,CAAC,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,QAAQ,GAAG,YAAY,GAAG,eAAe,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,UAAU,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,GAAG,EAAE,qBAAqB,CAAC;IAC3B,MAAM,EAAE,wBAAwB,CAAC;IACjC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,mBAAmB,CAiDtB"}
@@ -0,0 +1,70 @@
1
+ /** 评测系统的版本化磁盘合同:评测集、运行、报告、失败归因彼此分离但可追溯。 */
2
+ import { createHash } from "node:crypto";
3
+ export const EVALUATION_CONTRACT_VERSION = 1;
4
+ export function buildEvaluationContracts(input) {
5
+ const suiteVersion = digest({ oracle: input.oracle, cases: input.caseIds });
6
+ const suiteId = `${input.suiteName}@${suiteVersion}`;
7
+ const evalRunId = `eval-${input.startedAt}-${suiteVersion.slice(0, 8)}`;
8
+ const reportId = `${evalRunId}:report`;
9
+ const falseNegatives = keysOf(input.result.false_negatives);
10
+ const falsePositives = keysOf(input.result.false_positives);
11
+ const failures = (input.result.mismatches ?? []).map((row, index) => {
12
+ const key = `${row.case}|${row.target}`;
13
+ const kind = falseNegatives.has(key) ? "false_negative" : falsePositives.has(key) ? "false_positive" : "mismatch";
14
+ const attribution = input.attributions?.find((item) => item.case_id === String(row.case) && item.target_id === String(row.target));
15
+ return {
16
+ schema_version: 1,
17
+ failure_id: `${evalRunId}:failure:${index + 1}`,
18
+ eval_run_ref: evalRunId,
19
+ kind,
20
+ case_id: String(row.case),
21
+ target_id: String(row.target),
22
+ expected: row.expected,
23
+ actual: row.actual,
24
+ diagnosis: attribution?.rationale ?? diagnosisFor(kind),
25
+ first_error_stage: attribution?.first_error_stage,
26
+ attribution_confidence: attribution?.confidence,
27
+ };
28
+ });
29
+ const regression = input.result.regression;
30
+ const gateStatus = regression == null ? "not_evaluated" : regression.is_regression ? "regression" : "passed";
31
+ return {
32
+ suite: {
33
+ schema_version: 1, suite_id: suiteId, name: input.suiteName, version: suiteVersion,
34
+ oracle_ref: input.oraclePath, case_count: input.caseIds.length, case_ids: input.caseIds, source: input.oraclePath,
35
+ },
36
+ run: {
37
+ schema_version: 1, eval_run_id: evalRunId, scenario_ref: input.scenarioKey,
38
+ suite_ref: suiteId, pack_ref: input.packRef, pack_version: input.packVersion, started_at: input.startedAt,
39
+ completed_at: input.completedAt, status: "completed",
40
+ },
41
+ report: {
42
+ schema_version: 1, report_id: reportId, eval_run_ref: evalRunId,
43
+ accuracy: Number(input.result.accuracy ?? 0), precision: nullableNumber(input.result.precision),
44
+ recall: nullableNumber(input.result.recall), case_count: Number(input.result.n ?? 0), gate_status: gateStatus,
45
+ metrics: {
46
+ accuracy: input.result.accuracy, precision: input.result.precision, recall: input.result.recall,
47
+ confusion: input.result.confusion, per_target: input.result.per_target, per_tier: input.result.per_tier,
48
+ llm_calls: input.result.llm_calls, regression: input.result.regression,
49
+ },
50
+ },
51
+ failures,
52
+ };
53
+ }
54
+ function digest(value) {
55
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 16);
56
+ }
57
+ function keysOf(rows) {
58
+ return new Set((Array.isArray(rows) ? rows : []).map((row) => `${row.case}|${row.target}`));
59
+ }
60
+ function diagnosisFor(kind) {
61
+ if (kind === "false_negative")
62
+ return "疑似漏报:优先检查召回、适用性与判定阈值";
63
+ if (kind === "false_positive")
64
+ return "疑似误报:优先检查证据边界、例外条件与判定阈值";
65
+ return "结果不一致:需结合 trace 归因到解析、召回、规则映射或判定";
66
+ }
67
+ function nullableNumber(value) {
68
+ return value == null ? null : Number(value);
69
+ }
70
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/forge/contracts.ts"],"names":[],"mappings":"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"}