soloforge 1.2.15 → 1.2.16

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 (42) hide show
  1. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  2. package/dist/adapters/claude_code/tools.js +7 -0
  3. package/dist/adapters/claude_code/tools.js.map +1 -1
  4. package/dist/bin/soloforge.js +0 -0
  5. package/dist/engine/batch1_scenario_registry.d.ts +14 -0
  6. package/dist/engine/batch1_scenario_registry.d.ts.map +1 -1
  7. package/dist/engine/batch1_scenario_registry.js +12 -0
  8. package/dist/engine/batch1_scenario_registry.js.map +1 -1
  9. package/dist/engine/batch1_scenario_runners.d.ts.map +1 -1
  10. package/dist/engine/batch1_scenario_runners.js +9 -4
  11. package/dist/engine/batch1_scenario_runners.js.map +1 -1
  12. package/dist/engine/intent_router.d.ts +6 -6
  13. package/dist/engine/intent_router.d.ts.map +1 -1
  14. package/dist/engine/task_context.d.ts +6 -0
  15. package/dist/engine/task_context.d.ts.map +1 -1
  16. package/dist/engine/task_context.js +43 -0
  17. package/dist/engine/task_context.js.map +1 -1
  18. package/package.json +1 -1
  19. package/dist/engine/adr_recorder.d.ts +0 -13
  20. package/dist/engine/adr_recorder.d.ts.map +0 -1
  21. package/dist/engine/adr_recorder.js +0 -132
  22. package/dist/engine/adr_recorder.js.map +0 -1
  23. package/dist/engine/batch1_reality_gate.d.ts +0 -40
  24. package/dist/engine/batch1_reality_gate.d.ts.map +0 -1
  25. package/dist/engine/batch1_reality_gate.js +0 -290
  26. package/dist/engine/batch1_reality_gate.js.map +0 -1
  27. package/dist/engine/prompt_experiment.d.ts +0 -18
  28. package/dist/engine/prompt_experiment.d.ts.map +0 -1
  29. package/dist/engine/prompt_experiment.js +0 -127
  30. package/dist/engine/prompt_experiment.js.map +0 -1
  31. package/dist/engine/resilience.d.ts +0 -20
  32. package/dist/engine/resilience.d.ts.map +0 -1
  33. package/dist/engine/resilience.js +0 -210
  34. package/dist/engine/resilience.js.map +0 -1
  35. package/dist/engine/workspace_manager.d.ts +0 -29
  36. package/dist/engine/workspace_manager.d.ts.map +0 -1
  37. package/dist/engine/workspace_manager.js +0 -77
  38. package/dist/engine/workspace_manager.js.map +0 -1
  39. package/dist/utils/logger.d.ts +0 -3
  40. package/dist/utils/logger.d.ts.map +0 -1
  41. package/dist/utils/logger.js +0 -29
  42. package/dist/utils/logger.js.map +0 -1
@@ -1,40 +0,0 @@
1
- /**
2
- * Batch1 Reality Gate
3
- *
4
- * Prevents Batch1 from passing on registry/status/file-existence evidence alone.
5
- * Each covered problem must prove three implementation facts:
6
- * - main_path: a real production entry or engine path consumes the mechanism.
7
- * - repair_or_block: failures are blocked, degraded, or routed to repair/reverify.
8
- * - user_project_path: the same behavior is reachable when a user runs SoloForge.
9
- */
10
- export type RealityDimension = "main_path" | "repair_or_block" | "user_project_path";
11
- export interface RealityEvidenceProbe {
12
- file: string;
13
- includes_all?: string[];
14
- includes_any?: string[];
15
- absent_file?: boolean;
16
- absent_text?: string[];
17
- }
18
- export interface Batch1RealityRequirement {
19
- problem_id: string;
20
- dimension: RealityDimension;
21
- description: string;
22
- probes: RealityEvidenceProbe[];
23
- }
24
- export interface Batch1RealityFinding {
25
- severity: "hard_fail";
26
- problem_id: string;
27
- dimension: RealityDimension | "coverage" | "status";
28
- message: string;
29
- evidence: string[];
30
- }
31
- export interface Batch1RealityReport {
32
- problem_ids: string[];
33
- requirements: Batch1RealityRequirement[];
34
- findings: Batch1RealityFinding[];
35
- hard_fail_count: number;
36
- }
37
- export declare const BATCH1_REALITY_PROBLEM_IDS: readonly ["problem-1", "problem-2", "problem-3", "problem-4", "problem-5", "problem-6", "problem-8", "problem-9", "problem-22", "problem-23", "problem-24", "problem-29", "problem-32", "problem-33", "problem-37", "problem-44", "problem-45", "problem-46"];
38
- export declare const BATCH1_REALITY_REQUIREMENTS: Batch1RealityRequirement[];
39
- export declare function validateBatch1RealityGate(projectRoot: string, problemIds?: readonly string[]): Batch1RealityReport;
40
- //# sourceMappingURL=batch1_reality_gate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch1_reality_gate.d.ts","sourceRoot":"","sources":["../../src/engine/batch1_reality_gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAErF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,gBAAgB,GAAG,UAAU,GAAG,QAAQ,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,wBAAwB,EAAE,CAAC;IACzC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,0BAA0B,+PAK7B,CAAC;AASX,eAAO,MAAM,2BAA2B,EAAE,wBAAwB,EA8LjE,CAAC;AA2CF,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,SAAS,MAAM,EAA+B,GACzD,mBAAmB,CAkErB"}
@@ -1,290 +0,0 @@
1
- /**
2
- * Batch1 Reality Gate
3
- *
4
- * Prevents Batch1 from passing on registry/status/file-existence evidence alone.
5
- * Each covered problem must prove three implementation facts:
6
- * - main_path: a real production entry or engine path consumes the mechanism.
7
- * - repair_or_block: failures are blocked, degraded, or routed to repair/reverify.
8
- * - user_project_path: the same behavior is reachable when a user runs SoloForge.
9
- */
10
- import fs from "node:fs";
11
- import path from "node:path";
12
- import { findProblemById } from "./implementation_roadmap_registry.js";
13
- export const BATCH1_REALITY_PROBLEM_IDS = [
14
- "problem-1", "problem-2", "problem-3", "problem-4", "problem-5",
15
- "problem-6", "problem-8", "problem-9", "problem-22", "problem-23",
16
- "problem-24", "problem-29", "problem-32", "problem-33", "problem-37",
17
- "problem-44", "problem-45", "problem-46",
18
- ];
19
- const req = (problem_id, dimension, description, probes) => ({ problem_id, dimension, description, probes });
20
- export const BATCH1_REALITY_REQUIREMENTS = [
21
- req("problem-1", "main_path", "意图路由结果必须进入 classify/expand 主链路", [
22
- { file: "src/engine/classifier.ts", includes_all: ["routeIntent", "route_decision"] },
23
- { file: "src/engine/intent_expander.ts", includes_all: ["route_decision", "execution_shape"] },
24
- ]),
25
- req("problem-1", "repair_or_block", "源码包输入缺失时必须降级澄清,不能伪装完整执行", [
26
- { file: "src/engine/intent_expander.ts", includes_all: ["missing_required_inputs", "degraded", "澄清"] },
27
- ]),
28
- req("problem-1", "user_project_path", "用户调用 sf_classify/sf_expand 时必须消费 route_decision", [
29
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["sf_classify", "sf_expand", "route_decision"] },
30
- ]),
31
- req("problem-2", "main_path", "setup.sh 历史入口必须不存在", [
32
- { file: "setup.sh", absent_file: true },
33
- ]),
34
- req("problem-2", "repair_or_block", "包脚本不得继续引用 setup.sh", [
35
- { file: "package.json", absent_text: ["setup.sh"] },
36
- ]),
37
- req("problem-2", "user_project_path", "用户安装入口必须走 package bin/CLI,而不是 setup.sh", [
38
- { file: "package.json", includes_all: ["\"bin\"", "dist/bin/soloforge.js"] },
39
- ]),
40
- req("problem-3", "main_path", "verify-test-counts.mjs 过时门禁必须不存在", [
41
- { file: "verify-test-counts.mjs", absent_file: true },
42
- ]),
43
- req("problem-3", "repair_or_block", "包脚本不得继续引用 verify-test-counts.mjs", [
44
- { file: "package.json", absent_text: ["verify-test-counts.mjs"] },
45
- ]),
46
- req("problem-3", "user_project_path", "用户验证入口必须走真实测试/validate-batch1,不依赖数量门禁", [
47
- { file: "package.json", includes_all: ["\"test\"", "vitest"] },
48
- { file: "src/bin/soloforge.ts", includes_all: ["validate-batch1", "cmdValidateBatch1"] },
49
- ]),
50
- req("problem-4", "main_path", "可消费资产注册表必须被 Batch1 审计真实消费", [
51
- { file: "src/engine/template_mechanism_auditor.ts", includes_all: ["listBuiltinConsumableAssets"] },
52
- { file: "src/bin/soloforge.ts", includes_all: ["listBuiltinConsumableAssets", "assetPaths"] },
53
- ]),
54
- req("problem-4", "repair_or_block", "资产 manifest 不一致必须产生 hard fail", [
55
- { file: "src/engine/batch1_manifest.ts", includes_all: ["reconcileManifest", "hard_fail"] },
56
- ]),
57
- req("problem-4", "user_project_path", "模板复制/CLI 验证路径必须使用同一资产清单", [
58
- { file: "src/bin/soloforge.ts", includes_any: ["copyKnowledgeTemplates", "validate-batch1"] },
59
- ]),
60
- req("problem-5", "main_path", "机制自治理必须接入机制审计/验证入口", [
61
- { file: "src/bin/soloforge.ts", includes_all: ["validate-mechanisms", "audit-template-mechanisms"] },
62
- ]),
63
- req("problem-5", "repair_or_block", "机制失效必须以 hard_fail 阻断 Batch1", [
64
- { file: "src/engine/dual_layer_mechanism_registry.ts", includes_all: ["batch1_mode", "hard_fail"] },
65
- ]),
66
- req("problem-5", "user_project_path", "用户项目生成的适配器必须携带机制规则", [
67
- { file: "src/adapters/shared/workflow_template.ts", includes_any: ["机制", "Hard Baseline", "HARD_BASELINE_PROTOCOL"] },
68
- ]),
69
- req("problem-6", "main_path", "自动配置必须由 init --auto/blueprint 调用真实配置推断", [
70
- { file: "src/bin/soloforge.ts", includes_all: ["cmdInitAuto", "detectFingerprint", "generateConfigDraft", "canAutoWrite"] },
71
- { file: "src/bin/soloforge.ts", includes_all: ["cmdInitBlueprint", "parseBlueprint", "generateBlueprintEvidence"] },
72
- ]),
73
- req("problem-6", "repair_or_block", "低/中置信度配置必须拒绝自动落盘", [
74
- { file: "src/engine/zero_config_init.ts", includes_all: ["canAutoWrite", "blockedFields"] },
75
- ]),
76
- req("problem-6", "user_project_path", "用户项目配置解析必须走统一优先级报告", [
77
- { file: "src/bin/soloforge.ts", includes_all: ["resolveCurrentProjectConfigReports", "config resolve"] },
78
- ]),
79
- req("problem-8", "main_path", "知识注入边界必须由 expand 主链路调用", [
80
- { file: "src/engine/intent_expander.ts", includes_all: ["enforceKnowledgeInjectionBoundary", "validateInjectionReport"] },
81
- ]),
82
- req("problem-8", "repair_or_block", "required knowledge 缺失或治理 hard_fail 必须阻断/降级", [
83
- { file: "src/engine/intent_expander.ts", includes_all: ["missing_required_knowledge", "hard_fail", "degraded"] },
84
- ]),
85
- req("problem-8", "user_project_path", "用户 sf_expand 入口必须返回 injection_report", [
86
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["expansion", "injection_report"] },
87
- ]),
88
- req("problem-9", "main_path", "工作流契约必须由 route_decision 解析并写入 workflow_trace", [
89
- { file: "src/engine/intent_expander.ts", includes_all: ["resolveWorkflow", "workflow_trace"] },
90
- ]),
91
- req("problem-9", "repair_or_block", "route/workflow 不一致必须阻断,不得继续执行", [
92
- { file: "src/engine/intent_expander.ts", includes_all: ["mutation_allowed 不一致", "degraded"] },
93
- ]),
94
- req("problem-9", "user_project_path", "用户工具链必须依据 workflow_trace 进入 verify/learn", [
95
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["workflow_trace", "sf_verify", "sf_learn"] },
96
- ]),
97
- req("problem-22", "main_path", "Tool Invocation Contract 必须接入适配器工具调用守卫", [
98
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["validateToolInvocation", "findToolInvocationContractByName"] },
99
- ]),
100
- req("problem-22", "repair_or_block", "strict controlled 工具越权必须返回 violation/block", [
101
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["strict_controlled", "ToolInvocationViolation"] },
102
- ]),
103
- req("problem-22", "user_project_path", "用户项目工具调用必须受 next_allowed_tools 控制", [
104
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["next_allowed_tools", "last_tool_trace"] },
105
- ]),
106
- req("problem-23", "main_path", "外部材料必须在 expand 中转成 InputMaterial 并生成注入计划", [
107
- { file: "src/engine/intent_expander.ts", includes_all: ["createInputMaterial", "buildPromptInjectionPlan"] },
108
- ]),
109
- req("problem-23", "repair_or_block", "需确认/禁用材料必须澄清或阻断", [
110
- { file: "src/engine/intent_expander.ts", includes_all: ["classifyIngestionStatus", "requires_confirmation", "forbidden"] },
111
- ]),
112
- req("problem-23", "user_project_path", "用户 sf_expand 必须把材料确认状态反馈出去", [
113
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["classifyIngestionStatus", "澄清请求"] },
114
- ]),
115
- req("problem-24", "main_path", "输出产物必须由 expand 创建 artifact record 并写入 TaskContext", [
116
- { file: "src/engine/intent_expander.ts", includes_all: ["createOutputArtifact", "output_artifact_record"] },
117
- { file: "src/engine/task_context.ts", includes_all: ["setArtifact", "OutputArtifact"] },
118
- ]),
119
- req("problem-24", "repair_or_block", "产物验收失败必须被 verifyArtifact 捕获", [
120
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["verifyArtifact", "artifactVerificationResult"] },
121
- ]),
122
- req("problem-24", "user_project_path", "用户项目产物必须默认写入 .soloforge/output", [
123
- { file: "src/engine/artifact_contract_registry.ts", includes_all: [".soloforge/output", "getDefaultArtifactPath"] },
124
- ]),
125
- req("problem-29", "main_path", "用户可见反馈必须由工具链统一创建", [
126
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["createUserFeedbackMessage", "sf_verify"] },
127
- ]),
128
- req("problem-29", "repair_or_block", "失败不得伪装 completed/verification_summary", [
129
- { file: "src/engine/user_feedback_contract.ts", includes_all: ["completed", "blocking", "hard_fail"] },
130
- ]),
131
- req("problem-29", "user_project_path", "用户项目失败必须看到 blocked/degradation/human_required 中文反馈", [
132
- { file: "src/engine/user_feedback_contract.ts", includes_all: ["blocked", "degradation", "human_required"] },
133
- ]),
134
- req("problem-32", "main_path", "隐私门禁必须在 expand prompt 构造前执行", [
135
- { file: "src/engine/intent_expander.ts", includes_all: ["evaluatePrivacyGate", "privacyGate"] },
136
- ]),
137
- req("problem-32", "repair_or_block", "secret/credential hard_fail 时必须阻断 prompt 注入", [
138
- { file: "src/engine/privacy_secret_contract.ts", includes_all: ["evaluatePrivacyGate", "hard_fail"] },
139
- ]),
140
- req("problem-32", "user_project_path", "用户项目输入材料必须同样走 privacy gate", [
141
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["sf_expand", "expansion"] },
142
- { file: "src/engine/intent_expander.ts", includes_all: ["input_materials", "evaluatePrivacyGate"] },
143
- ]),
144
- req("problem-33", "main_path", "命令执行契约必须提供真实 validate/canExecute 入口", [
145
- { file: "src/engine/command_execution_contract.ts", includes_all: ["validateCommandExecution", "canExecute"] },
146
- ]),
147
- req("problem-33", "repair_or_block", "forbidden/destructive 命令必须 blocked 或 require_human", [
148
- { file: "src/engine/command_execution_contract.ts", includes_all: ["forbidden", "require_human"] },
149
- ]),
150
- req("problem-33", "user_project_path", "用户项目验证命令必须以 plan_only 返回,由用户工具执行", [
151
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["generateVerifyCommands", "plan_only"] },
152
- ]),
153
- req("problem-37", "main_path", "配置解析必须走统一 Config Precedence Contract", [
154
- { file: "src/engine/intent_expander.ts", includes_all: ["resolveCurrentProjectConfigReports"] },
155
- { file: "src/bin/soloforge.ts", includes_all: ["cmdConfigResolve", "cmdConfigExplain"] },
156
- ]),
157
- req("problem-37", "repair_or_block", "高优先级 guard 不得被低优先级覆盖", [
158
- { file: "src/engine/config_precedence_contract.ts", includes_all: ["checkGuardOverride", "hard_fail"] },
159
- ]),
160
- req("problem-37", "user_project_path", "用户项目 CLI status/config 必须复用同一 resolver", [
161
- { file: "src/bin/soloforge.ts", includes_all: ["resolveCurrentProjectConfigReports", "cmdStatus"] },
162
- ]),
163
- req("problem-44", "main_path", "孤岛防护必须进入 verify/task context/tool 主链路", [
164
- { file: "src/engine/verifier.ts", includes_all: ["main_path", "orphan"] },
165
- { file: "src/engine/task_context.ts", includes_all: ["repair_reverify"] },
166
- ]),
167
- req("problem-44", "repair_or_block", "未集成模块必须 hard_fail 并进入 repair_reverify", [
168
- { file: "src/engine/main_path_integration_contract.ts", includes_all: ["implemented_not_integrated", "hard_fail"] },
169
- { file: "src/engine/task_context.ts", includes_all: ["repair_reverify"] },
170
- ]),
171
- req("problem-44", "user_project_path", "用户项目代码变更验收必须运行孤岛门禁", [
172
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["main_path", "repair_reverify"] },
173
- ]),
174
- req("problem-45", "main_path", "双层模型必须由 validate-batch1 执行模板审计和机制层校验", [
175
- { file: "src/bin/soloforge.ts", includes_all: ["auditTemplateMechanisms", "validateMechanismLayerMaps"] },
176
- ]),
177
- req("problem-45", "repair_or_block", "workflow_template 过厚或硬规则未注册必须 hard_fail", [
178
- { file: "src/engine/template_mechanism_auditor.ts", includes_all: ["workflow_template", "hard_fail"] },
179
- ]),
180
- req("problem-45", "user_project_path", "用户项目适配器模板必须承载硬底线协议,厚细节留在知识层", [
181
- { file: "src/adapters/shared/workflow_template.ts", includes_any: ["HARD_BASELINE_PROTOCOL", "硬底线", "核心工程执行原则"] },
182
- ]),
183
- req("problem-46", "main_path", "核心工程原则必须由 verify/task context 主链路消费", [
184
- { file: "src/engine/verifier.ts", includes_all: ["checkCorePrinciples"] },
185
- { file: "src/engine/task_context.ts", includes_all: ["repair_reverify"] },
186
- ]),
187
- req("problem-46", "repair_or_block", "原则失败必须指向修复/补验证,而不是报告即完成", [
188
- { file: "src/engine/core_engineering_principles.ts", includes_all: ["required_action", "repair_reverify"] },
189
- ]),
190
- req("problem-46", "user_project_path", "用户项目验证失败必须暴露核心原则结果", [
191
- { file: "src/adapters/claude_code/tools.ts", includes_all: ["core_principles", "createUserFeedbackMessage"] },
192
- ]),
193
- ];
194
- function readFile(projectRoot, relPath) {
195
- const absPath = path.resolve(projectRoot, relPath);
196
- if (!fs.existsSync(absPath))
197
- return null;
198
- return fs.readFileSync(absPath, "utf-8");
199
- }
200
- function evaluateProbe(projectRoot, probe) {
201
- const absPath = path.resolve(projectRoot, probe.file);
202
- const exists = fs.existsSync(absPath);
203
- if (probe.absent_file) {
204
- return exists
205
- ? { passed: false, evidence: `${probe.file} should be absent but exists` }
206
- : { passed: true, evidence: `${probe.file} absent` };
207
- }
208
- const content = readFile(projectRoot, probe.file);
209
- if (content === null) {
210
- return { passed: false, evidence: `${probe.file} missing` };
211
- }
212
- const missingAll = (probe.includes_all ?? []).filter((token) => !content.includes(token));
213
- if (missingAll.length > 0) {
214
- return { passed: false, evidence: `${probe.file} missing required tokens: ${missingAll.join(", ")}` };
215
- }
216
- if (probe.includes_any && probe.includes_any.length > 0) {
217
- const matched = probe.includes_any.filter((token) => content.includes(token));
218
- if (matched.length === 0) {
219
- return { passed: false, evidence: `${probe.file} missing any of: ${probe.includes_any.join(", ")}` };
220
- }
221
- }
222
- const presentForbidden = (probe.absent_text ?? []).filter((token) => content.includes(token));
223
- if (presentForbidden.length > 0) {
224
- return { passed: false, evidence: `${probe.file} contains forbidden text: ${presentForbidden.join(", ")}` };
225
- }
226
- return { passed: true, evidence: `${probe.file} matched` };
227
- }
228
- export function validateBatch1RealityGate(projectRoot, problemIds = BATCH1_REALITY_PROBLEM_IDS) {
229
- const findings = [];
230
- const requiredIds = new Set(problemIds);
231
- const coveredIds = new Set(BATCH1_REALITY_REQUIREMENTS.map((r) => r.problem_id));
232
- for (const problemId of requiredIds) {
233
- const problem = findProblemById(problemId);
234
- if (!problem) {
235
- findings.push({
236
- severity: "hard_fail",
237
- problem_id: problemId,
238
- dimension: "coverage",
239
- message: "Batch1 问题不存在于 roadmap registry",
240
- evidence: [],
241
- });
242
- continue;
243
- }
244
- if (problem.status === "completed" && !coveredIds.has(problemId)) {
245
- findings.push({
246
- severity: "hard_fail",
247
- problem_id: problemId,
248
- dimension: "coverage",
249
- message: "completed 问题缺少 reality gate;禁止仅凭 completed 状态通过",
250
- evidence: [`status=${problem.status}`],
251
- });
252
- }
253
- }
254
- for (const problemId of requiredIds) {
255
- for (const dimension of ["main_path", "repair_or_block", "user_project_path"]) {
256
- const hasRequirement = BATCH1_REALITY_REQUIREMENTS.some((r) => r.problem_id === problemId && r.dimension === dimension);
257
- if (!hasRequirement) {
258
- findings.push({
259
- severity: "hard_fail",
260
- problem_id: problemId,
261
- dimension,
262
- message: `缺少 ${dimension} 真实性验收要求`,
263
- evidence: [],
264
- });
265
- }
266
- }
267
- }
268
- for (const requirement of BATCH1_REALITY_REQUIREMENTS) {
269
- if (!requiredIds.has(requirement.problem_id))
270
- continue;
271
- const probeResults = requirement.probes.map((probe) => evaluateProbe(projectRoot, probe));
272
- const failed = probeResults.filter((r) => !r.passed);
273
- if (failed.length > 0) {
274
- findings.push({
275
- severity: "hard_fail",
276
- problem_id: requirement.problem_id,
277
- dimension: requirement.dimension,
278
- message: requirement.description,
279
- evidence: probeResults.map((r) => r.evidence),
280
- });
281
- }
282
- }
283
- return {
284
- problem_ids: [...problemIds],
285
- requirements: BATCH1_REALITY_REQUIREMENTS.filter((r) => requiredIds.has(r.problem_id)),
286
- findings,
287
- hard_fail_count: findings.length,
288
- };
289
- }
290
- //# sourceMappingURL=batch1_reality_gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch1_reality_gate.js","sourceRoot":"","sources":["../../src/engine/batch1_reality_gate.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { PromptExperiment, ExperimentResult, TaskContext } from "../types.js";
2
- /**
3
- * Create a new prompt experiment (A/B test) comparing two prompt variants.
4
- */
5
- export declare function createExperiment(entry: string, variantB: string): PromptExperiment;
6
- /**
7
- * Evaluate an experiment by comparing two groups of TaskContexts.
8
- *
9
- * Metrics:
10
- * - pass_rate: higher is better
11
- * - avg_retry_count: lower is better
12
- * - avg_duration_ms: lower is better
13
- *
14
- * Winner is determined by majority vote across metrics.
15
- * Confidence is the average of absolute normalized differences.
16
- */
17
- export declare function evaluateExperiment(experiment: PromptExperiment, tasksA: TaskContext[], tasksB: TaskContext[]): ExperimentResult;
18
- //# sourceMappingURL=prompt_experiment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt_experiment.d.ts","sourceRoot":"","sources":["../../src/engine/prompt_experiment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAUlF;AA0CD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,GACpB,gBAAgB,CAuElB"}
@@ -1,127 +0,0 @@
1
- /**
2
- * Create a new prompt experiment (A/B test) comparing two prompt variants.
3
- */
4
- export function createExperiment(entry, variantB) {
5
- return {
6
- id: `EXP-${Date.now().toString(36).toUpperCase()}`,
7
- knowledge_entry: entry,
8
- variant_a: "current",
9
- variant_b: variantB,
10
- metrics: ["pass_rate", "avg_retry_count", "avg_duration_ms"],
11
- status: "draft",
12
- created_at: new Date().toISOString(),
13
- };
14
- }
15
- function computeGroupMetrics(tasks) {
16
- if (tasks.length === 0) {
17
- return {
18
- pass_rate: 0,
19
- avg_retry_count: 0,
20
- avg_duration_ms: 0,
21
- };
22
- }
23
- const total = tasks.length;
24
- // pass_rate: tasks with status "done" / total
25
- const doneCount = tasks.filter((t) => t.status === "done").length;
26
- const passRate = doneCount / total;
27
- // avg_retry_count: average of execution.failure_history.length
28
- let totalRetries = 0;
29
- for (const task of tasks) {
30
- if (task.execution?.failure_history) {
31
- totalRetries += task.execution.failure_history.length;
32
- }
33
- }
34
- const avgRetryCount = totalRetries / total;
35
- // avg_duration_ms: average time from created_at to now
36
- const now = Date.now();
37
- let totalDuration = 0;
38
- for (const task of tasks) {
39
- const created = new Date(task.created_at).getTime();
40
- totalDuration += now - created;
41
- }
42
- const avgDurationMs = totalDuration / total;
43
- return {
44
- pass_rate: Math.round(passRate * 1000) / 1000,
45
- avg_retry_count: Math.round(avgRetryCount * 1000) / 1000,
46
- avg_duration_ms: Math.round(avgDurationMs),
47
- };
48
- }
49
- /**
50
- * Evaluate an experiment by comparing two groups of TaskContexts.
51
- *
52
- * Metrics:
53
- * - pass_rate: higher is better
54
- * - avg_retry_count: lower is better
55
- * - avg_duration_ms: lower is better
56
- *
57
- * Winner is determined by majority vote across metrics.
58
- * Confidence is the average of absolute normalized differences.
59
- */
60
- export function evaluateExperiment(experiment, tasksA, tasksB) {
61
- const metricsA = computeGroupMetrics(tasksA);
62
- const metricsB = computeGroupMetrics(tasksB);
63
- const directions = {
64
- pass_rate: "higher_better",
65
- avg_retry_count: "lower_better",
66
- avg_duration_ms: "lower_better",
67
- };
68
- let winsA = 0;
69
- let winsB = 0;
70
- const diffs = [];
71
- for (const metric of experiment.metrics) {
72
- const valA = metricsA[metric] ?? 0;
73
- const valB = metricsB[metric] ?? 0;
74
- const dir = directions[metric];
75
- // Normalized difference: |A - B| / max(A, B, 1) to avoid division by zero
76
- const maxVal = Math.max(valA, valB, 1);
77
- const absDiff = Math.abs(valA - valB) / maxVal;
78
- diffs.push(absDiff);
79
- if (dir === "higher_better") {
80
- if (valA > valB)
81
- winsA++;
82
- else if (valB > valA)
83
- winsB++;
84
- }
85
- else {
86
- // lower_better
87
- if (valA < valB)
88
- winsA++;
89
- else if (valB < valA)
90
- winsB++;
91
- }
92
- }
93
- // Determine winner by majority
94
- let winner;
95
- if (winsA >= 2) {
96
- winner = "a";
97
- }
98
- else if (winsB >= 2) {
99
- winner = "b";
100
- }
101
- else {
102
- winner = "inconclusive";
103
- }
104
- // Confidence: average of absolute normalized differences (0.0 to 1.0)
105
- const confidence = diffs.length > 0 ? Math.round((diffs.reduce((a, b) => a + b, 0) / diffs.length) * 1000) / 1000 : 0;
106
- // Build summary in Chinese
107
- let summary;
108
- const passRateDiff = Math.round(Math.abs(metricsA.pass_rate - metricsB.pass_rate) * 10000) / 100;
109
- if (winner === "inconclusive") {
110
- summary = "实验结果不显著";
111
- }
112
- else if (winner === "a") {
113
- summary = `实验完成:变体 A 胜出(胜率 ${passRateDiff}%)`;
114
- }
115
- else {
116
- summary = `实验完成:变体 B 胜出(胜率 ${passRateDiff}%)`;
117
- }
118
- return {
119
- experiment_id: experiment.id,
120
- variant_a_metrics: metricsA,
121
- variant_b_metrics: metricsB,
122
- winner,
123
- confidence,
124
- summary,
125
- };
126
- }
127
- //# sourceMappingURL=prompt_experiment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt_experiment.js","sourceRoot":"","sources":["../../src/engine/prompt_experiment.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { TaskContext, DegradationStatus } from "../types.js";
2
- /**
3
- * Analyzes a single TaskContext and returns degradation status for each component.
4
- *
5
- * This is a diagnostic function -- the actual degradation behavior is embedded
6
- * in each component. Components that must never degrade (scope_controller,
7
- * secret_detection) always return "full".
8
- */
9
- export declare function checkDegradation(context: TaskContext): DegradationStatus[];
10
- /**
11
- * Takes multiple TaskContexts (e.g., recent tasks) and determines overall system
12
- * degradation by taking the worst level for each component across all contexts.
13
- *
14
- * Returns the aggregated component statuses and a human-readable summary in Chinese.
15
- */
16
- export declare function checkSystemDegradation(contexts: TaskContext[]): {
17
- components: DegradationStatus[];
18
- summary: string;
19
- };
20
- //# sourceMappingURL=resilience.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../src/engine/resilience.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwLpF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG;IAC/D,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,CAsDA"}