@datalayer/agent-runtimes 1.3.82 → 1.3.84

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 (52) hide show
  1. package/lib/chat/base/ChatBase.js +16 -0
  2. package/lib/chat/base/loopElement.d.ts +53 -0
  3. package/lib/chat/base/loopElement.js +78 -0
  4. package/lib/chat/base/loopWindow.d.ts +31 -0
  5. package/lib/chat/base/loopWindow.js +74 -0
  6. package/lib/components/a2ui/datalayer/FileUpload.d.ts +10 -2
  7. package/lib/components/a2ui/datalayer/FileUpload.js +10 -7
  8. package/lib/components/a2ui/datalayer/Form.d.ts +2 -0
  9. package/lib/components/a2ui/datalayer/Form.js +26 -2
  10. package/lib/components/a2ui/datalayer/formWidgets.d.ts +19 -0
  11. package/lib/components/a2ui/datalayer/formWidgets.js +51 -0
  12. package/lib/loop/apps/AppComposer.d.ts +39 -4
  13. package/lib/loop/apps/AppComposer.js +191 -19
  14. package/lib/loop/apps/AppRenderer.d.ts +20 -3
  15. package/lib/loop/apps/AppRenderer.js +58 -27
  16. package/lib/loop/apps/appspec.d.ts +2 -0
  17. package/lib/loop/apps/appspec.js +196 -39
  18. package/lib/loop/apps/checks.d.ts +6 -0
  19. package/lib/loop/apps/checks.js +187 -8
  20. package/lib/loop/apps/composer.d.ts +21 -10
  21. package/lib/loop/apps/composer.js +41 -8
  22. package/lib/loop/apps/language.d.ts +68 -0
  23. package/lib/loop/apps/language.js +275 -0
  24. package/lib/loop/apps/settingsInputs.d.ts +29 -0
  25. package/lib/loop/apps/settingsInputs.js +147 -0
  26. package/lib/loop/apps/uploads.d.ts +43 -0
  27. package/lib/loop/apps/uploads.js +66 -0
  28. package/lib/loop/core/index.d.ts +14 -1
  29. package/lib/loop/embed/AppEmbed.d.ts +14 -0
  30. package/lib/loop/embed/AppEmbed.js +64 -2
  31. package/lib/loop/embed/element.js +23 -0
  32. package/lib/loop/embed/embedSession.d.ts +14 -0
  33. package/lib/loop/embed/embedSession.js +34 -0
  34. package/lib/loop/embed/hostBridge.d.ts +22 -1
  35. package/lib/loop/plugins/app-elements/AppElements.d.ts +27 -0
  36. package/lib/loop/plugins/app-elements/AppElements.js +76 -0
  37. package/lib/loop/plugins/app-elements/index.d.ts +20 -0
  38. package/lib/loop/plugins/app-elements/index.js +43 -0
  39. package/lib/loop/plugins/app-page/appPageModel.d.ts +14 -5
  40. package/lib/loop/plugins/app-page/appPageModel.js +82 -88
  41. package/lib/loop/plugins/chat/ChatView.js +10 -2
  42. package/lib/protocols/BrowserAgentAdapter.d.ts +8 -6
  43. package/lib/protocols/BrowserAgentAdapter.js +13 -10
  44. package/lib/runtimes/browser/protocol.d.ts +1 -1
  45. package/lib/specs/agents/agents.js +6 -3
  46. package/lib/specs/apps.js +337 -176
  47. package/lib/specs/appspecSchema.js +455 -88
  48. package/lib/specs/cogs.js +3 -2
  49. package/lib/specs/uiPlugins.js +6 -1
  50. package/lib/types/agentspecs.d.ts +167 -11
  51. package/package.json +1 -1
  52. package/scripts/codegen/generate_apps.py +16 -1
package/lib/specs/apps.js CHANGED
@@ -16,6 +16,7 @@ export const ACCOUNTING_APP_0_0_1 = {
16
16
  model: '',
17
17
  skills: [],
18
18
  backendTools: [],
19
+ tools: [],
19
20
  context: [],
20
21
  contents: [],
21
22
  connections: [
@@ -66,7 +67,9 @@ export const ACCOUNTING_APP_0_0_1 = {
66
67
  ],
67
68
  commands: [],
68
69
  modes: [],
69
- settings: [],
70
+ profiles: [],
71
+ language: 'en',
72
+ translations: {},
70
73
  components: [],
71
74
  assistant: 'wizard',
72
75
  voice: {
@@ -120,6 +123,7 @@ export const ACCOUNTING_APP_0_0_1 = {
120
123
  guards: [],
121
124
  gates: [],
122
125
  track: '',
126
+ code: [],
123
127
  },
124
128
  deployment: {
125
129
  hosted: {
@@ -132,6 +136,7 @@ export const ACCOUNTING_APP_0_0_1 = {
132
136
  memory: '',
133
137
  notifications: [],
134
138
  enabled: true,
139
+ unavailable_because: '',
135
140
  tags: ['example', 'accounting', 'finance', 'odoo', 'a2a', 'team'],
136
141
  icon: 'book',
137
142
  emoji: '🧾',
@@ -156,6 +161,7 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
156
161
  model: '',
157
162
  skills: [],
158
163
  backendTools: [],
164
+ tools: [],
159
165
  context: ['customer-research:0.0.1'],
160
166
  contents: [],
161
167
  connections: [],
@@ -190,24 +196,27 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
190
196
  ],
191
197
  commands: [],
192
198
  modes: [],
193
- settings: [
194
- {
195
- id: 'language',
196
- type: 'select',
197
- label: 'Language',
198
- options: ['English', 'French'],
199
- default: 'English',
200
- },
201
- {
202
- id: 'length',
203
- type: 'slider',
204
- label: 'Questions',
205
- options: [],
206
- default: 8.0,
207
- min: 3.0,
208
- max: 15.0,
199
+ profiles: [],
200
+ settings: {
201
+ type: 'object',
202
+ properties: {
203
+ language: {
204
+ type: 'string',
205
+ title: 'Language',
206
+ enum: ['English', 'French'],
207
+ default: 'English',
208
+ },
209
+ length: {
210
+ type: 'integer',
211
+ title: 'Questions',
212
+ minimum: 3,
213
+ maximum: 15,
214
+ default: 8,
215
+ },
209
216
  },
210
- ],
217
+ },
218
+ language: 'en',
219
+ translations: {},
211
220
  components: [],
212
221
  assistant: 'cat',
213
222
  voice: {
@@ -249,7 +258,7 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
249
258
  "Its code runs in process in Datalayer's own tests with a scripted model: consent asked, a refusal honoured, a reply per message, an insight saved, the result recorded.",
250
259
  ],
251
260
  unverified: [
252
- 'Its agent is switched off in the catalogue: its code has not run with a real model, and its tests have not been run.',
261
+ 'Its code has not run with a real model: its agent was switched on in the catalogue on 2026-10-06, and its tests have not been run.',
253
262
  ],
254
263
  },
255
264
  },
@@ -263,6 +272,7 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
263
272
  guards: [],
264
273
  gates: [],
265
274
  track: '',
275
+ code: [],
266
276
  },
267
277
  deployment: {
268
278
  hosted: {
@@ -274,13 +284,14 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
274
284
  triggers: [],
275
285
  memory: '',
276
286
  notifications: [],
277
- enabled: false,
287
+ enabled: true,
288
+ unavailable_because: '',
278
289
  tags: ['example', 'research', 'python'],
279
290
  icon: 'comment-discussion',
280
291
  emoji: '🎙️',
281
292
  avatar: '',
282
293
  banner: '',
283
- setup: ["The agent 'cog-customer-interviewer:0.0.1' is not enabled."],
294
+ setup: [],
284
295
  };
285
296
  export const DATA_QUALITY_APP_0_0_1 = {
286
297
  schema: 'loop.app/v1',
@@ -296,6 +307,7 @@ export const DATA_QUALITY_APP_0_0_1 = {
296
307
  model: '',
297
308
  skills: [],
298
309
  backendTools: [],
310
+ tools: [],
299
311
  context: [],
300
312
  contents: ['The dataset under investigation'],
301
313
  connections: [],
@@ -315,7 +327,9 @@ export const DATA_QUALITY_APP_0_0_1 = {
315
327
  starters: [],
316
328
  commands: [],
317
329
  modes: [],
318
- settings: [],
330
+ profiles: [],
331
+ language: 'en',
332
+ translations: {},
319
333
  components: [
320
334
  'Card',
321
335
  'Column',
@@ -361,6 +375,7 @@ export const DATA_QUALITY_APP_0_0_1 = {
361
375
  guards: [],
362
376
  gates: [],
363
377
  track: '',
378
+ code: [],
364
379
  },
365
380
  deployment: {
366
381
  hosted: {
@@ -424,12 +439,13 @@ export const DATA_QUALITY_APP_0_0_1 = {
424
439
  decisionModel: 'cloudflare:gtw/typesafe/jev',
425
440
  },
426
441
  enabled: true,
442
+ unavailable_because: '',
427
443
  tags: ['example', 'decision', 'data-quality'],
428
444
  icon: 'filter',
429
445
  emoji: '🧹',
430
446
  avatar: '',
431
447
  banner: '',
432
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
448
+ setup: [],
433
449
  };
434
450
  export const DECIDE_APP_0_0_1 = {
435
451
  schema: 'loop.app/v1',
@@ -445,6 +461,7 @@ export const DECIDE_APP_0_0_1 = {
445
461
  model: '',
446
462
  skills: [],
447
463
  backendTools: ['decide:0.0.1'],
464
+ tools: [],
448
465
  context: [],
449
466
  contents: [],
450
467
  connections: [],
@@ -483,7 +500,9 @@ export const DECIDE_APP_0_0_1 = {
483
500
  ],
484
501
  commands: [],
485
502
  modes: [],
486
- settings: [],
503
+ profiles: [],
504
+ language: 'en',
505
+ translations: {},
487
506
  components: [],
488
507
  assistant: 'wizard',
489
508
  voice: {
@@ -531,6 +550,7 @@ export const DECIDE_APP_0_0_1 = {
531
550
  guards: [],
532
551
  gates: [],
533
552
  track: '',
553
+ code: [],
534
554
  },
535
555
  deployment: {
536
556
  hosted: {
@@ -543,6 +563,7 @@ export const DECIDE_APP_0_0_1 = {
543
563
  memory: '',
544
564
  notifications: [],
545
565
  enabled: true,
566
+ unavailable_because: '',
546
567
  tags: ['example', 'decisions', 'jev'],
547
568
  icon: 'law',
548
569
  emoji: '⚖️',
@@ -564,6 +585,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
564
585
  model: '',
565
586
  skills: [],
566
587
  backendTools: [],
588
+ tools: [],
567
589
  context: [],
568
590
  contents: [],
569
591
  connections: [
@@ -638,7 +660,9 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
638
660
  ],
639
661
  commands: [],
640
662
  modes: [],
641
- settings: [],
663
+ profiles: [],
664
+ language: 'en',
665
+ translations: {},
642
666
  components: [],
643
667
  voice: {
644
668
  enabled: false,
@@ -680,7 +704,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
680
704
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
681
705
  ],
682
706
  recorded: [
683
- "Run end to end on a test mailbox of example mail, a scripted model in place of its agent's (agent-runtimes test_inbox_triage.py, 2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
707
+ "Run end to end in Datalayer's own tests on a test mailbox of example mail, a scripted model in place of its agent's (2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
684
708
  ],
685
709
  unverified: [
686
710
  'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
@@ -698,6 +722,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
698
722
  guards: [],
699
723
  gates: [],
700
724
  track: '',
725
+ code: [],
701
726
  },
702
727
  deployment: {
703
728
  hosted: {
@@ -727,6 +752,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
727
752
  memory: 'mem0',
728
753
  notifications: ['email'],
729
754
  enabled: false,
755
+ unavailable_because: 'It reads and sorts your mail, and a mailbox cannot be connected yet: the Google Workspace connection is still being built.',
730
756
  tags: ['example', 'worker', 'mail'],
731
757
  icon: 'mail',
732
758
  emoji: '📬',
@@ -751,6 +777,7 @@ export const MODEL_CHOICE_APP_0_0_1 = {
751
777
  model: '',
752
778
  skills: [],
753
779
  backendTools: [],
780
+ tools: [],
754
781
  context: [],
755
782
  contents: [
756
783
  'The benchmark run: one configuration per model, its task results, cost and latency',
@@ -773,7 +800,9 @@ export const MODEL_CHOICE_APP_0_0_1 = {
773
800
  starters: [],
774
801
  commands: [],
775
802
  modes: [],
776
- settings: [],
803
+ profiles: [],
804
+ language: 'en',
805
+ translations: {},
777
806
  components: [
778
807
  'Card',
779
808
  'Column',
@@ -822,6 +851,7 @@ export const MODEL_CHOICE_APP_0_0_1 = {
822
851
  guards: [],
823
852
  gates: [],
824
853
  track: '',
854
+ code: [],
825
855
  },
826
856
  deployment: {
827
857
  hosted: {
@@ -938,12 +968,13 @@ export const MODEL_CHOICE_APP_0_0_1 = {
938
968
  decisionModel: 'cloudflare:gtw/typesafe/jev',
939
969
  },
940
970
  enabled: true,
971
+ unavailable_because: '',
941
972
  tags: ['example', 'decision', 'benchmarks', 'models'],
942
973
  icon: 'cpu',
943
974
  emoji: '🧠',
944
975
  avatar: '',
945
976
  banner: '',
946
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
977
+ setup: [],
947
978
  };
948
979
  export const PIPELINE_REPORT_APP_0_0_1 = {
949
980
  schema: 'loop.app/v1',
@@ -959,6 +990,7 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
959
990
  model: '',
960
991
  skills: [],
961
992
  backendTools: [],
993
+ tools: [],
962
994
  context: ['datalayer:0.0.1'],
963
995
  contents: ['Sales pipeline export'],
964
996
  connections: [],
@@ -1003,7 +1035,9 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
1003
1035
  ],
1004
1036
  commands: [],
1005
1037
  modes: [],
1006
- settings: [],
1038
+ profiles: [],
1039
+ language: 'en',
1040
+ translations: {},
1007
1041
  components: [
1008
1042
  'Card',
1009
1043
  'Column',
@@ -1202,6 +1236,7 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
1202
1236
  'quality-drift-review:0.0.1',
1203
1237
  ],
1204
1238
  track: 'financial-reporting:0.0.1',
1239
+ code: [],
1205
1240
  },
1206
1241
  deployment: {
1207
1242
  hosted: {
@@ -1223,6 +1258,7 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
1223
1258
  memory: '',
1224
1259
  notifications: ['email'],
1225
1260
  enabled: false,
1261
+ unavailable_because: 'Ten of the twelve checks it names before a report reaches the board cannot run yet, so no report it builds could pass them and be sent.',
1226
1262
  tags: ['example', 'worker', 'sales', 'reporting'],
1227
1263
  icon: 'graph',
1228
1264
  emoji: '📈',
@@ -1244,6 +1280,7 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1244
1280
  model: '',
1245
1281
  skills: [],
1246
1282
  backendTools: [],
1283
+ tools: [],
1247
1284
  context: [],
1248
1285
  contents: ['Price list'],
1249
1286
  connections: [],
@@ -1263,31 +1300,33 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1263
1300
  starters: [],
1264
1301
  commands: [],
1265
1302
  modes: [],
1266
- settings: [
1267
- {
1268
- id: 'seats',
1269
- type: 'slider',
1270
- label: 'Seats',
1271
- options: [],
1272
- default: 10.0,
1273
- min: 1.0,
1274
- max: 1000.0,
1275
- },
1276
- {
1277
- id: 'plan',
1278
- type: 'select',
1279
- label: 'Plan',
1280
- options: ['Team', 'Business', 'Enterprise'],
1281
- default: 'Team',
1282
- },
1283
- {
1284
- id: 'term',
1285
- type: 'select',
1286
- label: 'Term',
1287
- options: ['Monthly', 'Annual'],
1288
- default: 'Annual',
1303
+ profiles: [],
1304
+ settings: {
1305
+ type: 'object',
1306
+ properties: {
1307
+ seats: {
1308
+ type: 'integer',
1309
+ title: 'Seats',
1310
+ minimum: 1,
1311
+ maximum: 1000,
1312
+ default: 10,
1313
+ },
1314
+ plan: {
1315
+ type: 'string',
1316
+ title: 'Plan',
1317
+ enum: ['Team', 'Business', 'Enterprise'],
1318
+ default: 'Team',
1319
+ },
1320
+ term: {
1321
+ type: 'string',
1322
+ title: 'Term',
1323
+ enum: ['Monthly', 'Annual'],
1324
+ default: 'Annual',
1325
+ },
1289
1326
  },
1290
- ],
1327
+ },
1328
+ language: 'en',
1329
+ translations: {},
1291
1330
  components: [
1292
1331
  'Card',
1293
1332
  'Column',
@@ -1447,7 +1486,7 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1447
1486
  ],
1448
1487
  recorded: [],
1449
1488
  unverified: [
1450
- 'Its agent is switched off in the catalogue: no quote has been computed live.',
1489
+ 'No quote has been computed live: its agent was switched on in the catalogue on 2026-10-06 and has not run it yet.',
1451
1490
  'Its tests have not been run.',
1452
1491
  ],
1453
1492
  },
@@ -1462,6 +1501,7 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1462
1501
  guards: [],
1463
1502
  gates: [],
1464
1503
  track: '',
1504
+ code: [],
1465
1505
  },
1466
1506
  deployment: {
1467
1507
  hosted: {
@@ -1477,13 +1517,14 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1477
1517
  triggers: [],
1478
1518
  memory: '',
1479
1519
  notifications: [],
1480
- enabled: false,
1520
+ enabled: true,
1521
+ unavailable_because: '',
1481
1522
  tags: ['example', 'widget'],
1482
1523
  icon: 'number',
1483
1524
  emoji: '🧮',
1484
1525
  avatar: '',
1485
1526
  banner: '',
1486
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
1527
+ setup: [],
1487
1528
  };
1488
1529
  export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1489
1530
  schema: 'loop.app/v1',
@@ -1499,6 +1540,7 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1499
1540
  model: '',
1500
1541
  skills: [],
1501
1542
  backendTools: [],
1543
+ tools: [],
1502
1544
  context: [],
1503
1545
  contents: [],
1504
1546
  connections: [],
@@ -1524,22 +1566,25 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1524
1566
  starters: [],
1525
1567
  commands: [],
1526
1568
  modes: [],
1527
- settings: [
1528
- {
1529
- id: 'report',
1530
- type: 'select',
1531
- label: 'Report',
1532
- options: ['Summary', 'Full'],
1533
- default: 'Summary',
1534
- },
1535
- {
1536
- id: 'question',
1537
- type: 'text',
1538
- label: 'What to look at',
1539
- options: [],
1540
- default: '',
1569
+ profiles: [],
1570
+ settings: {
1571
+ type: 'object',
1572
+ properties: {
1573
+ report: {
1574
+ type: 'string',
1575
+ title: 'Report',
1576
+ enum: ['Summary', 'Full'],
1577
+ default: 'Summary',
1578
+ },
1579
+ question: {
1580
+ type: 'string',
1581
+ title: 'What to look at',
1582
+ default: '',
1583
+ },
1541
1584
  },
1542
- ],
1585
+ },
1586
+ language: 'en',
1587
+ translations: {},
1543
1588
  components: [
1544
1589
  'Card',
1545
1590
  'Column',
@@ -1693,7 +1738,7 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1693
1738
  "Its code runs in process in Datalayer's own tests with a scripted model: a CSV asked for and reported on, a PDF refused, a file given on its page answering what its code asks.",
1694
1739
  ],
1695
1740
  unverified: [
1696
- 'Its agent is switched off in the catalogue: no real model has written a report, and its tests have not been run.',
1741
+ 'No real model has written a report: its agent was switched on in the catalogue on 2026-10-06, and its tests have not been run.',
1697
1742
  'The report is kept in its record; no download link is drawn yet.',
1698
1743
  ],
1699
1744
  },
@@ -1708,6 +1753,7 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1708
1753
  guards: [],
1709
1754
  gates: [],
1710
1755
  track: '',
1756
+ code: [],
1711
1757
  },
1712
1758
  deployment: {
1713
1759
  hosted: {
@@ -1723,13 +1769,14 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1723
1769
  triggers: [],
1724
1770
  memory: '',
1725
1771
  notifications: [],
1726
- enabled: false,
1772
+ enabled: true,
1773
+ unavailable_because: '',
1727
1774
  tags: ['example', 'widget', 'python'],
1728
1775
  icon: 'file',
1729
1776
  emoji: '📑',
1730
1777
  avatar: '',
1731
1778
  banner: '',
1732
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
1779
+ setup: [],
1733
1780
  };
1734
1781
  export const SALES_APP_0_0_1 = {
1735
1782
  schema: 'loop.app/v1',
@@ -1745,6 +1792,7 @@ export const SALES_APP_0_0_1 = {
1745
1792
  model: '',
1746
1793
  skills: [],
1747
1794
  backendTools: [],
1795
+ tools: [],
1748
1796
  context: [],
1749
1797
  contents: [],
1750
1798
  connections: [],
@@ -1777,7 +1825,9 @@ export const SALES_APP_0_0_1 = {
1777
1825
  ],
1778
1826
  commands: [],
1779
1827
  modes: [],
1780
- settings: [],
1828
+ profiles: [],
1829
+ language: 'en',
1830
+ translations: {},
1781
1831
  components: [],
1782
1832
  assistant: 'paperclip',
1783
1833
  voice: {
@@ -1830,6 +1880,7 @@ export const SALES_APP_0_0_1 = {
1830
1880
  guards: [],
1831
1881
  gates: [],
1832
1882
  track: '',
1883
+ code: [],
1833
1884
  },
1834
1885
  deployment: {
1835
1886
  hosted: {
@@ -1842,6 +1893,7 @@ export const SALES_APP_0_0_1 = {
1842
1893
  memory: '',
1843
1894
  notifications: [],
1844
1895
  enabled: true,
1896
+ unavailable_because: '',
1845
1897
  tags: ['example', 'sales', 'finance', 'a2a', 'team'],
1846
1898
  icon: 'briefcase',
1847
1899
  emoji: '💼',
@@ -1865,6 +1917,7 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
1865
1917
  model: '',
1866
1918
  skills: [],
1867
1919
  backendTools: [],
1920
+ tools: [],
1868
1921
  context: [],
1869
1922
  contents: ['The benchmark run: task results, traces, cost and latency'],
1870
1923
  connections: [],
@@ -1884,7 +1937,9 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
1884
1937
  starters: [],
1885
1938
  commands: [],
1886
1939
  modes: [],
1887
- settings: [],
1940
+ profiles: [],
1941
+ language: 'en',
1942
+ translations: {},
1888
1943
  components: [
1889
1944
  'Card',
1890
1945
  'Column',
@@ -1931,6 +1986,7 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
1931
1986
  guards: [],
1932
1987
  gates: [],
1933
1988
  track: '',
1989
+ code: [],
1934
1990
  },
1935
1991
  deployment: {
1936
1992
  hosted: {
@@ -2022,12 +2078,13 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
2022
2078
  decisionModel: 'cloudflare:gtw/typesafe/jev',
2023
2079
  },
2024
2080
  enabled: true,
2081
+ unavailable_because: '',
2025
2082
  tags: ['example', 'decision', 'benchmarks'],
2026
2083
  icon: 'checklist',
2027
2084
  emoji: '🚢',
2028
2085
  avatar: '',
2029
2086
  banner: '',
2030
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
2087
+ setup: [],
2031
2088
  };
2032
2089
  export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2033
2090
  schema: 'loop.app/v1',
@@ -2043,6 +2100,7 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2043
2100
  model: '',
2044
2101
  skills: [],
2045
2102
  backendTools: [],
2103
+ tools: [],
2046
2104
  context: [],
2047
2105
  contents: ['Order history', 'Supplier price lists', 'Delivery records'],
2048
2106
  connections: [],
@@ -2062,7 +2120,9 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2062
2120
  starters: [],
2063
2121
  commands: [],
2064
2122
  modes: [],
2065
- settings: [],
2123
+ profiles: [],
2124
+ language: 'en',
2125
+ translations: {},
2066
2126
  components: [
2067
2127
  'Card',
2068
2128
  'Column',
@@ -2111,6 +2171,7 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2111
2171
  guards: [],
2112
2172
  gates: [],
2113
2173
  track: '',
2174
+ code: [],
2114
2175
  },
2115
2176
  deployment: {
2116
2177
  hosted: {
@@ -2187,12 +2248,13 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2187
2248
  decisionModel: 'cloudflare:gtw/typesafe/jev',
2188
2249
  },
2189
2250
  enabled: true,
2251
+ unavailable_because: '',
2190
2252
  tags: ['example', 'decision', 'procurement'],
2191
2253
  icon: 'package',
2192
2254
  emoji: '🚚',
2193
2255
  avatar: '',
2194
2256
  banner: '',
2195
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
2257
+ setup: [],
2196
2258
  };
2197
2259
  export const SUPPORT_DESK_APP_0_0_1 = {
2198
2260
  schema: 'loop.app/v1',
@@ -2208,6 +2270,7 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2208
2270
  model: '',
2209
2271
  skills: [],
2210
2272
  backendTools: [],
2273
+ tools: [],
2211
2274
  context: [],
2212
2275
  contents: ['Product documentation', 'Returns policy'],
2213
2276
  connections: [],
@@ -2228,27 +2291,74 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2228
2291
  {
2229
2292
  label: 'Reset my password',
2230
2293
  message: 'How do I reset my password?',
2294
+ category: 'Account',
2231
2295
  },
2232
2296
  {
2233
2297
  label: 'Returns',
2234
2298
  message: 'Can I return a product I bought six weeks ago?',
2299
+ category: 'Orders',
2235
2300
  },
2236
2301
  {
2237
2302
  label: 'Plans',
2238
2303
  message: 'What is the difference between the Team and the Business plan?',
2304
+ category: 'Account',
2239
2305
  },
2240
2306
  ],
2241
2307
  commands: [],
2242
2308
  modes: [],
2243
- settings: [
2244
- {
2245
- id: 'product',
2246
- type: 'select',
2247
- label: 'Product',
2248
- options: ['Cloud', 'Desktop'],
2249
- default: 'Cloud',
2309
+ profiles: [],
2310
+ settings: {
2311
+ type: 'object',
2312
+ properties: {
2313
+ product: {
2314
+ type: 'string',
2315
+ title: 'Product',
2316
+ enum: ['Cloud', 'Desktop'],
2317
+ default: 'Cloud',
2318
+ },
2250
2319
  },
2251
- ],
2320
+ },
2321
+ settingsUi: {
2322
+ product: {
2323
+ 'ui:widget': 'radio',
2324
+ },
2325
+ },
2326
+ language: 'en',
2327
+ translations: {
2328
+ fr: {
2329
+ name: 'Service client',
2330
+ description: '',
2331
+ welcome: 'Posez-moi vos questions sur le produit. Je réponds à partir de sa documentation et vous montre où ; quand elle ne le dit pas, je vous le dis.',
2332
+ starters: {
2333
+ 'Reset my password': {
2334
+ label: 'Réinitialiser mon mot de passe',
2335
+ message: 'Comment réinitialiser mon mot de passe ?',
2336
+ },
2337
+ Returns: {
2338
+ label: 'Retours',
2339
+ message: 'Puis-je retourner un produit acheté il y a six semaines ?',
2340
+ },
2341
+ Plans: {
2342
+ label: 'Offres',
2343
+ message: "Quelle est la différence entre l'offre Team et l'offre Business ?",
2344
+ },
2345
+ },
2346
+ categories: {
2347
+ Account: 'Compte',
2348
+ Orders: 'Commandes',
2349
+ },
2350
+ settings: {
2351
+ product: {
2352
+ title: 'Produit',
2353
+ description: '',
2354
+ options: {},
2355
+ },
2356
+ },
2357
+ commands: {},
2358
+ modes: {},
2359
+ profiles: {},
2360
+ },
2361
+ },
2252
2362
  components: [
2253
2363
  'Card',
2254
2364
  'Column',
@@ -2406,7 +2516,7 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2406
2516
  live: [],
2407
2517
  recorded: [],
2408
2518
  unverified: [
2409
- 'Its agent is switched off in the catalogue: no conversation has run.',
2519
+ 'No conversation has run: its agent was switched on in the catalogue on 2026-10-06 and has not answered yet.',
2410
2520
  'Its two documents are named, not given: a builder gives their own on What it knows.',
2411
2521
  'Its tests have not been run.',
2412
2522
  ],
@@ -2422,6 +2532,7 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2422
2532
  guards: [],
2423
2533
  gates: [],
2424
2534
  track: '',
2535
+ code: [],
2425
2536
  },
2426
2537
  deployment: {
2427
2538
  hosted: {
@@ -2437,13 +2548,14 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2437
2548
  triggers: [],
2438
2549
  memory: '',
2439
2550
  notifications: [],
2440
- enabled: false,
2551
+ enabled: true,
2552
+ unavailable_because: '',
2441
2553
  tags: ['example', 'support'],
2442
2554
  icon: 'question',
2443
2555
  emoji: '🛟',
2444
2556
  avatar: '',
2445
2557
  banner: '',
2446
- setup: ["The agent 'worker-document-qa:0.0.1' is not enabled."],
2558
+ setup: [],
2447
2559
  };
2448
2560
  export const WEB_RESEARCH_APP_0_0_1 = {
2449
2561
  schema: 'loop.app/v1',
@@ -2459,6 +2571,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2459
2571
  model: '',
2460
2572
  skills: [],
2461
2573
  backendTools: [],
2574
+ tools: [],
2462
2575
  context: ['web-research:0.0.1'],
2463
2576
  contents: [],
2464
2577
  connections: [
@@ -2498,15 +2611,20 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2498
2611
  ],
2499
2612
  commands: [],
2500
2613
  modes: [],
2501
- settings: [
2502
- {
2503
- id: 'depth',
2504
- type: 'select',
2505
- label: 'How far to look',
2506
- options: ['Quick', 'Thorough'],
2507
- default: 'Quick',
2614
+ profiles: [],
2615
+ settings: {
2616
+ type: 'object',
2617
+ properties: {
2618
+ depth: {
2619
+ type: 'string',
2620
+ title: 'How far to look',
2621
+ enum: ['Quick', 'Thorough'],
2622
+ default: 'Quick',
2623
+ },
2508
2624
  },
2509
- ],
2625
+ },
2626
+ language: 'en',
2627
+ translations: {},
2510
2628
  components: [],
2511
2629
  voice: {
2512
2630
  enabled: false,
@@ -2556,6 +2674,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2556
2674
  guards: [],
2557
2675
  gates: [],
2558
2676
  track: '',
2677
+ code: [],
2559
2678
  },
2560
2679
  deployment: {
2561
2680
  hosted: {
@@ -2568,6 +2687,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2568
2687
  memory: '',
2569
2688
  notifications: [],
2570
2689
  enabled: true,
2690
+ unavailable_because: '',
2571
2691
  tags: ['example', 'research'],
2572
2692
  icon: 'search',
2573
2693
  emoji: '🔎',
@@ -2723,23 +2843,24 @@ export const APP_SOURCES = {
2723
2843
  message: 'Interview me about my first week with the product.',
2724
2844
  },
2725
2845
  ],
2726
- settings: [
2727
- {
2728
- id: 'language',
2729
- type: 'select',
2730
- label: 'Language',
2731
- options: ['English', 'French'],
2732
- default: 'English',
2733
- },
2734
- {
2735
- id: 'length',
2736
- type: 'slider',
2737
- label: 'Questions',
2738
- default: 8.0,
2739
- min: 3.0,
2740
- max: 15.0,
2846
+ settings: {
2847
+ type: 'object',
2848
+ properties: {
2849
+ language: {
2850
+ type: 'string',
2851
+ title: 'Language',
2852
+ enum: ['English', 'French'],
2853
+ default: 'English',
2854
+ },
2855
+ length: {
2856
+ type: 'integer',
2857
+ title: 'Questions',
2858
+ minimum: 3,
2859
+ maximum: 15,
2860
+ default: 8,
2861
+ },
2741
2862
  },
2742
- ],
2863
+ },
2743
2864
  assistant: 'cat',
2744
2865
  },
2745
2866
  tests: {
@@ -2769,7 +2890,7 @@ export const APP_SOURCES = {
2769
2890
  "Its code runs in process in Datalayer's own tests with a scripted model: consent asked, a refusal honoured, a reply per message, an insight saved, the result recorded.",
2770
2891
  ],
2771
2892
  unverified: [
2772
- 'Its agent is switched off in the catalogue: its code has not run with a real model, and its tests have not been run.',
2893
+ 'Its code has not run with a real model: its agent was switched on in the catalogue on 2026-10-06, and its tests have not been run.',
2773
2894
  ],
2774
2895
  },
2775
2896
  },
@@ -2779,7 +2900,6 @@ export const APP_SOURCES = {
2779
2900
  deployment: {
2780
2901
  hosted: {},
2781
2902
  },
2782
- enabled: false,
2783
2903
  tags: ['example', 'research', 'python'],
2784
2904
  icon: 'comment-discussion',
2785
2905
  emoji: '🎙️',
@@ -3026,7 +3146,7 @@ export const APP_SOURCES = {
3026
3146
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
3027
3147
  ],
3028
3148
  recorded: [
3029
- "Run end to end on a test mailbox of example mail, a scripted model in place of its agent's (agent-runtimes test_inbox_triage.py, 2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
3149
+ "Run end to end in Datalayer's own tests on a test mailbox of example mail, a scripted model in place of its agent's (2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
3030
3150
  ],
3031
3151
  unverified: [
3032
3152
  'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
@@ -3058,6 +3178,7 @@ export const APP_SOURCES = {
3058
3178
  memory: 'mem0',
3059
3179
  notifications: ['email'],
3060
3180
  enabled: false,
3181
+ unavailable_because: 'It reads and sorts your mail, and a mailbox cannot be connected yet: the Google Workspace connection is still being built.',
3061
3182
  tags: ['example', 'worker', 'mail'],
3062
3183
  icon: 'mail',
3063
3184
  emoji: '📬',
@@ -3437,6 +3558,7 @@ export const APP_SOURCES = {
3437
3558
  ],
3438
3559
  notifications: ['email'],
3439
3560
  enabled: false,
3561
+ unavailable_because: 'Ten of the twelve checks it names before a report reaches the board cannot run yet, so no report it builds could pass them and be sent.',
3440
3562
  tags: ['example', 'worker', 'sales', 'reporting'],
3441
3563
  icon: 'graph',
3442
3564
  emoji: '📈',
@@ -3453,30 +3575,30 @@ export const APP_SOURCES = {
3453
3575
  contents: ['Price list'],
3454
3576
  interface: {
3455
3577
  accent: 'sun',
3456
- settings: [
3457
- {
3458
- id: 'seats',
3459
- type: 'slider',
3460
- label: 'Seats',
3461
- default: 10.0,
3462
- min: 1.0,
3463
- max: 1000.0,
3464
- },
3465
- {
3466
- id: 'plan',
3467
- type: 'select',
3468
- label: 'Plan',
3469
- options: ['Team', 'Business', 'Enterprise'],
3470
- default: 'Team',
3471
- },
3472
- {
3473
- id: 'term',
3474
- type: 'select',
3475
- label: 'Term',
3476
- options: ['Monthly', 'Annual'],
3477
- default: 'Annual',
3578
+ settings: {
3579
+ type: 'object',
3580
+ properties: {
3581
+ seats: {
3582
+ type: 'integer',
3583
+ title: 'Seats',
3584
+ minimum: 1,
3585
+ maximum: 1000,
3586
+ default: 10,
3587
+ },
3588
+ plan: {
3589
+ type: 'string',
3590
+ title: 'Plan',
3591
+ enum: ['Team', 'Business', 'Enterprise'],
3592
+ default: 'Team',
3593
+ },
3594
+ term: {
3595
+ type: 'string',
3596
+ title: 'Term',
3597
+ enum: ['Monthly', 'Annual'],
3598
+ default: 'Annual',
3599
+ },
3478
3600
  },
3479
- ],
3601
+ },
3480
3602
  components: [
3481
3603
  'Card',
3482
3604
  'Column',
@@ -3623,7 +3745,7 @@ export const APP_SOURCES = {
3623
3745
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no quote computed.",
3624
3746
  ],
3625
3747
  unverified: [
3626
- 'Its agent is switched off in the catalogue: no quote has been computed live.',
3748
+ 'No quote has been computed live: its agent was switched on in the catalogue on 2026-10-06 and has not run it yet.',
3627
3749
  'Its tests have not been run.',
3628
3750
  ],
3629
3751
  },
@@ -3636,7 +3758,6 @@ export const APP_SOURCES = {
3636
3758
  hosted: {},
3637
3759
  embedded: {},
3638
3760
  },
3639
- enabled: false,
3640
3761
  tags: ['example', 'widget'],
3641
3762
  icon: 'number',
3642
3763
  emoji: '🧮',
@@ -3659,21 +3780,22 @@ export const APP_SOURCES = {
3659
3780
  ],
3660
3781
  interface: {
3661
3782
  accent: 'sky',
3662
- settings: [
3663
- {
3664
- id: 'report',
3665
- type: 'select',
3666
- label: 'Report',
3667
- options: ['Summary', 'Full'],
3668
- default: 'Summary',
3669
- },
3670
- {
3671
- id: 'question',
3672
- type: 'text',
3673
- label: 'What to look at',
3674
- default: '',
3783
+ settings: {
3784
+ type: 'object',
3785
+ properties: {
3786
+ report: {
3787
+ type: 'string',
3788
+ title: 'Report',
3789
+ enum: ['Summary', 'Full'],
3790
+ default: 'Summary',
3791
+ },
3792
+ question: {
3793
+ type: 'string',
3794
+ title: 'What to look at',
3795
+ default: '',
3796
+ },
3675
3797
  },
3676
- ],
3798
+ },
3677
3799
  components: [
3678
3800
  'Card',
3679
3801
  'Column',
@@ -3813,7 +3935,7 @@ export const APP_SOURCES = {
3813
3935
  "Its code runs in process in Datalayer's own tests with a scripted model: a CSV asked for and reported on, a PDF refused, a file given on its page answering what its code asks.",
3814
3936
  ],
3815
3937
  unverified: [
3816
- 'Its agent is switched off in the catalogue: no real model has written a report, and its tests have not been run.',
3938
+ 'No real model has written a report: its agent was switched on in the catalogue on 2026-10-06, and its tests have not been run.',
3817
3939
  'The report is kept in its record; no download link is drawn yet.',
3818
3940
  ],
3819
3941
  },
@@ -3826,7 +3948,6 @@ export const APP_SOURCES = {
3826
3948
  hosted: {},
3827
3949
  embedded: {},
3828
3950
  },
3829
- enabled: false,
3830
3951
  tags: ['example', 'widget', 'python'],
3831
3952
  icon: 'file',
3832
3953
  emoji: '📑',
@@ -4112,25 +4233,64 @@ export const APP_SOURCES = {
4112
4233
  {
4113
4234
  label: 'Reset my password',
4114
4235
  message: 'How do I reset my password?',
4236
+ category: 'Account',
4115
4237
  },
4116
4238
  {
4117
4239
  label: 'Returns',
4118
4240
  message: 'Can I return a product I bought six weeks ago?',
4241
+ category: 'Orders',
4119
4242
  },
4120
4243
  {
4121
4244
  label: 'Plans',
4122
4245
  message: 'What is the difference between the Team and the Business plan?',
4246
+ category: 'Account',
4123
4247
  },
4124
4248
  ],
4125
- settings: [
4126
- {
4127
- id: 'product',
4128
- type: 'select',
4129
- label: 'Product',
4130
- options: ['Cloud', 'Desktop'],
4131
- default: 'Cloud',
4249
+ settings: {
4250
+ type: 'object',
4251
+ properties: {
4252
+ product: {
4253
+ type: 'string',
4254
+ title: 'Product',
4255
+ enum: ['Cloud', 'Desktop'],
4256
+ default: 'Cloud',
4257
+ },
4132
4258
  },
4133
- ],
4259
+ },
4260
+ settings_ui: {
4261
+ product: {
4262
+ 'ui:widget': 'radio',
4263
+ },
4264
+ },
4265
+ translations: {
4266
+ fr: {
4267
+ name: 'Service client',
4268
+ welcome: 'Posez-moi vos questions sur le produit. Je réponds à partir de sa documentation et vous montre où ; quand elle ne le dit pas, je vous le dis.',
4269
+ starters: {
4270
+ 'Reset my password': {
4271
+ label: 'Réinitialiser mon mot de passe',
4272
+ message: 'Comment réinitialiser mon mot de passe ?',
4273
+ },
4274
+ Returns: {
4275
+ label: 'Retours',
4276
+ message: 'Puis-je retourner un produit acheté il y a six semaines ?',
4277
+ },
4278
+ Plans: {
4279
+ label: 'Offres',
4280
+ message: "Quelle est la différence entre l'offre Team et l'offre Business ?",
4281
+ },
4282
+ },
4283
+ categories: {
4284
+ Account: 'Compte',
4285
+ Orders: 'Commandes',
4286
+ },
4287
+ settings: {
4288
+ product: {
4289
+ title: 'Produit',
4290
+ },
4291
+ },
4292
+ },
4293
+ },
4134
4294
  components: [
4135
4295
  'Card',
4136
4296
  'Column',
@@ -4273,7 +4433,7 @@ export const APP_SOURCES = {
4273
4433
  ],
4274
4434
  verified: {
4275
4435
  unverified: [
4276
- 'Its agent is switched off in the catalogue: no conversation has run.',
4436
+ 'No conversation has run: its agent was switched on in the catalogue on 2026-10-06 and has not answered yet.',
4277
4437
  'Its two documents are named, not given: a builder gives their own on What it knows.',
4278
4438
  'Its tests have not been run.',
4279
4439
  ],
@@ -4288,7 +4448,6 @@ export const APP_SOURCES = {
4288
4448
  mode: 'bubble',
4289
4449
  },
4290
4450
  },
4291
- enabled: false,
4292
4451
  tags: ['example', 'support'],
4293
4452
  icon: 'question',
4294
4453
  emoji: '🛟',
@@ -4324,15 +4483,17 @@ export const APP_SOURCES = {
4324
4483
  message: 'Is it true that most data science projects never reach production? Find the primary source.',
4325
4484
  },
4326
4485
  ],
4327
- settings: [
4328
- {
4329
- id: 'depth',
4330
- type: 'select',
4331
- label: 'How far to look',
4332
- options: ['Quick', 'Thorough'],
4333
- default: 'Quick',
4486
+ settings: {
4487
+ type: 'object',
4488
+ properties: {
4489
+ depth: {
4490
+ type: 'string',
4491
+ title: 'How far to look',
4492
+ enum: ['Quick', 'Thorough'],
4493
+ default: 'Quick',
4494
+ },
4334
4495
  },
4335
- ],
4496
+ },
4336
4497
  },
4337
4498
  tests: {
4338
4499
  cases: [