@remnic/core 9.63.2 → 9.63.4
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 +4 -4
- package/dist/access-admin-ops-surface.js +1 -1
- package/dist/access-authorization-probe.d.ts +4 -4
- package/dist/access-authorization-probe.js +2 -2
- package/dist/access-boundary.d.ts +4 -4
- package/dist/access-boundary.js +1 -1
- package/dist/access-cli.js +19 -18
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.d.ts +4 -4
- package/dist/access-extraction-force-flush.js +1 -1
- package/dist/access-http-lcm-compaction.d.ts +4 -4
- package/dist/access-http-lifecycle-flush.d.ts +4 -4
- package/dist/access-http-offline-stream.d.ts +4 -4
- package/dist/access-http-query.d.ts +13 -1
- package/dist/access-http-query.js +5 -2
- package/dist/access-http.d.ts +5 -5
- package/dist/access-http.js +12 -11
- package/dist/access-identity-continuity-surface.d.ts +3 -3
- package/dist/access-identity-continuity-surface.js +1 -1
- package/dist/access-lcm-surface.d.ts +4 -4
- package/dist/access-lcm-surface.js +1 -1
- package/dist/access-mcp.d.ts +4 -4
- package/dist/access-mcp.js +6 -6
- package/dist/access-namespace-preflight.js +1 -1
- package/dist/access-observe-write-surface.d.ts +4 -4
- package/dist/access-observe-write-surface.js +1 -1
- package/dist/access-offline-manifest.d.ts +3 -3
- package/dist/access-operations-batch.js +2 -2
- package/dist/access-operations.d.ts +4 -4
- package/dist/access-operations.js +5 -5
- package/dist/access-recall-concurrency.d.ts +4 -4
- package/dist/access-recall-concurrency.js +1 -1
- package/dist/access-recall-response.d.ts +4 -4
- package/dist/access-recall-response.js +1 -1
- package/dist/access-recall-surface.d.ts +4 -4
- package/dist/access-recall-surface.js +1 -1
- package/dist/{access-service-DBpEnlzA.d.ts → access-service-D-bi3r01.d.ts} +2 -8
- package/dist/access-service-helpers.d.ts +4 -4
- package/dist/access-service.d.ts +4 -4
- package/dist/access-service.js +1 -1
- package/dist/access-surface-catalog.d.ts +4 -4
- package/dist/access-surface-catalog.js +3 -3
- package/dist/bootstrap.d.ts +3 -3
- package/dist/buffer.js +1 -1
- package/dist/{catalog-CyYTf_ok.d.ts → catalog-BYIHQw1l.d.ts} +2 -10
- package/dist/{chunk-JJ7JW62R.js → chunk-2JL7WPXL.js} +1 -11
- package/dist/chunk-2JL7WPXL.js.map +1 -0
- package/dist/{chunk-AJSZ2EK6.js → chunk-3USQWITL.js} +2 -2
- package/dist/{chunk-RYGJGXL6.js → chunk-4EDAHS6D.js} +2 -2
- package/dist/{chunk-5W5N7XJZ.js → chunk-A4HXWNST.js} +19 -752
- package/dist/chunk-A4HXWNST.js.map +1 -0
- package/dist/{chunk-KWN6NOHQ.js → chunk-BXOZALJ6.js} +2 -2
- package/dist/{chunk-6F2UMP4H.js → chunk-CKWOMJDY.js} +2 -2
- package/dist/{chunk-MR5HWQHS.js → chunk-DFEYRCG2.js} +2 -2
- package/dist/{chunk-6UZR7KEK.js → chunk-DQV3LUQL.js} +7 -1
- package/dist/chunk-DQV3LUQL.js.map +1 -0
- package/dist/{chunk-EJQXDKYK.js → chunk-EJCN5ATI.js} +3 -3
- package/dist/{chunk-TRPX6F2G.js → chunk-GNKY5JEP.js} +10 -13
- package/dist/chunk-GNKY5JEP.js.map +1 -0
- package/dist/{chunk-XZPSBGHA.js → chunk-ISFUFLFM.js} +2 -2
- package/dist/{chunk-4NMVX5U7.js → chunk-JSH2TV34.js} +2 -2
- package/dist/{chunk-R74NCKEY.js → chunk-LNFYISZ6.js} +2 -2
- package/dist/{chunk-6ZYQ36IB.js → chunk-MRJ43KSG.js} +15 -2
- package/dist/chunk-MRJ43KSG.js.map +1 -0
- package/dist/{chunk-IM56VPKO.js → chunk-OR7KEGLR.js} +2 -2
- package/dist/{chunk-A73QHOZP.js → chunk-QOMUE4FS.js} +2 -2
- package/dist/chunk-RSLRGRBJ.js +727 -0
- package/dist/chunk-RSLRGRBJ.js.map +1 -0
- package/dist/{chunk-44KHFMCM.js → chunk-VG6DC2GO.js} +32 -17
- package/dist/{chunk-44KHFMCM.js.map → chunk-VG6DC2GO.js.map} +1 -1
- package/dist/{chunk-5UFQCU6M.js → chunk-ZUZD2DRV.js} +5 -5
- package/dist/{cli-DJwNNDL1.d.ts → cli-DEoABKXH.d.ts} +2 -2
- package/dist/cli.d.ts +5 -5
- package/dist/cli.js +15 -14
- package/dist/explicit-capture.d.ts +3 -3
- package/dist/external-wiki-access.d.ts +4 -4
- package/dist/external-wiki-access.js +2 -2
- package/dist/external-wiki-mcp-tools.d.ts +4 -4
- package/dist/index.d.ts +8 -8
- package/dist/index.js +21 -20
- package/dist/{maintenance-uJb74j64.d.ts → maintenance-N5ur13Al.d.ts} +1 -1
- package/dist/mcp-memory-inspector-app.d.ts +4 -4
- package/dist/namespaces/migrate.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +1 -1
- package/dist/operator-toolkit.js +3 -2
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +3 -2
- package/dist/{orchestrator-CFi-5JSR.d.ts → orchestrator-ByLrpav4.d.ts} +2 -2
- package/dist/orchestrator.d.ts +3 -3
- package/dist/orchestrator.js +19 -18
- package/dist/{public-http-43z1YT-k.d.ts → public-http-DusietP2.d.ts} +1 -1
- package/dist/support-passport/index.d.ts +7 -7
- package/dist/support-passport/index.js +4 -4
- package/package.json +2 -2
- package/src/access-http-query.ts +12 -0
- package/src/access-http.test.ts +32 -0
- package/src/access-http.ts +3 -7
- package/src/admin/admin-surfaces.test.ts +5 -10
- package/src/admin/admin-surfaces.ts +0 -16
- package/src/binary-lifecycle/pipeline.test.ts +1 -1
- package/src/binary-lifecycle/pipeline.ts +23 -9
- package/src/buffer.ts +6 -0
- package/src/maintenance/namespace-planner.ts +0 -2
- package/src/namespaces/catalog.test.ts +53 -8
- package/src/namespaces/catalog.ts +5 -37
- package/src/orchestration/turn-ingestion-snapshot.test.ts +167 -0
- package/src/orchestration/turn-ingestion.ts +2 -1
- package/dist/chunk-5W5N7XJZ.js.map +0 -1
- package/dist/chunk-6UZR7KEK.js.map +0 -1
- package/dist/chunk-6ZYQ36IB.js.map +0 -1
- package/dist/chunk-JJ7JW62R.js.map +0 -1
- package/dist/chunk-TRPX6F2G.js.map +0 -1
- /package/dist/{chunk-AJSZ2EK6.js.map → chunk-3USQWITL.js.map} +0 -0
- /package/dist/{chunk-RYGJGXL6.js.map → chunk-4EDAHS6D.js.map} +0 -0
- /package/dist/{chunk-KWN6NOHQ.js.map → chunk-BXOZALJ6.js.map} +0 -0
- /package/dist/{chunk-6F2UMP4H.js.map → chunk-CKWOMJDY.js.map} +0 -0
- /package/dist/{chunk-MR5HWQHS.js.map → chunk-DFEYRCG2.js.map} +0 -0
- /package/dist/{chunk-EJQXDKYK.js.map → chunk-EJCN5ATI.js.map} +0 -0
- /package/dist/{chunk-XZPSBGHA.js.map → chunk-ISFUFLFM.js.map} +0 -0
- /package/dist/{chunk-4NMVX5U7.js.map → chunk-JSH2TV34.js.map} +0 -0
- /package/dist/{chunk-R74NCKEY.js.map → chunk-LNFYISZ6.js.map} +0 -0
- /package/dist/{chunk-IM56VPKO.js.map → chunk-OR7KEGLR.js.map} +0 -0
- /package/dist/{chunk-A73QHOZP.js.map → chunk-QOMUE4FS.js.map} +0 -0
- /package/dist/{chunk-5UFQCU6M.js.map → chunk-ZUZD2DRV.js.map} +0 -0
package/dist/orchestrator.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
blendGraphExpandedRecallScore,
|
|
4
4
|
graphPathRelativeToStorage,
|
|
5
5
|
mergeGraphExpandedResults
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VG6DC2GO.js";
|
|
7
7
|
import "./chunk-Y7COCXY2.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-BXOZALJ6.js";
|
|
9
|
+
import "./chunk-LNFYISZ6.js";
|
|
10
10
|
import "./chunk-I74SUMNI.js";
|
|
11
11
|
import "./chunk-ILNPU5W5.js";
|
|
12
12
|
import "./chunk-7HYPN2GC.js";
|
|
@@ -101,7 +101,7 @@ import "./chunk-PYIR4SSB.js";
|
|
|
101
101
|
import "./chunk-DFEODULB.js";
|
|
102
102
|
import "./chunk-FKJVEW6O.js";
|
|
103
103
|
import "./chunk-3I4FUAVJ.js";
|
|
104
|
-
import "./chunk-
|
|
104
|
+
import "./chunk-ZUZD2DRV.js";
|
|
105
105
|
import "./chunk-MMACM5G2.js";
|
|
106
106
|
import "./chunk-54BGIBCR.js";
|
|
107
107
|
import "./chunk-H4CKS5B2.js";
|
|
@@ -142,8 +142,8 @@ import "./chunk-AM4T6CHX.js";
|
|
|
142
142
|
import "./chunk-7DRSWPUV.js";
|
|
143
143
|
import "./chunk-3T74IZB3.js";
|
|
144
144
|
import "./chunk-2LA3H54D.js";
|
|
145
|
-
import "./chunk-
|
|
146
|
-
import "./chunk-
|
|
145
|
+
import "./chunk-CKWOMJDY.js";
|
|
146
|
+
import "./chunk-RSLRGRBJ.js";
|
|
147
147
|
import "./chunk-KFY3SGN7.js";
|
|
148
148
|
import "./chunk-CMTINOFS.js";
|
|
149
149
|
import "./chunk-B2OOJCUX.js";
|
|
@@ -166,7 +166,7 @@ import "./chunk-ACPCA4NO.js";
|
|
|
166
166
|
import "./chunk-OKTXM5H4.js";
|
|
167
167
|
import "./chunk-2ASAS3CQ.js";
|
|
168
168
|
import "./chunk-NOB2T2FC.js";
|
|
169
|
-
import "./chunk-
|
|
169
|
+
import "./chunk-DQV3LUQL.js";
|
|
170
170
|
import "./chunk-PADG72LJ.js";
|
|
171
171
|
import "./chunk-5JMAGU26.js";
|
|
172
172
|
import "./chunk-MYVPLJOO.js";
|
|
@@ -196,7 +196,7 @@ import "./chunk-KFZY2OFH.js";
|
|
|
196
196
|
import "./chunk-QW27DOHG.js";
|
|
197
197
|
import "./chunk-C6WMSXCJ.js";
|
|
198
198
|
import "./chunk-KD3QD3A5.js";
|
|
199
|
-
import "./chunk-
|
|
199
|
+
import "./chunk-GNKY5JEP.js";
|
|
200
200
|
import "./chunk-V7IZKJI3.js";
|
|
201
201
|
import "./chunk-SEDEKFYQ.js";
|
|
202
202
|
import "./chunk-2QSZNTDO.js";
|
|
@@ -207,20 +207,21 @@ import "./chunk-TB6CBZ5V.js";
|
|
|
207
207
|
import "./chunk-J64TK33U.js";
|
|
208
208
|
import "./chunk-7RXCMVFQ.js";
|
|
209
209
|
import "./chunk-3HSRWJTC.js";
|
|
210
|
-
import "./chunk-
|
|
211
|
-
import "./chunk-
|
|
212
|
-
import "./chunk-
|
|
213
|
-
import "./chunk-
|
|
210
|
+
import "./chunk-JSH2TV34.js";
|
|
211
|
+
import "./chunk-ISFUFLFM.js";
|
|
212
|
+
import "./chunk-MRJ43KSG.js";
|
|
213
|
+
import "./chunk-A4HXWNST.js";
|
|
214
|
+
import "./chunk-OR7KEGLR.js";
|
|
214
215
|
import "./chunk-HIEWDJ2O.js";
|
|
215
216
|
import "./chunk-A5KNZSNA.js";
|
|
216
217
|
import "./chunk-D24OXEPB.js";
|
|
217
|
-
import "./chunk-
|
|
218
|
-
import "./chunk-
|
|
219
|
-
import "./chunk-
|
|
218
|
+
import "./chunk-EJCN5ATI.js";
|
|
219
|
+
import "./chunk-DFEYRCG2.js";
|
|
220
|
+
import "./chunk-QOMUE4FS.js";
|
|
220
221
|
import "./chunk-7T4TOGMS.js";
|
|
221
222
|
import "./chunk-7YQ6ESEA.js";
|
|
222
223
|
import "./chunk-CIAI24TQ.js";
|
|
223
|
-
import "./chunk-
|
|
224
|
+
import "./chunk-3USQWITL.js";
|
|
224
225
|
import "./chunk-LTBKKSCX.js";
|
|
225
226
|
import "./chunk-EQWEIIKQ.js";
|
|
226
227
|
import "./chunk-7BY7V4YX.js";
|
|
@@ -235,12 +236,12 @@ import "./chunk-GZ3R6XOE.js";
|
|
|
235
236
|
import "./chunk-CK5KOVHW.js";
|
|
236
237
|
import "./chunk-DJUKBGAD.js";
|
|
237
238
|
import "./chunk-G73MCJKL.js";
|
|
238
|
-
import "./chunk-
|
|
239
|
+
import "./chunk-4EDAHS6D.js";
|
|
239
240
|
import {
|
|
240
241
|
filterRecallCandidates,
|
|
241
242
|
hasIdentityRecoveryIntent,
|
|
242
243
|
resolveEffectiveIdentityInjectionMode
|
|
243
|
-
} from "./chunk-
|
|
244
|
+
} from "./chunk-2JL7WPXL.js";
|
|
244
245
|
import "./chunk-GDASG7NC.js";
|
|
245
246
|
import "./chunk-GDB4J2H3.js";
|
|
246
247
|
import "./chunk-QYN5PXDZ.js";
|
|
@@ -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-D-bi3r01.js';
|
|
3
3
|
|
|
4
4
|
declare const SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES: readonly [{
|
|
5
5
|
readonly method: "GET";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { S as SupportPassportExternalRequestHandler } from '../public-http-
|
|
2
|
-
export { a as SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES, b as SupportPassportPublicHandlerOptions, c as buildSupportPassportPublicRequestHandler, d as composeSupportPassportExternalRequestHandlers, n as normalizeSupportPassportNetworkAddress } from '../public-http-
|
|
1
|
+
import { S as SupportPassportExternalRequestHandler } from '../public-http-DusietP2.js';
|
|
2
|
+
export { a as SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES, b as SupportPassportPublicHandlerOptions, c as buildSupportPassportPublicRequestHandler, d as composeSupportPassportExternalRequestHandlers, n as normalizeSupportPassportNetworkAddress } from '../public-http-DusietP2.js';
|
|
3
3
|
import { OfflineSyncExcludeFile } from '../offline-sync-file-io.js';
|
|
4
4
|
import { M as MemoryFile, c3 as SupportPassportConfig } from '../types-DWHOxlZP.js';
|
|
5
|
-
import { $ as SupportPassportCard, a6 as SupportPassportCardServiceDependencies, av as SupportPassportManualDraftInput, ah as SupportPassportDraftCard, aT as SupportPassportOwnerScope, aX as SupportPassportReplaceCardInput, a3 as SupportPassportCardMutationInput, ap as SupportPassportGrantCardRef, ar as SupportPassportGrantState, aa as SupportPassportCreateGrantInput, af as SupportPassportCreatedGrant, aR as SupportPassportOwnerGrant, aZ as SupportPassportRevokeGrantInput, aV as SupportPassportPublicGuide, aK as SupportPassportModelRoute, az as SupportPassportModelAdapter, aD as SupportPassportModelAuditSink, Y as SupportPassportAnswerOutput } from '../access-service-
|
|
6
|
-
export { S as SUPPORT_PASSPORT_CARD_CATEGORIES, N as SUPPORT_PASSPORT_CARD_STATUSES, O as SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS, Q as SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES, R as SUPPORT_PASSPORT_NOT_IN_GUIDE_ANSWER, T as SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH, U as SupportPassportAccessSurface, V as SupportPassportAccessSurfaceDependencies, W as SupportPassportAnswerModelInput, X as SupportPassportAnswerModelInputSchema, Z as SupportPassportAnswerOutputSchema, _ as SupportPassportAnswerResult, a0 as SupportPassportCardCategory, a1 as SupportPassportCardCategorySchema, a2 as SupportPassportCardListSchema, a4 as SupportPassportCardMutationInputSchema, a5 as SupportPassportCardSchema, a7 as SupportPassportCardStatus, a8 as SupportPassportCardStatusSchema, a9 as SupportPassportCardTitleSchema, ab as SupportPassportCreateGrantInputSchema, ac as SupportPassportCreateGrantRequest, ad as SupportPassportCreateGrantRequestSchema, ae as SupportPassportCreateGrantResult, ag as SupportPassportCreatedGrantSchema, ai as SupportPassportDraftCardSchema, aj as SupportPassportDraftModelInput, ak as SupportPassportDraftModelInputSchema, al as SupportPassportDraftOutputSchema, am as SupportPassportDraftResult, an as SupportPassportError, ao as SupportPassportErrorCode, aq as SupportPassportGrantCardRefSchema, as as SupportPassportGrantStateSchema, at as SupportPassportListCardsInputSchema, au as SupportPassportListGrantsInputSchema, aw as SupportPassportManualDraftInputSchema, ax as SupportPassportMemoryIdSchema, ay as SupportPassportMemoryPreview, aA as SupportPassportModelAdapterOptions, aB as SupportPassportModelAuditRecord, aC as SupportPassportModelAuditRecordSchema, aE as SupportPassportModelAuditStore, aF as SupportPassportModelCallError, aG as SupportPassportModelClients, aH as SupportPassportModelFailureMetadata, aI as SupportPassportModelMessage, aJ as SupportPassportModelResultMetadata, aL as SupportPassportModelRouteKind, aM as SupportPassportModelRouteResult, aN as SupportPassportModelUsage, aO as SupportPassportNamespaceSchema, aP as SupportPassportOwnerCreateGrantRequest, aQ as SupportPassportOwnerCreateGrantRequestSchema, aS as SupportPassportOwnerGrantSchema, aU as SupportPassportPublicCardSchema, aW as SupportPassportPublicGuideSchema, aY as SupportPassportReplaceCardInputSchema, a_ as SupportPassportRevokeGrantInputSchema, a$ as SupportPassportRevokeGrantResult, b0 as SupportPassportSourceMemoryIdSchema, b1 as acceptsSupportPassportModelResponse, b2 as buildSupportPassportDirectGatewayConfig, b4 as computeSupportPassportCardRevision, b5 as createSupportPassportModelAdapter, b7 as hashSupportPassportAuditValues, b8 as resolveSupportPassportModelRoutePlan } from '../access-service-
|
|
5
|
+
import { $ as SupportPassportCard, a6 as SupportPassportCardServiceDependencies, av as SupportPassportManualDraftInput, ah as SupportPassportDraftCard, aT as SupportPassportOwnerScope, aX as SupportPassportReplaceCardInput, a3 as SupportPassportCardMutationInput, ap as SupportPassportGrantCardRef, ar as SupportPassportGrantState, aa as SupportPassportCreateGrantInput, af as SupportPassportCreatedGrant, aR as SupportPassportOwnerGrant, aZ as SupportPassportRevokeGrantInput, aV as SupportPassportPublicGuide, aK as SupportPassportModelRoute, az as SupportPassportModelAdapter, aD as SupportPassportModelAuditSink, Y as SupportPassportAnswerOutput } from '../access-service-D-bi3r01.js';
|
|
6
|
+
export { S as SUPPORT_PASSPORT_CARD_CATEGORIES, N as SUPPORT_PASSPORT_CARD_STATUSES, O as SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS, Q as SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES, R as SUPPORT_PASSPORT_NOT_IN_GUIDE_ANSWER, T as SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH, U as SupportPassportAccessSurface, V as SupportPassportAccessSurfaceDependencies, W as SupportPassportAnswerModelInput, X as SupportPassportAnswerModelInputSchema, Z as SupportPassportAnswerOutputSchema, _ as SupportPassportAnswerResult, a0 as SupportPassportCardCategory, a1 as SupportPassportCardCategorySchema, a2 as SupportPassportCardListSchema, a4 as SupportPassportCardMutationInputSchema, a5 as SupportPassportCardSchema, a7 as SupportPassportCardStatus, a8 as SupportPassportCardStatusSchema, a9 as SupportPassportCardTitleSchema, ab as SupportPassportCreateGrantInputSchema, ac as SupportPassportCreateGrantRequest, ad as SupportPassportCreateGrantRequestSchema, ae as SupportPassportCreateGrantResult, ag as SupportPassportCreatedGrantSchema, ai as SupportPassportDraftCardSchema, aj as SupportPassportDraftModelInput, ak as SupportPassportDraftModelInputSchema, al as SupportPassportDraftOutputSchema, am as SupportPassportDraftResult, an as SupportPassportError, ao as SupportPassportErrorCode, aq as SupportPassportGrantCardRefSchema, as as SupportPassportGrantStateSchema, at as SupportPassportListCardsInputSchema, au as SupportPassportListGrantsInputSchema, aw as SupportPassportManualDraftInputSchema, ax as SupportPassportMemoryIdSchema, ay as SupportPassportMemoryPreview, aA as SupportPassportModelAdapterOptions, aB as SupportPassportModelAuditRecord, aC as SupportPassportModelAuditRecordSchema, aE as SupportPassportModelAuditStore, aF as SupportPassportModelCallError, aG as SupportPassportModelClients, aH as SupportPassportModelFailureMetadata, aI as SupportPassportModelMessage, aJ as SupportPassportModelResultMetadata, aL as SupportPassportModelRouteKind, aM as SupportPassportModelRouteResult, aN as SupportPassportModelUsage, aO as SupportPassportNamespaceSchema, aP as SupportPassportOwnerCreateGrantRequest, aQ as SupportPassportOwnerCreateGrantRequestSchema, aS as SupportPassportOwnerGrantSchema, aU as SupportPassportPublicCardSchema, aW as SupportPassportPublicGuideSchema, aY as SupportPassportReplaceCardInputSchema, a_ as SupportPassportRevokeGrantInputSchema, a$ as SupportPassportRevokeGrantResult, b0 as SupportPassportSourceMemoryIdSchema, b1 as acceptsSupportPassportModelResponse, b2 as buildSupportPassportDirectGatewayConfig, b4 as computeSupportPassportCardRevision, b5 as createSupportPassportModelAdapter, b7 as hashSupportPassportAuditValues, b8 as resolveSupportPassportModelRoutePlan } from '../access-service-D-bi3r01.js';
|
|
7
7
|
import { S as StorageManager } from '../storage-BVAVitkO.js';
|
|
8
8
|
import { FileHandle } from 'node:fs/promises';
|
|
9
9
|
import { withHeldFileLock } from '../utils/serialize-mutations.js';
|
|
@@ -16,7 +16,7 @@ import '../external-wiki-config.js';
|
|
|
16
16
|
import '../contradiction-config.js';
|
|
17
17
|
import '../graph-path-scoring-config.js';
|
|
18
18
|
import '../types-continuity.js';
|
|
19
|
-
import '../catalog-
|
|
19
|
+
import '../catalog-BYIHQw1l.js';
|
|
20
20
|
import '../access-namespace-preflight-yO4LMGFH.js';
|
|
21
21
|
import '../access-token-capabilities.js';
|
|
22
22
|
import 'node:async_hooks';
|
|
@@ -33,7 +33,7 @@ import '../access-health-types.js';
|
|
|
33
33
|
import '../corpus-watermark.js';
|
|
34
34
|
import '../replica-divergence.js';
|
|
35
35
|
import '../resolve-auth-token.js';
|
|
36
|
-
import '../orchestrator-
|
|
36
|
+
import '../orchestrator-ByLrpav4.js';
|
|
37
37
|
import '../briefing.js';
|
|
38
38
|
import '../corpus-read-cancellation.js';
|
|
39
39
|
import '../artifact-search.js';
|
|
@@ -55,7 +55,7 @@ import '../resolve-provider-secret.js';
|
|
|
55
55
|
import '../transcript.js';
|
|
56
56
|
import '../session-integrity.js';
|
|
57
57
|
import '../summarizer.js';
|
|
58
|
-
import '../maintenance-
|
|
58
|
+
import '../maintenance-N5ur13Al.js';
|
|
59
59
|
import '../namespaces/search.js';
|
|
60
60
|
import '../compounding/engine.js';
|
|
61
61
|
import '../shared-context/manager.js';
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
SUPPORT_PASSPORT_MODEL_RESULT_PATH,
|
|
5
5
|
SupportPassportModelBridge,
|
|
6
6
|
parseSupportPassportModelJob
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-BXOZALJ6.js";
|
|
8
8
|
import {
|
|
9
9
|
DEFAULT_SUPPORT_PASSPORT_CONFIG,
|
|
10
10
|
parseSupportPassportConfig
|
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
buildSupportPassportPublicRequestHandler,
|
|
15
15
|
composeSupportPassportExternalRequestHandlers,
|
|
16
16
|
normalizeSupportPassportNetworkAddress
|
|
17
|
-
} from "../chunk-
|
|
18
|
-
import "../chunk-
|
|
17
|
+
} from "../chunk-ISFUFLFM.js";
|
|
18
|
+
import "../chunk-DFEYRCG2.js";
|
|
19
19
|
import {
|
|
20
20
|
SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
|
|
21
21
|
SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
notifySupportPassportCommitted,
|
|
57
57
|
resolveSupportPassportModelRoutePlan,
|
|
58
58
|
syncDirectoryForDurability
|
|
59
|
-
} from "../chunk-
|
|
59
|
+
} from "../chunk-2JL7WPXL.js";
|
|
60
60
|
import "../chunk-GDASG7NC.js";
|
|
61
61
|
import "../chunk-GDB4J2H3.js";
|
|
62
62
|
import "../chunk-QYN5PXDZ.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.63.
|
|
3
|
+
"version": "9.63.4",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -3156,7 +3156,7 @@
|
|
|
3156
3156
|
"core"
|
|
3157
3157
|
],
|
|
3158
3158
|
"peerDependencies": {
|
|
3159
|
-
"@remnic/coding-graph": "^9.63.
|
|
3159
|
+
"@remnic/coding-graph": "^9.63.4"
|
|
3160
3160
|
},
|
|
3161
3161
|
"peerDependenciesMeta": {
|
|
3162
3162
|
"@remnic/coding-graph": {
|
package/src/access-http-query.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EngramAccessInputError } from "./access-service.js";
|
|
2
|
+
import { isNamespaceKind, type NamespaceKind } from "./namespaces/catalog.js";
|
|
2
3
|
|
|
3
4
|
/** Optional string field from a JSON body: absent/null/"" → undefined. */
|
|
4
5
|
export function optionalQueryString(value: unknown, label: string): string | undefined {
|
|
@@ -23,3 +24,14 @@ export function positiveIntQueryParam(value: string | null, label: string): numb
|
|
|
23
24
|
}
|
|
24
25
|
return parsed;
|
|
25
26
|
}
|
|
27
|
+
|
|
28
|
+
/** Optional namespace-kind query param; rejects dead or unknown kinds. */
|
|
29
|
+
export function optionalNamespaceKindQueryParam(value: string | null): NamespaceKind | undefined {
|
|
30
|
+
if (value === null || value.length === 0) return undefined;
|
|
31
|
+
if (!isNamespaceKind(value)) {
|
|
32
|
+
throw new EngramAccessInputError(
|
|
33
|
+
"kind must be one of: default, shared, project, branch, team-project, explicit",
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
package/src/access-http.test.ts
CHANGED
|
@@ -728,6 +728,38 @@ test("HTTP admin dashboard endpoints require bearer authentication and apply con
|
|
|
728
728
|
}
|
|
729
729
|
});
|
|
730
730
|
|
|
731
|
+
test("HTTP admin namespaces rejects dead kinds and accepts live kinds", async () => {
|
|
732
|
+
const filters: unknown[] = [];
|
|
733
|
+
const service = {
|
|
734
|
+
adminListNamespaces: async (filter: unknown) => {
|
|
735
|
+
filters.push(filter);
|
|
736
|
+
return { enabled: true, entries: [] };
|
|
737
|
+
},
|
|
738
|
+
} as unknown as EngramAccessService;
|
|
739
|
+
const server = new EngramAccessHttpServer({
|
|
740
|
+
service,
|
|
741
|
+
port: 0,
|
|
742
|
+
authToken: "test-token",
|
|
743
|
+
adminConsoleEnabled: false,
|
|
744
|
+
});
|
|
745
|
+
const status = await server.start();
|
|
746
|
+
try {
|
|
747
|
+
const rejected = await fetch(
|
|
748
|
+
`http://127.0.0.1:${status.port}/engram/v1/admin/namespaces?kind=self`,
|
|
749
|
+
{ headers: { authorization: "Bearer test-token" } },
|
|
750
|
+
);
|
|
751
|
+
assert.equal(rejected.status, 400);
|
|
752
|
+
const accepted = await fetch(
|
|
753
|
+
`http://127.0.0.1:${status.port}/engram/v1/admin/namespaces?kind=default`,
|
|
754
|
+
{ headers: { authorization: "Bearer test-token" } },
|
|
755
|
+
);
|
|
756
|
+
assert.equal(accepted.status, 200);
|
|
757
|
+
assert.deepEqual(filters, [{ kind: "default" }]);
|
|
758
|
+
} finally {
|
|
759
|
+
await server.stop();
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
|
|
731
763
|
test("HTTP coding-context endpoint accepts projectTag shorthand", async () => {
|
|
732
764
|
const calls: unknown[] = [];
|
|
733
765
|
const service = {
|
package/src/access-http.ts
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
respondOfflineManifestStream,
|
|
23
23
|
respondOfflineSnapshotStream,
|
|
24
24
|
} from "./access-http-offline-stream.js";
|
|
25
|
-
import { nonEmptyQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
|
|
25
|
+
import { nonEmptyQueryParam, optionalNamespaceKindQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
|
|
26
26
|
import { CorrectionContractError } from "./correction/correction-contract.js";
|
|
27
27
|
import { WearablesInputError } from "./wearables/errors.js"; import { respondMeetingsList, respondMeetingsGet, respondMeetingsBuild } from "./meetings/http-glue.js";
|
|
28
28
|
import { EngramMcpServer, MCP_SUPPORTED_PROTOCOL_VERSIONS } from "./access-mcp.js";
|
|
@@ -2988,14 +2988,10 @@ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
|
|
|
2988
2988
|
return;
|
|
2989
2989
|
}
|
|
2990
2990
|
this.requireOperatorToken();
|
|
2991
|
-
const kind = parsed.searchParams.get("kind");
|
|
2992
|
-
const principal = parsed.searchParams.get("principal");
|
|
2993
|
-
const projectId = parsed.searchParams.get("projectId");
|
|
2991
|
+
const kind = optionalNamespaceKindQueryParam(parsed.searchParams.get("kind"));
|
|
2994
2992
|
const discoveredBy = parsed.searchParams.get("discoveredBy");
|
|
2995
2993
|
const result = await this.service.adminListNamespaces({
|
|
2996
|
-
...(kind ? { kind
|
|
2997
|
-
...(principal && principal.length > 0 ? { principal } : {}),
|
|
2998
|
-
...(projectId && projectId.length > 0 ? { projectId } : {}),
|
|
2994
|
+
...(kind ? { kind } : {}),
|
|
2999
2995
|
...(discoveredBy
|
|
3000
2996
|
? { discoveredBy: discoveredBy as "config" | "write" | "read" | "scan" | "migration" }
|
|
3001
2997
|
: {}),
|
|
@@ -200,20 +200,15 @@ test("listAdminNamespaces lists configured + discovered namespaces and marks sta
|
|
|
200
200
|
}
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
test("listAdminNamespaces filters by
|
|
203
|
+
test("listAdminNamespaces filters by kind", async () => {
|
|
204
204
|
const memoryDir = await makeTempDir();
|
|
205
205
|
try {
|
|
206
|
-
const config = makeConfig({
|
|
207
|
-
memoryDir,
|
|
208
|
-
namespacePolicies: [
|
|
209
|
-
{ name: "alice", readPrincipals: ["alice"], writePrincipals: ["alice"] },
|
|
210
|
-
{ name: "bob", readPrincipals: ["bob"], writePrincipals: ["bob"] },
|
|
211
|
-
],
|
|
212
|
-
});
|
|
206
|
+
const config = makeConfig({ memoryDir });
|
|
213
207
|
const catalog = new NamespaceCatalog(config);
|
|
214
208
|
await catalog.registerConfiguredNamespaces();
|
|
215
|
-
const result = await listAdminNamespaces({ catalog, filter: {
|
|
216
|
-
assert.ok(result.entries.
|
|
209
|
+
const result = await listAdminNamespaces({ catalog, filter: { kind: "default" } });
|
|
210
|
+
assert.ok(result.entries.length > 0, "default kind filter must return the default namespace");
|
|
211
|
+
assert.ok(result.entries.every((entry) => entry.kind === "default"));
|
|
217
212
|
} finally {
|
|
218
213
|
await rm(memoryDir, { recursive: true, force: true });
|
|
219
214
|
}
|
|
@@ -322,8 +322,6 @@ export function inspectScope(options: InspectScopeOptions): ScopeInspection {
|
|
|
322
322
|
/** Filters the namespace browser accepts (superset of {@link NamespaceCatalogFilter}). */
|
|
323
323
|
export interface AdminNamespaceFilter {
|
|
324
324
|
kind?: NamespaceRecord["kind"];
|
|
325
|
-
principal?: string;
|
|
326
|
-
projectId?: string;
|
|
327
325
|
discoveredBy?: NamespaceRecord["discoveredBy"];
|
|
328
326
|
/** Only namespaces with a write at/after this instant. */
|
|
329
327
|
writtenSince?: Date;
|
|
@@ -336,10 +334,6 @@ export interface AdminNamespaceEntry {
|
|
|
336
334
|
namespace: string;
|
|
337
335
|
identityToken: string;
|
|
338
336
|
kind: NamespaceRecord["kind"];
|
|
339
|
-
principal?: string;
|
|
340
|
-
projectId?: string;
|
|
341
|
-
branch?: string;
|
|
342
|
-
parentNamespace?: string;
|
|
343
337
|
createdAt: string;
|
|
344
338
|
lastReadAt?: string;
|
|
345
339
|
lastWriteAt?: string;
|
|
@@ -386,12 +380,6 @@ export async function listAdminNamespaces(options: ListAdminNamespacesOptions):
|
|
|
386
380
|
|
|
387
381
|
let entries: AdminNamespaceEntry[] = records.map((record) => toAdminEntry(record, staleBefore));
|
|
388
382
|
|
|
389
|
-
if (filter?.principal) {
|
|
390
|
-
entries = entries.filter((entry) => entry.principal === filter.principal);
|
|
391
|
-
}
|
|
392
|
-
if (filter?.projectId) {
|
|
393
|
-
entries = entries.filter((entry) => entry.projectId === filter.projectId);
|
|
394
|
-
}
|
|
395
383
|
if (filter?.staleBefore) {
|
|
396
384
|
const cutoff = filter.staleBefore.getTime();
|
|
397
385
|
entries = entries.filter((entry) => {
|
|
@@ -411,10 +399,6 @@ function toAdminEntry(record: NamespaceRecord, staleBefore: Date): AdminNamespac
|
|
|
411
399
|
namespace: record.namespace,
|
|
412
400
|
identityToken: record.identityToken,
|
|
413
401
|
kind: record.kind,
|
|
414
|
-
principal: record.principal,
|
|
415
|
-
projectId: record.projectId,
|
|
416
|
-
branch: record.branch,
|
|
417
|
-
parentNamespace: record.parentNamespace,
|
|
418
402
|
createdAt: record.createdAt,
|
|
419
403
|
lastReadAt: record.lastReadAt,
|
|
420
404
|
lastWriteAt: record.lastWriteAt,
|
|
@@ -587,7 +587,7 @@ test("binary lifecycle resumes redirects after verification read failures", asyn
|
|
|
587
587
|
assert.match(firstResult.errors.join("\n"), /injected verification read failure/);
|
|
588
588
|
assert.equal(await readFile(notePath, "utf8"), "");
|
|
589
589
|
assert.equal(manifest.assets[0]?.status, "error");
|
|
590
|
-
assert.equal(
|
|
590
|
+
assert.equal(manifest.assets[0]?.redirectedAt, undefined);
|
|
591
591
|
|
|
592
592
|
const secondResult = await runBinaryLifecyclePipeline(memoryDir, baseConfig, nestedRemoteBackend, noopLogger);
|
|
593
593
|
manifest = JSON.parse(
|
|
@@ -294,11 +294,25 @@ async function stageRedirect(
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
if (asset.redirectedAt === undefined) {
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
let remoteSeen = false;
|
|
298
|
+
for (const mdPath of mdFiles) {
|
|
299
|
+
try {
|
|
300
|
+
const content = await readMarkdownFile(mdPath);
|
|
301
|
+
if (content.includes(asset.mirroredPath)) {
|
|
302
|
+
remoteSeen = true;
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
} catch {
|
|
306
|
+
// Verify already succeeded; a later read error is not a local ref.
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (!remoteSeen) {
|
|
310
|
+
if (!dryRun) {
|
|
311
|
+
asset.status = "mirrored";
|
|
312
|
+
}
|
|
313
|
+
log.info(`[binary-lifecycle] preserved mirrored asset without redirected marker: ${asset.originalPath}${dryRun ? " [dry-run]" : ""}`);
|
|
314
|
+
continue;
|
|
299
315
|
}
|
|
300
|
-
log.info(`[binary-lifecycle] preserved mirrored asset without redirected marker: ${asset.originalPath}${dryRun ? " [dry-run]" : ""}`);
|
|
301
|
-
continue;
|
|
302
316
|
}
|
|
303
317
|
|
|
304
318
|
if (!Number.isFinite(new Date(asset.mirroredAt).getTime())) {
|
|
@@ -400,9 +414,6 @@ async function stageRedirect(
|
|
|
400
414
|
continue;
|
|
401
415
|
}
|
|
402
416
|
|
|
403
|
-
const redirectedAt = new Date().toISOString();
|
|
404
|
-
asset.redirectedAt = redirectedAt;
|
|
405
|
-
|
|
406
417
|
const verifyResult = await countRemainingLocalReferences(
|
|
407
418
|
memoryDir,
|
|
408
419
|
asset,
|
|
@@ -411,7 +422,10 @@ async function stageRedirect(
|
|
|
411
422
|
readMarkdownFile,
|
|
412
423
|
);
|
|
413
424
|
if (verifyResult.errors.length > 0 || verifyResult.remaining > 0) {
|
|
414
|
-
|
|
425
|
+
asset.status = "error";
|
|
426
|
+
// Failed verify must not read as a completed redirect (#2471); this also
|
|
427
|
+
// clears stale stamps written by manifests from before that fix.
|
|
428
|
+
delete asset.redirectedAt;
|
|
415
429
|
for (const msg of verifyResult.errors) {
|
|
416
430
|
log.error(`[binary-lifecycle] ${msg}`);
|
|
417
431
|
errors.push(msg);
|
|
@@ -424,7 +438,7 @@ async function stageRedirect(
|
|
|
424
438
|
continue;
|
|
425
439
|
}
|
|
426
440
|
asset.status = "redirected";
|
|
427
|
-
|
|
441
|
+
asset.redirectedAt = new Date().toISOString();
|
|
428
442
|
redirected++;
|
|
429
443
|
log.info(`[binary-lifecycle] redirected: ${asset.originalPath}`);
|
|
430
444
|
}
|
package/src/buffer.ts
CHANGED
|
@@ -619,6 +619,12 @@ export class SmartBuffer {
|
|
|
619
619
|
log.debug(
|
|
620
620
|
`buffer[${bufferKey}]: ${mutation.turnCountInWindow} turns, signal=${mutation.signalLevel}, decision=${decision}`,
|
|
621
621
|
);
|
|
622
|
+
if (decision !== "keep_buffering" && extractionTurns === undefined) {
|
|
623
|
+
extractionTurns = [
|
|
624
|
+
...mutation.retainedTurnsSnapshot,
|
|
625
|
+
...mutation.activeTurnsSnapshot,
|
|
626
|
+
];
|
|
627
|
+
}
|
|
622
628
|
return extractionTurns ? { decision, extractionTurns } : { decision };
|
|
623
629
|
}
|
|
624
630
|
|
|
@@ -177,8 +177,6 @@ function candidatePriority(candidate: NamespaceMaintenanceCandidate): number {
|
|
|
177
177
|
if (candidate.source === "configured") return 2;
|
|
178
178
|
if (candidate.kind === "team-project") return 3;
|
|
179
179
|
if (candidate.kind === "project") return 4;
|
|
180
|
-
if (candidate.kind === "self") return 5;
|
|
181
|
-
if (candidate.kind === "legacy") return 6;
|
|
182
180
|
if (candidate.kind === "branch") return 8;
|
|
183
181
|
return 7;
|
|
184
182
|
}
|
|
@@ -600,15 +600,16 @@ test("catalog quarantines malformed JSONL record fields at the parse boundary",
|
|
|
600
600
|
|
|
601
601
|
assert.deepEqual(
|
|
602
602
|
list.map((r) => r.namespace),
|
|
603
|
-
["valid"],
|
|
604
|
-
"
|
|
603
|
+
["bad-kind", "valid"],
|
|
604
|
+
"unknown kinds coerce to explicit; other malformed records stay quarantined",
|
|
605
605
|
);
|
|
606
|
-
assert.equal(list
|
|
607
|
-
|
|
608
|
-
assert.equal(
|
|
609
|
-
assert.equal(
|
|
610
|
-
assert.equal(
|
|
611
|
-
assert.
|
|
606
|
+
assert.equal(list.find((r) => r.namespace === "bad-kind")?.kind, "explicit");
|
|
607
|
+
const valid = list.find((r) => r.namespace === "valid");
|
|
608
|
+
assert.equal(valid?.kind, "project");
|
|
609
|
+
assert.equal(valid?.discoveredBy, "write");
|
|
610
|
+
assert.equal(valid?.lastReadAt, undefined);
|
|
611
|
+
assert.equal(valid?.lastWriteAt, undefined);
|
|
612
|
+
assert.deepEqual(valid?.lastMaintenanceAt, { ok: now });
|
|
612
613
|
} finally {
|
|
613
614
|
await rm(memoryDir, { recursive: true, force: true });
|
|
614
615
|
}
|
|
@@ -3952,3 +3953,47 @@ test("#1903 cross-instance compaction never drops another instance's rows", asyn
|
|
|
3952
3953
|
await rm(memoryDir, { recursive: true, force: true });
|
|
3953
3954
|
}
|
|
3954
3955
|
});
|
|
3956
|
+
|
|
3957
|
+
test("#2469 persisted self/legacy kinds coerce to explicit and drop unused hints", async () => {
|
|
3958
|
+
const memoryDir = await mkMemoryDir();
|
|
3959
|
+
try {
|
|
3960
|
+
const ns = "project-origin-dead-kind";
|
|
3961
|
+
const token = namespaceIdentityToken(ns);
|
|
3962
|
+
const stateDir = path.join(memoryDir, "state");
|
|
3963
|
+
await mkdir(stateDir, { recursive: true });
|
|
3964
|
+
const line = JSON.stringify({
|
|
3965
|
+
namespace: ns,
|
|
3966
|
+
identityToken: token,
|
|
3967
|
+
kind: "self",
|
|
3968
|
+
principal: "unused",
|
|
3969
|
+
projectId: "unused",
|
|
3970
|
+
branch: "unused",
|
|
3971
|
+
parentNamespace: "unused",
|
|
3972
|
+
createdAt: "2026-08-17T00:00:00.000Z",
|
|
3973
|
+
storageDir: path.join(memoryDir, "namespaces", token),
|
|
3974
|
+
discoveredBy: "write",
|
|
3975
|
+
});
|
|
3976
|
+
const legacyLine = JSON.stringify({
|
|
3977
|
+
namespace: "shared",
|
|
3978
|
+
identityToken: namespaceIdentityToken("shared"),
|
|
3979
|
+
kind: "legacy",
|
|
3980
|
+
createdAt: "2026-08-17T00:00:00.000Z",
|
|
3981
|
+
storageDir: path.join(memoryDir, "namespaces", namespaceIdentityToken("shared")),
|
|
3982
|
+
discoveredBy: "config",
|
|
3983
|
+
});
|
|
3984
|
+
await writeFile(path.join(stateDir, "namespaces.jsonl"), `${line}\n${legacyLine}\n`, "utf8");
|
|
3985
|
+
|
|
3986
|
+
const catalog = new NamespaceCatalog(makeConfig(memoryDir));
|
|
3987
|
+
const selfRecord = await catalog.getNamespaceRecord(ns);
|
|
3988
|
+
assert.equal(selfRecord?.kind, "explicit");
|
|
3989
|
+
assert.equal(
|
|
3990
|
+
(selfRecord as { principal?: string } | null)?.principal,
|
|
3991
|
+
undefined,
|
|
3992
|
+
);
|
|
3993
|
+
const legacyRecord = await catalog.getNamespaceRecord("shared");
|
|
3994
|
+
assert.equal(legacyRecord?.kind, "explicit");
|
|
3995
|
+
} finally {
|
|
3996
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
3997
|
+
}
|
|
3998
|
+
});
|
|
3999
|
+
|
|
@@ -59,13 +59,11 @@ import { ALL_CATEGORY_DIRS } from "../utils/category-dir.js";
|
|
|
59
59
|
|
|
60
60
|
export type NamespaceKind =
|
|
61
61
|
| "default"
|
|
62
|
-
| "self"
|
|
63
62
|
| "shared"
|
|
64
63
|
| "project"
|
|
65
64
|
| "branch"
|
|
66
65
|
| "team-project"
|
|
67
|
-
| "explicit"
|
|
68
|
-
| "legacy";
|
|
66
|
+
| "explicit";
|
|
69
67
|
|
|
70
68
|
export type NamespaceDiscoverySource = "config" | "write" | "read" | "scan" | "migration";
|
|
71
69
|
|
|
@@ -73,10 +71,6 @@ export interface NamespaceRecord {
|
|
|
73
71
|
namespace: string;
|
|
74
72
|
identityToken: string;
|
|
75
73
|
kind: NamespaceKind;
|
|
76
|
-
principal?: string;
|
|
77
|
-
projectId?: string;
|
|
78
|
-
branch?: string;
|
|
79
|
-
parentNamespace?: string;
|
|
80
74
|
createdAt: string;
|
|
81
75
|
lastReadAt?: string;
|
|
82
76
|
lastWriteAt?: string;
|
|
@@ -95,10 +89,6 @@ export interface NamespaceCatalogFilter {
|
|
|
95
89
|
export interface NamespaceTouchMetadata {
|
|
96
90
|
discoveredBy?: NamespaceDiscoverySource;
|
|
97
91
|
kind?: NamespaceKind;
|
|
98
|
-
principal?: string;
|
|
99
|
-
projectId?: string;
|
|
100
|
-
branch?: string;
|
|
101
|
-
parentNamespace?: string;
|
|
102
92
|
/** Explicit storage dir (when the caller already resolved it). */
|
|
103
93
|
storageDir?: string;
|
|
104
94
|
/** Override the touch timestamp (mainly for tests / migration replay). */
|
|
@@ -129,13 +119,11 @@ export interface NamespaceCatalogRebuildResult {
|
|
|
129
119
|
|
|
130
120
|
const NAMESPACE_KINDS: readonly NamespaceKind[] = [
|
|
131
121
|
"default",
|
|
132
|
-
"self",
|
|
133
122
|
"shared",
|
|
134
123
|
"project",
|
|
135
124
|
"branch",
|
|
136
125
|
"team-project",
|
|
137
126
|
"explicit",
|
|
138
|
-
"legacy",
|
|
139
127
|
];
|
|
140
128
|
|
|
141
129
|
const NAMESPACE_DISCOVERY_SOURCES: readonly NamespaceDiscoverySource[] = [
|
|
@@ -275,7 +263,7 @@ function isValidIsoTimestamp(value: string): boolean {
|
|
|
275
263
|
return Number.isFinite(ms);
|
|
276
264
|
}
|
|
277
265
|
|
|
278
|
-
function isNamespaceKind(value: unknown): value is NamespaceKind {
|
|
266
|
+
export function isNamespaceKind(value: unknown): value is NamespaceKind {
|
|
279
267
|
return typeof value === "string" && (NAMESPACE_KINDS as readonly string[]).includes(value);
|
|
280
268
|
}
|
|
281
269
|
|
|
@@ -301,8 +289,7 @@ function coerceRecord(value: unknown): NamespaceRecord | null {
|
|
|
301
289
|
if (typeof v.storageDir !== "string" || v.storageDir.length === 0) return null;
|
|
302
290
|
if (typeof v.createdAt !== "string" || v.createdAt.length === 0) return null;
|
|
303
291
|
if (!isValidIsoTimestamp(v.createdAt)) return null;
|
|
304
|
-
const kind =
|
|
305
|
-
if (!kind) return null;
|
|
292
|
+
const kind = isNamespaceKind(v.kind) ? v.kind : "explicit";
|
|
306
293
|
const discoveredBy =
|
|
307
294
|
v.discoveredBy === undefined
|
|
308
295
|
? "scan"
|
|
@@ -318,10 +305,6 @@ function coerceRecord(value: unknown): NamespaceRecord | null {
|
|
|
318
305
|
storageDir: v.storageDir,
|
|
319
306
|
discoveredBy,
|
|
320
307
|
};
|
|
321
|
-
if (typeof v.principal === "string") record.principal = v.principal;
|
|
322
|
-
if (typeof v.projectId === "string") record.projectId = v.projectId;
|
|
323
|
-
if (typeof v.branch === "string") record.branch = v.branch;
|
|
324
|
-
if (typeof v.parentNamespace === "string") record.parentNamespace = v.parentNamespace;
|
|
325
308
|
if (typeof v.lastReadAt === "string" && isValidIsoTimestamp(v.lastReadAt)) {
|
|
326
309
|
record.lastReadAt = v.lastReadAt;
|
|
327
310
|
}
|
|
@@ -792,12 +775,6 @@ export class NamespaceCatalog {
|
|
|
792
775
|
if (kind === "read" && cached.lastReadAt === undefined) return true;
|
|
793
776
|
if (!metadata) return false;
|
|
794
777
|
if (metadata.kind !== undefined && metadata.kind !== cached.kind) return true;
|
|
795
|
-
if (metadata.principal !== undefined && metadata.principal !== cached.principal) return true;
|
|
796
|
-
if (metadata.projectId !== undefined && metadata.projectId !== cached.projectId) return true;
|
|
797
|
-
if (metadata.branch !== undefined && metadata.branch !== cached.branch) return true;
|
|
798
|
-
if (metadata.parentNamespace !== undefined && metadata.parentNamespace !== cached.parentNamespace) {
|
|
799
|
-
return true;
|
|
800
|
-
}
|
|
801
778
|
// A changed storageDir repoints routing/containment for this namespace —
|
|
802
779
|
// must be observable at once, not held stale by the coalesce window (#1903, Cursor).
|
|
803
780
|
if (metadata.storageDir !== undefined && metadata.storageDir !== cached.storageDir) return true;
|
|
@@ -1399,15 +1376,10 @@ export class NamespaceCatalog {
|
|
|
1399
1376
|
(kind === "register" ? "config" : kind === "maintenance" ? "scan" : kind),
|
|
1400
1377
|
};
|
|
1401
1378
|
|
|
1402
|
-
// Update mutable fields. storageDir
|
|
1403
|
-
//
|
|
1379
|
+
// Update mutable fields. storageDir and kind may change over a
|
|
1380
|
+
// namespace's lifetime, so they upsert.
|
|
1404
1381
|
record.storageDir = storageDir;
|
|
1405
1382
|
if (metadata?.kind) record.kind = metadata.kind;
|
|
1406
|
-
if (metadata?.principal !== undefined) record.principal = metadata.principal;
|
|
1407
|
-
if (metadata?.projectId !== undefined) record.projectId = metadata.projectId;
|
|
1408
|
-
if (metadata?.branch !== undefined) record.branch = metadata.branch;
|
|
1409
|
-
if (metadata?.parentNamespace !== undefined)
|
|
1410
|
-
record.parentNamespace = metadata.parentNamespace;
|
|
1411
1383
|
// PROVENANCE (creation-only, with one upgrade — round 6, codex P2 NBPmT):
|
|
1412
1384
|
// `discoveredBy` is otherwise preserved for existing records (a routine
|
|
1413
1385
|
// read/register/resolve never relabels it). The single exception is a real
|
|
@@ -2109,10 +2081,6 @@ export class NamespaceCatalog {
|
|
|
2109
2081
|
if (prior.lastReadAt) merged.lastReadAt = prior.lastReadAt;
|
|
2110
2082
|
if (prior.lastWriteAt) merged.lastWriteAt = prior.lastWriteAt;
|
|
2111
2083
|
if (prior.lastMaintenanceAt) merged.lastMaintenanceAt = { ...prior.lastMaintenanceAt };
|
|
2112
|
-
if (prior.principal !== undefined) merged.principal = prior.principal;
|
|
2113
|
-
if (prior.projectId !== undefined) merged.projectId = prior.projectId;
|
|
2114
|
-
if (prior.branch !== undefined) merged.branch = prior.branch;
|
|
2115
|
-
if (prior.parentNamespace !== undefined) merged.parentNamespace = prior.parentNamespace;
|
|
2116
2084
|
return merged;
|
|
2117
2085
|
}
|
|
2118
2086
|
// ── Persistence ──────────────────────────────────────────────────────────
|