@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,100 @@
1
+ /** WorkflowSpec:六范式编排的声明式数据形状。workflow 是数据不是代码,可 diff/冻结/校验。 */
2
+ export const PATTERNS = new Set([
3
+ "classify_and_act", "fanout_and_synthesize", "adversarial_verify",
4
+ "generate_and_filter", "tournament", "loop_until",
5
+ ]);
6
+ const REQUIRED = {
7
+ classify_and_act: ["classifier", "routes"],
8
+ fanout_and_synthesize: ["over", "each", "synthesize"],
9
+ adversarial_verify: ["verifiers"],
10
+ generate_and_filter: ["generators", "rubric"],
11
+ tournament: ["attempts", "judge"],
12
+ loop_until: ["body"],
13
+ };
14
+ export class WorkflowError extends Error {
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = "WorkflowError";
18
+ }
19
+ }
20
+ export class StepSpec {
21
+ pattern;
22
+ params;
23
+ id;
24
+ when;
25
+ constructor(pattern, params = {}, id = null, when = null) {
26
+ this.pattern = pattern;
27
+ this.params = params;
28
+ this.id = id;
29
+ this.when = when;
30
+ }
31
+ static fromDict(d) {
32
+ const rest = { ...d };
33
+ const pattern = rest.pattern;
34
+ delete rest.pattern;
35
+ if (!pattern)
36
+ throw new WorkflowError(`step 缺 pattern`);
37
+ const sid = rest.id ?? null;
38
+ delete rest.id;
39
+ const when = rest.when ?? null;
40
+ delete rest.when;
41
+ return new StepSpec(pattern, rest, sid, when);
42
+ }
43
+ }
44
+ export class WorkflowSpec {
45
+ name;
46
+ steps;
47
+ constructor(name, steps = []) {
48
+ this.name = name;
49
+ this.steps = steps;
50
+ }
51
+ static fromDict(d) {
52
+ return new WorkflowSpec(d.workflow || d.name || "", (d.steps ?? []).map((s) => StepSpec.fromDict(s)));
53
+ }
54
+ }
55
+ export function validateWorkflow(spec, knownSteps) {
56
+ const errors = [];
57
+ if (!spec.name.trim())
58
+ errors.push("workflow.name 为空");
59
+ const seenIds = new Set();
60
+ spec.steps.forEach((step, i) => {
61
+ const tag = `step[${i}](${step.pattern})`;
62
+ if (!PATTERNS.has(step.pattern)) {
63
+ errors.push(`${tag}: 未知范式,可用 ${[...PATTERNS].sort().join(", ")}`);
64
+ return;
65
+ }
66
+ for (const req of REQUIRED[step.pattern]) {
67
+ if (!(req in step.params))
68
+ errors.push(`${tag}: 缺必填参数 '${req}'`);
69
+ }
70
+ if (knownSteps) {
71
+ for (const name of referencedStepNames(step)) {
72
+ if (name === "skip" || name == null)
73
+ continue;
74
+ if (!knownSteps.has(name) && !seenIds.has(name)) {
75
+ errors.push(`${tag}: 引用了未注册的 step '${name}'`);
76
+ }
77
+ }
78
+ }
79
+ if (step.id)
80
+ seenIds.add(step.id);
81
+ });
82
+ return errors;
83
+ }
84
+ function referencedStepNames(step) {
85
+ const p = step.params;
86
+ const names = [];
87
+ for (const key of ["classifier", "synthesize", "worker", "rubric", "judge", "until"]) {
88
+ if (typeof p[key] === "string")
89
+ names.push(p[key]);
90
+ }
91
+ for (const key of ["each", "body", "verifiers", "generators"]) {
92
+ if (Array.isArray(p[key]))
93
+ names.push(...p[key].filter((x) => typeof x === "string"));
94
+ }
95
+ if (p.routes && typeof p.routes === "object") {
96
+ names.push(...Object.values(p.routes).filter((x) => typeof x === "string"));
97
+ }
98
+ return names;
99
+ }
100
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/schemas/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=judge-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-runner.d.ts","sourceRoot":"","sources":["../../src/skills/judge-runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 判定函数 judge.mjs 的探针 runner —— 独立子进程里跑「agent 生成的」判定代码(放开红线的隔离层)。
3
+ * argv: [node, judge-runner.js, judgePath, probesJsonPath, outJsonPath]
4
+ * 动态 import judge → 对每个探针 judge(evidence, ctx) → 收集 verdict/grounded_in 写 outPath。
5
+ * 进程隔离 + 超时 kill 由父进程(judge-synth)负责,限制生成代码的爆炸半径。
6
+ */
7
+ import { readFileSync, writeFileSync } from "node:fs";
8
+ import { pathToFileURL } from "node:url";
9
+ async function main() {
10
+ const [, , judgePath, probesPath, outPath] = process.argv;
11
+ try {
12
+ const mod = await import(pathToFileURL(judgePath).href);
13
+ if (typeof mod.judge !== "function")
14
+ throw new Error("adapter 未导出 async function judge(evidence, ctx)");
15
+ const probes = JSON.parse(readFileSync(probesPath, "utf-8"));
16
+ const results = [];
17
+ for (const p of probes) {
18
+ const r = await mod.judge(p.evidence, p.ctx ?? {});
19
+ results.push({ verdict: r?.verdict ?? null, grounded_in: r?.grounded_in ?? [] });
20
+ }
21
+ writeFileSync(outPath, JSON.stringify(results), "utf-8");
22
+ }
23
+ catch (e) {
24
+ writeFileSync(outPath + ".err", e.stack ?? String(e), "utf-8");
25
+ process.exit(1);
26
+ }
27
+ }
28
+ main();
29
+ //# sourceMappingURL=judge-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-runner.js","sourceRoot":"","sources":["../../src/skills/judge-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,EAAE,AAAD,EAAG,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAgD,CAAC;QAC5G,MAAM,OAAO,GAAsD,EAAE,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,OAAO,GAAG,MAAM,EAAG,CAAW,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AACD,IAAI,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ export declare const DEFAULT_JUDGE_RUNNER: string;
2
+ export interface JudgeProbe {
3
+ evidence: unknown;
4
+ ctx?: unknown;
5
+ expected: string;
6
+ }
7
+ export interface LLMLike {
8
+ completeJson(system: string, user: string, mockFn?: () => Record<string, unknown>): Promise<Record<string, unknown>>;
9
+ }
10
+ export interface JudgeSynthOpts {
11
+ name: string;
12
+ rubric: string;
13
+ constraint?: unknown;
14
+ probes: JudgeProbe[];
15
+ llm: LLMLike;
16
+ outDir: string;
17
+ workDir: string;
18
+ runnerScript?: string;
19
+ timeoutSeconds?: number;
20
+ maxTries?: number;
21
+ passBar?: number;
22
+ mock?: () => Record<string, unknown>;
23
+ }
24
+ export interface JudgeSynthResult {
25
+ ok: boolean;
26
+ tries: number;
27
+ passRate: number;
28
+ judgePath: string;
29
+ }
30
+ export declare function synthesizeJudge(o: JudgeSynthOpts): Promise<JudgeSynthResult>;
31
+ //# sourceMappingURL=judge-synth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-synth.d.ts","sourceRoot":"","sources":["../../src/skills/judge-synth.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,oBAAoB,QAA+D,CAAC;AAEjG,MAAM,WAAW,UAAU;IAAG,QAAQ,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;CAAE;AAEnF,MAAM,WAAW,OAAO;IACtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAAG,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE;AA6CtG,wBAAsB,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0BlF"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 判定函数合成(P5 · 放开红线让 agent 写代码)—— 读判据→写 judge.mjs→拿探针过门→冻结。
3
+ * 与解析器 adapter 同一纪律:生成代码必须在沙箱里把探针判对到门槛才冻结,否则带错反思重试(有界)。
4
+ * 冻结产物 judge.mjs 是可人工审阅的数据资产;run 期回放,绝不现场生成。安全靠:沙箱执行 + 探针门 + HITL 审阅。
5
+ */
6
+ import { existsSync, mkdirSync, writeFileSync, copyFileSync, rmSync, readFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { spawn } from "node:child_process";
9
+ import { fileURLToPath } from "node:url";
10
+ import { Sandbox } from "@mingyuxu/core";
11
+ export const DEFAULT_JUDGE_RUNNER = fileURLToPath(new URL("./judge-runner.js", import.meta.url));
12
+ const SYSTEM = "你在为金融文档核查系统合成「判定函数」。读判据(rubric)与约束(constraint),写一个 ESM 模块," +
13
+ "导出 `export async function judge(evidence, ctx)`。evidence 是取到的证据(字符串,或 {quote, extracted_value})。" +
14
+ "返回 { verdict: 'pass'|'fail'|'needs_review', grounded_in: [引用到的证据] }。" +
15
+ "抽不到关键数值/信息时返回 needs_review,不要猜。用纯 Node(可 import 内置模块),不要外部依赖。" +
16
+ "只返回 JSON:{\"code\": \"<完整模块源码>\", \"notes\": \"<一句话>\"}。";
17
+ function userPrompt(o, lastErr) {
18
+ let u = `判据(rubric):\n${o.rubric}\n`;
19
+ if (o.constraint)
20
+ u += `约束(constraint):${JSON.stringify(o.constraint)}\n`;
21
+ u += `探针样例(会用来验证你的代码,evidence→期望 verdict):\n${JSON.stringify(o.probes.map((p) => ({ evidence: p.evidence, expected: p.expected })), null, 2)}\n`;
22
+ if (lastErr)
23
+ u += `\n上一版未过门,请修正后重写完整模块:\n${lastErr.slice(0, 600)}`;
24
+ return u;
25
+ }
26
+ /** 在独立进程里对全部探针跑一遍 judge,返回每探针的 verdict。超时 kill。 */
27
+ async function runProbes(judgePath, probes, opts) {
28
+ const runner = opts.runnerScript ?? DEFAULT_JUDGE_RUNNER;
29
+ const sandbox = new Sandbox(opts.workDir);
30
+ mkdirSync(opts.workDir, { recursive: true });
31
+ const probesPath = sandbox.checkWrite(join(opts.workDir, "probes.json"));
32
+ const outPath = sandbox.checkWrite(join(opts.workDir, "verdicts.json"));
33
+ for (const p of [outPath, outPath + ".err"])
34
+ if (existsSync(p))
35
+ rmSync(p);
36
+ writeFileSync(probesPath, JSON.stringify(probes.map((p) => ({ evidence: p.evidence, ctx: p.ctx }))), "utf-8");
37
+ const timeout = (opts.timeoutSeconds ?? 20) * 1000;
38
+ await new Promise((resolve, reject) => {
39
+ const proc = spawn("node", [runner, judgePath, probesPath, outPath], { stdio: ["ignore", "ignore", "pipe"] });
40
+ let stderr = "";
41
+ proc.stderr?.on("data", (d) => { stderr += String(d); });
42
+ const timer = setTimeout(() => { proc.kill("SIGKILL"); reject(new Error(`judge 执行超时(>${opts.timeoutSeconds ?? 20}s)`)); }, timeout);
43
+ proc.on("error", (e) => { clearTimeout(timer); reject(e); });
44
+ proc.on("exit", (code) => {
45
+ clearTimeout(timer);
46
+ if (code === 0)
47
+ return resolve();
48
+ const detail = existsSync(outPath + ".err") ? readFileSync(outPath + ".err", "utf-8") : stderr || `退出码 ${code}`;
49
+ reject(new Error(detail.slice(0, 800)));
50
+ });
51
+ });
52
+ const results = JSON.parse(readFileSync(outPath, "utf-8"));
53
+ return results.map((r) => String(r.verdict));
54
+ }
55
+ export async function synthesizeJudge(o) {
56
+ const maxTries = o.maxTries ?? 3;
57
+ const passBar = o.passBar ?? 0.9;
58
+ mkdirSync(o.workDir, { recursive: true });
59
+ const draftPath = join(o.workDir, "judge.mjs");
60
+ let lastErr;
61
+ for (let attempt = 1; attempt <= maxTries; attempt++) {
62
+ const res = o.mock ? o.mock() : await o.llm.completeJson(SYSTEM, userPrompt(o, lastErr));
63
+ const code = String(res.code ?? "").trim();
64
+ if (!code) {
65
+ lastErr = "模型未返回 code";
66
+ continue;
67
+ }
68
+ writeFileSync(draftPath, code, "utf-8");
69
+ try {
70
+ const verdicts = await runProbes(draftPath, o.probes, { runnerScript: o.runnerScript, workDir: join(o.workDir, "probe"), timeoutSeconds: o.timeoutSeconds });
71
+ const hits = verdicts.filter((v, i) => v === o.probes[i].expected).length;
72
+ const passRate = o.probes.length ? hits / o.probes.length : 0;
73
+ if (passRate >= passBar) { // 过门 → 冻结
74
+ mkdirSync(o.outDir, { recursive: true });
75
+ copyFileSync(draftPath, join(o.outDir, "judge.mjs"));
76
+ writeFileSync(join(o.outDir, "judge.meta.json"), JSON.stringify({ name: o.name, verified: true, pass_rate: passRate, probes: o.probes.length, tries: attempt, created_by: "synthesized" }, null, 2), "utf-8");
77
+ return { ok: true, tries: attempt, passRate, judgePath: join(o.outDir, "judge.mjs") };
78
+ }
79
+ lastErr = `探针通过率 ${(passRate * 100).toFixed(0)}% < 门槛 ${(passBar * 100).toFixed(0)}%(判错 ${o.probes.length - hits}/${o.probes.length})`;
80
+ }
81
+ catch (e) {
82
+ lastErr = e.message;
83
+ }
84
+ }
85
+ throw new Error(`判定函数 ${o.name} 合成失败(试 ${maxTries} 次):${lastErr}`);
86
+ }
87
+ //# sourceMappingURL=judge-synth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-synth.js","sourceRoot":"","sources":["../../src/skills/judge-synth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ declare function bakeoff(workDir: string, args: any): Promise<Record<string, unknown>>;
3
+ declare function main(argv: string[]): Promise<number>;
4
+ export { main, bakeoff };
5
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/subagents/worker.ts"],"names":[],"mappings":";AAiBA,iBAAe,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgBnF;AAID,iBAAe,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAcnD;AAOD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 核查领域 subagent worker(独立进程)—— 从 Python check/subagents/worker.py 移植(bakeoff 任务)。
4
+ * `node worker.js <工作目录>`:读 task.json 执行任务,结果写 result.json,状态 status.json。
5
+ * bake-off 判卷在此独立进程跑(I6 判卷≠做题的物理隔离),自带 LLM client,与主 agent 只共享文件。
6
+ */
7
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { LLMClient, Ledger } from "@mingyuxu/ai";
10
+ import { loadPack } from "../knowledge/loader.js";
11
+ import { runBakeoff } from "../forge/bakeoff.js";
12
+ import { loadBuiltinComponents } from "../nodes/base.js";
13
+ function writeStatus(workDir, status, error = "") {
14
+ writeFileSync(join(workDir, "status.json"), JSON.stringify(error ? { status, error } : { status }), "utf-8");
15
+ }
16
+ async function bakeoff(workDir, args) {
17
+ await loadBuiltinComponents();
18
+ const ledger = new Ledger();
19
+ const key = process.env.KC_LLM_API_KEY ?? "";
20
+ const model = process.env.KC_LLM_WORKER_MODEL || process.env.KC_LLM_MODEL || "";
21
+ const llm = key
22
+ ? new LLMClient({ mode: "real", baseUrl: process.env.KC_LLM_BASE_URL ?? "", apiKey: key, model, ledger })
23
+ : new LLMClient({ mode: "mock", ledger });
24
+ const pack = loadPack(args.pack_dir);
25
+ const oracle = JSON.parse(readFileSync(args.oracle_path, "utf-8"));
26
+ const rep = await runBakeoff({ profile: pack.profile, refdata: pack.refdata, targets: pack.targets }, pack.frozen, oracle, {
27
+ llm: llm, historyPath: args.history_path || undefined,
28
+ accuracyBar: args.accuracy_bar != null ? Number(args.accuracy_bar) : undefined,
29
+ winnerMetric: args.winner_metric,
30
+ });
31
+ return { winner: rep.winner, ranking: rep.ranking, winner_report: rep.winner_report, ledger: ledger.summary() };
32
+ }
33
+ const TASKS = { bakeoff };
34
+ async function main(argv) {
35
+ const workDir = argv[0];
36
+ const spec = JSON.parse(readFileSync(join(workDir, "task.json"), "utf-8"));
37
+ const fn = TASKS[spec.task];
38
+ if (!fn) {
39
+ writeStatus(workDir, "error", `未知任务: ${spec.task}`);
40
+ return 1;
41
+ }
42
+ try {
43
+ const result = await fn(workDir, spec.args ?? {});
44
+ writeFileSync(join(workDir, "result.json"), JSON.stringify(result, null, 2), "utf-8");
45
+ writeStatus(workDir, "done");
46
+ return 0;
47
+ }
48
+ catch (e) {
49
+ writeStatus(workDir, "error", `${e.name}: ${e.message}`);
50
+ return 1;
51
+ }
52
+ }
53
+ // 作为脚本直接运行时执行(被 spawnSubagent 起)
54
+ if (existsSync(process.argv[2] ?? "")) {
55
+ main([process.argv[2]]).then((c) => process.exit(c)).catch(() => process.exit(1));
56
+ }
57
+ export { main, bakeoff };
58
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/subagents/worker.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,SAAS,WAAW,CAAC,OAAe,EAAE,MAAc,EAAE,KAAK,GAAG,EAAE;IAC9D,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/G,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,IAAS;IAC/C,MAAM,qBAAqB,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAChF,MAAM,GAAG,GAAG,GAAG;QACb,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACzG,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;QACzH,GAAG,EAAE,GAAU,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;QAC5D,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,YAAY,EAAE,IAAI,CAAC,aAAa;KACjC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;AAClH,CAAC;AAED,MAAM,KAAK,GAAqF,EAAE,OAAO,EAAE,CAAC;AAE5G,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;QAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtF,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAI,CAAW,CAAC,IAAI,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IACtC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /** RunContext —— 承载状态穿过八段(一个文档/目标一份)。从 Python context.py 移植。 */
2
+ import type { DocumentIR, Profile, EvidenceBundle, CheckResult } from "../schemas/payloads.js";
3
+ import type { ResultEnvelope } from "../schemas/result.js";
4
+ import type { Target } from "../schemas/target.js";
5
+ export interface LedgerLike {
6
+ record(model: string, promptTokens?: number, completionTokens?: number): void;
7
+ }
8
+ export interface LLMLike {
9
+ mode: string;
10
+ completeJson(system: string, user: string, mockFn?: () => Record<string, unknown>): Promise<Record<string, unknown>>;
11
+ }
12
+ export declare class RunContext {
13
+ document: DocumentIR;
14
+ profile: Profile | null;
15
+ target: Target | null;
16
+ evidence: EvidenceBundle | null;
17
+ checks: CheckResult[];
18
+ result: ResultEnvelope | null;
19
+ results: ResultEnvelope[];
20
+ docResult: Record<string, unknown> | null;
21
+ scratch: Record<string, any>;
22
+ ledger: LedgerLike | null;
23
+ constructor(document: DocumentIR, opts?: Partial<RunContext>);
24
+ forkTarget(target: Target): RunContext;
25
+ }
26
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/workflows/context.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/E;AACD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtH;AAED,qBAAa,UAAU;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAQ;IACvC,MAAM,EAAE,WAAW,EAAE,CAAM;IAC3B,MAAM,EAAE,cAAc,GAAG,IAAI,CAAQ;IACrC,OAAO,EAAE,cAAc,EAAE,CAAM;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAClC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAQ;gBAErB,QAAQ,EAAE,UAAU,EAAE,IAAI,GAAE,OAAO,CAAC,UAAU,CAAM;IAKhE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;CAMvC"}
@@ -0,0 +1,23 @@
1
+ export class RunContext {
2
+ document;
3
+ profile = null;
4
+ target = null;
5
+ evidence = null;
6
+ checks = [];
7
+ result = null;
8
+ results = [];
9
+ docResult = null;
10
+ scratch = {};
11
+ ledger = null;
12
+ constructor(document, opts = {}) {
13
+ this.document = document;
14
+ Object.assign(this, opts);
15
+ }
16
+ forkTarget(target) {
17
+ const c = new RunContext(this.document, {
18
+ profile: this.profile, target, scratch: this.scratch, ledger: this.ledger,
19
+ });
20
+ return c;
21
+ }
22
+ }
23
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/workflows/context.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,UAAU;IACrB,QAAQ,CAAa;IACrB,OAAO,GAAmB,IAAI,CAAC;IAC/B,MAAM,GAAkB,IAAI,CAAC;IAC7B,QAAQ,GAA0B,IAAI,CAAC;IACvC,MAAM,GAAkB,EAAE,CAAC;IAC3B,MAAM,GAA0B,IAAI,CAAC;IACrC,OAAO,GAAqB,EAAE,CAAC;IAC/B,SAAS,GAAmC,IAAI,CAAC;IACjD,OAAO,GAAwB,EAAE,CAAC;IAClC,MAAM,GAAsB,IAAI,CAAC;IAEjC,YAAY,QAAoB,EAAE,OAA4B,EAAE;QAC9D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;SAC1E,CAAC,CAAC;QACH,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * 八段骨架执行器(不是通用图调度器)—— 跑固定段序;每段可空、可多路。
3
+ * 从 Python executor.py 忠实移植。节点 fn 可能异步(调 LLM),故 runStage/runDocument 异步。
4
+ */
5
+ import { PipelineSpec } from "../schemas/spec.js";
6
+ import { DocumentIR } from "../schemas/payloads.js";
7
+ import { type ResultEnvelope } from "../schemas/result.js";
8
+ import type { Target } from "../schemas/target.js";
9
+ import { RunContext, type LLMLike, type LedgerLike } from "./context.js";
10
+ export interface ExecutorOptions {
11
+ profileVocab?: Record<string, unknown>;
12
+ refdata?: Record<string, unknown>;
13
+ llm?: LLMLike | null;
14
+ validate?: boolean;
15
+ }
16
+ export declare class Executor {
17
+ spec: PipelineSpec;
18
+ profileVocab: Record<string, unknown>;
19
+ refdata: Record<string, unknown>;
20
+ llm: LLMLike | null;
21
+ constructor(spec: PipelineSpec, opts?: ExecutorOptions);
22
+ runDocument(doc: DocumentIR, targets: Target[], opts?: {
23
+ rawText?: string;
24
+ ledger?: LedgerLike;
25
+ }): Promise<Record<string, unknown>>;
26
+ prepare(doc: DocumentIR, opts?: {
27
+ rawText?: string;
28
+ ledger?: LedgerLike;
29
+ }): Promise<RunContext>;
30
+ reviewTarget(ctx: RunContext, target: Target): Promise<ResultEnvelope>;
31
+ deliver(ctx: RunContext): Promise<Record<string, unknown>>;
32
+ runCase(targets: Target[], rawDocs: Array<{
33
+ document_id: string;
34
+ text: string;
35
+ received_at?: string;
36
+ doc_type?: string;
37
+ }>, opts?: {
38
+ caseId?: string;
39
+ ledger?: LedgerLike;
40
+ }): Promise<Record<string, unknown>>;
41
+ private runStage;
42
+ private applicable;
43
+ }
44
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/workflows/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAOzE,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,QAAQ;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;gBAER,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE,eAAoB;IAQpD,WAAW,CACf,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAO,GACnD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7B,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAkBnG,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IActE,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAK1D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAoCzM,QAAQ;IAQtB,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * 八段骨架执行器(不是通用图调度器)—— 跑固定段序;每段可空、可多路。
3
+ * 从 Python executor.py 忠实移植。节点 fn 可能异步(调 LLM),故 runStage/runDocument 异步。
4
+ */
5
+ import { validateSpec } from "../schemas/spec.js";
6
+ import { DocumentIR } from "../schemas/payloads.js";
7
+ import { makeOutcome, makeConfidence, makeResult } from "../schemas/result.js";
8
+ import { getComponent, registry, STAGE_OF_TYPE } from "../nodes/base.js";
9
+ import { facetMatch } from "../nodes/scope.js";
10
+ import { RunContext } from "./context.js";
11
+ import { mergeDocuments } from "./merge.js";
12
+ const DOC_STAGES = ["parse", "scope"];
13
+ const TARGET_STAGES = ["evidence", "cognition", "ground", "shape", "aggregate"];
14
+ const DELIVER_STAGE = "deliver";
15
+ export class Executor {
16
+ spec;
17
+ profileVocab;
18
+ refdata;
19
+ llm;
20
+ constructor(spec, opts = {}) {
21
+ this.spec = spec;
22
+ this.profileVocab = opts.profileVocab ?? {};
23
+ this.refdata = opts.refdata ?? {};
24
+ this.llm = opts.llm ?? null;
25
+ if (opts.validate ?? true)
26
+ validateSpec(spec, registry(), STAGE_OF_TYPE);
27
+ }
28
+ async runDocument(doc, targets, opts = {}) {
29
+ const ctx = await this.prepare(doc, opts);
30
+ for (const target of targets)
31
+ ctx.results.push(await this.reviewTarget(ctx, target));
32
+ await this.deliver(ctx);
33
+ return ctx.docResult;
34
+ }
35
+ async prepare(doc, opts = {}) {
36
+ const ctx = new RunContext(doc);
37
+ ctx.ledger = opts.ledger ?? null;
38
+ ctx.scratch.workflow_id = this.spec.scenario_key;
39
+ ctx.scratch.facet_vocab = this.profileVocab;
40
+ ctx.scratch.refdata = this.refdata;
41
+ ctx.scratch.case_id = doc.document_id;
42
+ ctx.scratch.llm = this.llm;
43
+ if (opts.rawText !== undefined) {
44
+ ctx.scratch.raw_text = opts.rawText;
45
+ ctx.scratch.document_id ??= doc ? doc.document_id : "doc";
46
+ }
47
+ const unit = this.spec.unit();
48
+ if (unit !== "per_doc_rule")
49
+ throw new Error(`runDocument only supports per_doc_rule; use runCase for '${unit}'`);
50
+ for (const stage of DOC_STAGES)
51
+ await this.runStage(stage, ctx);
52
+ return ctx;
53
+ }
54
+ async reviewTarget(ctx, target) {
55
+ const tctx = ctx.forkTarget(target);
56
+ if (!this.applicable(target, ctx)) {
57
+ tctx.result = notApplicable(target, ctx.document);
58
+ }
59
+ else {
60
+ try {
61
+ for (const stage of TARGET_STAGES)
62
+ await this.runStage(stage, tctx);
63
+ }
64
+ catch (e) {
65
+ tctx.result = errored(target, ctx.document, String(e));
66
+ }
67
+ }
68
+ return tctx.result;
69
+ }
70
+ async deliver(ctx) {
71
+ await this.runStage(DELIVER_STAGE, ctx);
72
+ return ctx.docResult;
73
+ }
74
+ async runCase(targets, rawDocs, opts = {}) {
75
+ const unit = this.spec.unit();
76
+ if (!["per_rule_group", "per_case"].includes(unit))
77
+ throw new Error(`runCase is for per_rule_group/per_case, not '${unit}'`);
78
+ const parsed = [];
79
+ for (const rd of rawDocs) {
80
+ const pc = new RunContext(new DocumentIR(rd.document_id));
81
+ pc.ledger = opts.ledger ?? null;
82
+ pc.scratch.raw_text = rd.text;
83
+ pc.scratch.document_id = rd.document_id;
84
+ await this.runStage("parse", pc);
85
+ pc.document.metadata.received_at = rd.received_at ?? "";
86
+ pc.document.metadata.doc_type = rd.doc_type ?? "";
87
+ parsed.push(pc.document);
88
+ }
89
+ const merged = mergeDocuments(parsed);
90
+ const ctx = new RunContext(merged);
91
+ ctx.ledger = opts.ledger ?? null;
92
+ ctx.scratch.workflow_id = this.spec.scenario_key;
93
+ ctx.scratch.facet_vocab = this.profileVocab;
94
+ ctx.scratch.refdata = this.refdata;
95
+ ctx.scratch.case_id = opts.caseId ?? merged.document_id;
96
+ ctx.scratch.llm = this.llm;
97
+ await this.runStage("scope", ctx);
98
+ for (const target of targets) {
99
+ const tctx = ctx.forkTarget(target);
100
+ if (!this.applicable(target, ctx))
101
+ tctx.result = notApplicable(target, merged);
102
+ else {
103
+ try {
104
+ for (const stage of TARGET_STAGES)
105
+ await this.runStage(stage, tctx);
106
+ }
107
+ catch (e) {
108
+ tctx.result = errored(target, merged, String(e));
109
+ }
110
+ }
111
+ ctx.results.push(tctx.result);
112
+ }
113
+ await this.runStage(DELIVER_STAGE, ctx);
114
+ return ctx.docResult;
115
+ }
116
+ async runStage(stage, ctx) {
117
+ for (const step of this.spec.steps(stage)) {
118
+ if (!("type" in step))
119
+ continue; // bare join marker
120
+ const comp = getComponent(step.type, step.method);
121
+ await comp.fn(ctx, step.params ?? {});
122
+ }
123
+ }
124
+ applicable(target, ctx) {
125
+ const pol = this.spec.fanout.unknown_policy ?? "include";
126
+ return facetMatch(target.applicability, ctx.profile, pol);
127
+ }
128
+ }
129
+ function notApplicable(target, doc) {
130
+ return makeResult(target.target_id, {
131
+ unit: { doc: doc.document_id },
132
+ outcome: makeOutcome({ kind: "verdict", verdict: "not_applicable" }),
133
+ status: "not_applicable",
134
+ confidence: makeConfidence({ score: 1.0, band: "high" }),
135
+ });
136
+ }
137
+ function errored(target, doc, msg) {
138
+ return makeResult(target.target_id, {
139
+ unit: { doc: doc.document_id },
140
+ outcome: makeOutcome({ kind: "verdict", verdict: null }),
141
+ status: "error",
142
+ provenance: { error: msg },
143
+ confidence: makeConfidence({ score: 0.0, band: "low" }),
144
+ });
145
+ }
146
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/workflows/executor.ts"],"names":[],"mappings":"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"}