@datalayer/agent-runtimes 1.3.81 โ†’ 1.3.83

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 (72) hide show
  1. package/lib/chat/assistant/SpeechBalloon.js +16 -1
  2. package/lib/chat/base/ChatBase.js +40 -4
  3. package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
  4. package/lib/chat/indicators/McpStatusIndicator.js +13 -6
  5. package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
  6. package/lib/chat/indicators/SkillsStatusIndicator.js +7 -3
  7. package/lib/chat/prompt/InputPrompt.d.ts +4 -1
  8. package/lib/chat/prompt/InputPrompt.js +2 -2
  9. package/lib/chat/prompt/InputPromptBase.d.ts +4 -1
  10. package/lib/chat/prompt/InputPromptBase.js +2 -2
  11. package/lib/chat/prompt/InputPromptLexical.d.ts +7 -1
  12. package/lib/chat/prompt/InputPromptLexical.js +5 -3
  13. package/lib/components/a2ui/datalayer/Form.js +19 -2
  14. package/lib/components/teams/index.d.ts +1 -0
  15. package/lib/components/teams/index.js +1 -0
  16. package/lib/components/teams/usePeerSandbox.d.ts +13 -0
  17. package/lib/components/teams/usePeerSandbox.js +59 -0
  18. package/lib/examples/AgentA2ATeamExample.js +7 -2
  19. package/lib/loop/apps/AppComposer.d.ts +31 -0
  20. package/lib/loop/apps/AppComposer.js +67 -0
  21. package/lib/loop/apps/AppRenderer.d.ts +16 -5
  22. package/lib/loop/apps/AppRenderer.js +49 -16
  23. package/lib/loop/apps/appspec.d.ts +8 -1
  24. package/lib/loop/apps/appspec.js +88 -23
  25. package/lib/loop/apps/checks.js +125 -8
  26. package/lib/loop/apps/composer.d.ts +37 -0
  27. package/lib/loop/apps/composer.js +61 -0
  28. package/lib/loop/apps/index.d.ts +2 -0
  29. package/lib/loop/apps/index.js +2 -0
  30. package/lib/loop/core/index.d.ts +31 -0
  31. package/lib/loop/core/index.js +22 -0
  32. package/lib/loop/embed/AppEmbed.d.ts +46 -7
  33. package/lib/loop/embed/AppEmbed.js +108 -26
  34. package/lib/loop/embed/LoopEmbed.js +2 -0
  35. package/lib/loop/embed/element.js +19 -5
  36. package/lib/loop/embed/embedConfig.d.ts +10 -1
  37. package/lib/loop/embed/embedConfig.js +12 -1
  38. package/lib/loop/embed/embedSession.d.ts +79 -0
  39. package/lib/loop/embed/embedSession.js +136 -0
  40. package/lib/loop/embed/embedTheme.d.ts +12 -9
  41. package/lib/loop/embed/embedTheme.js +32 -22
  42. package/lib/loop/index.d.ts +4 -3
  43. package/lib/loop/index.js +4 -3
  44. package/lib/loop/plugins/agent-capacity/index.d.ts +3 -1
  45. package/lib/loop/plugins/agent-capacity/index.js +2 -1
  46. package/lib/loop/plugins/app-page/appPageModel.d.ts +14 -5
  47. package/lib/loop/plugins/app-page/appPageModel.js +80 -88
  48. package/lib/loop/plugins/chat/ChatView.js +31 -4
  49. package/lib/loop/plugins/chat/index.d.ts +6 -1
  50. package/lib/loop/presets.d.ts +3 -1
  51. package/lib/loop/presets.js +2 -1
  52. package/lib/loop/shell/LoopWorkspace.js +3 -0
  53. package/lib/protocols/BrowserAgentAdapter.d.ts +18 -0
  54. package/lib/protocols/BrowserAgentAdapter.js +35 -2
  55. package/lib/runtimes/__tests__/fixtures/accounting-agent-card.json +8 -0
  56. package/lib/runtimes/browser/a2aPeer.d.ts +11 -0
  57. package/lib/runtimes/browser/a2aPeer.js +15 -1
  58. package/lib/runtimes/browser/protocol.d.ts +3 -0
  59. package/lib/runtimes/browser/protocol.js +2 -1
  60. package/lib/specs/agents/agents.js +6 -3
  61. package/lib/specs/apps.js +216 -176
  62. package/lib/specs/appspecSchema.js +205 -84
  63. package/lib/specs/cogs.js +3 -2
  64. package/lib/types/agentspecs.d.ts +92 -7
  65. package/lib/types/chat.d.ts +29 -1
  66. package/package.json +1 -1
  67. package/scripts/codegen/generate_agents.py +4 -2
  68. package/scripts/codegen/generate_apps.py +0 -1
  69. package/scripts/codegen/generate_backend_tools.py +4 -12
  70. package/scripts/codegen/generate_cogs.py +3 -1
  71. package/scripts/codegen/generate_ui_plugins.py +22 -9
  72. package/scripts/voice/transcribe.mjs +29 -21
package/lib/specs/apps.js CHANGED
@@ -64,7 +64,8 @@ export const ACCOUNTING_APP_0_0_1 = {
64
64
  message: 'Give the trial balance for last month.',
65
65
  },
66
66
  ],
67
- settings: [],
67
+ commands: [],
68
+ modes: [],
68
69
  components: [],
69
70
  assistant: 'wizard',
70
71
  voice: {
@@ -130,6 +131,7 @@ export const ACCOUNTING_APP_0_0_1 = {
130
131
  memory: '',
131
132
  notifications: [],
132
133
  enabled: true,
134
+ unavailable_because: '',
133
135
  tags: ['example', 'accounting', 'finance', 'odoo', 'a2a', 'team'],
134
136
  icon: 'book',
135
137
  emoji: '๐Ÿงพ',
@@ -186,24 +188,26 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
186
188
  message: 'Interview me about my first week with the product.',
187
189
  },
188
190
  ],
189
- settings: [
190
- {
191
- id: 'language',
192
- type: 'select',
193
- label: 'Language',
194
- options: ['English', 'French'],
195
- default: 'English',
196
- },
197
- {
198
- id: 'length',
199
- type: 'slider',
200
- label: 'Questions',
201
- options: [],
202
- default: 8.0,
203
- min: 3.0,
204
- max: 15.0,
191
+ commands: [],
192
+ modes: [],
193
+ settings: {
194
+ type: 'object',
195
+ properties: {
196
+ language: {
197
+ type: 'string',
198
+ title: 'Language',
199
+ enum: ['English', 'French'],
200
+ default: 'English',
201
+ },
202
+ length: {
203
+ type: 'integer',
204
+ title: 'Questions',
205
+ minimum: 3,
206
+ maximum: 15,
207
+ default: 8,
208
+ },
205
209
  },
206
- ],
210
+ },
207
211
  components: [],
208
212
  assistant: 'cat',
209
213
  voice: {
@@ -245,7 +249,7 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
245
249
  "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.",
246
250
  ],
247
251
  unverified: [
248
- 'Its agent is switched off in the catalogue: its code has not run with a real model, and its tests have not been run.',
252
+ '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.',
249
253
  ],
250
254
  },
251
255
  },
@@ -270,13 +274,14 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
270
274
  triggers: [],
271
275
  memory: '',
272
276
  notifications: [],
273
- enabled: false,
277
+ enabled: true,
278
+ unavailable_because: '',
274
279
  tags: ['example', 'research', 'python'],
275
280
  icon: 'comment-discussion',
276
281
  emoji: '๐ŸŽ™๏ธ',
277
282
  avatar: '',
278
283
  banner: '',
279
- setup: ["The agent 'cog-customer-interviewer:0.0.1' is not enabled."],
284
+ setup: [],
280
285
  };
281
286
  export const DATA_QUALITY_APP_0_0_1 = {
282
287
  schema: 'loop.app/v1',
@@ -309,7 +314,8 @@ export const DATA_QUALITY_APP_0_0_1 = {
309
314
  accent: 'green',
310
315
  welcome: '',
311
316
  starters: [],
312
- settings: [],
317
+ commands: [],
318
+ modes: [],
313
319
  components: [
314
320
  'Card',
315
321
  'Column',
@@ -418,12 +424,13 @@ export const DATA_QUALITY_APP_0_0_1 = {
418
424
  decisionModel: 'cloudflare:gtw/typesafe/jev',
419
425
  },
420
426
  enabled: true,
427
+ unavailable_because: '',
421
428
  tags: ['example', 'decision', 'data-quality'],
422
429
  icon: 'filter',
423
430
  emoji: '๐Ÿงน',
424
431
  avatar: '',
425
432
  banner: '',
426
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
433
+ setup: [],
427
434
  };
428
435
  export const DECIDE_APP_0_0_1 = {
429
436
  schema: 'loop.app/v1',
@@ -475,7 +482,8 @@ export const DECIDE_APP_0_0_1 = {
475
482
  message: "Score how positive this review is from 1 to 5: 'Setup took an hour, but support answered fast and it works.'",
476
483
  },
477
484
  ],
478
- settings: [],
485
+ commands: [],
486
+ modes: [],
479
487
  components: [],
480
488
  assistant: 'wizard',
481
489
  voice: {
@@ -535,6 +543,7 @@ export const DECIDE_APP_0_0_1 = {
535
543
  memory: '',
536
544
  notifications: [],
537
545
  enabled: true,
546
+ unavailable_because: '',
538
547
  tags: ['example', 'decisions', 'jev'],
539
548
  icon: 'law',
540
549
  emoji: 'โš–๏ธ',
@@ -628,7 +637,8 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
628
637
  message: 'What arrived since yesterday, and what did you do with it?',
629
638
  },
630
639
  ],
631
- settings: [],
640
+ commands: [],
641
+ modes: [],
632
642
  components: [],
633
643
  voice: {
634
644
  enabled: false,
@@ -670,7 +680,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
670
680
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
671
681
  ],
672
682
  recorded: [
673
- "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.",
683
+ "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.",
674
684
  ],
675
685
  unverified: [
676
686
  'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
@@ -717,6 +727,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
717
727
  memory: 'mem0',
718
728
  notifications: ['email'],
719
729
  enabled: false,
730
+ unavailable_because: 'It reads and sorts your mail, and a mailbox cannot be connected yet: the Google Workspace connection is still being built.',
720
731
  tags: ['example', 'worker', 'mail'],
721
732
  icon: 'mail',
722
733
  emoji: '๐Ÿ“ฌ',
@@ -761,7 +772,8 @@ export const MODEL_CHOICE_APP_0_0_1 = {
761
772
  accent: 'green',
762
773
  welcome: '',
763
774
  starters: [],
764
- settings: [],
775
+ commands: [],
776
+ modes: [],
765
777
  components: [
766
778
  'Card',
767
779
  'Column',
@@ -926,12 +938,13 @@ export const MODEL_CHOICE_APP_0_0_1 = {
926
938
  decisionModel: 'cloudflare:gtw/typesafe/jev',
927
939
  },
928
940
  enabled: true,
941
+ unavailable_because: '',
929
942
  tags: ['example', 'decision', 'benchmarks', 'models'],
930
943
  icon: 'cpu',
931
944
  emoji: '๐Ÿง ',
932
945
  avatar: '',
933
946
  banner: '',
934
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
947
+ setup: [],
935
948
  };
936
949
  export const PIPELINE_REPORT_APP_0_0_1 = {
937
950
  schema: 'loop.app/v1',
@@ -989,7 +1002,8 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
989
1002
  message: "What changed in the pipeline since last week's report?",
990
1003
  },
991
1004
  ],
992
- settings: [],
1005
+ commands: [],
1006
+ modes: [],
993
1007
  components: [
994
1008
  'Card',
995
1009
  'Column',
@@ -1209,6 +1223,7 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
1209
1223
  memory: '',
1210
1224
  notifications: ['email'],
1211
1225
  enabled: false,
1226
+ 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.',
1212
1227
  tags: ['example', 'worker', 'sales', 'reporting'],
1213
1228
  icon: 'graph',
1214
1229
  emoji: '๐Ÿ“ˆ',
@@ -1247,31 +1262,32 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1247
1262
  accent: 'sun',
1248
1263
  welcome: '',
1249
1264
  starters: [],
1250
- settings: [
1251
- {
1252
- id: 'seats',
1253
- type: 'slider',
1254
- label: 'Seats',
1255
- options: [],
1256
- default: 10.0,
1257
- min: 1.0,
1258
- max: 1000.0,
1259
- },
1260
- {
1261
- id: 'plan',
1262
- type: 'select',
1263
- label: 'Plan',
1264
- options: ['Team', 'Business', 'Enterprise'],
1265
- default: 'Team',
1266
- },
1267
- {
1268
- id: 'term',
1269
- type: 'select',
1270
- label: 'Term',
1271
- options: ['Monthly', 'Annual'],
1272
- default: 'Annual',
1265
+ commands: [],
1266
+ modes: [],
1267
+ settings: {
1268
+ type: 'object',
1269
+ properties: {
1270
+ seats: {
1271
+ type: 'integer',
1272
+ title: 'Seats',
1273
+ minimum: 1,
1274
+ maximum: 1000,
1275
+ default: 10,
1276
+ },
1277
+ plan: {
1278
+ type: 'string',
1279
+ title: 'Plan',
1280
+ enum: ['Team', 'Business', 'Enterprise'],
1281
+ default: 'Team',
1282
+ },
1283
+ term: {
1284
+ type: 'string',
1285
+ title: 'Term',
1286
+ enum: ['Monthly', 'Annual'],
1287
+ default: 'Annual',
1288
+ },
1273
1289
  },
1274
- ],
1290
+ },
1275
1291
  components: [
1276
1292
  'Card',
1277
1293
  'Column',
@@ -1431,7 +1447,7 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1431
1447
  ],
1432
1448
  recorded: [],
1433
1449
  unverified: [
1434
- 'Its agent is switched off in the catalogue: no quote has been computed live.',
1450
+ 'No quote has been computed live: its agent was switched on in the catalogue on 2026-10-06 and has not run it yet.',
1435
1451
  'Its tests have not been run.',
1436
1452
  ],
1437
1453
  },
@@ -1461,13 +1477,14 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
1461
1477
  triggers: [],
1462
1478
  memory: '',
1463
1479
  notifications: [],
1464
- enabled: false,
1480
+ enabled: true,
1481
+ unavailable_because: '',
1465
1482
  tags: ['example', 'widget'],
1466
1483
  icon: 'number',
1467
1484
  emoji: '๐Ÿงฎ',
1468
1485
  avatar: '',
1469
1486
  banner: '',
1470
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
1487
+ setup: [],
1471
1488
  };
1472
1489
  export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1473
1490
  schema: 'loop.app/v1',
@@ -1506,22 +1523,24 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1506
1523
  accent: 'sky',
1507
1524
  welcome: '',
1508
1525
  starters: [],
1509
- settings: [
1510
- {
1511
- id: 'report',
1512
- type: 'select',
1513
- label: 'Report',
1514
- options: ['Summary', 'Full'],
1515
- default: 'Summary',
1516
- },
1517
- {
1518
- id: 'question',
1519
- type: 'text',
1520
- label: 'What to look at',
1521
- options: [],
1522
- default: '',
1526
+ commands: [],
1527
+ modes: [],
1528
+ settings: {
1529
+ type: 'object',
1530
+ properties: {
1531
+ report: {
1532
+ type: 'string',
1533
+ title: 'Report',
1534
+ enum: ['Summary', 'Full'],
1535
+ default: 'Summary',
1536
+ },
1537
+ question: {
1538
+ type: 'string',
1539
+ title: 'What to look at',
1540
+ default: '',
1541
+ },
1523
1542
  },
1524
- ],
1543
+ },
1525
1544
  components: [
1526
1545
  'Card',
1527
1546
  'Column',
@@ -1675,7 +1694,7 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1675
1694
  "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.",
1676
1695
  ],
1677
1696
  unverified: [
1678
- 'Its agent is switched off in the catalogue: no real model has written a report, and its tests have not been run.',
1697
+ '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.',
1679
1698
  'The report is kept in its record; no download link is drawn yet.',
1680
1699
  ],
1681
1700
  },
@@ -1705,13 +1724,14 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
1705
1724
  triggers: [],
1706
1725
  memory: '',
1707
1726
  notifications: [],
1708
- enabled: false,
1727
+ enabled: true,
1728
+ unavailable_because: '',
1709
1729
  tags: ['example', 'widget', 'python'],
1710
1730
  icon: 'file',
1711
1731
  emoji: '๐Ÿ“‘',
1712
1732
  avatar: '',
1713
1733
  banner: '',
1714
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
1734
+ setup: [],
1715
1735
  };
1716
1736
  export const SALES_APP_0_0_1 = {
1717
1737
  schema: 'loop.app/v1',
@@ -1757,7 +1777,8 @@ export const SALES_APP_0_0_1 = {
1757
1777
  message: 'What does the trial balance say for last month?',
1758
1778
  },
1759
1779
  ],
1760
- settings: [],
1780
+ commands: [],
1781
+ modes: [],
1761
1782
  components: [],
1762
1783
  assistant: 'paperclip',
1763
1784
  voice: {
@@ -1822,6 +1843,7 @@ export const SALES_APP_0_0_1 = {
1822
1843
  memory: '',
1823
1844
  notifications: [],
1824
1845
  enabled: true,
1846
+ unavailable_because: '',
1825
1847
  tags: ['example', 'sales', 'finance', 'a2a', 'team'],
1826
1848
  icon: 'briefcase',
1827
1849
  emoji: '๐Ÿ’ผ',
@@ -1862,7 +1884,8 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
1862
1884
  accent: 'green',
1863
1885
  welcome: '',
1864
1886
  starters: [],
1865
- settings: [],
1887
+ commands: [],
1888
+ modes: [],
1866
1889
  components: [
1867
1890
  'Card',
1868
1891
  'Column',
@@ -2000,12 +2023,13 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
2000
2023
  decisionModel: 'cloudflare:gtw/typesafe/jev',
2001
2024
  },
2002
2025
  enabled: true,
2026
+ unavailable_because: '',
2003
2027
  tags: ['example', 'decision', 'benchmarks'],
2004
2028
  icon: 'checklist',
2005
2029
  emoji: '๐Ÿšข',
2006
2030
  avatar: '',
2007
2031
  banner: '',
2008
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
2032
+ setup: [],
2009
2033
  };
2010
2034
  export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2011
2035
  schema: 'loop.app/v1',
@@ -2038,7 +2062,8 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2038
2062
  accent: 'green',
2039
2063
  welcome: '',
2040
2064
  starters: [],
2041
- settings: [],
2065
+ commands: [],
2066
+ modes: [],
2042
2067
  components: [
2043
2068
  'Card',
2044
2069
  'Column',
@@ -2163,12 +2188,13 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
2163
2188
  decisionModel: 'cloudflare:gtw/typesafe/jev',
2164
2189
  },
2165
2190
  enabled: true,
2191
+ unavailable_because: '',
2166
2192
  tags: ['example', 'decision', 'procurement'],
2167
2193
  icon: 'package',
2168
2194
  emoji: '๐Ÿšš',
2169
2195
  avatar: '',
2170
2196
  banner: '',
2171
- setup: ["The agent 'jupyter-data-analyst:0.0.1' is not enabled."],
2197
+ setup: [],
2172
2198
  };
2173
2199
  export const SUPPORT_DESK_APP_0_0_1 = {
2174
2200
  schema: 'loop.app/v1',
@@ -2214,15 +2240,19 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2214
2240
  message: 'What is the difference between the Team and the Business plan?',
2215
2241
  },
2216
2242
  ],
2217
- settings: [
2218
- {
2219
- id: 'product',
2220
- type: 'select',
2221
- label: 'Product',
2222
- options: ['Cloud', 'Desktop'],
2223
- default: 'Cloud',
2243
+ commands: [],
2244
+ modes: [],
2245
+ settings: {
2246
+ type: 'object',
2247
+ properties: {
2248
+ product: {
2249
+ type: 'string',
2250
+ title: 'Product',
2251
+ enum: ['Cloud', 'Desktop'],
2252
+ default: 'Cloud',
2253
+ },
2224
2254
  },
2225
- ],
2255
+ },
2226
2256
  components: [
2227
2257
  'Card',
2228
2258
  'Column',
@@ -2380,7 +2410,7 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2380
2410
  live: [],
2381
2411
  recorded: [],
2382
2412
  unverified: [
2383
- 'Its agent is switched off in the catalogue: no conversation has run.',
2413
+ 'No conversation has run: its agent was switched on in the catalogue on 2026-10-06 and has not answered yet.',
2384
2414
  'Its two documents are named, not given: a builder gives their own on What it knows.',
2385
2415
  'Its tests have not been run.',
2386
2416
  ],
@@ -2411,13 +2441,14 @@ export const SUPPORT_DESK_APP_0_0_1 = {
2411
2441
  triggers: [],
2412
2442
  memory: '',
2413
2443
  notifications: [],
2414
- enabled: false,
2444
+ enabled: true,
2445
+ unavailable_because: '',
2415
2446
  tags: ['example', 'support'],
2416
2447
  icon: 'question',
2417
2448
  emoji: '๐Ÿ›Ÿ',
2418
2449
  avatar: '',
2419
2450
  banner: '',
2420
- setup: ["The agent 'worker-document-qa:0.0.1' is not enabled."],
2451
+ setup: [],
2421
2452
  };
2422
2453
  export const WEB_RESEARCH_APP_0_0_1 = {
2423
2454
  schema: 'loop.app/v1',
@@ -2470,15 +2501,19 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2470
2501
  message: 'Is it true that most data science projects never reach production? Find the primary source.',
2471
2502
  },
2472
2503
  ],
2473
- settings: [
2474
- {
2475
- id: 'depth',
2476
- type: 'select',
2477
- label: 'How far to look',
2478
- options: ['Quick', 'Thorough'],
2479
- default: 'Quick',
2504
+ commands: [],
2505
+ modes: [],
2506
+ settings: {
2507
+ type: 'object',
2508
+ properties: {
2509
+ depth: {
2510
+ type: 'string',
2511
+ title: 'How far to look',
2512
+ enum: ['Quick', 'Thorough'],
2513
+ default: 'Quick',
2514
+ },
2480
2515
  },
2481
- ],
2516
+ },
2482
2517
  components: [],
2483
2518
  voice: {
2484
2519
  enabled: false,
@@ -2540,6 +2575,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
2540
2575
  memory: '',
2541
2576
  notifications: [],
2542
2577
  enabled: true,
2578
+ unavailable_because: '',
2543
2579
  tags: ['example', 'research'],
2544
2580
  icon: 'search',
2545
2581
  emoji: '๐Ÿ”Ž',
@@ -2695,23 +2731,24 @@ export const APP_SOURCES = {
2695
2731
  message: 'Interview me about my first week with the product.',
2696
2732
  },
2697
2733
  ],
2698
- settings: [
2699
- {
2700
- id: 'language',
2701
- type: 'select',
2702
- label: 'Language',
2703
- options: ['English', 'French'],
2704
- default: 'English',
2705
- },
2706
- {
2707
- id: 'length',
2708
- type: 'slider',
2709
- label: 'Questions',
2710
- default: 8.0,
2711
- min: 3.0,
2712
- max: 15.0,
2734
+ settings: {
2735
+ type: 'object',
2736
+ properties: {
2737
+ language: {
2738
+ type: 'string',
2739
+ title: 'Language',
2740
+ enum: ['English', 'French'],
2741
+ default: 'English',
2742
+ },
2743
+ length: {
2744
+ type: 'integer',
2745
+ title: 'Questions',
2746
+ minimum: 3,
2747
+ maximum: 15,
2748
+ default: 8,
2749
+ },
2713
2750
  },
2714
- ],
2751
+ },
2715
2752
  assistant: 'cat',
2716
2753
  },
2717
2754
  tests: {
@@ -2741,7 +2778,7 @@ export const APP_SOURCES = {
2741
2778
  "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.",
2742
2779
  ],
2743
2780
  unverified: [
2744
- 'Its agent is switched off in the catalogue: its code has not run with a real model, and its tests have not been run.',
2781
+ '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.',
2745
2782
  ],
2746
2783
  },
2747
2784
  },
@@ -2751,7 +2788,6 @@ export const APP_SOURCES = {
2751
2788
  deployment: {
2752
2789
  hosted: {},
2753
2790
  },
2754
- enabled: false,
2755
2791
  tags: ['example', 'research', 'python'],
2756
2792
  icon: 'comment-discussion',
2757
2793
  emoji: '๐ŸŽ™๏ธ',
@@ -2998,7 +3034,7 @@ export const APP_SOURCES = {
2998
3034
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
2999
3035
  ],
3000
3036
  recorded: [
3001
- "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.",
3037
+ "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.",
3002
3038
  ],
3003
3039
  unverified: [
3004
3040
  'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
@@ -3030,6 +3066,7 @@ export const APP_SOURCES = {
3030
3066
  memory: 'mem0',
3031
3067
  notifications: ['email'],
3032
3068
  enabled: false,
3069
+ unavailable_because: 'It reads and sorts your mail, and a mailbox cannot be connected yet: the Google Workspace connection is still being built.',
3033
3070
  tags: ['example', 'worker', 'mail'],
3034
3071
  icon: 'mail',
3035
3072
  emoji: '๐Ÿ“ฌ',
@@ -3409,6 +3446,7 @@ export const APP_SOURCES = {
3409
3446
  ],
3410
3447
  notifications: ['email'],
3411
3448
  enabled: false,
3449
+ 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.',
3412
3450
  tags: ['example', 'worker', 'sales', 'reporting'],
3413
3451
  icon: 'graph',
3414
3452
  emoji: '๐Ÿ“ˆ',
@@ -3425,30 +3463,30 @@ export const APP_SOURCES = {
3425
3463
  contents: ['Price list'],
3426
3464
  interface: {
3427
3465
  accent: 'sun',
3428
- settings: [
3429
- {
3430
- id: 'seats',
3431
- type: 'slider',
3432
- label: 'Seats',
3433
- default: 10.0,
3434
- min: 1.0,
3435
- max: 1000.0,
3436
- },
3437
- {
3438
- id: 'plan',
3439
- type: 'select',
3440
- label: 'Plan',
3441
- options: ['Team', 'Business', 'Enterprise'],
3442
- default: 'Team',
3443
- },
3444
- {
3445
- id: 'term',
3446
- type: 'select',
3447
- label: 'Term',
3448
- options: ['Monthly', 'Annual'],
3449
- default: 'Annual',
3466
+ settings: {
3467
+ type: 'object',
3468
+ properties: {
3469
+ seats: {
3470
+ type: 'integer',
3471
+ title: 'Seats',
3472
+ minimum: 1,
3473
+ maximum: 1000,
3474
+ default: 10,
3475
+ },
3476
+ plan: {
3477
+ type: 'string',
3478
+ title: 'Plan',
3479
+ enum: ['Team', 'Business', 'Enterprise'],
3480
+ default: 'Team',
3481
+ },
3482
+ term: {
3483
+ type: 'string',
3484
+ title: 'Term',
3485
+ enum: ['Monthly', 'Annual'],
3486
+ default: 'Annual',
3487
+ },
3450
3488
  },
3451
- ],
3489
+ },
3452
3490
  components: [
3453
3491
  'Card',
3454
3492
  'Column',
@@ -3595,7 +3633,7 @@ export const APP_SOURCES = {
3595
3633
  "Its page drawn in the Studio's Preview signed in (2026-10-04); no quote computed.",
3596
3634
  ],
3597
3635
  unverified: [
3598
- 'Its agent is switched off in the catalogue: no quote has been computed live.',
3636
+ 'No quote has been computed live: its agent was switched on in the catalogue on 2026-10-06 and has not run it yet.',
3599
3637
  'Its tests have not been run.',
3600
3638
  ],
3601
3639
  },
@@ -3608,7 +3646,6 @@ export const APP_SOURCES = {
3608
3646
  hosted: {},
3609
3647
  embedded: {},
3610
3648
  },
3611
- enabled: false,
3612
3649
  tags: ['example', 'widget'],
3613
3650
  icon: 'number',
3614
3651
  emoji: '๐Ÿงฎ',
@@ -3631,21 +3668,22 @@ export const APP_SOURCES = {
3631
3668
  ],
3632
3669
  interface: {
3633
3670
  accent: 'sky',
3634
- settings: [
3635
- {
3636
- id: 'report',
3637
- type: 'select',
3638
- label: 'Report',
3639
- options: ['Summary', 'Full'],
3640
- default: 'Summary',
3641
- },
3642
- {
3643
- id: 'question',
3644
- type: 'text',
3645
- label: 'What to look at',
3646
- default: '',
3671
+ settings: {
3672
+ type: 'object',
3673
+ properties: {
3674
+ report: {
3675
+ type: 'string',
3676
+ title: 'Report',
3677
+ enum: ['Summary', 'Full'],
3678
+ default: 'Summary',
3679
+ },
3680
+ question: {
3681
+ type: 'string',
3682
+ title: 'What to look at',
3683
+ default: '',
3684
+ },
3647
3685
  },
3648
- ],
3686
+ },
3649
3687
  components: [
3650
3688
  'Card',
3651
3689
  'Column',
@@ -3785,7 +3823,7 @@ export const APP_SOURCES = {
3785
3823
  "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.",
3786
3824
  ],
3787
3825
  unverified: [
3788
- 'Its agent is switched off in the catalogue: no real model has written a report, and its tests have not been run.',
3826
+ '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.',
3789
3827
  'The report is kept in its record; no download link is drawn yet.',
3790
3828
  ],
3791
3829
  },
@@ -3798,7 +3836,6 @@ export const APP_SOURCES = {
3798
3836
  hosted: {},
3799
3837
  embedded: {},
3800
3838
  },
3801
- enabled: false,
3802
3839
  tags: ['example', 'widget', 'python'],
3803
3840
  icon: 'file',
3804
3841
  emoji: '๐Ÿ“‘',
@@ -4094,15 +4131,17 @@ export const APP_SOURCES = {
4094
4131
  message: 'What is the difference between the Team and the Business plan?',
4095
4132
  },
4096
4133
  ],
4097
- settings: [
4098
- {
4099
- id: 'product',
4100
- type: 'select',
4101
- label: 'Product',
4102
- options: ['Cloud', 'Desktop'],
4103
- default: 'Cloud',
4134
+ settings: {
4135
+ type: 'object',
4136
+ properties: {
4137
+ product: {
4138
+ type: 'string',
4139
+ title: 'Product',
4140
+ enum: ['Cloud', 'Desktop'],
4141
+ default: 'Cloud',
4142
+ },
4104
4143
  },
4105
- ],
4144
+ },
4106
4145
  components: [
4107
4146
  'Card',
4108
4147
  'Column',
@@ -4245,7 +4284,7 @@ export const APP_SOURCES = {
4245
4284
  ],
4246
4285
  verified: {
4247
4286
  unverified: [
4248
- 'Its agent is switched off in the catalogue: no conversation has run.',
4287
+ 'No conversation has run: its agent was switched on in the catalogue on 2026-10-06 and has not answered yet.',
4249
4288
  'Its two documents are named, not given: a builder gives their own on What it knows.',
4250
4289
  'Its tests have not been run.',
4251
4290
  ],
@@ -4260,7 +4299,6 @@ export const APP_SOURCES = {
4260
4299
  mode: 'bubble',
4261
4300
  },
4262
4301
  },
4263
- enabled: false,
4264
4302
  tags: ['example', 'support'],
4265
4303
  icon: 'question',
4266
4304
  emoji: '๐Ÿ›Ÿ',
@@ -4296,15 +4334,17 @@ export const APP_SOURCES = {
4296
4334
  message: 'Is it true that most data science projects never reach production? Find the primary source.',
4297
4335
  },
4298
4336
  ],
4299
- settings: [
4300
- {
4301
- id: 'depth',
4302
- type: 'select',
4303
- label: 'How far to look',
4304
- options: ['Quick', 'Thorough'],
4305
- default: 'Quick',
4337
+ settings: {
4338
+ type: 'object',
4339
+ properties: {
4340
+ depth: {
4341
+ type: 'string',
4342
+ title: 'How far to look',
4343
+ enum: ['Quick', 'Thorough'],
4344
+ default: 'Quick',
4345
+ },
4306
4346
  },
4307
- ],
4347
+ },
4308
4348
  },
4309
4349
  tests: {
4310
4350
  cases: [