synomem 0.1.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 (130) hide show
  1. package/AGENTS.md +42 -0
  2. package/ARCHITECTURE.md +126 -0
  3. package/CHANGELOG.md +35 -0
  4. package/CODE_OF_CONDUCT.md +29 -0
  5. package/CONTRIBUTING.md +48 -0
  6. package/LICENSE +21 -0
  7. package/README.md +247 -0
  8. package/SECURITY.md +117 -0
  9. package/dist/backend.d.ts +9 -0
  10. package/dist/backend.d.ts.map +1 -0
  11. package/dist/backend.js +60 -0
  12. package/dist/backend.js.map +1 -0
  13. package/dist/cli.d.ts +34 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +1040 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/client.d.ts +168 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +1031 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/config.d.ts +33 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +153 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/credentials.d.ts +36 -0
  26. package/dist/credentials.d.ts.map +1 -0
  27. package/dist/credentials.js +127 -0
  28. package/dist/credentials.js.map +1 -0
  29. package/dist/errors.d.ts +9 -0
  30. package/dist/errors.d.ts.map +1 -0
  31. package/dist/errors.js +60 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/fs-utils.d.ts +7 -0
  34. package/dist/fs-utils.d.ts.map +1 -0
  35. package/dist/fs-utils.js +68 -0
  36. package/dist/fs-utils.js.map +1 -0
  37. package/dist/import.d.ts +655 -0
  38. package/dist/import.d.ts.map +1 -0
  39. package/dist/import.js +226 -0
  40. package/dist/import.js.map +1 -0
  41. package/dist/index.d.ts +20 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/mcp/index.d.ts +14 -0
  46. package/dist/mcp/index.d.ts.map +1 -0
  47. package/dist/mcp/index.js +698 -0
  48. package/dist/mcp/index.js.map +1 -0
  49. package/dist/mcp-server.d.ts +3 -0
  50. package/dist/mcp-server.d.ts.map +1 -0
  51. package/dist/mcp-server.js +45 -0
  52. package/dist/mcp-server.js.map +1 -0
  53. package/dist/oauth.d.ts +27 -0
  54. package/dist/oauth.d.ts.map +1 -0
  55. package/dist/oauth.js +201 -0
  56. package/dist/oauth.js.map +1 -0
  57. package/dist/ports/projections.d.ts +6 -0
  58. package/dist/ports/projections.d.ts.map +1 -0
  59. package/dist/ports/projections.js +2 -0
  60. package/dist/ports/projections.js.map +1 -0
  61. package/dist/ports/repository.d.ts +31 -0
  62. package/dist/ports/repository.d.ts.map +1 -0
  63. package/dist/ports/repository.js +2 -0
  64. package/dist/ports/repository.js.map +1 -0
  65. package/dist/projections.d.ts +24 -0
  66. package/dist/projections.d.ts.map +1 -0
  67. package/dist/projections.js +531 -0
  68. package/dist/projections.js.map +1 -0
  69. package/dist/remote.d.ts +120 -0
  70. package/dist/remote.d.ts.map +1 -0
  71. package/dist/remote.js +286 -0
  72. package/dist/remote.js.map +1 -0
  73. package/dist/schemas.d.ts +901 -0
  74. package/dist/schemas.d.ts.map +1 -0
  75. package/dist/schemas.js +424 -0
  76. package/dist/schemas.js.map +1 -0
  77. package/dist/service.d.ts +126 -0
  78. package/dist/service.d.ts.map +1 -0
  79. package/dist/service.js +2 -0
  80. package/dist/service.js.map +1 -0
  81. package/dist/skill-install.d.ts +34 -0
  82. package/dist/skill-install.d.ts.map +1 -0
  83. package/dist/skill-install.js +256 -0
  84. package/dist/skill-install.js.map +1 -0
  85. package/dist/storage.d.ts +94 -0
  86. package/dist/storage.d.ts.map +1 -0
  87. package/dist/storage.js +1229 -0
  88. package/dist/storage.js.map +1 -0
  89. package/dist/types.d.ts +442 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +2 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/version.d.ts +3 -0
  94. package/dist/version.d.ts.map +1 -0
  95. package/dist/version.js +14 -0
  96. package/dist/version.js.map +1 -0
  97. package/docs/cli.md +180 -0
  98. package/docs/examples.md +70 -0
  99. package/docs/mcp.md +96 -0
  100. package/docs/recovery.md +45 -0
  101. package/docs/releasing.md +61 -0
  102. package/docs/skill.md +93 -0
  103. package/docs/storage-format.md +83 -0
  104. package/openapi/synomem-v1.yaml +674 -0
  105. package/package.json +100 -0
  106. package/skills/synomem/SKILL.md +71 -0
  107. package/skills/synomem/agents/openai.yaml +8 -0
  108. package/skills/synomem/references/examples.md +28 -0
  109. package/src/backend.ts +91 -0
  110. package/src/cli.ts +1623 -0
  111. package/src/client.ts +1261 -0
  112. package/src/config.ts +170 -0
  113. package/src/credentials.ts +194 -0
  114. package/src/errors.ts +64 -0
  115. package/src/fs-utils.ts +85 -0
  116. package/src/import.ts +284 -0
  117. package/src/index.ts +61 -0
  118. package/src/mcp/index.ts +973 -0
  119. package/src/mcp-server.ts +46 -0
  120. package/src/oauth.ts +252 -0
  121. package/src/ports/projections.ts +6 -0
  122. package/src/ports/repository.ts +67 -0
  123. package/src/projections.ts +624 -0
  124. package/src/remote.ts +516 -0
  125. package/src/schemas.ts +457 -0
  126. package/src/service.ts +140 -0
  127. package/src/skill-install.ts +332 -0
  128. package/src/storage.ts +1603 -0
  129. package/src/types.ts +458 -0
  130. package/src/version.ts +16 -0
@@ -0,0 +1,674 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Synomem Domain API
4
+ version: 1.0.0
5
+ description: >-
6
+ Authenticated domain operations for Synomem. The server derives workspace access and actor
7
+ authority from the bearer credential; mutation bodies never select an actor.
8
+ servers:
9
+ - url: https://api.synomem.ai
10
+ security:
11
+ - bearerAuth: []
12
+ tags:
13
+ - name: capabilities
14
+ - name: agents
15
+ - name: kudos
16
+ - name: memos
17
+ - name: notes
18
+ - name: todos
19
+ - name: items
20
+ - name: administration
21
+ paths:
22
+ /v1/capabilities:
23
+ get:
24
+ tags: [capabilities]
25
+ operationId: getCapabilities
26
+ responses:
27
+ '200': { $ref: '#/components/responses/Success' }
28
+ default: { $ref: '#/components/responses/Error' }
29
+ /v1/workspaces/{workspaceId}/agents:
30
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
31
+ get:
32
+ tags: [agents]
33
+ operationId: listAgents
34
+ responses:
35
+ '200': { $ref: '#/components/responses/Success' }
36
+ default: { $ref: '#/components/responses/Error' }
37
+ post:
38
+ tags: [agents]
39
+ operationId: createAgent
40
+ requestBody:
41
+ required: true
42
+ content:
43
+ application/json:
44
+ schema: { $ref: '#/components/schemas/CreateAgent' }
45
+ responses:
46
+ '200': { $ref: '#/components/responses/Success' }
47
+ default: { $ref: '#/components/responses/Error' }
48
+ /v1/workspaces/{workspaceId}/agents/{agentId}:
49
+ parameters:
50
+ - { $ref: '#/components/parameters/WorkspaceId' }
51
+ - { $ref: '#/components/parameters/AgentId' }
52
+ get:
53
+ tags: [agents]
54
+ operationId: getAgent
55
+ responses:
56
+ '200': { $ref: '#/components/responses/Success' }
57
+ default: { $ref: '#/components/responses/Error' }
58
+ patch:
59
+ tags: [agents]
60
+ operationId: updateAgent
61
+ requestBody:
62
+ required: true
63
+ content:
64
+ application/json:
65
+ schema: { $ref: '#/components/schemas/UpdateAgent' }
66
+ responses:
67
+ '200': { $ref: '#/components/responses/Success' }
68
+ default: { $ref: '#/components/responses/Error' }
69
+ /v1/workspaces/{workspaceId}/kudos:
70
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
71
+ get:
72
+ tags: [kudos]
73
+ operationId: listKudos
74
+ parameters:
75
+ [{ $ref: '#/components/parameters/ListLimit' }, { $ref: '#/components/parameters/Cursor' }]
76
+ responses:
77
+ '200': { $ref: '#/components/responses/Success' }
78
+ default: { $ref: '#/components/responses/Error' }
79
+ post:
80
+ tags: [kudos]
81
+ operationId: giveKudos
82
+ parameters: [{ $ref: '#/components/parameters/IdempotencyKey' }]
83
+ requestBody:
84
+ required: true
85
+ content:
86
+ application/json:
87
+ schema: { $ref: '#/components/schemas/GiveKudos' }
88
+ responses:
89
+ '200': { $ref: '#/components/responses/Success' }
90
+ default: { $ref: '#/components/responses/Error' }
91
+ /v1/workspaces/{workspaceId}/kudos/changes:
92
+ get:
93
+ tags: [kudos]
94
+ operationId: getKudosChanges
95
+ parameters:
96
+ - { $ref: '#/components/parameters/WorkspaceId' }
97
+ - { $ref: '#/components/parameters/After' }
98
+ - { $ref: '#/components/parameters/ChangeLimit' }
99
+ responses:
100
+ '200': { $ref: '#/components/responses/Success' }
101
+ default: { $ref: '#/components/responses/Error' }
102
+ /v1/workspaces/{workspaceId}/kudos/stats:
103
+ get:
104
+ tags: [kudos]
105
+ operationId: getKudosStats
106
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
107
+ responses:
108
+ '200': { $ref: '#/components/responses/Success' }
109
+ default: { $ref: '#/components/responses/Error' }
110
+ /v1/workspaces/{workspaceId}/kudos/{itemId}:
111
+ get:
112
+ tags: [kudos]
113
+ operationId: getKudos
114
+ parameters:
115
+ [
116
+ { $ref: '#/components/parameters/WorkspaceId' },
117
+ { $ref: '#/components/parameters/ItemId' },
118
+ ]
119
+ responses:
120
+ '200': { $ref: '#/components/responses/Success' }
121
+ default: { $ref: '#/components/responses/Error' }
122
+ /v1/workspaces/{workspaceId}/kudos/{itemId}/acknowledgment:
123
+ post:
124
+ tags: [kudos]
125
+ operationId: acknowledgeKudos
126
+ parameters:
127
+ [
128
+ { $ref: '#/components/parameters/WorkspaceId' },
129
+ { $ref: '#/components/parameters/ItemId' },
130
+ ]
131
+ requestBody:
132
+ content: { application/json: { schema: { $ref: '#/components/schemas/OptionalNote' } } }
133
+ responses:
134
+ '200': { $ref: '#/components/responses/Success' }
135
+ default: { $ref: '#/components/responses/Error' }
136
+ /v1/workspaces/{workspaceId}/kudos/{itemId}/revocation:
137
+ post:
138
+ tags: [kudos]
139
+ operationId: revokeKudos
140
+ parameters:
141
+ [
142
+ { $ref: '#/components/parameters/WorkspaceId' },
143
+ { $ref: '#/components/parameters/ItemId' },
144
+ ]
145
+ requestBody:
146
+ required: true
147
+ content: { application/json: { schema: { $ref: '#/components/schemas/RevokeKudos' } } }
148
+ responses:
149
+ '200': { $ref: '#/components/responses/Success' }
150
+ default: { $ref: '#/components/responses/Error' }
151
+ /v1/workspaces/{workspaceId}/memos:
152
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
153
+ get:
154
+ tags: [memos]
155
+ operationId: listMemos
156
+ parameters:
157
+ [{ $ref: '#/components/parameters/ListLimit' }, { $ref: '#/components/parameters/Cursor' }]
158
+ responses:
159
+ '200': { $ref: '#/components/responses/Success' }
160
+ default: { $ref: '#/components/responses/Error' }
161
+ post:
162
+ tags: [memos]
163
+ operationId: sendMemo
164
+ parameters: [{ $ref: '#/components/parameters/IdempotencyKey' }]
165
+ requestBody:
166
+ required: true
167
+ content: { application/json: { schema: { $ref: '#/components/schemas/SendMemo' } } }
168
+ responses:
169
+ '200': { $ref: '#/components/responses/Success' }
170
+ default: { $ref: '#/components/responses/Error' }
171
+ /v1/workspaces/{workspaceId}/memos/{itemId}:
172
+ get:
173
+ tags: [memos]
174
+ operationId: getMemo
175
+ parameters:
176
+ [
177
+ { $ref: '#/components/parameters/WorkspaceId' },
178
+ { $ref: '#/components/parameters/ItemId' },
179
+ ]
180
+ responses:
181
+ '200': { $ref: '#/components/responses/Success' }
182
+ default: { $ref: '#/components/responses/Error' }
183
+ /v1/workspaces/{workspaceId}/memos/{itemId}/read:
184
+ post:
185
+ tags: [memos]
186
+ operationId: readMemo
187
+ parameters:
188
+ - { $ref: '#/components/parameters/WorkspaceId' }
189
+ - { $ref: '#/components/parameters/ItemId' }
190
+ - { $ref: '#/components/parameters/IdempotencyKey' }
191
+ responses:
192
+ '200': { $ref: '#/components/responses/Success' }
193
+ default: { $ref: '#/components/responses/Error' }
194
+ /v1/workspaces/{workspaceId}/memos/{itemId}/archive:
195
+ post:
196
+ tags: [memos]
197
+ operationId: archiveMemo
198
+ parameters:
199
+ - { $ref: '#/components/parameters/WorkspaceId' }
200
+ - { $ref: '#/components/parameters/ItemId' }
201
+ - { $ref: '#/components/parameters/IdempotencyKey' }
202
+ responses:
203
+ '200': { $ref: '#/components/responses/Success' }
204
+ default: { $ref: '#/components/responses/Error' }
205
+ /v1/workspaces/{workspaceId}/notes:
206
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
207
+ get:
208
+ tags: [notes]
209
+ operationId: listNotes
210
+ parameters:
211
+ [{ $ref: '#/components/parameters/ListLimit' }, { $ref: '#/components/parameters/Cursor' }]
212
+ responses:
213
+ '200': { $ref: '#/components/responses/Success' }
214
+ default: { $ref: '#/components/responses/Error' }
215
+ post:
216
+ tags: [notes]
217
+ operationId: createNote
218
+ parameters: [{ $ref: '#/components/parameters/IdempotencyKey' }]
219
+ requestBody:
220
+ required: true
221
+ content: { application/json: { schema: { $ref: '#/components/schemas/CreateNote' } } }
222
+ responses:
223
+ '200': { $ref: '#/components/responses/Success' }
224
+ default: { $ref: '#/components/responses/Error' }
225
+ /v1/workspaces/{workspaceId}/notes/{itemId}:
226
+ get:
227
+ tags: [notes]
228
+ operationId: getNote
229
+ parameters:
230
+ [
231
+ { $ref: '#/components/parameters/WorkspaceId' },
232
+ { $ref: '#/components/parameters/ItemId' },
233
+ ]
234
+ responses:
235
+ '200': { $ref: '#/components/responses/Success' }
236
+ default: { $ref: '#/components/responses/Error' }
237
+ /v1/workspaces/{workspaceId}/notes/{itemId}/revisions:
238
+ post:
239
+ tags: [notes]
240
+ operationId: reviseNote
241
+ parameters:
242
+ - { $ref: '#/components/parameters/WorkspaceId' }
243
+ - { $ref: '#/components/parameters/ItemId' }
244
+ - { $ref: '#/components/parameters/IdempotencyKey' }
245
+ requestBody:
246
+ required: true
247
+ content: { application/json: { schema: { $ref: '#/components/schemas/ReviseNote' } } }
248
+ responses:
249
+ '200': { $ref: '#/components/responses/Success' }
250
+ default: { $ref: '#/components/responses/Error' }
251
+ /v1/workspaces/{workspaceId}/notes/{itemId}/archive:
252
+ post:
253
+ tags: [notes]
254
+ operationId: archiveNote
255
+ parameters:
256
+ - { $ref: '#/components/parameters/WorkspaceId' }
257
+ - { $ref: '#/components/parameters/ItemId' }
258
+ - { $ref: '#/components/parameters/IdempotencyKey' }
259
+ responses:
260
+ '200': { $ref: '#/components/responses/Success' }
261
+ default: { $ref: '#/components/responses/Error' }
262
+ /v1/workspaces/{workspaceId}/todos:
263
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
264
+ get:
265
+ tags: [todos]
266
+ operationId: listTodos
267
+ parameters:
268
+ [{ $ref: '#/components/parameters/ListLimit' }, { $ref: '#/components/parameters/Cursor' }]
269
+ responses:
270
+ '200': { $ref: '#/components/responses/Success' }
271
+ default: { $ref: '#/components/responses/Error' }
272
+ post:
273
+ tags: [todos]
274
+ operationId: createTodo
275
+ parameters: [{ $ref: '#/components/parameters/IdempotencyKey' }]
276
+ requestBody:
277
+ required: true
278
+ content: { application/json: { schema: { $ref: '#/components/schemas/CreateTodo' } } }
279
+ responses:
280
+ '200': { $ref: '#/components/responses/Success' }
281
+ default: { $ref: '#/components/responses/Error' }
282
+ /v1/workspaces/{workspaceId}/todos/{itemId}:
283
+ get:
284
+ tags: [todos]
285
+ operationId: getTodo
286
+ parameters:
287
+ [
288
+ { $ref: '#/components/parameters/WorkspaceId' },
289
+ { $ref: '#/components/parameters/ItemId' },
290
+ ]
291
+ responses:
292
+ '200': { $ref: '#/components/responses/Success' }
293
+ default: { $ref: '#/components/responses/Error' }
294
+ /v1/workspaces/{workspaceId}/todos/{itemId}/revisions:
295
+ post:
296
+ tags: [todos]
297
+ operationId: updateTodo
298
+ parameters:
299
+ - { $ref: '#/components/parameters/WorkspaceId' }
300
+ - { $ref: '#/components/parameters/ItemId' }
301
+ - { $ref: '#/components/parameters/IdempotencyKey' }
302
+ requestBody:
303
+ required: true
304
+ content: { application/json: { schema: { $ref: '#/components/schemas/UpdateTodo' } } }
305
+ responses:
306
+ '200': { $ref: '#/components/responses/Success' }
307
+ default: { $ref: '#/components/responses/Error' }
308
+ /v1/workspaces/{workspaceId}/todos/{itemId}/{transition}:
309
+ post:
310
+ tags: [todos]
311
+ operationId: transitionTodo
312
+ parameters:
313
+ - { $ref: '#/components/parameters/WorkspaceId' }
314
+ - { $ref: '#/components/parameters/ItemId' }
315
+ - name: transition
316
+ in: path
317
+ required: true
318
+ schema: { type: string, enum: [accept, reject, complete, reopen, cancel] }
319
+ - { $ref: '#/components/parameters/IdempotencyKey' }
320
+ requestBody:
321
+ content: { application/json: { schema: { $ref: '#/components/schemas/TodoTransition' } } }
322
+ responses:
323
+ '200': { $ref: '#/components/responses/Success' }
324
+ default: { $ref: '#/components/responses/Error' }
325
+ /v1/workspaces/{workspaceId}/items:
326
+ get:
327
+ tags: [items]
328
+ operationId: listItems
329
+ parameters:
330
+ - { $ref: '#/components/parameters/WorkspaceId' }
331
+ - { $ref: '#/components/parameters/ListLimit' }
332
+ - { $ref: '#/components/parameters/Cursor' }
333
+ responses:
334
+ '200': { $ref: '#/components/responses/Success' }
335
+ default: { $ref: '#/components/responses/Error' }
336
+ /v1/workspaces/{workspaceId}/items/{itemId}:
337
+ get:
338
+ tags: [items]
339
+ operationId: getItem
340
+ parameters:
341
+ [
342
+ { $ref: '#/components/parameters/WorkspaceId' },
343
+ { $ref: '#/components/parameters/ItemId' },
344
+ ]
345
+ responses:
346
+ '200': { $ref: '#/components/responses/Success' }
347
+ default: { $ref: '#/components/responses/Error' }
348
+ /v1/workspaces/{workspaceId}/changes:
349
+ get:
350
+ tags: [items]
351
+ operationId: getChanges
352
+ parameters:
353
+ - { $ref: '#/components/parameters/WorkspaceId' }
354
+ - { $ref: '#/components/parameters/After' }
355
+ - { $ref: '#/components/parameters/ChangeLimit' }
356
+ responses:
357
+ '200': { $ref: '#/components/responses/Success' }
358
+ default: { $ref: '#/components/responses/Error' }
359
+ /v1/workspaces/{workspaceId}/diagnostics:
360
+ get:
361
+ tags: [administration]
362
+ operationId: getDiagnostics
363
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
364
+ responses:
365
+ '200': { $ref: '#/components/responses/Success' }
366
+ default: { $ref: '#/components/responses/Error' }
367
+ /v1/workspaces/{workspaceId}/audit:
368
+ get:
369
+ tags: [administration]
370
+ operationId: listWorkspaceAudit
371
+ parameters:
372
+ - { $ref: '#/components/parameters/WorkspaceId' }
373
+ - name: limit
374
+ in: query
375
+ schema: { type: integer, minimum: 1, maximum: 200, default: 50 }
376
+ responses:
377
+ '200': { $ref: '#/components/responses/Success' }
378
+ default: { $ref: '#/components/responses/Error' }
379
+ /v1/workspaces/{workspaceId}/imports/preview:
380
+ post:
381
+ tags: [administration]
382
+ operationId: previewWorkspaceImport
383
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
384
+ requestBody:
385
+ required: true
386
+ content:
387
+ application/json:
388
+ schema: { $ref: '#/components/schemas/ImportPreviewRequest' }
389
+ responses:
390
+ '200': { $ref: '#/components/responses/Success' }
391
+ default: { $ref: '#/components/responses/Error' }
392
+ /v1/workspaces/{workspaceId}/imports/confirm:
393
+ post:
394
+ tags: [administration]
395
+ operationId: confirmWorkspaceImport
396
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
397
+ requestBody:
398
+ required: true
399
+ content:
400
+ application/json:
401
+ schema: { $ref: '#/components/schemas/ImportConfirmRequest' }
402
+ responses:
403
+ '200': { $ref: '#/components/responses/Success' }
404
+ default: { $ref: '#/components/responses/Error' }
405
+ /v1/workspaces/{workspaceId}/export:
406
+ get:
407
+ tags: [administration]
408
+ operationId: exportWorkspace
409
+ parameters:
410
+ - { $ref: '#/components/parameters/WorkspaceId' }
411
+ - name: format
412
+ in: query
413
+ required: true
414
+ schema: { type: string, enum: [json, jsonl, markdown] }
415
+ responses:
416
+ '200': { $ref: '#/components/responses/Success' }
417
+ default: { $ref: '#/components/responses/Error' }
418
+ /v1/workspaces/{workspaceId}/administration/rebuild:
419
+ post:
420
+ tags: [administration]
421
+ operationId: rebuildWorkspaceIndexes
422
+ parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
423
+ responses:
424
+ '200': { $ref: '#/components/responses/Success' }
425
+ default: { $ref: '#/components/responses/Error' }
426
+ /v1/workspaces/{workspaceId}/events/{eventId}:
427
+ get:
428
+ tags: [administration]
429
+ operationId: getCanonicalEvent
430
+ parameters:
431
+ - { $ref: '#/components/parameters/WorkspaceId' }
432
+ - name: eventId
433
+ in: path
434
+ required: true
435
+ schema: { type: string, minLength: 1, maxLength: 100 }
436
+ responses:
437
+ '200': { $ref: '#/components/responses/Success' }
438
+ default: { $ref: '#/components/responses/Error' }
439
+ components:
440
+ securitySchemes:
441
+ bearerAuth:
442
+ type: http
443
+ scheme: bearer
444
+ bearerFormat: JWT
445
+ parameters:
446
+ WorkspaceId:
447
+ name: workspaceId
448
+ in: path
449
+ required: true
450
+ schema: { type: string, minLength: 1, maxLength: 100 }
451
+ AgentId:
452
+ name: agentId
453
+ in: path
454
+ required: true
455
+ schema: { type: string, minLength: 1, maxLength: 100 }
456
+ ItemId:
457
+ name: itemId
458
+ in: path
459
+ required: true
460
+ schema: { type: string, minLength: 1, maxLength: 100 }
461
+ IdempotencyKey:
462
+ name: Idempotency-Key
463
+ in: header
464
+ required: false
465
+ schema: { type: string, minLength: 1, maxLength: 200 }
466
+ Cursor:
467
+ name: cursor
468
+ in: query
469
+ schema: { type: string, minLength: 1, maxLength: 2048 }
470
+ After:
471
+ name: after
472
+ in: query
473
+ schema: { type: string, minLength: 1, maxLength: 2048 }
474
+ ListLimit:
475
+ name: limit
476
+ in: query
477
+ schema: { type: integer, minimum: 1, maximum: 50, default: 10 }
478
+ ChangeLimit:
479
+ name: limit
480
+ in: query
481
+ schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
482
+ responses:
483
+ Success:
484
+ description: Successful Synomem operation
485
+ headers:
486
+ X-Request-Id: { schema: { type: string } }
487
+ content:
488
+ application/json:
489
+ schema: { $ref: '#/components/schemas/SuccessEnvelope' }
490
+ Error:
491
+ description: Stable safe Synomem error
492
+ headers:
493
+ X-Request-Id: { schema: { type: string } }
494
+ content:
495
+ application/json:
496
+ schema: { $ref: '#/components/schemas/ErrorEnvelope' }
497
+ schemas:
498
+ ImportBundle:
499
+ type: object
500
+ additionalProperties: false
501
+ required: [version, sourceWorkspaceId, checksum, events, profiles]
502
+ properties:
503
+ version: { const: 1 }
504
+ sourceWorkspaceId: { type: string, minLength: 1, maxLength: 100 }
505
+ checksum: { type: string, pattern: '^[a-f0-9]{64}$' }
506
+ events: { type: array, maxItems: 100000, items: { type: object } }
507
+ profiles: { type: array, maxItems: 10000, items: { type: object } }
508
+ ImportPreviewRequest:
509
+ type: object
510
+ additionalProperties: false
511
+ required: [bundle]
512
+ properties:
513
+ bundle: { $ref: '#/components/schemas/ImportBundle' }
514
+ ImportConfirmRequest:
515
+ type: object
516
+ additionalProperties: false
517
+ required: [bundle, planId]
518
+ properties:
519
+ bundle: { $ref: '#/components/schemas/ImportBundle' }
520
+ planId: { type: string, minLength: 1, maxLength: 4096 }
521
+ SuccessEnvelope:
522
+ type: object
523
+ additionalProperties: false
524
+ required: [ok, data]
525
+ properties:
526
+ ok: { const: true }
527
+ data: {}
528
+ requestId: { type: string }
529
+ ErrorEnvelope:
530
+ type: object
531
+ additionalProperties: false
532
+ required: [ok, error]
533
+ properties:
534
+ ok: { const: false }
535
+ error:
536
+ type: object
537
+ additionalProperties: false
538
+ required: [code, message]
539
+ properties:
540
+ code: { type: string }
541
+ message: { type: string }
542
+ details: { type: object }
543
+ requestId: { type: string }
544
+ Visibility: { type: string, enum: [private, workspace, public] }
545
+ Tags:
546
+ type: array
547
+ maxItems: 50
548
+ items: { type: string }
549
+ CreateAgent:
550
+ type: object
551
+ additionalProperties: false
552
+ required: [id, displayName]
553
+ properties:
554
+ id: { type: string }
555
+ displayName: { type: string }
556
+ aliases: { type: array, items: { type: string } }
557
+ description: { type: string }
558
+ metadata: { type: object }
559
+ UpdateAgent:
560
+ type: object
561
+ additionalProperties: false
562
+ properties:
563
+ displayName: { type: string }
564
+ aliases: { type: array, items: { type: string } }
565
+ description: { type: string }
566
+ metadata: { type: object }
567
+ GiveKudos:
568
+ type: object
569
+ additionalProperties: false
570
+ required: [recipientAgentId, title, reason]
571
+ properties:
572
+ recipientAgentId: { type: string }
573
+ title: { type: string }
574
+ reason: { type: string }
575
+ evidence: { type: array, items: { type: object } }
576
+ tags: { $ref: '#/components/schemas/Tags' }
577
+ visibility: { $ref: '#/components/schemas/Visibility' }
578
+ source: { type: object }
579
+ metadata: { type: object }
580
+ OptionalNote:
581
+ type: object
582
+ additionalProperties: false
583
+ properties: { note: { type: string } }
584
+ RevokeKudos:
585
+ type: object
586
+ additionalProperties: false
587
+ required: [reason]
588
+ properties:
589
+ reason: { type: string }
590
+ administrative: { type: boolean }
591
+ SendMemo:
592
+ type: object
593
+ additionalProperties: false
594
+ required: [recipientAgentId, subject, body]
595
+ properties:
596
+ recipientAgentId: { type: string }
597
+ subject: { type: string }
598
+ body: { type: string }
599
+ tags: { $ref: '#/components/schemas/Tags' }
600
+ visibility: { $ref: '#/components/schemas/Visibility' }
601
+ source: { type: object }
602
+ metadata: { type: object }
603
+ CreateNote:
604
+ type: object
605
+ additionalProperties: false
606
+ required: [title, body]
607
+ properties:
608
+ ownerAgentId: { type: string }
609
+ title: { type: string }
610
+ body: { type: string }
611
+ tags: { $ref: '#/components/schemas/Tags' }
612
+ source: { type: object }
613
+ metadata: { type: object }
614
+ ReviseNote:
615
+ type: object
616
+ additionalProperties: false
617
+ required: [expectedVersion]
618
+ properties:
619
+ expectedVersion: { type: integer, minimum: 1 }
620
+ title: { type: string }
621
+ body: { type: string }
622
+ tags: { $ref: '#/components/schemas/Tags' }
623
+ source: { type: object }
624
+ metadata: { type: object }
625
+ TodoDue:
626
+ oneOf:
627
+ - type: object
628
+ additionalProperties: false
629
+ required: [kind, date]
630
+ properties:
631
+ kind: { const: date }
632
+ date: { type: string, format: date }
633
+ - type: object
634
+ additionalProperties: false
635
+ required: [kind, datetime, timeZone]
636
+ properties:
637
+ kind: { const: datetime }
638
+ datetime: { type: string, format: date-time }
639
+ timeZone: { type: string }
640
+ CreateTodo:
641
+ type: object
642
+ additionalProperties: false
643
+ required: [title]
644
+ properties:
645
+ assigneeAgentId: { type: string }
646
+ title: { type: string }
647
+ description: { type: string }
648
+ priority: { type: integer, minimum: 1, maximum: 4 }
649
+ due: { $ref: '#/components/schemas/TodoDue' }
650
+ tags: { $ref: '#/components/schemas/Tags' }
651
+ visibility: { $ref: '#/components/schemas/Visibility' }
652
+ source: { type: object }
653
+ metadata: { type: object }
654
+ UpdateTodo:
655
+ type: object
656
+ additionalProperties: false
657
+ required: [expectedVersion]
658
+ properties:
659
+ expectedVersion: { type: integer, minimum: 1 }
660
+ title: { type: string }
661
+ description: { type: string }
662
+ priority: { type: integer, minimum: 1, maximum: 4 }
663
+ due:
664
+ oneOf: [{ $ref: '#/components/schemas/TodoDue' }, { type: 'null' }]
665
+ tags: { $ref: '#/components/schemas/Tags' }
666
+ visibility: { $ref: '#/components/schemas/Visibility' }
667
+ source: { type: object }
668
+ metadata: { type: object }
669
+ TodoTransition:
670
+ type: object
671
+ additionalProperties: false
672
+ properties:
673
+ reason: { type: string }
674
+ note: { type: string }