@datalayer/agent-runtimes 1.3.103 → 1.3.105

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 (143) hide show
  1. package/dist-embed/chunks/{AgentDetails-CO9iM59C.js → AgentDetails-eWkEnFI1.js} +1 -1
  2. package/dist-embed/chunks/{AgentDetailsDialog-DmD6xm6k.js → AgentDetailsDialog-BXJek5nf.js} +1 -1
  3. package/dist-embed/chunks/{AgentInspector-kDMuvh45.js → AgentInspector-B1wLMu4Z.js} +1 -1
  4. package/dist-embed/chunks/{AgentInspectorDialog-fT96Pb4Z.js → AgentInspectorDialog-DcLrhdWo.js} +1 -1
  5. package/dist-embed/chunks/Avatar-BrPfm89P.js +1 -0
  6. package/dist-embed/chunks/{CellSidebarExtension-B-vao30u.js → CellSidebarExtension-BWsHtuqs.js} +2 -2
  7. package/dist-embed/chunks/ChatView-ef0jot57.js +32 -0
  8. package/dist-embed/chunks/DatalayerAgentBridge-DvlGUOdE.js +1 -0
  9. package/dist-embed/chunks/{DeckComponent-Fp6Vw8vN.js → DeckComponent-BfOXdQhk.js} +1 -1
  10. package/dist-embed/chunks/{DocumentView-DKUbyyJg.js → DocumentView-DCgaQoOU.js} +1 -1
  11. package/dist-embed/chunks/{EphemeralDocument-CgYPEfGC.js → EphemeralDocument-DVAfnQWS.js} +1 -1
  12. package/dist-embed/chunks/{EphemeralNotebook-DvDbCKnr.js → EphemeralNotebook-C1ANS_1u.js} +1 -1
  13. package/dist-embed/chunks/{ExcalidrawComponent-BehqBpwC.js → ExcalidrawComponent-0e3KqmKJ.js} +1 -1
  14. package/dist-embed/chunks/{ExcalidrawModal-B2sXbVJB.js → ExcalidrawModal-C5Or1sZ5.js} +1 -1
  15. package/dist-embed/chunks/{Flash-DdFxPtBI.js → Flash-C3nF3s4G.js} +1 -1
  16. package/dist-embed/chunks/{JupyterLexicalExtension-CUsjvchq.js → JupyterLexicalExtension-CEjN8cLT.js} +7 -7
  17. package/dist-embed/chunks/{KernelVariables-BUmOt4yF.js → KernelVariables-DyYN9sSS.js} +1 -1
  18. package/dist-embed/chunks/{NotebookSkeleton-D9WNoiWD.js → NotebookSkeleton-z8GKB7Tb.js} +1 -1
  19. package/dist-embed/chunks/{NotebookToolbar-C2_ZC9Ej.js → NotebookToolbar-Dv7QkxKA.js} +1 -1
  20. package/dist-embed/chunks/{NotebookView-BActuABH.js → NotebookView-CNHzc28A.js} +1 -1
  21. package/dist-embed/chunks/{SandboxDetailsDialog-C0afmOA7.js → SandboxDetailsDialog-D4HA7PZA.js} +1 -1
  22. package/dist-embed/chunks/{SchemaForm-B351kd79.js → SchemaForm-bWlj1cVy.js} +1 -1
  23. package/dist-embed/chunks/{Toolbar-B6ROXJ-2.js → Toolbar-BxAi9T92.js} +1 -1
  24. package/dist-embed/chunks/{YouTubePlugin-CqA-IwCx.js → YouTubePlugin-ZawlUPsx.js} +1 -1
  25. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-DhQlC4AZ.js → ar-SA-G6X2FPQ2-DqE6ftcU.js} +1 -1
  26. package/dist-embed/chunks/{az-AZ-76LH7QW2-CDvJeI6H.js → az-AZ-76LH7QW2-8y_pqJhn.js} +1 -1
  27. package/dist-embed/chunks/{bg-BG-XCXSNQG7-B_2t7dwS.js → bg-BG-XCXSNQG7-4NX5jouU.js} +1 -1
  28. package/dist-embed/chunks/{bn-BD-2XOGV67Q-B7nTDj-4.js → bn-BD-2XOGV67Q-BB87_pS6.js} +1 -1
  29. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-llJD_i9l.js → ca-ES-6MX7JW3Y-B9gyglRE.js} +1 -1
  30. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-Cm_uiYT0.js → cs-CZ-2BRQDIVT-CmZhtHam.js} +1 -1
  31. package/dist-embed/chunks/{da-DK-5WZEPLOC-B0lo6-wZ.js → da-DK-5WZEPLOC-CU6rP6vm.js} +1 -1
  32. package/dist-embed/chunks/{de-DE-XR44H4JA-DZrN-mJo.js → de-DE-XR44H4JA-wk6_Fx0e.js} +1 -1
  33. package/dist-embed/chunks/{el-GR-BZB4AONW-C4D5ZbOc.js → el-GR-BZB4AONW-Cy5yeukb.js} +1 -1
  34. package/dist-embed/chunks/{es-ES-U4NZUMDT-D1yiS-ZI.js → es-ES-U4NZUMDT-Ccr3g95I.js} +1 -1
  35. package/dist-embed/chunks/{eu-ES-A7QVB2H4-Zm3lJsL6.js → eu-ES-A7QVB2H4-u0DKk40F.js} +1 -1
  36. package/dist-embed/chunks/{fa-IR-HGAKTJCU-Dhv2lg_O.js → fa-IR-HGAKTJCU-BYSSU2Gx.js} +1 -1
  37. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-QeFFEfyg.js → fi-FI-Z5N7JZ37-98vDI-0h.js} +1 -1
  38. package/dist-embed/chunks/{fr-FR-RHASNOE6-DjbRpOS6.js → fr-FR-RHASNOE6-D2BvErn0.js} +1 -1
  39. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-C-ev9dqC.js → gl-ES-HMX3MZ6V-DP7FRXtT.js} +1 -1
  40. package/dist-embed/chunks/{he-IL-6SHJWFNN-DHoNpuA6.js → he-IL-6SHJWFNN-B92ZDKBK.js} +1 -1
  41. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-JZJZPoWj.js → hi-IN-IWLTKZ5I-Dw2EhOq2.js} +1 -1
  42. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-RzCikyBW.js → hu-HU-A5ZG7DT2-CVh5JW9n.js} +1 -1
  43. package/dist-embed/chunks/{id-ID-SAP4L64H-Bn08nS9B.js → id-ID-SAP4L64H-CaKn7Yw0.js} +1 -1
  44. package/dist-embed/chunks/{index-DIHzcHI1.js → index-5Mm_lDnH.js} +1 -1
  45. package/dist-embed/chunks/{index-B1StFYI5.js → index-B46RcdCt.js} +1 -1
  46. package/dist-embed/chunks/{index-qzUKNibz.js → index-B6RMWdb4.js} +1 -1
  47. package/dist-embed/chunks/{index-88CEdMmU.js → index-BI_ojvKX.js} +1 -1
  48. package/dist-embed/chunks/{index-uutAM7NJ.js → index-BWxQD9cP.js} +1 -1
  49. package/dist-embed/chunks/{index-DCX_IqLg.js → index-B_WAs-60.js} +1 -1
  50. package/dist-embed/chunks/{index-BYofH50G.js → index-BaEB7wmN.js} +1 -1
  51. package/dist-embed/chunks/{index-C0iUgNwj.js → index-BmSB4k4X.js} +1 -1
  52. package/dist-embed/chunks/{index-KWzHwvvN.js → index-BsGIdntV.js} +4 -4
  53. package/dist-embed/chunks/{index-DgnVcOqG.js → index-BsP7mWx7.js} +1 -1
  54. package/dist-embed/chunks/{index-aX9x7qni.js → index-BzZvBTsd.js} +1 -1
  55. package/dist-embed/chunks/{index-BA2STD4N.js → index-C0ac25cM.js} +2 -2
  56. package/dist-embed/chunks/{index-DLk6Znxv.js → index-C0fJQ9v3.js} +1 -1
  57. package/dist-embed/chunks/{index-Bs1pVq7E.js → index-C0p6TrSH.js} +1 -1
  58. package/dist-embed/chunks/{index-DZN9JYOE.js → index-C9mAUugR.js} +1 -1
  59. package/dist-embed/chunks/{index-B1Egld01.js → index-CNBMan5A.js} +1 -1
  60. package/dist-embed/chunks/{index-1Ekpl0uC.js → index-CawAyW3R.js} +1 -1
  61. package/dist-embed/chunks/{index-DeYQGrTz.js → index-Cb-91zWU.js} +1 -1
  62. package/dist-embed/chunks/{index-B2dtLxcg.js → index-CkMGJGPw.js} +1 -1
  63. package/dist-embed/chunks/{index-Cqur_rhw.js → index-CsbfZWj5.js} +1 -1
  64. package/dist-embed/chunks/{index-DsX9nIHt.js → index-D1HhRyAi.js} +1 -1
  65. package/dist-embed/chunks/{index-C5xKtdLU.js → index-D3ml5vHy.js} +1 -1
  66. package/dist-embed/chunks/{index-CqKV027P.js → index-D7SzNRox.js} +1 -1
  67. package/dist-embed/chunks/{index-BUbwVG__.js → index-DAwoO3Uu.js} +1 -1
  68. package/dist-embed/chunks/{index-DHVYKZ44.js → index-DQaxtq0S.js} +1 -1
  69. package/dist-embed/chunks/{index-BbsUSk_Q.js → index-DbPtsB38.js} +1 -1
  70. package/dist-embed/chunks/{index-DJomc4za.js → index-DoYPeIKg.js} +1 -1
  71. package/dist-embed/chunks/{index-hqa_ODOD.js → index-Dr_NppDz.js} +1 -1
  72. package/dist-embed/chunks/{index-D7rnWGLu.js → index-DuDsMDnx.js} +3 -3
  73. package/dist-embed/chunks/{index-B5MiaXUV.js → index-IIxS-G5t.js} +1 -1
  74. package/dist-embed/chunks/{index-90Ss7516.js → index-W7nq_bBb.js} +1 -1
  75. package/dist-embed/chunks/{index-Cjx6uk6z.js → index-r_7Z9Uyr.js} +1 -1
  76. package/dist-embed/chunks/{index.esm-DlPZAW-m.js → index.esm-D5bfliIL.js} +1 -1
  77. package/dist-embed/chunks/{it-IT-JPQ66NNP-C2vJMuKM.js → it-IT-JPQ66NNP-CJGzhajv.js} +1 -1
  78. package/dist-embed/chunks/{ja-JP-DBVTYXUO-C8KOKQt9.js → ja-JP-DBVTYXUO-Jm7LgxUu.js} +1 -1
  79. package/dist-embed/chunks/{kaa-6HZHGXH3-CvxJbmMB.js → kaa-6HZHGXH3-DH21E_2q.js} +1 -1
  80. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-CQJhf9Nn.js → kab-KAB-ZGHBKWFO-2Cx_3mmx.js} +1 -1
  81. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-Dl6YC0GH.js → kk-KZ-P5N5QNE5-C2v01t5f.js} +1 -1
  82. package/dist-embed/chunks/{km-KH-HSX4SM5Z-QYB-tJ4i.js → km-KH-HSX4SM5Z-WL_JAugw.js} +1 -1
  83. package/dist-embed/chunks/{ko-KR-MTYHY66A-D6yzBqJ5.js → ko-KR-MTYHY66A-DWjrj8WD.js} +1 -1
  84. package/dist-embed/chunks/{ku-TR-6OUDTVRD-C43l2362.js → ku-TR-6OUDTVRD-CwTRLeeu.js} +1 -1
  85. package/dist-embed/chunks/{lt-LT-XHIRWOB4-BG1v5NwF.js → lt-LT-XHIRWOB4-GVGjjS1d.js} +1 -1
  86. package/dist-embed/chunks/{lv-LV-5QDEKY6T-CAwm1y_0.js → lv-LV-5QDEKY6T-C29ftTES.js} +1 -1
  87. package/dist-embed/chunks/{markdown-CH2i4TVR.js → markdown-Bf4-A1yl.js} +1 -1
  88. package/dist-embed/chunks/{mr-IN-CRQNXWMA-DSk6q1fp.js → mr-IN-CRQNXWMA-Cyym_1yB.js} +1 -1
  89. package/dist-embed/chunks/{my-MM-5M5IBNSE-BRiKXulk.js → my-MM-5M5IBNSE-BOkGbWeI.js} +1 -1
  90. package/dist-embed/chunks/{nb-NO-T6EIAALU-CCDnctVd.js → nb-NO-T6EIAALU-BjaVTNUf.js} +1 -1
  91. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-DwStD_Ch.js → nl-NL-IS3SIHDZ-DSVCFPQj.js} +1 -1
  92. package/dist-embed/chunks/{nn-NO-6E72VCQL-DNcfjETk.js → nn-NO-6E72VCQL-D5-_rRv0.js} +1 -1
  93. package/dist-embed/chunks/{oc-FR-POXYY2M6-BOjjS12P.js → oc-FR-POXYY2M6-CxKcn1R4.js} +1 -1
  94. package/dist-embed/chunks/{pa-IN-N4M65BXN-B4y5cv2_.js → pa-IN-N4M65BXN-D9r6O5PP.js} +1 -1
  95. package/dist-embed/chunks/{percentages-BXMCSKIN-BpahO1D1.js → percentages-BXMCSKIN-917PkDRT.js} +3 -3
  96. package/dist-embed/chunks/{pl-PL-T2D74RX3-CfuLoYHB.js → pl-PL-T2D74RX3-CFXCTA5m.js} +1 -1
  97. package/dist-embed/chunks/{plugin-BMH63P5M.js → plugin-CA_0EWiO.js} +1 -1
  98. package/dist-embed/chunks/plugin-LDJjixuG.js +1 -0
  99. package/dist-embed/chunks/{pt-BR-5N22H2LF-Fk60PfdA.js → pt-BR-5N22H2LF-7A-3KOon.js} +1 -1
  100. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-SNAgJ5Vr.js → pt-PT-UZXXM6DQ-BJLo5w79.js} +1 -1
  101. package/dist-embed/chunks/{ro-RO-JPDTUUEW-YkxpKkWn.js → ro-RO-JPDTUUEW-DtvOR1_K.js} +1 -1
  102. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-CaI1rtvc.js → ru-RU-B4JR7IUQ-CGQ0z7l6.js} +1 -1
  103. package/dist-embed/chunks/{sessions-ZDYLkdi_.js → sessions-By2lggFS.js} +2 -2
  104. package/dist-embed/chunks/{si-LK-N5RQ5JYF-CQz29xmh.js → si-LK-N5RQ5JYF-D13wg56d.js} +1 -1
  105. package/dist-embed/chunks/{sk-SK-C5VTKIMK-CZg7PVzd.js → sk-SK-C5VTKIMK-BqAZ0R3f.js} +1 -1
  106. package/dist-embed/chunks/{sl-SI-NN7IZMDC-D-EjMWyZ.js → sl-SI-NN7IZMDC-BjPUGdws.js} +1 -1
  107. package/dist-embed/chunks/{standalone-oyxre9MX.js → standalone-DyCMuq_1.js} +1 -1
  108. package/dist-embed/chunks/{subset-shared.chunk-BIvvzzX2.js → subset-shared.chunk-D-GUkcCO.js} +1 -1
  109. package/dist-embed/chunks/{subset-worker.chunk-DGgI6iRY.js → subset-worker.chunk-Bz8aK3Nt.js} +1 -1
  110. package/dist-embed/chunks/{sv-SE-XGPEYMSR-D8CsNMON.js → sv-SE-XGPEYMSR-DrXTnEWd.js} +1 -1
  111. package/dist-embed/chunks/{ta-IN-2NMHFXQM-CvuxKO7t.js → ta-IN-2NMHFXQM-bK104VxM.js} +1 -1
  112. package/dist-embed/chunks/{th-TH-HPSO5L25-NgQJigwq.js → th-TH-HPSO5L25-BSo6r7L4.js} +1 -1
  113. package/dist-embed/chunks/{tr-TR-DEFEU3FU-eu9-qLmi.js → tr-TR-DEFEU3FU-pYKvN-ro.js} +1 -1
  114. package/dist-embed/chunks/{uk-UA-QMV73CPH-CbjmuLVL.js → uk-UA-QMV73CPH-DFR0z9gx.js} +1 -1
  115. package/dist-embed/chunks/{usePrimerThemeBridge-LgREOVgz.js → usePrimerThemeBridge-CuRRiOcg.js} +1 -1
  116. package/dist-embed/chunks/{vi-VN-M7AON7JQ-u84yOuJ-.js → vi-VN-M7AON7JQ-BwMeNi1s.js} +1 -1
  117. package/dist-embed/chunks/{zh-CN-LNUGB5OW-ojkSgl-t.js → zh-CN-LNUGB5OW-QC_JIHYo.js} +1 -1
  118. package/dist-embed/chunks/{zh-HK-E62DVLB3-C6M89-Da.js → zh-HK-E62DVLB3-BHs8J1Gl.js} +1 -1
  119. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-BaTtFORh.js → zh-TW-RAJ6MFWO-DpqpYlIS.js} +1 -1
  120. package/dist-embed/datalayer-app-main.js +330 -59
  121. package/lib/apps/apps/AppBrowserSandbox.d.ts +7 -0
  122. package/lib/apps/apps/AppBrowserSandbox.js +52 -0
  123. package/lib/apps/apps/AppRenderer.js +11 -2
  124. package/lib/apps/apps/appspec.js +31 -0
  125. package/lib/apps/apps/browserSandbox.d.ts +69 -0
  126. package/lib/apps/apps/browserSandbox.js +159 -0
  127. package/lib/apps/apps/index.d.ts +2 -0
  128. package/lib/apps/apps/index.js +2 -0
  129. package/lib/apps/plugins/chat/ChatView.js +59 -7
  130. package/lib/components/inspector/a2aSpans.js +5 -1
  131. package/lib/index.d.ts +1 -0
  132. package/lib/index.js +1 -0
  133. package/lib/pap/index.d.ts +42 -0
  134. package/lib/pap/index.js +57 -0
  135. package/lib/specs/apps.js +345 -8
  136. package/lib/specs/appspecSchema.js +79 -0
  137. package/lib/types/agentspecs.d.ts +28 -0
  138. package/package.json +2 -1
  139. package/scripts/codegen/generate_apps.py +3 -2
  140. package/dist-embed/chunks/Avatar-Dqz3ZWjZ.js +0 -1
  141. package/dist-embed/chunks/ChatView-CubqJum2.js +0 -288
  142. package/dist-embed/chunks/DatalayerAgentBridge-BmJbZ2Lk.js +0 -1
  143. package/dist-embed/chunks/plugin-DZPXm2dP.js +0 -1
@@ -0,0 +1,57 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { AgentIdentityClient, discoverCompany, } from '@datalayer/personal-agent-protocol';
6
+ function extensionVersions(extensions) {
7
+ return Object.freeze(Object.fromEntries(Object.entries(extensions).map(([name, value]) => [name, value.version])));
8
+ }
9
+ /**
10
+ * Use PAP clients while enforcing Agent Runtimes' public-summary boundary.
11
+ *
12
+ * Authorization URLs, callback state, assertions, proofs, and tokens are not
13
+ * represented by this API. Those values remain in deterministic host
14
+ * services and cross runtime boundaries only as opaque references.
15
+ */
16
+ export class PapPersonalAgentCapability {
17
+ #discover;
18
+ #identity;
19
+ constructor(options = {}) {
20
+ this.#discover = options.discover ?? discoverCompany;
21
+ this.#identity = options.identity ?? new AgentIdentityClient();
22
+ }
23
+ async discoverCompany(domain, options = {}) {
24
+ const company = await this.#discover(domain, options);
25
+ const { document } = company;
26
+ const signIn = ['direct', 'device', 'mediated'].filter(method => document.auth?.[method] !== undefined);
27
+ const interfaces = [
28
+ ...(document.agent?.protocols.map(protocol => `agent:${protocol.type}`) ??
29
+ []),
30
+ ...document.apis.map(api => `api:${api.type}`),
31
+ ...(document.web === undefined ? [] : ['web']),
32
+ ];
33
+ return Object.freeze({
34
+ organization: document.organization.name,
35
+ domain: document.organization.domain,
36
+ protocolVersion: document.protocol_version,
37
+ issuer: document.auth?.issuer ?? null,
38
+ signIn: Object.freeze(signIn),
39
+ interfaces: Object.freeze(interfaces),
40
+ extensions: extensionVersions(document.extensions),
41
+ });
42
+ }
43
+ async inspectAgent(clientId, options = {}) {
44
+ const metadata = await this.#identity.fetchMetadata(clientId, options);
45
+ const keys = await this.#identity.fetchJwks(clientId, options);
46
+ const signingAlgorithms = [
47
+ ...new Set(keys.keys.map(key => key.alg ?? (key.kty === 'EC' ? 'ES256' : 'RS256'))),
48
+ ].sort();
49
+ return Object.freeze({
50
+ clientId: metadata.client_id,
51
+ clientName: metadata.client_name,
52
+ redirectCount: metadata.redirect_uris.length,
53
+ signingAlgorithms: Object.freeze(signingAlgorithms),
54
+ extensions: extensionVersions(metadata.extensions),
55
+ });
56
+ }
57
+ }
package/lib/specs/apps.js CHANGED
@@ -139,6 +139,10 @@ export const ACCOUNTING_APP_0_0_1 = {
139
139
  triggers: [],
140
140
  memory: '',
141
141
  notifications: [],
142
+ samples: {
143
+ documents: [],
144
+ alternatives: [],
145
+ },
142
146
  enabled: true,
143
147
  unavailable_because: '',
144
148
  tags: ['example', 'accounting', 'finance', 'odoo', 'a2a', 'team'],
@@ -287,6 +291,10 @@ export const CHANGE_DETECTION_APP_0_0_1 = {
287
291
  triggers: [],
288
292
  memory: '',
289
293
  notifications: [],
294
+ samples: {
295
+ documents: [],
296
+ alternatives: [],
297
+ },
290
298
  enabled: true,
291
299
  unavailable_because: '',
292
300
  tags: [
@@ -443,6 +451,10 @@ export const CROP_MONITORING_APP_0_0_1 = {
443
451
  triggers: [],
444
452
  memory: '',
445
453
  notifications: [],
454
+ samples: {
455
+ documents: [],
456
+ alternatives: [],
457
+ },
446
458
  enabled: true,
447
459
  unavailable_because: '',
448
460
  tags: [
@@ -596,6 +608,10 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
596
608
  triggers: [],
597
609
  memory: '',
598
610
  notifications: [],
611
+ samples: {
612
+ documents: [],
613
+ alternatives: [],
614
+ },
599
615
  enabled: true,
600
616
  unavailable_because: '',
601
617
  tags: ['example', 'research', 'python'],
@@ -748,7 +764,44 @@ export const DATA_QUALITY_APP_0_0_1 = {
748
764
  ],
749
765
  minConfidence: 0.0,
750
766
  scenarios: [],
751
- decisionModel: 'cloudflare:gtw/typesafe/jev',
767
+ decisionModel: 'cloudflare:wrk/typesafe/jev',
768
+ },
769
+ samples: {
770
+ documents: [],
771
+ alternatives: [
772
+ {
773
+ name: 'Prices in cents',
774
+ evidence: 'In the sample orders dataset (12,480 rows), 38 rows from the EU shop carry a unit price one hundred times the catalogue price — 1999 for an item listed at 19.99 — all imported by the same job on 4 March. Divided by one hundred, each matches its catalogue price to the cent. Corrected, total revenue falls by 6.1%.',
775
+ metrics: {
776
+ 'Rows affected': 38.0,
777
+ 'Effect on the result': 6.1,
778
+ },
779
+ },
780
+ {
781
+ name: 'Duplicate orders',
782
+ evidence: '96 order ids appear twice with identical lines, timestamps and amounts, all from a retried upload on 19 April. No order id appears three times. Removing the second copies lowers total revenue by 0.9%.',
783
+ metrics: {
784
+ 'Rows affected': 96.0,
785
+ 'Effect on the result': 0.9,
786
+ },
787
+ },
788
+ {
789
+ name: 'Missing region',
790
+ evidence: '1,032 rows have an empty region, all imported on 2 March from the partner channel; their shipping addresses are filled in and name a country in every case. Total revenue does not move; revenue by region moves by up to 4.5% once the region is read from the address.',
791
+ metrics: {
792
+ 'Rows affected': 1032.0,
793
+ 'Effect on the result': 4.5,
794
+ },
795
+ },
796
+ {
797
+ name: 'Very large orders',
798
+ evidence: '11 orders exceed 40,000 in value, the largest at 182,000. Each is from an account marked as a reseller, and each has an invoice and a delivery record that match its amount. Left out, total revenue would fall by 9.8%, but nothing suggests they are wrong.',
799
+ metrics: {
800
+ 'Rows affected': 11.0,
801
+ 'Effect on the result': 0.0,
802
+ },
803
+ },
804
+ ],
752
805
  },
753
806
  enabled: true,
754
807
  unavailable_because: '',
@@ -874,6 +927,10 @@ export const DECIDE_APP_0_0_1 = {
874
927
  triggers: [],
875
928
  memory: '',
876
929
  notifications: [],
930
+ samples: {
931
+ documents: [],
932
+ alternatives: [],
933
+ },
877
934
  enabled: true,
878
935
  unavailable_because: '',
879
936
  tags: ['example', 'decisions', 'jev'],
@@ -1019,6 +1076,10 @@ export const DISASTER_ASSESSMENT_APP_0_0_1 = {
1019
1076
  triggers: [],
1020
1077
  memory: '',
1021
1078
  notifications: [],
1079
+ samples: {
1080
+ documents: [],
1081
+ alternatives: [],
1082
+ },
1022
1083
  enabled: true,
1023
1084
  unavailable_because: '',
1024
1085
  tags: [
@@ -1153,6 +1214,10 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
1153
1214
  triggers: [],
1154
1215
  memory: '',
1155
1216
  notifications: [],
1217
+ samples: {
1218
+ documents: [],
1219
+ alternatives: [],
1220
+ },
1156
1221
  enabled: true,
1157
1222
  unavailable_because: '',
1158
1223
  tags: [
@@ -1349,6 +1414,10 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
1349
1414
  ],
1350
1415
  memory: 'mem0',
1351
1416
  notifications: ['email'],
1417
+ samples: {
1418
+ documents: [],
1419
+ alternatives: [],
1420
+ },
1352
1421
  enabled: false,
1353
1422
  unavailable_because: 'It reads and sorts your mail, and a mailbox cannot be connected yet: the Google Workspace connection is still being built.',
1354
1423
  tags: ['example', 'worker', 'mail'],
@@ -1563,7 +1632,39 @@ export const MODEL_CHOICE_APP_0_0_1 = {
1563
1632
  },
1564
1633
  },
1565
1634
  ],
1566
- decisionModel: 'cloudflare:gtw/typesafe/jev',
1635
+ decisionModel: 'cloudflare:wrk/typesafe/jev',
1636
+ },
1637
+ samples: {
1638
+ documents: [],
1639
+ alternatives: [
1640
+ {
1641
+ name: 'Large model',
1642
+ evidence: "A sample run of 50 support-ticket summaries: 46 passed. The four failures each left out the customer's account number, which the use case asks for. Every answer kept to the JSON format asked for. Its price per call is published on the Models page, and the run recorded a trajectory for each task.",
1643
+ metrics: {
1644
+ 'Pass rate': 0.92,
1645
+ 'Cost per task': 1.8,
1646
+ Latency: 6.2,
1647
+ },
1648
+ },
1649
+ {
1650
+ name: 'Medium model',
1651
+ evidence: 'The same 50 summaries: 43 passed. Of the seven failures, four left out the account number and three summarised the wrong ticket of a thread. Two answers broke the JSON format with a trailing comment. Its price per call is published, and every task has its trajectory.',
1652
+ metrics: {
1653
+ 'Pass rate': 0.86,
1654
+ 'Cost per task': 0.6,
1655
+ Latency: 3.1,
1656
+ },
1657
+ },
1658
+ {
1659
+ name: 'Small model',
1660
+ evidence: 'The same 50 summaries: 34 passed. Most of the 16 failures invented a resolution the thread never reached, and nine answers broke the JSON format. Its billing is not published on the Models page, and the run kept no trajectory for its failures.',
1661
+ metrics: {
1662
+ 'Pass rate': 0.68,
1663
+ 'Cost per task': 0.2,
1664
+ Latency: 1.4,
1665
+ },
1666
+ },
1667
+ ],
1567
1668
  },
1568
1669
  enabled: true,
1569
1670
  unavailable_because: '',
@@ -1718,6 +1819,10 @@ export const MONTH_END_CLOSE_APP_0_0_1 = {
1718
1819
  triggers: [],
1719
1820
  memory: '',
1720
1821
  notifications: [],
1822
+ samples: {
1823
+ documents: [],
1824
+ alternatives: [],
1825
+ },
1721
1826
  enabled: true,
1722
1827
  unavailable_because: '',
1723
1828
  tags: ['example', 'accounting', 'finance', 'odoo', 'a2a', 'scene'],
@@ -2011,6 +2116,10 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
2011
2116
  ],
2012
2117
  memory: '',
2013
2118
  notifications: ['email'],
2119
+ samples: {
2120
+ documents: [],
2121
+ alternatives: [],
2122
+ },
2014
2123
  enabled: false,
2015
2124
  unavailable_because: 'Seven 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.',
2016
2125
  tags: ['example', 'worker', 'sales', 'reporting'],
@@ -2271,6 +2380,16 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
2271
2380
  triggers: [],
2272
2381
  memory: '',
2273
2382
  notifications: [],
2383
+ samples: {
2384
+ documents: [
2385
+ {
2386
+ name: 'Price list',
2387
+ file: 'price-list.csv',
2388
+ text: 'plan,term,price_per_seat,billed,minimum_seats\nTeam,Monthly,15,each month,1\nTeam,Annual,144,each year,1\nBusiness,Monthly,30,each month,5\nBusiness,Annual,288,each year,5\nEnterprise,Monthly,55,each month,25\nEnterprise,Annual,528,each year,25\n',
2389
+ },
2390
+ ],
2391
+ alternatives: [],
2392
+ },
2274
2393
  enabled: true,
2275
2394
  unavailable_because: '',
2276
2395
  tags: ['example', 'widget'],
@@ -2523,6 +2642,10 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
2523
2642
  triggers: [],
2524
2643
  memory: '',
2525
2644
  notifications: [],
2645
+ samples: {
2646
+ documents: [],
2647
+ alternatives: [],
2648
+ },
2526
2649
  enabled: true,
2527
2650
  unavailable_because: '',
2528
2651
  tags: ['example', 'widget', 'python'],
@@ -2650,6 +2773,10 @@ export const SALES_APP_0_0_1 = {
2650
2773
  triggers: [],
2651
2774
  memory: '',
2652
2775
  notifications: [],
2776
+ samples: {
2777
+ documents: [],
2778
+ alternatives: [],
2779
+ },
2653
2780
  enabled: true,
2654
2781
  unavailable_because: '',
2655
2782
  tags: ['example', 'sales', 'finance', 'a2a', 'team'],
@@ -2833,7 +2960,39 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
2833
2960
  },
2834
2961
  },
2835
2962
  ],
2836
- decisionModel: 'cloudflare:gtw/typesafe/jev',
2963
+ decisionModel: 'cloudflare:wrk/typesafe/jev',
2964
+ },
2965
+ samples: {
2966
+ documents: [],
2967
+ alternatives: [
2968
+ {
2969
+ name: 'Current prompt',
2970
+ evidence: "A sample run of 80 tasks of a reporting agent: 70 passed. Six of the ten failures gave a wrong total in a quarterly figure, which a reader would act on; four put the table's columns in another order than the template asks. Nobody who reads the reports has complained about the column order.",
2971
+ metrics: {
2972
+ 'Pass rate': 0.875,
2973
+ 'Cost per task': 2.4,
2974
+ Latency: 9.5,
2975
+ },
2976
+ },
2977
+ {
2978
+ name: 'With retrieval',
2979
+ evidence: 'The same 80 tasks with the reports of the last two quarters retrieved first: 76 passed. The four failures are all formatting — a missing unit in a table header — and every figure was right. Each task reads about twice as much, which shows in its cost.',
2980
+ metrics: {
2981
+ 'Pass rate': 0.95,
2982
+ 'Cost per task': 3.9,
2983
+ Latency: 12.8,
2984
+ },
2985
+ },
2986
+ {
2987
+ name: 'Smaller model',
2988
+ evidence: 'The same 80 tasks on a smaller model: 61 passed. Eleven of the nineteen failures gave a wrong figure, two of them a total off by a factor of a thousand; the others were formatting. It is the cheapest and the fastest of the three.',
2989
+ metrics: {
2990
+ 'Pass rate': 0.7625,
2991
+ 'Cost per task': 0.7,
2992
+ Latency: 4.1,
2993
+ },
2994
+ },
2995
+ ],
2837
2996
  },
2838
2997
  enabled: true,
2839
2998
  unavailable_because: '',
@@ -3003,7 +3162,39 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
3003
3162
  ],
3004
3163
  minConfidence: 0.0,
3005
3164
  scenarios: [],
3006
- decisionModel: 'cloudflare:gtw/typesafe/jev',
3165
+ decisionModel: 'cloudflare:wrk/typesafe/jev',
3166
+ },
3167
+ samples: {
3168
+ documents: [],
3169
+ alternatives: [
3170
+ {
3171
+ name: 'Northfield Components',
3172
+ evidence: 'Quotes 18,400 for the 5,000 units, delivery included. Its delivery records show 47 of 50 past deliveries on time. It can make 6,000 units a month. It meets the stated requirements: ISO 9001, delivery within three weeks and payment at 60 days.',
3173
+ metrics: {
3174
+ Price: 18400.0,
3175
+ 'Delivery reliability': 0.94,
3176
+ Capacity: 1.0,
3177
+ },
3178
+ },
3179
+ {
3180
+ name: 'Harbor Supply',
3181
+ evidence: 'Quotes 15,900 for the 5,000 units, plus 900 for delivery. 31 of 40 past deliveries arrived on time, the late ones by a week on average. It can make 4,000 units a month, so the order would ship in two parts. It is ISO 9001 certified, and asks for payment at 30 days.',
3182
+ metrics: {
3183
+ Price: 16800.0,
3184
+ 'Delivery reliability': 0.775,
3185
+ Capacity: 0.8,
3186
+ },
3187
+ },
3188
+ {
3189
+ name: 'Valley Works',
3190
+ evidence: 'Quotes 17,200 for the 5,000 units, delivery included. 12 of its 15 past deliveries arrived on time. It states a capacity of 10,000 units a month, but sent no figure for the last quarter. It meets the delivery and payment terms; its ISO 9001 certificate expired last year and is being renewed.',
3191
+ metrics: {
3192
+ Price: 17200.0,
3193
+ 'Delivery reliability': 0.8,
3194
+ Capacity: 1.0,
3195
+ },
3196
+ },
3197
+ ],
3007
3198
  },
3008
3199
  enabled: true,
3009
3200
  unavailable_because: '',
@@ -3306,6 +3497,10 @@ export const SUPPORT_DESK_APP_0_0_1 = {
3306
3497
  triggers: [],
3307
3498
  memory: '',
3308
3499
  notifications: [],
3500
+ samples: {
3501
+ documents: [],
3502
+ alternatives: [],
3503
+ },
3309
3504
  enabled: true,
3310
3505
  unavailable_because: '',
3311
3506
  tags: ['example', 'support'],
@@ -3444,6 +3639,10 @@ export const WEB_RESEARCH_APP_0_0_1 = {
3444
3639
  triggers: [],
3445
3640
  memory: '',
3446
3641
  notifications: [],
3642
+ samples: {
3643
+ documents: [],
3644
+ alternatives: [],
3645
+ },
3447
3646
  enabled: true,
3448
3647
  unavailable_because: '',
3449
3648
  tags: ['example', 'research'],
@@ -3934,7 +4133,43 @@ export const APP_SOURCES = {
3934
4133
  instructions: 'Can the proposed correction be applied without a person checking each row?',
3935
4134
  },
3936
4135
  ],
3937
- decision_model: 'cloudflare:gtw/typesafe/jev',
4136
+ decision_model: 'cloudflare:wrk/typesafe/jev',
4137
+ },
4138
+ samples: {
4139
+ alternatives: [
4140
+ {
4141
+ name: 'Prices in cents',
4142
+ evidence: 'In the sample orders dataset (12,480 rows), 38 rows from the EU shop carry a unit price one hundred times the catalogue price — 1999 for an item listed at 19.99 — all imported by the same job on 4 March. Divided by one hundred, each matches its catalogue price to the cent. Corrected, total revenue falls by 6.1%.',
4143
+ metrics: {
4144
+ 'Rows affected': 38.0,
4145
+ 'Effect on the result': 6.1,
4146
+ },
4147
+ },
4148
+ {
4149
+ name: 'Duplicate orders',
4150
+ evidence: '96 order ids appear twice with identical lines, timestamps and amounts, all from a retried upload on 19 April. No order id appears three times. Removing the second copies lowers total revenue by 0.9%.',
4151
+ metrics: {
4152
+ 'Rows affected': 96.0,
4153
+ 'Effect on the result': 0.9,
4154
+ },
4155
+ },
4156
+ {
4157
+ name: 'Missing region',
4158
+ evidence: '1,032 rows have an empty region, all imported on 2 March from the partner channel; their shipping addresses are filled in and name a country in every case. Total revenue does not move; revenue by region moves by up to 4.5% once the region is read from the address.',
4159
+ metrics: {
4160
+ 'Rows affected': 1032.0,
4161
+ 'Effect on the result': 4.5,
4162
+ },
4163
+ },
4164
+ {
4165
+ name: 'Very large orders',
4166
+ evidence: '11 orders exceed 40,000 in value, the largest at 182,000. Each is from an account marked as a reseller, and each has an invoice and a delivery record that match its amount. Left out, total revenue would fall by 9.8%, but nothing suggests they are wrong.',
4167
+ metrics: {
4168
+ 'Rows affected': 11.0,
4169
+ 'Effect on the result': 0.0,
4170
+ },
4171
+ },
4172
+ ],
3938
4173
  },
3939
4174
  tags: ['example', 'decision', 'data-quality'],
3940
4175
  icon: 'filter',
@@ -4447,7 +4682,38 @@ export const APP_SOURCES = {
4447
4682
  },
4448
4683
  },
4449
4684
  ],
4450
- decision_model: 'cloudflare:gtw/typesafe/jev',
4685
+ decision_model: 'cloudflare:wrk/typesafe/jev',
4686
+ },
4687
+ samples: {
4688
+ alternatives: [
4689
+ {
4690
+ name: 'Large model',
4691
+ evidence: "A sample run of 50 support-ticket summaries: 46 passed. The four failures each left out the customer's account number, which the use case asks for. Every answer kept to the JSON format asked for. Its price per call is published on the Models page, and the run recorded a trajectory for each task.",
4692
+ metrics: {
4693
+ 'Pass rate': 0.92,
4694
+ 'Cost per task': 1.8,
4695
+ Latency: 6.2,
4696
+ },
4697
+ },
4698
+ {
4699
+ name: 'Medium model',
4700
+ evidence: 'The same 50 summaries: 43 passed. Of the seven failures, four left out the account number and three summarised the wrong ticket of a thread. Two answers broke the JSON format with a trailing comment. Its price per call is published, and every task has its trajectory.',
4701
+ metrics: {
4702
+ 'Pass rate': 0.86,
4703
+ 'Cost per task': 0.6,
4704
+ Latency: 3.1,
4705
+ },
4706
+ },
4707
+ {
4708
+ name: 'Small model',
4709
+ evidence: 'The same 50 summaries: 34 passed. Most of the 16 failures invented a resolution the thread never reached, and nine answers broke the JSON format. Its billing is not published on the Models page, and the run kept no trajectory for its failures.',
4710
+ metrics: {
4711
+ 'Pass rate': 0.68,
4712
+ 'Cost per task': 0.2,
4713
+ Latency: 1.4,
4714
+ },
4715
+ },
4716
+ ],
4451
4717
  },
4452
4718
  tags: ['example', 'decision', 'benchmarks', 'models'],
4453
4719
  icon: 'cpu',
@@ -4986,6 +5252,15 @@ export const APP_SOURCES = {
4986
5252
  hosted: {},
4987
5253
  embedded: {},
4988
5254
  },
5255
+ samples: {
5256
+ documents: [
5257
+ {
5258
+ name: 'Price list',
5259
+ file: 'price-list.csv',
5260
+ text: 'plan,term,price_per_seat,billed,minimum_seats\nTeam,Monthly,15,each month,1\nTeam,Annual,144,each year,1\nBusiness,Monthly,30,each month,5\nBusiness,Annual,288,each year,5\nEnterprise,Monthly,55,each month,25\nEnterprise,Annual,528,each year,25\n',
5261
+ },
5262
+ ],
5263
+ },
4989
5264
  tags: ['example', 'widget'],
4990
5265
  icon: 'number',
4991
5266
  emoji: '🧮',
@@ -5351,7 +5626,38 @@ export const APP_SOURCES = {
5351
5626
  },
5352
5627
  },
5353
5628
  ],
5354
- decision_model: 'cloudflare:gtw/typesafe/jev',
5629
+ decision_model: 'cloudflare:wrk/typesafe/jev',
5630
+ },
5631
+ samples: {
5632
+ alternatives: [
5633
+ {
5634
+ name: 'Current prompt',
5635
+ evidence: "A sample run of 80 tasks of a reporting agent: 70 passed. Six of the ten failures gave a wrong total in a quarterly figure, which a reader would act on; four put the table's columns in another order than the template asks. Nobody who reads the reports has complained about the column order.",
5636
+ metrics: {
5637
+ 'Pass rate': 0.875,
5638
+ 'Cost per task': 2.4,
5639
+ Latency: 9.5,
5640
+ },
5641
+ },
5642
+ {
5643
+ name: 'With retrieval',
5644
+ evidence: 'The same 80 tasks with the reports of the last two quarters retrieved first: 76 passed. The four failures are all formatting — a missing unit in a table header — and every figure was right. Each task reads about twice as much, which shows in its cost.',
5645
+ metrics: {
5646
+ 'Pass rate': 0.95,
5647
+ 'Cost per task': 3.9,
5648
+ Latency: 12.8,
5649
+ },
5650
+ },
5651
+ {
5652
+ name: 'Smaller model',
5653
+ evidence: 'The same 80 tasks on a smaller model: 61 passed. Eleven of the nineteen failures gave a wrong figure, two of them a total off by a factor of a thousand; the others were formatting. It is the cheapest and the fastest of the three.',
5654
+ metrics: {
5655
+ 'Pass rate': 0.7625,
5656
+ 'Cost per task': 0.7,
5657
+ Latency: 4.1,
5658
+ },
5659
+ },
5660
+ ],
5355
5661
  },
5356
5662
  tags: ['example', 'decision', 'benchmarks'],
5357
5663
  icon: 'checklist',
@@ -5443,7 +5749,38 @@ export const APP_SOURCES = {
5443
5749
  ],
5444
5750
  },
5445
5751
  ],
5446
- decision_model: 'cloudflare:gtw/typesafe/jev',
5752
+ decision_model: 'cloudflare:wrk/typesafe/jev',
5753
+ },
5754
+ samples: {
5755
+ alternatives: [
5756
+ {
5757
+ name: 'Northfield Components',
5758
+ evidence: 'Quotes 18,400 for the 5,000 units, delivery included. Its delivery records show 47 of 50 past deliveries on time. It can make 6,000 units a month. It meets the stated requirements: ISO 9001, delivery within three weeks and payment at 60 days.',
5759
+ metrics: {
5760
+ Price: 18400.0,
5761
+ 'Delivery reliability': 0.94,
5762
+ Capacity: 1.0,
5763
+ },
5764
+ },
5765
+ {
5766
+ name: 'Harbor Supply',
5767
+ evidence: 'Quotes 15,900 for the 5,000 units, plus 900 for delivery. 31 of 40 past deliveries arrived on time, the late ones by a week on average. It can make 4,000 units a month, so the order would ship in two parts. It is ISO 9001 certified, and asks for payment at 30 days.',
5768
+ metrics: {
5769
+ Price: 16800.0,
5770
+ 'Delivery reliability': 0.775,
5771
+ Capacity: 0.8,
5772
+ },
5773
+ },
5774
+ {
5775
+ name: 'Valley Works',
5776
+ evidence: 'Quotes 17,200 for the 5,000 units, delivery included. 12 of its 15 past deliveries arrived on time. It states a capacity of 10,000 units a month, but sent no figure for the last quarter. It meets the delivery and payment terms; its ISO 9001 certificate expired last year and is being renewed.',
5777
+ metrics: {
5778
+ Price: 17200.0,
5779
+ 'Delivery reliability': 0.8,
5780
+ Capacity: 1.0,
5781
+ },
5782
+ },
5783
+ ],
5447
5784
  },
5448
5785
  tags: ['example', 'decision', 'procurement'],
5449
5786
  icon: 'package',
@@ -1010,6 +1010,81 @@ export const APPSPEC_SCHEMA = {
1010
1010
  title: 'AppRule',
1011
1011
  type: 'object',
1012
1012
  },
1013
+ AppSampleAlternative: {
1014
+ additionalProperties: false,
1015
+ description: 'An alternative a decision is tried on, and what is known about it.',
1016
+ properties: {
1017
+ name: {
1018
+ description: 'Its name',
1019
+ title: 'Name',
1020
+ type: 'string',
1021
+ },
1022
+ evidence: {
1023
+ description: 'What is known about it: the text its typed questions are asked on',
1024
+ title: 'Evidence',
1025
+ type: 'string',
1026
+ },
1027
+ metrics: {
1028
+ additionalProperties: {
1029
+ type: 'number',
1030
+ },
1031
+ description: "What each metric criterion found for it, by the criterion's name",
1032
+ title: 'Metrics',
1033
+ type: 'object',
1034
+ },
1035
+ },
1036
+ required: ['name', 'evidence'],
1037
+ title: 'AppSampleAlternative',
1038
+ type: 'object',
1039
+ },
1040
+ AppSampleDocument: {
1041
+ additionalProperties: false,
1042
+ description: 'A document it answers from, as Datalayer publishes it with the application.',
1043
+ properties: {
1044
+ name: {
1045
+ description: 'The document, as its `contents` names it',
1046
+ title: 'Name',
1047
+ type: 'string',
1048
+ },
1049
+ file: {
1050
+ description: 'The file it is given as, in a sandbox: `price-list.csv`',
1051
+ title: 'File',
1052
+ type: 'string',
1053
+ },
1054
+ text: {
1055
+ description: 'What it holds',
1056
+ title: 'Text',
1057
+ type: 'string',
1058
+ },
1059
+ },
1060
+ required: ['name', 'file', 'text'],
1061
+ title: 'AppSampleDocument',
1062
+ type: 'object',
1063
+ },
1064
+ AppSamples: {
1065
+ additionalProperties: false,
1066
+ description: "What it is tried on before it is anybody's (STUDIO E-06, E-11).\n\nPublished with it by Datalayer and read only: what a visitor without an\naccount tries it on, in the browser.",
1067
+ properties: {
1068
+ documents: {
1069
+ description: 'Documents of its `contents`, as Datalayer publishes them',
1070
+ items: {
1071
+ $ref: '#/$defs/AppSampleDocument',
1072
+ },
1073
+ title: 'Documents',
1074
+ type: 'array',
1075
+ },
1076
+ alternatives: {
1077
+ description: 'For a decision: alternatives with their evidence',
1078
+ items: {
1079
+ $ref: '#/$defs/AppSampleAlternative',
1080
+ },
1081
+ title: 'Alternatives',
1082
+ type: 'array',
1083
+ },
1084
+ },
1085
+ title: 'AppSamples',
1086
+ type: 'object',
1087
+ },
1013
1088
  AppScenario: {
1014
1089
  additionalProperties: false,
1015
1090
  description: 'A named set of weights: one way of looking at the same findings.',
@@ -1900,6 +1975,10 @@ export const APPSPEC_SCHEMA = {
1900
1975
  default: null,
1901
1976
  description: 'For a decision: what it decides',
1902
1977
  },
1978
+ samples: {
1979
+ $ref: '#/$defs/AppSamples',
1980
+ description: "What it is tried on before it is anybody's: published with it by Datalayer, read only",
1981
+ },
1903
1982
  enabled: {
1904
1983
  default: true,
1905
1984
  description: 'Whether it is offered today',