@ikenga/contract 0.3.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.
@@ -0,0 +1,638 @@
1
+ {
2
+ "$ref": "#/definitions/IkengaArtifactManifest",
3
+ "definitions": {
4
+ "IkengaArtifactManifest": {
5
+ "type": "object",
6
+ "properties": {
7
+ "$schema": {
8
+ "type": "string",
9
+ "format": "uri"
10
+ },
11
+ "format": {
12
+ "type": "string",
13
+ "const": "ikenga-artifact"
14
+ },
15
+ "formatVersion": {
16
+ "type": "string"
17
+ },
18
+ "id": {
19
+ "type": "string",
20
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
21
+ },
22
+ "name": {
23
+ "type": "string"
24
+ },
25
+ "version": {
26
+ "type": "string"
27
+ },
28
+ "description": {
29
+ "type": "string"
30
+ },
31
+ "author": {
32
+ "type": "string"
33
+ },
34
+ "license": {
35
+ "type": "string"
36
+ },
37
+ "entry": {
38
+ "type": "string"
39
+ },
40
+ "icon": {
41
+ "type": "object",
42
+ "properties": {
43
+ "lucide": {
44
+ "type": "string"
45
+ }
46
+ },
47
+ "additionalProperties": false
48
+ },
49
+ "dataSources": {
50
+ "type": "object",
51
+ "additionalProperties": {
52
+ "anyOf": [
53
+ {
54
+ "type": "object",
55
+ "properties": {
56
+ "type": {
57
+ "type": "string",
58
+ "const": "supabase"
59
+ },
60
+ "table": {
61
+ "type": "string"
62
+ },
63
+ "select": {
64
+ "type": "string"
65
+ },
66
+ "filter": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "array",
70
+ "minItems": 3,
71
+ "maxItems": 3,
72
+ "items": [
73
+ {
74
+ "type": "string"
75
+ },
76
+ {
77
+ "type": "string"
78
+ },
79
+ {}
80
+ ]
81
+ }
82
+ },
83
+ "refresh": {
84
+ "anyOf": [
85
+ {
86
+ "type": "object",
87
+ "properties": {
88
+ "mode": {
89
+ "type": "string",
90
+ "const": "manual"
91
+ }
92
+ },
93
+ "required": [
94
+ "mode"
95
+ ],
96
+ "additionalProperties": false
97
+ },
98
+ {
99
+ "type": "object",
100
+ "properties": {
101
+ "mode": {
102
+ "type": "string",
103
+ "const": "interval"
104
+ },
105
+ "every": {
106
+ "type": "string",
107
+ "pattern": "^\\d+\\s*(s|m|h|d)$"
108
+ },
109
+ "onFocus": {
110
+ "type": "boolean"
111
+ }
112
+ },
113
+ "required": [
114
+ "mode",
115
+ "every"
116
+ ],
117
+ "additionalProperties": false
118
+ },
119
+ {
120
+ "type": "object",
121
+ "properties": {
122
+ "mode": {
123
+ "type": "string",
124
+ "const": "watch"
125
+ }
126
+ },
127
+ "required": [
128
+ "mode"
129
+ ],
130
+ "additionalProperties": false
131
+ }
132
+ ]
133
+ }
134
+ },
135
+ "required": [
136
+ "type",
137
+ "table",
138
+ "refresh"
139
+ ],
140
+ "additionalProperties": false
141
+ },
142
+ {
143
+ "type": "object",
144
+ "properties": {
145
+ "type": {
146
+ "type": "string",
147
+ "const": "sql"
148
+ },
149
+ "db": {
150
+ "type": "string"
151
+ },
152
+ "query": {
153
+ "type": "string"
154
+ },
155
+ "params": {
156
+ "type": "array",
157
+ "items": {}
158
+ },
159
+ "refresh": {
160
+ "anyOf": [
161
+ {
162
+ "type": "object",
163
+ "properties": {
164
+ "mode": {
165
+ "type": "string",
166
+ "const": "manual"
167
+ }
168
+ },
169
+ "required": [
170
+ "mode"
171
+ ],
172
+ "additionalProperties": false
173
+ },
174
+ {
175
+ "type": "object",
176
+ "properties": {
177
+ "mode": {
178
+ "type": "string",
179
+ "const": "interval"
180
+ },
181
+ "every": {
182
+ "type": "string",
183
+ "pattern": "^\\d+\\s*(s|m|h|d)$"
184
+ },
185
+ "onFocus": {
186
+ "type": "boolean"
187
+ }
188
+ },
189
+ "required": [
190
+ "mode",
191
+ "every"
192
+ ],
193
+ "additionalProperties": false
194
+ },
195
+ {
196
+ "type": "object",
197
+ "properties": {
198
+ "mode": {
199
+ "type": "string",
200
+ "const": "watch"
201
+ }
202
+ },
203
+ "required": [
204
+ "mode"
205
+ ],
206
+ "additionalProperties": false
207
+ }
208
+ ]
209
+ }
210
+ },
211
+ "required": [
212
+ "type",
213
+ "db",
214
+ "query",
215
+ "refresh"
216
+ ],
217
+ "additionalProperties": false
218
+ },
219
+ {
220
+ "type": "object",
221
+ "properties": {
222
+ "type": {
223
+ "type": "string",
224
+ "const": "fetch"
225
+ },
226
+ "url": {
227
+ "type": "string",
228
+ "format": "uri"
229
+ },
230
+ "method": {
231
+ "type": "string",
232
+ "enum": [
233
+ "GET",
234
+ "POST",
235
+ "PUT",
236
+ "PATCH",
237
+ "DELETE"
238
+ ]
239
+ },
240
+ "headers": {
241
+ "type": "object",
242
+ "additionalProperties": {
243
+ "type": "string"
244
+ }
245
+ },
246
+ "refresh": {
247
+ "anyOf": [
248
+ {
249
+ "type": "object",
250
+ "properties": {
251
+ "mode": {
252
+ "type": "string",
253
+ "const": "manual"
254
+ }
255
+ },
256
+ "required": [
257
+ "mode"
258
+ ],
259
+ "additionalProperties": false
260
+ },
261
+ {
262
+ "type": "object",
263
+ "properties": {
264
+ "mode": {
265
+ "type": "string",
266
+ "const": "interval"
267
+ },
268
+ "every": {
269
+ "type": "string",
270
+ "pattern": "^\\d+\\s*(s|m|h|d)$"
271
+ },
272
+ "onFocus": {
273
+ "type": "boolean"
274
+ }
275
+ },
276
+ "required": [
277
+ "mode",
278
+ "every"
279
+ ],
280
+ "additionalProperties": false
281
+ },
282
+ {
283
+ "type": "object",
284
+ "properties": {
285
+ "mode": {
286
+ "type": "string",
287
+ "const": "watch"
288
+ }
289
+ },
290
+ "required": [
291
+ "mode"
292
+ ],
293
+ "additionalProperties": false
294
+ }
295
+ ]
296
+ }
297
+ },
298
+ "required": [
299
+ "type",
300
+ "url",
301
+ "refresh"
302
+ ],
303
+ "additionalProperties": false
304
+ },
305
+ {
306
+ "type": "object",
307
+ "properties": {
308
+ "type": {
309
+ "type": "string",
310
+ "const": "mcp"
311
+ },
312
+ "server": {
313
+ "type": "string"
314
+ },
315
+ "tool": {
316
+ "type": "string"
317
+ },
318
+ "args": {
319
+ "type": "object",
320
+ "additionalProperties": {}
321
+ },
322
+ "refresh": {
323
+ "anyOf": [
324
+ {
325
+ "type": "object",
326
+ "properties": {
327
+ "mode": {
328
+ "type": "string",
329
+ "const": "manual"
330
+ }
331
+ },
332
+ "required": [
333
+ "mode"
334
+ ],
335
+ "additionalProperties": false
336
+ },
337
+ {
338
+ "type": "object",
339
+ "properties": {
340
+ "mode": {
341
+ "type": "string",
342
+ "const": "interval"
343
+ },
344
+ "every": {
345
+ "type": "string",
346
+ "pattern": "^\\d+\\s*(s|m|h|d)$"
347
+ },
348
+ "onFocus": {
349
+ "type": "boolean"
350
+ }
351
+ },
352
+ "required": [
353
+ "mode",
354
+ "every"
355
+ ],
356
+ "additionalProperties": false
357
+ },
358
+ {
359
+ "type": "object",
360
+ "properties": {
361
+ "mode": {
362
+ "type": "string",
363
+ "const": "watch"
364
+ }
365
+ },
366
+ "required": [
367
+ "mode"
368
+ ],
369
+ "additionalProperties": false
370
+ }
371
+ ]
372
+ }
373
+ },
374
+ "required": [
375
+ "type",
376
+ "server",
377
+ "tool",
378
+ "refresh"
379
+ ],
380
+ "additionalProperties": false
381
+ },
382
+ {
383
+ "type": "object",
384
+ "properties": {
385
+ "type": {
386
+ "type": "string",
387
+ "const": "file"
388
+ },
389
+ "path": {
390
+ "type": "string"
391
+ },
392
+ "refresh": {
393
+ "anyOf": [
394
+ {
395
+ "type": "object",
396
+ "properties": {
397
+ "mode": {
398
+ "type": "string",
399
+ "const": "manual"
400
+ }
401
+ },
402
+ "required": [
403
+ "mode"
404
+ ],
405
+ "additionalProperties": false
406
+ },
407
+ {
408
+ "type": "object",
409
+ "properties": {
410
+ "mode": {
411
+ "type": "string",
412
+ "const": "interval"
413
+ },
414
+ "every": {
415
+ "type": "string",
416
+ "pattern": "^\\d+\\s*(s|m|h|d)$"
417
+ },
418
+ "onFocus": {
419
+ "type": "boolean"
420
+ }
421
+ },
422
+ "required": [
423
+ "mode",
424
+ "every"
425
+ ],
426
+ "additionalProperties": false
427
+ },
428
+ {
429
+ "type": "object",
430
+ "properties": {
431
+ "mode": {
432
+ "type": "string",
433
+ "const": "watch"
434
+ }
435
+ },
436
+ "required": [
437
+ "mode"
438
+ ],
439
+ "additionalProperties": false
440
+ }
441
+ ]
442
+ }
443
+ },
444
+ "required": [
445
+ "type",
446
+ "path",
447
+ "refresh"
448
+ ],
449
+ "additionalProperties": false
450
+ }
451
+ ]
452
+ }
453
+ },
454
+ "fallback": {
455
+ "type": "object",
456
+ "properties": {
457
+ "mode": {
458
+ "type": "string",
459
+ "const": "mock"
460
+ },
461
+ "dataTag": {
462
+ "type": "string"
463
+ },
464
+ "data": {
465
+ "type": "string"
466
+ },
467
+ "banner": {
468
+ "type": "string"
469
+ }
470
+ },
471
+ "required": [
472
+ "mode"
473
+ ],
474
+ "additionalProperties": false
475
+ },
476
+ "pin": {
477
+ "type": "object",
478
+ "properties": {
479
+ "suggested": {
480
+ "type": "boolean",
481
+ "default": false
482
+ },
483
+ "section": {
484
+ "type": "string"
485
+ },
486
+ "label": {
487
+ "type": "string"
488
+ },
489
+ "icon": {
490
+ "type": "object",
491
+ "properties": {
492
+ "lucide": {
493
+ "type": "string"
494
+ }
495
+ },
496
+ "additionalProperties": false
497
+ }
498
+ },
499
+ "additionalProperties": false
500
+ },
501
+ "notes": {
502
+ "type": "object",
503
+ "properties": {
504
+ "enabled": {
505
+ "type": "boolean",
506
+ "default": true
507
+ }
508
+ },
509
+ "additionalProperties": false
510
+ },
511
+ "requires": {
512
+ "type": "object",
513
+ "properties": {
514
+ "ikenga": {
515
+ "type": "string"
516
+ },
517
+ "bridge": {
518
+ "type": "string"
519
+ }
520
+ },
521
+ "additionalProperties": false
522
+ },
523
+ "capabilities": {
524
+ "type": "object",
525
+ "properties": {
526
+ "network": {
527
+ "type": "object",
528
+ "properties": {
529
+ "allow": {
530
+ "type": "array",
531
+ "items": {
532
+ "type": "string"
533
+ }
534
+ }
535
+ },
536
+ "required": [
537
+ "allow"
538
+ ],
539
+ "additionalProperties": false
540
+ },
541
+ "supabase": {
542
+ "type": "object",
543
+ "properties": {
544
+ "project": {
545
+ "type": "string"
546
+ },
547
+ "tables": {
548
+ "type": "array",
549
+ "items": {
550
+ "type": "string"
551
+ }
552
+ },
553
+ "rls": {
554
+ "type": "string",
555
+ "enum": [
556
+ "user",
557
+ "service"
558
+ ]
559
+ }
560
+ },
561
+ "additionalProperties": false
562
+ },
563
+ "sqlite": {
564
+ "type": "object",
565
+ "properties": {
566
+ "db": {
567
+ "type": "string"
568
+ },
569
+ "queries": {
570
+ "type": "array",
571
+ "items": {
572
+ "type": "string"
573
+ }
574
+ }
575
+ },
576
+ "required": [
577
+ "db"
578
+ ],
579
+ "additionalProperties": false
580
+ },
581
+ "mcp": {
582
+ "type": "array",
583
+ "items": {
584
+ "type": "object",
585
+ "properties": {
586
+ "server": {
587
+ "type": "string"
588
+ },
589
+ "tools": {
590
+ "type": "array",
591
+ "items": {
592
+ "type": "string"
593
+ }
594
+ }
595
+ },
596
+ "required": [
597
+ "server"
598
+ ],
599
+ "additionalProperties": false
600
+ }
601
+ },
602
+ "fs": {
603
+ "type": "object",
604
+ "properties": {
605
+ "read": {
606
+ "type": "array",
607
+ "items": {
608
+ "type": "string"
609
+ }
610
+ },
611
+ "write": {
612
+ "type": "array",
613
+ "items": {
614
+ "type": "string"
615
+ }
616
+ }
617
+ },
618
+ "additionalProperties": false
619
+ }
620
+ },
621
+ "additionalProperties": false
622
+ }
623
+ },
624
+ "required": [
625
+ "format",
626
+ "formatVersion",
627
+ "id",
628
+ "name",
629
+ "version",
630
+ "dataSources",
631
+ "fallback"
632
+ ],
633
+ "additionalProperties": false
634
+ }
635
+ },
636
+ "$schema": "http://json-schema.org/draft-07/schema#",
637
+ "$id": "https://royalti-io.github.io/ikenga-contract/schemas/artifact/v0.json"
638
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "format": "ikenga-artifact",
3
+ "formatVersion": "0.1",
4
+ "id": "ceo-overview",
5
+ "name": "CEO Overview",
6
+ "version": "0.1.0",
7
+ "description": "Daily exec digest: KPIs, agent activity, notifications, recent docs, calendar, team signals.",
8
+ "license": "BUSL-1.1",
9
+ "icon": { "lucide": "compass" },
10
+ "dataSources": {
11
+ "kpis": {
12
+ "type": "supabase",
13
+ "table": "v_exec_kpis",
14
+ "select": "*",
15
+ "refresh": { "mode": "interval", "every": "1h" }
16
+ },
17
+ "agent_runs": {
18
+ "type": "mcp",
19
+ "server": "mempalace",
20
+ "tool": "mempalace_diary_read",
21
+ "args": { "limit": 8 },
22
+ "refresh": { "mode": "interval", "every": "5m" }
23
+ },
24
+ "notifications": {
25
+ "type": "sql",
26
+ "db": "ikenga.local",
27
+ "query": "select * from notifications where read = 0 order by ts desc limit 6",
28
+ "refresh": { "mode": "manual" }
29
+ },
30
+ "recent_docs": {
31
+ "type": "file",
32
+ "path": "./data/recent_docs.json",
33
+ "refresh": { "mode": "watch" }
34
+ },
35
+ "calendar": {
36
+ "type": "mcp",
37
+ "server": "google-calendar",
38
+ "tool": "list_events",
39
+ "args": { "horizon_hours": 48 },
40
+ "refresh": { "mode": "interval", "every": "15m" }
41
+ },
42
+ "team_signals": {
43
+ "type": "fetch",
44
+ "url": "https://api.royalti.io/internal/mattermost/digest",
45
+ "refresh": { "mode": "interval", "every": "30m" }
46
+ }
47
+ },
48
+ "fallback": {
49
+ "mode": "mock",
50
+ "dataTag": "ikenga-mock-data",
51
+ "banner": "Showing mock data — live host (Ikenga shell) not connected."
52
+ },
53
+ "pin": { "suggested": true, "section": "leadership", "label": "CEO Overview" },
54
+ "notes": { "enabled": true },
55
+ "requires": { "ikenga": ">=0.4", "bridge": "^1.0" }
56
+ }