@remnic/core 9.21.0 → 9.22.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 +18 -1
- package/dist/access-admin-ops-surface.js +29 -29
- package/dist/access-boundary.d.ts +2 -2
- package/dist/access-boundary.js +29 -29
- package/dist/access-cli.js +80 -79
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +1 -1
- package/dist/access-http.js +38 -37
- package/dist/access-identity-continuity-surface.js +29 -29
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +29 -29
- package/dist/access-mcp-admin-tools.d.ts +18 -0
- package/dist/access-mcp-admin-tools.js +10 -0
- package/dist/access-mcp-admin-tools.js.map +1 -0
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +35 -34
- package/dist/access-namespace-preflight.js +29 -29
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +29 -29
- package/dist/access-operations-batch.js +30 -30
- package/dist/access-operations.d.ts +5 -5
- package/dist/access-operations.js +32 -32
- package/dist/access-recall-concurrency.d.ts +1 -1
- package/dist/access-recall-concurrency.js +29 -29
- package/dist/access-recall-response.d.ts +1 -1
- package/dist/access-recall-response.js +29 -29
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +29 -29
- package/dist/access-schema.d.ts +76 -76
- package/dist/{access-service-BqUii7LY.d.ts → access-service-BtxW52vv.d.ts} +10 -0
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +31 -31
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/access-surface-catalog.js +1 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +5 -5
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/auto-sync-UPTUVE4X.js +1 -1
- package/dist/briefing.js +8 -8
- package/dist/causal-consolidation.js +9 -9
- package/dist/{chunk-JWMYVQAM.js → chunk-55FDQYPS.js} +2 -2
- package/dist/chunk-56BSXSHC.js +158 -0
- package/dist/chunk-56BSXSHC.js.map +1 -0
- package/dist/{chunk-62QM5MKY.js → chunk-6ANPNUVL.js} +68 -34
- package/dist/chunk-6ANPNUVL.js.map +1 -0
- package/dist/{chunk-EZKKHVFY.js → chunk-6L775BUB.js} +2 -2
- package/dist/{chunk-LI4ZOFHW.js → chunk-6RYWNBSA.js} +2 -2
- package/dist/{chunk-5IXPWEQB.js → chunk-7S5OMI76.js} +9 -9
- package/dist/{chunk-5IXPWEQB.js.map → chunk-7S5OMI76.js.map} +1 -1
- package/dist/{chunk-SB4OKS6C.js → chunk-A5N6ISRK.js} +2 -2
- package/dist/{chunk-V5TSUGRB.js → chunk-ACGGTPU4.js} +5 -5
- package/dist/{chunk-B7C3TF5H.js → chunk-BRT7KEXU.js} +2 -2
- package/dist/{chunk-JN3IUA2Q.js → chunk-CV6ZYXK3.js} +3 -3
- package/dist/{chunk-N7EVMKP6.js → chunk-DGLON3AL.js} +10 -10
- package/dist/{chunk-5RUE3GHQ.js → chunk-DM5A4ZFL.js} +7 -1
- package/dist/chunk-DM5A4ZFL.js.map +1 -0
- package/dist/{chunk-KHRKEELC.js → chunk-EQYBHXRR.js} +34 -34
- package/dist/{chunk-Z54EM5YZ.js → chunk-GF22HWS2.js} +4 -4
- package/dist/{chunk-QO2KODU6.js → chunk-GSWPU5CR.js} +2 -2
- package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
- package/dist/{chunk-5JQLAQUZ.js → chunk-JN57HZCD.js} +2 -2
- package/dist/{chunk-X5QS5C2O.js → chunk-KL5Y6PEV.js} +2 -2
- package/dist/{chunk-275ENJDK.js → chunk-KQ2XCQYN.js} +2 -2
- package/dist/{chunk-HJEEAO4O.js → chunk-N47ZWQBO.js} +2 -2
- package/dist/{chunk-AT3TDN6O.js → chunk-N6M7MRVN.js} +83 -83
- package/dist/{chunk-EXU5IQ3S.js → chunk-NB2P47N7.js} +2 -2
- package/dist/{chunk-53WDAG7X.js → chunk-OCMLGND7.js} +2 -2
- package/dist/{chunk-3ZUY2VQF.js → chunk-P72WZMWQ.js} +2 -2
- package/dist/{chunk-LRGSLV7M.js → chunk-PYHOAXTI.js} +4 -4
- package/dist/{chunk-4F6AANKS.js → chunk-QMGIQUBG.js} +5 -5
- package/dist/{chunk-TCZWBJBO.js → chunk-QTO2FGBT.js} +11 -142
- package/dist/chunk-QTO2FGBT.js.map +1 -0
- package/dist/{chunk-Q3FWRDCP.js → chunk-SACPRJ7F.js} +2 -2
- package/dist/{chunk-HPOY2PHQ.js → chunk-TTKWTT72.js} +6 -6
- package/dist/{chunk-EILX7SQR.js → chunk-W3XT32W7.js} +7 -6
- package/dist/chunk-W3XT32W7.js.map +1 -0
- package/dist/{chunk-MJYYXODM.js → chunk-XBRPEGXF.js} +4 -4
- package/dist/{cli-DPEhq0Cp.d.ts → cli-D9vXgWwM.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +59 -58
- package/dist/compounding/engine.js +8 -8
- package/dist/config.js +2 -2
- package/dist/connectors/codex-materialize-runner.js +8 -8
- package/dist/connectors/index.js +9 -9
- package/dist/contradiction/index.js +1 -1
- package/dist/entity-retrieval.js +8 -8
- package/dist/explicit-capture.js +1 -1
- package/dist/index.d.ts +407 -407
- package/dist/index.js +133 -132
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.js +4 -4
- package/dist/maintenance/memory-governance.js +8 -8
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
- package/dist/maintenance/rebuild-memory-projection.js +9 -9
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/namespaces/migrate.js +12 -12
- package/dist/namespaces/search.js +3 -3
- package/dist/namespaces/storage.js +8 -8
- package/dist/offline-sync-impression-drain.js +1 -1
- package/dist/operator-toolkit.js +19 -19
- package/dist/orchestration/maintenance.js +14 -14
- package/dist/orchestrator.js +76 -75
- package/dist/resolution-3K27T4VO.js +1 -1
- package/dist/resume-bundles.js +3 -3
- package/dist/salvage-envelope.js +1 -1
- package/dist/schemas.d.ts +76 -76
- package/dist/search/factory.js +2 -2
- package/dist/search/index.js +4 -4
- package/dist/semantic-consolidation.js +9 -9
- package/dist/semantic-rule-promotion.js +8 -8
- package/dist/semantic-rule-verifier.js +8 -8
- package/dist/shared-context/manager.d.ts +8 -8
- package/dist/storage.js +7 -7
- package/dist/transfer/import-sqlite.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/verified-recall.js +8 -8
- package/dist/write-envelope.js +1 -1
- package/package.json +2 -2
- package/src/access-admin-ops-surface.ts +47 -0
- package/src/access-boundary.ts +1 -0
- package/src/access-http.ts +1 -0
- package/src/access-mcp-admin-tools.ts +171 -0
- package/src/access-mcp-output-schemas.ts +6 -0
- package/src/access-mcp.ts +6 -141
- package/src/access-operations-batch.ts +1 -0
- package/src/access-service.ts +16 -0
- package/src/access-surface-catalog.ts +1 -0
- package/dist/chunk-5RUE3GHQ.js.map +0 -1
- package/dist/chunk-62QM5MKY.js.map +0 -1
- package/dist/chunk-EILX7SQR.js.map +0 -1
- package/dist/chunk-TCZWBJBO.js.map +0 -1
- /package/dist/{chunk-JWMYVQAM.js.map → chunk-55FDQYPS.js.map} +0 -0
- /package/dist/{chunk-EZKKHVFY.js.map → chunk-6L775BUB.js.map} +0 -0
- /package/dist/{chunk-LI4ZOFHW.js.map → chunk-6RYWNBSA.js.map} +0 -0
- /package/dist/{chunk-SB4OKS6C.js.map → chunk-A5N6ISRK.js.map} +0 -0
- /package/dist/{chunk-V5TSUGRB.js.map → chunk-ACGGTPU4.js.map} +0 -0
- /package/dist/{chunk-B7C3TF5H.js.map → chunk-BRT7KEXU.js.map} +0 -0
- /package/dist/{chunk-JN3IUA2Q.js.map → chunk-CV6ZYXK3.js.map} +0 -0
- /package/dist/{chunk-N7EVMKP6.js.map → chunk-DGLON3AL.js.map} +0 -0
- /package/dist/{chunk-KHRKEELC.js.map → chunk-EQYBHXRR.js.map} +0 -0
- /package/dist/{chunk-Z54EM5YZ.js.map → chunk-GF22HWS2.js.map} +0 -0
- /package/dist/{chunk-QO2KODU6.js.map → chunk-GSWPU5CR.js.map} +0 -0
- /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-5JQLAQUZ.js.map → chunk-JN57HZCD.js.map} +0 -0
- /package/dist/{chunk-X5QS5C2O.js.map → chunk-KL5Y6PEV.js.map} +0 -0
- /package/dist/{chunk-275ENJDK.js.map → chunk-KQ2XCQYN.js.map} +0 -0
- /package/dist/{chunk-HJEEAO4O.js.map → chunk-N47ZWQBO.js.map} +0 -0
- /package/dist/{chunk-AT3TDN6O.js.map → chunk-N6M7MRVN.js.map} +0 -0
- /package/dist/{chunk-EXU5IQ3S.js.map → chunk-NB2P47N7.js.map} +0 -0
- /package/dist/{chunk-53WDAG7X.js.map → chunk-OCMLGND7.js.map} +0 -0
- /package/dist/{chunk-3ZUY2VQF.js.map → chunk-P72WZMWQ.js.map} +0 -0
- /package/dist/{chunk-LRGSLV7M.js.map → chunk-PYHOAXTI.js.map} +0 -0
- /package/dist/{chunk-4F6AANKS.js.map → chunk-QMGIQUBG.js.map} +0 -0
- /package/dist/{chunk-Q3FWRDCP.js.map → chunk-SACPRJ7F.js.map} +0 -0
- /package/dist/{chunk-HPOY2PHQ.js.map → chunk-TTKWTT72.js.map} +0 -0
- /package/dist/{chunk-MJYYXODM.js.map → chunk-XBRPEGXF.js.map} +0 -0
package/dist/write-envelope.js
CHANGED
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
import "./chunk-R3DJVOSM.js";
|
|
16
16
|
import "./chunk-BT7NVCML.js";
|
|
17
17
|
import "./chunk-5GKPFL3S.js";
|
|
18
|
-
import "./chunk-JAKIDQB2.js";
|
|
19
18
|
import "./chunk-P7FMDTKL.js";
|
|
19
|
+
import "./chunk-JAKIDQB2.js";
|
|
20
20
|
import "./chunk-PZ5AY32C.js";
|
|
21
21
|
export {
|
|
22
22
|
FINGERPRINT_EXEMPT_FIELDS,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.22.0",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -3045,7 +3045,7 @@
|
|
|
3045
3045
|
"core"
|
|
3046
3046
|
],
|
|
3047
3047
|
"peerDependencies": {
|
|
3048
|
-
"@remnic/coding-graph": "^9.
|
|
3048
|
+
"@remnic/coding-graph": "^9.22.0"
|
|
3049
3049
|
},
|
|
3050
3050
|
"peerDependenciesMeta": {
|
|
3051
3051
|
"@remnic/coding-graph": {
|
|
@@ -215,6 +215,53 @@ export class AccessAdminOpsSurface {
|
|
|
215
215
|
};
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Operator-triggered bulk drain of the entity synthesis queue (issue #2136).
|
|
220
|
+
* Every automatic call site processes at most 5 entities per event, which a
|
|
221
|
+
* busy deployment's queue inflow outruns; this surface drains a bounded
|
|
222
|
+
* batch on demand. `maxEntities` is clamped to 200 per call so a single
|
|
223
|
+
* request stays bounded; loop until `processed < requested` to drain fully.
|
|
224
|
+
*/
|
|
225
|
+
async entitySynthesisRun(
|
|
226
|
+
request: {
|
|
227
|
+
namespace?: string;
|
|
228
|
+
maxEntities?: number;
|
|
229
|
+
authenticatedPrincipal?: string;
|
|
230
|
+
},
|
|
231
|
+
principal?: string,
|
|
232
|
+
): Promise<{
|
|
233
|
+
namespace: string;
|
|
234
|
+
requested: number;
|
|
235
|
+
processed: number;
|
|
236
|
+
remaining: number;
|
|
237
|
+
}> {
|
|
238
|
+
const resolvedNamespace = this.deps.writableNamespaceFor(
|
|
239
|
+
request.namespace,
|
|
240
|
+
undefined,
|
|
241
|
+
request.authenticatedPrincipal ?? principal,
|
|
242
|
+
);
|
|
243
|
+
let requested = 25;
|
|
244
|
+
if (request.maxEntities !== undefined) {
|
|
245
|
+
if (
|
|
246
|
+
typeof request.maxEntities !== "number"
|
|
247
|
+
|| !Number.isInteger(request.maxEntities)
|
|
248
|
+
|| request.maxEntities < 1
|
|
249
|
+
) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
`Invalid maxEntities: ${String(request.maxEntities)} (expected an integer >= 1)`,
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
requested = Math.min(200, request.maxEntities);
|
|
255
|
+
}
|
|
256
|
+
const processed = await this.deps.orchestrator.entitySynthesisCoordinator.processQueue(
|
|
257
|
+
resolvedNamespace,
|
|
258
|
+
requested,
|
|
259
|
+
);
|
|
260
|
+
const storage = await this.deps.orchestrator.getStorage(resolvedNamespace);
|
|
261
|
+
const remaining = (await storage.readEntitySynthesisQueue()).length;
|
|
262
|
+
return { namespace: resolvedNamespace, requested, processed, remaining };
|
|
263
|
+
}
|
|
264
|
+
|
|
218
265
|
async conversationIndexUpdate(
|
|
219
266
|
request: {
|
|
220
267
|
sessionKey?: string;
|
package/src/access-boundary.ts
CHANGED
package/src/access-http.ts
CHANGED
|
@@ -3224,6 +3224,7 @@ export class EngramAccessHttpServer {
|
|
|
3224
3224
|
toolName === "remnic.capsule_export" ||
|
|
3225
3225
|
toolName === "engram.capsule_import" ||
|
|
3226
3226
|
toolName === "remnic.capsule_import" ||
|
|
3227
|
+
toolName === "engram.entity_synthesis_run" || toolName === "remnic.entity_synthesis_run" ||
|
|
3227
3228
|
(
|
|
3228
3229
|
!dreamsRunDryRun &&
|
|
3229
3230
|
(toolName === "engram.dreams_run" || toolName === "remnic.dreams_run")
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool-listing entries for the admin/maintenance operation surface
|
|
3
|
+
* (capsules, governance, entity synthesis, procedure mining, pattern
|
|
4
|
+
* reinforcement, procedural stats). Extracted from access-mcp.ts (#2136)
|
|
5
|
+
* to keep the transport file under its structural-ratchet ceiling; the
|
|
6
|
+
* dispatch name map and operation handlers stay in their existing homes.
|
|
7
|
+
*/
|
|
8
|
+
/** Git-context schema props accepted-and-ignored by every tool (issue #569
|
|
9
|
+
* compatibility surface) — defined here so the tool tables and the transport
|
|
10
|
+
* share one copy without an import cycle. */
|
|
11
|
+
export const MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED: Record<string, unknown> = {
|
|
12
|
+
cwd: {
|
|
13
|
+
type: "string",
|
|
14
|
+
description: "Accepted for MCP client compatibility (git-context auto-injection); ignored by this tool.",
|
|
15
|
+
},
|
|
16
|
+
projectTag: {
|
|
17
|
+
type: "string",
|
|
18
|
+
description: "Accepted for MCP client compatibility; ignored by this tool.",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const MCP_ADMIN_OPS_TOOLS: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
inputSchema: Record<string, unknown>;
|
|
26
|
+
}> = [
|
|
27
|
+
{
|
|
28
|
+
name: "engram.capsule_export",
|
|
29
|
+
description: "Export a portable Remnic capsule archive from the namespace-scoped memory store.",
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
name: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Capsule id (alphanumeric with single dashes, max 64 characters).",
|
|
36
|
+
},
|
|
37
|
+
namespace: { type: "string" },
|
|
38
|
+
since: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Only include files modified on or after this ISO 8601 timestamp.",
|
|
41
|
+
},
|
|
42
|
+
includeKinds: {
|
|
43
|
+
type: "array",
|
|
44
|
+
items: { type: "string" },
|
|
45
|
+
description: "Optional top-level directory allow-list.",
|
|
46
|
+
},
|
|
47
|
+
peerIds: {
|
|
48
|
+
type: "array",
|
|
49
|
+
items: { type: "string" },
|
|
50
|
+
description: "Optional peer id allow-list for the peers/ subtree.",
|
|
51
|
+
},
|
|
52
|
+
includeTranscripts: { type: "boolean" },
|
|
53
|
+
encrypt: { type: "boolean" },
|
|
54
|
+
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
55
|
+
},
|
|
56
|
+
required: ["name"],
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "engram.capsule_import",
|
|
62
|
+
description: "Import a Remnic capsule archive into the namespace-scoped memory store.",
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {
|
|
66
|
+
archivePath: {
|
|
67
|
+
type: "string",
|
|
68
|
+
description: "Path to a .capsule.json.gz or .capsule.json.gz.enc archive.",
|
|
69
|
+
},
|
|
70
|
+
namespace: { type: "string" },
|
|
71
|
+
mode: {
|
|
72
|
+
type: "string",
|
|
73
|
+
enum: ["skip", "overwrite", "fork"],
|
|
74
|
+
description: "Conflict handling mode. Defaults to skip.",
|
|
75
|
+
},
|
|
76
|
+
passphrase: {
|
|
77
|
+
type: "string",
|
|
78
|
+
description: "Passphrase for encrypted capsule archives.",
|
|
79
|
+
},
|
|
80
|
+
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
81
|
+
},
|
|
82
|
+
required: ["archivePath"],
|
|
83
|
+
additionalProperties: false,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "engram.capsule_list",
|
|
88
|
+
description: "List capsule archives in the namespace-scoped capsule store.",
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: "object",
|
|
91
|
+
properties: {
|
|
92
|
+
namespace: { type: "string" },
|
|
93
|
+
sessionKey: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description:
|
|
96
|
+
"Optional session key used to derive namespace principal when no trusted transport principal is present.",
|
|
97
|
+
},
|
|
98
|
+
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
99
|
+
},
|
|
100
|
+
additionalProperties: false,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "engram.memory_governance_run",
|
|
105
|
+
description: "Run Remnic memory governance in a bounded shadow/apply pass.",
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: {
|
|
109
|
+
namespace: { type: "string" },
|
|
110
|
+
mode: { type: "string", enum: ["shadow", "apply"] },
|
|
111
|
+
recentDays: { type: "number" },
|
|
112
|
+
maxMemories: { type: "number" },
|
|
113
|
+
batchSize: { type: "number" },
|
|
114
|
+
},
|
|
115
|
+
additionalProperties: false,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "engram.entity_synthesis_run",
|
|
120
|
+
description:
|
|
121
|
+
"Bulk-drain the entity synthesis queue (issue #2136). Processes up to maxEntities (default 25, max 200) queued entity names into canonical syntheses; loop until processed < requested to drain fully.",
|
|
122
|
+
inputSchema: {
|
|
123
|
+
type: "object",
|
|
124
|
+
properties: {
|
|
125
|
+
namespace: { type: "string" },
|
|
126
|
+
maxEntities: { type: "number" },
|
|
127
|
+
},
|
|
128
|
+
additionalProperties: false,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "engram.procedure_mining_run",
|
|
133
|
+
description:
|
|
134
|
+
"Run procedural memory mining from causal trajectories (issue #519). Respects procedural.enabled; writes under procedures/ when clusters qualify.",
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: "object",
|
|
137
|
+
properties: {
|
|
138
|
+
namespace: { type: "string" },
|
|
139
|
+
},
|
|
140
|
+
additionalProperties: false,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: "engram.pattern_reinforcement_run",
|
|
145
|
+
description:
|
|
146
|
+
"Run the pattern-reinforcement maintenance job (issue #687 PR 2/4). Clusters duplicate non-procedural memories by normalized content, promotes the most-recent member to canonical, and supersedes the older duplicates. Gated on patternReinforcementEnabled and the patternReinforcementCadenceMs floor — pass force=true to bypass the cadence for an ad-hoc operator run.",
|
|
147
|
+
inputSchema: {
|
|
148
|
+
type: "object",
|
|
149
|
+
properties: {
|
|
150
|
+
namespace: { type: "string" },
|
|
151
|
+
force: { type: "boolean" },
|
|
152
|
+
},
|
|
153
|
+
additionalProperties: false,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
// The canonical `remnic.procedural_stats` alias is added automatically
|
|
158
|
+
// by `withToolAliases` — the dual-naming invariant keeps both names
|
|
159
|
+
// alive for the legacy surface.
|
|
160
|
+
name: "engram.procedural_stats",
|
|
161
|
+
description:
|
|
162
|
+
"Procedural memory stats (issue #567): counts by status, recent write activity, and the active procedural.* config. Read-only, namespace-scoped.",
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: "object",
|
|
165
|
+
properties: {
|
|
166
|
+
namespace: { type: "string" },
|
|
167
|
+
},
|
|
168
|
+
additionalProperties: false,
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
];
|
|
@@ -85,6 +85,12 @@ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
|
|
|
85
85
|
}),
|
|
86
86
|
capsule_import: objectSchema({ imported: T_ARRAY, skipped: T_ARRAY, manifest: T_OBJECT }),
|
|
87
87
|
capsule_list: objectSchema({ namespace: T_STRING, capsulesDir: T_STRING, capsules: T_ARRAY }),
|
|
88
|
+
entity_synthesis_run: objectSchema({
|
|
89
|
+
namespace: T_STRING,
|
|
90
|
+
requested: T_NUMBER,
|
|
91
|
+
processed: T_NUMBER,
|
|
92
|
+
remaining: T_NUMBER,
|
|
93
|
+
}),
|
|
88
94
|
memory_governance_run: objectSchema({
|
|
89
95
|
namespace: T_STRING,
|
|
90
96
|
runId: T_STRING,
|
package/src/access-mcp.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import {
|
|
3
|
+
MCP_ADMIN_OPS_TOOLS,
|
|
4
|
+
MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
5
|
+
} from "./access-mcp-admin-tools.js";
|
|
2
6
|
import { readFile } from "node:fs/promises";
|
|
3
7
|
import type { Readable, Writable } from "node:stream";
|
|
4
8
|
// Importing access-operations registers the pilot boundary operations
|
|
@@ -192,6 +196,7 @@ const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> = {
|
|
|
192
196
|
"engram.capsule_import": "capsule_import",
|
|
193
197
|
"engram.capsule_list": "capsule_list",
|
|
194
198
|
"engram.memory_governance_run": "memory_governance_run",
|
|
199
|
+
"engram.entity_synthesis_run": "entity_synthesis_run",
|
|
195
200
|
"engram.procedure_mining_run": "procedure_mining_run",
|
|
196
201
|
"engram.pattern_reinforcement_run": "pattern_reinforcement_run",
|
|
197
202
|
"engram.procedural_stats": "procedural_stats",
|
|
@@ -333,16 +338,6 @@ const MCP_GIT_CONTEXT_SCHEMA_PROPS_SCOPED: Record<string, unknown> = {
|
|
|
333
338
|
"Optional project tag for non-git project scoping. When no explicit namespace is given, routes this write to the tagged project namespace.",
|
|
334
339
|
},
|
|
335
340
|
};
|
|
336
|
-
const MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED: Record<string, unknown> = {
|
|
337
|
-
cwd: {
|
|
338
|
-
type: "string",
|
|
339
|
-
description: "Accepted for MCP client compatibility (git-context auto-injection); ignored by this tool.",
|
|
340
|
-
},
|
|
341
|
-
projectTag: {
|
|
342
|
-
type: "string",
|
|
343
|
-
description: "Accepted for MCP client compatibility; ignored by this tool.",
|
|
344
|
-
},
|
|
345
|
-
};
|
|
346
341
|
|
|
347
342
|
function parseMcpRequest<N extends SchemaName>(schemaName: N, args: Record<string, unknown>): SchemaTypeFor<N> {
|
|
348
343
|
const allowedKeys = STRICT_MCP_SCHEMA_KEYS[schemaName];
|
|
@@ -976,137 +971,7 @@ export class EngramMcpServer {
|
|
|
976
971
|
additionalProperties: false,
|
|
977
972
|
},
|
|
978
973
|
},
|
|
979
|
-
|
|
980
|
-
name: "engram.capsule_export",
|
|
981
|
-
description: "Export a portable Remnic capsule archive from the namespace-scoped memory store.",
|
|
982
|
-
inputSchema: {
|
|
983
|
-
type: "object",
|
|
984
|
-
properties: {
|
|
985
|
-
name: {
|
|
986
|
-
type: "string",
|
|
987
|
-
description: "Capsule id (alphanumeric with single dashes, max 64 characters).",
|
|
988
|
-
},
|
|
989
|
-
namespace: { type: "string" },
|
|
990
|
-
since: {
|
|
991
|
-
type: "string",
|
|
992
|
-
description: "Only include files modified on or after this ISO 8601 timestamp.",
|
|
993
|
-
},
|
|
994
|
-
includeKinds: {
|
|
995
|
-
type: "array",
|
|
996
|
-
items: { type: "string" },
|
|
997
|
-
description: "Optional top-level directory allow-list.",
|
|
998
|
-
},
|
|
999
|
-
peerIds: {
|
|
1000
|
-
type: "array",
|
|
1001
|
-
items: { type: "string" },
|
|
1002
|
-
description: "Optional peer id allow-list for the peers/ subtree.",
|
|
1003
|
-
},
|
|
1004
|
-
includeTranscripts: { type: "boolean" },
|
|
1005
|
-
encrypt: { type: "boolean" },
|
|
1006
|
-
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
1007
|
-
},
|
|
1008
|
-
required: ["name"],
|
|
1009
|
-
additionalProperties: false,
|
|
1010
|
-
},
|
|
1011
|
-
},
|
|
1012
|
-
{
|
|
1013
|
-
name: "engram.capsule_import",
|
|
1014
|
-
description: "Import a Remnic capsule archive into the namespace-scoped memory store.",
|
|
1015
|
-
inputSchema: {
|
|
1016
|
-
type: "object",
|
|
1017
|
-
properties: {
|
|
1018
|
-
archivePath: {
|
|
1019
|
-
type: "string",
|
|
1020
|
-
description: "Path to a .capsule.json.gz or .capsule.json.gz.enc archive.",
|
|
1021
|
-
},
|
|
1022
|
-
namespace: { type: "string" },
|
|
1023
|
-
mode: {
|
|
1024
|
-
type: "string",
|
|
1025
|
-
enum: ["skip", "overwrite", "fork"],
|
|
1026
|
-
description: "Conflict handling mode. Defaults to skip.",
|
|
1027
|
-
},
|
|
1028
|
-
passphrase: {
|
|
1029
|
-
type: "string",
|
|
1030
|
-
description: "Passphrase for encrypted capsule archives.",
|
|
1031
|
-
},
|
|
1032
|
-
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
1033
|
-
},
|
|
1034
|
-
required: ["archivePath"],
|
|
1035
|
-
additionalProperties: false,
|
|
1036
|
-
},
|
|
1037
|
-
},
|
|
1038
|
-
{
|
|
1039
|
-
name: "engram.capsule_list",
|
|
1040
|
-
description: "List capsule archives in the namespace-scoped capsule store.",
|
|
1041
|
-
inputSchema: {
|
|
1042
|
-
type: "object",
|
|
1043
|
-
properties: {
|
|
1044
|
-
namespace: { type: "string" },
|
|
1045
|
-
sessionKey: {
|
|
1046
|
-
type: "string",
|
|
1047
|
-
description:
|
|
1048
|
-
"Optional session key used to derive namespace principal when no trusted transport principal is present.",
|
|
1049
|
-
},
|
|
1050
|
-
...MCP_GIT_CONTEXT_SCHEMA_PROPS_IGNORED,
|
|
1051
|
-
},
|
|
1052
|
-
additionalProperties: false,
|
|
1053
|
-
},
|
|
1054
|
-
},
|
|
1055
|
-
{
|
|
1056
|
-
name: "engram.memory_governance_run",
|
|
1057
|
-
description: "Run Remnic memory governance in a bounded shadow/apply pass.",
|
|
1058
|
-
inputSchema: {
|
|
1059
|
-
type: "object",
|
|
1060
|
-
properties: {
|
|
1061
|
-
namespace: { type: "string" },
|
|
1062
|
-
mode: { type: "string", enum: ["shadow", "apply"] },
|
|
1063
|
-
recentDays: { type: "number" },
|
|
1064
|
-
maxMemories: { type: "number" },
|
|
1065
|
-
batchSize: { type: "number" },
|
|
1066
|
-
},
|
|
1067
|
-
additionalProperties: false,
|
|
1068
|
-
},
|
|
1069
|
-
},
|
|
1070
|
-
{
|
|
1071
|
-
name: "engram.procedure_mining_run",
|
|
1072
|
-
description:
|
|
1073
|
-
"Run procedural memory mining from causal trajectories (issue #519). Respects procedural.enabled; writes under procedures/ when clusters qualify.",
|
|
1074
|
-
inputSchema: {
|
|
1075
|
-
type: "object",
|
|
1076
|
-
properties: {
|
|
1077
|
-
namespace: { type: "string" },
|
|
1078
|
-
},
|
|
1079
|
-
additionalProperties: false,
|
|
1080
|
-
},
|
|
1081
|
-
},
|
|
1082
|
-
{
|
|
1083
|
-
name: "engram.pattern_reinforcement_run",
|
|
1084
|
-
description:
|
|
1085
|
-
"Run the pattern-reinforcement maintenance job (issue #687 PR 2/4). Clusters duplicate non-procedural memories by normalized content, promotes the most-recent member to canonical, and supersedes the older duplicates. Gated on patternReinforcementEnabled and the patternReinforcementCadenceMs floor — pass force=true to bypass the cadence for an ad-hoc operator run.",
|
|
1086
|
-
inputSchema: {
|
|
1087
|
-
type: "object",
|
|
1088
|
-
properties: {
|
|
1089
|
-
namespace: { type: "string" },
|
|
1090
|
-
force: { type: "boolean" },
|
|
1091
|
-
},
|
|
1092
|
-
additionalProperties: false,
|
|
1093
|
-
},
|
|
1094
|
-
},
|
|
1095
|
-
{
|
|
1096
|
-
// The canonical `remnic.procedural_stats` alias is added automatically
|
|
1097
|
-
// by `withToolAliases` — the dual-naming invariant keeps both names
|
|
1098
|
-
// alive for the legacy surface.
|
|
1099
|
-
name: "engram.procedural_stats",
|
|
1100
|
-
description:
|
|
1101
|
-
"Procedural memory stats (issue #567): counts by status, recent write activity, and the active procedural.* config. Read-only, namespace-scoped.",
|
|
1102
|
-
inputSchema: {
|
|
1103
|
-
type: "object",
|
|
1104
|
-
properties: {
|
|
1105
|
-
namespace: { type: "string" },
|
|
1106
|
-
},
|
|
1107
|
-
additionalProperties: false,
|
|
1108
|
-
},
|
|
1109
|
-
},
|
|
974
|
+
...MCP_ADMIN_OPS_TOOLS,
|
|
1110
975
|
{
|
|
1111
976
|
name: "engram.memory_get",
|
|
1112
977
|
description: "Fetch one Remnic memory by id.",
|
|
@@ -175,6 +175,7 @@ defineOperation({ name: "capsule_list", description: "List capsules.", schema: s
|
|
|
175
175
|
|
|
176
176
|
// === GOVERNANCE ===
|
|
177
177
|
defineOperation({ name: "memory_governance_run", description: "Run governance.", schema: strictSchema({ namespace: S.str, mode: S.str, recentDays: S.num, maxMemories: S.num, batchSize: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.governanceRun({ namespace: optStr(input.namespace), mode: optStr(input.mode) === "apply" ? "apply" : "shadow", recentDays: optNum(input.recentDays), maxMemories: optNum(input.maxMemories), batchSize: optNum(input.batchSize), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });
|
|
178
|
+
defineOperation({ name: "entity_synthesis_run", description: "Bulk-drain the entity synthesis queue (issue #2136).", schema: strictSchema({ namespace: S.str, maxEntities: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.entitySynthesisRun({ namespace: optStr(input.namespace), maxEntities: input.maxEntities === undefined ? undefined : (input.maxEntities as number), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });
|
|
178
179
|
defineOperation({ name: "procedure_mining_run", description: "Run procedure mining.", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.procedureMiningRun({ namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });
|
|
179
180
|
defineOperation({ name: "pattern_reinforcement_run", description: "Run pattern reinforcement.", schema: strictSchema({ namespace: S.str, force: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.patternReinforcementRun({ namespace: optStr(input.namespace), force: input.force === true, authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });
|
|
180
181
|
defineOperation({ name: "procedural_stats", description: "Procedural stats.", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.procedureStats({ namespace: optStr(input.namespace) }, ctx.authenticatedPrincipal) }) });
|
package/src/access-service.ts
CHANGED
|
@@ -3622,6 +3622,22 @@ export class EngramAccessService {
|
|
|
3622
3622
|
);
|
|
3623
3623
|
}
|
|
3624
3624
|
|
|
3625
|
+
async entitySynthesisRun(
|
|
3626
|
+
request: {
|
|
3627
|
+
namespace?: string;
|
|
3628
|
+
maxEntities?: number;
|
|
3629
|
+
authenticatedPrincipal?: string;
|
|
3630
|
+
},
|
|
3631
|
+
principal?: string,
|
|
3632
|
+
): Promise<{
|
|
3633
|
+
namespace: string;
|
|
3634
|
+
requested: number;
|
|
3635
|
+
processed: number;
|
|
3636
|
+
remaining: number;
|
|
3637
|
+
}> {
|
|
3638
|
+
return this.accessAdminOpsSurface.entitySynthesisRun(request, principal);
|
|
3639
|
+
}
|
|
3640
|
+
|
|
3625
3641
|
async procedureMiningRun(
|
|
3626
3642
|
request: {
|
|
3627
3643
|
namespace?: string;
|
|
@@ -66,6 +66,7 @@ export const MCP_TOOLS: readonly McpToolEntry[] = [
|
|
|
66
66
|
{ tool: "capsule_import", operation: "capsule_import" },
|
|
67
67
|
{ tool: "capsule_list", operation: "capsule_list" },
|
|
68
68
|
{ tool: "memory_governance_run", operation: "memory_governance_run" },
|
|
69
|
+
{ tool: "entity_synthesis_run", operation: "entity_synthesis_run" },
|
|
69
70
|
{ tool: "procedure_mining_run", operation: "procedure_mining_run" },
|
|
70
71
|
{ tool: "pattern_reinforcement_run", operation: "pattern_reinforcement_run" },
|
|
71
72
|
{ tool: "procedural_stats", operation: "procedural_stats" },
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/access-mcp-output-schemas.ts"],"sourcesContent":["/**\n * Output-schema registry for MCP tools — extracted from access-mcp.ts to\n * keep that file under the 3000-LOC structural ratchet.\n *\n * Contains the per-suffix JSON-Schema declarations (derived from\n * production TS return contracts) and the application helper that\n * assigns schemas to tool objects.\n */\n\nconst T_STRING = { type: \"string\" } as const;\nconst T_NUMBER = { type: \"number\" } as const;\nconst T_BOOLEAN = { type: \"boolean\" } as const;\nconst T_ARRAY = { type: \"array\" } as const;\nconst T_OBJECT = { type: \"object\" } as const;\nconst T_NULLABLE_OBJECT = { type: [\"object\", \"null\"] } as const;\nconst T_NULLABLE_STRING = { type: [\"string\", \"null\"] } as const;\n\n/** Build a JSON Schema object type with the given properties. */\nfunction objectSchema(properties: Record<string, Readonly<Record<string, unknown>>>): Record<string, unknown> {\n return { type: \"object\", properties, additionalProperties: true };\n}\n\n/**\n * Per-suffix outputSchema registry. Tools not present here fall back to\n * `{ type: \"object\", additionalProperties: true }` in the constructor pass.\n * The `chatgpt_memory_inspector` tool ships its own precise schema and is\n * intentionally absent — the apply pass skips tools that already have one.\n */\nconst TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {\n recall: objectSchema({\n query: T_STRING,\n namespace: T_STRING,\n context: T_STRING,\n count: T_NUMBER,\n memoryIds: T_ARRAY,\n results: T_ARRAY,\n fallbackUsed: T_BOOLEAN,\n sourcesUsed: T_ARRAY,\n }),\n recall_explain: objectSchema({\n found: T_BOOLEAN,\n snapshot: T_OBJECT,\n intent: T_NULLABLE_OBJECT,\n graph: T_NULLABLE_OBJECT,\n }),\n recall_tier_explain: objectSchema({ snapshotFound: T_BOOLEAN, tierExplain: T_NULLABLE_OBJECT }),\n recall_xray: objectSchema({ snapshotFound: T_BOOLEAN, snapshot: T_OBJECT }),\n set_coding_context: objectSchema({ ok: T_BOOLEAN }),\n wearables_status: objectSchema({\n enabled: T_BOOLEAN,\n timezone: T_STRING,\n sources: T_ARRAY,\n connectorsInstalled: T_ARRAY,\n }),\n wearables_sync: T_ARRAY,\n transcript_day: T_ARRAY,\n transcript_search: T_ARRAY,\n transcript_memories: T_ARRAY,\n action_confidence: objectSchema({\n schemaVersion: T_NUMBER,\n decision: T_STRING,\n confidence: T_NUMBER,\n risk: T_STRING,\n contextReadiness: T_STRING,\n intendedAction: T_STRING,\n attentionPolicy: T_STRING,\n principle: T_STRING,\n reasons: T_ARRAY,\n blockers: T_ARRAY,\n factors: T_ARRAY,\n retrievedMemoryCount: T_NUMBER,\n scopeMismatchCount: T_NUMBER,\n safeToAct: T_BOOLEAN,\n }),\n day_summary: {\n type: [\"object\", \"null\"],\n properties: { summary: T_STRING, bullets: T_ARRAY, next_actions: T_ARRAY, risks_or_open_loops: T_ARRAY },\n additionalProperties: true,\n },\n capsule_export: objectSchema({\n archivePath: T_STRING,\n manifestPath: T_STRING,\n encryptedArchivePath: T_NULLABLE_STRING,\n manifest: T_OBJECT,\n }),\n capsule_import: objectSchema({ imported: T_ARRAY, skipped: T_ARRAY, manifest: T_OBJECT }),\n capsule_list: objectSchema({ namespace: T_STRING, capsulesDir: T_STRING, capsules: T_ARRAY }),\n memory_governance_run: objectSchema({\n namespace: T_STRING,\n runId: T_STRING,\n traceId: T_STRING,\n mode: T_STRING,\n reviewQueueCount: T_NUMBER,\n proposedActionCount: T_NUMBER,\n appliedActionCount: T_NUMBER,\n summaryPath: T_STRING,\n reportPath: T_STRING,\n }),\n procedure_mining_run: objectSchema({ namespace: T_STRING, clustersProcessed: T_NUMBER, proceduresWritten: T_NUMBER }),\n pattern_reinforcement_run: objectSchema({\n namespace: T_STRING,\n ran: T_BOOLEAN,\n clustersFound: T_NUMBER,\n canonicalsUpdated: T_NUMBER,\n duplicatesSuperseded: T_NUMBER,\n }),\n procedural_stats: objectSchema({ namespace: T_STRING, counts: T_OBJECT, recent: T_OBJECT }),\n memory_get: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, memory: T_NULLABLE_OBJECT }),\n memory_timeline: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, count: T_NUMBER, timeline: T_ARRAY }),\n memory_store: objectSchema({\n schemaVersion: T_NUMBER,\n operation: T_STRING,\n namespace: T_STRING,\n dryRun: T_BOOLEAN,\n accepted: T_BOOLEAN,\n queued: T_BOOLEAN,\n status: T_STRING,\n memoryId: T_STRING,\n }),\n suggestion_submit: objectSchema({\n schemaVersion: T_NUMBER,\n operation: T_STRING,\n namespace: T_STRING,\n dryRun: T_BOOLEAN,\n accepted: T_BOOLEAN,\n queued: T_BOOLEAN,\n status: T_STRING,\n memoryId: T_STRING,\n }),\n entity_get: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, entity: T_NULLABLE_OBJECT }),\n review_queue_list: objectSchema({ found: T_BOOLEAN, runId: T_STRING, reviewQueue: T_ARRAY }),\n observe: objectSchema({\n accepted: T_NUMBER,\n sessionKey: T_STRING,\n namespace: T_STRING,\n effectiveNamespace: T_STRING,\n lcmArchived: T_BOOLEAN,\n extractionQueued: T_BOOLEAN,\n }),\n lcm_search: objectSchema({\n query: T_STRING,\n namespace: T_STRING,\n results: T_ARRAY,\n count: T_NUMBER,\n lcmEnabled: T_BOOLEAN,\n }),\n lcm_compaction_flush: objectSchema({\n enabled: T_BOOLEAN,\n flushed: T_BOOLEAN,\n sessionKey: T_STRING,\n namespace: T_STRING,\n }),\n lcm_compaction_record: objectSchema({\n enabled: T_BOOLEAN,\n recorded: T_BOOLEAN,\n sessionKey: T_STRING,\n namespace: T_STRING,\n }),\n continuity_audit_generate: objectSchema({ enabled: T_BOOLEAN, period: T_STRING, reportPath: T_STRING }),\n continuity_incident_open: objectSchema({ created: T_BOOLEAN, incident: T_NULLABLE_OBJECT }),\n continuity_incident_close: objectSchema({ closed: T_BOOLEAN, incident: T_NULLABLE_OBJECT }),\n continuity_incident_list: objectSchema({ incidents: T_ARRAY }),\n continuity_loop_add_or_update: objectSchema({ saved: T_BOOLEAN, loop: T_NULLABLE_OBJECT }),\n continuity_loop_review: objectSchema({ reviewed: T_BOOLEAN, loop: T_NULLABLE_OBJECT }),\n identity_anchor_get: objectSchema({ found: T_BOOLEAN, anchor: T_NULLABLE_STRING }),\n identity_anchor_update: objectSchema({ updated: T_BOOLEAN, sections: T_ARRAY }),\n memory_identity: objectSchema({ found: T_BOOLEAN, identity: T_NULLABLE_STRING, message: T_STRING }),\n work_task: objectSchema({\n action: T_STRING,\n task: T_NULLABLE_OBJECT,\n tasks: T_ARRAY,\n count: T_NUMBER,\n deleted: T_BOOLEAN,\n }),\n work_project: objectSchema({\n action: T_STRING,\n project: T_NULLABLE_OBJECT,\n projects: T_ARRAY,\n count: T_NUMBER,\n deleted: T_BOOLEAN,\n }),\n work_board: objectSchema({ action: T_STRING, markdown: T_STRING, snapshot: T_OBJECT, result: T_OBJECT }),\n shared_context_write_output: objectSchema({ written: T_BOOLEAN, path: T_STRING }),\n shared_feedback_record: objectSchema({ recorded: T_BOOLEAN }),\n shared_priorities_append: objectSchema({ appended: T_BOOLEAN }),\n shared_context_cross_signals_run: objectSchema({\n crossSignalsMarkdownPath: T_STRING,\n crossSignalsPath: T_STRING,\n sourceCount: T_NUMBER,\n feedbackCount: T_NUMBER,\n overlapCount: T_NUMBER,\n }),\n shared_context_curate_daily: objectSchema({\n roundtablePath: T_STRING,\n crossSignalsMarkdownPath: T_STRING,\n crossSignalsPath: T_STRING,\n overlapCount: T_NUMBER,\n }),\n compounding_weekly_synthesize: objectSchema({\n weekId: T_STRING,\n reportPath: T_STRING,\n reportJsonPath: T_STRING,\n rubricsPath: T_STRING,\n rubricsIndexPath: T_STRING,\n mistakesCount: T_NUMBER,\n promotionCandidateCount: T_NUMBER,\n }),\n compounding_promote_candidate: objectSchema({\n enabled: T_BOOLEAN,\n dryRun: T_BOOLEAN,\n weekId: T_STRING,\n promoted: T_ARRAY,\n skipped: T_ARRAY,\n tombstoneBlocked: T_ARRAY,\n }),\n compression_guidelines_optimize: objectSchema({\n enabled: T_BOOLEAN,\n dryRun: T_BOOLEAN,\n eventCount: T_NUMBER,\n nextGuidelineVersion: T_NUMBER,\n changedRules: T_NUMBER,\n semanticRefinementApplied: T_BOOLEAN,\n persisted: T_BOOLEAN,\n }),\n compression_guidelines_activate: objectSchema({\n enabled: T_BOOLEAN,\n activated: T_BOOLEAN,\n guidelineVersion: { type: [\"number\", \"null\"] } as const,\n }),\n memory_search: objectSchema({ query: T_STRING, results: T_ARRAY, count: T_NUMBER }),\n memory_profile: objectSchema({ profile: T_STRING }),\n memory_entities_list: objectSchema({ entities: T_ARRAY, count: T_NUMBER }),\n memory_questions: objectSchema({ questions: T_ARRAY, count: T_NUMBER }),\n memory_last_recall: objectSchema({\n sessionKey: T_STRING,\n recordedAt: T_STRING,\n queryHash: T_STRING,\n queryLen: T_NUMBER,\n memoryIds: T_ARRAY,\n namespace: T_STRING,\n recallNamespaces: T_ARRAY,\n plannerMode: T_STRING,\n requestedMode: T_STRING,\n source: T_STRING,\n fallbackUsed: T_BOOLEAN,\n sourcesUsed: T_ARRAY,\n latencyMs: T_NUMBER,\n resultPaths: T_ARRAY,\n message: T_NULLABLE_STRING,\n }),\n memory_intent_debug: objectSchema({\n recordedAt: T_STRING,\n promptHash: T_STRING,\n promptLength: T_NUMBER,\n retrievalQueryHash: T_STRING,\n retrievalQueryLength: T_NUMBER,\n plannerEnabled: T_BOOLEAN,\n plannedMode: T_STRING,\n effectiveMode: T_STRING,\n recallResultLimit: T_NUMBER,\n queryIntent: T_OBJECT,\n graphExpandedIntentDetected: T_BOOLEAN,\n graphDecision: T_OBJECT,\n message: T_NULLABLE_STRING,\n }),\n memory_qmd_debug: objectSchema({\n recordedAt: T_STRING,\n queryHash: T_STRING,\n queryLength: T_NUMBER,\n collection: T_STRING,\n namespaces: T_ARRAY,\n fetchLimit: T_NUMBER,\n primaryResultCount: T_NUMBER,\n hybridResultCount: T_NUMBER,\n queryAwareSeedCount: T_NUMBER,\n resultCount: T_NUMBER,\n intentHint: T_STRING,\n explainEnabled: T_BOOLEAN,\n hybridTopUpUsed: T_BOOLEAN,\n hybridTopUpSkippedReason: T_STRING,\n results: T_ARRAY,\n message: T_NULLABLE_STRING,\n }),\n memory_graph_explain: objectSchema({ explanation: T_STRING }),\n graph_snapshot: objectSchema({ nodes: T_ARRAY, edges: T_ARRAY }),\n memory_feedback: objectSchema({ recorded: T_BOOLEAN, enabled: T_BOOLEAN }),\n memory_promote: objectSchema({ promoted: T_BOOLEAN, memoryId: T_STRING }),\n memory_outcome: objectSchema({\n ok: T_BOOLEAN,\n memoryId: T_STRING,\n mw_success: T_NUMBER,\n mw_fail: T_NUMBER,\n reason: T_STRING,\n message: T_STRING,\n }),\n memory_action_apply: objectSchema({ recorded: T_BOOLEAN, event: T_OBJECT }),\n context_checkpoint: objectSchema({ saved: T_BOOLEAN }),\n briefing: objectSchema({\n markdown: T_STRING,\n json: T_OBJECT,\n window: T_OBJECT,\n format: T_STRING,\n namespace: T_STRING,\n }),\n review_list: objectSchema({ pairs: T_ARRAY, total: T_NUMBER, durationMs: T_NUMBER }),\n review_resolve: objectSchema({ pairId: T_STRING, verb: T_STRING, affectedIds: T_ARRAY, message: T_STRING }),\n contradiction_scan_run: objectSchema({\n scanned: T_NUMBER,\n candidates: T_NUMBER,\n judged: T_NUMBER,\n queued: T_NUMBER,\n cooledDown: T_NUMBER,\n elapsedMs: T_NUMBER,\n }),\n memory_summarize_hourly: objectSchema({ ok: T_BOOLEAN, message: T_STRING }),\n conversation_index_update: objectSchema({\n enabled: T_BOOLEAN,\n sessions: T_NUMBER,\n chunks: T_NUMBER,\n skipped: T_NUMBER,\n embeddedRuns: T_NUMBER,\n }),\n profiling_report: objectSchema({\n enabled: T_BOOLEAN,\n format: T_STRING,\n traces: T_ARRAY,\n stats: T_OBJECT,\n bottleneck: T_NULLABLE_STRING,\n }),\n graph_edge_decay_run: objectSchema({ ranAt: T_STRING, disabled: T_BOOLEAN, reason: T_STRING, results: T_ARRAY }),\n live_connectors_run: objectSchema({\n ranAt: T_STRING,\n force: T_BOOLEAN,\n totalDocsImported: T_NUMBER,\n ranCount: T_NUMBER,\n skippedCount: T_NUMBER,\n errorCount: T_NUMBER,\n results: T_ARRAY,\n }),\n peer_list: objectSchema({ peers: T_ARRAY }),\n peer_get: objectSchema({ found: T_BOOLEAN, peer: T_NULLABLE_OBJECT }),\n peer_set: objectSchema({ ok: T_BOOLEAN, created: T_BOOLEAN, peer: T_OBJECT }),\n peer_delete: objectSchema({ ok: T_BOOLEAN, deleted: T_BOOLEAN }),\n peer_profile_get: objectSchema({\n found: T_BOOLEAN,\n profile: {\n type: \"object\",\n properties: {\n peerId: T_STRING,\n updatedAt: T_STRING,\n fields: { type: \"object\", additionalProperties: T_STRING },\n provenance: {\n type: \"object\",\n additionalProperties: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n observedAt: T_STRING,\n signal: T_STRING,\n sourceSessionId: T_STRING,\n note: T_STRING,\n },\n required: [\"observedAt\", \"signal\"],\n additionalProperties: true,\n },\n },\n },\n },\n required: [\"peerId\", \"updatedAt\", \"fields\", \"provenance\"],\n additionalProperties: true,\n },\n }),\n peer_forget: objectSchema({ ok: T_BOOLEAN, purged: T_BOOLEAN }),\n console_state: objectSchema({\n capturedAt: T_STRING,\n bufferState: T_OBJECT,\n extractionQueue: T_OBJECT,\n dedupRecent: T_ARRAY,\n maintenanceLedgerTail: T_ARRAY,\n qmdProbe: T_OBJECT,\n daemon: T_OBJECT,\n errors: T_ARRAY,\n }),\n dreams_status: objectSchema({ phases: T_OBJECT, windowStart: T_STRING, windowEnd: T_STRING }),\n dreams_run: objectSchema({ phase: T_STRING, durationMs: T_NUMBER, itemsProcessed: T_NUMBER }),\n coding_decision: objectSchema({\n subcommand: T_STRING,\n records: T_ARRAY,\n count: T_NUMBER,\n found: T_BOOLEAN,\n memoryId: T_STRING,\n status: T_STRING,\n supersededMemoryId: T_STRING,\n replacementMemoryId: T_STRING,\n }),\n coding_architecture: objectSchema({\n subcommand: T_STRING,\n found: T_BOOLEAN,\n refreshed: T_BOOLEAN,\n memoryId: T_STRING,\n }),\n coding_delta: objectSchema({\n subcommand: T_STRING,\n ok: T_BOOLEAN,\n kind: T_STRING,\n delta: T_OBJECT,\n nextState: T_OBJECT,\n }),\n memory_correct_plan: objectSchema({\n planId: T_STRING,\n namespace: T_STRING,\n diff: T_STRING,\n actions: T_ARRAY,\n confidence: T_NUMBER,\n }),\n memory_correct_apply: objectSchema({\n planId: T_STRING,\n status: T_STRING,\n results: T_ARRAY,\n auditMemoryId: T_STRING,\n appliedAt: T_STRING,\n }),\n memory_chat: objectSchema({\n reply: T_STRING,\n chatSessionId: T_STRING,\n pendingPlan: {\n type: \"object\",\n properties: { planId: T_STRING, preview: T_STRING },\n required: [\"planId\", \"preview\"],\n additionalProperties: true,\n },\n skippedTools: { type: \"array\", items: T_STRING },\n }),\n codegraph_index: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_list_projects: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_delete_project: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_index_status: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_search_graph: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_trace_path: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_detect_changes: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_query_graph: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_get_schema: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_get_snippet: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_get_architecture: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_search_code: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_manage_adr: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n codegraph_ingest_traces: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),\n};\n\n/**\n * Apply outputSchema from the registry to every tool that lacks one.\n * Suffix resolution strips the canonical or legacy prefix so both\n * `remnic.*` and `engram.*` aliases inherit the same schema.\n * Tools that already have an explicit outputSchema are skipped.\n */\nexport function applyToolOutputSchemas<T extends { name: string; outputSchema?: unknown }>(\n tools: ReadonlyArray<T>,\n canonicalPrefix: string,\n legacyPrefix: string\n): T[] {\n return tools.map((tool) => {\n if (tool.outputSchema) return tool;\n const name = tool.name as string;\n const suffix = name.startsWith(canonicalPrefix)\n ? name.slice(canonicalPrefix.length)\n : name.startsWith(legacyPrefix)\n ? name.slice(legacyPrefix.length)\n : name;\n return { ...tool, outputSchema: TOOL_OUTPUT_SCHEMAS[suffix] ?? { type: \"object\", additionalProperties: true } };\n });\n}\n"],"mappings":"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","names":[]}
|