@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.
Files changed (74) hide show
  1. package/dist/index.d.ts +3 -3
  2. package/dist/index.js +3 -3
  3. package/dist/runtime-v2/__tests__/pain-signal-observability.test.js +93 -0
  4. package/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  5. package/dist/runtime-v2/index.d.ts +2 -0
  6. package/dist/runtime-v2/index.d.ts.map +1 -1
  7. package/dist/runtime-v2/index.js.map +1 -1
  8. package/dist/runtime-v2/pain-signal-bridge.d.ts +8 -1
  9. package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  10. package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  11. package/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  12. package/dist/runtime-v2/pain-signal-observability.js +25 -10
  13. package/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  14. package/package.json +1 -2
  15. package/dist/adapters/__tests__/code-review-pain-adapter.test.d.ts +0 -2
  16. package/dist/adapters/__tests__/code-review-pain-adapter.test.d.ts.map +0 -1
  17. package/dist/adapters/__tests__/code-review-pain-adapter.test.js +0 -346
  18. package/dist/adapters/__tests__/code-review-pain-adapter.test.js.map +0 -1
  19. package/dist/adapters/__tests__/openclaw-pain-adapter.test.d.ts +0 -2
  20. package/dist/adapters/__tests__/openclaw-pain-adapter.test.d.ts.map +0 -1
  21. package/dist/adapters/__tests__/openclaw-pain-adapter.test.js +0 -290
  22. package/dist/adapters/__tests__/openclaw-pain-adapter.test.js.map +0 -1
  23. package/dist/adapters/__tests__/writing-pain-adapter.test.d.ts +0 -2
  24. package/dist/adapters/__tests__/writing-pain-adapter.test.d.ts.map +0 -1
  25. package/dist/adapters/__tests__/writing-pain-adapter.test.js +0 -239
  26. package/dist/adapters/__tests__/writing-pain-adapter.test.js.map +0 -1
  27. package/dist/adapters/code-review/code-review-pain-adapter.d.ts +0 -13
  28. package/dist/adapters/code-review/code-review-pain-adapter.d.ts.map +0 -1
  29. package/dist/adapters/code-review/code-review-pain-adapter.js +0 -139
  30. package/dist/adapters/code-review/code-review-pain-adapter.js.map +0 -1
  31. package/dist/adapters/code-review/index.d.ts +0 -6
  32. package/dist/adapters/code-review/index.d.ts.map +0 -1
  33. package/dist/adapters/code-review/index.js +0 -2
  34. package/dist/adapters/code-review/index.js.map +0 -1
  35. package/dist/adapters/code-review/review-event-types.d.ts +0 -54
  36. package/dist/adapters/code-review/review-event-types.d.ts.map +0 -1
  37. package/dist/adapters/code-review/review-event-types.js +0 -8
  38. package/dist/adapters/code-review/review-event-types.js.map +0 -1
  39. package/dist/adapters/coding/index.d.ts +0 -6
  40. package/dist/adapters/coding/index.d.ts.map +0 -1
  41. package/dist/adapters/coding/index.js +0 -5
  42. package/dist/adapters/coding/index.js.map +0 -1
  43. package/dist/adapters/coding/openclaw-event-types.d.ts +0 -26
  44. package/dist/adapters/coding/openclaw-event-types.d.ts.map +0 -1
  45. package/dist/adapters/coding/openclaw-event-types.js +0 -9
  46. package/dist/adapters/coding/openclaw-event-types.js.map +0 -1
  47. package/dist/adapters/coding/openclaw-pain-adapter.d.ts +0 -27
  48. package/dist/adapters/coding/openclaw-pain-adapter.d.ts.map +0 -1
  49. package/dist/adapters/coding/openclaw-pain-adapter.js +0 -102
  50. package/dist/adapters/coding/openclaw-pain-adapter.js.map +0 -1
  51. package/dist/adapters/writing/index.d.ts +0 -6
  52. package/dist/adapters/writing/index.d.ts.map +0 -1
  53. package/dist/adapters/writing/index.js +0 -5
  54. package/dist/adapters/writing/index.js.map +0 -1
  55. package/dist/adapters/writing/writing-pain-adapter.d.ts +0 -22
  56. package/dist/adapters/writing/writing-pain-adapter.d.ts.map +0 -1
  57. package/dist/adapters/writing/writing-pain-adapter.js +0 -62
  58. package/dist/adapters/writing/writing-pain-adapter.js.map +0 -1
  59. package/dist/adapters/writing/writing-types.d.ts +0 -34
  60. package/dist/adapters/writing/writing-types.d.ts.map +0 -1
  61. package/dist/adapters/writing/writing-types.js +0 -9
  62. package/dist/adapters/writing/writing-types.js.map +0 -1
  63. package/dist/pain-signal-adapter.d.ts +0 -37
  64. package/dist/pain-signal-adapter.d.ts.map +0 -1
  65. package/dist/pain-signal-adapter.js +0 -2
  66. package/dist/pain-signal-adapter.js.map +0 -1
  67. package/dist/pain-signal.d.ts +0 -16
  68. package/dist/pain-signal.d.ts.map +0 -1
  69. package/dist/pain-signal.js +0 -15
  70. package/dist/pain-signal.js.map +0 -1
  71. package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +0 -2
  72. package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +0 -1
  73. package/dist/runtime-v2/__tests__/pain-signal-unification.test.js +0 -150
  74. 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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pain-signal-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pain-signal-adapter.js","sourceRoot":"","sources":["../src/pain-signal-adapter.ts"],"names":[],"mappings":""}
@@ -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"}
@@ -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
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pain-signal-unification.test.d.ts.map
@@ -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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"}