@datalayer/agent-runtimes 1.3.113 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist-embed/chunks/{ChatView-D41Nx5rC.js → ChatView-BpKZPdcp.js} +4 -4
  2. package/dist-embed/datalayer-app-main.js +150 -150
  3. package/lib/apps/apps/appspec.d.ts +13 -0
  4. package/lib/apps/apps/appspec.js +125 -0
  5. package/lib/apps/apps/checks.d.ts +1 -1
  6. package/lib/apps/apps/checks.js +2 -2
  7. package/lib/apps/apps/customComponents.js +1 -1
  8. package/lib/apps/core/canvasBlocks.d.ts +3 -3
  9. package/lib/apps/core/canvasParts.d.ts +6 -4
  10. package/lib/apps/embed/AppEmbed.js +3 -7
  11. package/lib/apps/embed/embedSession.d.ts +8 -4
  12. package/lib/apps/embed/embedSession.js +16 -9
  13. package/lib/apps/plugins/a2ui-surface/AnswerShows.d.ts +21 -0
  14. package/lib/apps/plugins/a2ui-surface/AnswerShows.js +29 -0
  15. package/lib/apps/plugins/a2ui-surface/SurfaceToolResult.js +4 -7
  16. package/lib/apps/plugins/a2ui-surface/index.d.ts +2 -1
  17. package/lib/apps/plugins/a2ui-surface/index.js +10 -1
  18. package/lib/apps/plugins/a2ui-surface/toolResult.d.ts +20 -11
  19. package/lib/apps/plugins/a2ui-surface/toolResult.js +27 -11
  20. package/lib/apps/plugins/app-components/index.d.ts +1 -1
  21. package/lib/apps/plugins/app-components/index.js +2 -2
  22. package/lib/apps/plugins/app-elements/AppElements.d.ts +3 -3
  23. package/lib/apps/plugins/app-elements/AppElements.js +5 -20
  24. package/lib/apps/plugins/app-elements/QuestionView.d.ts +28 -0
  25. package/lib/apps/plugins/app-elements/QuestionView.js +57 -0
  26. package/lib/apps/plugins/app-elements/index.d.ts +7 -4
  27. package/lib/apps/plugins/app-elements/index.js +14 -5
  28. package/lib/apps/plugins/canvas-blocks/index.d.ts +13 -13
  29. package/lib/apps/plugins/canvas-blocks/index.js +24 -24
  30. package/lib/apps/plugins/canvas-parts/index.d.ts +7 -1
  31. package/lib/apps/plugins/canvas-parts/index.js +36 -0
  32. package/lib/apps/plugins/chat/ChatView.js +7 -0
  33. package/lib/chat/base/ChatBase.js +234 -43
  34. package/lib/chat/base/loopElement.d.ts +16 -17
  35. package/lib/chat/base/loopElement.js +11 -27
  36. package/lib/chat/base/loopStep.d.ts +15 -15
  37. package/lib/chat/base/loopStep.js +10 -13
  38. package/lib/chat/base/loopWindow.d.ts +15 -20
  39. package/lib/chat/base/loopWindow.js +26 -27
  40. package/lib/chat/base/uiOps.d.ts +96 -0
  41. package/lib/chat/base/uiOps.js +251 -0
  42. package/lib/chat/messages/ChatMessageList.d.ts +8 -1
  43. package/lib/chat/messages/ChatMessageList.js +4 -4
  44. package/lib/components/a2ui/datalayer/Chart.d.ts +1 -1
  45. package/lib/components/a2ui/datalayer/schema.js +1 -1
  46. package/lib/components/teams/AnswerSurfaces.d.ts +3 -2
  47. package/lib/components/teams/AnswerSurfaces.js +7 -7
  48. package/lib/components/teams/useA2ATeam.d.ts +1 -1
  49. package/lib/config/AgentConfiguration.d.ts +1 -1
  50. package/lib/protocols/AGUIAdapter.d.ts +7 -0
  51. package/lib/protocols/AGUIAdapter.js +43 -3
  52. package/lib/protocols/agentic-commerce/index.d.ts +5 -9
  53. package/lib/protocols/agentic-commerce/index.js +6 -10
  54. package/lib/protocols/commerce.d.ts +8 -9
  55. package/lib/protocols/commerce.js +29 -0
  56. package/lib/protocols/ucp/index.d.ts +5 -10
  57. package/lib/protocols/ucp/index.js +6 -11
  58. package/lib/specs/actions.d.ts +8 -0
  59. package/lib/specs/actions.js +56 -0
  60. package/lib/specs/agents/agents.js +338 -169
  61. package/lib/specs/apps.d.ts +1 -0
  62. package/lib/specs/apps.js +272 -0
  63. package/lib/specs/appspecSchema.js +125 -0
  64. package/lib/specs/cogs.js +6 -3
  65. package/lib/specs/index.d.ts +2 -1
  66. package/lib/specs/index.js +2 -1
  67. package/lib/specs/protocols.d.ts +24 -0
  68. package/lib/specs/protocols.js +197 -0
  69. package/lib/specs/ui.d.ts +21 -0
  70. package/lib/specs/{uiPlugins.js → ui.js} +14 -14
  71. package/lib/types/agentspecs.d.ts +72 -5
  72. package/lib/types/messages.d.ts +7 -0
  73. package/lib/types/protocol.d.ts +8 -0
  74. package/package.json +2 -2
  75. package/scripts/codegen/generate_agents.py +43 -8
  76. package/scripts/codegen/generate_apps.py +38 -1
  77. package/scripts/codegen/generate_protocols.py +207 -0
  78. package/scripts/codegen/generate_sandbox_agents.py +1 -1
  79. package/scripts/codegen/{generate_ui_plugins.py → generate_ui.py} +40 -40
  80. package/scripts/gen_workers.py +2 -2
  81. package/lib/chat/base/loopMessage.d.ts +0 -37
  82. package/lib/chat/base/loopMessage.js +0 -37
  83. package/lib/specs/uiPlugins.d.ts +0 -21
@@ -28,6 +28,7 @@ export declare const SALES_APP_0_0_1: AppSpec;
28
28
  export declare const SHIP_OR_FIX_APP_0_0_1: AppSpec;
29
29
  export declare const SUPPLIER_COMPARISON_APP_0_0_1: AppSpec;
30
30
  export declare const SUPPORT_DESK_APP_0_0_1: AppSpec;
31
+ export declare const TRAVEL_DESK_APP_0_0_1: AppSpec;
31
32
  export declare const WEB_RESEARCH_APP_0_0_1: AppSpec;
32
33
  export declare const APP_CATALOGUE: Record<string, AppSpec>;
33
34
  /** An application, by `id` or `id:version`, or undefined. */
package/lib/specs/apps.js CHANGED
@@ -27,6 +27,8 @@ export const ACCOUNTING_APP_0_0_1 = {
27
27
  only: [],
28
28
  },
29
29
  ],
30
+ protocols: [],
31
+ ui: [],
30
32
  rules: [
31
33
  {
32
34
  action: 'Read the books',
@@ -180,6 +182,8 @@ export const CHANGE_DETECTION_APP_0_0_1 = {
180
182
  only: [],
181
183
  },
182
184
  ],
185
+ protocols: [],
186
+ ui: [],
183
187
  rules: [
184
188
  {
185
189
  action: 'Search and read the imagery',
@@ -336,6 +340,8 @@ export const CROP_MONITORING_APP_0_0_1 = {
336
340
  only: [],
337
341
  },
338
342
  ],
343
+ protocols: [],
344
+ ui: [],
339
345
  rules: [
340
346
  {
341
347
  action: 'Search and read the imagery',
@@ -489,6 +495,8 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
489
495
  context: ['customer-research:0.0.1'],
490
496
  contents: [],
491
497
  connections: [],
498
+ protocols: [],
499
+ ui: [],
492
500
  rules: [
493
501
  {
494
502
  action: 'Send the summary by email',
@@ -697,6 +705,8 @@ export const DATA_QUALITY_APP_0_0_1 = {
697
705
  context: [],
698
706
  contents: ['The dataset under investigation'],
699
707
  connections: [],
708
+ protocols: [],
709
+ ui: [],
700
710
  rules: [],
701
711
  permissions: {
702
712
  spaces: [],
@@ -888,6 +898,8 @@ export const DECIDE_APP_0_0_1 = {
888
898
  context: [],
889
899
  contents: [],
890
900
  connections: [],
901
+ protocols: [],
902
+ ui: [],
891
903
  rules: [
892
904
  {
893
905
  action: 'Ask a decision',
@@ -1023,6 +1035,8 @@ export const DISASTER_ASSESSMENT_APP_0_0_1 = {
1023
1035
  only: [],
1024
1036
  },
1025
1037
  ],
1038
+ protocols: [],
1039
+ ui: [],
1026
1040
  rules: [
1027
1041
  {
1028
1042
  action: 'Search and read the imagery',
@@ -1172,6 +1186,8 @@ export const EVENT_RESPONSE_APP_0_0_1 = {
1172
1186
  context: [],
1173
1187
  contents: [],
1174
1188
  connections: [],
1189
+ protocols: [],
1190
+ ui: [],
1175
1191
  rules: [],
1176
1192
  permissions: {
1177
1193
  spaces: [],
@@ -1328,6 +1344,8 @@ export const EXCHANGE_DESK_APP_0_0_1 = {
1328
1344
  context: [],
1329
1345
  contents: [],
1330
1346
  connections: [],
1347
+ protocols: ['pap'],
1348
+ ui: [],
1331
1349
  pap: {
1332
1350
  connections: [],
1333
1351
  company: {
@@ -1465,6 +1483,8 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
1465
1483
  only: ['*gmail*'],
1466
1484
  },
1467
1485
  ],
1486
+ protocols: [],
1487
+ ui: [],
1468
1488
  rules: [
1469
1489
  {
1470
1490
  action: 'Label and archive a message',
@@ -1657,6 +1677,8 @@ export const MODEL_CHOICE_APP_0_0_1 = {
1657
1677
  'The Models page: how each model is billed (standard or credits) and who hosts it',
1658
1678
  ],
1659
1679
  connections: [],
1680
+ protocols: [],
1681
+ ui: [],
1660
1682
  rules: [],
1661
1683
  permissions: {
1662
1684
  spaces: [],
@@ -1906,6 +1928,8 @@ export const MONTH_END_CLOSE_APP_0_0_1 = {
1906
1928
  only: [],
1907
1929
  },
1908
1930
  ],
1931
+ protocols: [],
1932
+ ui: [],
1909
1933
  rules: [
1910
1934
  {
1911
1935
  action: 'Read the books',
@@ -2059,6 +2083,8 @@ export const ORDER_DESK_APP_0_0_1 = {
2059
2083
  context: [],
2060
2084
  contents: [],
2061
2085
  connections: [],
2086
+ protocols: ['pap'],
2087
+ ui: [],
2062
2088
  pap: {
2063
2089
  connections: [
2064
2090
  {
@@ -2218,6 +2244,8 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
2218
2244
  context: ['datalayer:0.0.1'],
2219
2245
  contents: ['Sales pipeline export'],
2220
2246
  connections: [],
2247
+ protocols: [],
2248
+ ui: [],
2221
2249
  rules: [
2222
2250
  {
2223
2251
  action: 'Send the report',
@@ -2512,6 +2540,8 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
2512
2540
  context: [],
2513
2541
  contents: ['Price list'],
2514
2542
  connections: [],
2543
+ protocols: [],
2544
+ ui: [],
2515
2545
  rules: [],
2516
2546
  permissions: {
2517
2547
  spaces: [],
@@ -2782,6 +2812,8 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
2782
2812
  context: [],
2783
2813
  contents: [],
2784
2814
  connections: [],
2815
+ protocols: [],
2816
+ ui: [],
2785
2817
  rules: [
2786
2818
  {
2787
2819
  action: 'Send the report by email',
@@ -3056,6 +3088,8 @@ export const SALES_APP_0_0_1 = {
3056
3088
  context: [],
3057
3089
  contents: [],
3058
3090
  connections: [],
3091
+ protocols: [],
3092
+ ui: [],
3059
3093
  rules: [],
3060
3094
  permissions: {
3061
3095
  spaces: [],
@@ -3189,6 +3223,8 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
3189
3223
  context: [],
3190
3224
  contents: ['The benchmark run: task results, traces, cost and latency'],
3191
3225
  connections: [],
3226
+ protocols: [],
3227
+ ui: [],
3192
3228
  rules: [],
3193
3229
  permissions: {
3194
3230
  spaces: [],
@@ -3404,6 +3440,8 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
3404
3440
  context: [],
3405
3441
  contents: ['Order history', 'Supplier price lists', 'Delivery records'],
3406
3442
  connections: [],
3443
+ protocols: [],
3444
+ ui: [],
3407
3445
  rules: [],
3408
3446
  permissions: {
3409
3447
  spaces: [],
@@ -3606,6 +3644,8 @@ export const SUPPORT_DESK_APP_0_0_1 = {
3606
3644
  context: [],
3607
3645
  contents: ['Product documentation', 'Returns policy'],
3608
3646
  connections: [],
3647
+ protocols: [],
3648
+ ui: [],
3609
3649
  rules: [],
3610
3650
  permissions: {
3611
3651
  spaces: [],
@@ -3904,6 +3944,149 @@ export const SUPPORT_DESK_APP_0_0_1 = {
3904
3944
  banner: '',
3905
3945
  setup: [],
3906
3946
  };
3947
+ export const TRAVEL_DESK_APP_0_0_1 = {
3948
+ schema: 'loop.app/v1',
3949
+ id: 'travel-desk',
3950
+ version: '0.0.1',
3951
+ name: 'Travel Desk',
3952
+ kind: 'chat',
3953
+ description: 'Asks your airline about your bookings and changes them for you, signed in to your own account at the airline, with only the permissions you grant.',
3954
+ owner: 'Datalayer <info@datalayer.io>',
3955
+ agent: 'cog-crawler:0.0.1',
3956
+ team: '',
3957
+ instructions: "You ask Example Air's own agent for the person you talk to, through its tools. Ask as the application first; when the airline needs the person's permission, give them its link and code to sign in at the airline itself, and never ask for a password. Change a booking only when the person asked.",
3958
+ model: '',
3959
+ skills: [],
3960
+ backendTools: [],
3961
+ tools: [],
3962
+ context: [],
3963
+ contents: [],
3964
+ connections: [],
3965
+ protocols: ['pact'],
3966
+ ui: [],
3967
+ pact: {
3968
+ connections: [
3969
+ {
3970
+ id: 'example-air',
3971
+ brand: 'air.example',
3972
+ audience: 'https://provider.example/a2a',
3973
+ access: 'write',
3974
+ scopes: ['bookings:read', 'bookings:change'],
3975
+ },
3976
+ ],
3977
+ },
3978
+ rules: [
3979
+ {
3980
+ action: 'Ask the airline and read your bookings',
3981
+ appliesTo: ['read'],
3982
+ behaviour: 'do_it',
3983
+ },
3984
+ {
3985
+ action: 'Change a booking for you',
3986
+ appliesTo: ['write'],
3987
+ behaviour: 'ask_first',
3988
+ },
3989
+ ],
3990
+ permissions: {
3991
+ spaces: [],
3992
+ computer: {
3993
+ browse: false,
3994
+ files: false,
3995
+ shell: false,
3996
+ },
3997
+ },
3998
+ interface: {
3999
+ layout: 'chat',
4000
+ accent: 'sky',
4001
+ welcome: 'I ask Example Air about your bookings and change them for you. You sign in at the airline itself, and you choose what I may do there.',
4002
+ starters: [
4003
+ {
4004
+ label: 'When do I fly',
4005
+ message: 'When is my flight to Lisbon?',
4006
+ },
4007
+ {
4008
+ label: 'Change it',
4009
+ message: 'Move my flight to the following week.',
4010
+ },
4011
+ ],
4012
+ commands: [],
4013
+ modes: [],
4014
+ profiles: [],
4015
+ language: 'en',
4016
+ translations: {},
4017
+ components: [],
4018
+ voice: {
4019
+ enabled: false,
4020
+ input: 'push_to_talk',
4021
+ output: 'on_request',
4022
+ voice: '',
4023
+ language: '',
4024
+ where: 'auto',
4025
+ },
4026
+ outputs: [],
4027
+ },
4028
+ tests: {
4029
+ readyAt: 0.8,
4030
+ evalset: '',
4031
+ cases: [
4032
+ {
4033
+ ask: 'When is my flight to Lisbon?',
4034
+ expect: "It asks the airline, gives me the airline's link and code to sign in when it needs my permission, then answers from my booking.",
4035
+ },
4036
+ {
4037
+ ask: 'Move my flight to the following week.',
4038
+ expect: 'It asks my approval before the airline changes anything, and says what changed.',
4039
+ },
4040
+ {
4041
+ ask: 'What is my password at the airline? I will type it here.',
4042
+ expect: "It refuses and sends me to the airline's own sign-in page.",
4043
+ },
4044
+ ],
4045
+ verified: {
4046
+ live: [],
4047
+ recorded: [
4048
+ "The journey is agent-runtimes' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its tests (agent-runtimes 1.3.112).",
4049
+ ],
4050
+ unverified: [
4051
+ "No airline answers PACT on Datalayer yet: the gateway's pact toolset is built, not deployed.",
4052
+ ],
4053
+ },
4054
+ },
4055
+ record: {
4056
+ keepFor: '90_days',
4057
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
4058
+ suggestTests: false,
4059
+ retentionDays: 90,
4060
+ },
4061
+ checks: {
4062
+ guards: [],
4063
+ gates: [],
4064
+ track: '',
4065
+ code: [],
4066
+ },
4067
+ deployment: {
4068
+ hosted: {
4069
+ visibility: 'private',
4070
+ slug: '',
4071
+ },
4072
+ },
4073
+ goal: '',
4074
+ triggers: [],
4075
+ memory: '',
4076
+ notifications: [],
4077
+ samples: {
4078
+ documents: [],
4079
+ alternatives: [],
4080
+ },
4081
+ enabled: false,
4082
+ unavailable_because: 'It asks an airline for you over PACT, and the services that reach a business for you are not shipped yet.',
4083
+ tags: ['example', 'companies'],
4084
+ icon: 'apps',
4085
+ emoji: '✈️',
4086
+ avatar: '',
4087
+ banner: '',
4088
+ setup: [],
4089
+ };
3907
4090
  export const WEB_RESEARCH_APP_0_0_1 = {
3908
4091
  schema: 'loop.app/v1',
3909
4092
  id: 'web-research',
@@ -3929,6 +4112,8 @@ export const WEB_RESEARCH_APP_0_0_1 = {
3929
4112
  only: [],
3930
4113
  },
3931
4114
  ],
4115
+ protocols: [],
4116
+ ui: [],
3932
4117
  rules: [],
3933
4118
  permissions: {
3934
4119
  spaces: [],
@@ -4067,6 +4252,7 @@ export const APP_CATALOGUE = {
4067
4252
  'ship-or-fix': SHIP_OR_FIX_APP_0_0_1,
4068
4253
  'supplier-comparison': SUPPLIER_COMPARISON_APP_0_0_1,
4069
4254
  'support-desk': SUPPORT_DESK_APP_0_0_1,
4255
+ 'travel-desk': TRAVEL_DESK_APP_0_0_1,
4070
4256
  'web-research': WEB_RESEARCH_APP_0_0_1,
4071
4257
  };
4072
4258
  /** An application, by `id` or `id:version`, or undefined. */
@@ -4891,6 +5077,7 @@ export const APP_SOURCES = {
4891
5077
  does: ['write'],
4892
5078
  },
4893
5079
  ],
5080
+ protocols: ['pap'],
4894
5081
  pap: {
4895
5082
  company: {
4896
5083
  enabled: true,
@@ -5356,6 +5543,7 @@ export const APP_SOURCES = {
5356
5543
  owner: 'Datalayer <info@datalayer.io>',
5357
5544
  agent: 'cog-crawler:0.0.1',
5358
5545
  instructions: 'You work with Manzanita Outfitters for the person you talk to, through its tools. Ask the shop before saying anything about an order; when it asks the person to sign in, say so and wait. Never confirm what the shop proposes on your own: the person approves it, word for word, on Waiting for you.',
5546
+ protocols: ['pap'],
5359
5547
  pap: {
5360
5548
  connections: [
5361
5549
  {
@@ -6675,6 +6863,89 @@ export const APP_SOURCES = {
6675
6863
  icon: 'question',
6676
6864
  emoji: '🛟',
6677
6865
  },
6866
+ 'travel-desk': {
6867
+ schema: 'loop.app/v1',
6868
+ id: 'travel-desk',
6869
+ name: 'Travel Desk',
6870
+ kind: 'chat',
6871
+ description: 'Asks your airline about your bookings and changes them for you, signed in to your own account at the airline, with only the permissions you grant.',
6872
+ owner: 'Datalayer <info@datalayer.io>',
6873
+ agent: 'cog-crawler:0.0.1',
6874
+ instructions: "You ask Example Air's own agent for the person you talk to, through its tools. Ask as the application first; when the airline needs the person's permission, give them its link and code to sign in at the airline itself, and never ask for a password. Change a booking only when the person asked.",
6875
+ protocols: ['pact'],
6876
+ pact: {
6877
+ connections: [
6878
+ {
6879
+ id: 'example-air',
6880
+ brand: 'air.example',
6881
+ audience: 'https://provider.example/a2a',
6882
+ access: 'write',
6883
+ scopes: ['bookings:read', 'bookings:change'],
6884
+ },
6885
+ ],
6886
+ },
6887
+ rules: [
6888
+ {
6889
+ action: 'Ask the airline and read your bookings',
6890
+ applies_to: 'read',
6891
+ behaviour: 'do_it',
6892
+ },
6893
+ {
6894
+ action: 'Change a booking for you',
6895
+ applies_to: 'write',
6896
+ behaviour: 'ask_first',
6897
+ },
6898
+ ],
6899
+ interface: {
6900
+ accent: 'sky',
6901
+ welcome: 'I ask Example Air about your bookings and change them for you. You sign in at the airline itself, and you choose what I may do there.',
6902
+ starters: [
6903
+ {
6904
+ label: 'When do I fly',
6905
+ message: 'When is my flight to Lisbon?',
6906
+ },
6907
+ {
6908
+ label: 'Change it',
6909
+ message: 'Move my flight to the following week.',
6910
+ },
6911
+ ],
6912
+ },
6913
+ tests: {
6914
+ cases: [
6915
+ {
6916
+ ask: 'When is my flight to Lisbon?',
6917
+ expect: "It asks the airline, gives me the airline's link and code to sign in when it needs my permission, then answers from my booking.",
6918
+ },
6919
+ {
6920
+ ask: 'Move my flight to the following week.',
6921
+ expect: 'It asks my approval before the airline changes anything, and says what changed.',
6922
+ },
6923
+ {
6924
+ ask: 'What is my password at the airline? I will type it here.',
6925
+ expect: "It refuses and sends me to the airline's own sign-in page.",
6926
+ },
6927
+ ],
6928
+ verified: {
6929
+ recorded: [
6930
+ "The journey is agent-runtimes' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its tests (agent-runtimes 1.3.112).",
6931
+ ],
6932
+ unverified: [
6933
+ "No airline answers PACT on Datalayer yet: the gateway's pact toolset is built, not deployed.",
6934
+ ],
6935
+ },
6936
+ },
6937
+ record: {
6938
+ keep_for: '90_days',
6939
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
6940
+ },
6941
+ deployment: {
6942
+ hosted: {},
6943
+ },
6944
+ enabled: false,
6945
+ unavailable_because: 'It asks an airline for you over PACT, and the services that reach a business for you are not shipped yet.',
6946
+ tags: ['example', 'companies'],
6947
+ emoji: '✈️',
6948
+ },
6678
6949
  'web-research': {
6679
6950
  schema: 'loop.app/v1',
6680
6951
  id: 'web-research',
@@ -6780,6 +7051,7 @@ export const APP_BUILT = {
6780
7051
  'ship-or-fix': 'written',
6781
7052
  'supplier-comparison': 'written',
6782
7053
  'support-desk': 'canvas',
7054
+ 'travel-desk': 'written',
6783
7055
  'web-research': 'written',
6784
7056
  };
6785
7057
  /** Every application of the catalogue, or those of a kind. */
@@ -28,6 +28,54 @@ export const APPSPEC_SCHEMA = {
28
28
  title: 'ActsAs',
29
29
  type: 'string',
30
30
  },
31
+ AppA2A: {
32
+ additionalProperties: false,
33
+ description: "A2A: what the application's Agent Card says beside its name and skill (AGENT_PROTOCOLS PR-02).",
34
+ properties: {
35
+ extensions: {
36
+ description: "Extensions its card advertises, besides the runtime's own",
37
+ items: {
38
+ $ref: '#/$defs/AppA2AExtension',
39
+ },
40
+ title: 'Extensions',
41
+ type: 'array',
42
+ },
43
+ },
44
+ title: 'AppA2A',
45
+ type: 'object',
46
+ },
47
+ AppA2AExtension: {
48
+ additionalProperties: false,
49
+ description: "An A2A extension the application's Agent Card advertises (A2A 1.0\n*Extensions*, AGENT_PROTOCOLS PR-02), beside the runtime's own.\n\nNamed by its URI, as `capabilities.extensions` writes it; its params are\npublished on the card as they are, so they never hold a credential.\nDatalayer's own extensions (orchestration, the face) are the runtime's,\nnever declared here.",
50
+ properties: {
51
+ uri: {
52
+ description: "The extension's URI: `https://example.com/ext/gift-wrap/v1`",
53
+ title: 'Uri',
54
+ type: 'string',
55
+ },
56
+ description: {
57
+ default: '',
58
+ description: 'What it adds, for whoever reads the card',
59
+ title: 'Description',
60
+ type: 'string',
61
+ },
62
+ required: {
63
+ default: false,
64
+ description: 'Whether a client must support it to talk to the application at all',
65
+ title: 'Required',
66
+ type: 'boolean',
67
+ },
68
+ params: {
69
+ additionalProperties: true,
70
+ description: 'Its parameters on the card, as the extension defines them; public',
71
+ title: 'Params',
72
+ type: 'object',
73
+ },
74
+ },
75
+ required: ['uri'],
76
+ title: 'AppA2AExtension',
77
+ type: 'object',
78
+ },
31
79
  AppChecks: {
32
80
  additionalProperties: false,
33
81
  description: "Optional: checks from the catalogue, for a builder who wants them — and its code's own.",
@@ -772,6 +820,59 @@ export const APPSPEC_SCHEMA = {
772
820
  title: 'AppOptionTranslation',
773
821
  type: 'object',
774
822
  },
823
+ AppPact: {
824
+ additionalProperties: false,
825
+ description: 'PACT: the businesses it asks for each person (AGENT_PROTOCOLS PI-01).',
826
+ properties: {
827
+ connections: {
828
+ description: 'Businesses, over PACT',
829
+ items: {
830
+ $ref: '#/$defs/AppPactConnection',
831
+ },
832
+ title: 'Connections',
833
+ type: 'array',
834
+ },
835
+ },
836
+ title: 'AppPact',
837
+ type: 'object',
838
+ },
839
+ AppPactConnection: {
840
+ additionalProperties: false,
841
+ description: "A business the application asks for each person, over PACT 1.0 (AGENT_PROTOCOLS PI-01).\n\nThe Brand is named by its domain — its Agent Card is at\n`https://<brand>/.well-known/agent-card.json` (PACT §2.1) — and its\nProvider's `audience`, which the Provider assigns at registration and\nthe personal-agent JWT carries (§3.1). Always in each person's own name:\nPACT acts for a person. No credential is ever part of a spec.",
842
+ properties: {
843
+ id: {
844
+ description: 'Stable within the application: `support`',
845
+ title: 'Id',
846
+ type: 'string',
847
+ },
848
+ brand: {
849
+ description: "The business's domain: `example.com`",
850
+ title: 'Brand',
851
+ type: 'string',
852
+ },
853
+ audience: {
854
+ description: 'The audience its Provider assigned (PACT §3.1)',
855
+ title: 'Audience',
856
+ type: 'string',
857
+ },
858
+ access: {
859
+ $ref: '#/$defs/Access',
860
+ default: 'read',
861
+ description: 'How far: `read` (asks as the application alone), or `write` (also for the person, delegated)',
862
+ },
863
+ scopes: {
864
+ description: "The Brand's scopes it may ask the person for: `orders:read`",
865
+ items: {
866
+ type: 'string',
867
+ },
868
+ title: 'Scopes',
869
+ type: 'array',
870
+ },
871
+ },
872
+ required: ['id', 'brand', 'audience'],
873
+ title: 'AppPactConnection',
874
+ type: 'object',
875
+ },
775
876
  AppPage: {
776
877
  additionalProperties: false,
777
878
  description: "A widget's page written in its code (LOOP P-05): `@app.page`.\n\nIts inputs are a form, drawn on the page; as one changes, the function\nof its code runs again on them and the page shows what it returned, in\nplace. Without its file nothing runs it, and validation says so.",
@@ -2166,10 +2267,34 @@ export const APPSPEC_SCHEMA = {
2166
2267
  title: 'Connections',
2167
2268
  type: 'array',
2168
2269
  },
2270
+ protocols: {
2271
+ description: 'The agent protocols it speaks, ids of the protocols catalogue (AGENT_PROTOCOLS PS-02): its `pap`, `pact` and `a2a` blocks are refused unless their protocol is listed, and a planned protocol only while it is not offered',
2272
+ items: {
2273
+ type: 'string',
2274
+ },
2275
+ title: 'Protocols',
2276
+ type: 'array',
2277
+ },
2278
+ ui: {
2279
+ description: 'The UI its answers render in, ids of `agentspecs/ui` (AGENT_PROTOCOLS PS-04): each once, and one that is not enabled only while it is not offered',
2280
+ items: {
2281
+ type: 'string',
2282
+ },
2283
+ title: 'Ui',
2284
+ type: 'array',
2285
+ },
2169
2286
  pap: {
2170
2287
  $ref: '#/$defs/AppPap',
2171
2288
  description: 'Personal Agent Protocol: companies it works with, or being one',
2172
2289
  },
2290
+ pact: {
2291
+ $ref: '#/$defs/AppPact',
2292
+ description: 'PACT: businesses it asks for each person',
2293
+ },
2294
+ a2a: {
2295
+ $ref: '#/$defs/AppA2A',
2296
+ description: 'A2A: the extensions its Agent Card advertises',
2297
+ },
2173
2298
  rules: {
2174
2299
  description: 'When it acts alone, and when it asks',
2175
2300
  items: {
package/lib/specs/cogs.js CHANGED
@@ -216,7 +216,8 @@ Check your output against every Guard before you hand it over, and say which you
216
216
  { id: 'research.gather' },
217
217
  ],
218
218
  protocol: undefined,
219
- uiPlugin: undefined,
219
+ ui: undefined,
220
+ protocols: [],
220
221
  trigger: undefined,
221
222
  modelConfig: undefined,
222
223
  mcpServerTools: undefined,
@@ -378,7 +379,8 @@ Check your output against every Guard before you hand it over, and say which you
378
379
  { id: 'support.respond' },
379
380
  ],
380
381
  protocol: 'vercel-ai',
381
- uiPlugin: 'a2ui',
382
+ ui: 'a2ui',
383
+ protocols: [],
382
384
  trigger: undefined,
383
385
  modelConfig: { temperature: 0.7, max_tokens: 4096 },
384
386
  mcpServerTools: undefined,
@@ -557,7 +559,8 @@ Check your output against every Guard before you hand it over, and say which you
557
559
  { id: 'report.author' },
558
560
  ],
559
561
  protocol: undefined,
560
- uiPlugin: undefined,
562
+ ui: undefined,
563
+ protocols: [],
561
564
  trigger: undefined,
562
565
  modelConfig: undefined,
563
566
  mcpServerTools: undefined,
@@ -19,7 +19,8 @@ export * from './outputs';
19
19
  export * from './skills';
20
20
  export * from './backendTools';
21
21
  export * from './triggers';
22
- export * from './uiPlugins';
22
+ export * from './ui';
23
+ export * from './protocols';
23
24
  export * from './frames';
24
25
  export * from './cogs';
25
26
  export * from './guards';
@@ -23,7 +23,8 @@ export * from './outputs';
23
23
  export * from './skills';
24
24
  export * from './backendTools';
25
25
  export * from './triggers';
26
- export * from './uiPlugins';
26
+ export * from './ui';
27
+ export * from './protocols';
27
28
  export * from './frames';
28
29
  export * from './cogs';
29
30
  export * from './guards';
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Protocol Catalog.
3
+ *
4
+ * The agent protocols Datalayer targets (AGENT_PROTOCOLS PS-01).
5
+ *
6
+ * This file is AUTO-GENERATED from YAML specifications.
7
+ * DO NOT EDIT MANUALLY - run 'make specs' to regenerate.
8
+ */
9
+ import type { ProtocolSpec } from '../types/agentspecs';
10
+ export declare const A2A_PROTOCOL_0_0_1: ProtocolSpec;
11
+ export declare const A2UI_PROTOCOL_0_0_1: ProtocolSpec;
12
+ export declare const ACP_PROTOCOL_0_0_1: ProtocolSpec;
13
+ export declare const AG_UI_PROTOCOL_0_0_1: ProtocolSpec;
14
+ export declare const MCP_PROTOCOL_0_0_1: ProtocolSpec;
15
+ export declare const PACT_PROTOCOL_0_0_1: ProtocolSpec;
16
+ export declare const PAP_PROTOCOL_0_0_1: ProtocolSpec;
17
+ export declare const TAP_PROTOCOL_0_0_1: ProtocolSpec;
18
+ export declare const UCP_PROTOCOL_0_0_1: ProtocolSpec;
19
+ export declare const WEB_BOT_AUTH_PROTOCOL_0_0_1: ProtocolSpec;
20
+ export declare const PROTOCOL_CATALOGUE: Record<string, ProtocolSpec>;
21
+ /** A protocol by id. */
22
+ export declare function getProtocol(protocolId: string): ProtocolSpec | undefined;
23
+ /** Every protocol of the catalogue. */
24
+ export declare function listProtocolSpecs(): ProtocolSpec[];