@principles/core 1.169.0 → 1.171.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/README.md +38 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/pain-signal.d.ts +11 -71
- package/dist/pain-signal.d.ts.map +1 -1
- package/dist/pain-signal.js +10 -120
- package/dist/pain-signal.js.map +1 -1
- package/dist/principle-tree-ledger.d.ts +4 -87
- package/dist/principle-tree-ledger.d.ts.map +1 -1
- package/dist/principle-tree-ledger.js +51 -148
- package/dist/principle-tree-ledger.js.map +1 -1
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +178 -4
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts +12 -0
- package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js +46 -0
- package/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/io-deletion.test.d.ts +12 -0
- package/dist/runtime-v2/__tests__/io-deletion.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/io-deletion.test.js +92 -0
- package/dist/runtime-v2/__tests__/io-deletion.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/ledger-codec.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/ledger-codec.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/ledger-codec.test.js +133 -0
- package/dist/runtime-v2/__tests__/ledger-codec.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/ledger-store.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/ledger-store.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/ledger-store.test.js +65 -0
- package/dist/runtime-v2/__tests__/ledger-store.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.js +150 -0
- package/dist/runtime-v2/__tests__/pain-signal-unification.test.js.map +1 -0
- package/dist/runtime-v2/index.d.ts +1 -2
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +4 -2
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/principle-tree/ledger-codec.d.ts +30 -0
- package/dist/runtime-v2/principle-tree/ledger-codec.d.ts.map +1 -0
- package/dist/runtime-v2/principle-tree/ledger-codec.js +154 -0
- package/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -0
- package/dist/runtime-v2/types/index.d.ts +2 -0
- package/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/dist/runtime-v2/types/index.js +1 -0
- package/dist/runtime-v2/types/index.js.map +1 -1
- package/dist/runtime-v2/types/ledger-store.d.ts +101 -0
- package/dist/runtime-v2/types/ledger-store.d.ts.map +1 -0
- package/dist/runtime-v2/types/ledger-store.js +15 -0
- package/dist/runtime-v2/types/ledger-store.js.map +1 -0
- package/dist/runtime-v2/types/pain-signal.d.ts +5 -3
- package/dist/runtime-v2/types/pain-signal.d.ts.map +1 -1
- package/dist/runtime-v2/types/pain-signal.js +23 -3
- package/dist/runtime-v2/types/pain-signal.js.map +1 -1
- package/package.json +4 -4
- package/dist/io.d.ts +0 -35
- package/dist/io.d.ts.map +0 -1
- package/dist/io.js +0 -95
- 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,
|
|
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,
|
|
33
|
-
*
|
|
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":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;CACzB,CAAC,CAAC;AAKH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,mFAAmF;IACnF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrC,uBAAuB;IACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAChD,yBAAyB;IACzB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACxC,gDAAgD;IAChD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrC,kEAAkE;IAClE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvC,6EAA6E;IAC7E,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,kEAAkE;IAClE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,mDAAmD;IACnD,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE;IACjC,6DAA6D;IAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC1C,wCAAwC;IACxC,QAAQ,EAAE,YAAY;IACtB,4CAA4C;IAC5C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;CACpD,CAAC,CAAC;AAIH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAYD;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,iCAAiC,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC;IAElB,uDAAuD;IACvD,MAAM,QAAQ,
|
|
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.
|
|
3
|
+
"version": "1.171.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
|
-
"./
|
|
46
|
-
"types": "./dist/
|
|
47
|
-
"default": "./dist/
|
|
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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"}
|