@remnic/core 9.3.716 → 9.3.718
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-boundary.d.ts +5 -5
- package/dist/access-boundary.js +10 -9
- package/dist/access-cli.js +26 -25
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +5 -5
- package/dist/access-http.js +14 -13
- package/dist/access-mcp.d.ts +5 -5
- package/dist/access-mcp.js +13 -12
- package/dist/access-operations-batch.js +11 -10
- package/dist/access-operations.d.ts +5 -5
- package/dist/access-operations.js +12 -11
- package/dist/{access-service-BW8cm_uU.d.ts → access-service-CZbnt0t2.d.ts} +4 -4
- package/dist/access-service.d.ts +5 -5
- package/dist/access-service.js +9 -8
- package/dist/access-surface-catalog.d.ts +5 -5
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +4 -4
- package/dist/briefing.d.ts +3 -1
- package/dist/briefing.js +3 -3
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +1 -1
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-CbR0CsUw.d.ts → catalog-CEYlMs9X.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +4 -4
- package/dist/{chunk-JEIROMLX.js → chunk-2COL35PK.js} +95 -9
- package/dist/chunk-2COL35PK.js.map +1 -0
- package/dist/{chunk-XZTUMWKQ.js → chunk-2PTBLS2S.js} +2 -2
- package/dist/{chunk-2Y6LMOQQ.js → chunk-2VHMVWPU.js} +2 -2
- package/dist/{chunk-6UU43ZGD.js → chunk-4KZGLDJJ.js} +2 -2
- package/dist/{chunk-K44MIN6D.js → chunk-5RHM43BJ.js} +3 -3
- package/dist/{chunk-MECU6WSH.js → chunk-72VDBALG.js} +18 -18
- package/dist/{chunk-UY4JMEAK.js → chunk-7EEVXW7X.js} +2 -2
- package/dist/{chunk-XCTDHF7U.js → chunk-A5TUPZ3N.js} +33 -1
- package/dist/chunk-A5TUPZ3N.js.map +1 -0
- package/dist/{chunk-WI4QX7GH.js → chunk-A66YRSOS.js} +2 -2
- package/dist/{chunk-CTAHKIG6.js → chunk-ANI5DUAE.js} +10 -8
- package/dist/{chunk-CTAHKIG6.js.map → chunk-ANI5DUAE.js.map} +1 -1
- package/dist/{chunk-O62P2LFL.js → chunk-APUJIMDM.js} +2 -2
- package/dist/{chunk-MPHDVHIB.js → chunk-DIFU33GU.js} +2 -2
- package/dist/{chunk-DXGS5YOQ.js → chunk-EH27LHML.js} +2 -2
- package/dist/{chunk-BNOAB5HH.js → chunk-F3PVXKHP.js} +78 -1442
- package/dist/chunk-F3PVXKHP.js.map +1 -0
- package/dist/{chunk-6QUPUTT7.js → chunk-HLIR3RJ7.js} +6 -10
- package/dist/{chunk-6QUPUTT7.js.map → chunk-HLIR3RJ7.js.map} +1 -1
- package/dist/{chunk-SHRRWOVY.js → chunk-J6BH2OBA.js} +64 -21
- package/dist/chunk-J6BH2OBA.js.map +1 -0
- package/dist/{chunk-6FUJ2VYY.js → chunk-JAKYZGV4.js} +3 -3
- package/dist/{chunk-3VUPWDSE.js → chunk-JIZGYQYH.js} +4 -4
- package/dist/{chunk-QOIONSOI.js → chunk-KRGC4EDX.js} +2 -2
- package/dist/{chunk-AJOIM6UR.js → chunk-L5ASZA2F.js} +2 -2
- package/dist/{chunk-I56LKMF7.js → chunk-LXSG4L55.js} +2 -2
- package/dist/{chunk-MSVSP5VO.js → chunk-N3DUH6OO.js} +1 -1
- package/dist/chunk-N3DUH6OO.js.map +1 -0
- package/dist/{chunk-SQ4LU27I.js → chunk-NFRBADNR.js} +195 -80
- package/dist/chunk-NFRBADNR.js.map +1 -0
- package/dist/chunk-OJU73BUX.js +1688 -0
- package/dist/chunk-OJU73BUX.js.map +1 -0
- package/dist/{chunk-JVEMUX6L.js → chunk-OZ2KQ7HF.js} +2 -2
- package/dist/{chunk-SYDHFFAW.js → chunk-P5IPFZVH.js} +5 -5
- package/dist/{chunk-GM3BMWKR.js → chunk-REWQAFSA.js} +2 -2
- package/dist/{chunk-V7GDTQ6I.js → chunk-S35FX6MU.js} +2 -2
- package/dist/{chunk-MTHNJCOJ.js → chunk-S3OPGGZB.js} +2 -2
- package/dist/{chunk-IHMT6XTY.js → chunk-U5H7WHTS.js} +6 -4
- package/dist/{chunk-IHMT6XTY.js.map → chunk-U5H7WHTS.js.map} +1 -1
- package/dist/{chunk-RBHANGVX.js → chunk-UCJ5CDTK.js} +6 -6
- package/dist/{chunk-HHLWSWWF.js → chunk-URM3HW2R.js} +2 -2
- package/dist/{chunk-VO4UICII.js → chunk-YTZLBBEB.js} +2 -2
- package/dist/{chunk-OC56UWV5.js → chunk-YYOK4GVF.js} +2 -2
- package/dist/{cli-Dpivy32W.d.ts → cli-1orcdXOY.d.ts} +3 -3
- package/dist/cli.d.ts +6 -6
- package/dist/cli.js +28 -27
- package/dist/compounding/engine.d.ts +1 -1
- package/dist/compounding/engine.js +3 -3
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +3 -3
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +3 -3
- package/dist/consolidation-provenance-check.d.ts +1 -1
- package/dist/consolidation-undo.d.ts +1 -1
- package/dist/contradiction/index.d.ts +1 -1
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +1 -1
- package/dist/entity-retrieval.js +3 -3
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +4 -4
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.js +42 -41
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +3 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
- package/dist/maintenance/rebuild-memory-projection.js +4 -4
- package/dist/mcp-memory-inspector-app.d.ts +5 -5
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +1 -1
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +2 -2
- package/dist/namespaces/migrate.js +4 -4
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +2 -2
- package/dist/namespaces/storage.js +3 -3
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +1 -1
- package/dist/operator-toolkit.js +11 -9
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +8 -5
- package/dist/{orchestrator-vygo2YIM.d.ts → orchestrator-kOxredSr.d.ts} +22 -5
- package/dist/orchestrator.d.ts +4 -4
- package/dist/orchestrator.js +17 -16
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +1 -1
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/schemas.d.ts +22 -22
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-DSjMDZ1u.d.ts → semantic-consolidation-B58v3S-a.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +4 -4
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/storage.d.ts +1 -1
- package/dist/storage.js +2 -2
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +1 -1
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/types.d.ts +12 -12
- package/dist/{types-D9dwzU_x.d.ts → types-ACmDOScJ.d.ts} +36 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +3 -3
- package/package.json +2 -2
- package/src/access-service.ts +56 -41
- package/src/briefing.ts +32 -0
- package/src/config.ts +32 -0
- package/src/correction/index.ts +24 -0
- package/src/correction/passive-capture.test.ts +500 -0
- package/src/correction/passive-capture.ts +335 -0
- package/src/correction/passive-correction-detector.test.ts +263 -0
- package/src/correction/passive-correction-detector.ts +325 -0
- package/src/correction/passive-correction-notifications.ts +123 -0
- package/src/maintenance/namespace-planner.ts +3 -10
- package/src/orchestrator.ts +231 -73
- package/src/scopes/scope-plan.test.ts +168 -1
- package/src/scopes/scope-plan.ts +163 -0
- package/src/types.ts +36 -0
- package/dist/chunk-BNOAB5HH.js.map +0 -1
- package/dist/chunk-JEIROMLX.js.map +0 -1
- package/dist/chunk-MSVSP5VO.js.map +0 -1
- package/dist/chunk-SHRRWOVY.js.map +0 -1
- package/dist/chunk-SQ4LU27I.js.map +0 -1
- package/dist/chunk-XCTDHF7U.js.map +0 -1
- /package/dist/{chunk-XZTUMWKQ.js.map → chunk-2PTBLS2S.js.map} +0 -0
- /package/dist/{chunk-2Y6LMOQQ.js.map → chunk-2VHMVWPU.js.map} +0 -0
- /package/dist/{chunk-6UU43ZGD.js.map → chunk-4KZGLDJJ.js.map} +0 -0
- /package/dist/{chunk-K44MIN6D.js.map → chunk-5RHM43BJ.js.map} +0 -0
- /package/dist/{chunk-MECU6WSH.js.map → chunk-72VDBALG.js.map} +0 -0
- /package/dist/{chunk-UY4JMEAK.js.map → chunk-7EEVXW7X.js.map} +0 -0
- /package/dist/{chunk-WI4QX7GH.js.map → chunk-A66YRSOS.js.map} +0 -0
- /package/dist/{chunk-O62P2LFL.js.map → chunk-APUJIMDM.js.map} +0 -0
- /package/dist/{chunk-MPHDVHIB.js.map → chunk-DIFU33GU.js.map} +0 -0
- /package/dist/{chunk-DXGS5YOQ.js.map → chunk-EH27LHML.js.map} +0 -0
- /package/dist/{chunk-6FUJ2VYY.js.map → chunk-JAKYZGV4.js.map} +0 -0
- /package/dist/{chunk-3VUPWDSE.js.map → chunk-JIZGYQYH.js.map} +0 -0
- /package/dist/{chunk-QOIONSOI.js.map → chunk-KRGC4EDX.js.map} +0 -0
- /package/dist/{chunk-AJOIM6UR.js.map → chunk-L5ASZA2F.js.map} +0 -0
- /package/dist/{chunk-I56LKMF7.js.map → chunk-LXSG4L55.js.map} +0 -0
- /package/dist/{chunk-JVEMUX6L.js.map → chunk-OZ2KQ7HF.js.map} +0 -0
- /package/dist/{chunk-SYDHFFAW.js.map → chunk-P5IPFZVH.js.map} +0 -0
- /package/dist/{chunk-GM3BMWKR.js.map → chunk-REWQAFSA.js.map} +0 -0
- /package/dist/{chunk-V7GDTQ6I.js.map → chunk-S35FX6MU.js.map} +0 -0
- /package/dist/{chunk-MTHNJCOJ.js.map → chunk-S3OPGGZB.js.map} +0 -0
- /package/dist/{chunk-RBHANGVX.js.map → chunk-UCJ5CDTK.js.map} +0 -0
- /package/dist/{chunk-HHLWSWWF.js.map → chunk-URM3HW2R.js.map} +0 -0
- /package/dist/{chunk-VO4UICII.js.map → chunk-YTZLBBEB.js.map} +0 -0
- /package/dist/{chunk-OC56UWV5.js.map → chunk-YYOK4GVF.js.map} +0 -0
package/src/scopes/scope-plan.ts
CHANGED
|
@@ -33,10 +33,16 @@
|
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
35
|
canReadNamespace,
|
|
36
|
+
canWriteNamespace,
|
|
36
37
|
defaultNamespaceForPrincipal,
|
|
37
38
|
recallNamespacesForPrincipal,
|
|
38
39
|
resolvePrincipal,
|
|
39
40
|
} from "../namespaces/principal.js";
|
|
41
|
+
import {
|
|
42
|
+
namespaceIdentityFromToken,
|
|
43
|
+
namespaceIdentityToken,
|
|
44
|
+
} from "../namespaces/identity.js";
|
|
45
|
+
import path from "node:path";
|
|
40
46
|
import type { ResolvedScopeProfilePlan } from "../namespaces/scope-profiles.js";
|
|
41
47
|
import {
|
|
42
48
|
expandScopeProfileReadNamespaces,
|
|
@@ -318,3 +324,160 @@ export function resolveScopePlan(options: ResolveScopePlanOptions): ScopePlan {
|
|
|
318
324
|
scopeProfilePlan,
|
|
319
325
|
};
|
|
320
326
|
}
|
|
327
|
+
|
|
328
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
329
|
+
// Centralized namespace-resolution helpers (issue #1521 step 3–4)
|
|
330
|
+
//
|
|
331
|
+
// The three functions below consolidate the ad-hoc namespace-resolution logic
|
|
332
|
+
// that was previously scattered across orchestrator.ts (namespaceFromStorageDir,
|
|
333
|
+
// configuredNamespaces) and access-service.ts (resolveWritableNamespace). By
|
|
334
|
+
// living in THIS module they are excluded from the adHocNamespaceResolutions
|
|
335
|
+
// ratchet, and every consumer reaches them through a single well-known import
|
|
336
|
+
// instead of reimplementing the derivation inline (#1519's failure mode).
|
|
337
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* The configured namespace set: default + shared + every namespace-policy
|
|
341
|
+
* name, trimmed and de-duplicated. Pure — reads only from `config`.
|
|
342
|
+
*
|
|
343
|
+
* Replaces the `configuredNamespaces()` private method that lived on both
|
|
344
|
+
* `Orchestrator` and the maintenance namespace-planner (two copies of the
|
|
345
|
+
* same logic).
|
|
346
|
+
*/
|
|
347
|
+
export function getConfiguredNamespaces(config: PluginConfig): string[] {
|
|
348
|
+
return Array.from(
|
|
349
|
+
new Set(
|
|
350
|
+
[
|
|
351
|
+
config.defaultNamespace,
|
|
352
|
+
config.sharedNamespace,
|
|
353
|
+
...config.namespacePolicies.map((policy) => policy.name),
|
|
354
|
+
]
|
|
355
|
+
.map((value) => value.trim())
|
|
356
|
+
.filter(Boolean),
|
|
357
|
+
),
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Options for {@link resolveNamespaceFromStorageDir}.
|
|
363
|
+
*/
|
|
364
|
+
export interface ResolveNamespaceFromStorageDirOptions {
|
|
365
|
+
/** Plugin config (memoryDir, defaultNamespace, namespacesEnabled, …). */
|
|
366
|
+
readonly config: PluginConfig;
|
|
367
|
+
/**
|
|
368
|
+
* Pre-computed configured-namespace set (from {@link getConfiguredNamespaces}).
|
|
369
|
+
* Passed by the caller so this function does not re-derive it on every call.
|
|
370
|
+
*/
|
|
371
|
+
readonly configuredNamespaces: readonly string[];
|
|
372
|
+
/**
|
|
373
|
+
* Catalog-owned dir→namespace hints (best-effort union of configured +
|
|
374
|
+
* catalog-discovered). May be `undefined` when no catalog hints are loaded.
|
|
375
|
+
*/
|
|
376
|
+
readonly hints?: ReadonlyMap<string, ReadonlySet<string>> | undefined;
|
|
377
|
+
/**
|
|
378
|
+
* Lazy catalog-hint loader. Called ONLY after the early returns (disabled,
|
|
379
|
+
* memory root, no namespace segment, configured namespace) — matching the
|
|
380
|
+
* original lazy behavior so an eager load does not mark hints as loaded
|
|
381
|
+
* before the catalog file exists (codex P2).
|
|
382
|
+
*/
|
|
383
|
+
readonly loadHints?: () => void;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Derive the namespace a storage directory belongs to.
|
|
388
|
+
*
|
|
389
|
+
* Pure (no orchestrator state): the caller passes `config`, the configured set,
|
|
390
|
+
* and any catalog hints. The logic is byte-identical to the private
|
|
391
|
+
* `namespaceFromStorageDir` method that previously lived on `Orchestrator`
|
|
392
|
+
* (including the token round-trip guard from codex round 6).
|
|
393
|
+
*/
|
|
394
|
+
export function resolveNamespaceFromStorageDir(
|
|
395
|
+
storageDir: string,
|
|
396
|
+
options: ResolveNamespaceFromStorageDirOptions,
|
|
397
|
+
): string {
|
|
398
|
+
const { config } = options;
|
|
399
|
+
if (!config.namespacesEnabled) return config.defaultNamespace;
|
|
400
|
+
const resolvedStorageDir = path.resolve(storageDir);
|
|
401
|
+
const resolvedMemoryDir = path.resolve(config.memoryDir);
|
|
402
|
+
if (resolvedStorageDir === resolvedMemoryDir) return config.defaultNamespace;
|
|
403
|
+
const m = resolvedStorageDir.match(/[\\/]namespaces[\\/]([^\\/]+)$/);
|
|
404
|
+
if (!m?.[1]) return config.defaultNamespace;
|
|
405
|
+
const dirName = m[1];
|
|
406
|
+
// Token-shaped raw names (codex P2 — NBsFz): a dir name might be a tokenized
|
|
407
|
+
// identity OR a literal raw namespace name that merely LOOKS like a token.
|
|
408
|
+
// A dir name that is itself a KNOWN namespace is preserved BEFORE decoding.
|
|
409
|
+
if (options.configuredNamespaces.includes(dirName)) {
|
|
410
|
+
return dirName;
|
|
411
|
+
}
|
|
412
|
+
// Load catalog hints ONLY after the early returns (codex P2: an eager load
|
|
413
|
+
// before the catalog file exists would mark hints as loaded and skip later
|
|
414
|
+
// catalog-derived rows).
|
|
415
|
+
options.loadHints?.();
|
|
416
|
+
const hints = options.hints;
|
|
417
|
+
const hintedNamespaces = hints?.get(resolvedStorageDir);
|
|
418
|
+
if (hintedNamespaces?.has(dirName)) {
|
|
419
|
+
return dirName;
|
|
420
|
+
}
|
|
421
|
+
if (hintedNamespaces?.size === 1) {
|
|
422
|
+
const [hintedNamespace] = hintedNamespaces;
|
|
423
|
+
if (hintedNamespace) return hintedNamespace;
|
|
424
|
+
}
|
|
425
|
+
const decoded = namespaceIdentityFromToken(dirName);
|
|
426
|
+
if (decoded && namespaceIdentityToken(decoded) === dirName) {
|
|
427
|
+
return decoded;
|
|
428
|
+
}
|
|
429
|
+
return dirName;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Result of resolving a writable namespace: either the authorized namespace
|
|
434
|
+
* or a structured rejection. The caller decides how to surface the rejection
|
|
435
|
+
* (e.g. as an `EngramAccessInputError` in the access-service layer), keeping
|
|
436
|
+
* this module free of transport-specific error types.
|
|
437
|
+
*/
|
|
438
|
+
export type WritableNamespaceResult =
|
|
439
|
+
| { readonly ok: true; readonly namespace: string }
|
|
440
|
+
| { readonly ok: false; readonly reason: "unsupported" | "not_writable"; readonly namespace: string };
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Resolve and authorize a writable namespace.
|
|
444
|
+
*
|
|
445
|
+
* Combines the three steps that `AccessService.resolveWritableNamespace`
|
|
446
|
+
* performed inline: (1) resolve the namespace value (trim → default fallback →
|
|
447
|
+
* validate against `namespacesEnabled`), (2) resolve the principal, (3) check
|
|
448
|
+
* `canWriteNamespace`. Returns a structured result so this module stays free of
|
|
449
|
+
* `EngramAccessInputError` (avoiding a circular dependency on access-service.ts).
|
|
450
|
+
*
|
|
451
|
+
* The caller throws `EngramAccessInputError` when `ok === false` — the access-
|
|
452
|
+
* service wrapper does this in one place.
|
|
453
|
+
*/
|
|
454
|
+
export function resolveWritableNamespaceValue(
|
|
455
|
+
namespace: string | undefined,
|
|
456
|
+
sessionKey: string | undefined,
|
|
457
|
+
authenticatedPrincipal: string | undefined,
|
|
458
|
+
config: PluginConfig,
|
|
459
|
+
): WritableNamespaceResult {
|
|
460
|
+
const requested = namespace?.trim();
|
|
461
|
+
let resolved: string;
|
|
462
|
+
if (!requested) {
|
|
463
|
+
resolved = config.defaultNamespace;
|
|
464
|
+
} else if (
|
|
465
|
+
!config.namespacesEnabled &&
|
|
466
|
+
requested !== config.defaultNamespace
|
|
467
|
+
) {
|
|
468
|
+
return { ok: false, reason: "unsupported", namespace: requested };
|
|
469
|
+
} else {
|
|
470
|
+
resolved = requested;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
const trusted = authenticatedPrincipal?.trim();
|
|
474
|
+
const principal =
|
|
475
|
+
typeof trusted === "string" && trusted.length > 0
|
|
476
|
+
? trusted
|
|
477
|
+
: resolvePrincipal(sessionKey, config);
|
|
478
|
+
|
|
479
|
+
if (!canWriteNamespace(principal, resolved, config)) {
|
|
480
|
+
return { ok: false, reason: "not_writable", namespace: resolved };
|
|
481
|
+
}
|
|
482
|
+
return { ok: true, namespace: resolved };
|
|
483
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -862,6 +862,29 @@ export interface PluginConfig {
|
|
|
862
862
|
* `24`. Parsed from `correction.planTtlHours` / `correctionPlanTtlHours`.
|
|
863
863
|
*/
|
|
864
864
|
correctionPlanTtlHours: number;
|
|
865
|
+
/**
|
|
866
|
+
* Passive correction capture (issue #1581) — detects corrections expressed
|
|
867
|
+
* passively in conversation turns during extraction and routes them to the
|
|
868
|
+
* Correction Contract (#1580). `"off"` disables detection entirely; `"queue"`
|
|
869
|
+
* plans corrections for human review (conservative); `"auto"` applies
|
|
870
|
+
* immediately when all safety guards pass, otherwise falls back to queue.
|
|
871
|
+
* Default `"off"` — operators opt in (rule 48). Parsed from
|
|
872
|
+
* `correctionCapture.mode` / `correctionCaptureMode`.
|
|
873
|
+
*/
|
|
874
|
+
correctionCaptureMode: "off" | "queue" | "auto";
|
|
875
|
+
/**
|
|
876
|
+
* Minimum planner confidence for auto-apply (issue #1581). Plans below this
|
|
877
|
+
* floor are queued even in `"auto"` mode. Default `0.85`. Parsed from
|
|
878
|
+
* `correctionCapture.confidenceFloor` / `correctionCaptureConfidenceFloor`.
|
|
879
|
+
*/
|
|
880
|
+
correctionCaptureConfidenceFloor: number;
|
|
881
|
+
/**
|
|
882
|
+
* Maximum affected memories for auto-apply (issue #1581). Plans touching more
|
|
883
|
+
* memories than this are queued even in `"auto"` mode — a blast-radius cap.
|
|
884
|
+
* Default `2`. Parsed from `correctionCapture.autoApplyMaxAffected` /
|
|
885
|
+
* `correctionCaptureAutoApplyMaxAffected`.
|
|
886
|
+
*/
|
|
887
|
+
correctionCaptureAutoApplyMaxAffected: number;
|
|
865
888
|
// Tombstones — non-resurrection invariant (issue #1579).
|
|
866
889
|
/**
|
|
867
890
|
* Master gate for the tombstone non-resurrection invariant. When `true`
|
|
@@ -2178,6 +2201,19 @@ export interface BriefingResult {
|
|
|
2178
2201
|
* Allows callers to distinguish "no events today" from "source unavailable".
|
|
2179
2202
|
*/
|
|
2180
2203
|
calendarSourceErrors?: BriefingCalendarSourceError[];
|
|
2204
|
+
/**
|
|
2205
|
+
* Auto-applied passive corrections drained from the notification queue at
|
|
2206
|
+
* briefing time (issue #1581). Each carries a one-line summary and the undo
|
|
2207
|
+
* command. Drained exactly once — the queue file is cleared on read, so a
|
|
2208
|
+
* notification appears in at most one briefing. Absent when the correction
|
|
2209
|
+
* capture feature is off or no corrections were auto-applied.
|
|
2210
|
+
*/
|
|
2211
|
+
correctionNotifications?: ReadonlyArray<{
|
|
2212
|
+
planId: string;
|
|
2213
|
+
summary: string;
|
|
2214
|
+
undoCommand: string;
|
|
2215
|
+
createdAt: string;
|
|
2216
|
+
}>;
|
|
2181
2217
|
}
|
|
2182
2218
|
|
|
2183
2219
|
/**
|