soloforge 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -18
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +319 -5
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +25 -0
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/bin/soloforge.js +169 -13
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/audit_pool.d.ts +36 -0
- package/dist/engine/audit_pool.d.ts.map +1 -0
- package/dist/engine/audit_pool.js +83 -0
- package/dist/engine/audit_pool.js.map +1 -0
- package/dist/engine/audit_sampler.d.ts +15 -0
- package/dist/engine/audit_sampler.d.ts.map +1 -0
- package/dist/engine/audit_sampler.js +26 -0
- package/dist/engine/audit_sampler.js.map +1 -0
- package/dist/engine/capability_action_advisor.d.ts +24 -0
- package/dist/engine/capability_action_advisor.d.ts.map +1 -0
- package/dist/engine/capability_action_advisor.js +147 -0
- package/dist/engine/capability_action_advisor.js.map +1 -0
- package/dist/engine/capability_registry.d.ts +23 -1
- package/dist/engine/capability_registry.d.ts.map +1 -1
- package/dist/engine/capability_registry.js +511 -19
- package/dist/engine/capability_registry.js.map +1 -1
- package/dist/engine/capability_state_store.d.ts +50 -0
- package/dist/engine/capability_state_store.d.ts.map +1 -0
- package/dist/engine/capability_state_store.js +123 -0
- package/dist/engine/capability_state_store.js.map +1 -0
- package/dist/engine/cognitive_anchor.d.ts +59 -0
- package/dist/engine/cognitive_anchor.d.ts.map +1 -0
- package/dist/engine/cognitive_anchor.js +68 -0
- package/dist/engine/cognitive_anchor.js.map +1 -0
- package/dist/engine/conflict_gate.d.ts +36 -0
- package/dist/engine/conflict_gate.d.ts.map +1 -0
- package/dist/engine/conflict_gate.js +73 -0
- package/dist/engine/conflict_gate.js.map +1 -0
- package/dist/engine/decision_contract.d.ts +29 -0
- package/dist/engine/decision_contract.d.ts.map +1 -0
- package/dist/engine/decision_contract.js +41 -0
- package/dist/engine/decision_contract.js.map +1 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +83 -0
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/developer_sovereignty.d.ts +62 -0
- package/dist/engine/developer_sovereignty.d.ts.map +1 -0
- package/dist/engine/developer_sovereignty.js +134 -0
- package/dist/engine/developer_sovereignty.js.map +1 -0
- package/dist/engine/diff_ownership.d.ts +74 -0
- package/dist/engine/diff_ownership.d.ts.map +1 -0
- package/dist/engine/diff_ownership.js +143 -0
- package/dist/engine/diff_ownership.js.map +1 -0
- package/dist/engine/diff_ownership_store.d.ts +76 -0
- package/dist/engine/diff_ownership_store.d.ts.map +1 -0
- package/dist/engine/diff_ownership_store.js +264 -0
- package/dist/engine/diff_ownership_store.js.map +1 -0
- package/dist/engine/escape_report.d.ts +45 -0
- package/dist/engine/escape_report.d.ts.map +1 -0
- package/dist/engine/escape_report.js +97 -0
- package/dist/engine/escape_report.js.map +1 -0
- package/dist/engine/exploration.d.ts +54 -0
- package/dist/engine/exploration.d.ts.map +1 -1
- package/dist/engine/exploration.js +138 -0
- package/dist/engine/exploration.js.map +1 -1
- package/dist/engine/governance_report.d.ts +36 -0
- package/dist/engine/governance_report.d.ts.map +1 -0
- package/dist/engine/governance_report.js +79 -0
- package/dist/engine/governance_report.js.map +1 -0
- package/dist/engine/java_quality_guard.d.ts +52 -0
- package/dist/engine/java_quality_guard.d.ts.map +1 -0
- package/dist/engine/java_quality_guard.js +237 -0
- package/dist/engine/java_quality_guard.js.map +1 -0
- package/dist/engine/job_manager.d.ts +76 -0
- package/dist/engine/job_manager.d.ts.map +1 -0
- package/dist/engine/job_manager.js +225 -0
- package/dist/engine/job_manager.js.map +1 -0
- package/dist/engine/knowledge_sovereignty.d.ts +61 -0
- package/dist/engine/knowledge_sovereignty.d.ts.map +1 -0
- package/dist/engine/knowledge_sovereignty.js +190 -0
- package/dist/engine/knowledge_sovereignty.js.map +1 -0
- package/dist/engine/mutation_audit.d.ts +43 -0
- package/dist/engine/mutation_audit.d.ts.map +1 -0
- package/dist/engine/mutation_audit.js +118 -0
- package/dist/engine/mutation_audit.js.map +1 -0
- package/dist/engine/policy_drift_detector.d.ts +46 -0
- package/dist/engine/policy_drift_detector.d.ts.map +1 -0
- package/dist/engine/policy_drift_detector.js +181 -0
- package/dist/engine/policy_drift_detector.js.map +1 -0
- package/dist/engine/regression_matrix.d.ts +102 -0
- package/dist/engine/regression_matrix.d.ts.map +1 -0
- package/dist/engine/regression_matrix.js +380 -0
- package/dist/engine/regression_matrix.js.map +1 -0
- package/dist/engine/risk_sampler.d.ts +37 -0
- package/dist/engine/risk_sampler.d.ts.map +1 -0
- package/dist/engine/risk_sampler.js +69 -0
- package/dist/engine/risk_sampler.js.map +1 -0
- package/dist/engine/runtime_safety.d.ts +80 -0
- package/dist/engine/runtime_safety.d.ts.map +1 -0
- package/dist/engine/runtime_safety.js +195 -0
- package/dist/engine/runtime_safety.js.map +1 -0
- package/dist/engine/scope_lease.d.ts +45 -0
- package/dist/engine/scope_lease.d.ts.map +1 -0
- package/dist/engine/scope_lease.js +122 -0
- package/dist/engine/scope_lease.js.map +1 -0
- package/dist/engine/semantic_evidence.d.ts +23 -0
- package/dist/engine/semantic_evidence.d.ts.map +1 -0
- package/dist/engine/semantic_evidence.js +81 -0
- package/dist/engine/semantic_evidence.js.map +1 -0
- package/dist/engine/task_context.d.ts +16 -0
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +58 -0
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +22 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workspace_resumer.d.ts +43 -0
- package/dist/engine/workspace_resumer.d.ts.map +1 -1
- package/dist/engine/workspace_resumer.js +119 -4
- package/dist/engine/workspace_resumer.js.map +1 -1
- package/dist/engine/zero_config_init.d.ts +87 -0
- package/dist/engine/zero_config_init.d.ts.map +1 -0
- package/dist/engine/zero_config_init.js +427 -0
- package/dist/engine/zero_config_init.js.map +1 -0
- package/dist/knowledge/index_manager.d.ts +19 -0
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +31 -0
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/writer.d.ts.map +1 -1
- package/dist/knowledge/writer.js +1 -0
- package/dist/knowledge/writer.js.map +1 -1
- package/dist/types.d.ts +61 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/templates/knowledge/patterns/core/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +47 -0
- package/templates/knowledge/patterns/core/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +46 -0
- package/templates/knowledge/patterns/core/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +46 -0
- package/templates/knowledge/patterns/core//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md +47 -0
- package/templates/knowledge/patterns/core//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +47 -0
- package/templates/knowledge/patterns/core//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md +46 -0
- package/templates/knowledge/patterns/core//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +47 -0
- package/templates/knowledge/patterns/core//345/206/262/347/252/201/351/227/250/347/246/201.md +47 -0
- package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +30 -11
- package/templates/knowledge/patterns/core//345/217/230/345/274/202/345/256/241/350/256/241.md +20 -0
- package/templates/knowledge/patterns/core//345/233/236/345/275/222/347/237/251/351/230/265.md +46 -0
- package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +44 -0
- package/templates/knowledge/patterns/core//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +46 -0
- package/templates/knowledge/patterns/core//345/271/266/345/217/221/351/224/201.md +29 -16
- package/templates/knowledge/patterns/core//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +20 -0
- package/templates/knowledge/patterns/core//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +45 -0
- package/templates/knowledge/patterns/core//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +48 -0
- package/templates/knowledge/patterns/core//346/265/201/345/274/217/345/277/203/350/267/263.md +20 -0
- package/templates/knowledge/patterns/core//347/237/245/350/257/206/344/270/273/346/235/203.md +20 -0
- package/templates/knowledge/patterns/core//350/257/255/344/271/211/350/257/201/346/215/256.md +47 -0
- package/templates/knowledge/patterns/core//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +50 -0
- package/templates/knowledge/patterns/core//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +47 -0
- package/templates/knowledge/patterns/core//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +46 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 审计池 — 记录已完成任务的审计条目,供后续治理流程消费。
|
|
3
|
+
* P2-1 范围: 持久化入池(append)和查询(list),不做随机抽检,不生成逃逸报告,不改能力状态。
|
|
4
|
+
* 存储: JSON 数组文件,原子写入。
|
|
5
|
+
* 路径: 由调用方(TaskContextManager)传入 stateDir 绑定,不使用 process.cwd 猜测。
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
const ALL_RISK_LEVELS = ["low", "medium", "high", "critical"];
|
|
10
|
+
function emptyByRisk() {
|
|
11
|
+
return Object.fromEntries(ALL_RISK_LEVELS.map((r) => [r, 0]));
|
|
12
|
+
}
|
|
13
|
+
function deepCopyItem(item) {
|
|
14
|
+
return {
|
|
15
|
+
task_id: item.task_id,
|
|
16
|
+
risk: item.risk,
|
|
17
|
+
changed_files: [...item.changed_files],
|
|
18
|
+
evidence: item.evidence,
|
|
19
|
+
capability_refs: [...item.capability_refs],
|
|
20
|
+
created_at: item.created_at,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export class AuditPool {
|
|
24
|
+
filePath;
|
|
25
|
+
items = [];
|
|
26
|
+
loaded = false;
|
|
27
|
+
constructor(stateDir) {
|
|
28
|
+
this.filePath = path.join(stateDir, "audit-pool.json");
|
|
29
|
+
if (!fs.existsSync(stateDir)) {
|
|
30
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
ensureLoaded() {
|
|
34
|
+
if (this.loaded)
|
|
35
|
+
return;
|
|
36
|
+
this.loaded = true;
|
|
37
|
+
try {
|
|
38
|
+
const data = fs.readFileSync(this.filePath, "utf-8");
|
|
39
|
+
this.items = JSON.parse(data);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
this.items = [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
persist() {
|
|
46
|
+
const tmpPath = `${this.filePath}.tmp`;
|
|
47
|
+
fs.writeFileSync(tmpPath, JSON.stringify(this.items, null, 2));
|
|
48
|
+
fs.renameSync(tmpPath, this.filePath);
|
|
49
|
+
}
|
|
50
|
+
append(item) {
|
|
51
|
+
this.ensureLoaded();
|
|
52
|
+
this.items.push(deepCopyItem(item));
|
|
53
|
+
this.persist();
|
|
54
|
+
}
|
|
55
|
+
list(filter) {
|
|
56
|
+
this.ensureLoaded();
|
|
57
|
+
let result = this.items;
|
|
58
|
+
if (filter?.risk) {
|
|
59
|
+
result = result.filter((i) => i.risk === filter.risk);
|
|
60
|
+
}
|
|
61
|
+
if (filter?.capability_ref) {
|
|
62
|
+
result = result.filter((i) => i.capability_refs.includes(filter.capability_ref));
|
|
63
|
+
}
|
|
64
|
+
return result.map(deepCopyItem);
|
|
65
|
+
}
|
|
66
|
+
stats() {
|
|
67
|
+
this.ensureLoaded();
|
|
68
|
+
const by_risk = emptyByRisk();
|
|
69
|
+
for (const item of this.items) {
|
|
70
|
+
by_risk[item.risk]++;
|
|
71
|
+
}
|
|
72
|
+
return { total: this.items.length, by_risk };
|
|
73
|
+
}
|
|
74
|
+
clear() {
|
|
75
|
+
this.items = [];
|
|
76
|
+
this.loaded = true;
|
|
77
|
+
this.persist();
|
|
78
|
+
}
|
|
79
|
+
getFilePath() {
|
|
80
|
+
return this.filePath;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=audit_pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit_pool.js","sourceRoot":"","sources":["../../src/engine/audit_pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 抽检清单生成 — 基于 audit pool + risk_sampler 生成 SamplingDecision 列表。
|
|
3
|
+
* P2-6 范围: 只读输出,不落盘,不生成 escape report,不改 capability 状态。
|
|
4
|
+
*/
|
|
5
|
+
import type { AuditItem } from "./audit_pool.js";
|
|
6
|
+
import { type SamplingDecision } from "./risk_sampler.js";
|
|
7
|
+
export interface AuditSampleResult {
|
|
8
|
+
seed: number;
|
|
9
|
+
total_items: number;
|
|
10
|
+
sampled_count: number;
|
|
11
|
+
skipped_count: number;
|
|
12
|
+
decisions: SamplingDecision[];
|
|
13
|
+
}
|
|
14
|
+
export declare function sampleAuditItems(items: AuditItem[], seed?: number): AuditSampleResult;
|
|
15
|
+
//# sourceMappingURL=audit_sampler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit_sampler.d.ts","sourceRoot":"","sources":["../../src/engine/audit_sampler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,IAAI,GAAE,MAAU,GACf,iBAAiB,CAyBnB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 抽检清单生成 — 基于 audit pool + risk_sampler 生成 SamplingDecision 列表。
|
|
3
|
+
* P2-6 范围: 只读输出,不落盘,不生成 escape report,不改 capability 状态。
|
|
4
|
+
*/
|
|
5
|
+
import { shouldSample } from "./risk_sampler.js";
|
|
6
|
+
export function sampleAuditItems(items, seed = 0) {
|
|
7
|
+
const decisions = [];
|
|
8
|
+
for (const item of items) {
|
|
9
|
+
const decision = shouldSample({
|
|
10
|
+
task_id: item.task_id,
|
|
11
|
+
risk: item.risk,
|
|
12
|
+
changed_files: item.changed_files,
|
|
13
|
+
capability_refs: item.capability_refs,
|
|
14
|
+
}, seed);
|
|
15
|
+
decisions.push(decision);
|
|
16
|
+
}
|
|
17
|
+
const sampledCount = decisions.filter((d) => d.should_sample).length;
|
|
18
|
+
return {
|
|
19
|
+
seed,
|
|
20
|
+
total_items: decisions.length,
|
|
21
|
+
sampled_count: sampledCount,
|
|
22
|
+
skipped_count: decisions.length - sampledCount,
|
|
23
|
+
decisions,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=audit_sampler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit_sampler.js","sourceRoot":"","sources":["../../src/engine/audit_sampler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAyB,MAAM,mBAAmB,CAAC;AAUxE,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,OAAe,CAAC;IAEhB,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,YAAY,CAC3B;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,EACD,IAAI,CACL,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;IAErE,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,aAAa,EAAE,YAAY;QAC3B,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,YAAY;QAC9C,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 能力状态变更建议 — 基于 escape report 生成 downgrade/disable/promote_blocked/keep 决策。
|
|
3
|
+
* P2-4 范围: 只输出建议,不直接改 registry。
|
|
4
|
+
*
|
|
5
|
+
* 规则来源: 设计方案 7.7.3 降级规则表。
|
|
6
|
+
*/
|
|
7
|
+
import type { EscapeReport, CapabilityAction } from "./escape_report.js";
|
|
8
|
+
import type { CapabilityState } from "./capability_registry.js";
|
|
9
|
+
export interface ActionRule {
|
|
10
|
+
rule_id: string;
|
|
11
|
+
description: string;
|
|
12
|
+
severity: "critical" | "medium" | "low";
|
|
13
|
+
}
|
|
14
|
+
export interface ActionDecision {
|
|
15
|
+
policy_id: string;
|
|
16
|
+
current_state: CapabilityState;
|
|
17
|
+
recommended_action: CapabilityAction;
|
|
18
|
+
target_state: CapabilityState;
|
|
19
|
+
reason: string;
|
|
20
|
+
evidence_ids: string[];
|
|
21
|
+
triggered_rules: ActionRule[];
|
|
22
|
+
}
|
|
23
|
+
export declare function decideAction(reports: EscapeReport[], current_state: CapabilityState, policy_id: string, now?: Date): ActionDecision;
|
|
24
|
+
//# sourceMappingURL=capability_action_advisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability_action_advisor.d.ts","sourceRoot":"","sources":["../../src/engine/capability_action_advisor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAc,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,eAAe,CAAC;IAC/B,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,YAAY,EAAE,eAAe,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,UAAU,EAAE,CAAC;CAC/B;AAgDD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EAAE,EACvB,aAAa,EAAE,eAAe,EAC9B,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,IAAiB,GACrB,cAAc,CA0HhB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 能力状态变更建议 — 基于 escape report 生成 downgrade/disable/promote_blocked/keep 决策。
|
|
3
|
+
* P2-4 范围: 只输出建议,不直接改 registry。
|
|
4
|
+
*
|
|
5
|
+
* 规则来源: 设计方案 7.7.3 降级规则表。
|
|
6
|
+
*/
|
|
7
|
+
const CRITICAL_ESCAPE_TYPES = new Set([
|
|
8
|
+
"ai_escape",
|
|
9
|
+
"rule_gap",
|
|
10
|
+
"tool_bug",
|
|
11
|
+
]);
|
|
12
|
+
const MEDIUM_ESCAPE_TYPES = new Set([
|
|
13
|
+
"weak_test",
|
|
14
|
+
"bad_evidence",
|
|
15
|
+
"human_miss",
|
|
16
|
+
]);
|
|
17
|
+
const FALSE_POSITIVE_TYPE = "false_positive";
|
|
18
|
+
const FALSE_POSITIVE_THRESHOLD = 2;
|
|
19
|
+
const RULE_CRITICAL_ESCAPE = {
|
|
20
|
+
rule_id: "R-CE",
|
|
21
|
+
description: "同一 policy_id 出现 1 次严重逃逸 (ai_escape/rule_gap/tool_bug) → enforced→advisory",
|
|
22
|
+
severity: "critical",
|
|
23
|
+
};
|
|
24
|
+
const RULE_TWO_MEDIUM_7DAYS = {
|
|
25
|
+
rule_id: "R-2M7D",
|
|
26
|
+
description: "7 天内同一 policy_id 出现 2 次中等逃逸 → enforced→advisory",
|
|
27
|
+
severity: "medium",
|
|
28
|
+
};
|
|
29
|
+
const RULE_REPEATED_FALSE_POSITIVE = {
|
|
30
|
+
rule_id: "R-FP",
|
|
31
|
+
description: `连续 ${FALSE_POSITIVE_THRESHOLD}+ 次误伤 → promote_blocked(暂停 hard block,保留 warning)`,
|
|
32
|
+
severity: "medium",
|
|
33
|
+
};
|
|
34
|
+
const RULE_STALE_ENFORCED = {
|
|
35
|
+
rule_id: "R-SE",
|
|
36
|
+
description: "advisory/experimental 下仍有逃逸累积 → disable 直到修复",
|
|
37
|
+
severity: "critical",
|
|
38
|
+
};
|
|
39
|
+
function withinDays(report, days, now) {
|
|
40
|
+
const created = new Date(report.created_at);
|
|
41
|
+
const cutoff = new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
|
|
42
|
+
return created >= cutoff;
|
|
43
|
+
}
|
|
44
|
+
export function decideAction(reports, current_state, policy_id, now = new Date()) {
|
|
45
|
+
const relevant = reports.filter((r) => r.policy_id === policy_id);
|
|
46
|
+
const criticals = relevant.filter((r) => CRITICAL_ESCAPE_TYPES.has(r.failure_type) && r.capability_action !== "keep");
|
|
47
|
+
const mediumsRecent = relevant.filter((r) => MEDIUM_ESCAPE_TYPES.has(r.failure_type) &&
|
|
48
|
+
r.capability_action !== "keep" &&
|
|
49
|
+
withinDays(r, 7, now));
|
|
50
|
+
const falsePositives = relevant.filter((r) => r.failure_type === FALSE_POSITIVE_TYPE);
|
|
51
|
+
const triggered = [];
|
|
52
|
+
// Rule R-CE: 1 critical escape → downgrade enforced to advisory
|
|
53
|
+
if (criticals.length >= 1) {
|
|
54
|
+
triggered.push(RULE_CRITICAL_ESCAPE);
|
|
55
|
+
}
|
|
56
|
+
// Rule R-2M7D: 2 medium escapes in 7 days → downgrade enforced to advisory
|
|
57
|
+
if (mediumsRecent.length >= 2) {
|
|
58
|
+
triggered.push(RULE_TWO_MEDIUM_7DAYS);
|
|
59
|
+
}
|
|
60
|
+
// Rule R-FP: repeated false positives → promote_blocked
|
|
61
|
+
if (falsePositives.length >= FALSE_POSITIVE_THRESHOLD) {
|
|
62
|
+
triggered.push(RULE_REPEATED_FALSE_POSITIVE);
|
|
63
|
+
}
|
|
64
|
+
// Determine action based on triggered rules and current state
|
|
65
|
+
if (triggered.length === 0) {
|
|
66
|
+
return {
|
|
67
|
+
policy_id,
|
|
68
|
+
current_state,
|
|
69
|
+
recommended_action: "keep",
|
|
70
|
+
target_state: current_state,
|
|
71
|
+
reason: `No actionable escapes for ${policy_id}. Capability remains ${current_state}.`,
|
|
72
|
+
evidence_ids: [],
|
|
73
|
+
triggered_rules: [],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const evidenceIds = [
|
|
77
|
+
...criticals.map((r) => r.escape_id),
|
|
78
|
+
...mediumsRecent.map((r) => r.escape_id),
|
|
79
|
+
...falsePositives.map((r) => r.escape_id),
|
|
80
|
+
];
|
|
81
|
+
// R-FP promotes to blocked regardless of current state
|
|
82
|
+
const hasFP = triggered.some((r) => r.rule_id === "R-FP");
|
|
83
|
+
if (current_state === "enforced") {
|
|
84
|
+
// Critical or 2+ medium → downgrade to advisory
|
|
85
|
+
if (triggered.some((r) => r.rule_id === "R-CE" || r.rule_id === "R-2M7D")) {
|
|
86
|
+
return {
|
|
87
|
+
policy_id,
|
|
88
|
+
current_state,
|
|
89
|
+
recommended_action: "downgrade",
|
|
90
|
+
target_state: "advisory",
|
|
91
|
+
reason: `Enforced capability ${policy_id} triggered ${triggered.map((r) => r.rule_id).join(", ")}. Recommended downgrade to advisory.`,
|
|
92
|
+
evidence_ids: evidenceIds,
|
|
93
|
+
triggered_rules: triggered,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Only false positives → promote_blocked
|
|
97
|
+
if (hasFP) {
|
|
98
|
+
return {
|
|
99
|
+
policy_id,
|
|
100
|
+
current_state,
|
|
101
|
+
recommended_action: "promote_blocked",
|
|
102
|
+
target_state: "enforced",
|
|
103
|
+
reason: `Enforced capability ${policy_id} has ${falsePositives.length} false positive(s). Hard block suspended, warning preserved.`,
|
|
104
|
+
evidence_ids: evidenceIds,
|
|
105
|
+
triggered_rules: triggered,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (current_state === "advisory" || current_state === "experimental") {
|
|
110
|
+
// Already lowered + still accumulating escapes → disable
|
|
111
|
+
if (triggered.some((r) => r.rule_id === "R-CE" || r.rule_id === "R-2M7D")) {
|
|
112
|
+
triggered.push(RULE_STALE_ENFORCED);
|
|
113
|
+
return {
|
|
114
|
+
policy_id,
|
|
115
|
+
current_state,
|
|
116
|
+
recommended_action: "disable",
|
|
117
|
+
target_state: "removed",
|
|
118
|
+
reason: `${current_state} capability ${policy_id} continues to accumulate escapes. Recommended disable until fix.`,
|
|
119
|
+
evidence_ids: evidenceIds,
|
|
120
|
+
triggered_rules: triggered,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Only false positives at advisory/experimental → still promote_blocked
|
|
124
|
+
if (hasFP) {
|
|
125
|
+
return {
|
|
126
|
+
policy_id,
|
|
127
|
+
current_state,
|
|
128
|
+
recommended_action: "promote_blocked",
|
|
129
|
+
target_state: current_state,
|
|
130
|
+
reason: `${current_state} capability ${policy_id} has ${falsePositives.length} false positive(s). Promotion to enforced blocked.`,
|
|
131
|
+
evidence_ids: evidenceIds,
|
|
132
|
+
triggered_rules: triggered,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// removed state or unhandled: keep
|
|
137
|
+
return {
|
|
138
|
+
policy_id,
|
|
139
|
+
current_state,
|
|
140
|
+
recommended_action: "keep",
|
|
141
|
+
target_state: current_state,
|
|
142
|
+
reason: `No state change recommended for ${policy_id} (current: ${current_state}).`,
|
|
143
|
+
evidence_ids: evidenceIds,
|
|
144
|
+
triggered_rules: triggered,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=capability_action_advisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability_action_advisor.js","sourceRoot":"","sources":["../../src/engine/capability_action_advisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 能力状态登记表 — 声明每个治理能力的当前等级,防止文档和实现过度承诺。
|
|
3
3
|
*
|
|
4
|
-
* P1-
|
|
4
|
+
* P1-4 范围: 状态登记 + policy_id + 交叉引用 + 晋级/降级条件与证据要求(只读)。
|
|
5
|
+
* 不做自动晋级/降级,不接抽检池,不改状态。
|
|
5
6
|
*
|
|
6
7
|
* 状态等级:
|
|
7
8
|
* - enforced: 强制执行,违规即 hard fail,阻断流程
|
|
@@ -16,6 +17,15 @@ export interface CapabilityEntry {
|
|
|
16
17
|
state: CapabilityState;
|
|
17
18
|
owner_module: string;
|
|
18
19
|
evidence: string;
|
|
20
|
+
policy_id: string;
|
|
21
|
+
code_files: string[];
|
|
22
|
+
test_files: string[];
|
|
23
|
+
lifecycle_test_files: string[];
|
|
24
|
+
knowledge_docs: string[];
|
|
25
|
+
prompt_files: string[];
|
|
26
|
+
promotion_conditions: string[];
|
|
27
|
+
demotion_conditions: string[];
|
|
28
|
+
evidence_requirements: string[];
|
|
19
29
|
promoted_at?: string;
|
|
20
30
|
demoted_at?: string;
|
|
21
31
|
reason: string;
|
|
@@ -33,4 +43,16 @@ export declare function getCapability(id: string): CapabilityEntry | undefined;
|
|
|
33
43
|
export declare function getCapsByState(state: CapabilityState): CapabilityEntry[];
|
|
34
44
|
export declare function canHardFail(id: string): boolean;
|
|
35
45
|
export declare function getSummary(): CapabilitySummary;
|
|
46
|
+
export interface PolicyRef {
|
|
47
|
+
policy_id: string;
|
|
48
|
+
capability_id: string;
|
|
49
|
+
state: CapabilityState;
|
|
50
|
+
code_files: string[];
|
|
51
|
+
test_files: string[];
|
|
52
|
+
lifecycle_test_files: string[];
|
|
53
|
+
knowledge_docs: string[];
|
|
54
|
+
prompt_files: string[];
|
|
55
|
+
}
|
|
56
|
+
export declare function getAllPolicyRefs(): PolicyRef[];
|
|
57
|
+
export declare function getDriftPolicyRefs(): PolicyRef[];
|
|
36
58
|
//# sourceMappingURL=capability_registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability_registry.d.ts","sourceRoot":"","sources":["../../src/engine/capability_registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capability_registry.d.ts","sourceRoot":"","sources":["../../src/engine/capability_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA6iBD,wBAAgB,kBAAkB,IAAI,eAAe,EAAE,CAEtD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGrE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,EAAE,CAExE;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED,wBAAgB,UAAU,IAAI,iBAAiB,CAc9C;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAW9C;AAUD,wBAAgB,kBAAkB,IAAI,SAAS,EAAE,CAahD"}
|