@lorekit/cli 1.53.0 → 1.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -4
- package/bin/lorekit.mjs +200 -92
- package/package.json +1 -1
- package/src/commands.mjs +112 -0
- package/src/control.mjs +15 -5
- package/src/doctor.mjs +18 -0
- package/src/mcp-server.mjs +68 -181
- package/src/mcp.mjs +25 -1
- package/src/purge.mjs +191 -0
- package/src/store/remote.mjs +80 -1
- package/src/surfaces.generated.mjs +516 -0
- package/src/telemetry-identity.mjs +276 -0
- package/src/telemetry.mjs +167 -10
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
// GENERATED — do not edit.
|
|
2
|
+
// Source: packages/schemas/src/tool-catalog.ts
|
|
3
|
+
// Regenerate: node scripts/gen-surfaces.mjs
|
|
4
|
+
//
|
|
5
|
+
// Edit the catalog's `surfaces` bindings, not this file. `--check` fails CI
|
|
6
|
+
// when the two disagree.
|
|
7
|
+
|
|
8
|
+
/** Every catalog op, in `tools/list` wire order. */
|
|
9
|
+
export const MCP_TOOL_NAMES = [
|
|
10
|
+
"memory.write",
|
|
11
|
+
"memory.read",
|
|
12
|
+
"memory.list",
|
|
13
|
+
"memory.delete",
|
|
14
|
+
"memory.search",
|
|
15
|
+
"memory.archive",
|
|
16
|
+
"memory.scopes",
|
|
17
|
+
"memory.list_archived",
|
|
18
|
+
"memory.restore",
|
|
19
|
+
"memory.purge",
|
|
20
|
+
"memory.purge_expired",
|
|
21
|
+
"org.create",
|
|
22
|
+
"org.list",
|
|
23
|
+
"org.rename",
|
|
24
|
+
"org.delete"
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
/** The `memory.*` family — dispatched against a store (local or remote). */
|
|
28
|
+
export const MEMORY_TOOL_NAMES = [
|
|
29
|
+
"memory.write",
|
|
30
|
+
"memory.read",
|
|
31
|
+
"memory.list",
|
|
32
|
+
"memory.delete",
|
|
33
|
+
"memory.search",
|
|
34
|
+
"memory.archive",
|
|
35
|
+
"memory.scopes",
|
|
36
|
+
"memory.list_archived",
|
|
37
|
+
"memory.restore",
|
|
38
|
+
"memory.purge",
|
|
39
|
+
"memory.purge_expired"
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
/** The `org.*` family — always proxied to the REST API, never the local store. */
|
|
43
|
+
export const ORG_TOOL_NAMES = [
|
|
44
|
+
"org.create",
|
|
45
|
+
"org.list",
|
|
46
|
+
"org.rename",
|
|
47
|
+
"org.delete"
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The `tools/list` payload: name, description and inputSchema per op.
|
|
52
|
+
* Identical projection to the edge server's, from the same declaration, so the
|
|
53
|
+
* local stdio server and the hosted server advertise the same contract.
|
|
54
|
+
*/
|
|
55
|
+
export const MCP_TOOL_DEFS = [
|
|
56
|
+
{
|
|
57
|
+
"name": "memory.write",
|
|
58
|
+
"description": "Store or update a lesson",
|
|
59
|
+
"inputSchema": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"required": [
|
|
62
|
+
"scope",
|
|
63
|
+
"key",
|
|
64
|
+
"value"
|
|
65
|
+
],
|
|
66
|
+
"properties": {
|
|
67
|
+
"scope": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
70
|
+
},
|
|
71
|
+
"key": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"description": "Lesson identifier, unique within the scope. Max 512 characters."
|
|
74
|
+
},
|
|
75
|
+
"value": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "Lesson body in markdown. Max 64 KB."
|
|
78
|
+
},
|
|
79
|
+
"tags": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": {
|
|
82
|
+
"type": "string"
|
|
83
|
+
},
|
|
84
|
+
"description": "Free-form labels, e.g. `[\"skill::aw\", \"source::stuck-loop\"]`."
|
|
85
|
+
},
|
|
86
|
+
"source_agent": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Name of the agent writing this lesson."
|
|
89
|
+
},
|
|
90
|
+
"trigger": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "What triggered the write: `stuck-loop`, `pr-webhook`, `manual`."
|
|
93
|
+
},
|
|
94
|
+
"kind": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"enum": [
|
|
97
|
+
"lesson",
|
|
98
|
+
"bus",
|
|
99
|
+
"signal"
|
|
100
|
+
],
|
|
101
|
+
"description": "The bucket kind: `lesson` (procedural, read every run), `bus` (transient outcome event, read at promotion time), or `signal` (durable per-repo filter, read every run). Omit to have it inferred from a `loop::<host>-lessons` tag."
|
|
102
|
+
},
|
|
103
|
+
"host": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"description": "The owning skill or agent (e.g. `reviewer`, `aw`, `ci-auto-fix`). Omit to have it inferred from a `loop::<host>-lessons` tag."
|
|
106
|
+
},
|
|
107
|
+
"created_at": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"format": "date-time",
|
|
110
|
+
"description": "Optional ISO 8601 creation date. Use when migrating a pre-existing memory so it is dated by its original time instead of now. Rejected if invalid or in the future. Applies only when the memory is first created."
|
|
111
|
+
},
|
|
112
|
+
"org": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"description": "Org slug to write under (org-owned write). Omit for a personal memory. You must be a write-capable member (member/admin/owner, not viewer) of the org, verified server-side — supplying an org slug you are not authorized for is rejected."
|
|
115
|
+
},
|
|
116
|
+
"ttl_days": {
|
|
117
|
+
"type": "integer",
|
|
118
|
+
"minimum": 1,
|
|
119
|
+
"maximum": 365,
|
|
120
|
+
"description": "Number of days until the memory auto-expires. Omit for a permanent memory. On an update, supplying ttl_days refreshes the expiry; omitting it leaves the existing expiry unchanged."
|
|
121
|
+
},
|
|
122
|
+
"clear_ttl": {
|
|
123
|
+
"type": "boolean",
|
|
124
|
+
"description": "When true, removes the existing expiry and makes the memory permanent again. Takes precedence over ttl_days when both are supplied."
|
|
125
|
+
},
|
|
126
|
+
"origin_repo": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"description": "Provenance: the owner/name of the repository this memory was recorded from. Distinct from `scope`, which says where the lesson APPLIES."
|
|
129
|
+
},
|
|
130
|
+
"origin_branch": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"description": "Provenance: the git branch this memory was recorded from. Stored verbatim (case-sensitive) so its GitHub link resolves."
|
|
133
|
+
},
|
|
134
|
+
"origin_commit": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "Provenance: the commit SHA (7-40 hex characters) checked out when this memory was recorded."
|
|
137
|
+
},
|
|
138
|
+
"origin_pr": {
|
|
139
|
+
"type": "integer",
|
|
140
|
+
"minimum": 1,
|
|
141
|
+
"description": "Provenance: the pull request number this memory was recorded from. Combined with origin_repo it renders as a link to the PR."
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"name": "memory.read",
|
|
148
|
+
"description": "Read a lesson by scope and key",
|
|
149
|
+
"inputSchema": {
|
|
150
|
+
"type": "object",
|
|
151
|
+
"required": [
|
|
152
|
+
"scope",
|
|
153
|
+
"key"
|
|
154
|
+
],
|
|
155
|
+
"properties": {
|
|
156
|
+
"scope": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
159
|
+
},
|
|
160
|
+
"key": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"description": "Lesson identifier, unique within the scope. Max 512 characters."
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "memory.list",
|
|
169
|
+
"description": "List lessons for a scope",
|
|
170
|
+
"inputSchema": {
|
|
171
|
+
"type": "object",
|
|
172
|
+
"required": [
|
|
173
|
+
"scope"
|
|
174
|
+
],
|
|
175
|
+
"properties": {
|
|
176
|
+
"scope": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
179
|
+
},
|
|
180
|
+
"tags": {
|
|
181
|
+
"type": "array",
|
|
182
|
+
"items": {
|
|
183
|
+
"type": "string"
|
|
184
|
+
},
|
|
185
|
+
"description": "Filter to entries carrying ANY of these labels (OR)."
|
|
186
|
+
},
|
|
187
|
+
"limit": {
|
|
188
|
+
"type": "integer",
|
|
189
|
+
"minimum": 1,
|
|
190
|
+
"maximum": 100,
|
|
191
|
+
"default": 50,
|
|
192
|
+
"description": "Maximum entries to return."
|
|
193
|
+
},
|
|
194
|
+
"cursor": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"description": "Opaque cursor from a previous response's `nextCursor`. Omit to start from the first page. Ignored when `order` is `rank` (ranked mode returns a single bounded page; `hasMore` is always false and `nextCursor` always null)."
|
|
197
|
+
},
|
|
198
|
+
"order": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"enum": [
|
|
201
|
+
"recency",
|
|
202
|
+
"rank"
|
|
203
|
+
],
|
|
204
|
+
"default": "recency",
|
|
205
|
+
"description": "recency (default, updated_at desc + cursor pagination) or rank (salience+recency; bounded top-N, no cursor). Note: rank results are MMR-diversified, so they are NOT strictly score-descending — a more diverse lower-scored lesson can precede a higher-scored near-duplicate."
|
|
206
|
+
},
|
|
207
|
+
"kind": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"enum": [
|
|
210
|
+
"lesson",
|
|
211
|
+
"bus",
|
|
212
|
+
"signal"
|
|
213
|
+
],
|
|
214
|
+
"description": "Filter to one bucket family: `lesson` (procedural, read every run), `bus` (transient outcome event), or `signal` (durable per-repo filter). Rows written before the taxonomy existed have no kind and are excluded when this is set."
|
|
215
|
+
},
|
|
216
|
+
"host": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"description": "Filter to the owning skill or agent, e.g. `reviewer`, `aw`, `ci-auto-fix`. Combine with `kind` to read exactly one bucket (\"lessons for host reviewer\")."
|
|
219
|
+
},
|
|
220
|
+
"view": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"enum": [
|
|
223
|
+
"full",
|
|
224
|
+
"summary"
|
|
225
|
+
],
|
|
226
|
+
"default": "full",
|
|
227
|
+
"description": "full (default) returns each entry's complete `value`. summary omits `value` and returns `value_bytes` + a 200-character `preview` instead — the cheap discovery read for deciding WHICH lessons to then fetch with `memory.read`."
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"name": "memory.delete",
|
|
234
|
+
"description": "Soft-archive a lesson (default) or hard-delete it (force: true). Archived lessons are hidden from reads but can be restored.",
|
|
235
|
+
"inputSchema": {
|
|
236
|
+
"type": "object",
|
|
237
|
+
"required": [
|
|
238
|
+
"scope",
|
|
239
|
+
"key"
|
|
240
|
+
],
|
|
241
|
+
"properties": {
|
|
242
|
+
"scope": {
|
|
243
|
+
"type": "string",
|
|
244
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
245
|
+
},
|
|
246
|
+
"key": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"description": "Lesson identifier, unique within the scope. Max 512 characters."
|
|
249
|
+
},
|
|
250
|
+
"force": {
|
|
251
|
+
"type": "boolean",
|
|
252
|
+
"default": false,
|
|
253
|
+
"description": "Hard-delete immediately (unrecoverable). Defaults to false (soft-archive)."
|
|
254
|
+
},
|
|
255
|
+
"org": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"description": "Org slug to delete under (org-owned delete). Omit for a personal memory. Soft-archive requires a member/admin/owner role; hard-delete (force: true) requires admin/owner — verified server-side."
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"name": "memory.search",
|
|
264
|
+
"description": "Full-text search across lessons",
|
|
265
|
+
"inputSchema": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"required": [
|
|
268
|
+
"q"
|
|
269
|
+
],
|
|
270
|
+
"properties": {
|
|
271
|
+
"q": {
|
|
272
|
+
"type": "string",
|
|
273
|
+
"description": "Full-text query."
|
|
274
|
+
},
|
|
275
|
+
"scopes": {
|
|
276
|
+
"type": "array",
|
|
277
|
+
"items": {
|
|
278
|
+
"type": "string"
|
|
279
|
+
},
|
|
280
|
+
"description": "Scopes to search. Accepts an owner-level wildcard, e.g. `repo::mthines/*` — the only tool that does."
|
|
281
|
+
},
|
|
282
|
+
"tags": {
|
|
283
|
+
"type": "array",
|
|
284
|
+
"items": {
|
|
285
|
+
"type": "string"
|
|
286
|
+
},
|
|
287
|
+
"description": "Filter to entries carrying ALL of these labels (AND)."
|
|
288
|
+
},
|
|
289
|
+
"limit": {
|
|
290
|
+
"type": "integer",
|
|
291
|
+
"minimum": 1,
|
|
292
|
+
"maximum": 100,
|
|
293
|
+
"default": 20,
|
|
294
|
+
"description": "Maximum entries to return."
|
|
295
|
+
},
|
|
296
|
+
"cursor": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"description": "Opaque cursor from a previous response's `nextCursor`. Omit to start from the first page."
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"name": "memory.archive",
|
|
305
|
+
"description": "Soft-archive a lesson. Archived lessons are hidden from reads but can be restored via memory.restore.",
|
|
306
|
+
"inputSchema": {
|
|
307
|
+
"type": "object",
|
|
308
|
+
"required": [
|
|
309
|
+
"scope",
|
|
310
|
+
"key"
|
|
311
|
+
],
|
|
312
|
+
"properties": {
|
|
313
|
+
"scope": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
316
|
+
},
|
|
317
|
+
"key": {
|
|
318
|
+
"type": "string",
|
|
319
|
+
"description": "Lesson identifier, unique within the scope. Max 512 characters."
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"name": "memory.scopes",
|
|
326
|
+
"description": "List every scope in the store with how many active memories it holds and when it was last written to — the inventory to consult when you do not already know which scope to read. Takes no arguments and is store-wide, NOT limited to any working directory. Every other read tool requires a scope up front, so this is the one that answers \"what is there?\".",
|
|
327
|
+
"inputSchema": {
|
|
328
|
+
"type": "object",
|
|
329
|
+
"properties": {}
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"name": "memory.list_archived",
|
|
334
|
+
"description": "List archived (soft-deleted) lessons for a scope",
|
|
335
|
+
"inputSchema": {
|
|
336
|
+
"type": "object",
|
|
337
|
+
"required": [
|
|
338
|
+
"scope"
|
|
339
|
+
],
|
|
340
|
+
"properties": {
|
|
341
|
+
"scope": {
|
|
342
|
+
"type": "string",
|
|
343
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
344
|
+
},
|
|
345
|
+
"limit": {
|
|
346
|
+
"type": "integer",
|
|
347
|
+
"minimum": 1,
|
|
348
|
+
"maximum": 100,
|
|
349
|
+
"default": 50,
|
|
350
|
+
"description": "Maximum entries to return."
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"name": "memory.restore",
|
|
357
|
+
"description": "Restore an archived lesson back to active",
|
|
358
|
+
"inputSchema": {
|
|
359
|
+
"type": "object",
|
|
360
|
+
"required": [
|
|
361
|
+
"scope",
|
|
362
|
+
"key"
|
|
363
|
+
],
|
|
364
|
+
"properties": {
|
|
365
|
+
"scope": {
|
|
366
|
+
"type": "string",
|
|
367
|
+
"description": "Canonical scope string, e.g. `repo::mthines/lorekit`."
|
|
368
|
+
},
|
|
369
|
+
"key": {
|
|
370
|
+
"type": "string",
|
|
371
|
+
"description": "Lesson identifier, unique within the scope. Max 512 characters."
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"name": "memory.purge",
|
|
378
|
+
"description": "Permanently delete archived lessons older than retention_days (default 30). Unrecoverable.",
|
|
379
|
+
"inputSchema": {
|
|
380
|
+
"type": "object",
|
|
381
|
+
"properties": {
|
|
382
|
+
"retention_days": {
|
|
383
|
+
"type": "integer",
|
|
384
|
+
"minimum": 1,
|
|
385
|
+
"maximum": 365,
|
|
386
|
+
"default": 30,
|
|
387
|
+
"description": "Only purge archived lessons older than this many days."
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"name": "memory.purge_expired",
|
|
394
|
+
"description": "Permanently delete all TTL-expired memories for the current user. Unrecoverable.",
|
|
395
|
+
"inputSchema": {
|
|
396
|
+
"type": "object",
|
|
397
|
+
"properties": {}
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"name": "org.create",
|
|
402
|
+
"description": "Create a new organization. You become its owner automatically. The slug must be globally unique and lowercase.",
|
|
403
|
+
"inputSchema": {
|
|
404
|
+
"type": "object",
|
|
405
|
+
"required": [
|
|
406
|
+
"slug",
|
|
407
|
+
"name"
|
|
408
|
+
],
|
|
409
|
+
"properties": {
|
|
410
|
+
"slug": {
|
|
411
|
+
"type": "string",
|
|
412
|
+
"description": "Unique lowercase org identifier, e.g. \"my-team\""
|
|
413
|
+
},
|
|
414
|
+
"name": {
|
|
415
|
+
"type": "string",
|
|
416
|
+
"description": "Human-readable display name"
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"name": "org.list",
|
|
423
|
+
"description": "List all organizations you are a member of, with your role in each.",
|
|
424
|
+
"inputSchema": {
|
|
425
|
+
"type": "object",
|
|
426
|
+
"properties": {}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"name": "org.rename",
|
|
431
|
+
"description": "Rename an organization's display name. Requires admin or owner role.",
|
|
432
|
+
"inputSchema": {
|
|
433
|
+
"type": "object",
|
|
434
|
+
"required": [
|
|
435
|
+
"slug",
|
|
436
|
+
"name"
|
|
437
|
+
],
|
|
438
|
+
"properties": {
|
|
439
|
+
"slug": {
|
|
440
|
+
"type": "string",
|
|
441
|
+
"description": "The org slug to update"
|
|
442
|
+
},
|
|
443
|
+
"name": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"description": "New display name"
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"name": "org.delete",
|
|
452
|
+
"description": "Delete an organization. Requires owner role. Soft-deletes the org — all org lore is immediately hidden from reads. Unrecoverable via MCP.",
|
|
453
|
+
"inputSchema": {
|
|
454
|
+
"type": "object",
|
|
455
|
+
"required": [
|
|
456
|
+
"slug"
|
|
457
|
+
],
|
|
458
|
+
"properties": {
|
|
459
|
+
"slug": {
|
|
460
|
+
"type": "string",
|
|
461
|
+
"description": "The org slug to delete"
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
];
|
|
467
|
+
|
|
468
|
+
/** CLI command name -> the catalog op it invokes. */
|
|
469
|
+
export const CLI_BINDINGS = {
|
|
470
|
+
"write": "memory.write",
|
|
471
|
+
"show": "memory.read",
|
|
472
|
+
"list": "memory.list",
|
|
473
|
+
"delete": "memory.delete",
|
|
474
|
+
"search": "memory.search",
|
|
475
|
+
"archive": "memory.archive",
|
|
476
|
+
"scopes": "memory.scopes",
|
|
477
|
+
"restore": "memory.restore",
|
|
478
|
+
"purge": "memory.purge",
|
|
479
|
+
"purge-expired": "memory.purge_expired"
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
/** CLI alias -> canonical command name. */
|
|
483
|
+
export const CLI_ALIASES = {
|
|
484
|
+
"ls": "list",
|
|
485
|
+
"rm": "delete",
|
|
486
|
+
"grep": "search"
|
|
487
|
+
};
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Op -> why it has NO CLI command. A declared exemption, so absence from the
|
|
491
|
+
* CLI is a reviewable decision rather than an oversight.
|
|
492
|
+
*/
|
|
493
|
+
export const CLI_EXEMPT = {
|
|
494
|
+
"memory.list_archived": "surfaced as a flag on an existing command — `lorekit list --archived` — not a command of its own",
|
|
495
|
+
"org.create": "org management reaches the CLI via the local stdio MCP server (`lorekit mcp`), not a `lorekit` subcommand",
|
|
496
|
+
"org.list": "org management reaches the CLI via the local stdio MCP server (`lorekit mcp`), not a `lorekit` subcommand",
|
|
497
|
+
"org.rename": "org management reaches the CLI via the local stdio MCP server (`lorekit mcp`), not a `lorekit` subcommand",
|
|
498
|
+
"org.delete": "org management reaches the CLI via the local stdio MCP server (`lorekit mcp`), not a `lorekit` subcommand"
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
/** Op -> why the local stdio MCP server does not dispatch it. */
|
|
502
|
+
export const LOCAL_MCP_EXEMPT = {
|
|
503
|
+
"memory.list_archived": "reachable through memory.list's archived filter on the offline store",
|
|
504
|
+
"memory.purge": "account-wide sweep against server-side state; the offline store has no equivalent",
|
|
505
|
+
"memory.purge_expired": "account-wide sweep against server-side state; the offline store has no equivalent"
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Default retention window for `memory.purge`, in days.
|
|
510
|
+
*
|
|
511
|
+
* Derived rather than restated: this value appears in the tool description the
|
|
512
|
+
* server advertises, in the CLI's help text, and in the CLI's client-side
|
|
513
|
+
* validation. Three hand-written copies of one number is three chances for the
|
|
514
|
+
* help to promise a default the server does not apply.
|
|
515
|
+
*/
|
|
516
|
+
export const PURGE_RETENTION_DAYS_DEFAULT = 30;
|