@remnic/core 9.8.0 → 9.9.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/access-admin-ops-surface.d.ts +1 -1
- package/dist/access-admin-ops-surface.js +2 -2
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +2 -2
- package/dist/access-cli.js +6 -6
- package/dist/access-http.d.ts +1 -1
- package/dist/access-http.js +4 -4
- package/dist/access-identity-continuity-surface.js +2 -2
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +2 -2
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +3 -3
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +2 -2
- package/dist/access-operations-batch.js +2 -2
- package/dist/access-operations.d.ts +1 -1
- package/dist/access-operations.js +3 -3
- package/dist/access-recall-concurrency.d.ts +1 -1
- package/dist/access-recall-concurrency.js +2 -2
- package/dist/access-recall-response.d.ts +1 -1
- package/dist/access-recall-response.js +2 -2
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +2 -2
- package/dist/{access-service-DEL4qCrc.d.ts → access-service-DbZ1G3zV.d.ts} +4 -4
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +2 -2
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/{chunk-2EJOEICD.js → chunk-BI2OJF6J.js} +2 -2
- package/dist/{chunk-IDZFBSHN.js → chunk-OGCAYLNA.js} +2 -2
- package/dist/{chunk-SICXL4MK.js → chunk-PJSK6OJM.js} +44 -8
- package/dist/chunk-PJSK6OJM.js.map +1 -0
- package/dist/{chunk-76GLCM57.js → chunk-PMUD7ERF.js} +3 -3
- package/dist/{chunk-TDTXKOAJ.js → chunk-XQDRKZ7V.js} +7 -5
- package/dist/chunk-XQDRKZ7V.js.map +1 -0
- package/dist/{chunk-IYNGIMVG.js → chunk-ZVAYK7GU.js} +3 -3
- package/dist/{cli-C_pqqTCw.d.ts → cli-5tNLVTvJ.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +5 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +6 -6
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/orchestrator.js +6 -6
- package/dist/write-quarantine.d.ts +18 -3
- package/dist/write-quarantine.js +1 -1
- package/package.json +2 -2
- package/src/access-observe-quarantine.test.ts +52 -0
- package/src/access-observe-write-surface.ts +12 -5
- package/src/access-service.ts +4 -4
- package/src/write-quarantine.test.ts +52 -0
- package/src/write-quarantine.ts +56 -7
- package/dist/chunk-SICXL4MK.js.map +0 -1
- package/dist/chunk-TDTXKOAJ.js.map +0 -1
- /package/dist/{chunk-2EJOEICD.js.map → chunk-BI2OJF6J.js.map} +0 -0
- /package/dist/{chunk-IDZFBSHN.js.map → chunk-OGCAYLNA.js.map} +0 -0
- /package/dist/{chunk-76GLCM57.js.map → chunk-PMUD7ERF.js.map} +0 -0
- /package/dist/{chunk-IYNGIMVG.js.map → chunk-ZVAYK7GU.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as EngramAccessReviewQueueResponse, A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, b as EngramAccessCapsuleListResponse, M as MemoryPromotionTargetKind, c as MemoryPromotionResult } from './access-service-
|
|
1
|
+
import { E as EngramAccessReviewQueueResponse, A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, b as EngramAccessCapsuleListResponse, M as MemoryPromotionTargetKind, c as MemoryPromotionResult } from './access-service-DbZ1G3zV.js';
|
|
2
2
|
import { D as DreamsPhase, a as DreamsRunResult } from './types-D_fG2ix8.js';
|
|
3
3
|
import { GraphSnapshotRequest, GraphSnapshotResponse } from './graph-snapshot.js';
|
|
4
4
|
import { O as Orchestrator } from './orchestrator-CQJ8U7En.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccessAdminOpsSurface
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { F as EngramAccessService } from './access-service-
|
|
2
|
+
import { F as EngramAccessService } from './access-service-DbZ1G3zV.js';
|
|
3
3
|
import './catalog-BWqHb5HT.js';
|
|
4
4
|
import './types-D_fG2ix8.js';
|
|
5
5
|
import './message-parts/index.js';
|
package/dist/access-boundary.js
CHANGED
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
listRegisteredOperations,
|
|
10
10
|
normalizeOptionalPath
|
|
11
11
|
} from "./chunk-KF5EUVKQ.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-XQDRKZ7V.js";
|
|
13
13
|
import "./chunk-GDASG7NC.js";
|
|
14
14
|
import "./chunk-GDB4J2H3.js";
|
|
15
15
|
import "./chunk-AJ7QCSIS.js";
|
|
16
16
|
import "./chunk-VQ7B2Q6M.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-PJSK6OJM.js";
|
|
18
18
|
import "./chunk-GNVZQ5JN.js";
|
|
19
19
|
import "./chunk-YN2UN7N3.js";
|
|
20
20
|
import "./chunk-JGSKJHF7.js";
|
package/dist/access-cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Orchestrator
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BI2OJF6J.js";
|
|
4
4
|
import "./chunk-5SB7SC2G.js";
|
|
5
5
|
import "./chunk-I74SUMNI.js";
|
|
6
6
|
import "./chunk-ILNPU5W5.js";
|
|
@@ -82,7 +82,7 @@ import "./chunk-6HEM6HTQ.js";
|
|
|
82
82
|
import "./chunk-6QYST5XN.js";
|
|
83
83
|
import "./chunk-YROFNEG5.js";
|
|
84
84
|
import "./chunk-S2FSBU4H.js";
|
|
85
|
-
import "./chunk-
|
|
85
|
+
import "./chunk-PMUD7ERF.js";
|
|
86
86
|
import "./chunk-MMACM5G2.js";
|
|
87
87
|
import "./chunk-54BGIBCR.js";
|
|
88
88
|
import "./chunk-H4CKS5B2.js";
|
|
@@ -179,7 +179,7 @@ import "./chunk-KD3QD3A5.js";
|
|
|
179
179
|
import "./chunk-MYVPLJOO.js";
|
|
180
180
|
import "./chunk-H3FZVNRN.js";
|
|
181
181
|
import "./chunk-KFZY2OFH.js";
|
|
182
|
-
import "./chunk-
|
|
182
|
+
import "./chunk-ZVAYK7GU.js";
|
|
183
183
|
import "./chunk-V7IZKJI3.js";
|
|
184
184
|
import "./chunk-SEDEKFYQ.js";
|
|
185
185
|
import "./chunk-RKNJBZ55.js";
|
|
@@ -192,7 +192,7 @@ import "./chunk-MKQBXQKU.js";
|
|
|
192
192
|
import "./chunk-CXZQOVIE.js";
|
|
193
193
|
import "./chunk-IC2TCZJ2.js";
|
|
194
194
|
import "./chunk-D24OXEPB.js";
|
|
195
|
-
import "./chunk-
|
|
195
|
+
import "./chunk-OGCAYLNA.js";
|
|
196
196
|
import "./chunk-OQJIB32H.js";
|
|
197
197
|
import "./chunk-HNZKVLAN.js";
|
|
198
198
|
import "./chunk-EQWEIIKQ.js";
|
|
@@ -209,12 +209,12 @@ import {
|
|
|
209
209
|
} from "./chunk-KF5EUVKQ.js";
|
|
210
210
|
import {
|
|
211
211
|
EngramAccessService
|
|
212
|
-
} from "./chunk-
|
|
212
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
213
213
|
import "./chunk-GDASG7NC.js";
|
|
214
214
|
import "./chunk-GDB4J2H3.js";
|
|
215
215
|
import "./chunk-AJ7QCSIS.js";
|
|
216
216
|
import "./chunk-VQ7B2Q6M.js";
|
|
217
|
-
import "./chunk-
|
|
217
|
+
import "./chunk-PJSK6OJM.js";
|
|
218
218
|
import "./chunk-GNVZQ5JN.js";
|
|
219
219
|
import "./chunk-YN2UN7N3.js";
|
|
220
220
|
import "./chunk-JGSKJHF7.js";
|
package/dist/access-http.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import { F as EngramAccessService } from './access-service-
|
|
2
|
+
import { F as EngramAccessService } from './access-service-DbZ1G3zV.js';
|
|
3
3
|
import { ResolvedIdentity } from './adapters/types.js';
|
|
4
4
|
import { AdapterRegistry } from './adapters/registry.js';
|
|
5
5
|
import { TokenCapabilities } from './access-token-capabilities.js';
|
package/dist/access-http.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EngramAccessHttpServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZVAYK7GU.js";
|
|
4
4
|
import "./chunk-V7IZKJI3.js";
|
|
5
5
|
import "./chunk-SEDEKFYQ.js";
|
|
6
6
|
import "./chunk-RKNJBZ55.js";
|
|
@@ -13,7 +13,7 @@ import "./chunk-MKQBXQKU.js";
|
|
|
13
13
|
import "./chunk-CXZQOVIE.js";
|
|
14
14
|
import "./chunk-IC2TCZJ2.js";
|
|
15
15
|
import "./chunk-D24OXEPB.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-OGCAYLNA.js";
|
|
17
17
|
import "./chunk-OQJIB32H.js";
|
|
18
18
|
import "./chunk-HNZKVLAN.js";
|
|
19
19
|
import "./chunk-EQWEIIKQ.js";
|
|
@@ -25,12 +25,12 @@ import "./chunk-T4WDJPEZ.js";
|
|
|
25
25
|
import "./chunk-2VEOKUPP.js";
|
|
26
26
|
import "./chunk-5RUE3GHQ.js";
|
|
27
27
|
import "./chunk-KF5EUVKQ.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-XQDRKZ7V.js";
|
|
29
29
|
import "./chunk-GDASG7NC.js";
|
|
30
30
|
import "./chunk-GDB4J2H3.js";
|
|
31
31
|
import "./chunk-AJ7QCSIS.js";
|
|
32
32
|
import "./chunk-VQ7B2Q6M.js";
|
|
33
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-PJSK6OJM.js";
|
|
34
34
|
import "./chunk-GNVZQ5JN.js";
|
|
35
35
|
import "./chunk-YN2UN7N3.js";
|
|
36
36
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccessIdentityContinuitySurface
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { O as Orchestrator } from './orchestrator-CQJ8U7En.js';
|
|
2
|
-
import { d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse } from './access-service-
|
|
2
|
+
import { d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse } from './access-service-DbZ1G3zV.js';
|
|
3
3
|
import './recall-state.js';
|
|
4
4
|
import './utils/serialize-mutations.js';
|
|
5
5
|
import './search/port.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccessLcmSurface
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
package/dist/access-mcp.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Readable, Writable } from 'node:stream';
|
|
2
|
-
import { F as EngramAccessService } from './access-service-
|
|
2
|
+
import { F as EngramAccessService } from './access-service-DbZ1G3zV.js';
|
|
3
3
|
import './catalog-BWqHb5HT.js';
|
|
4
4
|
import './types-D_fG2ix8.js';
|
|
5
5
|
import './message-parts/index.js';
|
package/dist/access-mcp.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-CXZQOVIE.js";
|
|
5
5
|
import "./chunk-IC2TCZJ2.js";
|
|
6
6
|
import "./chunk-D24OXEPB.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-OGCAYLNA.js";
|
|
8
8
|
import "./chunk-OQJIB32H.js";
|
|
9
9
|
import "./chunk-HNZKVLAN.js";
|
|
10
10
|
import "./chunk-EQWEIIKQ.js";
|
|
@@ -16,12 +16,12 @@ import "./chunk-T4WDJPEZ.js";
|
|
|
16
16
|
import "./chunk-2VEOKUPP.js";
|
|
17
17
|
import "./chunk-5RUE3GHQ.js";
|
|
18
18
|
import "./chunk-KF5EUVKQ.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-XQDRKZ7V.js";
|
|
20
20
|
import "./chunk-GDASG7NC.js";
|
|
21
21
|
import "./chunk-GDB4J2H3.js";
|
|
22
22
|
import "./chunk-AJ7QCSIS.js";
|
|
23
23
|
import "./chunk-VQ7B2Q6M.js";
|
|
24
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-PJSK6OJM.js";
|
|
25
25
|
import "./chunk-GNVZQ5JN.js";
|
|
26
26
|
import "./chunk-YN2UN7N3.js";
|
|
27
27
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ValidExplicitCapture } from './explicit-capture.js';
|
|
2
2
|
import { O as Orchestrator } from './orchestrator-CQJ8U7En.js';
|
|
3
|
-
import { C as CodingScopedWriteInput, f as MemoryScopePlan, g as EngramAccessQmdHealthResponse, h as EngramAccessQmdCollectionState, i as EngramAccessMemoryStoreRequest, j as EngramAccessSuggestionSubmitRequest, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessWriteResponse, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse } from './access-service-
|
|
3
|
+
import { C as CodingScopedWriteInput, f as MemoryScopePlan, g as EngramAccessQmdHealthResponse, h as EngramAccessQmdCollectionState, i as EngramAccessMemoryStoreRequest, j as EngramAccessSuggestionSubmitRequest, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessWriteResponse, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse } from './access-service-DbZ1G3zV.js';
|
|
4
4
|
import './types-D_fG2ix8.js';
|
|
5
5
|
import './message-parts/index.js';
|
|
6
6
|
import './bounded-jsonl-state.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccessObserveWriteSurface
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -7,12 +7,12 @@ import "./chunk-35NN3ZFA.js";
|
|
|
7
7
|
import "./chunk-CEN6DW6X.js";
|
|
8
8
|
import "./chunk-T4WDJPEZ.js";
|
|
9
9
|
import "./chunk-KF5EUVKQ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-XQDRKZ7V.js";
|
|
11
11
|
import "./chunk-GDASG7NC.js";
|
|
12
12
|
import "./chunk-GDB4J2H3.js";
|
|
13
13
|
import "./chunk-AJ7QCSIS.js";
|
|
14
14
|
import "./chunk-VQ7B2Q6M.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-PJSK6OJM.js";
|
|
16
16
|
import "./chunk-GNVZQ5JN.js";
|
|
17
17
|
import "./chunk-YN2UN7N3.js";
|
|
18
18
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BoundOperation } from './access-boundary.js';
|
|
2
2
|
import { MemoryStoreRequest } from './access-schema.js';
|
|
3
|
-
import { p as ArchitectureSurfaceRequest, q as ArchitectureSurfaceResponse, D as DecisionSurfaceRequest, r as DecisionSurfaceResponse, s as DeltaSurfaceRequest, t as DeltaSurfaceResponse, u as EngramAccessMemoryResponse, m as EngramAccessWriteResponse, v as CodegraphSurfaceRequest, w as CodegraphSurfaceResponse } from './access-service-
|
|
3
|
+
import { p as ArchitectureSurfaceRequest, q as ArchitectureSurfaceResponse, D as DecisionSurfaceRequest, r as DecisionSurfaceResponse, s as DeltaSurfaceRequest, t as DeltaSurfaceResponse, u as EngramAccessMemoryResponse, m as EngramAccessWriteResponse, v as CodegraphSurfaceRequest, w as CodegraphSurfaceResponse } from './access-service-DbZ1G3zV.js';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import './catalog-BWqHb5HT.js';
|
|
6
6
|
import './types-D_fG2ix8.js';
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
memoryGetOperation,
|
|
23
23
|
memorySearchOperation,
|
|
24
24
|
memoryStoreOperation
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-OGCAYLNA.js";
|
|
26
26
|
import "./chunk-OQJIB32H.js";
|
|
27
27
|
import "./chunk-HNZKVLAN.js";
|
|
28
28
|
import "./chunk-EQWEIIKQ.js";
|
|
@@ -33,12 +33,12 @@ import "./chunk-CEN6DW6X.js";
|
|
|
33
33
|
import "./chunk-T4WDJPEZ.js";
|
|
34
34
|
import "./chunk-2VEOKUPP.js";
|
|
35
35
|
import "./chunk-KF5EUVKQ.js";
|
|
36
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-XQDRKZ7V.js";
|
|
37
37
|
import "./chunk-GDASG7NC.js";
|
|
38
38
|
import "./chunk-GDB4J2H3.js";
|
|
39
39
|
import "./chunk-AJ7QCSIS.js";
|
|
40
40
|
import "./chunk-VQ7B2Q6M.js";
|
|
41
|
-
import "./chunk-
|
|
41
|
+
import "./chunk-PJSK6OJM.js";
|
|
42
42
|
import "./chunk-GNVZQ5JN.js";
|
|
43
43
|
import "./chunk-YN2UN7N3.js";
|
|
44
44
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { x as EngramAccessRecallResponse, y as EngramAccessRecallRequest } from './access-service-
|
|
1
|
+
import { x as EngramAccessRecallResponse, y as EngramAccessRecallRequest } from './access-service-DbZ1G3zV.js';
|
|
2
2
|
import { BudgetReservation, CrossNamespaceBudget } from './cross-namespace-budget.js';
|
|
3
3
|
import './catalog-BWqHb5HT.js';
|
|
4
4
|
import './types-D_fG2ix8.js';
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
leadRecallFlight,
|
|
6
6
|
raceAbort,
|
|
7
7
|
withRecallConcurrency
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
9
9
|
import "./chunk-GDASG7NC.js";
|
|
10
10
|
import "./chunk-GDB4J2H3.js";
|
|
11
11
|
import "./chunk-AJ7QCSIS.js";
|
|
12
12
|
import "./chunk-VQ7B2Q6M.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-PJSK6OJM.js";
|
|
14
14
|
import "./chunk-GNVZQ5JN.js";
|
|
15
15
|
import "./chunk-YN2UN7N3.js";
|
|
16
16
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AccessRecallSurfaceDeps } from './access-recall-surface.js';
|
|
2
|
-
import { y as EngramAccessRecallRequest, x as EngramAccessRecallResponse } from './access-service-
|
|
2
|
+
import { y as EngramAccessRecallRequest, x as EngramAccessRecallResponse } from './access-service-DbZ1G3zV.js';
|
|
3
3
|
import { BudgetDecision } from './cross-namespace-budget.js';
|
|
4
4
|
import { R as RecallPlanMode, b as RecallDisclosure } from './types-D_fG2ix8.js';
|
|
5
5
|
import './access-audit.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assembleRecallResponse
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -5,7 +5,7 @@ import { LastRecallSnapshot } from './recall-state.js';
|
|
|
5
5
|
import { RecallXraySnapshot } from './recall-xray.js';
|
|
6
6
|
import { b as RecallDisclosure, R as RecallPlanMode, M as MemoryFile } from './types-D_fG2ix8.js';
|
|
7
7
|
import { S as StorageManager } from './storage-NIyKYD8g.js';
|
|
8
|
-
import { x as EngramAccessRecallResponse, z as EngramAccessMemorySummary, B as EngramAccessSetCodingContextRequest, y as EngramAccessRecallRequest } from './access-service-
|
|
8
|
+
import { x as EngramAccessRecallResponse, z as EngramAccessMemorySummary, B as EngramAccessSetCodingContextRequest, y as EngramAccessRecallRequest } from './access-service-DbZ1G3zV.js';
|
|
9
9
|
import './recall-audit.js';
|
|
10
10
|
import './recall-audit-anomaly.js';
|
|
11
11
|
import './briefing.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AccessRecallSurface
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
4
4
|
import "./chunk-GDASG7NC.js";
|
|
5
5
|
import "./chunk-GDB4J2H3.js";
|
|
6
6
|
import "./chunk-AJ7QCSIS.js";
|
|
7
7
|
import "./chunk-VQ7B2Q6M.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-PJSK6OJM.js";
|
|
9
9
|
import "./chunk-GNVZQ5JN.js";
|
|
10
10
|
import "./chunk-YN2UN7N3.js";
|
|
11
11
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -1502,11 +1502,10 @@ interface EngramAccessWriteEnvelope {
|
|
|
1502
1502
|
idempotencyKey?: string;
|
|
1503
1503
|
dryRun?: boolean;
|
|
1504
1504
|
sessionKey?: string;
|
|
1505
|
-
/**
|
|
1506
|
-
* Trusted transport-bound principal. This must never come from untrusted client payloads.
|
|
1507
|
-
* When present, write authorization is evaluated against this principal instead of sessionKey.
|
|
1508
|
-
*/
|
|
1505
|
+
/** Trusted transport-bound principal (never from client payloads); authorizes writes instead of sessionKey. */
|
|
1509
1506
|
authenticatedPrincipal?: string;
|
|
1507
|
+
/** When set, an ACL rejection is NOT dead-lettered (#1888) so `remnic quarantine replay` can re-submit through this same surface without re-quarantining and duplicating the parked record. */
|
|
1508
|
+
readonly suppressQuarantine?: boolean;
|
|
1510
1509
|
}
|
|
1511
1510
|
/**
|
|
1512
1511
|
* Optional git/project context for project-scoped writes (#1434). When no
|
|
@@ -1616,6 +1615,7 @@ interface EngramAccessObserveRequest extends SourceConnectorProvenance {
|
|
|
1616
1615
|
* Creates a `CodingContext` with `projectId: "tag:<projectTag>"`.
|
|
1617
1616
|
*/
|
|
1618
1617
|
projectTag?: string;
|
|
1618
|
+
readonly suppressQuarantine?: boolean;
|
|
1619
1619
|
}
|
|
1620
1620
|
/**
|
|
1621
1621
|
* Additive diagnostic view of the effective {@link MemoryScopePlan} resolved for
|
package/dist/access-service.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, C as CodingScopedWriteInput, L as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, N as EngramAccessActionConfidenceRequest, O as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, b as EngramAccessCapsuleListResponse, Q as EngramAccessDaySummaryRequest, R as EngramAccessEntityListResponse, S as EngramAccessEntityResponse, T as EngramAccessEntitySummary, U as EngramAccessHealthResponse, V as EngramAccessLcmCompactionFlushRequest, W as EngramAccessLcmCompactionFlushResponse, X as EngramAccessLcmCompactionRecordRequest, Y as EngramAccessLcmCompactionRecordResponse, d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse, Z as EngramAccessLcmStatusResponse, _ as EngramAccessMaintenanceResponse, $ as EngramAccessMemoryBrowseRequest, a0 as EngramAccessMemoryBrowseResponse, a1 as EngramAccessMemoryRecord, u as EngramAccessMemoryResponse, i as EngramAccessMemoryStoreRequest, z as EngramAccessMemorySummary, a2 as EngramAccessObserveMessage, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse, a3 as EngramAccessOfflineSyncApplyFileContentRequest, a4 as EngramAccessOfflineSyncApplyFileContentResponse, a5 as EngramAccessOfflineSyncApplyRequest, a6 as EngramAccessOfflineSyncApplyResponse, a7 as EngramAccessOfflineSyncFileContentRequest, a8 as EngramAccessOfflineSyncFileContentResponse, a9 as EngramAccessOfflineSyncFilesRequest, aa as EngramAccessOfflineSyncFilesResponse, ab as EngramAccessOfflineSyncSnapshotRequest, ac as EngramAccessOfflineSyncSnapshotResponse, ad as EngramAccessOfflineSyncSnapshotStreamResponse, h as EngramAccessQmdCollectionState, g as EngramAccessQmdHealthResponse, ae as EngramAccessQualityResponse, af as EngramAccessRecallExplainRequest, ag as EngramAccessRecallExplainResponse, y as EngramAccessRecallRequest, x as EngramAccessRecallResponse, ah as EngramAccessReviewDispositionRequest, ai as EngramAccessReviewDispositionResponse, E as EngramAccessReviewQueueResponse, aj as EngramAccessScopeDebug, F as EngramAccessService, B as EngramAccessSetCodingContextRequest, j as EngramAccessSuggestionSubmitRequest, ak as EngramAccessTimelineResponse, al as EngramAccessTrustZoneBrowseRequest, am as EngramAccessTrustZoneBrowseResponse, an as EngramAccessTrustZoneDemoSeedRequest, ao as EngramAccessTrustZoneDemoSeedResponse, ap as EngramAccessTrustZonePromoteRequest, aq as EngramAccessTrustZonePromoteResponse, ar as EngramAccessTrustZoneRecordSummary, as as EngramAccessTrustZoneStatusResponse, at as EngramAccessWriteEnvelope, m as EngramAccessWriteResponse, f as MemoryScopePlan, au as buildProjectedGovernanceProposedActions, av as hasGroupedGovernanceActions, aw as shapeMemorySummary } from './access-service-
|
|
1
|
+
export { A as AccessProfilingReportRequest, a as AccessProfilingReportResponse, C as CodingScopedWriteInput, L as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, N as EngramAccessActionConfidenceRequest, O as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, b as EngramAccessCapsuleListResponse, Q as EngramAccessDaySummaryRequest, R as EngramAccessEntityListResponse, S as EngramAccessEntityResponse, T as EngramAccessEntitySummary, U as EngramAccessHealthResponse, V as EngramAccessLcmCompactionFlushRequest, W as EngramAccessLcmCompactionFlushResponse, X as EngramAccessLcmCompactionRecordRequest, Y as EngramAccessLcmCompactionRecordResponse, d as EngramAccessLcmSearchRequest, e as EngramAccessLcmSearchResponse, Z as EngramAccessLcmStatusResponse, _ as EngramAccessMaintenanceResponse, $ as EngramAccessMemoryBrowseRequest, a0 as EngramAccessMemoryBrowseResponse, a1 as EngramAccessMemoryRecord, u as EngramAccessMemoryResponse, i as EngramAccessMemoryStoreRequest, z as EngramAccessMemorySummary, a2 as EngramAccessObserveMessage, n as EngramAccessObserveRequest, o as EngramAccessObserveResponse, a3 as EngramAccessOfflineSyncApplyFileContentRequest, a4 as EngramAccessOfflineSyncApplyFileContentResponse, a5 as EngramAccessOfflineSyncApplyRequest, a6 as EngramAccessOfflineSyncApplyResponse, a7 as EngramAccessOfflineSyncFileContentRequest, a8 as EngramAccessOfflineSyncFileContentResponse, a9 as EngramAccessOfflineSyncFilesRequest, aa as EngramAccessOfflineSyncFilesResponse, ab as EngramAccessOfflineSyncSnapshotRequest, ac as EngramAccessOfflineSyncSnapshotResponse, ad as EngramAccessOfflineSyncSnapshotStreamResponse, h as EngramAccessQmdCollectionState, g as EngramAccessQmdHealthResponse, ae as EngramAccessQualityResponse, af as EngramAccessRecallExplainRequest, ag as EngramAccessRecallExplainResponse, y as EngramAccessRecallRequest, x as EngramAccessRecallResponse, ah as EngramAccessReviewDispositionRequest, ai as EngramAccessReviewDispositionResponse, E as EngramAccessReviewQueueResponse, aj as EngramAccessScopeDebug, F as EngramAccessService, B as EngramAccessSetCodingContextRequest, j as EngramAccessSuggestionSubmitRequest, ak as EngramAccessTimelineResponse, al as EngramAccessTrustZoneBrowseRequest, am as EngramAccessTrustZoneBrowseResponse, an as EngramAccessTrustZoneDemoSeedRequest, ao as EngramAccessTrustZoneDemoSeedResponse, ap as EngramAccessTrustZonePromoteRequest, aq as EngramAccessTrustZonePromoteResponse, ar as EngramAccessTrustZoneRecordSummary, as as EngramAccessTrustZoneStatusResponse, at as EngramAccessWriteEnvelope, m as EngramAccessWriteResponse, f as MemoryScopePlan, au as buildProjectedGovernanceProposedActions, av as hasGroupedGovernanceActions, aw as shapeMemorySummary } from './access-service-DbZ1G3zV.js';
|
|
2
2
|
import './storage-NIyKYD8g.js';
|
|
3
3
|
import './types-B1VHaf2w.js';
|
|
4
4
|
import './recall-explain-renderer.js';
|
package/dist/access-service.js
CHANGED
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
buildProjectedGovernanceProposedActions,
|
|
5
5
|
hasGroupedGovernanceActions,
|
|
6
6
|
shapeMemorySummary
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
8
8
|
import "./chunk-GDASG7NC.js";
|
|
9
9
|
import "./chunk-GDB4J2H3.js";
|
|
10
10
|
import "./chunk-AJ7QCSIS.js";
|
|
11
11
|
import "./chunk-VQ7B2Q6M.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-PJSK6OJM.js";
|
|
13
13
|
import "./chunk-GNVZQ5JN.js";
|
|
14
14
|
import "./chunk-YN2UN7N3.js";
|
|
15
15
|
import "./chunk-JGSKJHF7.js";
|
|
@@ -329,7 +329,7 @@ import {
|
|
|
329
329
|
clusterByKey,
|
|
330
330
|
createCorrectionService,
|
|
331
331
|
detectPassiveCorrections
|
|
332
|
-
} from "./chunk-
|
|
332
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
333
333
|
import {
|
|
334
334
|
importCapsule
|
|
335
335
|
} from "./chunk-AJ7QCSIS.js";
|
|
@@ -24002,4 +24002,4 @@ export {
|
|
|
24002
24002
|
blendGraphExpandedRecallScore,
|
|
24003
24003
|
Orchestrator
|
|
24004
24004
|
};
|
|
24005
|
-
//# sourceMappingURL=chunk-
|
|
24005
|
+
//# sourceMappingURL=chunk-BI2OJF6J.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
DECISION_SUBCOMMANDS,
|
|
10
10
|
DELTA_SUBCOMMANDS,
|
|
11
11
|
isCodegraphToolName
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
13
13
|
import {
|
|
14
14
|
serializeMutations,
|
|
15
15
|
withHeldFileLock
|
|
@@ -1807,4 +1807,4 @@ export {
|
|
|
1807
1807
|
codegraphIngestTracesOperation,
|
|
1808
1808
|
REGISTERED_OPERATIONS
|
|
1809
1809
|
};
|
|
1810
|
-
//# sourceMappingURL=chunk-
|
|
1810
|
+
//# sourceMappingURL=chunk-OGCAYLNA.js.map
|
|
@@ -75,12 +75,13 @@ var WriteQuarantineStore = class {
|
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* All valid, non-expired quarantined records across every principal, oldest
|
|
78
|
-
* first
|
|
79
|
-
*
|
|
78
|
+
* first, each paired with its absolute on-disk path. Expired records are
|
|
79
|
+
* deleted on read (lazy GC), so an inactive principal bucket with no
|
|
80
|
+
* follow-up write is still bounded by age.
|
|
80
81
|
*/
|
|
81
|
-
async
|
|
82
|
+
async entries() {
|
|
82
83
|
const now = Date.now();
|
|
83
|
-
const
|
|
84
|
+
const entries = [];
|
|
84
85
|
for (const dir of await this.principalDirs()) {
|
|
85
86
|
for (const file of await this.entryFiles(dir)) {
|
|
86
87
|
const info = await stat(file).catch(() => null);
|
|
@@ -96,11 +97,46 @@ var WriteQuarantineStore = class {
|
|
|
96
97
|
} catch {
|
|
97
98
|
continue;
|
|
98
99
|
}
|
|
99
|
-
if (isQuarantinedRecord(parsed))
|
|
100
|
+
if (isQuarantinedRecord(parsed)) entries.push({ record: parsed, path: file });
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
|
-
|
|
103
|
-
|
|
103
|
+
entries.sort((a, b) => {
|
|
104
|
+
const at = a.record.timestamp;
|
|
105
|
+
const bt = b.record.timestamp;
|
|
106
|
+
return at < bt ? -1 : at > bt ? 1 : 0;
|
|
107
|
+
});
|
|
108
|
+
return entries;
|
|
109
|
+
}
|
|
110
|
+
/** As {@link entries} but projected to records only (backward-compatible view). */
|
|
111
|
+
async list() {
|
|
112
|
+
return (await this.entries()).map((entry) => entry.record);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Delete one quarantined entry by its absolute on-disk path (as returned by
|
|
116
|
+
* {@link entries}). The path MUST resolve inside the quarantine root, mirroring
|
|
117
|
+
* the store's containment posture; a path outside the root — or one already
|
|
118
|
+
* absent — removes nothing. Returns true only when a file was actually deleted.
|
|
119
|
+
*/
|
|
120
|
+
async removeEntry(entryPath) {
|
|
121
|
+
const rootAbs = path.resolve(this.root);
|
|
122
|
+
const rel = path.relative(rootAbs, path.resolve(entryPath));
|
|
123
|
+
if (rel === "" || rel === ".." || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
let safe;
|
|
127
|
+
try {
|
|
128
|
+
safe = await resolveSafeStoragePath(rootAbs, rel);
|
|
129
|
+
} catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
await rm(safe, { force: false });
|
|
134
|
+
return true;
|
|
135
|
+
} catch (err) {
|
|
136
|
+
const errno = err;
|
|
137
|
+
if (errno?.code === "ENOENT") return false;
|
|
138
|
+
throw err;
|
|
139
|
+
}
|
|
104
140
|
}
|
|
105
141
|
/** Total valid, non-expired quarantined record count across every principal. */
|
|
106
142
|
async count() {
|
|
@@ -162,4 +198,4 @@ export {
|
|
|
162
198
|
DEFAULT_QUARANTINE_CAPS,
|
|
163
199
|
WriteQuarantineStore
|
|
164
200
|
};
|
|
165
|
-
//# sourceMappingURL=chunk-
|
|
201
|
+
//# sourceMappingURL=chunk-PJSK6OJM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/write-quarantine.ts"],"sourcesContent":["/**\n * Dead-letter quarantine for writes rejected by the namespace write-ACL\n * (issue #1888).\n *\n * When `observe` / `memory_store` / `suggestion_submit` fail namespace\n * authorization, the payload used to be dropped with no recoverable copy: a\n * client configured with a namespace that matches no policy (and is not the\n * default/shared namespace) had every write in the window silently destroyed.\n * The ACL rejection is CORRECT and stays fail-closed; this store only\n * preserves the payload so it can be replayed after the config is fixed,\n * following the AGENTS.md \"reject loudly but never destroy state\" posture\n * (patterns 14/42).\n *\n * Records live OUTSIDE any memory namespace at\n * `<memoryDir>/state/quarantine/<principalSafe>/<timestamp>-<id>.json`, keyed\n * by the encoded principal, and are bounded per principal by count and age.\n * Every path is resolved from `memoryDir` through `resolveSafeStoragePath`, so\n * a symlinked `state`/`quarantine` cannot redirect writes outside the memory\n * directory. The store never re-routes a payload into a writable namespace.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { Dirent } from \"node:fs\";\nimport { lstat, mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { encodeStoragePathSegment, resolveSafeStoragePath } from \"./storage-paths.js\";\n\nexport type QuarantineOperation = \"observe\" | \"memory_store\" | \"suggestion_submit\";\n\nexport interface QuarantineEntryInput {\n operation: QuarantineOperation;\n /** Authenticated principal the write was attributed to, if any. */\n principal: string | undefined;\n /** Namespace the caller attempted to write and was denied. */\n attemptedNamespace: string;\n /** The original request payload, preserved verbatim for replay. */\n payload: unknown;\n /** ISO timestamp; defaults to now. Injectable for deterministic tests. */\n timestamp?: string;\n}\n\nexport interface QuarantinedRecord {\n operation: QuarantineOperation;\n principal: string | null;\n attemptedNamespace: string;\n timestamp: string;\n payload: unknown;\n}\n\n/** A quarantined record paired with the absolute on-disk path it was read from. */\nexport interface QuarantineEntry {\n record: QuarantinedRecord;\n path: string;\n}\n\nexport interface QuarantineCaps {\n /** Keep at most this many records per principal (newest win). */\n maxEntriesPerPrincipal: number;\n /** Drop records older than this many milliseconds. */\n maxAgeMs: number;\n}\n\nexport const DEFAULT_QUARANTINE_CAPS: QuarantineCaps = {\n maxEntriesPerPrincipal: 500,\n maxAgeMs: 14 * 24 * 60 * 60 * 1000,\n};\n\nconst QUARANTINE_DIRNAME = \"quarantine\";\n\nfunction validateCaps(caps: QuarantineCaps): void {\n if (!Number.isInteger(caps.maxEntriesPerPrincipal) || caps.maxEntriesPerPrincipal < 1) {\n throw new Error(\n `WriteQuarantineStore: maxEntriesPerPrincipal must be a positive integer (got ${caps.maxEntriesPerPrincipal})`\n );\n }\n if (!Number.isFinite(caps.maxAgeMs) || caps.maxAgeMs <= 0) {\n throw new Error(\n `WriteQuarantineStore: maxAgeMs must be a positive finite number of milliseconds (got ${caps.maxAgeMs})`\n );\n }\n}\n\nfunction isQuarantinedRecord(value: unknown): value is QuarantinedRecord {\n if (!value || typeof value !== \"object\") return false;\n const record = value as Record<string, unknown>;\n return (\n (record.operation === \"observe\" ||\n record.operation === \"memory_store\" ||\n record.operation === \"suggestion_submit\") &&\n (record.principal === null || typeof record.principal === \"string\") &&\n typeof record.attemptedNamespace === \"string\" &&\n typeof record.timestamp === \"string\" &&\n \"payload\" in record\n );\n}\n\nexport class WriteQuarantineStore {\n private readonly memoryDir: string;\n\n constructor(\n memoryDir: string,\n private readonly caps: QuarantineCaps = DEFAULT_QUARANTINE_CAPS\n ) {\n validateCaps(caps);\n this.memoryDir = path.resolve(memoryDir);\n }\n\n /** Absolute quarantine root (`<memoryDir>/state/quarantine`). */\n get root(): string {\n return path.join(this.memoryDir, \"state\", QUARANTINE_DIRNAME);\n }\n\n /**\n * Resolve a path under the quarantine root, checked for containment and\n * symlink traversal from `memoryDir` down — so a symlinked `state` or\n * `quarantine` component that escapes the memory directory is rejected.\n */\n private safeDir(...segments: string[]): Promise<string> {\n return resolveSafeStoragePath(this.memoryDir, \"state\", QUARANTINE_DIRNAME, ...segments);\n }\n\n /**\n * Park a rejected write. Returns the absolute path of the record written.\n * Prunes the principal's bucket to the configured caps afterward.\n */\n async quarantine(input: QuarantineEntryInput): Promise<string> {\n const timestamp = input.timestamp ?? new Date().toISOString();\n const record: QuarantinedRecord = {\n operation: input.operation,\n principal: input.principal ?? null,\n attemptedNamespace: input.attemptedNamespace,\n timestamp,\n payload: input.payload,\n };\n const principalSegment = encodeStoragePathSegment(input.principal ?? \"unknown\");\n const fileName = `${timestamp.replace(/[:.]/g, \"-\")}-${randomUUID().slice(0, 8)}.json`;\n\n const dir = await this.safeDir(principalSegment);\n await mkdir(dir, { recursive: true });\n // The temp write uses the exclusive `wx` flag so a pre-planted symlink at\n // the temp name can never be followed (O_EXCL); rename is atomic (rule 42).\n const finalPath = await this.safeDir(principalSegment, fileName);\n const tmpPath = await this.safeDir(principalSegment, `${fileName}.tmp`);\n await writeFile(tmpPath, JSON.stringify(record, null, 2), { encoding: \"utf8\", flag: \"wx\" });\n await rename(tmpPath, finalPath);\n\n await this.pruneDir(dir);\n return finalPath;\n }\n\n /**\n * All valid, non-expired quarantined records across every principal, oldest\n * first, each paired with its absolute on-disk path. Expired records are\n * deleted on read (lazy GC), so an inactive principal bucket with no\n * follow-up write is still bounded by age.\n */\n async entries(): Promise<QuarantineEntry[]> {\n const now = Date.now();\n const entries: QuarantineEntry[] = [];\n for (const dir of await this.principalDirs()) {\n for (const file of await this.entryFiles(dir)) {\n const info = await stat(file).catch(() => null);\n if (!info) continue;\n if (now - info.mtimeMs > this.caps.maxAgeMs) {\n await rm(file, { force: true }).catch(() => {});\n continue;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(await readFile(file, \"utf8\"));\n } catch {\n continue;\n }\n if (isQuarantinedRecord(parsed)) entries.push({ record: parsed, path: file });\n }\n }\n entries.sort((a, b) => {\n const at = a.record.timestamp;\n const bt = b.record.timestamp;\n return at < bt ? -1 : at > bt ? 1 : 0;\n });\n return entries;\n }\n\n /** As {@link entries} but projected to records only (backward-compatible view). */\n async list(): Promise<QuarantinedRecord[]> {\n return (await this.entries()).map((entry) => entry.record);\n }\n\n /**\n * Delete one quarantined entry by its absolute on-disk path (as returned by\n * {@link entries}). The path MUST resolve inside the quarantine root, mirroring\n * the store's containment posture; a path outside the root — or one already\n * absent — removes nothing. Returns true only when a file was actually deleted.\n */\n async removeEntry(entryPath: string): Promise<boolean> {\n const rootAbs = path.resolve(this.root);\n const rel = path.relative(rootAbs, path.resolve(entryPath));\n if (rel === \"\" || rel === \"..\" || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) {\n return false;\n }\n // Symlink-race-safe resolution (issue #1888): resolveSafeStoragePath rejects\n // any symlinked path component and verifies the REAL path stays inside the\n // real quarantine root before we touch it, so a swapped component cannot\n // redirect the deletion outside the store — lexical containment alone is not\n // sufficient against a TOCTOU symlink swap.\n let safe: string;\n try {\n safe = await resolveSafeStoragePath(rootAbs, rel);\n } catch {\n return false;\n }\n try {\n await rm(safe, { force: false });\n return true;\n } catch (err) {\n const errno = err as NodeJS.ErrnoException;\n if (errno?.code === \"ENOENT\") return false;\n throw err;\n }\n }\n\n /** Total valid, non-expired quarantined record count across every principal. */\n async count(): Promise<number> {\n return (await this.list()).length;\n }\n\n /** lstat (no symlink follow): true only for a real directory. */\n private async isRealDir(dir: string): Promise<boolean> {\n const info = await lstat(dir).catch(() => null);\n return info?.isDirectory() === true;\n }\n\n private async principalDirs(): Promise<string[]> {\n // safeDir() rejects a symlinked/containment-escaping root — let that\n // propagate instead of masquerading as an empty store.\n const root = await this.safeDir();\n if (!(await this.isRealDir(root))) return [];\n let entries: Dirent[];\n try {\n entries = await readdir(root, { withFileTypes: true });\n } catch (err) {\n // Root vanished mid-scan → legitimately empty. Any other failure\n // (permissions, IO) is a genuine inspection failure and must surface.\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return [];\n throw err;\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(root, entry.name))\n .sort();\n }\n\n private async entryFiles(dir: string): Promise<string[]> {\n if (!(await this.isRealDir(dir))) return [];\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return [];\n throw err;\n }\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n .map((entry) => path.join(dir, entry.name))\n .sort();\n }\n\n private async pruneDir(dir: string): Promise<void> {\n const files = await this.entryFiles(dir);\n const now = Date.now();\n const survivors: Array<{ path: string; mtimeMs: number }> = [];\n for (const file of files) {\n const info = await stat(file).catch(() => null);\n if (!info) continue;\n if (now - info.mtimeMs > this.caps.maxAgeMs) {\n await rm(file, { force: true }).catch(() => {});\n continue;\n }\n survivors.push({ path: file, mtimeMs: info.mtimeMs });\n }\n const surplus = survivors.length - this.caps.maxEntriesPerPrincipal;\n if (surplus <= 0) return;\n survivors.sort((a, b) => a.mtimeMs - b.mtimeMs || (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));\n for (const victim of survivors.slice(0, surplus)) {\n await rm(victim.path, { force: true }).catch(() => {});\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -210,7 +210,7 @@ import {
|
|
|
210
210
|
} from "./chunk-EEC7UJPX.js";
|
|
211
211
|
import {
|
|
212
212
|
EngramAccessHttpServer
|
|
213
|
-
} from "./chunk-
|
|
213
|
+
} from "./chunk-ZVAYK7GU.js";
|
|
214
214
|
import {
|
|
215
215
|
WearablesInputError
|
|
216
216
|
} from "./chunk-V7IZKJI3.js";
|
|
@@ -229,7 +229,7 @@ import {
|
|
|
229
229
|
} from "./chunk-OADWQ5CR.js";
|
|
230
230
|
import {
|
|
231
231
|
EngramAccessService
|
|
232
|
-
} from "./chunk-
|
|
232
|
+
} from "./chunk-XQDRKZ7V.js";
|
|
233
233
|
import {
|
|
234
234
|
WorkStorage
|
|
235
235
|
} from "./chunk-GDB4J2H3.js";
|
|
@@ -7650,4 +7650,4 @@ export {
|
|
|
7650
7650
|
listMemoryMarkdownFilePaths,
|
|
7651
7651
|
registerCli
|
|
7652
7652
|
};
|
|
7653
|
-
//# sourceMappingURL=chunk-
|
|
7653
|
+
//# sourceMappingURL=chunk-PMUD7ERF.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-AJ7QCSIS.js";
|
|
12
12
|
import {
|
|
13
13
|
WriteQuarantineStore
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PJSK6OJM.js";
|
|
15
15
|
import {
|
|
16
16
|
trustResultFor
|
|
17
17
|
} from "./chunk-GNVZQ5JN.js";
|
|
@@ -5464,7 +5464,7 @@ var AccessObserveWriteSurface = class {
|
|
|
5464
5464
|
try {
|
|
5465
5465
|
namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
|
|
5466
5466
|
} catch (err) {
|
|
5467
|
-
if (request.dryRun !== true) {
|
|
5467
|
+
if (request.dryRun !== true && request.suppressQuarantine !== true) {
|
|
5468
5468
|
await this.parkRejectedWrite(err, "memory_store", request);
|
|
5469
5469
|
}
|
|
5470
5470
|
throw err;
|
|
@@ -5534,7 +5534,7 @@ var AccessObserveWriteSurface = class {
|
|
|
5534
5534
|
try {
|
|
5535
5535
|
namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
|
|
5536
5536
|
} catch (err) {
|
|
5537
|
-
if (request.dryRun !== true) {
|
|
5537
|
+
if (request.dryRun !== true && request.suppressQuarantine !== true) {
|
|
5538
5538
|
await this.parkRejectedWrite(err, "suggestion_submit", request);
|
|
5539
5539
|
}
|
|
5540
5540
|
throw err;
|
|
@@ -5622,7 +5622,9 @@ var AccessObserveWriteSurface = class {
|
|
|
5622
5622
|
try {
|
|
5623
5623
|
scope = await this.deps.resolveMemoryScopePlan(request);
|
|
5624
5624
|
} catch (err) {
|
|
5625
|
-
|
|
5625
|
+
if (request.suppressQuarantine !== true) {
|
|
5626
|
+
await this.parkRejectedWrite(err, "observe", request);
|
|
5627
|
+
}
|
|
5626
5628
|
throw err;
|
|
5627
5629
|
}
|
|
5628
5630
|
const writeNamespace = scope.writeNamespace;
|
|
@@ -11977,4 +11979,4 @@ export {
|
|
|
11977
11979
|
EngramAccessService,
|
|
11978
11980
|
AccessAdminOpsSurface
|
|
11979
11981
|
};
|
|
11980
|
-
//# sourceMappingURL=chunk-
|
|
11982
|
+
//# sourceMappingURL=chunk-XQDRKZ7V.js.map
|