@kb-labs/steward-entry 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 (90) hide show
  1. package/README.md +5 -0
  2. package/dist/commands/commitment-add.d.ts +15 -0
  3. package/dist/commands/commitment-add.js +53 -0
  4. package/dist/commands/commitment-add.js.map +1 -0
  5. package/dist/commands/commitment-done.d.ts +10 -0
  6. package/dist/commands/commitment-done.js +43 -0
  7. package/dist/commands/commitment-done.js.map +1 -0
  8. package/dist/commands/commitment-drop.d.ts +11 -0
  9. package/dist/commands/commitment-drop.js +43 -0
  10. package/dist/commands/commitment-drop.js.map +1 -0
  11. package/dist/commands/commitment-list.d.ts +13 -0
  12. package/dist/commands/commitment-list.js +37 -0
  13. package/dist/commands/commitment-list.js.map +1 -0
  14. package/dist/commands/commitment-snooze.d.ts +12 -0
  15. package/dist/commands/commitment-snooze.js +54 -0
  16. package/dist/commands/commitment-snooze.js.map +1 -0
  17. package/dist/commands/company-add.d.ts +11 -0
  18. package/dist/commands/company-add.js +34 -0
  19. package/dist/commands/company-add.js.map +1 -0
  20. package/dist/commands/company-list.d.ts +10 -0
  21. package/dist/commands/company-list.js +32 -0
  22. package/dist/commands/company-list.js.map +1 -0
  23. package/dist/commands/event-add.d.ts +14 -0
  24. package/dist/commands/event-add.js +46 -0
  25. package/dist/commands/event-add.js.map +1 -0
  26. package/dist/commands/event-list.d.ts +13 -0
  27. package/dist/commands/event-list.js +38 -0
  28. package/dist/commands/event-list.js.map +1 -0
  29. package/dist/commands/member-add.d.ts +15 -0
  30. package/dist/commands/member-add.js +50 -0
  31. package/dist/commands/member-add.js.map +1 -0
  32. package/dist/commands/member-list.d.ts +10 -0
  33. package/dist/commands/member-list.js +37 -0
  34. package/dist/commands/member-list.js.map +1 -0
  35. package/dist/commands/person-add.d.ts +16 -0
  36. package/dist/commands/person-add.js +52 -0
  37. package/dist/commands/person-add.js.map +1 -0
  38. package/dist/commands/person-get.d.ts +10 -0
  39. package/dist/commands/person-get.js +43 -0
  40. package/dist/commands/person-get.js.map +1 -0
  41. package/dist/commands/person-list.d.ts +10 -0
  42. package/dist/commands/person-list.js +32 -0
  43. package/dist/commands/person-list.js.map +1 -0
  44. package/dist/commands/person-update.d.ts +13 -0
  45. package/dist/commands/person-update.js +53 -0
  46. package/dist/commands/person-update.js.map +1 -0
  47. package/dist/commands/project-add.d.ts +13 -0
  48. package/dist/commands/project-add.js +38 -0
  49. package/dist/commands/project-add.js.map +1 -0
  50. package/dist/commands/project-get.d.ts +10 -0
  51. package/dist/commands/project-get.js +43 -0
  52. package/dist/commands/project-get.js.map +1 -0
  53. package/dist/commands/project-list.d.ts +11 -0
  54. package/dist/commands/project-list.js +34 -0
  55. package/dist/commands/project-list.js.map +1 -0
  56. package/dist/commands/project-update.d.ts +12 -0
  57. package/dist/commands/project-update.js +47 -0
  58. package/dist/commands/project-update.js.map +1 -0
  59. package/dist/commands/resource-add.d.ts +14 -0
  60. package/dist/commands/resource-add.js +44 -0
  61. package/dist/commands/resource-add.js.map +1 -0
  62. package/dist/commands/resource-list.d.ts +10 -0
  63. package/dist/commands/resource-list.js +37 -0
  64. package/dist/commands/resource-list.js.map +1 -0
  65. package/dist/commands/review.d.ts +10 -0
  66. package/dist/commands/review.js +35 -0
  67. package/dist/commands/review.js.map +1 -0
  68. package/dist/commands/topic-add.d.ts +12 -0
  69. package/dist/commands/topic-add.js +44 -0
  70. package/dist/commands/topic-add.js.map +1 -0
  71. package/dist/commands/topic-list.d.ts +10 -0
  72. package/dist/commands/topic-list.js +32 -0
  73. package/dist/commands/topic-list.js.map +1 -0
  74. package/dist/commands/who.d.ts +11 -0
  75. package/dist/commands/who.js +42 -0
  76. package/dist/commands/who.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +406 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/jobs/daily-review.d.ts +11 -0
  81. package/dist/jobs/daily-review.js +47 -0
  82. package/dist/jobs/daily-review.js.map +1 -0
  83. package/dist/jobs/export-backup.d.ts +13 -0
  84. package/dist/jobs/export-backup.js +32 -0
  85. package/dist/jobs/export-backup.js.map +1 -0
  86. package/dist/manifest.d.ts +490 -0
  87. package/dist/manifest.js +406 -0
  88. package/dist/manifest.js.map +1 -0
  89. package/dist/manifest.json +728 -0
  90. package/package.json +55 -0
@@ -0,0 +1,728 @@
1
+ {
2
+ "schema": "kb.plugin/3",
3
+ "id": "@kb-labs/steward",
4
+ "version": "0.1.0",
5
+ "display": {
6
+ "name": "Steward",
7
+ "description": "Personal PM/CRM tool-layer for AI agents: projects, people, commitments, and routing across dozens of parallel projects.",
8
+ "tags": [
9
+ "pm",
10
+ "crm",
11
+ "agents",
12
+ "productivity"
13
+ ]
14
+ },
15
+ "platform": {
16
+ "requires": [
17
+ "documentDatabase"
18
+ ]
19
+ },
20
+ "cli": {
21
+ "groupMeta": [
22
+ {
23
+ "name": "steward",
24
+ "description": "Personal PM/CRM for AI agents"
25
+ }
26
+ ],
27
+ "commands": [
28
+ {
29
+ "path": "steward project add",
30
+ "describe": "Create a new project",
31
+ "handler": "./commands/project-add.js#default",
32
+ "flags": [
33
+ {
34
+ "name": "name",
35
+ "type": "string",
36
+ "description": "Project name",
37
+ "required": true
38
+ },
39
+ {
40
+ "name": "status",
41
+ "type": "string",
42
+ "description": "active | paused | archived",
43
+ "default": "active"
44
+ },
45
+ {
46
+ "name": "description",
47
+ "type": "string",
48
+ "description": "Free-text description"
49
+ },
50
+ {
51
+ "name": "json",
52
+ "type": "boolean",
53
+ "description": "Emit JSON instead of text"
54
+ }
55
+ ],
56
+ "examples": [
57
+ "kb steward project add --name=\"Acme API\" --description=\"Payments backend\""
58
+ ]
59
+ },
60
+ {
61
+ "path": "steward project get",
62
+ "describe": "Get a project card: status, resources, and members",
63
+ "handler": "./commands/project-get.js#default",
64
+ "flags": [
65
+ {
66
+ "name": "json",
67
+ "type": "boolean",
68
+ "description": "Emit JSON instead of text"
69
+ }
70
+ ],
71
+ "examples": [
72
+ "kb steward project get \"Acme API\"",
73
+ "kb steward project get prj_01H..."
74
+ ]
75
+ },
76
+ {
77
+ "path": "steward project list",
78
+ "describe": "List projects, optionally filtered by status",
79
+ "handler": "./commands/project-list.js#default",
80
+ "flags": [
81
+ {
82
+ "name": "status",
83
+ "type": "string",
84
+ "description": "active | paused | archived"
85
+ },
86
+ {
87
+ "name": "json",
88
+ "type": "boolean",
89
+ "description": "Emit JSON instead of text"
90
+ }
91
+ ],
92
+ "examples": [
93
+ "kb steward project list",
94
+ "kb steward project list --status=active"
95
+ ]
96
+ },
97
+ {
98
+ "path": "steward project update",
99
+ "describe": "Update a project's status or description",
100
+ "handler": "./commands/project-update.js#default",
101
+ "flags": [
102
+ {
103
+ "name": "status",
104
+ "type": "string",
105
+ "description": "active | paused | archived"
106
+ },
107
+ {
108
+ "name": "description",
109
+ "type": "string",
110
+ "description": "New description"
111
+ },
112
+ {
113
+ "name": "json",
114
+ "type": "boolean",
115
+ "description": "Emit JSON instead of text"
116
+ }
117
+ ],
118
+ "examples": [
119
+ "kb steward project update prj_01H... --status=paused"
120
+ ]
121
+ },
122
+ {
123
+ "path": "steward resource add",
124
+ "describe": "Attach a resource to a project (repo, stand, dashboard, doc, ...)",
125
+ "handler": "./commands/resource-add.js#default",
126
+ "flags": [
127
+ {
128
+ "name": "type",
129
+ "type": "string",
130
+ "description": "Free-form kind, e.g. repo, dev-stand, dashboard",
131
+ "required": true
132
+ },
133
+ {
134
+ "name": "label",
135
+ "type": "string",
136
+ "description": "Human-readable label",
137
+ "required": true
138
+ },
139
+ {
140
+ "name": "url",
141
+ "type": "string",
142
+ "description": "External link, if any"
143
+ },
144
+ {
145
+ "name": "content",
146
+ "type": "string",
147
+ "description": "Stored markdown content, if any"
148
+ },
149
+ {
150
+ "name": "json",
151
+ "type": "boolean",
152
+ "description": "Emit JSON instead of text"
153
+ }
154
+ ],
155
+ "examples": [
156
+ "kb steward resource add prj_01H... --type=repo --url=https://github.com/acme/api"
157
+ ]
158
+ },
159
+ {
160
+ "path": "steward resource list",
161
+ "describe": "List resources attached to a project",
162
+ "handler": "./commands/resource-list.js#default",
163
+ "flags": [
164
+ {
165
+ "name": "json",
166
+ "type": "boolean",
167
+ "description": "Emit JSON instead of text"
168
+ }
169
+ ],
170
+ "examples": [
171
+ "kb steward resource list prj_01H..."
172
+ ]
173
+ },
174
+ {
175
+ "path": "steward person add",
176
+ "describe": "Add a contact. Returns a possibleDuplicates warning, not an error, on a name match",
177
+ "handler": "./commands/person-add.js#default",
178
+ "flags": [
179
+ {
180
+ "name": "name",
181
+ "type": "string",
182
+ "description": "Full name",
183
+ "required": true
184
+ },
185
+ {
186
+ "name": "topics",
187
+ "type": "string",
188
+ "description": "Comma-separated global competencies"
189
+ },
190
+ {
191
+ "name": "company",
192
+ "type": "string",
193
+ "description": "Company id"
194
+ },
195
+ {
196
+ "name": "json",
197
+ "type": "boolean",
198
+ "description": "Emit JSON instead of text"
199
+ }
200
+ ],
201
+ "examples": [
202
+ "kb steward person add --name=\"Ivanov\" --topics=frontend,architecture"
203
+ ]
204
+ },
205
+ {
206
+ "path": "steward person update",
207
+ "describe": "Update a contact's name, topics, or company",
208
+ "handler": "./commands/person-update.js#default",
209
+ "flags": [
210
+ {
211
+ "name": "name",
212
+ "type": "string",
213
+ "description": "New name"
214
+ },
215
+ {
216
+ "name": "topics",
217
+ "type": "string",
218
+ "description": "Comma-separated global competencies (replaces existing)"
219
+ },
220
+ {
221
+ "name": "company",
222
+ "type": "string",
223
+ "description": "Company id"
224
+ },
225
+ {
226
+ "name": "json",
227
+ "type": "boolean",
228
+ "description": "Emit JSON instead of text"
229
+ }
230
+ ],
231
+ "examples": [
232
+ "kb steward person update per_01H... --topics=frontend,backend"
233
+ ]
234
+ },
235
+ {
236
+ "path": "steward person get",
237
+ "describe": "Get a contact by id or exact name",
238
+ "handler": "./commands/person-get.js#default",
239
+ "flags": [
240
+ {
241
+ "name": "json",
242
+ "type": "boolean",
243
+ "description": "Emit JSON instead of text"
244
+ }
245
+ ],
246
+ "examples": [
247
+ "kb steward person get \"Ivanov\""
248
+ ]
249
+ },
250
+ {
251
+ "path": "steward person list",
252
+ "describe": "List every known contact",
253
+ "handler": "./commands/person-list.js#default",
254
+ "flags": [
255
+ {
256
+ "name": "json",
257
+ "type": "boolean",
258
+ "description": "Emit JSON instead of text"
259
+ }
260
+ ],
261
+ "examples": [
262
+ "kb steward person list"
263
+ ]
264
+ },
265
+ {
266
+ "path": "steward company add",
267
+ "describe": "Add a company (thin — just a name to link people to)",
268
+ "handler": "./commands/company-add.js#default",
269
+ "flags": [
270
+ {
271
+ "name": "name",
272
+ "type": "string",
273
+ "description": "Company name",
274
+ "required": true
275
+ },
276
+ {
277
+ "name": "json",
278
+ "type": "boolean",
279
+ "description": "Emit JSON instead of text"
280
+ }
281
+ ],
282
+ "examples": [
283
+ "kb steward company add --name=\"Acme Corp\""
284
+ ]
285
+ },
286
+ {
287
+ "path": "steward company list",
288
+ "describe": "List companies",
289
+ "handler": "./commands/company-list.js#default",
290
+ "flags": [
291
+ {
292
+ "name": "json",
293
+ "type": "boolean",
294
+ "description": "Emit JSON instead of text"
295
+ }
296
+ ],
297
+ "examples": [
298
+ "kb steward company list"
299
+ ]
300
+ },
301
+ {
302
+ "path": "steward member add",
303
+ "describe": "Link a person to a project with a role and fallback priority",
304
+ "handler": "./commands/member-add.js#default",
305
+ "flags": [
306
+ {
307
+ "name": "person",
308
+ "type": "string",
309
+ "description": "Person id",
310
+ "required": true
311
+ },
312
+ {
313
+ "name": "project",
314
+ "type": "string",
315
+ "description": "Project id",
316
+ "required": true
317
+ },
318
+ {
319
+ "name": "role",
320
+ "type": "string",
321
+ "description": "Role in this project",
322
+ "required": true
323
+ },
324
+ {
325
+ "name": "topics",
326
+ "type": "string",
327
+ "description": "Comma-separated project-scoped competencies"
328
+ },
329
+ {
330
+ "name": "priority",
331
+ "type": "number",
332
+ "description": "Lower = contacted first",
333
+ "default": 0
334
+ },
335
+ {
336
+ "name": "json",
337
+ "type": "boolean",
338
+ "description": "Emit JSON instead of text"
339
+ }
340
+ ],
341
+ "examples": [
342
+ "kb steward member add --person=per_01H... --project=prj_01H... --role=lead --priority=0"
343
+ ]
344
+ },
345
+ {
346
+ "path": "steward member list",
347
+ "describe": "List members of a project, ordered by fallback priority",
348
+ "handler": "./commands/member-list.js#default",
349
+ "flags": [
350
+ {
351
+ "name": "json",
352
+ "type": "boolean",
353
+ "description": "Emit JSON instead of text"
354
+ }
355
+ ],
356
+ "examples": [
357
+ "kb steward member list prj_01H..."
358
+ ]
359
+ },
360
+ {
361
+ "path": "steward who",
362
+ "describe": "Find who to contact about a topic. With --project, project-scoped members take priority (fallback chain); otherwise matches global competencies across every contact",
363
+ "handler": "./commands/who.js#default",
364
+ "flags": [
365
+ {
366
+ "name": "project",
367
+ "type": "string",
368
+ "description": "Prefer members of this project"
369
+ },
370
+ {
371
+ "name": "json",
372
+ "type": "boolean",
373
+ "description": "Emit JSON instead of text"
374
+ }
375
+ ],
376
+ "examples": [
377
+ "kb steward who \"frontend\" --project=prj_01H...",
378
+ "kb steward who \"grafana\""
379
+ ]
380
+ },
381
+ {
382
+ "path": "steward commitment add",
383
+ "describe": "Record a promise made to a person, with an optional soft reminder date",
384
+ "handler": "./commands/commitment-add.js#default",
385
+ "flags": [
386
+ {
387
+ "name": "text",
388
+ "type": "string",
389
+ "description": "What was promised",
390
+ "required": true
391
+ },
392
+ {
393
+ "name": "person",
394
+ "type": "string",
395
+ "description": "Person id"
396
+ },
397
+ {
398
+ "name": "project",
399
+ "type": "string",
400
+ "description": "Project id"
401
+ },
402
+ {
403
+ "name": "remind-at",
404
+ "type": "string",
405
+ "description": "ISO date/time for the reminder"
406
+ },
407
+ {
408
+ "name": "stale-after-days",
409
+ "type": "number",
410
+ "description": "Days of silence before it counts as stale",
411
+ "default": 14
412
+ },
413
+ {
414
+ "name": "json",
415
+ "type": "boolean",
416
+ "description": "Emit JSON instead of text"
417
+ }
418
+ ],
419
+ "examples": [
420
+ "kb steward commitment add --text=\"Send X\" --person=per_01H... --remind-at=2026-09-01"
421
+ ]
422
+ },
423
+ {
424
+ "path": "steward commitment list",
425
+ "describe": "List commitments, optionally only the stale (overdue, unsnoozed) ones",
426
+ "handler": "./commands/commitment-list.js#default",
427
+ "flags": [
428
+ {
429
+ "name": "status",
430
+ "type": "string",
431
+ "description": "open | done | dropped"
432
+ },
433
+ {
434
+ "name": "project",
435
+ "type": "string",
436
+ "description": "Project id"
437
+ },
438
+ {
439
+ "name": "stale-only",
440
+ "type": "boolean",
441
+ "description": "Only overdue, unsnoozed, open commitments"
442
+ },
443
+ {
444
+ "name": "json",
445
+ "type": "boolean",
446
+ "description": "Emit JSON instead of text"
447
+ }
448
+ ],
449
+ "examples": [
450
+ "kb steward commitment list --stale-only"
451
+ ]
452
+ },
453
+ {
454
+ "path": "steward commitment done",
455
+ "describe": "Mark a commitment fulfilled",
456
+ "handler": "./commands/commitment-done.js#default",
457
+ "flags": [
458
+ {
459
+ "name": "json",
460
+ "type": "boolean",
461
+ "description": "Emit JSON instead of text"
462
+ }
463
+ ],
464
+ "examples": [
465
+ "kb steward commitment done cmt_01H..."
466
+ ]
467
+ },
468
+ {
469
+ "path": "steward commitment drop",
470
+ "describe": "Cancel a commitment — reason is required and recorded in history",
471
+ "handler": "./commands/commitment-drop.js#default",
472
+ "flags": [
473
+ {
474
+ "name": "reason",
475
+ "type": "string",
476
+ "description": "Why it was dropped",
477
+ "required": true
478
+ },
479
+ {
480
+ "name": "json",
481
+ "type": "boolean",
482
+ "description": "Emit JSON instead of text"
483
+ }
484
+ ],
485
+ "examples": [
486
+ "kb steward commitment drop cmt_01H... --reason=\"No longer relevant\""
487
+ ]
488
+ },
489
+ {
490
+ "path": "steward commitment snooze",
491
+ "describe": "Postpone a commitment's reminder without cancelling it",
492
+ "handler": "./commands/commitment-snooze.js#default",
493
+ "flags": [
494
+ {
495
+ "name": "until",
496
+ "type": "string",
497
+ "description": "ISO date/time to snooze until",
498
+ "required": true
499
+ },
500
+ {
501
+ "name": "reason",
502
+ "type": "string",
503
+ "description": "Why it was postponed"
504
+ },
505
+ {
506
+ "name": "json",
507
+ "type": "boolean",
508
+ "description": "Emit JSON instead of text"
509
+ }
510
+ ],
511
+ "examples": [
512
+ "kb steward commitment snooze cmt_01H... --until=2026-09-15 --reason=\"Waiting on client\""
513
+ ]
514
+ },
515
+ {
516
+ "path": "steward event add",
517
+ "describe": "Record a manual note against a project, person, or commitment — the primary tool for backfill import",
518
+ "handler": "./commands/event-add.js#default",
519
+ "flags": [
520
+ {
521
+ "name": "subject-type",
522
+ "type": "string",
523
+ "description": "project | person | commitment | company | resource",
524
+ "required": true
525
+ },
526
+ {
527
+ "name": "subject-id",
528
+ "type": "string",
529
+ "description": "Id of the subject",
530
+ "required": true
531
+ },
532
+ {
533
+ "name": "text",
534
+ "type": "string",
535
+ "description": "Note text"
536
+ },
537
+ {
538
+ "name": "kind",
539
+ "type": "string",
540
+ "description": "Event kind",
541
+ "default": "note"
542
+ },
543
+ {
544
+ "name": "json",
545
+ "type": "boolean",
546
+ "description": "Emit JSON instead of text"
547
+ }
548
+ ],
549
+ "examples": [
550
+ "kb steward event add --subject-type=person --subject-id=per_01H... --text=\"Talked at the conference\""
551
+ ]
552
+ },
553
+ {
554
+ "path": "steward event list",
555
+ "describe": "Read the history log for a subject — \"what happened with X\"",
556
+ "handler": "./commands/event-list.js#default",
557
+ "flags": [
558
+ {
559
+ "name": "subject-type",
560
+ "type": "string",
561
+ "description": "project | person | commitment | company | resource"
562
+ },
563
+ {
564
+ "name": "subject-id",
565
+ "type": "string",
566
+ "description": "Id of the subject"
567
+ },
568
+ {
569
+ "name": "kind",
570
+ "type": "string",
571
+ "description": "Filter by event kind"
572
+ },
573
+ {
574
+ "name": "json",
575
+ "type": "boolean",
576
+ "description": "Emit JSON instead of text"
577
+ }
578
+ ],
579
+ "examples": [
580
+ "kb steward event list --subject-type=project --subject-id=prj_01H..."
581
+ ]
582
+ },
583
+ {
584
+ "path": "steward topic add",
585
+ "describe": "Register a topic with aliases in the routing dictionary — do this deliberately, not automatically",
586
+ "handler": "./commands/topic-add.js#default",
587
+ "flags": [
588
+ {
589
+ "name": "name",
590
+ "type": "string",
591
+ "description": "Canonical topic name",
592
+ "required": true
593
+ },
594
+ {
595
+ "name": "aliases",
596
+ "type": "string",
597
+ "description": "Comma-separated aliases"
598
+ },
599
+ {
600
+ "name": "json",
601
+ "type": "boolean",
602
+ "description": "Emit JSON instead of text"
603
+ }
604
+ ],
605
+ "examples": [
606
+ "kb steward topic add --name=frontend --aliases=фронт,фронтенд,front-end"
607
+ ]
608
+ },
609
+ {
610
+ "path": "steward topic list",
611
+ "describe": "List the topic dictionary",
612
+ "handler": "./commands/topic-list.js#default",
613
+ "flags": [
614
+ {
615
+ "name": "json",
616
+ "type": "boolean",
617
+ "description": "Emit JSON instead of text"
618
+ }
619
+ ],
620
+ "examples": [
621
+ "kb steward topic list"
622
+ ]
623
+ },
624
+ {
625
+ "path": "steward review",
626
+ "describe": "Daily summary: stale commitments, upcoming reminders, active projects, and days since the last successful backup",
627
+ "handler": "./commands/review.js#default",
628
+ "flags": [
629
+ {
630
+ "name": "json",
631
+ "type": "boolean",
632
+ "description": "Emit JSON instead of text"
633
+ }
634
+ ],
635
+ "examples": [
636
+ "kb steward review"
637
+ ]
638
+ }
639
+ ]
640
+ },
641
+ "cron": {
642
+ "schedules": [
643
+ {
644
+ "id": "daily-review",
645
+ "schedule": "1d",
646
+ "job": {
647
+ "type": "daily-review",
648
+ "payload": {}
649
+ },
650
+ "describe": "Generates the daily review artifact"
651
+ },
652
+ {
653
+ "id": "export-backup",
654
+ "schedule": "1d",
655
+ "job": {
656
+ "type": "export-backup",
657
+ "payload": {}
658
+ },
659
+ "describe": "Snapshots all collections for the private-repo backup"
660
+ }
661
+ ]
662
+ },
663
+ "jobs": {
664
+ "handlers": [
665
+ {
666
+ "id": "daily-review",
667
+ "describe": "Writes .kb/steward/reviews/<date>.md",
668
+ "handler": "./jobs/daily-review.js#default"
669
+ },
670
+ {
671
+ "id": "export-backup",
672
+ "describe": "Writes .kb/steward/exports/<date>.json — git commit/push happens at the workflow level",
673
+ "handler": "./jobs/export-backup.js#default"
674
+ }
675
+ ]
676
+ },
677
+ "artifacts": [
678
+ {
679
+ "id": "steward.review.md",
680
+ "pathTemplate": ".kb/steward/reviews/{date}.md",
681
+ "description": "Daily review — stale commitments, upcoming reminders, backup health."
682
+ },
683
+ {
684
+ "id": "steward.export.json",
685
+ "pathTemplate": ".kb/steward/exports/{date}.json",
686
+ "description": "Daily snapshot of every collection, for the private-repo backup."
687
+ }
688
+ ],
689
+ "permissions": {
690
+ "fs": {
691
+ "read": [
692
+ ".kb/**"
693
+ ],
694
+ "write": [
695
+ ".kb/**"
696
+ ]
697
+ },
698
+ "env": {
699
+ "read": [
700
+ "HOME",
701
+ "USER",
702
+ "PATH",
703
+ "TMPDIR",
704
+ "NODE_ENV",
705
+ "KB_*"
706
+ ]
707
+ },
708
+ "platform": {
709
+ "database": {
710
+ "document": {
711
+ "owns": [
712
+ "projects",
713
+ "resources",
714
+ "people",
715
+ "companies",
716
+ "project_members",
717
+ "commitments",
718
+ "events",
719
+ "topics"
720
+ ],
721
+ "ddl": {
722
+ "ownCollections": true
723
+ }
724
+ }
725
+ }
726
+ }
727
+ }
728
+ }