@principles/core 1.96.0 → 1.98.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/dist/runtime-v2/__tests__/architecture-regression.test.js +12 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-signal-observability.test.js +23 -1
- package/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.js +1 -0
- package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/dist/runtime-v2/evidence-sanitizer.d.ts +57 -0
- package/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-sanitizer.js +213 -0
- package/dist/runtime-v2/evidence-sanitizer.js.map +1 -0
- package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
- package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
- package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
- package/dist/runtime-v2/evidence-triage/index.d.ts +12 -0
- package/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-triage/index.js +11 -0
- package/dist/runtime-v2/evidence-triage/index.js.map +1 -0
- package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
- package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
- package/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
- package/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
- package/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
- package/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
- package/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
- package/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
- package/dist/runtime-v2/evidence-triage/types.js +38 -0
- package/dist/runtime-v2/evidence-triage/types.js.map +1 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +3 -0
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +2 -0
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-observability.js +24 -11
- package/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/package.json +1 -1
|
@@ -57,7 +57,9 @@ describe('recordPainSignalObservability', () => {
|
|
|
57
57
|
type: 'pain_detected',
|
|
58
58
|
data: {
|
|
59
59
|
painId: 'manual_test_001',
|
|
60
|
-
|
|
60
|
+
source: 'manual',
|
|
61
|
+
score: 95,
|
|
62
|
+
evidenceCount: 0,
|
|
61
63
|
},
|
|
62
64
|
});
|
|
63
65
|
const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
|
|
@@ -147,5 +149,25 @@ describe('recordPainSignalObservability', () => {
|
|
|
147
149
|
dbRead.close();
|
|
148
150
|
}
|
|
149
151
|
});
|
|
152
|
+
it('redacts token-like patterns in evolution stream reason', () => {
|
|
153
|
+
const { workspaceDir, stateDir } = makeWorkspace();
|
|
154
|
+
const result = recordPainSignalObservability({
|
|
155
|
+
workspaceDir,
|
|
156
|
+
stateDir,
|
|
157
|
+
data: {
|
|
158
|
+
painId: 'token_test_001',
|
|
159
|
+
painType: 'tool_failure',
|
|
160
|
+
source: 'tool_failure',
|
|
161
|
+
reason: 'Tool write failed with token sk-proj-abcdefghijklmnopqrstuvwxyz0123456789 in path',
|
|
162
|
+
score: 60,
|
|
163
|
+
sessionId: 's1',
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
expect(result.warnings).toEqual([]);
|
|
167
|
+
const evolutionLine = readFileSync(String(result.evolutionStreamPath), 'utf8').trim();
|
|
168
|
+
const parsed = JSON.parse(evolutionLine);
|
|
169
|
+
expect(parsed.data.reason).toContain('___REDACTED___');
|
|
170
|
+
expect(parsed.data.reason).not.toContain('sk-proj-abcdefghijklmnopqrstuvwxyz0123456789');
|
|
171
|
+
});
|
|
150
172
|
});
|
|
151
173
|
//# sourceMappingURL=pain-signal-observability.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal-observability.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-observability.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pain-signal-observability.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-observability.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pd-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAG3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"pd-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAG3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAmBlE,CAAC;AAIF,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,sBAGrC,CAAC;AAiBF,wBAAgB,wBAAwB,IAAI,oBAAoB,CAY/D;AAID,eAAO,MAAM,UAAU,EAAE,QAExB,CAAC;AAIF,wBAAgB,kBAAkB,IAAI,QAAQ,CAU7C"}
|
|
@@ -17,6 +17,7 @@ export const DEFAULT_FEATURE_FLAGS = {
|
|
|
17
17
|
gfi: { category: 'quiet', enabled: false },
|
|
18
18
|
evolution_worker: { category: 'quiet', enabled: false },
|
|
19
19
|
empathy_observer: { category: 'quiet', enabled: false },
|
|
20
|
+
painEvidenceAdmission: { category: 'quiet', enabled: false },
|
|
20
21
|
// MVP-Gone (ADR-0014 §2.6)
|
|
21
22
|
nocturnal: { category: 'gone', enabled: false },
|
|
22
23
|
idle_trigger: { category: 'gone', enabled: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pd-config-defaults.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAQL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAqC;IACrE,2BAA2B;IAC3B,MAAM,EAAc,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,cAAc,EAAM,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,aAAa,EAAO,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,mBAAmB,EAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAEzD,4BAA4B;IAC5B,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IACxD,GAAG,EAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IACzD,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IACzD,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"pd-config-defaults.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared evidence sanitizer for durable pain signal storage.
|
|
3
|
+
*
|
|
4
|
+
* Used by:
|
|
5
|
+
* - pain-signal-observability.ts (core package)
|
|
6
|
+
* - message-sanitize.ts (openclaw-plugin package)
|
|
7
|
+
*
|
|
8
|
+
* Design contract (EP-08 Security Boundary Placement):
|
|
9
|
+
* - Sanitization happens at the PERSISTENCE boundary, not at evaluation boundary
|
|
10
|
+
* - Enforcement input (raw params, error text) stays available for gate/score computation
|
|
11
|
+
* - All strings are token-redacted and bounded before durable storage
|
|
12
|
+
* - Unknown-first: never throws on malformed input; returns {} or bounded preview
|
|
13
|
+
* - Recursive with depth/key/array limits to prevent infinite traversal
|
|
14
|
+
*
|
|
15
|
+
* ERR checklist:
|
|
16
|
+
* - ERR-001: no `as` casts — input is `unknown`, narrowed with typeof guards
|
|
17
|
+
* - ERR-055: ANY-segment sensitive field matching, not ALL-segment
|
|
18
|
+
* - ERR-056: token redaction runs on ALL strings, not just truncation
|
|
19
|
+
* - ERR-051: redaction is at persistence output path, not evaluation input path
|
|
20
|
+
* - EP-08: platform-agnostic path basename — uses split on both `\\` and `/`,
|
|
21
|
+
* never relies on nodePath.basename which only splits on the host OS separator.
|
|
22
|
+
*/
|
|
23
|
+
export declare const MAX_EVIDENCE_VALUE_CHARS = 200;
|
|
24
|
+
/**
|
|
25
|
+
* Converges a single absolute path to a safe representation.
|
|
26
|
+
* - Under workspaceDir → repo-relative
|
|
27
|
+
* - Other absolute → basename only (platform-agnostic)
|
|
28
|
+
* - Relative paths → kept as-is
|
|
29
|
+
*/
|
|
30
|
+
export declare function convergePath(value: string, workspaceDir?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Sanitize a single string value:
|
|
33
|
+
* 1. Strip internal PD tags
|
|
34
|
+
* 2. Redact token-like patterns
|
|
35
|
+
* 3. Replace absolute paths embedded in the string
|
|
36
|
+
* 4. Bound length
|
|
37
|
+
*/
|
|
38
|
+
export declare function sanitizeString(value: string, workspaceDir?: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Recursively sanitize any value for durable evidence storage.
|
|
41
|
+
* - Primitives: string → redact+bound; number/boolean → pass-through
|
|
42
|
+
* - Objects: recurse with key limit
|
|
43
|
+
* - Arrays: recurse with item limit
|
|
44
|
+
* - Depth limit prevents infinite traversal
|
|
45
|
+
*
|
|
46
|
+
* ERR-001: input is `unknown`, narrowed with typeof guards (no `as` casts)
|
|
47
|
+
*/
|
|
48
|
+
export declare function sanitizeValue(value: unknown, depth?: number, workspaceDir?: string): unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Sanitize tool-call params for evidence/trajectory storage.
|
|
51
|
+
*
|
|
52
|
+
* ERR-001: accepts `unknown`, not `Record<string, unknown>`. Runtime guards only.
|
|
53
|
+
* ERR-055: ANY-segment sensitive field matching.
|
|
54
|
+
* ERR-056: token redaction runs on ALL strings via sanitizeValue recursion.
|
|
55
|
+
*/
|
|
56
|
+
export declare function sanitizeToolParams(params: unknown, workspaceDir?: string): Record<string, unknown>;
|
|
57
|
+
//# sourceMappingURL=evidence-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-sanitizer.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/evidence-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAuD5C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBzE;AAqBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB3E;AAID;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,KAAK,SAAI,EACT,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CA+BT;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared evidence sanitizer for durable pain signal storage.
|
|
3
|
+
*
|
|
4
|
+
* Used by:
|
|
5
|
+
* - pain-signal-observability.ts (core package)
|
|
6
|
+
* - message-sanitize.ts (openclaw-plugin package)
|
|
7
|
+
*
|
|
8
|
+
* Design contract (EP-08 Security Boundary Placement):
|
|
9
|
+
* - Sanitization happens at the PERSISTENCE boundary, not at evaluation boundary
|
|
10
|
+
* - Enforcement input (raw params, error text) stays available for gate/score computation
|
|
11
|
+
* - All strings are token-redacted and bounded before durable storage
|
|
12
|
+
* - Unknown-first: never throws on malformed input; returns {} or bounded preview
|
|
13
|
+
* - Recursive with depth/key/array limits to prevent infinite traversal
|
|
14
|
+
*
|
|
15
|
+
* ERR checklist:
|
|
16
|
+
* - ERR-001: no `as` casts — input is `unknown`, narrowed with typeof guards
|
|
17
|
+
* - ERR-055: ANY-segment sensitive field matching, not ALL-segment
|
|
18
|
+
* - ERR-056: token redaction runs on ALL strings, not just truncation
|
|
19
|
+
* - ERR-051: redaction is at persistence output path, not evaluation input path
|
|
20
|
+
* - EP-08: platform-agnostic path basename — uses split on both `\\` and `/`,
|
|
21
|
+
* never relies on nodePath.basename which only splits on the host OS separator.
|
|
22
|
+
*/
|
|
23
|
+
// ── Limits ──
|
|
24
|
+
export const MAX_EVIDENCE_VALUE_CHARS = 200;
|
|
25
|
+
const MAX_DEPTH = 4;
|
|
26
|
+
const MAX_KEYS = 50;
|
|
27
|
+
const MAX_ARRAY_ITEMS = 20;
|
|
28
|
+
// ── Token patterns ──
|
|
29
|
+
const TOKEN_LIKE_PATTERNS = [
|
|
30
|
+
/[A-Za-z0-9+/=]{40,}/g,
|
|
31
|
+
/sk-[A-Za-z0-9_-]{20,}/g,
|
|
32
|
+
/ghp_[A-Za-z0-9]{36,}/g,
|
|
33
|
+
/gho_[A-Za-z0-9]{36,}/g,
|
|
34
|
+
/xox[bpras]-[A-Za-z0-9-]{20,}/g,
|
|
35
|
+
/eyJ[A-Za-z0-9_-]{20,}\./g,
|
|
36
|
+
];
|
|
37
|
+
// ── PD tag patterns ──
|
|
38
|
+
const PD_TAG_PATTERNS = [
|
|
39
|
+
/\[EMOTIONAL_DAMAGE_DETECTED(?::(?:mild|moderate|severe))?\]/gi,
|
|
40
|
+
/\[EMPATHY_ROLLBACK_REQUEST\]/gi,
|
|
41
|
+
/<empathy[^>]*\/?>(?:<\/empathy>)?/gi,
|
|
42
|
+
];
|
|
43
|
+
// ── Path detection ──
|
|
44
|
+
const ABSOLUTE_PATH_RE = /^(?:[A-Za-z]:[\\/]|\/|\\\\)/;
|
|
45
|
+
const WINDOWS_DRIVE_RE = /^[A-Za-z]:\\/;
|
|
46
|
+
/**
|
|
47
|
+
* Matches absolute paths embedded anywhere inside a string.
|
|
48
|
+
* Windows drive, POSIX root, UNC paths.
|
|
49
|
+
*/
|
|
50
|
+
const ABSOLUTE_PATH_IN_STRING_RE = /(?:^|[\s"'=])([A-Za-z]:\\[^\s"'&|<>]+|[A-Za-z]:\/[^\s"'&|<>]+|\\\\[^\s"'&|<>]+|(?:\/[\w.-]+){2,}(?:\/[^\s"'&|<>]*)?)/gm;
|
|
51
|
+
// ── Helpers ──
|
|
52
|
+
function isPlainRecord(value) {
|
|
53
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Platform-agnostic basename that handles both `\` and `/` separators.
|
|
57
|
+
*
|
|
58
|
+
* EP-08: nodePath.basename on Linux does not split on backslash.
|
|
59
|
+
* This helper splits on both separator families so that Windows paths
|
|
60
|
+
* like `D:\Code\principles` produce `principles` even when running on
|
|
61
|
+
* a POSIX CI runner.
|
|
62
|
+
*/
|
|
63
|
+
function platformAgnosticBasename(p) {
|
|
64
|
+
const parts = p.split(/[\\/]/);
|
|
65
|
+
return parts[parts.length - 1] || p;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Converges a single absolute path to a safe representation.
|
|
69
|
+
* - Under workspaceDir → repo-relative
|
|
70
|
+
* - Other absolute → basename only (platform-agnostic)
|
|
71
|
+
* - Relative paths → kept as-is
|
|
72
|
+
*/
|
|
73
|
+
export function convergePath(value, workspaceDir) {
|
|
74
|
+
if (!ABSOLUTE_PATH_RE.test(value))
|
|
75
|
+
return value;
|
|
76
|
+
// Try repo-relative
|
|
77
|
+
if (workspaceDir) {
|
|
78
|
+
const normalizedWorkspace = workspaceDir.replace(/[\\/]+$/, '');
|
|
79
|
+
const normalizedValue = value.replace(/[\\/]+$/, '');
|
|
80
|
+
// Case-insensitive comparison on Windows
|
|
81
|
+
const compare = WINDOWS_DRIVE_RE.test(value)
|
|
82
|
+
? (a, b) => a.toLowerCase() === b.toLowerCase()
|
|
83
|
+
: (a, b) => a === b;
|
|
84
|
+
if (compare(normalizedValue.slice(0, normalizedWorkspace.length), normalizedWorkspace)) {
|
|
85
|
+
const relative = normalizedValue.slice(normalizedWorkspace.length).replace(/^[/\\]/, '');
|
|
86
|
+
return relative || platformAgnosticBasename(value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Absolute, not under workspace → basename
|
|
90
|
+
return platformAgnosticBasename(value);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Replace absolute paths embedded inside a longer string.
|
|
94
|
+
* e.g. "cd D:\Code\principles && git status" → "cd <path:principles> && git status"
|
|
95
|
+
* e.g. "error in /home/user/project/src/file.ts" → "error in <path:file.ts>"
|
|
96
|
+
*/
|
|
97
|
+
function replacePathsInString(value, workspaceDir) {
|
|
98
|
+
return value.replace(ABSOLUTE_PATH_IN_STRING_RE, (fullMatch, capturedPath) => {
|
|
99
|
+
const leading = fullMatch.slice(0, fullMatch.length - capturedPath.length);
|
|
100
|
+
const converged = convergePath(capturedPath, workspaceDir);
|
|
101
|
+
// Wrap outside-workspace absolute paths in angle brackets
|
|
102
|
+
if (ABSOLUTE_PATH_RE.test(capturedPath) && converged === platformAgnosticBasename(capturedPath)) {
|
|
103
|
+
return `${leading}<path:${converged}>`;
|
|
104
|
+
}
|
|
105
|
+
return `${leading}${converged}`;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// ── String sanitization ──
|
|
109
|
+
/**
|
|
110
|
+
* Sanitize a single string value:
|
|
111
|
+
* 1. Strip internal PD tags
|
|
112
|
+
* 2. Redact token-like patterns
|
|
113
|
+
* 3. Replace absolute paths embedded in the string
|
|
114
|
+
* 4. Bound length
|
|
115
|
+
*/
|
|
116
|
+
export function sanitizeString(value, workspaceDir) {
|
|
117
|
+
let result = value;
|
|
118
|
+
// 1. Strip PD tags
|
|
119
|
+
for (const p of PD_TAG_PATTERNS) {
|
|
120
|
+
result = result.replace(p, '');
|
|
121
|
+
}
|
|
122
|
+
// 2. Redact tokens
|
|
123
|
+
for (const pattern of TOKEN_LIKE_PATTERNS) {
|
|
124
|
+
result = result.replace(pattern, (match) => {
|
|
125
|
+
const prefix = match.length > 50 ? match.slice(0, 8) : match.slice(0, 4);
|
|
126
|
+
return `${prefix}___REDACTED___${match.length}`;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// 3. Replace absolute paths embedded in the string
|
|
130
|
+
result = replacePathsInString(result, workspaceDir);
|
|
131
|
+
// 4. Bound length
|
|
132
|
+
if (result.length > MAX_EVIDENCE_VALUE_CHARS) {
|
|
133
|
+
result = result.slice(0, MAX_EVIDENCE_VALUE_CHARS) + '___TRUNCATED___';
|
|
134
|
+
}
|
|
135
|
+
return result.trim();
|
|
136
|
+
}
|
|
137
|
+
// ── Recursive value sanitization ──
|
|
138
|
+
/**
|
|
139
|
+
* Recursively sanitize any value for durable evidence storage.
|
|
140
|
+
* - Primitives: string → redact+bound; number/boolean → pass-through
|
|
141
|
+
* - Objects: recurse with key limit
|
|
142
|
+
* - Arrays: recurse with item limit
|
|
143
|
+
* - Depth limit prevents infinite traversal
|
|
144
|
+
*
|
|
145
|
+
* ERR-001: input is `unknown`, narrowed with typeof guards (no `as` casts)
|
|
146
|
+
*/
|
|
147
|
+
export function sanitizeValue(value, depth = 0, workspaceDir) {
|
|
148
|
+
if (depth > MAX_DEPTH)
|
|
149
|
+
return '<max-depth>';
|
|
150
|
+
if (value === null || value === undefined)
|
|
151
|
+
return value;
|
|
152
|
+
if (typeof value === 'string')
|
|
153
|
+
return sanitizeString(value, workspaceDir);
|
|
154
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
155
|
+
return value;
|
|
156
|
+
if (Array.isArray(value)) {
|
|
157
|
+
const items = value.slice(0, MAX_ARRAY_ITEMS);
|
|
158
|
+
const mapped = items.map((item) => sanitizeValue(item, depth + 1, workspaceDir));
|
|
159
|
+
if (value.length > MAX_ARRAY_ITEMS) {
|
|
160
|
+
mapped.push(`<${value.length - MAX_ARRAY_ITEMS} more items>`);
|
|
161
|
+
}
|
|
162
|
+
return mapped;
|
|
163
|
+
}
|
|
164
|
+
// ERR-001: runtime guard instead of `as Record`
|
|
165
|
+
if (isPlainRecord(value)) {
|
|
166
|
+
const result = {};
|
|
167
|
+
let count = 0;
|
|
168
|
+
for (const [k, v] of Object.entries(value)) {
|
|
169
|
+
if (count >= MAX_KEYS) {
|
|
170
|
+
result['<truncated>'] = `${Object.keys(value).length - count} more keys`;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
result[k] = sanitizeValue(v, depth + 1, workspaceDir);
|
|
174
|
+
count++;
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
return '<unsupported-type>';
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Sanitize tool-call params for evidence/trajectory storage.
|
|
182
|
+
*
|
|
183
|
+
* ERR-001: accepts `unknown`, not `Record<string, unknown>`. Runtime guards only.
|
|
184
|
+
* ERR-055: ANY-segment sensitive field matching.
|
|
185
|
+
* ERR-056: token redaction runs on ALL strings via sanitizeValue recursion.
|
|
186
|
+
*/
|
|
187
|
+
export function sanitizeToolParams(params, workspaceDir) {
|
|
188
|
+
if (params === null || params === undefined) {
|
|
189
|
+
return {};
|
|
190
|
+
}
|
|
191
|
+
if (typeof params === 'string') {
|
|
192
|
+
return { '<string-input>': sanitizeString(params.slice(0, MAX_EVIDENCE_VALUE_CHARS), workspaceDir) };
|
|
193
|
+
}
|
|
194
|
+
if (typeof params === 'number' || typeof params === 'boolean') {
|
|
195
|
+
return {};
|
|
196
|
+
}
|
|
197
|
+
if (Array.isArray(params)) {
|
|
198
|
+
const sanitized = sanitizeValue(params, 0, workspaceDir);
|
|
199
|
+
if (Array.isArray(sanitized)) {
|
|
200
|
+
return { '<array-input>': sanitized.join(', ').slice(0, MAX_EVIDENCE_VALUE_CHARS) };
|
|
201
|
+
}
|
|
202
|
+
return { '<array-input>': '<sanitization-error>' };
|
|
203
|
+
}
|
|
204
|
+
if (isPlainRecord(params)) {
|
|
205
|
+
const sanitized = sanitizeValue(params, 0, workspaceDir);
|
|
206
|
+
if (isPlainRecord(sanitized)) {
|
|
207
|
+
return sanitized;
|
|
208
|
+
}
|
|
209
|
+
return {};
|
|
210
|
+
}
|
|
211
|
+
return {};
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=evidence-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-sanitizer.js","sourceRoot":"","sources":["../../src/runtime-v2/evidence-sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triage Policy Tests — PEAT-B1
|
|
3
|
+
*
|
|
4
|
+
* Tests the pure triage policy evaluation.
|
|
5
|
+
* No I/O, no plugin imports, no mocks needed.
|
|
6
|
+
*
|
|
7
|
+
* ERR checklist:
|
|
8
|
+
* - ERR-001: Validates that source kind is runtime-checked, not cast.
|
|
9
|
+
* - ERR-002: Validates that every result has reason + nextAction.
|
|
10
|
+
* - ERR-024/025/048: Tests exercise the production evaluateTriage path.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=triage-policy.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-policy.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/evidence-triage/__tests__/triage-policy.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|