@principles/core 1.273.1 → 1.274.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/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/runtime-v2/__tests__/pain-signal-observability.test.js +93 -0
- package/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +2 -0
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.d.ts +8 -1
- package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-observability.js +25 -10
- package/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/package.json +1 -2
- package/dist/adapters/__tests__/code-review-pain-adapter.test.d.ts +0 -2
- package/dist/adapters/__tests__/code-review-pain-adapter.test.d.ts.map +0 -1
- package/dist/adapters/__tests__/code-review-pain-adapter.test.js +0 -346
- package/dist/adapters/__tests__/code-review-pain-adapter.test.js.map +0 -1
- package/dist/adapters/__tests__/openclaw-pain-adapter.test.d.ts +0 -2
- package/dist/adapters/__tests__/openclaw-pain-adapter.test.d.ts.map +0 -1
- package/dist/adapters/__tests__/openclaw-pain-adapter.test.js +0 -290
- package/dist/adapters/__tests__/openclaw-pain-adapter.test.js.map +0 -1
- package/dist/adapters/__tests__/writing-pain-adapter.test.d.ts +0 -2
- package/dist/adapters/__tests__/writing-pain-adapter.test.d.ts.map +0 -1
- package/dist/adapters/__tests__/writing-pain-adapter.test.js +0 -239
- package/dist/adapters/__tests__/writing-pain-adapter.test.js.map +0 -1
- package/dist/adapters/code-review/code-review-pain-adapter.d.ts +0 -13
- package/dist/adapters/code-review/code-review-pain-adapter.d.ts.map +0 -1
- package/dist/adapters/code-review/code-review-pain-adapter.js +0 -139
- package/dist/adapters/code-review/code-review-pain-adapter.js.map +0 -1
- package/dist/adapters/code-review/index.d.ts +0 -6
- package/dist/adapters/code-review/index.d.ts.map +0 -1
- package/dist/adapters/code-review/index.js +0 -2
- package/dist/adapters/code-review/index.js.map +0 -1
- package/dist/adapters/code-review/review-event-types.d.ts +0 -54
- package/dist/adapters/code-review/review-event-types.d.ts.map +0 -1
- package/dist/adapters/code-review/review-event-types.js +0 -8
- package/dist/adapters/code-review/review-event-types.js.map +0 -1
- package/dist/adapters/coding/index.d.ts +0 -6
- package/dist/adapters/coding/index.d.ts.map +0 -1
- package/dist/adapters/coding/index.js +0 -5
- package/dist/adapters/coding/index.js.map +0 -1
- package/dist/adapters/coding/openclaw-event-types.d.ts +0 -26
- package/dist/adapters/coding/openclaw-event-types.d.ts.map +0 -1
- package/dist/adapters/coding/openclaw-event-types.js +0 -9
- package/dist/adapters/coding/openclaw-event-types.js.map +0 -1
- package/dist/adapters/coding/openclaw-pain-adapter.d.ts +0 -27
- package/dist/adapters/coding/openclaw-pain-adapter.d.ts.map +0 -1
- package/dist/adapters/coding/openclaw-pain-adapter.js +0 -102
- package/dist/adapters/coding/openclaw-pain-adapter.js.map +0 -1
- package/dist/adapters/writing/index.d.ts +0 -6
- package/dist/adapters/writing/index.d.ts.map +0 -1
- package/dist/adapters/writing/index.js +0 -5
- package/dist/adapters/writing/index.js.map +0 -1
- package/dist/adapters/writing/writing-pain-adapter.d.ts +0 -22
- package/dist/adapters/writing/writing-pain-adapter.d.ts.map +0 -1
- package/dist/adapters/writing/writing-pain-adapter.js +0 -62
- package/dist/adapters/writing/writing-pain-adapter.js.map +0 -1
- package/dist/adapters/writing/writing-types.d.ts +0 -34
- package/dist/adapters/writing/writing-types.d.ts.map +0 -1
- package/dist/adapters/writing/writing-types.js +0 -9
- package/dist/adapters/writing/writing-types.js.map +0 -1
- package/dist/pain-signal-adapter.d.ts +0 -37
- package/dist/pain-signal-adapter.d.ts.map +0 -1
- package/dist/pain-signal-adapter.js +0 -2
- package/dist/pain-signal-adapter.js.map +0 -1
- package/dist/pain-signal.d.ts +0 -16
- package/dist/pain-signal.d.ts.map +0 -1
- package/dist/pain-signal.js +0 -15
- package/dist/pain-signal.js.map +0 -1
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +0 -2
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +0 -1
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.js +0 -150
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.js.map +0 -1
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PainSignalAdapter interface for the Evolution SDK.
|
|
3
|
-
*
|
|
4
|
-
* This interface decouples the evolution engine from specific AI agent
|
|
5
|
-
* frameworks (OpenClaw, Claude Code, etc.). All modules that need to
|
|
6
|
-
* capture pain signals from tool failures should depend on this interface
|
|
7
|
-
* rather than importing framework-specific event types directly.
|
|
8
|
-
*
|
|
9
|
-
* The interface uses a generic type parameter for the raw framework event,
|
|
10
|
-
* so each framework implementation provides its own concrete type.
|
|
11
|
-
*/
|
|
12
|
-
import type { PainSignal } from './pain-signal.js';
|
|
13
|
-
/**
|
|
14
|
-
* Framework-agnostic adapter for capturing pain signals.
|
|
15
|
-
*
|
|
16
|
-
* @typeParam TRawEvent - The framework-specific event type
|
|
17
|
-
* (e.g., PluginHookAfterToolCallEvent for OpenClaw)
|
|
18
|
-
*/
|
|
19
|
-
export interface PainSignalAdapter<TRawEvent> {
|
|
20
|
-
/**
|
|
21
|
-
* Translate a framework-specific event into a universal PainSignal.
|
|
22
|
-
*
|
|
23
|
-
* Returns null when the event does not constitute a pain signal:
|
|
24
|
-
* - "Not applicable": event type is not a failure (e.g., tool succeeded)
|
|
25
|
-
* - "Malformed": required fields are missing or invalid (e.g., no sessionId)
|
|
26
|
-
*
|
|
27
|
-
* In both cases null is returned -- callers do not need to distinguish.
|
|
28
|
-
* This method performs pure translation only. Trigger decision logic
|
|
29
|
-
* (e.g., GFI threshold checks, tool name filtering) stays in the
|
|
30
|
-
* framework-side hook logic. Per D-02, capture() only translates.
|
|
31
|
-
*
|
|
32
|
-
* @param rawEvent - The framework-specific event to translate
|
|
33
|
-
* @returns A valid PainSignal, or null if the event does not produce one
|
|
34
|
-
*/
|
|
35
|
-
capture(rawEvent: TRawEvent): PainSignal | null;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=pain-signal-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal-adapter.d.ts","sourceRoot":"","sources":["../src/pain-signal-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB,CAAC,SAAS;IAC1C;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;CACjD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal-adapter.js","sourceRoot":"","sources":["../src/pain-signal-adapter.ts"],"names":[],"mappings":""}
|
package/dist/pain-signal.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pain signal schema — re-exported from runtime-v2/types/pain-signal.ts.
|
|
3
|
-
*
|
|
4
|
-
* This file exists for backward compatibility with imports from
|
|
5
|
-
* @principles/core (top-level barrel). The canonical definition
|
|
6
|
-
* lives in runtime-v2/types/pain-signal.ts (PRI-443).
|
|
7
|
-
*
|
|
8
|
-
* The unified schema merges the stricter validations from both versions:
|
|
9
|
-
* - ISO 8601 timestamp format check
|
|
10
|
-
* - Context size limit (10KB)
|
|
11
|
-
* - version field with default
|
|
12
|
-
* - isStringRecord type guard (no `as` bypass)
|
|
13
|
-
*/
|
|
14
|
-
export { PainSeverity, PainSignalSchema, deriveSeverity, validatePainSignal, } from './runtime-v2/types/pain-signal.js';
|
|
15
|
-
export type { PainSignal, PainSignalValidationResult, } from './runtime-v2/types/pain-signal.js';
|
|
16
|
-
//# sourceMappingURL=pain-signal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal.d.ts","sourceRoot":"","sources":["../src/pain-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAE3C,YAAY,EACV,UAAU,EACV,0BAA0B,GAC3B,MAAM,mCAAmC,CAAC"}
|
package/dist/pain-signal.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pain signal schema — re-exported from runtime-v2/types/pain-signal.ts.
|
|
3
|
-
*
|
|
4
|
-
* This file exists for backward compatibility with imports from
|
|
5
|
-
* @principles/core (top-level barrel). The canonical definition
|
|
6
|
-
* lives in runtime-v2/types/pain-signal.ts (PRI-443).
|
|
7
|
-
*
|
|
8
|
-
* The unified schema merges the stricter validations from both versions:
|
|
9
|
-
* - ISO 8601 timestamp format check
|
|
10
|
-
* - Context size limit (10KB)
|
|
11
|
-
* - version field with default
|
|
12
|
-
* - isStringRecord type guard (no `as` bypass)
|
|
13
|
-
*/
|
|
14
|
-
export { PainSeverity, PainSignalSchema, deriveSeverity, validatePainSignal, } from './runtime-v2/types/pain-signal.js';
|
|
15
|
-
//# sourceMappingURL=pain-signal.js.map
|
package/dist/pain-signal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal.js","sourceRoot":"","sources":["../src/pain-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,mCAAmC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal-unification.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-unification.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PRI-443: Pain signal unification tests.
|
|
3
|
-
*
|
|
4
|
-
* Verifies that the top-level pain-signal.ts re-exports from
|
|
5
|
-
* runtime-v2/types/pain-signal.ts and that the unified schema
|
|
6
|
-
* includes the stricter validations from both versions:
|
|
7
|
-
* - ISO 8601 timestamp format check (from top-level)
|
|
8
|
-
* - Context size limit (from top-level)
|
|
9
|
-
* - version field (from top-level)
|
|
10
|
-
* - isStringRecord type guard instead of `as` (from runtime-v2)
|
|
11
|
-
*/
|
|
12
|
-
import { describe, it, expect } from 'vitest';
|
|
13
|
-
import { readFileSync } from 'node:fs';
|
|
14
|
-
import { resolve } from 'node:path';
|
|
15
|
-
import { validatePainSignal, deriveSeverity, PainSignalSchema } from '../../pain-signal.js';
|
|
16
|
-
// Import from runtime-v2 (the canonical source)
|
|
17
|
-
import { validatePainSignal as validatePainSignalV2, PainSignalSchema as PainSignalSchemaV2, } from '../types/pain-signal.js';
|
|
18
|
-
describe('PRI-443: pain-signal.ts unification', () => {
|
|
19
|
-
it('top-level pain-signal.ts re-exports from runtime-v2 (no duplicate code)', () => {
|
|
20
|
-
const src = readFileSync(resolve(__dirname, '..', '..', '..', 'src', 'pain-signal.ts'), 'utf-8');
|
|
21
|
-
// Should NOT contain schema definition — only re-export
|
|
22
|
-
expect(src).not.toMatch(/export\s+const\s+PainSignalSchema\s*=/);
|
|
23
|
-
expect(src).not.toMatch(/export\s+function\s+validatePainSignal\s*\(/);
|
|
24
|
-
// Should contain re-export
|
|
25
|
-
expect(src).toMatch(/from\s+['"]\.\/runtime-v2\/types\/pain-signal\.js['"]/);
|
|
26
|
-
});
|
|
27
|
-
it('top-level and runtime-v2 validatePainSignal are the same function', () => {
|
|
28
|
-
expect(validatePainSignal).toBe(validatePainSignalV2);
|
|
29
|
-
});
|
|
30
|
-
it('top-level and runtime-v2 PainSignalSchema are the same object', () => {
|
|
31
|
-
expect(PainSignalSchema).toBe(PainSignalSchemaV2);
|
|
32
|
-
});
|
|
33
|
-
it('rejects invalid ISO 8601 timestamp', () => {
|
|
34
|
-
const signal = {
|
|
35
|
-
source: 'tool_failure',
|
|
36
|
-
score: 75,
|
|
37
|
-
timestamp: 'not-a-date',
|
|
38
|
-
reason: 'Test',
|
|
39
|
-
sessionId: 'sess-123',
|
|
40
|
-
agentId: 'main',
|
|
41
|
-
traceId: 'trace-abc',
|
|
42
|
-
triggerTextPreview: 'test',
|
|
43
|
-
domain: 'coding',
|
|
44
|
-
severity: 'high',
|
|
45
|
-
context: {},
|
|
46
|
-
};
|
|
47
|
-
const result = validatePainSignal(signal);
|
|
48
|
-
expect(result.valid).toBe(false);
|
|
49
|
-
expect(result.errors.some((e) => e.includes('timestamp'))).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
it('rejects context exceeding 10KB size limit', () => {
|
|
52
|
-
const largeContext = {};
|
|
53
|
-
const bigString = 'x'.repeat(11_000);
|
|
54
|
-
largeContext.big = bigString;
|
|
55
|
-
const signal = {
|
|
56
|
-
source: 'tool_failure',
|
|
57
|
-
score: 75,
|
|
58
|
-
timestamp: '2026-01-01T00:00:00Z',
|
|
59
|
-
reason: 'Test',
|
|
60
|
-
sessionId: 'sess-123',
|
|
61
|
-
agentId: 'main',
|
|
62
|
-
traceId: 'trace-abc',
|
|
63
|
-
triggerTextPreview: 'test',
|
|
64
|
-
domain: 'coding',
|
|
65
|
-
severity: 'high',
|
|
66
|
-
context: largeContext,
|
|
67
|
-
};
|
|
68
|
-
const result = validatePainSignal(signal);
|
|
69
|
-
expect(result.valid).toBe(false);
|
|
70
|
-
expect(result.errors.some((e) => e.includes('Context'))).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
it('rejects context with circular references without crashing (PR review fix)', () => {
|
|
73
|
-
const circularContext = {};
|
|
74
|
-
circularContext.self = circularContext;
|
|
75
|
-
const signal = {
|
|
76
|
-
source: 'tool_failure',
|
|
77
|
-
score: 75,
|
|
78
|
-
timestamp: '2026-01-01T00:00:00Z',
|
|
79
|
-
reason: 'Test',
|
|
80
|
-
sessionId: 'sess-123',
|
|
81
|
-
agentId: 'main',
|
|
82
|
-
traceId: 'trace-abc',
|
|
83
|
-
triggerTextPreview: 'test',
|
|
84
|
-
domain: 'coding',
|
|
85
|
-
severity: 'high',
|
|
86
|
-
context: circularContext,
|
|
87
|
-
};
|
|
88
|
-
const result = validatePainSignal(signal);
|
|
89
|
-
expect(result.valid).toBe(false);
|
|
90
|
-
expect(result.errors.some((e) => e.includes('JSON-serializable'))).toBe(true);
|
|
91
|
-
});
|
|
92
|
-
it('rejects context with BigInt values without crashing (PR review fix)', () => {
|
|
93
|
-
const signal = {
|
|
94
|
-
source: 'tool_failure',
|
|
95
|
-
score: 75,
|
|
96
|
-
timestamp: '2026-01-01T00:00:00Z',
|
|
97
|
-
reason: 'Test',
|
|
98
|
-
sessionId: 'sess-123',
|
|
99
|
-
agentId: 'main',
|
|
100
|
-
traceId: 'trace-abc',
|
|
101
|
-
triggerTextPreview: 'test',
|
|
102
|
-
domain: 'coding',
|
|
103
|
-
severity: 'high',
|
|
104
|
-
context: { bigNum: BigInt(123) },
|
|
105
|
-
};
|
|
106
|
-
const result = validatePainSignal(signal);
|
|
107
|
-
expect(result.valid).toBe(false);
|
|
108
|
-
expect(result.errors.some((e) => e.includes('JSON-serializable'))).toBe(true);
|
|
109
|
-
});
|
|
110
|
-
it('accepts signal with optional sessionId/agentId/traceId missing', () => {
|
|
111
|
-
const signal = {
|
|
112
|
-
source: 'tool_failure',
|
|
113
|
-
score: 75,
|
|
114
|
-
timestamp: '2026-01-01T00:00:00Z',
|
|
115
|
-
reason: 'Test',
|
|
116
|
-
triggerTextPreview: 'test',
|
|
117
|
-
domain: 'coding',
|
|
118
|
-
severity: 'high',
|
|
119
|
-
context: {},
|
|
120
|
-
};
|
|
121
|
-
const result = validatePainSignal(signal);
|
|
122
|
-
expect(result.valid).toBe(true);
|
|
123
|
-
});
|
|
124
|
-
it('includes version field in validated signal', () => {
|
|
125
|
-
const signal = {
|
|
126
|
-
source: 'tool_failure',
|
|
127
|
-
score: 75,
|
|
128
|
-
timestamp: '2026-01-01T00:00:00Z',
|
|
129
|
-
reason: 'Test',
|
|
130
|
-
sessionId: 'sess-123',
|
|
131
|
-
agentId: 'main',
|
|
132
|
-
traceId: 'trace-abc',
|
|
133
|
-
triggerTextPreview: 'test',
|
|
134
|
-
domain: 'coding',
|
|
135
|
-
severity: 'high',
|
|
136
|
-
context: {},
|
|
137
|
-
};
|
|
138
|
-
const result = validatePainSignal(signal);
|
|
139
|
-
expect(result.valid).toBe(true);
|
|
140
|
-
expect(result.signal?.version).toBe('0.1.0');
|
|
141
|
-
});
|
|
142
|
-
it('PainSeverity type is exported', () => {
|
|
143
|
-
const s = 'low';
|
|
144
|
-
expect(s).toBe('low');
|
|
145
|
-
});
|
|
146
|
-
it('deriveSeverity is exported and works', () => {
|
|
147
|
-
expect(deriveSeverity(95)).toBe('critical');
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
//# sourceMappingURL=pain-signal-unification.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pain-signal-unification.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-unification.test.ts"],"names":[],"mappings":"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"}
|