@remnic/core 9.3.770 → 9.3.771

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.
Files changed (114) hide show
  1. package/dist/access-admin-ops-surface.js +12 -12
  2. package/dist/access-boundary.js +13 -13
  3. package/dist/access-cli.js +57 -56
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.js +21 -20
  6. package/dist/access-identity-continuity-surface.js +12 -12
  7. package/dist/access-lcm-surface.js +12 -12
  8. package/dist/access-mcp-output-schemas.d.ts +20 -0
  9. package/dist/access-mcp-output-schemas.js +8 -0
  10. package/dist/access-mcp-output-schemas.js.map +1 -0
  11. package/dist/access-mcp.js +18 -17
  12. package/dist/access-observe-write-surface.js +12 -12
  13. package/dist/access-operations-batch.js +14 -14
  14. package/dist/access-operations.js +16 -16
  15. package/dist/access-recall-surface.js +12 -12
  16. package/dist/access-schema.js +3 -3
  17. package/dist/access-service.js +12 -12
  18. package/dist/adapters/index.js +4 -4
  19. package/dist/adapters/registry.js +2 -2
  20. package/dist/briefing.js +4 -4
  21. package/dist/causal-consolidation.js +5 -5
  22. package/dist/{chunk-O5EKTMOJ.js → chunk-27CQIO7T.js} +12 -12
  23. package/dist/{chunk-52TEPNL7.js → chunk-27TJRC2Y.js} +4 -4
  24. package/dist/{chunk-KFIAFHOC.js → chunk-44YXWE35.js} +2 -2
  25. package/dist/chunk-5RUE3GHQ.js +445 -0
  26. package/dist/chunk-5RUE3GHQ.js.map +1 -0
  27. package/dist/{chunk-3JOFWTQD.js → chunk-6QODJKOV.js} +2 -2
  28. package/dist/{chunk-2MR3MFQB.js → chunk-6Y4JTNX7.js} +2 -2
  29. package/dist/{chunk-JBPKEARU.js → chunk-AU7Q3LSC.js} +4 -4
  30. package/dist/{chunk-W7VA5667.js → chunk-BKTC7JCA.js} +2 -2
  31. package/dist/{chunk-RZ3KJZYE.js → chunk-BMANIB5B.js} +2 -2
  32. package/dist/{chunk-EWGMA5W5.js → chunk-C2DDH5UN.js} +14 -14
  33. package/dist/{chunk-5QJZLJ7Q.js → chunk-CXBFYSQY.js} +2 -2
  34. package/dist/{chunk-STN5KMSS.js → chunk-EGLUVV6B.js} +4 -4
  35. package/dist/{chunk-3YYWUHA7.js → chunk-J2QYB2D5.js} +3 -3
  36. package/dist/{chunk-CSHUSYUM.js → chunk-L42FA4BU.js} +2 -2
  37. package/dist/{chunk-KMKBD66B.js → chunk-LU7ATMRV.js} +2 -2
  38. package/dist/{chunk-MLDAD27I.js → chunk-LZ73Y56P.js} +5 -5
  39. package/dist/{chunk-QKUWPSU3.js → chunk-MJE4XV4A.js} +2 -2
  40. package/dist/{chunk-5ACKQLGA.js → chunk-OTMAYEY5.js} +2 -2
  41. package/dist/{chunk-FLVL4L3L.js → chunk-OUXPVWTZ.js} +5 -5
  42. package/dist/{chunk-7XGF5HCC.js → chunk-OW4UXZNP.js} +50 -50
  43. package/dist/{chunk-3O3BZNSH.js → chunk-QOGXUNWL.js} +4 -4
  44. package/dist/{chunk-OP43P53G.js → chunk-RFZW7NID.js} +163 -73
  45. package/dist/chunk-RFZW7NID.js.map +1 -0
  46. package/dist/{chunk-SRSPVFSJ.js → chunk-TECYUPFB.js} +4 -4
  47. package/dist/{chunk-E6LXM2GE.js → chunk-U3TRHUSJ.js} +45 -45
  48. package/dist/{chunk-TGROC2UP.js → chunk-U5HD7BB2.js} +6 -6
  49. package/dist/{chunk-WB4CFKZ4.js → chunk-VFHDUFH5.js} +2 -2
  50. package/dist/{chunk-ZG4FT6IT.js → chunk-X5NUL5N4.js} +2 -2
  51. package/dist/{chunk-XDRJQMYL.js → chunk-XNWLD3RR.js} +2 -2
  52. package/dist/{chunk-U72WWTLR.js → chunk-YOELDDBF.js} +2 -2
  53. package/dist/{chunk-IOENSSZC.js → chunk-YRZMCPC5.js} +2 -2
  54. package/dist/{chunk-ZT34X56N.js → chunk-ZI3YYOOV.js} +2 -2
  55. package/dist/cli.js +38 -37
  56. package/dist/compounding/engine.js +4 -4
  57. package/dist/connectors/codex-materialize-runner.js +4 -4
  58. package/dist/connectors/index.js +4 -4
  59. package/dist/entity-retrieval.js +4 -4
  60. package/dist/extraction.js +2 -2
  61. package/dist/{forget-WYLR4ZFV.js → forget-OEE5OELK.js} +2 -2
  62. package/dist/index.js +96 -95
  63. package/dist/lcm/engine.js +2 -2
  64. package/dist/lcm/index.js +5 -5
  65. package/dist/maintenance/memory-governance.js +4 -4
  66. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +4 -4
  67. package/dist/maintenance/rebuild-memory-projection.js +5 -5
  68. package/dist/namespaces/migrate.js +5 -5
  69. package/dist/namespaces/storage.js +4 -4
  70. package/dist/operator-toolkit.js +9 -9
  71. package/dist/orchestration/maintenance.js +6 -6
  72. package/dist/orchestrator.js +57 -56
  73. package/dist/semantic-consolidation.js +5 -5
  74. package/dist/semantic-rule-promotion.js +4 -4
  75. package/dist/semantic-rule-verifier.js +4 -4
  76. package/dist/storage.js +3 -3
  77. package/dist/transfer/autodetect.js +1 -1
  78. package/dist/transfer/backup.js +1 -1
  79. package/dist/transfer/capsule-export.js +2 -2
  80. package/dist/verified-recall.js +4 -4
  81. package/package.json +2 -2
  82. package/src/access-mcp-output-schemas.ts +472 -0
  83. package/src/access-mcp.ts +235 -143
  84. package/dist/chunk-OP43P53G.js.map +0 -1
  85. /package/dist/{chunk-O5EKTMOJ.js.map → chunk-27CQIO7T.js.map} +0 -0
  86. /package/dist/{chunk-52TEPNL7.js.map → chunk-27TJRC2Y.js.map} +0 -0
  87. /package/dist/{chunk-KFIAFHOC.js.map → chunk-44YXWE35.js.map} +0 -0
  88. /package/dist/{chunk-3JOFWTQD.js.map → chunk-6QODJKOV.js.map} +0 -0
  89. /package/dist/{chunk-2MR3MFQB.js.map → chunk-6Y4JTNX7.js.map} +0 -0
  90. /package/dist/{chunk-JBPKEARU.js.map → chunk-AU7Q3LSC.js.map} +0 -0
  91. /package/dist/{chunk-W7VA5667.js.map → chunk-BKTC7JCA.js.map} +0 -0
  92. /package/dist/{chunk-RZ3KJZYE.js.map → chunk-BMANIB5B.js.map} +0 -0
  93. /package/dist/{chunk-EWGMA5W5.js.map → chunk-C2DDH5UN.js.map} +0 -0
  94. /package/dist/{chunk-5QJZLJ7Q.js.map → chunk-CXBFYSQY.js.map} +0 -0
  95. /package/dist/{chunk-STN5KMSS.js.map → chunk-EGLUVV6B.js.map} +0 -0
  96. /package/dist/{chunk-3YYWUHA7.js.map → chunk-J2QYB2D5.js.map} +0 -0
  97. /package/dist/{chunk-CSHUSYUM.js.map → chunk-L42FA4BU.js.map} +0 -0
  98. /package/dist/{chunk-KMKBD66B.js.map → chunk-LU7ATMRV.js.map} +0 -0
  99. /package/dist/{chunk-MLDAD27I.js.map → chunk-LZ73Y56P.js.map} +0 -0
  100. /package/dist/{chunk-QKUWPSU3.js.map → chunk-MJE4XV4A.js.map} +0 -0
  101. /package/dist/{chunk-5ACKQLGA.js.map → chunk-OTMAYEY5.js.map} +0 -0
  102. /package/dist/{chunk-FLVL4L3L.js.map → chunk-OUXPVWTZ.js.map} +0 -0
  103. /package/dist/{chunk-7XGF5HCC.js.map → chunk-OW4UXZNP.js.map} +0 -0
  104. /package/dist/{chunk-3O3BZNSH.js.map → chunk-QOGXUNWL.js.map} +0 -0
  105. /package/dist/{chunk-SRSPVFSJ.js.map → chunk-TECYUPFB.js.map} +0 -0
  106. /package/dist/{chunk-E6LXM2GE.js.map → chunk-U3TRHUSJ.js.map} +0 -0
  107. /package/dist/{chunk-TGROC2UP.js.map → chunk-U5HD7BB2.js.map} +0 -0
  108. /package/dist/{chunk-WB4CFKZ4.js.map → chunk-VFHDUFH5.js.map} +0 -0
  109. /package/dist/{chunk-ZG4FT6IT.js.map → chunk-X5NUL5N4.js.map} +0 -0
  110. /package/dist/{chunk-XDRJQMYL.js.map → chunk-XNWLD3RR.js.map} +0 -0
  111. /package/dist/{chunk-U72WWTLR.js.map → chunk-YOELDDBF.js.map} +0 -0
  112. /package/dist/{chunk-IOENSSZC.js.map → chunk-YRZMCPC5.js.map} +0 -0
  113. /package/dist/{chunk-ZT34X56N.js.map → chunk-ZI3YYOOV.js.map} +0 -0
  114. /package/dist/{forget-WYLR4ZFV.js.map → forget-OEE5OELK.js.map} +0 -0
@@ -0,0 +1,472 @@
1
+ /**
2
+ * Output-schema registry for MCP tools — extracted from access-mcp.ts to
3
+ * keep that file under the 3000-LOC structural ratchet.
4
+ *
5
+ * Contains the per-suffix JSON-Schema declarations (derived from
6
+ * production TS return contracts) and the application helper that
7
+ * assigns schemas to tool objects.
8
+ */
9
+
10
+ const T_STRING = { type: "string" } as const;
11
+ const T_NUMBER = { type: "number" } as const;
12
+ const T_BOOLEAN = { type: "boolean" } as const;
13
+ const T_ARRAY = { type: "array" } as const;
14
+ const T_OBJECT = { type: "object" } as const;
15
+ const T_NULLABLE_OBJECT = { type: ["object", "null"] } as const;
16
+ const T_NULLABLE_STRING = { type: ["string", "null"] } as const;
17
+
18
+ /** Build a JSON Schema object type with the given properties. */
19
+ function objectSchema(properties: Record<string, Readonly<Record<string, unknown>>>): Record<string, unknown> {
20
+ return { type: "object", properties, additionalProperties: true };
21
+ }
22
+
23
+ /**
24
+ * Per-suffix outputSchema registry. Tools not present here fall back to
25
+ * `{ type: "object", additionalProperties: true }` in the constructor pass.
26
+ * The `chatgpt_memory_inspector` tool ships its own precise schema and is
27
+ * intentionally absent — the apply pass skips tools that already have one.
28
+ */
29
+ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
30
+ recall: objectSchema({
31
+ query: T_STRING,
32
+ namespace: T_STRING,
33
+ context: T_STRING,
34
+ count: T_NUMBER,
35
+ memoryIds: T_ARRAY,
36
+ results: T_ARRAY,
37
+ fallbackUsed: T_BOOLEAN,
38
+ sourcesUsed: T_ARRAY,
39
+ }),
40
+ recall_explain: objectSchema({
41
+ found: T_BOOLEAN,
42
+ snapshot: T_OBJECT,
43
+ intent: T_NULLABLE_OBJECT,
44
+ graph: T_NULLABLE_OBJECT,
45
+ }),
46
+ recall_tier_explain: objectSchema({ snapshotFound: T_BOOLEAN, tierExplain: T_NULLABLE_OBJECT }),
47
+ recall_xray: objectSchema({ snapshotFound: T_BOOLEAN, snapshot: T_OBJECT }),
48
+ set_coding_context: objectSchema({ ok: T_BOOLEAN }),
49
+ wearables_status: objectSchema({
50
+ enabled: T_BOOLEAN,
51
+ timezone: T_STRING,
52
+ sources: T_ARRAY,
53
+ connectorsInstalled: T_ARRAY,
54
+ }),
55
+ wearables_sync: T_ARRAY,
56
+ transcript_day: T_ARRAY,
57
+ transcript_search: T_ARRAY,
58
+ transcript_memories: T_ARRAY,
59
+ action_confidence: objectSchema({
60
+ schemaVersion: T_NUMBER,
61
+ decision: T_STRING,
62
+ confidence: T_NUMBER,
63
+ risk: T_STRING,
64
+ contextReadiness: T_STRING,
65
+ intendedAction: T_STRING,
66
+ attentionPolicy: T_STRING,
67
+ principle: T_STRING,
68
+ reasons: T_ARRAY,
69
+ blockers: T_ARRAY,
70
+ factors: T_ARRAY,
71
+ retrievedMemoryCount: T_NUMBER,
72
+ scopeMismatchCount: T_NUMBER,
73
+ safeToAct: T_BOOLEAN,
74
+ }),
75
+ day_summary: {
76
+ type: ["object", "null"],
77
+ properties: { summary: T_STRING, bullets: T_ARRAY, next_actions: T_ARRAY, risks_or_open_loops: T_ARRAY },
78
+ additionalProperties: true,
79
+ },
80
+ capsule_export: objectSchema({
81
+ archivePath: T_STRING,
82
+ manifestPath: T_STRING,
83
+ encryptedArchivePath: T_NULLABLE_STRING,
84
+ manifest: T_OBJECT,
85
+ }),
86
+ capsule_import: objectSchema({ imported: T_ARRAY, skipped: T_ARRAY, manifest: T_OBJECT }),
87
+ capsule_list: objectSchema({ namespace: T_STRING, capsulesDir: T_STRING, capsules: T_ARRAY }),
88
+ memory_governance_run: objectSchema({
89
+ namespace: T_STRING,
90
+ runId: T_STRING,
91
+ traceId: T_STRING,
92
+ mode: T_STRING,
93
+ reviewQueueCount: T_NUMBER,
94
+ proposedActionCount: T_NUMBER,
95
+ appliedActionCount: T_NUMBER,
96
+ summaryPath: T_STRING,
97
+ reportPath: T_STRING,
98
+ }),
99
+ procedure_mining_run: objectSchema({ namespace: T_STRING, clustersProcessed: T_NUMBER, proceduresWritten: T_NUMBER }),
100
+ pattern_reinforcement_run: objectSchema({
101
+ namespace: T_STRING,
102
+ ran: T_BOOLEAN,
103
+ clustersFound: T_NUMBER,
104
+ canonicalsUpdated: T_NUMBER,
105
+ duplicatesSuperseded: T_NUMBER,
106
+ }),
107
+ procedural_stats: objectSchema({ namespace: T_STRING, counts: T_OBJECT, recent: T_OBJECT }),
108
+ memory_get: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, memory: T_NULLABLE_OBJECT }),
109
+ memory_timeline: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, count: T_NUMBER, timeline: T_ARRAY }),
110
+ memory_store: objectSchema({
111
+ schemaVersion: T_NUMBER,
112
+ operation: T_STRING,
113
+ namespace: T_STRING,
114
+ dryRun: T_BOOLEAN,
115
+ accepted: T_BOOLEAN,
116
+ queued: T_BOOLEAN,
117
+ status: T_STRING,
118
+ memoryId: T_STRING,
119
+ }),
120
+ suggestion_submit: objectSchema({
121
+ schemaVersion: T_NUMBER,
122
+ operation: T_STRING,
123
+ namespace: T_STRING,
124
+ dryRun: T_BOOLEAN,
125
+ accepted: T_BOOLEAN,
126
+ queued: T_BOOLEAN,
127
+ status: T_STRING,
128
+ memoryId: T_STRING,
129
+ }),
130
+ entity_get: objectSchema({ found: T_BOOLEAN, namespace: T_STRING, entity: T_NULLABLE_OBJECT }),
131
+ review_queue_list: objectSchema({ found: T_BOOLEAN, runId: T_STRING, reviewQueue: T_ARRAY }),
132
+ observe: objectSchema({
133
+ accepted: T_NUMBER,
134
+ sessionKey: T_STRING,
135
+ namespace: T_STRING,
136
+ effectiveNamespace: T_STRING,
137
+ lcmArchived: T_BOOLEAN,
138
+ extractionQueued: T_BOOLEAN,
139
+ }),
140
+ lcm_search: objectSchema({
141
+ query: T_STRING,
142
+ namespace: T_STRING,
143
+ results: T_ARRAY,
144
+ count: T_NUMBER,
145
+ lcmEnabled: T_BOOLEAN,
146
+ }),
147
+ lcm_compaction_flush: objectSchema({
148
+ enabled: T_BOOLEAN,
149
+ flushed: T_BOOLEAN,
150
+ sessionKey: T_STRING,
151
+ namespace: T_STRING,
152
+ }),
153
+ lcm_compaction_record: objectSchema({
154
+ enabled: T_BOOLEAN,
155
+ recorded: T_BOOLEAN,
156
+ sessionKey: T_STRING,
157
+ namespace: T_STRING,
158
+ }),
159
+ continuity_audit_generate: objectSchema({ enabled: T_BOOLEAN, period: T_STRING, reportPath: T_STRING }),
160
+ continuity_incident_open: objectSchema({ created: T_BOOLEAN, incident: T_NULLABLE_OBJECT }),
161
+ continuity_incident_close: objectSchema({ closed: T_BOOLEAN, incident: T_NULLABLE_OBJECT }),
162
+ continuity_incident_list: objectSchema({ incidents: T_ARRAY }),
163
+ continuity_loop_add_or_update: objectSchema({ saved: T_BOOLEAN, loop: T_NULLABLE_OBJECT }),
164
+ continuity_loop_review: objectSchema({ reviewed: T_BOOLEAN, loop: T_NULLABLE_OBJECT }),
165
+ identity_anchor_get: objectSchema({ found: T_BOOLEAN, anchor: T_NULLABLE_STRING }),
166
+ identity_anchor_update: objectSchema({ updated: T_BOOLEAN, sections: T_ARRAY }),
167
+ memory_identity: objectSchema({ found: T_BOOLEAN, identity: T_NULLABLE_STRING, message: T_STRING }),
168
+ work_task: objectSchema({
169
+ action: T_STRING,
170
+ task: T_NULLABLE_OBJECT,
171
+ tasks: T_ARRAY,
172
+ count: T_NUMBER,
173
+ deleted: T_BOOLEAN,
174
+ }),
175
+ work_project: objectSchema({
176
+ action: T_STRING,
177
+ project: T_NULLABLE_OBJECT,
178
+ projects: T_ARRAY,
179
+ count: T_NUMBER,
180
+ deleted: T_BOOLEAN,
181
+ }),
182
+ work_board: objectSchema({ action: T_STRING, markdown: T_STRING, snapshot: T_OBJECT, result: T_OBJECT }),
183
+ shared_context_write_output: objectSchema({ written: T_BOOLEAN, path: T_STRING }),
184
+ shared_feedback_record: objectSchema({ recorded: T_BOOLEAN }),
185
+ shared_priorities_append: objectSchema({ appended: T_BOOLEAN }),
186
+ shared_context_cross_signals_run: objectSchema({
187
+ crossSignalsMarkdownPath: T_STRING,
188
+ crossSignalsPath: T_STRING,
189
+ sourceCount: T_NUMBER,
190
+ feedbackCount: T_NUMBER,
191
+ overlapCount: T_NUMBER,
192
+ }),
193
+ shared_context_curate_daily: objectSchema({
194
+ roundtablePath: T_STRING,
195
+ crossSignalsMarkdownPath: T_STRING,
196
+ crossSignalsPath: T_STRING,
197
+ overlapCount: T_NUMBER,
198
+ }),
199
+ compounding_weekly_synthesize: objectSchema({
200
+ weekId: T_STRING,
201
+ reportPath: T_STRING,
202
+ reportJsonPath: T_STRING,
203
+ rubricsPath: T_STRING,
204
+ rubricsIndexPath: T_STRING,
205
+ mistakesCount: T_NUMBER,
206
+ promotionCandidateCount: T_NUMBER,
207
+ }),
208
+ compounding_promote_candidate: objectSchema({
209
+ enabled: T_BOOLEAN,
210
+ dryRun: T_BOOLEAN,
211
+ weekId: T_STRING,
212
+ promoted: T_ARRAY,
213
+ skipped: T_ARRAY,
214
+ tombstoneBlocked: T_ARRAY,
215
+ }),
216
+ compression_guidelines_optimize: objectSchema({
217
+ enabled: T_BOOLEAN,
218
+ dryRun: T_BOOLEAN,
219
+ eventCount: T_NUMBER,
220
+ nextGuidelineVersion: T_NUMBER,
221
+ changedRules: T_NUMBER,
222
+ semanticRefinementApplied: T_BOOLEAN,
223
+ persisted: T_BOOLEAN,
224
+ }),
225
+ compression_guidelines_activate: objectSchema({
226
+ enabled: T_BOOLEAN,
227
+ activated: T_BOOLEAN,
228
+ guidelineVersion: { type: ["number", "null"] } as const,
229
+ }),
230
+ memory_search: objectSchema({ query: T_STRING, results: T_ARRAY, count: T_NUMBER }),
231
+ memory_profile: objectSchema({ profile: T_STRING }),
232
+ memory_entities_list: objectSchema({ entities: T_ARRAY, count: T_NUMBER }),
233
+ memory_questions: objectSchema({ questions: T_ARRAY, count: T_NUMBER }),
234
+ memory_last_recall: objectSchema({
235
+ sessionKey: T_STRING,
236
+ recordedAt: T_STRING,
237
+ queryHash: T_STRING,
238
+ queryLen: T_NUMBER,
239
+ memoryIds: T_ARRAY,
240
+ namespace: T_STRING,
241
+ recallNamespaces: T_ARRAY,
242
+ plannerMode: T_STRING,
243
+ requestedMode: T_STRING,
244
+ source: T_STRING,
245
+ fallbackUsed: T_BOOLEAN,
246
+ sourcesUsed: T_ARRAY,
247
+ latencyMs: T_NUMBER,
248
+ resultPaths: T_ARRAY,
249
+ message: T_NULLABLE_STRING,
250
+ }),
251
+ memory_intent_debug: objectSchema({
252
+ recordedAt: T_STRING,
253
+ promptHash: T_STRING,
254
+ promptLength: T_NUMBER,
255
+ retrievalQueryHash: T_STRING,
256
+ retrievalQueryLength: T_NUMBER,
257
+ plannerEnabled: T_BOOLEAN,
258
+ plannedMode: T_STRING,
259
+ effectiveMode: T_STRING,
260
+ recallResultLimit: T_NUMBER,
261
+ queryIntent: T_OBJECT,
262
+ graphExpandedIntentDetected: T_BOOLEAN,
263
+ graphDecision: T_OBJECT,
264
+ message: T_NULLABLE_STRING,
265
+ }),
266
+ memory_qmd_debug: objectSchema({
267
+ recordedAt: T_STRING,
268
+ queryHash: T_STRING,
269
+ queryLength: T_NUMBER,
270
+ collection: T_STRING,
271
+ namespaces: T_ARRAY,
272
+ fetchLimit: T_NUMBER,
273
+ primaryResultCount: T_NUMBER,
274
+ hybridResultCount: T_NUMBER,
275
+ queryAwareSeedCount: T_NUMBER,
276
+ resultCount: T_NUMBER,
277
+ intentHint: T_STRING,
278
+ explainEnabled: T_BOOLEAN,
279
+ hybridTopUpUsed: T_BOOLEAN,
280
+ hybridTopUpSkippedReason: T_STRING,
281
+ results: T_ARRAY,
282
+ message: T_NULLABLE_STRING,
283
+ }),
284
+ memory_graph_explain: objectSchema({ explanation: T_STRING }),
285
+ graph_snapshot: objectSchema({ nodes: T_ARRAY, edges: T_ARRAY }),
286
+ memory_feedback: objectSchema({ recorded: T_BOOLEAN, enabled: T_BOOLEAN }),
287
+ memory_promote: objectSchema({ promoted: T_BOOLEAN, memoryId: T_STRING }),
288
+ memory_outcome: objectSchema({
289
+ ok: T_BOOLEAN,
290
+ memoryId: T_STRING,
291
+ mw_success: T_NUMBER,
292
+ mw_fail: T_NUMBER,
293
+ reason: T_STRING,
294
+ message: T_STRING,
295
+ }),
296
+ memory_action_apply: objectSchema({ recorded: T_BOOLEAN, event: T_OBJECT }),
297
+ context_checkpoint: objectSchema({ saved: T_BOOLEAN }),
298
+ briefing: objectSchema({
299
+ markdown: T_STRING,
300
+ json: T_OBJECT,
301
+ window: T_OBJECT,
302
+ format: T_STRING,
303
+ namespace: T_STRING,
304
+ }),
305
+ review_list: objectSchema({ pairs: T_ARRAY, total: T_NUMBER, durationMs: T_NUMBER }),
306
+ review_resolve: objectSchema({ pairId: T_STRING, verb: T_STRING, affectedIds: T_ARRAY, message: T_STRING }),
307
+ contradiction_scan_run: objectSchema({
308
+ scanned: T_NUMBER,
309
+ candidates: T_NUMBER,
310
+ judged: T_NUMBER,
311
+ queued: T_NUMBER,
312
+ cooledDown: T_NUMBER,
313
+ elapsedMs: T_NUMBER,
314
+ }),
315
+ memory_summarize_hourly: objectSchema({ ok: T_BOOLEAN, message: T_STRING }),
316
+ conversation_index_update: objectSchema({
317
+ enabled: T_BOOLEAN,
318
+ sessions: T_NUMBER,
319
+ chunks: T_NUMBER,
320
+ skipped: T_NUMBER,
321
+ embeddedRuns: T_NUMBER,
322
+ }),
323
+ profiling_report: objectSchema({
324
+ enabled: T_BOOLEAN,
325
+ format: T_STRING,
326
+ traces: T_ARRAY,
327
+ stats: T_OBJECT,
328
+ bottleneck: T_NULLABLE_STRING,
329
+ }),
330
+ graph_edge_decay_run: objectSchema({ ranAt: T_STRING, disabled: T_BOOLEAN, reason: T_STRING, results: T_ARRAY }),
331
+ live_connectors_run: objectSchema({
332
+ ranAt: T_STRING,
333
+ force: T_BOOLEAN,
334
+ totalDocsImported: T_NUMBER,
335
+ ranCount: T_NUMBER,
336
+ skippedCount: T_NUMBER,
337
+ errorCount: T_NUMBER,
338
+ results: T_ARRAY,
339
+ }),
340
+ peer_list: objectSchema({ peers: T_ARRAY }),
341
+ peer_get: objectSchema({ found: T_BOOLEAN, peer: T_NULLABLE_OBJECT }),
342
+ peer_set: objectSchema({ ok: T_BOOLEAN, created: T_BOOLEAN, peer: T_OBJECT }),
343
+ peer_delete: objectSchema({ ok: T_BOOLEAN, deleted: T_BOOLEAN }),
344
+ peer_profile_get: objectSchema({
345
+ found: T_BOOLEAN,
346
+ profile: {
347
+ type: "object",
348
+ properties: {
349
+ peerId: T_STRING,
350
+ updatedAt: T_STRING,
351
+ fields: { type: "object", additionalProperties: T_STRING },
352
+ provenance: {
353
+ type: "object",
354
+ additionalProperties: {
355
+ type: "array",
356
+ items: {
357
+ type: "object",
358
+ properties: {
359
+ observedAt: T_STRING,
360
+ signal: T_STRING,
361
+ sourceSessionId: T_STRING,
362
+ note: T_STRING,
363
+ },
364
+ required: ["observedAt", "signal"],
365
+ additionalProperties: true,
366
+ },
367
+ },
368
+ },
369
+ },
370
+ required: ["peerId", "updatedAt", "fields", "provenance"],
371
+ additionalProperties: true,
372
+ },
373
+ }),
374
+ peer_forget: objectSchema({ ok: T_BOOLEAN, purged: T_BOOLEAN }),
375
+ console_state: objectSchema({
376
+ capturedAt: T_STRING,
377
+ bufferState: T_OBJECT,
378
+ extractionQueue: T_OBJECT,
379
+ dedupRecent: T_ARRAY,
380
+ maintenanceLedgerTail: T_ARRAY,
381
+ qmdProbe: T_OBJECT,
382
+ daemon: T_OBJECT,
383
+ errors: T_ARRAY,
384
+ }),
385
+ dreams_status: objectSchema({ phases: T_OBJECT, windowStart: T_STRING, windowEnd: T_STRING }),
386
+ dreams_run: objectSchema({ phase: T_STRING, durationMs: T_NUMBER, itemsProcessed: T_NUMBER }),
387
+ coding_decision: objectSchema({
388
+ subcommand: T_STRING,
389
+ records: T_ARRAY,
390
+ count: T_NUMBER,
391
+ found: T_BOOLEAN,
392
+ memoryId: T_STRING,
393
+ status: T_STRING,
394
+ supersededMemoryId: T_STRING,
395
+ replacementMemoryId: T_STRING,
396
+ }),
397
+ coding_architecture: objectSchema({
398
+ subcommand: T_STRING,
399
+ found: T_BOOLEAN,
400
+ refreshed: T_BOOLEAN,
401
+ memoryId: T_STRING,
402
+ }),
403
+ coding_delta: objectSchema({
404
+ subcommand: T_STRING,
405
+ ok: T_BOOLEAN,
406
+ kind: T_STRING,
407
+ delta: T_OBJECT,
408
+ nextState: T_OBJECT,
409
+ }),
410
+ memory_correct_plan: objectSchema({
411
+ planId: T_STRING,
412
+ namespace: T_STRING,
413
+ diff: T_STRING,
414
+ actions: T_ARRAY,
415
+ confidence: T_NUMBER,
416
+ }),
417
+ memory_correct_apply: objectSchema({
418
+ planId: T_STRING,
419
+ status: T_STRING,
420
+ results: T_ARRAY,
421
+ auditMemoryId: T_STRING,
422
+ appliedAt: T_STRING,
423
+ }),
424
+ memory_chat: objectSchema({
425
+ reply: T_STRING,
426
+ chatSessionId: T_STRING,
427
+ pendingPlan: {
428
+ type: "object",
429
+ properties: { planId: T_STRING, preview: T_STRING },
430
+ required: ["planId", "preview"],
431
+ additionalProperties: true,
432
+ },
433
+ skippedTools: { type: "array", items: T_STRING },
434
+ }),
435
+ codegraph_index: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
436
+ codegraph_list_projects: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
437
+ codegraph_delete_project: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
438
+ codegraph_index_status: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
439
+ codegraph_search_graph: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
440
+ codegraph_trace_path: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
441
+ codegraph_detect_changes: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
442
+ codegraph_query_graph: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
443
+ codegraph_get_schema: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
444
+ codegraph_get_snippet: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
445
+ codegraph_get_architecture: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
446
+ codegraph_search_code: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
447
+ codegraph_manage_adr: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
448
+ codegraph_ingest_traces: objectSchema({ ok: T_BOOLEAN, result: T_OBJECT }),
449
+ };
450
+
451
+ /**
452
+ * Apply outputSchema from the registry to every tool that lacks one.
453
+ * Suffix resolution strips the canonical or legacy prefix so both
454
+ * `remnic.*` and `engram.*` aliases inherit the same schema.
455
+ * Tools that already have an explicit outputSchema are skipped.
456
+ */
457
+ export function applyToolOutputSchemas<T extends { name: string; outputSchema?: unknown }>(
458
+ tools: ReadonlyArray<T>,
459
+ canonicalPrefix: string,
460
+ legacyPrefix: string
461
+ ): T[] {
462
+ return tools.map((tool) => {
463
+ if (tool.outputSchema) return tool;
464
+ const name = tool.name as string;
465
+ const suffix = name.startsWith(canonicalPrefix)
466
+ ? name.slice(canonicalPrefix.length)
467
+ : name.startsWith(legacyPrefix)
468
+ ? name.slice(legacyPrefix.length)
469
+ : name;
470
+ return { ...tool, outputSchema: TOOL_OUTPUT_SCHEMAS[suffix] ?? { type: "object", additionalProperties: true } };
471
+ });
472
+ }