ai-memory-layer 2.0.0 → 3.0.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.
Files changed (186) hide show
  1. package/CHANGELOG.md +19 -12
  2. package/README.md +435 -320
  3. package/bin/memory-server.mjs +0 -0
  4. package/dist/adapters/memory/embeddings.d.ts.map +1 -1
  5. package/dist/adapters/memory/embeddings.js +12 -1
  6. package/dist/adapters/memory/embeddings.js.map +1 -1
  7. package/dist/adapters/memory/index.d.ts.map +1 -1
  8. package/dist/adapters/memory/index.js +1281 -48
  9. package/dist/adapters/memory/index.js.map +1 -1
  10. package/dist/adapters/postgres/index.d.ts +1 -0
  11. package/dist/adapters/postgres/index.d.ts.map +1 -1
  12. package/dist/adapters/postgres/index.js +1770 -42
  13. package/dist/adapters/postgres/index.js.map +1 -1
  14. package/dist/adapters/sqlite/embeddings.d.ts.map +1 -1
  15. package/dist/adapters/sqlite/embeddings.js +49 -12
  16. package/dist/adapters/sqlite/embeddings.js.map +1 -1
  17. package/dist/adapters/sqlite/index.d.ts.map +1 -1
  18. package/dist/adapters/sqlite/index.js +1720 -38
  19. package/dist/adapters/sqlite/index.js.map +1 -1
  20. package/dist/adapters/sqlite/mappers.d.ts +39 -4
  21. package/dist/adapters/sqlite/mappers.d.ts.map +1 -1
  22. package/dist/adapters/sqlite/mappers.js +87 -0
  23. package/dist/adapters/sqlite/mappers.js.map +1 -1
  24. package/dist/adapters/sqlite/schema.d.ts +1 -1
  25. package/dist/adapters/sqlite/schema.d.ts.map +1 -1
  26. package/dist/adapters/sqlite/schema.js +297 -1
  27. package/dist/adapters/sqlite/schema.js.map +1 -1
  28. package/dist/adapters/sync-to-async.d.ts.map +1 -1
  29. package/dist/adapters/sync-to-async.js +54 -0
  30. package/dist/adapters/sync-to-async.js.map +1 -1
  31. package/dist/contracts/async-storage.d.ts +61 -1
  32. package/dist/contracts/async-storage.d.ts.map +1 -1
  33. package/dist/contracts/cognitive.d.ts +37 -0
  34. package/dist/contracts/cognitive.d.ts.map +1 -0
  35. package/dist/contracts/cognitive.js +24 -0
  36. package/dist/contracts/cognitive.js.map +1 -0
  37. package/dist/contracts/coordination.d.ts +101 -0
  38. package/dist/contracts/coordination.d.ts.map +1 -0
  39. package/dist/contracts/coordination.js +26 -0
  40. package/dist/contracts/coordination.js.map +1 -0
  41. package/dist/contracts/embedding.d.ts +1 -1
  42. package/dist/contracts/embedding.d.ts.map +1 -1
  43. package/dist/contracts/errors.d.ts +28 -0
  44. package/dist/contracts/errors.d.ts.map +1 -0
  45. package/dist/contracts/errors.js +41 -0
  46. package/dist/contracts/errors.js.map +1 -0
  47. package/dist/contracts/identity.d.ts +2 -0
  48. package/dist/contracts/identity.d.ts.map +1 -1
  49. package/dist/contracts/identity.js +26 -1
  50. package/dist/contracts/identity.js.map +1 -1
  51. package/dist/contracts/observability.d.ts +2 -1
  52. package/dist/contracts/observability.d.ts.map +1 -1
  53. package/dist/contracts/observability.js +11 -0
  54. package/dist/contracts/observability.js.map +1 -1
  55. package/dist/contracts/profile.d.ts +29 -0
  56. package/dist/contracts/profile.d.ts.map +1 -0
  57. package/dist/contracts/profile.js +2 -0
  58. package/dist/contracts/profile.js.map +1 -0
  59. package/dist/contracts/session-state.d.ts +10 -0
  60. package/dist/contracts/session-state.d.ts.map +1 -0
  61. package/dist/contracts/session-state.js +2 -0
  62. package/dist/contracts/session-state.js.map +1 -0
  63. package/dist/contracts/storage.d.ts +73 -1
  64. package/dist/contracts/storage.d.ts.map +1 -1
  65. package/dist/contracts/storage.js +16 -1
  66. package/dist/contracts/storage.js.map +1 -1
  67. package/dist/contracts/temporal.d.ts +112 -0
  68. package/dist/contracts/temporal.d.ts.map +1 -0
  69. package/dist/contracts/temporal.js +31 -0
  70. package/dist/contracts/temporal.js.map +1 -0
  71. package/dist/contracts/types.d.ts +135 -0
  72. package/dist/contracts/types.d.ts.map +1 -1
  73. package/dist/contracts/types.js +27 -0
  74. package/dist/contracts/types.js.map +1 -1
  75. package/dist/core/associations.d.ts +18 -0
  76. package/dist/core/associations.d.ts.map +1 -0
  77. package/dist/core/associations.js +185 -0
  78. package/dist/core/associations.js.map +1 -0
  79. package/dist/core/circuit-breaker.d.ts +9 -0
  80. package/dist/core/circuit-breaker.d.ts.map +1 -1
  81. package/dist/core/circuit-breaker.js +13 -1
  82. package/dist/core/circuit-breaker.js.map +1 -1
  83. package/dist/core/cognitive.d.ts +5 -0
  84. package/dist/core/cognitive.d.ts.map +1 -0
  85. package/dist/core/cognitive.js +120 -0
  86. package/dist/core/cognitive.js.map +1 -0
  87. package/dist/core/context.d.ts +72 -1
  88. package/dist/core/context.d.ts.map +1 -1
  89. package/dist/core/context.js +471 -45
  90. package/dist/core/context.js.map +1 -1
  91. package/dist/core/episodic.d.ts +28 -0
  92. package/dist/core/episodic.d.ts.map +1 -0
  93. package/dist/core/episodic.js +371 -0
  94. package/dist/core/episodic.js.map +1 -0
  95. package/dist/core/formatter.d.ts +4 -0
  96. package/dist/core/formatter.d.ts.map +1 -1
  97. package/dist/core/formatter.js +103 -0
  98. package/dist/core/formatter.js.map +1 -1
  99. package/dist/core/maintenance.d.ts +1 -0
  100. package/dist/core/maintenance.d.ts.map +1 -1
  101. package/dist/core/maintenance.js +75 -0
  102. package/dist/core/maintenance.js.map +1 -1
  103. package/dist/core/manager.d.ts +159 -7
  104. package/dist/core/manager.d.ts.map +1 -1
  105. package/dist/core/manager.js +740 -31
  106. package/dist/core/manager.js.map +1 -1
  107. package/dist/core/orchestrator.d.ts.map +1 -1
  108. package/dist/core/orchestrator.js +210 -178
  109. package/dist/core/orchestrator.js.map +1 -1
  110. package/dist/core/playbook.d.ts +35 -0
  111. package/dist/core/playbook.d.ts.map +1 -0
  112. package/dist/core/playbook.js +184 -0
  113. package/dist/core/playbook.js.map +1 -0
  114. package/dist/core/profile.d.ts +8 -0
  115. package/dist/core/profile.d.ts.map +1 -0
  116. package/dist/core/profile.js +103 -0
  117. package/dist/core/profile.js.map +1 -0
  118. package/dist/core/quick.d.ts +5 -0
  119. package/dist/core/quick.d.ts.map +1 -1
  120. package/dist/core/quick.js +10 -1
  121. package/dist/core/quick.js.map +1 -1
  122. package/dist/core/runtime.d.ts +17 -1
  123. package/dist/core/runtime.d.ts.map +1 -1
  124. package/dist/core/runtime.js +88 -5
  125. package/dist/core/runtime.js.map +1 -1
  126. package/dist/core/streaming.d.ts +1 -1
  127. package/dist/core/streaming.d.ts.map +1 -1
  128. package/dist/core/temporal.d.ts +29 -0
  129. package/dist/core/temporal.d.ts.map +1 -0
  130. package/dist/core/temporal.js +447 -0
  131. package/dist/core/temporal.js.map +1 -0
  132. package/dist/core/validation.d.ts +3 -0
  133. package/dist/core/validation.d.ts.map +1 -1
  134. package/dist/core/validation.js +25 -10
  135. package/dist/core/validation.js.map +1 -1
  136. package/dist/core/workspace-detect.d.ts +17 -0
  137. package/dist/core/workspace-detect.d.ts.map +1 -0
  138. package/dist/core/workspace-detect.js +55 -0
  139. package/dist/core/workspace-detect.js.map +1 -0
  140. package/dist/embeddings/resilience.d.ts.map +1 -1
  141. package/dist/embeddings/resilience.js +19 -8
  142. package/dist/embeddings/resilience.js.map +1 -1
  143. package/dist/index.d.ts +21 -4
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +9 -0
  146. package/dist/index.js.map +1 -1
  147. package/dist/integrations/claude-agent.d.ts +6 -0
  148. package/dist/integrations/claude-agent.d.ts.map +1 -1
  149. package/dist/integrations/claude-agent.js +5 -1
  150. package/dist/integrations/claude-agent.js.map +1 -1
  151. package/dist/integrations/claude-tools.d.ts +5 -4
  152. package/dist/integrations/claude-tools.d.ts.map +1 -1
  153. package/dist/integrations/claude-tools.js +155 -2
  154. package/dist/integrations/claude-tools.js.map +1 -1
  155. package/dist/integrations/middleware.d.ts +6 -0
  156. package/dist/integrations/middleware.d.ts.map +1 -1
  157. package/dist/integrations/middleware.js +11 -1
  158. package/dist/integrations/middleware.js.map +1 -1
  159. package/dist/integrations/openai-tools.d.ts +5 -4
  160. package/dist/integrations/openai-tools.d.ts.map +1 -1
  161. package/dist/integrations/openai-tools.js +170 -2
  162. package/dist/integrations/openai-tools.js.map +1 -1
  163. package/dist/integrations/vercel-ai.d.ts +6 -0
  164. package/dist/integrations/vercel-ai.d.ts.map +1 -1
  165. package/dist/integrations/vercel-ai.js +4 -0
  166. package/dist/integrations/vercel-ai.js.map +1 -1
  167. package/dist/server/http-server.d.ts +8 -0
  168. package/dist/server/http-server.d.ts.map +1 -1
  169. package/dist/server/http-server.js +976 -58
  170. package/dist/server/http-server.js.map +1 -1
  171. package/dist/server/mcp-server.d.ts +8 -0
  172. package/dist/server/mcp-server.d.ts.map +1 -1
  173. package/dist/server/mcp-server.js +1157 -37
  174. package/dist/server/mcp-server.js.map +1 -1
  175. package/dist/server/parsing.d.ts +12 -0
  176. package/dist/server/parsing.d.ts.map +1 -0
  177. package/dist/server/parsing.js +42 -0
  178. package/dist/server/parsing.js.map +1 -0
  179. package/dist/summarizers/prompts.d.ts +4 -0
  180. package/dist/summarizers/prompts.d.ts.map +1 -1
  181. package/dist/summarizers/prompts.js +42 -0
  182. package/dist/summarizers/prompts.js.map +1 -1
  183. package/docs/ULTIMATE_MEMORY_LAYER_ROADMAP.md +291 -0
  184. package/docs/prd.json +1498 -0
  185. package/openapi.yaml +1945 -112
  186. package/package.json +7 -5
package/openapi.yaml CHANGED
@@ -1,13 +1,18 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: memory-layer HTTP API
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  description: HTTP surface for the memory-layer standalone AI memory service.
6
6
  servers:
7
7
  - url: http://localhost:3100
8
8
  tags:
9
9
  - name: ingestion
10
10
  - name: retrieval
11
+ - name: episodic
12
+ - name: cognitive
13
+ - name: profiles
14
+ - name: playbooks
15
+ - name: associations
11
16
  - name: maintenance
12
17
  - name: observability
13
18
  components:
@@ -75,6 +80,41 @@ components:
75
80
  properties:
76
81
  error:
77
82
  type: string
83
+ Association:
84
+ type: object
85
+ required: [id, tenant_id, system_id, workspace_id, collaboration_id, scope_id, source_kind, source_id, target_kind, target_id, association_type, confidence, auto_generated, created_at]
86
+ properties:
87
+ id:
88
+ type: integer
89
+ tenant_id:
90
+ type: string
91
+ system_id:
92
+ type: string
93
+ workspace_id:
94
+ type: string
95
+ collaboration_id:
96
+ type: string
97
+ scope_id:
98
+ type: string
99
+ source_kind:
100
+ type: string
101
+ enum: [knowledge, playbook, working_memory, work_item]
102
+ source_id:
103
+ type: integer
104
+ target_kind:
105
+ type: string
106
+ enum: [knowledge, playbook, working_memory, work_item]
107
+ target_id:
108
+ type: integer
109
+ association_type:
110
+ type: string
111
+ enum: [related_to, supports, contradicts, supersedes, depends_on, solves, applies_to, derived_from]
112
+ confidence:
113
+ type: number
114
+ auto_generated:
115
+ type: boolean
116
+ created_at:
117
+ type: integer
78
118
  MemoryEvent:
79
119
  type: object
80
120
  required: [type, scope, timestamp, durationMs, meta]
@@ -104,6 +144,129 @@ components:
104
144
  type: string
105
145
  scope_id:
106
146
  type: string
147
+ ActorRef:
148
+ type: object
149
+ required: [actor_kind, actor_id]
150
+ properties:
151
+ actor_kind:
152
+ type: string
153
+ enum: [agent, human, system, service]
154
+ actor_id:
155
+ type: string
156
+ system_id:
157
+ type: string
158
+ nullable: true
159
+ display_name:
160
+ type: string
161
+ nullable: true
162
+ metadata:
163
+ type: object
164
+ nullable: true
165
+ additionalProperties: true
166
+ WorkClaim:
167
+ type: object
168
+ required: [id, work_item_id, actor, claim_token, status, claimed_at, expires_at, visibility_class, version]
169
+ properties:
170
+ id:
171
+ type: integer
172
+ work_item_id:
173
+ type: integer
174
+ actor:
175
+ $ref: '#/components/schemas/ActorRef'
176
+ session_id:
177
+ type: string
178
+ nullable: true
179
+ claim_token:
180
+ type: string
181
+ status:
182
+ type: string
183
+ enum: [active, released, expired]
184
+ claimed_at:
185
+ type: integer
186
+ expires_at:
187
+ type: integer
188
+ released_at:
189
+ type: integer
190
+ nullable: true
191
+ release_reason:
192
+ type: string
193
+ nullable: true
194
+ source_event_id:
195
+ type: string
196
+ nullable: true
197
+ visibility_class:
198
+ type: string
199
+ enum: [private, shared_collaboration, workspace, tenant]
200
+ version:
201
+ type: integer
202
+ HandoffRecord:
203
+ type: object
204
+ required: [id, work_item_id, from_actor, to_actor, summary, status, created_at, visibility_class, version]
205
+ properties:
206
+ id:
207
+ type: integer
208
+ work_item_id:
209
+ type: integer
210
+ from_actor:
211
+ $ref: '#/components/schemas/ActorRef'
212
+ to_actor:
213
+ $ref: '#/components/schemas/ActorRef'
214
+ session_id:
215
+ type: string
216
+ nullable: true
217
+ summary:
218
+ type: string
219
+ context_bundle_ref:
220
+ type: string
221
+ nullable: true
222
+ status:
223
+ type: string
224
+ enum: [pending, accepted, rejected, canceled, expired]
225
+ created_at:
226
+ type: integer
227
+ accepted_at:
228
+ type: integer
229
+ nullable: true
230
+ rejected_at:
231
+ type: integer
232
+ nullable: true
233
+ canceled_at:
234
+ type: integer
235
+ nullable: true
236
+ expires_at:
237
+ type: integer
238
+ nullable: true
239
+ decision_reason:
240
+ type: string
241
+ nullable: true
242
+ source_event_id:
243
+ type: string
244
+ nullable: true
245
+ visibility_class:
246
+ type: string
247
+ enum: [private, shared_collaboration, workspace, tenant]
248
+ version:
249
+ type: integer
250
+ CoordinationState:
251
+ type: object
252
+ required: [ownedClaims, pendingInboundHandoffs, pendingOutboundHandoffs, sharedWorkItems]
253
+ properties:
254
+ ownedClaims:
255
+ type: array
256
+ items:
257
+ $ref: '#/components/schemas/WorkClaim'
258
+ pendingInboundHandoffs:
259
+ type: array
260
+ items:
261
+ $ref: '#/components/schemas/HandoffRecord'
262
+ pendingOutboundHandoffs:
263
+ type: array
264
+ items:
265
+ $ref: '#/components/schemas/HandoffRecord'
266
+ sharedWorkItems:
267
+ type: array
268
+ items:
269
+ type: object
107
270
  TurnRequest:
108
271
  type: object
109
272
  required: [role, content]
@@ -158,6 +321,9 @@ components:
158
321
  default: open
159
322
  detail:
160
323
  type: string
324
+ visibility_class:
325
+ type: string
326
+ enum: [private, shared_collaboration, workspace, tenant]
161
327
  scope:
162
328
  $ref: '#/components/schemas/Scope'
163
329
  CompactRequest:
@@ -171,6 +337,35 @@ components:
171
337
  currentObjective:
172
338
  type: string
173
339
  nullable: true
340
+ sessionState:
341
+ type: object
342
+ nullable: true
343
+ properties:
344
+ currentObjective:
345
+ type: string
346
+ nullable: true
347
+ blockers:
348
+ type: array
349
+ items:
350
+ type: string
351
+ assumptions:
352
+ type: array
353
+ items:
354
+ type: string
355
+ pendingDecisions:
356
+ type: array
357
+ items:
358
+ type: string
359
+ activeTools:
360
+ type: array
361
+ items:
362
+ type: string
363
+ recentOutputs:
364
+ type: array
365
+ items:
366
+ type: string
367
+ updatedAt:
368
+ type: integer
174
369
  activeTurnCount:
175
370
  type: integer
176
371
  workingMemory:
@@ -212,7 +407,13 @@ components:
212
407
  unresolvedWork:
213
408
  type: array
214
409
  items:
215
- type: object
410
+ type: string
411
+ debugTrace:
412
+ type: object
413
+ nullable: true
414
+ coordinationState:
415
+ type: object
416
+ nullable: true
216
417
  tokenEstimate:
217
418
  type: integer
218
419
  SearchResponse:
@@ -257,6 +458,148 @@ components:
257
458
  type: integer
258
459
  unresolvedWorkCount:
259
460
  type: integer
461
+ sessionStateUpdatedAt:
462
+ type: integer
463
+ circuitBreakers:
464
+ type: object
465
+ TemporalEventLogResponse:
466
+ type: object
467
+ required: [events]
468
+ properties:
469
+ events:
470
+ type: array
471
+ items:
472
+ $ref: '#/components/schemas/TemporalEventRecord'
473
+ nextCursor:
474
+ type: string
475
+ nullable: true
476
+ TemporalEventRecord:
477
+ type: object
478
+ required: [event_id, entity_kind, entity_id, event_type, payload, created_at]
479
+ properties:
480
+ event_id:
481
+ type: string
482
+ tenant_id:
483
+ type: string
484
+ system_id:
485
+ type: string
486
+ workspace_id:
487
+ type: string
488
+ collaboration_id:
489
+ type: string
490
+ scope_id:
491
+ type: string
492
+ session_id:
493
+ type: string
494
+ nullable: true
495
+ actor_id:
496
+ type: string
497
+ nullable: true
498
+ actor_kind:
499
+ type: string
500
+ nullable: true
501
+ actor_system_id:
502
+ type: string
503
+ nullable: true
504
+ actor_display_name:
505
+ type: string
506
+ nullable: true
507
+ actor_metadata:
508
+ type: object
509
+ nullable: true
510
+ additionalProperties: true
511
+ entity_kind:
512
+ type: string
513
+ entity_id:
514
+ type: string
515
+ event_type:
516
+ type: string
517
+ payload:
518
+ type: object
519
+ additionalProperties: true
520
+ causation_id:
521
+ type: string
522
+ nullable: true
523
+ correlation_id:
524
+ type: string
525
+ nullable: true
526
+ created_at:
527
+ type: integer
528
+ TemporalStateResponse:
529
+ type: object
530
+ required: [asOf, exact, cutoverAt, watermarkEventId, context, turns, workingMemory, knowledge, workItems, associations, playbooks, workClaims, handoffs]
531
+ properties:
532
+ asOf:
533
+ type: integer
534
+ exact:
535
+ type: boolean
536
+ cutoverAt:
537
+ type: integer
538
+ nullable: true
539
+ watermarkEventId:
540
+ type: string
541
+ nullable: true
542
+ context:
543
+ $ref: '#/components/schemas/ContextResponse'
544
+ sessionState:
545
+ type: object
546
+ nullable: true
547
+ turns:
548
+ type: array
549
+ items:
550
+ type: object
551
+ workingMemory:
552
+ type: array
553
+ items:
554
+ type: object
555
+ knowledge:
556
+ type: array
557
+ items:
558
+ type: object
559
+ workItems:
560
+ type: array
561
+ items:
562
+ type: object
563
+ associations:
564
+ type: array
565
+ items:
566
+ type: object
567
+ playbooks:
568
+ type: array
569
+ items:
570
+ type: object
571
+ workClaims:
572
+ type: array
573
+ items:
574
+ $ref: '#/components/schemas/WorkClaim'
575
+ handoffs:
576
+ type: array
577
+ items:
578
+ $ref: '#/components/schemas/HandoffRecord'
579
+ coordinationState:
580
+ type: object
581
+ nullable: true
582
+ TemporalStateDiffResponse:
583
+ type: object
584
+ required: [from, to, exact, cutoverAt, watermarkRange, events, summary]
585
+ properties:
586
+ from:
587
+ type: integer
588
+ to:
589
+ type: integer
590
+ exact:
591
+ type: boolean
592
+ cutoverAt:
593
+ type: integer
594
+ nullable: true
595
+ watermarkRange:
596
+ type: object
597
+ events:
598
+ type: array
599
+ items:
600
+ $ref: '#/components/schemas/TemporalEventRecord'
601
+ summary:
602
+ type: object
260
603
  ReadyResponse:
261
604
  type: object
262
605
  properties:
@@ -264,93 +607,1416 @@ components:
264
607
  type: boolean
265
608
  scopes:
266
609
  type: integer
267
- security:
268
- - bearerAuth: []
269
- paths:
270
- /v1/turns:
271
- post:
272
- tags: [ingestion]
273
- summary: Store a single turn
274
- requestBody:
275
- required: true
276
- content:
277
- application/json:
278
- schema:
279
- $ref: '#/components/schemas/TurnRequest'
280
- responses:
281
- '201':
282
- description: Turn stored
283
- content:
284
- application/json:
285
- schema:
286
- type: object
287
- properties:
288
- turnId:
289
- type: integer
290
- role:
291
- type: string
292
- '400':
293
- description: Invalid request
294
- content:
295
- application/json:
296
- schema:
297
- $ref: '#/components/schemas/Error'
298
- /v1/exchanges:
299
- post:
300
- tags: [ingestion]
301
- summary: Store a user and assistant exchange
302
- requestBody:
303
- required: true
304
- content:
305
- application/json:
306
- schema:
307
- $ref: '#/components/schemas/ExchangeRequest'
308
- responses:
309
- '201':
310
- description: Exchange stored
311
- content:
312
- application/json:
313
- schema:
314
- type: object
610
+ EpisodeSourceReference:
611
+ type: object
612
+ required: [type, id, excerpt]
613
+ properties:
614
+ type:
615
+ type: string
616
+ enum: [turn, working_memory, knowledge]
617
+ id:
618
+ type: integer
619
+ excerpt:
620
+ type: string
621
+ nullable: true
622
+ EpisodeRecap:
623
+ type: object
624
+ required: [objective, actions, outcomes, artifacts, unresolvedItems, sourceType, sources]
625
+ properties:
626
+ objective:
627
+ type: string
628
+ actions:
629
+ type: array
630
+ items:
631
+ type: string
632
+ outcomes:
633
+ type: array
634
+ items:
635
+ type: string
636
+ artifacts:
637
+ type: array
638
+ items:
639
+ type: string
640
+ unresolvedItems:
641
+ type: array
642
+ items:
643
+ type: string
644
+ sourceType:
645
+ type: string
646
+ enum: [episodic, declarative, mixed]
647
+ sources:
648
+ type: array
649
+ items:
650
+ $ref: '#/components/schemas/EpisodeSourceReference'
651
+ EpisodeSummary:
652
+ type: object
653
+ required: [sessionId, recap, detailLevel, turnRange, createdAt]
654
+ properties:
655
+ sessionId:
656
+ type: string
657
+ recap:
658
+ $ref: '#/components/schemas/EpisodeRecap'
659
+ detailLevel:
660
+ type: string
661
+ enum: [abstract, overview, full]
662
+ turnRange:
663
+ type: object
664
+ required: [start, end]
665
+ properties:
666
+ start:
667
+ type: integer
668
+ end:
669
+ type: integer
670
+ createdAt:
671
+ type: integer
672
+ ReflectResult:
673
+ type: object
674
+ required: [synthesis, sourceType, sources, episodes, detailLevel]
675
+ properties:
676
+ synthesis:
677
+ type: string
678
+ sourceType:
679
+ type: string
680
+ enum: [episodic, declarative, mixed]
681
+ sources:
682
+ type: array
683
+ items:
684
+ $ref: '#/components/schemas/EpisodeSourceReference'
685
+ episodes:
686
+ type: array
687
+ items:
688
+ $ref: '#/components/schemas/EpisodeSummary'
689
+ detailLevel:
690
+ type: string
691
+ enum: [abstract, overview, full]
692
+ CognitiveMemoryItem:
693
+ type: object
694
+ required: [id, type, fact, createdAt, lastAccessedAt, metadata]
695
+ properties:
696
+ id:
697
+ type: integer
698
+ type:
699
+ type: string
700
+ enum: [episodic, semantic, procedural, working]
701
+ fact:
702
+ type: string
703
+ createdAt:
704
+ type: integer
705
+ lastAccessedAt:
706
+ type: integer
707
+ metadata:
708
+ type: object
709
+ required: [trustScore, knowledgeClass]
710
+ properties:
711
+ trustScore:
712
+ type: number
713
+ knowledgeClass:
714
+ type: string
715
+ knowledgeState:
716
+ type: string
717
+ CognitiveSearchHit:
718
+ type: object
719
+ required: [item, rank]
720
+ properties:
721
+ item:
722
+ $ref: '#/components/schemas/CognitiveMemoryItem'
723
+ rank:
724
+ type: number
725
+ CognitiveSearchResult:
726
+ type: object
727
+ required: [byType, all]
728
+ properties:
729
+ byType:
730
+ type: object
731
+ required: [episodic, semantic, procedural, working]
732
+ properties:
733
+ episodic:
734
+ type: array
735
+ items:
736
+ $ref: '#/components/schemas/CognitiveSearchHit'
737
+ semantic:
738
+ type: array
739
+ items:
740
+ $ref: '#/components/schemas/CognitiveSearchHit'
741
+ procedural:
742
+ type: array
743
+ items:
744
+ $ref: '#/components/schemas/CognitiveSearchHit'
745
+ working:
746
+ type: array
747
+ items:
748
+ $ref: '#/components/schemas/CognitiveSearchHit'
749
+ all:
750
+ type: array
751
+ items:
752
+ $ref: '#/components/schemas/CognitiveSearchHit'
753
+ ProfileEntry:
754
+ type: object
755
+ required: [knowledgeId, fact, trustScore, knowledgeState, confidence, lastConfirmedAt]
756
+ properties:
757
+ knowledgeId:
758
+ type: integer
759
+ fact:
760
+ type: string
761
+ trustScore:
762
+ type: number
763
+ knowledgeState:
764
+ type: string
765
+ enum: [candidate, provisional, trusted, disputed, superseded, retired]
766
+ confidence:
767
+ type: string
768
+ enum: [high, medium, low]
769
+ lastConfirmedAt:
770
+ type: integer
771
+ nullable: true
772
+ Profile:
773
+ type: object
774
+ required: [view, sections, generatedAt]
775
+ properties:
776
+ view:
777
+ type: string
778
+ enum: [user, operator, workspace]
779
+ sections:
780
+ type: object
781
+ required: [identity, preferences, communication, constraints, workflows]
782
+ properties:
783
+ identity:
784
+ type: array
785
+ items:
786
+ $ref: '#/components/schemas/ProfileEntry'
787
+ preferences:
788
+ type: array
789
+ items:
790
+ $ref: '#/components/schemas/ProfileEntry'
791
+ communication:
792
+ type: array
793
+ items:
794
+ $ref: '#/components/schemas/ProfileEntry'
795
+ constraints:
796
+ type: array
797
+ items:
798
+ $ref: '#/components/schemas/ProfileEntry'
799
+ workflows:
800
+ type: array
801
+ items:
802
+ $ref: '#/components/schemas/ProfileEntry'
803
+ generatedAt:
804
+ type: integer
805
+ Playbook:
806
+ type: object
807
+ required: [id, tenant_id, system_id, workspace_id, collaboration_id, scope_id, title, description, instructions, references, templates, scripts, assets, tags, status, revision_count, use_count, created_at, updated_at, schema_version, visibility_class]
808
+ properties:
809
+ id:
810
+ type: integer
811
+ tenant_id:
812
+ type: string
813
+ system_id:
814
+ type: string
815
+ workspace_id:
816
+ type: string
817
+ collaboration_id:
818
+ type: string
819
+ scope_id:
820
+ type: string
821
+ visibility_class:
822
+ type: string
823
+ enum: [private, shared_collaboration, workspace, tenant]
824
+ title:
825
+ type: string
826
+ description:
827
+ type: string
828
+ instructions:
829
+ type: string
830
+ references:
831
+ type: array
832
+ items:
833
+ type: string
834
+ templates:
835
+ type: array
836
+ items:
837
+ type: string
838
+ scripts:
839
+ type: array
840
+ items:
841
+ type: string
842
+ assets:
843
+ type: array
844
+ items:
845
+ type: string
846
+ tags:
847
+ type: array
848
+ items:
849
+ type: string
850
+ status:
851
+ type: string
852
+ enum: [draft, active, deprecated, archived]
853
+ source_session_id:
854
+ type: string
855
+ nullable: true
856
+ source_working_memory_id:
857
+ type: integer
858
+ nullable: true
859
+ revision_count:
860
+ type: integer
861
+ last_used_at:
862
+ type: integer
863
+ nullable: true
864
+ use_count:
865
+ type: integer
866
+ created_at:
867
+ type: integer
868
+ updated_at:
869
+ type: integer
870
+ schema_version:
871
+ type: integer
872
+ NewPlaybookRequest:
873
+ type: object
874
+ required: [title, description, instructions]
875
+ properties:
876
+ title:
877
+ type: string
878
+ description:
879
+ type: string
880
+ instructions:
881
+ type: string
882
+ references:
883
+ type: array
884
+ items:
885
+ type: string
886
+ templates:
887
+ type: array
888
+ items:
889
+ type: string
890
+ scripts:
891
+ type: array
892
+ items:
893
+ type: string
894
+ assets:
895
+ type: array
896
+ items:
897
+ type: string
898
+ tags:
899
+ type: array
900
+ items:
901
+ type: string
902
+ status:
903
+ type: string
904
+ enum: [draft, active, deprecated, archived]
905
+ source_session_id:
906
+ type: string
907
+ source_working_memory_id:
908
+ type: integer
909
+ scope:
910
+ $ref: '#/components/schemas/Scope'
911
+ PlaybookRevision:
912
+ type: object
913
+ required: [id, tenant_id, system_id, workspace_id, collaboration_id, scope_id, playbook_id, instructions, revision_reason, created_at]
914
+ properties:
915
+ id:
916
+ type: integer
917
+ tenant_id:
918
+ type: string
919
+ system_id:
920
+ type: string
921
+ workspace_id:
922
+ type: string
923
+ collaboration_id:
924
+ type: string
925
+ scope_id:
926
+ type: string
927
+ playbook_id:
928
+ type: integer
929
+ instructions:
930
+ type: string
931
+ revision_reason:
932
+ type: string
933
+ source_session_id:
934
+ type: string
935
+ nullable: true
936
+ created_at:
937
+ type: integer
938
+ PlaybookSearchHit:
939
+ type: object
940
+ required: [item, rank]
941
+ properties:
942
+ item:
943
+ $ref: '#/components/schemas/Playbook'
944
+ rank:
945
+ type: number
946
+ security:
947
+ - bearerAuth: []
948
+ paths:
949
+ /v1/turns:
950
+ post:
951
+ tags: [ingestion]
952
+ summary: Store a single turn
953
+ requestBody:
954
+ required: true
955
+ content:
956
+ application/json:
957
+ schema:
958
+ $ref: '#/components/schemas/TurnRequest'
959
+ responses:
960
+ '201':
961
+ description: Turn stored
962
+ content:
963
+ application/json:
964
+ schema:
965
+ type: object
966
+ properties:
967
+ turnId:
968
+ type: integer
969
+ role:
970
+ type: string
971
+ '400':
972
+ description: Invalid request
973
+ content:
974
+ application/json:
975
+ schema:
976
+ $ref: '#/components/schemas/Error'
977
+ /v1/exchanges:
978
+ post:
979
+ tags: [ingestion]
980
+ summary: Store a user and assistant exchange
981
+ requestBody:
982
+ required: true
983
+ content:
984
+ application/json:
985
+ schema:
986
+ $ref: '#/components/schemas/ExchangeRequest'
987
+ responses:
988
+ '201':
989
+ description: Exchange stored
990
+ content:
991
+ application/json:
992
+ schema:
993
+ type: object
994
+ properties:
995
+ userTurnId:
996
+ type: integer
997
+ assistantTurnId:
998
+ type: integer
999
+ compacted:
1000
+ type: boolean
1001
+ /v1/context:
1002
+ get:
1003
+ tags: [retrieval]
1004
+ summary: Assemble prompt-ready context
1005
+ parameters:
1006
+ - $ref: '#/components/parameters/Query'
1007
+ - name: view
1008
+ in: query
1009
+ schema:
1010
+ type: string
1011
+ enum: [local_only, local_plus_shared_collaboration, operator_supervisor, workspace_shared]
1012
+ - name: include_coordination
1013
+ in: query
1014
+ schema:
1015
+ type: boolean
1016
+ - name: viewer_actor_kind
1017
+ in: query
1018
+ schema:
1019
+ type: string
1020
+ enum: [agent, human, system, service]
1021
+ - name: viewer_actor_id
1022
+ in: query
1023
+ schema:
1024
+ type: string
1025
+ - name: viewer_system_id
1026
+ in: query
1027
+ schema:
1028
+ type: string
1029
+ - name: viewer_display_name
1030
+ in: query
1031
+ schema:
1032
+ type: string
1033
+ - $ref: '#/components/parameters/ScopeTenant'
1034
+ - $ref: '#/components/parameters/ScopeSystem'
1035
+ - $ref: '#/components/parameters/ScopeWorkspace'
1036
+ - $ref: '#/components/parameters/ScopeCollaboration'
1037
+ - $ref: '#/components/parameters/ScopeId'
1038
+ responses:
1039
+ '200':
1040
+ description: Assembled context
1041
+ content:
1042
+ application/json:
1043
+ schema:
1044
+ $ref: '#/components/schemas/ContextResponse'
1045
+ /v1/state:
1046
+ get:
1047
+ tags: [retrieval]
1048
+ summary: Get temporal state at a unix timestamp
1049
+ parameters:
1050
+ - name: as_of
1051
+ in: query
1052
+ required: true
1053
+ schema:
1054
+ type: integer
1055
+ - $ref: '#/components/parameters/Query'
1056
+ - name: view
1057
+ in: query
1058
+ schema:
1059
+ type: string
1060
+ enum: [local_only, local_plus_shared_collaboration, operator_supervisor, workspace_shared]
1061
+ - name: include_coordination
1062
+ in: query
1063
+ schema:
1064
+ type: boolean
1065
+ - name: viewer_actor_kind
1066
+ in: query
1067
+ schema:
1068
+ type: string
1069
+ enum: [agent, human, system, service]
1070
+ - name: viewer_actor_id
1071
+ in: query
1072
+ schema:
1073
+ type: string
1074
+ - name: viewer_system_id
1075
+ in: query
1076
+ schema:
1077
+ type: string
1078
+ - name: viewer_display_name
1079
+ in: query
1080
+ schema:
1081
+ type: string
1082
+ - $ref: '#/components/parameters/ScopeTenant'
1083
+ - $ref: '#/components/parameters/ScopeSystem'
1084
+ - $ref: '#/components/parameters/ScopeWorkspace'
1085
+ - $ref: '#/components/parameters/ScopeCollaboration'
1086
+ - $ref: '#/components/parameters/ScopeId'
1087
+ responses:
1088
+ '200':
1089
+ description: Temporal state snapshot
1090
+ content:
1091
+ application/json:
1092
+ schema:
1093
+ $ref: '#/components/schemas/TemporalStateResponse'
1094
+ /v1/timeline:
1095
+ get:
1096
+ tags: [retrieval]
1097
+ summary: List memory events in chronological order
1098
+ parameters:
1099
+ - name: session_id
1100
+ in: query
1101
+ schema: { type: string }
1102
+ - name: entity_kind
1103
+ in: query
1104
+ schema: { type: string }
1105
+ - name: entity_id
1106
+ in: query
1107
+ schema: { type: string }
1108
+ - name: start_at
1109
+ in: query
1110
+ schema: { type: integer }
1111
+ - name: end_at
1112
+ in: query
1113
+ schema: { type: integer }
1114
+ - name: limit
1115
+ in: query
1116
+ schema: { type: integer }
1117
+ - name: cursor
1118
+ in: query
1119
+ schema: { type: string }
1120
+ - $ref: '#/components/parameters/ScopeTenant'
1121
+ - $ref: '#/components/parameters/ScopeSystem'
1122
+ - $ref: '#/components/parameters/ScopeWorkspace'
1123
+ - $ref: '#/components/parameters/ScopeCollaboration'
1124
+ - $ref: '#/components/parameters/ScopeId'
1125
+ responses:
1126
+ '200':
1127
+ description: Timeline page
1128
+ content:
1129
+ application/json:
1130
+ schema:
1131
+ $ref: '#/components/schemas/TemporalEventLogResponse'
1132
+ /v1/state/diff:
1133
+ get:
1134
+ tags: [retrieval]
1135
+ summary: Diff memory state between two timestamps
1136
+ parameters:
1137
+ - name: from
1138
+ in: query
1139
+ required: true
1140
+ schema: { type: integer }
1141
+ - name: to
1142
+ in: query
1143
+ required: true
1144
+ schema: { type: integer }
1145
+ - name: session_id
1146
+ in: query
1147
+ schema: { type: string }
1148
+ - name: entity_kind
1149
+ in: query
1150
+ schema: { type: string }
1151
+ - name: entity_id
1152
+ in: query
1153
+ schema: { type: string }
1154
+ - name: max_events
1155
+ in: query
1156
+ description: Optional transport cap for accumulated events. Defaults to 5000 and must not exceed 20000.
1157
+ schema:
1158
+ type: integer
1159
+ minimum: 1
1160
+ maximum: 20000
1161
+ - $ref: '#/components/parameters/ScopeTenant'
1162
+ - $ref: '#/components/parameters/ScopeSystem'
1163
+ - $ref: '#/components/parameters/ScopeWorkspace'
1164
+ - $ref: '#/components/parameters/ScopeCollaboration'
1165
+ - $ref: '#/components/parameters/ScopeId'
1166
+ responses:
1167
+ '200':
1168
+ description: Temporal diff
1169
+ content:
1170
+ application/json:
1171
+ schema:
1172
+ $ref: '#/components/schemas/TemporalStateDiffResponse'
1173
+ /v1/events/log:
1174
+ get:
1175
+ tags: [retrieval]
1176
+ summary: List memory events in reverse chronological order
1177
+ parameters:
1178
+ - name: session_id
1179
+ in: query
1180
+ schema: { type: string }
1181
+ - name: entity_kind
1182
+ in: query
1183
+ schema: { type: string }
1184
+ - name: entity_id
1185
+ in: query
1186
+ schema: { type: string }
1187
+ - name: start_at
1188
+ in: query
1189
+ schema: { type: integer }
1190
+ - name: end_at
1191
+ in: query
1192
+ schema: { type: integer }
1193
+ - name: limit
1194
+ in: query
1195
+ schema: { type: integer }
1196
+ - name: cursor
1197
+ in: query
1198
+ schema: { type: string }
1199
+ - $ref: '#/components/parameters/ScopeTenant'
1200
+ - $ref: '#/components/parameters/ScopeSystem'
1201
+ - $ref: '#/components/parameters/ScopeWorkspace'
1202
+ - $ref: '#/components/parameters/ScopeCollaboration'
1203
+ - $ref: '#/components/parameters/ScopeId'
1204
+ responses:
1205
+ '200':
1206
+ description: Event log page
1207
+ content:
1208
+ application/json:
1209
+ schema:
1210
+ $ref: '#/components/schemas/TemporalEventLogResponse'
1211
+ /v1/search:
1212
+ get:
1213
+ tags: [retrieval]
1214
+ summary: Search turns and knowledge
1215
+ parameters:
1216
+ - name: q
1217
+ in: query
1218
+ required: true
1219
+ schema:
1220
+ type: string
1221
+ - name: limit
1222
+ in: query
1223
+ schema:
1224
+ type: integer
1225
+ - $ref: '#/components/parameters/ScopeTenant'
1226
+ - $ref: '#/components/parameters/ScopeSystem'
1227
+ - $ref: '#/components/parameters/ScopeWorkspace'
1228
+ - $ref: '#/components/parameters/ScopeCollaboration'
1229
+ - $ref: '#/components/parameters/ScopeId'
1230
+ responses:
1231
+ '200':
1232
+ description: Search results
1233
+ content:
1234
+ application/json:
1235
+ schema:
1236
+ $ref: '#/components/schemas/SearchResponse'
1237
+ '400':
1238
+ description: Missing search query
1239
+ content:
1240
+ application/json:
1241
+ schema:
1242
+ $ref: '#/components/schemas/Error'
1243
+ /v1/search/cross-scope:
1244
+ get:
1245
+ tags: [retrieval]
1246
+ summary: Search knowledge across inherited or shared scopes
1247
+ parameters:
1248
+ - name: q
1249
+ in: query
1250
+ required: true
1251
+ schema:
1252
+ type: string
1253
+ - name: limit
1254
+ in: query
1255
+ schema:
1256
+ type: integer
1257
+ - $ref: '#/components/parameters/ScopeLevel'
1258
+ - $ref: '#/components/parameters/ScopeTenant'
1259
+ - $ref: '#/components/parameters/ScopeSystem'
1260
+ - $ref: '#/components/parameters/ScopeWorkspace'
1261
+ - $ref: '#/components/parameters/ScopeCollaboration'
1262
+ - $ref: '#/components/parameters/ScopeId'
1263
+ responses:
1264
+ '200':
1265
+ description: Cross-scope search results
1266
+ content:
1267
+ application/json:
1268
+ schema:
1269
+ $ref: '#/components/schemas/SearchResponse'
1270
+ '400':
1271
+ description: Missing search query
1272
+ content:
1273
+ application/json:
1274
+ schema:
1275
+ $ref: '#/components/schemas/Error'
1276
+ /v1/episodes:
1277
+ get:
1278
+ tags: [episodic]
1279
+ summary: Search episodic memory across sessions
1280
+ parameters:
1281
+ - name: q
1282
+ in: query
1283
+ required: true
1284
+ schema:
1285
+ type: string
1286
+ description: Search query
1287
+ - name: detail
1288
+ in: query
1289
+ schema:
1290
+ type: string
1291
+ enum: [abstract, overview, full]
1292
+ description: Detail level for episode summaries
1293
+ - name: limit
1294
+ in: query
1295
+ schema:
1296
+ type: integer
1297
+ description: Maximum number of episodes to return
1298
+ - name: start_at
1299
+ in: query
1300
+ schema:
1301
+ type: integer
1302
+ description: Unix timestamp lower bound for time range filter
1303
+ - name: end_at
1304
+ in: query
1305
+ schema:
1306
+ type: integer
1307
+ description: Unix timestamp upper bound for time range filter
1308
+ - $ref: '#/components/parameters/ScopeTenant'
1309
+ - $ref: '#/components/parameters/ScopeSystem'
1310
+ - $ref: '#/components/parameters/ScopeWorkspace'
1311
+ - $ref: '#/components/parameters/ScopeCollaboration'
1312
+ - $ref: '#/components/parameters/ScopeId'
1313
+ responses:
1314
+ '200':
1315
+ description: Episode search results
1316
+ content:
1317
+ application/json:
1318
+ schema:
1319
+ type: object
1320
+ required: [episodes]
1321
+ properties:
1322
+ episodes:
1323
+ type: array
1324
+ items:
1325
+ $ref: '#/components/schemas/EpisodeSummary'
1326
+ '400':
1327
+ description: Missing search query
1328
+ content:
1329
+ application/json:
1330
+ schema:
1331
+ $ref: '#/components/schemas/Error'
1332
+ /v1/episodes/summarize:
1333
+ post:
1334
+ tags: [episodic]
1335
+ summary: Summarize a specific session episode
1336
+ requestBody:
1337
+ required: true
1338
+ content:
1339
+ application/json:
1340
+ schema:
1341
+ type: object
1342
+ required: [session_id]
1343
+ properties:
1344
+ session_id:
1345
+ type: string
1346
+ description: Session ID to summarize
1347
+ detailLevel:
1348
+ type: string
1349
+ enum: [abstract, overview, full]
1350
+ description: Detail level for the summary
1351
+ scope:
1352
+ $ref: '#/components/schemas/Scope'
1353
+ responses:
1354
+ '200':
1355
+ description: Episode summary
1356
+ content:
1357
+ application/json:
1358
+ schema:
1359
+ type: object
1360
+ required: [episode]
1361
+ properties:
1362
+ episode:
1363
+ $ref: '#/components/schemas/EpisodeSummary'
1364
+ /v1/reflect:
1365
+ post:
1366
+ tags: [episodic]
1367
+ summary: Synthesize information across episodic and declarative memory
1368
+ requestBody:
1369
+ required: true
1370
+ content:
1371
+ application/json:
1372
+ schema:
1373
+ type: object
1374
+ required: [query]
1375
+ properties:
1376
+ query:
1377
+ type: string
1378
+ description: Reflection query
1379
+ detailLevel:
1380
+ type: string
1381
+ enum: [abstract, overview, full]
1382
+ includeDeclarative:
1383
+ type: boolean
1384
+ description: Include declarative knowledge in synthesis
1385
+ includeEpisodic:
1386
+ type: boolean
1387
+ description: Include episodic memory in synthesis
1388
+ limit:
1389
+ type: integer
1390
+ description: Maximum number of sources to include
1391
+ timeRange:
1392
+ type: object
1393
+ properties:
1394
+ start_at:
1395
+ type: integer
1396
+ description: Unix timestamp lower bound
1397
+ end_at:
1398
+ type: integer
1399
+ description: Unix timestamp upper bound
1400
+ scope:
1401
+ $ref: '#/components/schemas/Scope'
1402
+ responses:
1403
+ '200':
1404
+ description: Reflection result
1405
+ content:
1406
+ application/json:
1407
+ schema:
1408
+ $ref: '#/components/schemas/ReflectResult'
1409
+ /v1/memory:
1410
+ get:
1411
+ tags: [cognitive]
1412
+ summary: Search memory using the cognitive taxonomy
1413
+ parameters:
1414
+ - name: q
1415
+ in: query
1416
+ required: true
1417
+ schema:
1418
+ type: string
1419
+ description: Search query
1420
+ - name: types
1421
+ in: query
1422
+ schema:
1423
+ type: string
1424
+ description: Comma-separated cognitive types (episodic, semantic, procedural, working)
1425
+ - name: limit
1426
+ in: query
1427
+ schema:
1428
+ type: integer
1429
+ description: Maximum number of results
1430
+ - name: minimumTrustScore
1431
+ in: query
1432
+ schema:
1433
+ type: number
1434
+ description: Minimum trust score filter
1435
+ - name: activeOnly
1436
+ in: query
1437
+ schema:
1438
+ type: boolean
1439
+ description: Only return active memories (default true)
1440
+ - $ref: '#/components/parameters/ScopeTenant'
1441
+ - $ref: '#/components/parameters/ScopeSystem'
1442
+ - $ref: '#/components/parameters/ScopeWorkspace'
1443
+ - $ref: '#/components/parameters/ScopeCollaboration'
1444
+ - $ref: '#/components/parameters/ScopeId'
1445
+ responses:
1446
+ '200':
1447
+ description: Cognitive search results
1448
+ content:
1449
+ application/json:
1450
+ schema:
1451
+ $ref: '#/components/schemas/CognitiveSearchResult'
1452
+ '400':
1453
+ description: Missing search query
1454
+ content:
1455
+ application/json:
1456
+ schema:
1457
+ $ref: '#/components/schemas/Error'
1458
+ /v1/profile:
1459
+ get:
1460
+ tags: [profiles]
1461
+ summary: Get a materialized profile view for the current scope
1462
+ parameters:
1463
+ - name: view
1464
+ in: query
1465
+ schema:
1466
+ type: string
1467
+ enum: [user, operator, workspace]
1468
+ description: Profile view type (default user)
1469
+ - name: min_trust
1470
+ in: query
1471
+ schema:
1472
+ type: number
1473
+ description: Minimum trust score filter
1474
+ - name: includeProvisional
1475
+ in: query
1476
+ schema:
1477
+ type: boolean
1478
+ description: Include provisional knowledge entries (default false — profiles surface trusted knowledge by default)
1479
+ - name: includeDisputed
1480
+ in: query
1481
+ schema:
1482
+ type: boolean
1483
+ description: Include disputed knowledge entries (default false)
1484
+ - name: sections
1485
+ in: query
1486
+ schema:
1487
+ type: string
1488
+ description: Comma-separated profile sections to include
1489
+ - $ref: '#/components/parameters/ScopeTenant'
1490
+ - $ref: '#/components/parameters/ScopeSystem'
1491
+ - $ref: '#/components/parameters/ScopeWorkspace'
1492
+ - $ref: '#/components/parameters/ScopeCollaboration'
1493
+ - $ref: '#/components/parameters/ScopeId'
1494
+ responses:
1495
+ '200':
1496
+ description: Materialized profile
1497
+ content:
1498
+ application/json:
1499
+ schema:
1500
+ type: object
1501
+ required: [profile]
1502
+ properties:
1503
+ profile:
1504
+ $ref: '#/components/schemas/Profile'
1505
+ /v1/playbooks:
1506
+ get:
1507
+ tags: [playbooks]
1508
+ summary: List or search playbooks
1509
+ description: Without q param, lists active playbooks. With q param, searches by query.
1510
+ parameters:
1511
+ - name: q
1512
+ in: query
1513
+ schema:
1514
+ type: string
1515
+ description: Search query (optional — omit to list all active playbooks)
1516
+ - name: limit
1517
+ in: query
1518
+ schema:
1519
+ type: integer
1520
+ description: Maximum results (for search)
1521
+ - $ref: '#/components/parameters/ScopeTenant'
1522
+ - $ref: '#/components/parameters/ScopeSystem'
1523
+ - $ref: '#/components/parameters/ScopeWorkspace'
1524
+ - $ref: '#/components/parameters/ScopeCollaboration'
1525
+ - $ref: '#/components/parameters/ScopeId'
1526
+ responses:
1527
+ '200':
1528
+ description: Playbooks (with optional rank field when searching)
1529
+ content:
1530
+ application/json:
1531
+ schema:
1532
+ type: object
1533
+ required: [playbooks]
1534
+ properties:
1535
+ playbooks:
1536
+ type: array
1537
+ items:
1538
+ $ref: '#/components/schemas/Playbook'
1539
+ post:
1540
+ tags: [playbooks]
1541
+ summary: Create a new playbook
1542
+ requestBody:
1543
+ required: true
1544
+ content:
1545
+ application/json:
1546
+ schema:
1547
+ $ref: '#/components/schemas/NewPlaybookRequest'
1548
+ responses:
1549
+ '201':
1550
+ description: Playbook created
1551
+ content:
1552
+ application/json:
1553
+ schema:
1554
+ type: object
1555
+ required: [playbook]
1556
+ properties:
1557
+ playbook:
1558
+ $ref: '#/components/schemas/Playbook'
1559
+ /v1/playbooks/from-task:
1560
+ post:
1561
+ tags: [playbooks]
1562
+ summary: Create a playbook from a completed task
1563
+ requestBody:
1564
+ required: true
1565
+ content:
1566
+ application/json:
1567
+ schema:
1568
+ type: object
1569
+ required: [title, description, sessionId]
1570
+ properties:
1571
+ title:
1572
+ type: string
1573
+ description: Playbook title
1574
+ description:
1575
+ type: string
1576
+ description: Playbook description
1577
+ sessionId:
1578
+ type: string
1579
+ description: Session ID containing the task to extract
1580
+ tags:
1581
+ type: array
1582
+ items:
1583
+ type: string
1584
+ sourceWorkingMemoryId:
1585
+ type: integer
1586
+ description: Optional working memory ID that triggered extraction
1587
+ scope:
1588
+ $ref: '#/components/schemas/Scope'
1589
+ responses:
1590
+ '201':
1591
+ description: Playbook created from task
1592
+ content:
1593
+ application/json:
1594
+ schema:
1595
+ type: object
1596
+ required: [playbook]
1597
+ properties:
1598
+ playbook:
1599
+ $ref: '#/components/schemas/Playbook'
1600
+ /v1/playbooks/{playbookId}:
1601
+ get:
1602
+ tags: [playbooks]
1603
+ summary: Get a playbook by ID
1604
+ parameters:
1605
+ - name: playbookId
1606
+ in: path
1607
+ required: true
1608
+ schema:
1609
+ type: integer
1610
+ - $ref: '#/components/parameters/ScopeTenant'
1611
+ - $ref: '#/components/parameters/ScopeSystem'
1612
+ - $ref: '#/components/parameters/ScopeWorkspace'
1613
+ - $ref: '#/components/parameters/ScopeCollaboration'
1614
+ - $ref: '#/components/parameters/ScopeId'
1615
+ responses:
1616
+ '200':
1617
+ description: Playbook details
1618
+ content:
1619
+ application/json:
1620
+ schema:
1621
+ type: object
1622
+ required: [playbook]
1623
+ properties:
1624
+ playbook:
1625
+ $ref: '#/components/schemas/Playbook'
1626
+ '404':
1627
+ description: Playbook not found
1628
+ content:
1629
+ application/json:
1630
+ schema:
1631
+ $ref: '#/components/schemas/Error'
1632
+ put:
1633
+ tags: [playbooks]
1634
+ summary: Update a playbook
1635
+ parameters:
1636
+ - name: playbookId
1637
+ in: path
1638
+ required: true
1639
+ schema:
1640
+ type: integer
1641
+ requestBody:
1642
+ required: true
1643
+ content:
1644
+ application/json:
1645
+ schema:
1646
+ type: object
1647
+ properties:
1648
+ title:
1649
+ type: string
1650
+ description:
1651
+ type: string
1652
+ instructions:
1653
+ type: string
1654
+ references:
1655
+ type: array
1656
+ items:
1657
+ type: string
1658
+ templates:
1659
+ type: array
1660
+ items:
1661
+ type: string
1662
+ scripts:
1663
+ type: array
1664
+ items:
1665
+ type: string
1666
+ assets:
1667
+ type: array
1668
+ items:
1669
+ type: string
1670
+ tags:
1671
+ type: array
1672
+ items:
1673
+ type: string
1674
+ status:
1675
+ type: string
1676
+ enum: [draft, active, deprecated, archived]
1677
+ scope:
1678
+ $ref: '#/components/schemas/Scope'
1679
+ responses:
1680
+ '200':
1681
+ description: Updated playbook
1682
+ content:
1683
+ application/json:
1684
+ schema:
1685
+ type: object
1686
+ required: [playbook]
1687
+ properties:
1688
+ playbook:
1689
+ $ref: '#/components/schemas/Playbook'
1690
+ '404':
1691
+ description: Playbook not found
1692
+ content:
1693
+ application/json:
1694
+ schema:
1695
+ $ref: '#/components/schemas/Error'
1696
+ /v1/playbooks/{playbookId}/revise:
1697
+ post:
1698
+ tags: [playbooks]
1699
+ summary: Revise a playbook's instructions
1700
+ parameters:
1701
+ - name: playbookId
1702
+ in: path
1703
+ required: true
1704
+ schema:
1705
+ type: integer
1706
+ requestBody:
1707
+ required: true
1708
+ content:
1709
+ application/json:
1710
+ schema:
1711
+ type: object
1712
+ required: [instructions, revisionReason]
1713
+ properties:
1714
+ instructions:
1715
+ type: string
1716
+ description: New instructions
1717
+ revisionReason:
1718
+ type: string
1719
+ description: Reason for the revision
1720
+ sourceSessionId:
1721
+ type: string
1722
+ description: Optional session ID that triggered the revision
1723
+ scope:
1724
+ $ref: '#/components/schemas/Scope'
1725
+ responses:
1726
+ '200':
1727
+ description: Revised playbook with revision record
1728
+ content:
1729
+ application/json:
1730
+ schema:
1731
+ type: object
1732
+ required: [playbook, revision]
1733
+ properties:
1734
+ playbook:
1735
+ $ref: '#/components/schemas/Playbook'
1736
+ revision:
1737
+ $ref: '#/components/schemas/PlaybookRevision'
1738
+ /v1/playbooks/{playbookId}/use:
1739
+ post:
1740
+ tags: [playbooks]
1741
+ summary: Record a playbook usage
1742
+ parameters:
1743
+ - name: playbookId
1744
+ in: path
1745
+ required: true
1746
+ schema:
1747
+ type: integer
1748
+ responses:
1749
+ '200':
1750
+ description: Usage recorded
1751
+ content:
1752
+ application/json:
1753
+ schema:
1754
+ type: object
1755
+ required: [recorded, playbook]
1756
+ properties:
1757
+ recorded:
1758
+ type: boolean
1759
+ playbook:
1760
+ $ref: '#/components/schemas/Playbook'
1761
+ '404':
1762
+ description: Playbook not found
1763
+ content:
1764
+ application/json:
1765
+ schema:
1766
+ $ref: '#/components/schemas/Error'
1767
+ /v1/associations:
1768
+ post:
1769
+ tags: [associations]
1770
+ summary: Create an association between two memory artifacts
1771
+ requestBody:
1772
+ required: true
1773
+ content:
1774
+ application/json:
1775
+ schema:
1776
+ type: object
1777
+ required: [source_kind, source_id, target_kind, target_id, association_type]
1778
+ properties:
1779
+ source_kind:
1780
+ type: string
1781
+ enum: [knowledge, playbook, working_memory, work_item]
1782
+ source_id:
1783
+ type: integer
1784
+ target_kind:
1785
+ type: string
1786
+ enum: [knowledge, playbook, working_memory, work_item]
1787
+ target_id:
1788
+ type: integer
1789
+ association_type:
1790
+ type: string
1791
+ enum: [related_to, supports, contradicts, supersedes, depends_on, solves, applies_to, derived_from]
1792
+ confidence:
1793
+ type: number
1794
+ auto_generated:
1795
+ type: boolean
1796
+ responses:
1797
+ '201':
1798
+ description: Association created
1799
+ content:
1800
+ application/json:
1801
+ schema:
1802
+ type: object
1803
+ required: [association]
1804
+ properties:
1805
+ association:
1806
+ $ref: '#/components/schemas/Association'
1807
+ /v1/associations/{kind}/{id}:
1808
+ get:
1809
+ tags: [associations]
1810
+ summary: Get associations for a memory artifact
1811
+ parameters:
1812
+ - name: kind
1813
+ in: path
1814
+ required: true
1815
+ schema:
1816
+ type: string
1817
+ enum: [knowledge, playbook, working_memory, work_item]
1818
+ - name: id
1819
+ in: path
1820
+ required: true
1821
+ schema:
1822
+ type: integer
1823
+ responses:
1824
+ '200':
1825
+ description: Associations from and to the artifact
1826
+ content:
1827
+ application/json:
1828
+ schema:
1829
+ type: object
1830
+ properties:
1831
+ from:
1832
+ type: array
1833
+ items:
1834
+ $ref: '#/components/schemas/Association'
1835
+ to:
1836
+ type: array
1837
+ items:
1838
+ $ref: '#/components/schemas/Association'
1839
+ /v1/associations/traverse:
1840
+ post:
1841
+ tags: [associations]
1842
+ summary: Traverse association graph with bounded BFS
1843
+ requestBody:
1844
+ required: true
1845
+ content:
1846
+ application/json:
1847
+ schema:
1848
+ type: object
1849
+ required: [kind, id]
1850
+ properties:
1851
+ kind:
1852
+ type: string
1853
+ enum: [knowledge, playbook, working_memory, work_item]
1854
+ id:
1855
+ type: integer
1856
+ maxDepth:
1857
+ type: integer
1858
+ default: 2
1859
+ maxNodes:
1860
+ type: integer
1861
+ default: 20
1862
+ responses:
1863
+ '200':
1864
+ description: Association graph
1865
+ content:
1866
+ application/json:
1867
+ schema:
1868
+ type: object
1869
+ required: [nodes, edges]
1870
+ properties:
1871
+ nodes:
1872
+ type: array
1873
+ items:
1874
+ type: object
1875
+ required: [kind, id]
1876
+ properties:
1877
+ kind:
1878
+ type: string
1879
+ id:
1880
+ type: integer
1881
+ edges:
1882
+ type: array
1883
+ items:
1884
+ $ref: '#/components/schemas/Association'
1885
+ /v1/associations/{id}:
1886
+ delete:
1887
+ tags: [associations]
1888
+ summary: Delete an association
1889
+ parameters:
1890
+ - name: id
1891
+ in: path
1892
+ required: true
1893
+ schema:
1894
+ type: integer
1895
+ responses:
1896
+ '200':
1897
+ description: Association deleted
1898
+ content:
1899
+ application/json:
1900
+ schema:
1901
+ type: object
1902
+ required: [deleted]
315
1903
  properties:
316
- userTurnId:
1904
+ deleted:
1905
+ type: boolean
1906
+ /v1/facts:
1907
+ post:
1908
+ tags: [ingestion]
1909
+ summary: Insert durable knowledge directly
1910
+ requestBody:
1911
+ required: true
1912
+ content:
1913
+ application/json:
1914
+ schema:
1915
+ $ref: '#/components/schemas/FactRequest'
1916
+ responses:
1917
+ '201':
1918
+ description: Fact stored
1919
+ content:
1920
+ application/json:
1921
+ schema:
1922
+ type: object
1923
+ properties:
1924
+ knowledgeId:
317
1925
  type: integer
318
- assistantTurnId:
1926
+ /v1/work:
1927
+ post:
1928
+ tags: [ingestion]
1929
+ summary: Track an objective or unresolved work item
1930
+ requestBody:
1931
+ required: true
1932
+ content:
1933
+ application/json:
1934
+ schema:
1935
+ $ref: '#/components/schemas/WorkRequest'
1936
+ responses:
1937
+ '201':
1938
+ description: Work item stored
1939
+ content:
1940
+ application/json:
1941
+ schema:
1942
+ type: object
1943
+ properties:
1944
+ workItemId:
319
1945
  type: integer
320
- compacted:
321
- type: boolean
322
- /v1/context:
323
- get:
324
- tags: [retrieval]
325
- summary: Assemble prompt-ready context
1946
+ /v1/work-items/{id}:
1947
+ post:
1948
+ tags: [ingestion]
1949
+ summary: Update a work item
326
1950
  parameters:
327
- - $ref: '#/components/parameters/Query'
328
- - $ref: '#/components/parameters/ScopeTenant'
329
- - $ref: '#/components/parameters/ScopeSystem'
330
- - $ref: '#/components/parameters/ScopeWorkspace'
331
- - $ref: '#/components/parameters/ScopeCollaboration'
332
- - $ref: '#/components/parameters/ScopeId'
1951
+ - name: id
1952
+ in: path
1953
+ required: true
1954
+ schema:
1955
+ type: integer
1956
+ requestBody:
1957
+ required: true
1958
+ content:
1959
+ application/json:
1960
+ schema:
1961
+ type: object
1962
+ properties:
1963
+ title: { type: string }
1964
+ detail: { type: string, nullable: true }
1965
+ status:
1966
+ type: string
1967
+ enum: [open, in_progress, blocked, done]
1968
+ visibility_class:
1969
+ type: string
1970
+ enum: [private, shared_collaboration, workspace, tenant]
1971
+ expectedVersion:
1972
+ type: integer
333
1973
  responses:
334
1974
  '200':
335
- description: Assembled context
1975
+ description: Updated work item
336
1976
  content:
337
1977
  application/json:
338
1978
  schema:
339
- $ref: '#/components/schemas/ContextResponse'
340
- /v1/search:
341
- get:
342
- tags: [retrieval]
343
- summary: Search turns and knowledge
1979
+ type: object
1980
+ properties:
1981
+ workItem:
1982
+ type: object
1983
+ /v1/work-items/{id}/claim:
1984
+ post:
1985
+ tags: [ingestion]
1986
+ summary: Claim a work item for an actor
344
1987
  parameters:
345
- - name: q
346
- in: query
1988
+ - name: id
1989
+ in: path
347
1990
  required: true
348
- schema:
349
- type: string
350
- - name: limit
351
- in: query
352
1991
  schema:
353
1992
  type: integer
1993
+ requestBody:
1994
+ required: true
1995
+ content:
1996
+ application/json:
1997
+ schema:
1998
+ type: object
1999
+ required: [actor]
2000
+ properties:
2001
+ actor:
2002
+ $ref: '#/components/schemas/ActorRef'
2003
+ lease_seconds:
2004
+ type: integer
2005
+ responses:
2006
+ '200':
2007
+ description: Claim result
2008
+ content:
2009
+ application/json:
2010
+ schema:
2011
+ type: object
2012
+ properties:
2013
+ claim:
2014
+ $ref: '#/components/schemas/WorkClaim'
2015
+ /v1/work-claims:
2016
+ get:
2017
+ tags: [retrieval]
2018
+ summary: List current work claims
2019
+ parameters:
354
2020
  - $ref: '#/components/parameters/ScopeTenant'
355
2021
  - $ref: '#/components/parameters/ScopeSystem'
356
2022
  - $ref: '#/components/parameters/ScopeWorkspace'
@@ -358,32 +2024,118 @@ paths:
358
2024
  - $ref: '#/components/parameters/ScopeId'
359
2025
  responses:
360
2026
  '200':
361
- description: Search results
2027
+ description: Work claims
362
2028
  content:
363
2029
  application/json:
364
2030
  schema:
365
- $ref: '#/components/schemas/SearchResponse'
366
- '400':
367
- description: Missing search query
2031
+ type: object
2032
+ properties:
2033
+ claims:
2034
+ type: array
2035
+ items:
2036
+ $ref: '#/components/schemas/WorkClaim'
2037
+ /v1/work-claims/{id}/renew:
2038
+ post:
2039
+ tags: [ingestion]
2040
+ summary: Renew a work claim
2041
+ parameters:
2042
+ - name: id
2043
+ in: path
2044
+ required: true
2045
+ schema: { type: integer }
2046
+ requestBody:
2047
+ required: true
2048
+ content:
2049
+ application/json:
2050
+ schema:
2051
+ type: object
2052
+ required: [actor]
2053
+ properties:
2054
+ actor:
2055
+ $ref: '#/components/schemas/ActorRef'
2056
+ lease_seconds:
2057
+ type: integer
2058
+ responses:
2059
+ '200':
2060
+ description: Renewed claim
368
2061
  content:
369
2062
  application/json:
370
2063
  schema:
371
- $ref: '#/components/schemas/Error'
372
- /v1/search/cross-scope:
2064
+ type: object
2065
+ properties:
2066
+ claim:
2067
+ $ref: '#/components/schemas/WorkClaim'
2068
+ /v1/work-claims/{id}/release:
2069
+ post:
2070
+ tags: [ingestion]
2071
+ summary: Release a work claim
2072
+ parameters:
2073
+ - name: id
2074
+ in: path
2075
+ required: true
2076
+ schema: { type: integer }
2077
+ requestBody:
2078
+ required: true
2079
+ content:
2080
+ application/json:
2081
+ schema:
2082
+ type: object
2083
+ required: [actor]
2084
+ properties:
2085
+ actor:
2086
+ $ref: '#/components/schemas/ActorRef'
2087
+ reason:
2088
+ type: string
2089
+ responses:
2090
+ '200':
2091
+ description: Released claim
2092
+ content:
2093
+ application/json:
2094
+ schema:
2095
+ type: object
2096
+ properties:
2097
+ claim:
2098
+ $ref: '#/components/schemas/WorkClaim'
2099
+ /v1/work-items/{id}/handoffs:
2100
+ post:
2101
+ tags: [ingestion]
2102
+ summary: Create a work-item handoff
2103
+ parameters:
2104
+ - name: id
2105
+ in: path
2106
+ required: true
2107
+ schema: { type: integer }
2108
+ requestBody:
2109
+ required: true
2110
+ content:
2111
+ application/json:
2112
+ schema:
2113
+ type: object
2114
+ required: [from_actor, to_actor, summary]
2115
+ properties:
2116
+ from_actor:
2117
+ $ref: '#/components/schemas/ActorRef'
2118
+ to_actor:
2119
+ $ref: '#/components/schemas/ActorRef'
2120
+ summary:
2121
+ type: string
2122
+ context_bundle_ref:
2123
+ type: string
2124
+ responses:
2125
+ '201':
2126
+ description: Created handoff
2127
+ content:
2128
+ application/json:
2129
+ schema:
2130
+ type: object
2131
+ properties:
2132
+ handoff:
2133
+ $ref: '#/components/schemas/HandoffRecord'
2134
+ /v1/handoffs:
373
2135
  get:
374
2136
  tags: [retrieval]
375
- summary: Search knowledge across inherited or shared scopes
2137
+ summary: List pending handoffs
376
2138
  parameters:
377
- - name: q
378
- in: query
379
- required: true
380
- schema:
381
- type: string
382
- - name: limit
383
- in: query
384
- schema:
385
- type: integer
386
- - $ref: '#/components/parameters/ScopeLevel'
387
2139
  - $ref: '#/components/parameters/ScopeTenant'
388
2140
  - $ref: '#/components/parameters/ScopeSystem'
389
2141
  - $ref: '#/components/parameters/ScopeWorkspace'
@@ -391,57 +2143,134 @@ paths:
391
2143
  - $ref: '#/components/parameters/ScopeId'
392
2144
  responses:
393
2145
  '200':
394
- description: Cross-scope search results
2146
+ description: Pending handoffs
395
2147
  content:
396
2148
  application/json:
397
2149
  schema:
398
- $ref: '#/components/schemas/SearchResponse'
399
- '400':
400
- description: Missing search query
2150
+ type: object
2151
+ properties:
2152
+ handoffs:
2153
+ type: array
2154
+ items:
2155
+ $ref: '#/components/schemas/HandoffRecord'
2156
+ /v1/handoffs/{id}/accept:
2157
+ post:
2158
+ tags: [ingestion]
2159
+ summary: Accept a handoff
2160
+ parameters:
2161
+ - name: id
2162
+ in: path
2163
+ required: true
2164
+ schema: { type: integer }
2165
+ requestBody:
2166
+ required: true
2167
+ content:
2168
+ application/json:
2169
+ schema:
2170
+ type: object
2171
+ required: [actor]
2172
+ properties:
2173
+ actor:
2174
+ $ref: '#/components/schemas/ActorRef'
2175
+ reason:
2176
+ type: string
2177
+ responses:
2178
+ '200':
2179
+ description: Accepted handoff
401
2180
  content:
402
2181
  application/json:
403
2182
  schema:
404
- $ref: '#/components/schemas/Error'
405
- /v1/facts:
2183
+ type: object
2184
+ properties:
2185
+ handoff:
2186
+ $ref: '#/components/schemas/HandoffRecord'
2187
+ /v1/handoffs/{id}/reject:
406
2188
  post:
407
2189
  tags: [ingestion]
408
- summary: Insert durable knowledge directly
2190
+ summary: Reject a handoff
2191
+ parameters:
2192
+ - name: id
2193
+ in: path
2194
+ required: true
2195
+ schema: { type: integer }
409
2196
  requestBody:
410
2197
  required: true
411
2198
  content:
412
2199
  application/json:
413
2200
  schema:
414
- $ref: '#/components/schemas/FactRequest'
2201
+ type: object
2202
+ required: [actor]
2203
+ properties:
2204
+ actor:
2205
+ $ref: '#/components/schemas/ActorRef'
2206
+ reason:
2207
+ type: string
415
2208
  responses:
416
- '201':
417
- description: Fact stored
2209
+ '200':
2210
+ description: Rejected handoff
418
2211
  content:
419
2212
  application/json:
420
2213
  schema:
421
2214
  type: object
422
2215
  properties:
423
- knowledgeId:
424
- type: integer
425
- /v1/work:
2216
+ handoff:
2217
+ $ref: '#/components/schemas/HandoffRecord'
2218
+ /v1/handoffs/{id}/cancel:
426
2219
  post:
427
2220
  tags: [ingestion]
428
- summary: Track an objective or unresolved work item
2221
+ summary: Cancel a handoff
2222
+ parameters:
2223
+ - name: id
2224
+ in: path
2225
+ required: true
2226
+ schema: { type: integer }
429
2227
  requestBody:
430
2228
  required: true
431
2229
  content:
432
2230
  application/json:
433
2231
  schema:
434
- $ref: '#/components/schemas/WorkRequest'
2232
+ type: object
2233
+ required: [actor]
2234
+ properties:
2235
+ actor:
2236
+ $ref: '#/components/schemas/ActorRef'
2237
+ reason:
2238
+ type: string
435
2239
  responses:
436
- '201':
437
- description: Work item stored
2240
+ '200':
2241
+ description: Canceled handoff
438
2242
  content:
439
2243
  application/json:
440
2244
  schema:
441
2245
  type: object
442
2246
  properties:
443
- workItemId:
444
- type: integer
2247
+ handoff:
2248
+ $ref: '#/components/schemas/HandoffRecord'
2249
+ /v1/changes/stream:
2250
+ get:
2251
+ tags: [retrieval]
2252
+ summary: Stream durable memory changes as SSE
2253
+ parameters:
2254
+ - name: cursor
2255
+ in: query
2256
+ schema: { type: string }
2257
+ - name: session_id
2258
+ in: query
2259
+ schema: { type: string }
2260
+ - name: entity_kind
2261
+ in: query
2262
+ schema: { type: string }
2263
+ - name: entity_id
2264
+ in: query
2265
+ schema: { type: string }
2266
+ - $ref: '#/components/parameters/ScopeTenant'
2267
+ - $ref: '#/components/parameters/ScopeSystem'
2268
+ - $ref: '#/components/parameters/ScopeWorkspace'
2269
+ - $ref: '#/components/parameters/ScopeCollaboration'
2270
+ - $ref: '#/components/parameters/ScopeId'
2271
+ responses:
2272
+ '200':
2273
+ description: SSE stream of change events
445
2274
  /v1/compact:
446
2275
  post:
447
2276
  tags: [maintenance]
@@ -494,6 +2323,10 @@ paths:
494
2323
  type: integer
495
2324
  deletedWorkItems:
496
2325
  type: integer
2326
+ deletedAssociationIds:
2327
+ type: array
2328
+ items:
2329
+ type: integer
497
2330
  /v1/health:
498
2331
  get:
499
2332
  tags: [observability]