@dommaker/harness 1.8.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +10 -13
- package/dist/cli/commands/check.d.ts +3 -3
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +41 -78
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/constraints-report.d.ts +2 -10
- package/dist/cli/commands/constraints-report.d.ts.map +1 -1
- package/dist/cli/commands/constraints-report.js +4 -57
- package/dist/cli/commands/constraints-report.js.map +1 -1
- package/dist/cli/commands/constraints-retire.d.ts +9 -23
- package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
- package/dist/cli/commands/constraints-retire.js +39 -121
- package/dist/cli/commands/constraints-retire.js.map +1 -1
- package/dist/cli/commands/constraints.d.ts +3 -8
- package/dist/cli/commands/constraints.d.ts.map +1 -1
- package/dist/cli/commands/constraints.js +8 -23
- package/dist/cli/commands/constraints.js.map +1 -1
- package/dist/cli/commands/definitions.js +2 -2
- package/dist/cli/commands/init.d.ts +0 -32
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -149
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +14 -17
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/scaffold-templates.d.ts +0 -2
- package/dist/cli/commands/scaffold-templates.d.ts.map +1 -1
- package/dist/cli/commands/scaffold-templates.js +2 -37
- package/dist/cli/commands/scaffold-templates.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +0 -2
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +0 -10
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/commands/status.js +10 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts +0 -2
- package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/agents-syncer.js +4 -23
- package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts +22 -0
- package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/capabilities-syncer.js +113 -8
- package/dist/cli/commands/sync-docs/capabilities-syncer.js.map +1 -1
- package/dist/cli/commands/sync-docs/index.d.ts.map +1 -1
- package/dist/cli/commands/sync-docs/index.js +36 -4
- package/dist/cli/commands/sync-docs/index.js.map +1 -1
- package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
- package/dist/core/constraints/capabilities-parser.js +16 -4
- package/dist/core/constraints/capabilities-parser.js.map +1 -1
- package/dist/core/constraints/checker.d.ts +15 -24
- package/dist/core/constraints/checker.d.ts.map +1 -1
- package/dist/core/constraints/checker.js +33 -72
- package/dist/core/constraints/checker.js.map +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js +1 -1
- package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts +2 -1
- package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
- package/dist/core/constraints/checkers/governance-presence.js +4 -3
- package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
- package/dist/core/constraints/checkers/index.d.ts +1 -1
- package/dist/core/constraints/checkers/index.d.ts.map +1 -1
- package/dist/core/constraints/checkers/index.js +4 -8
- package/dist/core/constraints/checkers/index.js.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.d.ts +3 -4
- package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
- package/dist/core/constraints/checkers/iron-flags.js +4 -5
- package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js +1 -1
- package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
- package/dist/core/constraints/checkers/types.d.ts +1 -1
- package/dist/core/constraints/checkers/types.js +1 -1
- package/dist/core/constraints/definitions/guidelines.d.ts +4 -4
- package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
- package/dist/core/constraints/definitions/guidelines.js +9 -25
- package/dist/core/constraints/definitions/guidelines.js.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.d.ts +4 -4
- package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
- package/dist/core/constraints/definitions/iron-laws.js +10 -81
- package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
- package/dist/core/constraints/definitions.d.ts +7 -9
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +13 -16
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/core/constraints/index.d.ts +2 -5
- package/dist/core/constraints/index.d.ts.map +1 -1
- package/dist/core/constraints/index.js +3 -13
- package/dist/core/constraints/index.js.map +1 -1
- package/dist/core/constraints/injection-writer.d.ts +10 -38
- package/dist/core/constraints/injection-writer.d.ts.map +1 -1
- package/dist/core/constraints/injection-writer.js +17 -54
- package/dist/core/constraints/injection-writer.js.map +1 -1
- package/dist/core/constraints/run-env.d.ts +1 -10
- package/dist/core/constraints/run-env.d.ts.map +1 -1
- package/dist/core/constraints/run-env.js +1 -22
- package/dist/core/constraints/run-env.js.map +1 -1
- package/dist/core/constraints/usage-report.d.ts +5 -7
- package/dist/core/constraints/usage-report.d.ts.map +1 -1
- package/dist/core/constraints/usage-report.js +5 -10
- package/dist/core/constraints/usage-report.js.map +1 -1
- package/dist/core/effective-constraints.d.ts +12 -22
- package/dist/core/effective-constraints.d.ts.map +1 -1
- package/dist/core/effective-constraints.js +13 -30
- package/dist/core/effective-constraints.js.map +1 -1
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -9
- package/dist/core/index.js.map +1 -1
- package/dist/core/project-config-loader.d.ts +4 -42
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +16 -125
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/core/validators/passes-gate.d.ts +2 -2
- package/dist/core/validators/passes-gate.js +6 -6
- package/dist/core/validators/passes-gate.js.map +1 -1
- package/dist/hooks/bootstrap.d.ts +9 -12
- package/dist/hooks/bootstrap.d.ts.map +1 -1
- package/dist/hooks/bootstrap.js +9 -31
- package/dist/hooks/bootstrap.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -7
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +4 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +9 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -23
- package/dist/index.js.map +1 -1
- package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
- package/dist/monitoring/trace-analyzer.js +11 -12
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.d.ts +4 -4
- package/dist/monitoring/traces.d.ts.map +1 -1
- package/dist/monitoring/traces.js +8 -8
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/presets/standard.d.ts +8 -10
- package/dist/presets/standard.d.ts.map +1 -1
- package/dist/presets/standard.js +10 -16
- package/dist/presets/standard.js.map +1 -1
- package/dist/types/constraint.d.ts +24 -35
- package/dist/types/constraint.d.ts.map +1 -1
- package/dist/types/constraint.js +8 -7
- package/dist/types/constraint.js.map +1 -1
- package/dist/types/passes-gate.d.ts +5 -5
- package/dist/types/passes-gate.d.ts.map +1 -1
- package/dist/types/project-config.d.ts +8 -66
- package/dist/types/project-config.d.ts.map +1 -1
- package/dist/types/project-config.js +3 -2
- package/dist/types/project-config.js.map +1 -1
- package/dist/types/trace.d.ts +8 -10
- package/dist/types/trace.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/CONTEXT.md +3 -3
- package/src/__tests__/checker-extra.test.ts +37 -61
- package/src/__tests__/checker.test.ts +10 -115
- package/src/__tests__/effective-constraints.test.ts +18 -83
- package/src/__tests__/iron-laws.test.ts +71 -90
- package/src/__tests__/passes-gate-check.test.ts +2 -2
- package/src/__tests__/project-config-loader-extra.test.ts +22 -123
- package/src/__tests__/project-config-loader.test.ts +5 -33
- package/src/__tests__/public-exports.test.ts +31 -11
- package/src/__tests__/public-type-surface.test.ts +2 -13
- package/src/__tests__/public-value-surface.test.ts +1 -7
- package/src/__tests__/skip-semantics.test.ts +21 -37
- package/src/__tests__/trace-analyzer-extra.test.ts +14 -14
- package/src/__tests__/trace-analyzer.test.ts +21 -21
- package/src/__tests__/trace-collector.test.ts +22 -22
- package/src/__tests__/traces.test.ts +27 -28
- package/src/cli/commands/CONTEXT.md +12 -9
- package/src/cli/commands/__tests__/check-read-count.test.ts +4 -15
- package/src/cli/commands/__tests__/check-skip-output.test.ts +14 -14
- package/src/cli/commands/__tests__/check.test.ts +14 -31
- package/src/cli/commands/__tests__/constraints-report.test.ts +12 -80
- package/src/cli/commands/__tests__/constraints-retire.test.ts +42 -231
- package/src/cli/commands/__tests__/init-governance-io.test.ts +12 -58
- package/src/cli/commands/__tests__/init-ondisk.test.ts +12 -20
- package/src/cli/commands/__tests__/init.test.ts +0 -11
- package/src/cli/commands/__tests__/project-path-anchoring.test.ts +2 -2
- package/src/cli/commands/__tests__/registry.test.ts +39 -3
- package/src/cli/commands/__tests__/report-extra.test.ts +4 -4
- package/src/cli/commands/__tests__/report.test.ts +1 -1
- package/src/cli/commands/__tests__/scaffold.test.ts +4 -14
- package/src/cli/commands/__tests__/status-analysis-wiring.test.ts +3 -3
- package/src/cli/commands/__tests__/status-extra.test.ts +14 -14
- package/src/cli/commands/__tests__/status.test.ts +12 -12
- package/src/cli/commands/__tests__/sync-docs-agents.test.ts +1 -1
- package/src/cli/commands/__tests__/sync-docs-table-layout.test.ts +259 -0
- package/src/cli/commands/check.ts +43 -82
- package/src/cli/commands/constraints-report.ts +4 -59
- package/src/cli/commands/constraints-retire.ts +49 -154
- package/src/cli/commands/constraints.ts +11 -26
- package/src/cli/commands/definitions.ts +2 -2
- package/src/cli/commands/init.ts +8 -179
- package/src/cli/commands/report.ts +19 -23
- package/src/cli/commands/scaffold-templates.ts +1 -37
- package/src/cli/commands/scaffold.ts +0 -11
- package/src/cli/commands/status.ts +10 -10
- package/src/cli/commands/sync-docs/agents-syncer.ts +4 -25
- package/src/cli/commands/sync-docs/capabilities-syncer.ts +139 -9
- package/src/cli/commands/sync-docs/index.ts +41 -4
- package/src/core/CONTEXT.md +9 -9
- package/src/core/constraints/__tests__/capability-counts.test.ts +5 -5
- package/src/core/constraints/__tests__/collect-constraints.test.ts +13 -8
- package/src/core/constraints/__tests__/git-evidence.test.ts +4 -7
- package/src/core/constraints/__tests__/injection-writer.test.ts +8 -61
- package/src/core/constraints/__tests__/run-env.test.ts +5 -34
- package/src/core/constraints/__tests__/trace-injection.test.ts +1 -1
- package/src/core/constraints/capabilities-parser.ts +17 -5
- package/src/core/constraints/checker.ts +39 -88
- package/src/core/constraints/checkers/__tests__/check-outcome.test.ts +5 -8
- package/src/core/constraints/checkers/__tests__/governance-presence.test.ts +1 -53
- package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +5 -25
- package/src/core/constraints/checkers/docs-freshness.ts +1 -1
- package/src/core/constraints/checkers/governance-presence.ts +4 -3
- package/src/core/constraints/checkers/index.ts +4 -10
- package/src/core/constraints/checkers/iron-flags.ts +3 -12
- package/src/core/constraints/checkers/no-test-simplification.ts +1 -1
- package/src/core/constraints/checkers/types.ts +1 -1
- package/src/core/constraints/definitions/guidelines.ts +8 -25
- package/src/core/constraints/definitions/iron-laws.ts +9 -82
- package/src/core/constraints/definitions.ts +14 -15
- package/src/core/constraints/index.ts +4 -19
- package/src/core/constraints/injection-writer.ts +16 -61
- package/src/core/constraints/run-env.ts +1 -33
- package/src/core/constraints/usage-report.ts +8 -15
- package/src/core/effective-constraints.ts +14 -45
- package/src/core/index.ts +3 -10
- package/src/core/project-config-loader.ts +20 -145
- package/src/core/validators/passes-gate.ts +6 -6
- package/src/failure/CONTEXT.md +1 -1
- package/src/hooks/CONTEXT.md +12 -22
- package/src/hooks/__tests__/bootstrap.test.ts +24 -75
- package/src/hooks/bootstrap.ts +9 -48
- package/src/hooks/index.ts +5 -20
- package/src/index.ts +9 -31
- package/src/monitoring/__tests__/trace-file-anchoring.test.ts +1 -1
- package/src/monitoring/__tests__/traces.test.ts +22 -22
- package/src/monitoring/trace-analyzer.ts +12 -13
- package/src/monitoring/traces.ts +8 -8
- package/src/presets/__tests__/standard.test.ts +12 -16
- package/src/presets/standard.ts +14 -23
- package/src/types/__tests__/types.test.ts +3 -3
- package/src/types/constraint.ts +26 -40
- package/src/types/passes-gate.ts +5 -5
- package/src/types/project-config.ts +8 -77
- package/src/types/trace.ts +8 -11
- package/dist/core/constraints/agent-prompt-renderer.d.ts +0 -32
- package/dist/core/constraints/agent-prompt-renderer.d.ts.map +0 -1
- package/dist/core/constraints/agent-prompt-renderer.js +0 -55
- package/dist/core/constraints/agent-prompt-renderer.js.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts +0 -6
- package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts.map +0 -1
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js +0 -40
- package/dist/core/constraints/checkers/no-bypass-checkpoint.js.map +0 -1
- package/dist/core/constraints/definitions/prompts.d.ts +0 -12
- package/dist/core/constraints/definitions/prompts.d.ts.map +0 -1
- package/dist/core/constraints/definitions/prompts.js +0 -400
- package/dist/core/constraints/definitions/prompts.js.map +0 -1
- package/dist/core/constraints/injection-drift.d.ts +0 -61
- package/dist/core/constraints/injection-drift.d.ts.map +0 -1
- package/dist/core/constraints/injection-drift.js +0 -131
- package/dist/core/constraints/injection-drift.js.map +0 -1
- package/dist/core/constraints/injection-renderer.d.ts +0 -23
- package/dist/core/constraints/injection-renderer.d.ts.map +0 -1
- package/dist/core/constraints/injection-renderer.js +0 -44
- package/dist/core/constraints/injection-renderer.js.map +0 -1
- package/dist/hooks/config.d.ts +0 -30
- package/dist/hooks/config.d.ts.map +0 -1
- package/dist/hooks/config.js +0 -34
- package/dist/hooks/config.js.map +0 -1
- package/dist/hooks/pipeline.d.ts +0 -54
- package/dist/hooks/pipeline.d.ts.map +0 -1
- package/dist/hooks/pipeline.js +0 -173
- package/dist/hooks/pipeline.js.map +0 -1
- package/dist/hooks/registry.d.ts +0 -70
- package/dist/hooks/registry.d.ts.map +0 -1
- package/dist/hooks/registry.js +0 -141
- package/dist/hooks/registry.js.map +0 -1
- package/dist/hooks/types.d.ts +0 -113
- package/dist/hooks/types.d.ts.map +0 -1
- package/dist/hooks/types.js +0 -9
- package/dist/hooks/types.js.map +0 -1
- package/src/__tests__/hooks-pipeline.test.ts +0 -201
- package/src/cli/commands/__tests__/check-drift.test.ts +0 -158
- package/src/cli/commands/__tests__/init-injection.test.ts +0 -466
- package/src/core/constraints/__tests__/agent-prompt-renderer.test.ts +0 -129
- package/src/core/constraints/__tests__/injection-drift.test.ts +0 -247
- package/src/core/constraints/agent-prompt-renderer.ts +0 -67
- package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +0 -76
- package/src/core/constraints/checkers/no-bypass-checkpoint.ts +0 -40
- package/src/core/constraints/definitions/prompts.ts +0 -414
- package/src/core/constraints/injection-drift.ts +0 -142
- package/src/core/constraints/injection-renderer.ts +0 -44
- package/src/hooks/__tests__/config.test.ts +0 -19
- package/src/hooks/__tests__/pipeline.test.ts +0 -195
- package/src/hooks/__tests__/registry.test.ts +0 -115
- package/src/hooks/config.ts +0 -33
- package/src/hooks/pipeline.ts +0 -202
- package/src/hooks/registry.ts +0 -166
- package/src/hooks/types.ts +0 -120
package/src/monitoring/traces.ts
CHANGED
|
@@ -38,8 +38,8 @@ const DEFAULT_CONFIG: TraceCollectorConfig = {
|
|
|
38
38
|
* ```typescript
|
|
39
39
|
* const collector = new TraceCollector({ projectPath: '/path/to/project' });
|
|
40
40
|
* collector.record({
|
|
41
|
-
* constraintId: '
|
|
42
|
-
*
|
|
41
|
+
* constraintId: 'no_completion_without_verification',
|
|
42
|
+
* severity: 'error',
|
|
43
43
|
* timestamp: Date.now(),
|
|
44
44
|
* result: 'fail',
|
|
45
45
|
* });
|
|
@@ -92,12 +92,12 @@ export class TraceCollector {
|
|
|
92
92
|
*/
|
|
93
93
|
recordPass(
|
|
94
94
|
constraintId: string,
|
|
95
|
-
|
|
95
|
+
severity: 'error' | 'warning',
|
|
96
96
|
options?: Partial<ExecutionTrace>
|
|
97
97
|
): void {
|
|
98
98
|
this.record({
|
|
99
99
|
constraintId,
|
|
100
|
-
|
|
100
|
+
severity,
|
|
101
101
|
timestamp: Date.now(),
|
|
102
102
|
result: 'pass',
|
|
103
103
|
...options,
|
|
@@ -109,12 +109,12 @@ export class TraceCollector {
|
|
|
109
109
|
*/
|
|
110
110
|
recordFail(
|
|
111
111
|
constraintId: string,
|
|
112
|
-
|
|
112
|
+
severity: 'error' | 'warning',
|
|
113
113
|
options?: Partial<ExecutionTrace>
|
|
114
114
|
): void {
|
|
115
115
|
this.record({
|
|
116
116
|
constraintId,
|
|
117
|
-
|
|
117
|
+
severity,
|
|
118
118
|
timestamp: Date.now(),
|
|
119
119
|
result: 'fail',
|
|
120
120
|
...options,
|
|
@@ -184,8 +184,8 @@ export class TraceCollector {
|
|
|
184
184
|
return false;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
//
|
|
188
|
-
if (filter.
|
|
187
|
+
// 严重性
|
|
188
|
+
if (filter.severity && trace.severity !== filter.severity) {
|
|
189
189
|
return false;
|
|
190
190
|
}
|
|
191
191
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* presets 纯数据测试
|
|
3
3
|
*
|
|
4
|
-
* 预设只保留数据(ADR-
|
|
4
|
+
* 预设只保留数据(ADR-0029:键按 severity 命名;筛选逻辑统一在 mergeConstraints),
|
|
5
5
|
* 这里锁定数据形状与 strict→standard 别名语义。
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -16,43 +16,39 @@ describe('预设数据', () => {
|
|
|
16
16
|
describe('STRICT_PRESET', () => {
|
|
17
17
|
it('应该启用所有约束', () => {
|
|
18
18
|
expect(STRICT_PRESET.name).toBe('strict');
|
|
19
|
-
expect(STRICT_PRESET.
|
|
20
|
-
expect(STRICT_PRESET.
|
|
21
|
-
expect(STRICT_PRESET.prompts).toBeNull();
|
|
19
|
+
expect(STRICT_PRESET.errors).toBeNull();
|
|
20
|
+
expect(STRICT_PRESET.warnings).toBeNull();
|
|
22
21
|
});
|
|
23
22
|
});
|
|
24
23
|
|
|
25
24
|
describe('STANDARD_PRESET', () => {
|
|
26
25
|
it('应该启用所有约束', () => {
|
|
27
26
|
expect(STANDARD_PRESET.name).toBe('standard');
|
|
28
|
-
expect(STANDARD_PRESET.
|
|
29
|
-
expect(STANDARD_PRESET.
|
|
30
|
-
expect(STANDARD_PRESET.prompts).toBeNull();
|
|
27
|
+
expect(STANDARD_PRESET.errors).toBeNull();
|
|
28
|
+
expect(STANDARD_PRESET.warnings).toBeNull();
|
|
31
29
|
});
|
|
32
30
|
});
|
|
33
31
|
|
|
34
32
|
describe('RELAXED_PRESET', () => {
|
|
35
33
|
it('应该只启用核心约束', () => {
|
|
36
34
|
expect(RELAXED_PRESET.name).toBe('relaxed');
|
|
37
|
-
expect(RELAXED_PRESET.
|
|
38
|
-
expect(RELAXED_PRESET.
|
|
39
|
-
expect(RELAXED_PRESET.prompts).toEqual([]);
|
|
35
|
+
expect(RELAXED_PRESET.errors).toHaveLength(1);
|
|
36
|
+
expect(RELAXED_PRESET.warnings).toHaveLength(1);
|
|
40
37
|
});
|
|
41
38
|
|
|
42
39
|
it('应该包含 no_completion_without_verification', () => {
|
|
43
|
-
expect(RELAXED_PRESET.
|
|
40
|
+
expect(RELAXED_PRESET.errors).toContain('no_completion_without_verification');
|
|
44
41
|
});
|
|
45
42
|
|
|
46
|
-
it('应该包含
|
|
47
|
-
expect(RELAXED_PRESET.
|
|
43
|
+
it('应该包含 no_hardcoded_credentials', () => {
|
|
44
|
+
expect(RELAXED_PRESET.warnings).toContain('no_hardcoded_credentials');
|
|
48
45
|
});
|
|
49
46
|
});
|
|
50
47
|
|
|
51
48
|
describe('PRESETS_BY_NAME', () => {
|
|
52
49
|
it('strict 是 standard 的别名(同为全部启用)', () => {
|
|
53
|
-
expect(PRESETS_BY_NAME['strict']?.
|
|
54
|
-
expect(PRESETS_BY_NAME['strict']?.
|
|
55
|
-
expect(PRESETS_BY_NAME['strict']?.prompts).toBeNull();
|
|
50
|
+
expect(PRESETS_BY_NAME['strict']?.errors).toBeNull();
|
|
51
|
+
expect(PRESETS_BY_NAME['strict']?.warnings).toBeNull();
|
|
56
52
|
});
|
|
57
53
|
|
|
58
54
|
it('三个预设名均可解析', () => {
|
package/src/presets/standard.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* 约束预设(纯数据)
|
|
3
3
|
*
|
|
4
4
|
* 预设定义哪些内置约束被启用。筛选与合并逻辑统一在
|
|
5
|
-
* core/project-config-loader.ts 的 mergeConstraints
|
|
5
|
+
* core/project-config-loader.ts 的 mergeConstraints(生效集链路),
|
|
6
6
|
* 本文件只保留预设数据,不再含函数。
|
|
7
7
|
*
|
|
8
|
-
* ADR-
|
|
8
|
+
* ADR-0029:桶按 severity 命名(errors / warnings),取代三层命名。
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -15,14 +15,11 @@ export interface PresetConfig {
|
|
|
15
15
|
/** 预设名称 */
|
|
16
16
|
name: string;
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/** 启用的 severity='error' 约束 ID 列表(null 表示全部启用) */
|
|
19
|
+
errors: string[] | null;
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/** 启用的提示 ID 列表(null 表示全部启用) */
|
|
25
|
-
prompts: string[] | null;
|
|
21
|
+
/** 启用的 severity='warning' 约束 ID 列表(null 表示全部启用) */
|
|
22
|
+
warnings: string[] | null;
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
/**
|
|
@@ -32,40 +29,34 @@ export interface PresetConfig {
|
|
|
32
29
|
*/
|
|
33
30
|
export const STRICT_PRESET: PresetConfig = {
|
|
34
31
|
name: 'strict',
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
prompts: null, // 全部启用
|
|
32
|
+
errors: null, // 全部启用
|
|
33
|
+
warnings: null, // 全部启用
|
|
38
34
|
};
|
|
39
35
|
|
|
40
36
|
/**
|
|
41
37
|
* 标准预设
|
|
42
38
|
*
|
|
43
|
-
*
|
|
39
|
+
* 全部约束启用
|
|
44
40
|
*/
|
|
45
41
|
export const STANDARD_PRESET: PresetConfig = {
|
|
46
42
|
name: 'standard',
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
prompts: null, // 全部启用
|
|
43
|
+
errors: null, // 全部启用
|
|
44
|
+
warnings: null, // 全部启用
|
|
50
45
|
};
|
|
51
46
|
|
|
52
47
|
/**
|
|
53
48
|
* 宽松预设
|
|
54
49
|
*
|
|
55
|
-
*
|
|
50
|
+
* 仅启用核心 error 级与凭证扫描
|
|
56
51
|
*/
|
|
57
52
|
export const RELAXED_PRESET: PresetConfig = {
|
|
58
53
|
name: 'relaxed',
|
|
59
|
-
|
|
54
|
+
errors: [
|
|
60
55
|
'no_completion_without_verification',
|
|
61
|
-
'incremental_progress',
|
|
62
|
-
'no_implementation_without_requirement',
|
|
63
56
|
],
|
|
64
|
-
|
|
65
|
-
'no_bypass_checkpoint',
|
|
57
|
+
warnings: [
|
|
66
58
|
'no_hardcoded_credentials',
|
|
67
59
|
],
|
|
68
|
-
prompts: [], // 禁用提示
|
|
69
60
|
};
|
|
70
61
|
|
|
71
62
|
/**
|
|
@@ -17,7 +17,7 @@ describe('ConstraintViolationError', () => {
|
|
|
17
17
|
it('应该使用 result.message 作为错误消息', () => {
|
|
18
18
|
const error = new ConstraintViolationError({
|
|
19
19
|
id: 'test',
|
|
20
|
-
|
|
20
|
+
severity: 'error',
|
|
21
21
|
satisfied: false,
|
|
22
22
|
message: '测试违规消息',
|
|
23
23
|
checkedAt: new Date(),
|
|
@@ -31,7 +31,7 @@ describe('ConstraintViolationError', () => {
|
|
|
31
31
|
it('应该在 message 为空时使用默认消息', () => {
|
|
32
32
|
const error = new ConstraintViolationError({
|
|
33
33
|
id: 'test',
|
|
34
|
-
|
|
34
|
+
severity: 'error',
|
|
35
35
|
satisfied: false,
|
|
36
36
|
checkedAt: new Date(),
|
|
37
37
|
});
|
|
@@ -42,7 +42,7 @@ describe('ConstraintViolationError', () => {
|
|
|
42
42
|
it('应该在 message 为空字符串时使用默认消息', () => {
|
|
43
43
|
const error = new ConstraintViolationError({
|
|
44
44
|
id: 'test',
|
|
45
|
-
|
|
45
|
+
severity: 'error',
|
|
46
46
|
satisfied: false,
|
|
47
47
|
message: '',
|
|
48
48
|
checkedAt: new Date(),
|
package/src/types/constraint.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 约束类型定义
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - check:必须带真实 checker,参与运行时检查与 trace 统计
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - prompt
|
|
4
|
+
* severity 显式模型(ADR-0029,取代 ADR-0001 的三层命名与 kind 二元模型):
|
|
5
|
+
* - 全部约束 kind='check':必须带真实 checker,参与运行时检查与 trace 统计
|
|
6
|
+
* - severity 直接写死在定义上:error = 违规即阻断;warning = 违规告警不阻断;
|
|
7
|
+
* info = 仅记录
|
|
8
|
+
* - 纯文本提示层(kind='prompt' / promptInjection / 注入段渲染)已整体关停,
|
|
9
|
+
* 文本规则由消费方手写治理段承接
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -14,16 +15,14 @@
|
|
|
14
15
|
export type ConstraintId = string;
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
|
-
*
|
|
18
|
+
* 约束类别(ADR-0029 收窄为单值):check = 可执行检查
|
|
18
19
|
*/
|
|
19
|
-
export type ConstraintKind = 'check'
|
|
20
|
+
export type ConstraintKind = 'check';
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* check 层只使用 'iron_law' | 'guideline';prompt 类统一为 'prompt'。
|
|
23
|
+
* 约束严重性(显式字段,取代三层 level 命名)
|
|
25
24
|
*/
|
|
26
|
-
export type
|
|
25
|
+
export type ConstraintSeverity = 'error' | 'warning' | 'info';
|
|
27
26
|
|
|
28
27
|
/**
|
|
29
28
|
* 约束触发条件(开放扩展)
|
|
@@ -41,9 +40,8 @@ export interface Constraint {
|
|
|
41
40
|
id: ConstraintId;
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
|
-
* 约束类别(ADR-
|
|
45
|
-
*
|
|
46
|
-
* - prompt:纯文本提示,仅参与注入,不执行 checker
|
|
43
|
+
* 约束类别(ADR-0029):恒为 'check'——必须带真实 checker,参与运行时检查;
|
|
44
|
+
* 纯文本提示(kind='prompt')已随文本注入层一并关停
|
|
47
45
|
*/
|
|
48
46
|
kind: ConstraintKind;
|
|
49
47
|
|
|
@@ -53,8 +51,8 @@ export interface Constraint {
|
|
|
53
51
|
/** 约束消息(中文) */
|
|
54
52
|
message: string;
|
|
55
53
|
|
|
56
|
-
/**
|
|
57
|
-
|
|
54
|
+
/** 约束严重性:error = 违规即阻断;warning = 违规告警不阻断;info = 仅记录 */
|
|
55
|
+
severity: ConstraintSeverity;
|
|
58
56
|
|
|
59
57
|
/** 触发条件(支持多个 trigger) */
|
|
60
58
|
trigger: ConstraintTrigger | ConstraintTrigger[];
|
|
@@ -65,20 +63,8 @@ export interface Constraint {
|
|
|
65
63
|
/** 约束描述 */
|
|
66
64
|
description?: string;
|
|
67
65
|
|
|
68
|
-
/** 软约束 prompt 注入(引导 Agent 行为的提示文本) */
|
|
69
|
-
promptInjection?: string;
|
|
70
|
-
|
|
71
|
-
/** 是否注入 Agent prompt(默认 iron_law=true, guideline=false) */
|
|
72
|
-
injectPrompt?: boolean;
|
|
73
|
-
|
|
74
66
|
/** 是否启用 */
|
|
75
67
|
enabled?: boolean;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* 适用场景标签(prompt 类专用,如 'agent-skill'、'llm-app')。
|
|
79
|
-
* 未标注表示通用场景。消费端(init 注入 / studio 路由)可按标签过滤。
|
|
80
|
-
*/
|
|
81
|
-
appliesTo?: string[];
|
|
82
68
|
}
|
|
83
69
|
|
|
84
70
|
/**
|
|
@@ -88,8 +74,8 @@ export interface ConstraintResult {
|
|
|
88
74
|
/** 约束 ID */
|
|
89
75
|
id: ConstraintId;
|
|
90
76
|
|
|
91
|
-
/**
|
|
92
|
-
|
|
77
|
+
/** 约束严重性 */
|
|
78
|
+
severity: ConstraintSeverity;
|
|
93
79
|
|
|
94
80
|
/** 是否满足 */
|
|
95
81
|
satisfied: boolean;
|
|
@@ -186,10 +172,10 @@ export interface ConstraintContext {
|
|
|
186
172
|
/** 是否已进行复用检查 */
|
|
187
173
|
hasReuseCheck?: boolean;
|
|
188
174
|
|
|
189
|
-
/**
|
|
175
|
+
/** 是否只处理单个任务(证据标志,当前无内置 checker 消费,供自定义约束用) */
|
|
190
176
|
hasSingleTask?: boolean;
|
|
191
177
|
|
|
192
|
-
/**
|
|
178
|
+
/** 是否有需求文档(证据标志,当前无内置 checker 消费,供自定义约束用) */
|
|
193
179
|
hasRequirement?: boolean;
|
|
194
180
|
|
|
195
181
|
/** worktree 路径(用于 worktree 相关检查) */
|
|
@@ -203,8 +189,8 @@ export class ConstraintViolationError extends Error {
|
|
|
203
189
|
public readonly result: ConstraintResult;
|
|
204
190
|
|
|
205
191
|
constructor(result: ConstraintResult) {
|
|
206
|
-
//
|
|
207
|
-
// error.message 是判定证据唯一的外溢面(harness#119)
|
|
192
|
+
// severity='error' 的违规在 checkConstraints 处直接 throw,CLI 的结构化输出块
|
|
193
|
+
// 走不到这里,error.message 是判定证据唯一的外溢面(harness#119)
|
|
208
194
|
const detail = result.evidence?.length
|
|
209
195
|
? `:\n${result.evidence.map((line) => ` - ${line}`).join('\n')}`
|
|
210
196
|
: '';
|
|
@@ -215,16 +201,16 @@ export class ConstraintViolationError extends Error {
|
|
|
215
201
|
}
|
|
216
202
|
|
|
217
203
|
/**
|
|
218
|
-
*
|
|
204
|
+
* 约束检查结果(按 severity 分桶)
|
|
219
205
|
*/
|
|
220
206
|
export interface ConstraintCheckResult {
|
|
221
|
-
/**
|
|
222
|
-
|
|
207
|
+
/** severity='error' 的检查结果(必须全部通过) */
|
|
208
|
+
errors: ConstraintResult[];
|
|
223
209
|
|
|
224
|
-
/**
|
|
225
|
-
|
|
210
|
+
/** severity='warning' 的检查结果(警告,不阻止) */
|
|
211
|
+
warnings: ConstraintResult[];
|
|
226
212
|
|
|
227
|
-
/**
|
|
213
|
+
/** 是否通过(error 级全部通过) */
|
|
228
214
|
passed: boolean;
|
|
229
215
|
|
|
230
216
|
/** 警告数量 */
|
package/src/types/passes-gate.ts
CHANGED
|
@@ -94,17 +94,17 @@ export interface TestResult {
|
|
|
94
94
|
* PassesGate 验证违规
|
|
95
95
|
*/
|
|
96
96
|
export interface PassesGateViolation {
|
|
97
|
-
/**
|
|
97
|
+
/** 约束 ID */
|
|
98
98
|
id: string;
|
|
99
99
|
|
|
100
|
-
/**
|
|
100
|
+
/** 约束规则 */
|
|
101
101
|
rule: string;
|
|
102
102
|
|
|
103
103
|
/** 中文消息 */
|
|
104
104
|
message: string;
|
|
105
105
|
|
|
106
|
-
/**
|
|
107
|
-
|
|
106
|
+
/** 约束严重性(PassesGate 违规恒为阻断级) */
|
|
107
|
+
severity: 'error';
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
/**
|
|
@@ -114,7 +114,7 @@ export interface PassesGateCheckResult {
|
|
|
114
114
|
/** 是否允许标记完成 */
|
|
115
115
|
allowed: boolean;
|
|
116
116
|
|
|
117
|
-
/**
|
|
117
|
+
/** 阻断级违规列表 */
|
|
118
118
|
violations?: PassesGateViolation[];
|
|
119
119
|
|
|
120
120
|
/** 原始测试结果 */
|
|
@@ -1,57 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 项目级约束配置
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 允许项目启用/禁用 harness 内置约束(ADR-0029:项目自定义纯文本约束
|
|
5
|
+
* 已随文本注入层关停一并退役,文本规则由项目手写治理段承接)
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
|
-
import type { Constraint
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* 自定义约束定义
|
|
11
|
-
*/
|
|
12
|
-
export interface CustomConstraintDefinition {
|
|
13
|
-
/** 约束 ID */
|
|
14
|
-
id: string;
|
|
15
|
-
|
|
16
|
-
/** 约束层级(可选,缺省 guideline) */
|
|
17
|
-
level?: ConstraintLevel;
|
|
18
|
-
|
|
19
|
-
/** 约束规则(可选) */
|
|
20
|
-
rule?: string;
|
|
21
|
-
|
|
22
|
-
/** 约束消息(可选) */
|
|
23
|
-
message?: string;
|
|
24
|
-
|
|
25
|
-
/** 触发条件(可选) */
|
|
26
|
-
trigger?: string | string[];
|
|
27
|
-
|
|
28
|
-
/** 描述(可选) */
|
|
29
|
-
description?: string;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Prompt 注入文本(可选)
|
|
33
|
-
*
|
|
34
|
-
* 自定义约束统一 kind='prompt'(无 checker),该字段是进入 CLAUDE.md
|
|
35
|
-
* 注入段(renderConstraintsSection)的唯一通道——缺省不出现在注入段,
|
|
36
|
-
* 与内置无 promptInjection 的 check 条目行为一致。
|
|
37
|
-
*/
|
|
38
|
-
promptInjection?: string;
|
|
39
|
-
|
|
40
|
-
/** 是否启用(可选,默认 true) */
|
|
41
|
-
enabled?: boolean;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* 退役元数据(studio#82 D6 统一落点)
|
|
45
|
-
*
|
|
46
|
-
* 存在即视为已退役:不进生效集、不注入 CLAUDE.md。恢复 = 删除该段。
|
|
47
|
-
* 落点在 custom-constraints.yml 条目内(一处真相,不拆 config.yml 第二处)。
|
|
48
|
-
*/
|
|
49
|
-
retired?: {
|
|
50
|
-
at?: string;
|
|
51
|
-
reason?: string;
|
|
52
|
-
stats?: { total: number; fail: number; failRate: number };
|
|
53
|
-
};
|
|
54
|
-
}
|
|
8
|
+
import type { Constraint } from './constraint';
|
|
55
9
|
|
|
56
10
|
/**
|
|
57
11
|
* 文档同步配置
|
|
@@ -257,26 +211,12 @@ export interface ProjectConfig {
|
|
|
257
211
|
/** CI 接线平台(harness#143,缺省 github) */
|
|
258
212
|
ci?: CiConfig;
|
|
259
213
|
|
|
260
|
-
/**
|
|
261
|
-
* 项目适用场景标签(ADR-0001,如 'agent-skill'、'llm-app')
|
|
262
|
-
*
|
|
263
|
-
* 带 appliesTo 标签的 prompt 仅当 scenes 与其交集非空时进入生效集;
|
|
264
|
-
* 无 appliesTo 的条目不受影响。缺省为空 = 场景专属 prompt 默认不注入。
|
|
265
|
-
*/
|
|
266
|
-
scenes?: string[];
|
|
267
|
-
|
|
268
214
|
/** 治理配置 */
|
|
269
215
|
governance?: GovernanceConfig;
|
|
270
216
|
|
|
271
217
|
/** 内置约束启用/禁用配置 */
|
|
272
218
|
constraints?: Record<string, { enabled?: boolean }>;
|
|
273
219
|
|
|
274
|
-
/** 自定义约束文件路径 */
|
|
275
|
-
custom_constraints_file?: string;
|
|
276
|
-
|
|
277
|
-
/** 自定义约束(直接定义) */
|
|
278
|
-
custom_constraints?: Record<string, CustomConstraintDefinition>;
|
|
279
|
-
|
|
280
220
|
/** Spec 验证配置 */
|
|
281
221
|
spec?: {
|
|
282
222
|
/** 是否启用 Spec 验证 */
|
|
@@ -291,26 +231,17 @@ export interface ProjectConfig {
|
|
|
291
231
|
}
|
|
292
232
|
|
|
293
233
|
/**
|
|
294
|
-
* 完整的约束配置(合并内置 +
|
|
234
|
+
* 完整的约束配置(合并内置 + preset 裁剪 + config.yml 禁用)
|
|
295
235
|
*/
|
|
296
236
|
export interface MergedConstraintsConfig {
|
|
297
|
-
/**
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
/** Guidelines(合并后) */
|
|
301
|
-
guidelines: Record<string, Constraint>;
|
|
302
|
-
|
|
303
|
-
/** Prompts(合并后,ADR-0001 新增;可选以兼容旧调用方,缺省回落内置 PROMPTS) */
|
|
304
|
-
prompts?: Record<string, Constraint>;
|
|
237
|
+
/** 生效的约束(合并后,单桶;severity 在条目上) */
|
|
238
|
+
constraints: Record<string, Constraint>;
|
|
305
239
|
|
|
306
240
|
/** 禁用的约束 ID */
|
|
307
241
|
disabled: string[];
|
|
308
242
|
|
|
309
|
-
/** 自定义约束 ID */
|
|
310
|
-
custom: string[];
|
|
311
|
-
|
|
312
243
|
/**
|
|
313
|
-
* config.yml `constraints.<id>`
|
|
244
|
+
* config.yml `constraints.<id>` 中非内置的未知 id
|
|
314
245
|
*
|
|
315
246
|
* 例如禁用了已被本版移除的约束 id 的残留配置。生效集计算静默忽略,
|
|
316
247
|
* 在此列出供诊断(lintEffectiveConfig / report)使用。
|
package/src/types/trace.ts
CHANGED
|
@@ -31,8 +31,8 @@ export interface ExecutionTrace {
|
|
|
31
31
|
/** 约束 ID */
|
|
32
32
|
constraintId: string;
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
|
|
34
|
+
/** 约束严重性(ADR-0029:显式 severity 取代三层 level 命名) */
|
|
35
|
+
severity: 'error' | 'warning' | 'info';
|
|
36
36
|
|
|
37
37
|
/** 检查时间(Unix timestamp) */
|
|
38
38
|
timestamp: number;
|
|
@@ -47,9 +47,6 @@ export interface ExecutionTrace {
|
|
|
47
47
|
/** 操作类型(触发条件) */
|
|
48
48
|
operation?: string;
|
|
49
49
|
|
|
50
|
-
/** 严重性(从约束定义继承) */
|
|
51
|
-
severity?: 'error' | 'warning' | 'info';
|
|
52
|
-
|
|
53
50
|
/** 项目路径(用于区分多项目) */
|
|
54
51
|
projectPath?: string;
|
|
55
52
|
|
|
@@ -84,8 +81,8 @@ export interface TraceSummary {
|
|
|
84
81
|
/** 约束 ID */
|
|
85
82
|
constraintId: string;
|
|
86
83
|
|
|
87
|
-
/**
|
|
88
|
-
|
|
84
|
+
/** 约束严重性 */
|
|
85
|
+
severity: 'error' | 'warning' | 'info';
|
|
89
86
|
|
|
90
87
|
/** 统计时间范围 */
|
|
91
88
|
timeRange: {
|
|
@@ -148,8 +145,8 @@ export interface TraceAnomaly {
|
|
|
148
145
|
/** 约束 ID */
|
|
149
146
|
constraintId: string;
|
|
150
147
|
|
|
151
|
-
/**
|
|
152
|
-
|
|
148
|
+
/** 约束严重性 */
|
|
149
|
+
severity: 'error' | 'warning' | 'info';
|
|
153
150
|
|
|
154
151
|
/** 异常描述 */
|
|
155
152
|
message: string;
|
|
@@ -175,8 +172,8 @@ export interface TraceFilter {
|
|
|
175
172
|
/** 约束 ID(可选,不指定则查全部) */
|
|
176
173
|
constraintId?: string;
|
|
177
174
|
|
|
178
|
-
/**
|
|
179
|
-
|
|
175
|
+
/** 约束严重性(可选) */
|
|
176
|
+
severity?: 'error' | 'warning' | 'info';
|
|
180
177
|
|
|
181
178
|
/** 结果类型(可选) */
|
|
182
179
|
result?: 'pass' | 'fail' | 'skip';
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent prompt 约束段渲染(H6/G6:trigger 参数化分组渲染 API)
|
|
3
|
-
*
|
|
4
|
-
* 收编 studio prompt-injection.ts 的渲染层:role→trigger 路由留在 studio,
|
|
5
|
-
* 本模块只做 trigger 参数化 + 生效集过滤 + 层级分组渲染。
|
|
6
|
-
*
|
|
7
|
-
* 数据源 = getEffectiveConstraints(内置 → preset → config.yml 禁用 →
|
|
8
|
-
* custom 追加 → scenes 过滤),与 init 注入、harness check 同一来源。
|
|
9
|
-
*
|
|
10
|
-
* 输出按层级分组:铁律 → 指导原则 → 行为提示;无 promptInjection 的约束
|
|
11
|
-
* (如 docs_freshness)不渲染。
|
|
12
|
-
*/
|
|
13
|
-
import type { ConstraintTrigger } from '../../types/constraint';
|
|
14
|
-
/**
|
|
15
|
-
* renderConstraintsByTrigger 选项
|
|
16
|
-
*/
|
|
17
|
-
export interface RenderConstraintsByTriggerOptions {
|
|
18
|
-
/** 项目根路径(决定 config.yml 生效集),缺省 process.cwd() */
|
|
19
|
-
projectRoot?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 按触发条件渲染约束分组文本(注入 Agent system prompt 用)
|
|
23
|
-
*
|
|
24
|
-
* 过滤:生效集内 trigger 与入参存在交集的约束;无 promptInjection 的不渲染。
|
|
25
|
-
* 分组:按层级 iron_law → guideline → prompt 顺序渲染为标题 + 条目列表;
|
|
26
|
-
* 无适用约束时返回空字符串。
|
|
27
|
-
*
|
|
28
|
-
* @param triggers 触发条件(单个或多个;空数组返回空字符串)
|
|
29
|
-
* @param options.projectRoot 项目根路径(决定 config.yml 生效集)
|
|
30
|
-
*/
|
|
31
|
-
export declare function renderConstraintsByTrigger(triggers: ConstraintTrigger | ConstraintTrigger[], options?: RenderConstraintsByTriggerOptions): string;
|
|
32
|
-
//# sourceMappingURL=agent-prompt-renderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt-renderer.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIjF;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EACjD,OAAO,CAAC,EAAE,iCAAiC,GAC1C,MAAM,CAqBR"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Agent prompt 约束段渲染(H6/G6:trigger 参数化分组渲染 API)
|
|
4
|
-
*
|
|
5
|
-
* 收编 studio prompt-injection.ts 的渲染层:role→trigger 路由留在 studio,
|
|
6
|
-
* 本模块只做 trigger 参数化 + 生效集过滤 + 层级分组渲染。
|
|
7
|
-
*
|
|
8
|
-
* 数据源 = getEffectiveConstraints(内置 → preset → config.yml 禁用 →
|
|
9
|
-
* custom 追加 → scenes 过滤),与 init 注入、harness check 同一来源。
|
|
10
|
-
*
|
|
11
|
-
* 输出按层级分组:铁律 → 指导原则 → 行为提示;无 promptInjection 的约束
|
|
12
|
-
* (如 docs_freshness)不渲染。
|
|
13
|
-
*/
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.renderConstraintsByTrigger = renderConstraintsByTrigger;
|
|
16
|
-
const triggers_1 = require("./triggers");
|
|
17
|
-
const effective_constraints_1 = require("../effective-constraints");
|
|
18
|
-
/** 层级分组定义(渲染顺序即声明顺序) */
|
|
19
|
-
const LEVEL_GROUPS = [
|
|
20
|
-
{ level: 'iron_law', heading: '### 铁律(绝对禁止,无例外)' },
|
|
21
|
-
{ level: 'guideline', heading: '### 指导原则(优先建议)' },
|
|
22
|
-
{ level: 'prompt', heading: '### 行为提示' },
|
|
23
|
-
];
|
|
24
|
-
/**
|
|
25
|
-
* 按触发条件渲染约束分组文本(注入 Agent system prompt 用)
|
|
26
|
-
*
|
|
27
|
-
* 过滤:生效集内 trigger 与入参存在交集的约束;无 promptInjection 的不渲染。
|
|
28
|
-
* 分组:按层级 iron_law → guideline → prompt 顺序渲染为标题 + 条目列表;
|
|
29
|
-
* 无适用约束时返回空字符串。
|
|
30
|
-
*
|
|
31
|
-
* @param triggers 触发条件(单个或多个;空数组返回空字符串)
|
|
32
|
-
* @param options.projectRoot 项目根路径(决定 config.yml 生效集)
|
|
33
|
-
*/
|
|
34
|
-
function renderConstraintsByTrigger(triggers, options) {
|
|
35
|
-
const requested = Array.isArray(triggers) ? triggers : [triggers];
|
|
36
|
-
if (requested.length === 0)
|
|
37
|
-
return '';
|
|
38
|
-
const constraints = (0, effective_constraints_1.getEffectiveConstraints)(options?.projectRoot);
|
|
39
|
-
const applicable = constraints.filter(c => c.promptInjection && (0, triggers_1.matchesTrigger)(c, requested));
|
|
40
|
-
if (applicable.length === 0)
|
|
41
|
-
return '';
|
|
42
|
-
const lines = ['\n## 行为约束(前置声明)\n'];
|
|
43
|
-
for (const group of LEVEL_GROUPS) {
|
|
44
|
-
const items = applicable.filter(c => c.level === group.level);
|
|
45
|
-
if (items.length === 0)
|
|
46
|
-
continue;
|
|
47
|
-
lines.push(`${group.heading}\n`);
|
|
48
|
-
for (const c of items) {
|
|
49
|
-
lines.push(`- **${c.id}**: ${c.promptInjection}`);
|
|
50
|
-
}
|
|
51
|
-
lines.push('');
|
|
52
|
-
}
|
|
53
|
-
return lines.join('\n');
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=agent-prompt-renderer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-prompt-renderer.js","sourceRoot":"","sources":["../../../src/core/constraints/agent-prompt-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA+BH,gEAwBC;AApDD,yCAA4C;AAC5C,oEAAmE;AAUnE,wBAAwB;AACxB,MAAM,YAAY,GAA+D;IAC/E,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAClD,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACjD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;CACzC,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,0BAA0B,CACxC,QAAiD,EACjD,OAA2C;IAE3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,WAAW,GAAG,IAAA,+CAAuB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,IAAA,yBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,CACvD,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|