@principles/core 1.169.0 → 1.170.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 (59) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +0 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/pain-signal.d.ts +11 -71
  6. package/dist/pain-signal.d.ts.map +1 -1
  7. package/dist/pain-signal.js +10 -120
  8. package/dist/pain-signal.js.map +1 -1
  9. package/dist/principle-tree-ledger.d.ts +4 -87
  10. package/dist/principle-tree-ledger.d.ts.map +1 -1
  11. package/dist/principle-tree-ledger.js +51 -148
  12. package/dist/principle-tree-ledger.js.map +1 -1
  13. package/dist/runtime-v2/__tests__/architecture-regression.test.js +69 -4
  14. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  15. package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts +12 -0
  16. package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts.map +1 -0
  17. package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js +46 -0
  18. package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js.map +1 -0
  19. package/dist/runtime-v2/__tests__/io-deletion.test.d.ts +12 -0
  20. package/dist/runtime-v2/__tests__/io-deletion.test.d.ts.map +1 -0
  21. package/dist/runtime-v2/__tests__/io-deletion.test.js +92 -0
  22. package/dist/runtime-v2/__tests__/io-deletion.test.js.map +1 -0
  23. package/dist/runtime-v2/__tests__/ledger-codec.test.d.ts +2 -0
  24. package/dist/runtime-v2/__tests__/ledger-codec.test.d.ts.map +1 -0
  25. package/dist/runtime-v2/__tests__/ledger-codec.test.js +133 -0
  26. package/dist/runtime-v2/__tests__/ledger-codec.test.js.map +1 -0
  27. package/dist/runtime-v2/__tests__/ledger-store.test.d.ts +2 -0
  28. package/dist/runtime-v2/__tests__/ledger-store.test.d.ts.map +1 -0
  29. package/dist/runtime-v2/__tests__/ledger-store.test.js +65 -0
  30. package/dist/runtime-v2/__tests__/ledger-store.test.js.map +1 -0
  31. package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +2 -0
  32. package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +1 -0
  33. package/dist/runtime-v2/__tests__/pain-signal-unification.test.js +150 -0
  34. package/dist/runtime-v2/__tests__/pain-signal-unification.test.js.map +1 -0
  35. package/dist/runtime-v2/index.d.ts +1 -2
  36. package/dist/runtime-v2/index.d.ts.map +1 -1
  37. package/dist/runtime-v2/index.js +4 -2
  38. package/dist/runtime-v2/index.js.map +1 -1
  39. package/dist/runtime-v2/principle-tree/ledger-codec.d.ts +30 -0
  40. package/dist/runtime-v2/principle-tree/ledger-codec.d.ts.map +1 -0
  41. package/dist/runtime-v2/principle-tree/ledger-codec.js +154 -0
  42. package/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -0
  43. package/dist/runtime-v2/types/index.d.ts +2 -0
  44. package/dist/runtime-v2/types/index.d.ts.map +1 -1
  45. package/dist/runtime-v2/types/index.js +1 -0
  46. package/dist/runtime-v2/types/index.js.map +1 -1
  47. package/dist/runtime-v2/types/ledger-store.d.ts +101 -0
  48. package/dist/runtime-v2/types/ledger-store.d.ts.map +1 -0
  49. package/dist/runtime-v2/types/ledger-store.js +15 -0
  50. package/dist/runtime-v2/types/ledger-store.js.map +1 -0
  51. package/dist/runtime-v2/types/pain-signal.d.ts +5 -3
  52. package/dist/runtime-v2/types/pain-signal.d.ts.map +1 -1
  53. package/dist/runtime-v2/types/pain-signal.js +23 -3
  54. package/dist/runtime-v2/types/pain-signal.js.map +1 -1
  55. package/package.json +4 -4
  56. package/dist/io.d.ts +0 -35
  57. package/dist/io.d.ts.map +0 -1
  58. package/dist/io.js +0 -95
  59. package/dist/io.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pain-signal.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/types/pain-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAOtD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,mOAKvB,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;IAC3B,mFAAmF;;IAEnF,uBAAuB;;IAEvB,yBAAyB;;IAEzB,gDAAgD;;IAEhD,kEAAkE;;IAElE,6EAA6E;;IAE7E,kEAAkE;;IAElE,mDAAmD;;IAEnD,6DAA6D;;IAE7D,wCAAwC;;IAExC,4CAA4C;;EAE5C,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAMzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAK1D;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAiBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CAoC7E"}
1
+ {"version":3,"file":"pain-signal.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/types/pain-signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAOtD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,mOAKvB,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB;IAC3B,mFAAmF;;IAEnF,uBAAuB;;IAEvB,yBAAyB;;IAEzB,gDAAgD;;IAEhD,kEAAkE;;IAElE,6EAA6E;;IAE7E,kEAAkE;;IAElE,mDAAmD;;IAEnD,+DAA+D;;IAE/D,6DAA6D;;IAE7D,wCAAwC;;IAExC,4CAA4C;;EAE5C,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAMzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAK1D;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAiBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CAyD7E"}
@@ -29,9 +29,9 @@ export const PainSeverity = Type.Union([
29
29
  /**
30
30
  * TypeBox schema for a universal pain signal.
31
31
  *
32
- * Every signal MUST have: source, score, timestamp, reason, sessionId,
33
- * agentId, traceId, triggerTextPreview. Optional fields (domain, severity,
34
- * context) default during validation.
32
+ * Every signal MUST have: source, score, timestamp, reason,
33
+ * triggerTextPreview. Optional fields (sessionId, agentId, traceId,
34
+ * domain, severity, context, version) default during validation.
35
35
  */
36
36
  export const PainSignalSchema = Type.Object({
37
37
  /** What triggered this pain signal (e.g., 'tool_failure', 'human_intervention') */
@@ -50,6 +50,8 @@ export const PainSignalSchema = Type.Object({
50
50
  traceId: Type.Optional(Type.String()),
51
51
  /** Preview of the text that triggered this pain */
52
52
  triggerTextPreview: Type.String(),
53
+ /** Schema version for forward compatibility (e.g., '0.1.0') */
54
+ version: Type.Optional(Type.String({ default: '0.1.0' })),
53
55
  /** Domain context (e.g., 'coding', 'writing', 'analysis') */
54
56
  domain: Type.String({ default: 'coding' }),
55
57
  /** Severity level derived from score */
@@ -95,12 +97,30 @@ export function validatePainSignal(input) {
95
97
  const hydrated = {
96
98
  ...raw,
97
99
  domain: raw.domain ?? 'coding',
100
+ version: raw.version ?? '0.1.0',
98
101
  sessionId: raw.sessionId ?? undefined,
99
102
  agentId: raw.agentId ?? undefined,
100
103
  traceId: raw.traceId ?? undefined,
101
104
  severity: raw.severity ?? deriveSeverity(typeof raw.score === 'number' ? raw.score : 0),
102
105
  context: raw.context ?? {},
103
106
  };
107
+ // Security: enforce context size limit to prevent memory exhaustion (PRI-443)
108
+ const MAX_CONTEXT_SIZE = 10_000;
109
+ let serializedContext;
110
+ try {
111
+ serializedContext = JSON.stringify(hydrated.context);
112
+ }
113
+ catch {
114
+ return { valid: false, errors: ['context must be JSON-serializable'] };
115
+ }
116
+ if (serializedContext.length > MAX_CONTEXT_SIZE) {
117
+ return { valid: false, errors: ['Context object exceeds maximum size (10KB)'] };
118
+ }
119
+ // Validate ISO 8601 timestamp format (PRI-443)
120
+ if (typeof hydrated.timestamp === 'string' &&
121
+ isNaN(Date.parse(hydrated.timestamp))) {
122
+ return { valid: false, errors: ['timestamp must be a valid ISO 8601 date string'] };
123
+ }
104
124
  // Collect TypeBox errors
105
125
  const errors = [...Value.Errors(PainSignalSchema, hydrated)];
106
126
  if (errors.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"pain-signal.js","sourceRoot":"","sources":["../../../src/runtime-v2/types/pain-signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pain-signal.js","sourceRoot":"","sources":["../../../src/runtime-v2/types/pain-signal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principles/core",
3
- "version": "1.169.0",
3
+ "version": "1.170.0",
4
4
  "description": "Universal Evolution SDK - framework-agnostic pain signal capture and principle injection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,9 +42,9 @@
42
42
  "types": "./dist/pain-flag-resolver.d.ts",
43
43
  "default": "./dist/pain-flag-resolver.js"
44
44
  },
45
- "./io": {
46
- "types": "./dist/io.d.ts",
47
- "default": "./dist/io.js"
45
+ "./principle-tree-ledger": {
46
+ "types": "./dist/principle-tree-ledger.d.ts",
47
+ "default": "./dist/principle-tree-ledger.js"
48
48
  },
49
49
  "./workspace-resolver": {
50
50
  "types": "./dist/types/workspace-resolver.d.ts",
package/dist/io.d.ts DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * I/O utilities for @principles/core SDK.
3
- *
4
- * Provides atomic file write operations that are crash-safe.
5
- * No dependencies on openclaw-plugin — self-contained.
6
- */
7
- /**
8
- * AsyncQueueLock — lightweight in-process async queue lock.
9
- * Serializes async operations on the same key within a single Node.js process.
10
- * NOT a distributed lock — use for CLI-in-process concurrency only.
11
- */
12
- export declare class AsyncQueueLock {
13
- private readonly queues;
14
- /**
15
- * Execute a function while holding an exclusive lock on the given key.
16
- * Uses a promise chain to serialize operations — only one operation runs at a time
17
- * for any given key within this process.
18
- *
19
- * @param key - Lock key (e.g. file path to serialize)
20
- * @param fn - Async function to execute
21
- */
22
- withLock<T>(key: string, fn: () => Promise<T>): Promise<T>;
23
- }
24
- /**
25
- * Atomic file write — write to temp file then rename.
26
- *
27
- * Prevents corruption if process crashes mid-write.
28
- * On Windows, retries with exponential backoff on EPERM/EBUSY/EACCES
29
- * to handle transient file locks.
30
- *
31
- * @param filePath - Target file path
32
- * @param data - Content to write (UTF-8 string)
33
- */
34
- export declare function atomicWriteFileSync(filePath: string, data: string): void;
35
- //# sourceMappingURL=io.d.ts.map
package/dist/io.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D;;;;;;;OAOG;IACG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAkBjE;AAQD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAiCxE"}
package/dist/io.js DELETED
@@ -1,95 +0,0 @@
1
- /**
2
- * I/O utilities for @principles/core SDK.
3
- *
4
- * Provides atomic file write operations that are crash-safe.
5
- * No dependencies on openclaw-plugin — self-contained.
6
- */
7
- import * as fs from 'fs';
8
- /**
9
- * AsyncQueueLock — lightweight in-process async queue lock.
10
- * Serializes async operations on the same key within a single Node.js process.
11
- * NOT a distributed lock — use for CLI-in-process concurrency only.
12
- */
13
- export class AsyncQueueLock {
14
- queues = new Map();
15
- /**
16
- * Execute a function while holding an exclusive lock on the given key.
17
- * Uses a promise chain to serialize operations — only one operation runs at a time
18
- * for any given key within this process.
19
- *
20
- * @param key - Lock key (e.g. file path to serialize)
21
- * @param fn - Async function to execute
22
- */
23
- async withLock(key, fn) {
24
- const lockPath = key;
25
- let resolveRelease;
26
- const releasePromise = new Promise(r => { resolveRelease = r; });
27
- const previousQueue = this.queues.get(lockPath) || Promise.resolve();
28
- const currentQueue = previousQueue.then(() => releasePromise);
29
- this.queues.set(lockPath, currentQueue);
30
- try {
31
- await previousQueue;
32
- return await fn();
33
- }
34
- finally {
35
- resolveRelease?.();
36
- if (this.queues.get(lockPath) === currentQueue) {
37
- this.queues.delete(lockPath);
38
- }
39
- }
40
- }
41
- }
42
- // Sync mutex: promise chain for synchronous code sections that need serialization.
43
- // Use for single-process CLI tools that need atomic file access within the same process.
44
- // NOT a distributed lock — each process gets its own chain on import.
45
- const RENAME_MAX_RETRIES = 3;
46
- const RENAME_BASE_DELAY_MS = 50;
47
- /**
48
- * Atomic file write — write to temp file then rename.
49
- *
50
- * Prevents corruption if process crashes mid-write.
51
- * On Windows, retries with exponential backoff on EPERM/EBUSY/EACCES
52
- * to handle transient file locks.
53
- *
54
- * @param filePath - Target file path
55
- * @param data - Content to write (UTF-8 string)
56
- */
57
- export function atomicWriteFileSync(filePath, data) {
58
- const tmpPath = filePath + '.tmp';
59
- fs.writeFileSync(tmpPath, data, 'utf8');
60
- let lastError;
61
- for (let attempt = 0; attempt < RENAME_MAX_RETRIES; attempt++) {
62
- try {
63
- fs.renameSync(tmpPath, filePath);
64
- return;
65
- }
66
- catch (err) {
67
- lastError = err;
68
- const { code } = /** @type {{ code?: string }} */ err;
69
- // Only retry on Windows transient lock errors
70
- if (code === 'EPERM' || code === 'EBUSY' || code === 'EACCES') {
71
- if (attempt < RENAME_MAX_RETRIES - 1) {
72
- const delay = RENAME_BASE_DELAY_MS * Math.pow(2, attempt);
73
- // Synchronous sleep using a tight spin with accessSync yield
74
- const waitUntil = Date.now() + delay;
75
- while (Date.now() < waitUntil) {
76
- try {
77
- fs.accessSync?.(tmpPath);
78
- }
79
- catch { /* ignore */ }
80
- }
81
- }
82
- continue;
83
- }
84
- // Non-retryable error — throw immediately
85
- break;
86
- }
87
- }
88
- // Clean up temp file on failure
89
- try {
90
- fs.unlinkSync(tmpPath);
91
- }
92
- catch { /* best effort */ }
93
- throw lastError ?? new Error('atomicWriteFileSync: rename failed');
94
- }
95
- //# sourceMappingURL=io.js.map
package/dist/io.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}