@datalayer/agent-runtimes 1.3.83 → 1.3.85

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 (168) hide show
  1. package/lib/chat/ChatFloating.d.ts +5 -4
  2. package/lib/chat/ChatFloating.js +8 -6
  3. package/lib/chat/ChatLanguage.d.ts +17 -0
  4. package/lib/chat/ChatLanguage.js +29 -0
  5. package/lib/chat/assistant/AssistantStage.d.ts +4 -4
  6. package/lib/chat/assistant/AssistantStage.js +4 -2
  7. package/lib/chat/assistant/BalloonParts.d.ts +2 -1
  8. package/lib/chat/assistant/BalloonParts.js +12 -5
  9. package/lib/chat/assistant/BalloonVisual.js +3 -1
  10. package/lib/chat/assistant/ConversationBalloon.d.ts +1 -1
  11. package/lib/chat/assistant/ConversationBalloon.js +3 -2
  12. package/lib/chat/assistant/SpeechBalloon.d.ts +1 -1
  13. package/lib/chat/assistant/SpeechBalloon.js +10 -7
  14. package/lib/chat/assistant/toolLine.d.ts +8 -4
  15. package/lib/chat/assistant/toolLine.js +13 -9
  16. package/lib/chat/base/ChatBase.js +30 -11
  17. package/lib/chat/base/loopElement.d.ts +53 -0
  18. package/lib/chat/base/loopElement.js +78 -0
  19. package/lib/chat/base/loopWindow.d.ts +31 -0
  20. package/lib/chat/base/loopWindow.js +74 -0
  21. package/lib/chat/display/EmptyState.js +3 -1
  22. package/lib/chat/index.d.ts +2 -0
  23. package/lib/chat/index.js +3 -0
  24. package/lib/chat/messages/ChatMessages.js +3 -1
  25. package/lib/chat/messages/TurnFooter.js +3 -1
  26. package/lib/chat/prompt/InputPrompt.js +3 -1
  27. package/lib/chat/prompt/InputPromptLexical.js +3 -1
  28. package/lib/chat/prompt/footer/InPromptFooter.js +3 -1
  29. package/lib/chat/tools/ToolApprovalBanner.js +5 -3
  30. package/lib/chat/tools/ToolApprovalDialog.js +5 -3
  31. package/lib/chat/tools/ToolCallDisplay.js +29 -25
  32. package/lib/chat/words.d.ts +102 -0
  33. package/lib/chat/words.js +460 -0
  34. package/lib/components/a2ui/custom/index.d.ts +39 -0
  35. package/lib/components/a2ui/custom/index.js +95 -0
  36. package/lib/components/a2ui/custom/sandbox.d.ts +73 -0
  37. package/lib/components/a2ui/custom/sandbox.js +188 -0
  38. package/lib/components/a2ui/datalayer/FileUpload.d.ts +10 -2
  39. package/lib/components/a2ui/datalayer/FileUpload.js +10 -7
  40. package/lib/components/a2ui/datalayer/Form.d.ts +2 -0
  41. package/lib/components/a2ui/datalayer/Form.js +9 -2
  42. package/lib/components/a2ui/datalayer/formWidgets.d.ts +19 -0
  43. package/lib/components/a2ui/datalayer/formWidgets.js +51 -0
  44. package/lib/components/a2ui/datalayer/index.d.ts +1 -1
  45. package/lib/components/a2ui/datalayer/index.js +1 -1
  46. package/lib/components/a2ui/datalayer/schema.d.ts +10 -0
  47. package/lib/components/a2ui/datalayer/schema.js +12 -1
  48. package/lib/components/a2ui/index.d.ts +1 -0
  49. package/lib/components/a2ui/index.js +1 -0
  50. package/lib/components/a2ui/visibleWhen.d.ts +12 -1
  51. package/lib/components/a2ui/visibleWhen.js +24 -3
  52. package/lib/components/inspector/AgentInspector.d.ts +25 -44
  53. package/lib/components/inspector/AgentInspector.js +27 -215
  54. package/lib/components/inspector/AgentInspectorDialog.d.ts +6 -6
  55. package/lib/components/inspector/AgentInspectorDialog.js +2 -2
  56. package/lib/components/inspector/a2aSpans.d.ts +51 -0
  57. package/lib/components/inspector/a2aSpans.js +373 -0
  58. package/lib/components/inspector/agentSpans.d.ts +120 -0
  59. package/lib/components/inspector/agentSpans.js +253 -0
  60. package/lib/components/inspector/chatSpans.d.ts +36 -0
  61. package/lib/components/inspector/chatSpans.js +50 -0
  62. package/lib/components/inspector/classify.d.ts +11 -8
  63. package/lib/components/inspector/classify.js +23 -24
  64. package/lib/components/inspector/index.d.ts +7 -7
  65. package/lib/components/inspector/index.js +7 -7
  66. package/lib/components/teams/A2ATeamGraph.d.ts +4 -4
  67. package/lib/components/teams/SceneTranscript.d.ts +29 -0
  68. package/lib/components/teams/SceneTranscript.js +54 -0
  69. package/lib/components/teams/SceneView.d.ts +41 -0
  70. package/lib/components/teams/SceneView.js +28 -0
  71. package/lib/components/teams/index.d.ts +3 -0
  72. package/lib/components/teams/index.js +3 -0
  73. package/lib/components/teams/sceneTranscript.d.ts +74 -0
  74. package/lib/components/teams/sceneTranscript.js +294 -0
  75. package/lib/components/teams/teamConnections.d.ts +2 -2
  76. package/lib/components/teams/teamConnections.js +3 -3
  77. package/lib/components/teams/useA2ATeam.d.ts +4 -4
  78. package/lib/components/teams/useA2ATeam.js +50 -46
  79. package/lib/examples/AgentA2ATeamExample.d.ts +10 -9
  80. package/lib/examples/AgentA2ATeamExample.js +70 -60
  81. package/lib/examples/AssistantExample.js +2 -2
  82. package/lib/loop/apps/AppComposer.d.ts +40 -4
  83. package/lib/loop/apps/AppComposer.js +194 -19
  84. package/lib/loop/apps/AppRenderer.d.ts +21 -3
  85. package/lib/loop/apps/AppRenderer.js +88 -48
  86. package/lib/loop/apps/appspec.d.ts +13 -1
  87. package/lib/loop/apps/appspec.js +305 -12
  88. package/lib/loop/apps/checks.d.ts +14 -0
  89. package/lib/loop/apps/checks.js +276 -5
  90. package/lib/loop/apps/composer.d.ts +21 -10
  91. package/lib/loop/apps/composer.js +41 -8
  92. package/lib/loop/apps/customComponents.d.ts +41 -0
  93. package/lib/loop/apps/customComponents.js +260 -0
  94. package/lib/loop/apps/hostTools.d.ts +8 -1
  95. package/lib/loop/apps/hostTools.js +9 -0
  96. package/lib/loop/apps/index.d.ts +1 -0
  97. package/lib/loop/apps/index.js +1 -0
  98. package/lib/loop/apps/language.d.ts +68 -0
  99. package/lib/loop/apps/language.js +275 -0
  100. package/lib/loop/apps/settingsInputs.d.ts +29 -0
  101. package/lib/loop/apps/settingsInputs.js +147 -0
  102. package/lib/loop/apps/uploads.d.ts +43 -0
  103. package/lib/loop/apps/uploads.js +66 -0
  104. package/lib/loop/core/a2uiComponents.d.ts +10 -0
  105. package/lib/loop/core/a2uiComponents.js +15 -0
  106. package/lib/loop/core/index.d.ts +15 -1
  107. package/lib/loop/core/index.js +3 -0
  108. package/lib/loop/embed/AppEmbed.d.ts +25 -3
  109. package/lib/loop/embed/AppEmbed.js +106 -18
  110. package/lib/loop/embed/element.d.ts +5 -0
  111. package/lib/loop/embed/element.js +84 -5
  112. package/lib/loop/embed/embedConfig.d.ts +8 -0
  113. package/lib/loop/embed/embedConfig.js +18 -0
  114. package/lib/loop/embed/embedSession.d.ts +14 -0
  115. package/lib/loop/embed/embedSession.js +34 -0
  116. package/lib/loop/embed/hostBridge.d.ts +50 -3
  117. package/lib/loop/embed/hostBridge.js +22 -2
  118. package/lib/loop/index.d.ts +4 -3
  119. package/lib/loop/index.js +4 -3
  120. package/lib/loop/plugins/a2ui-surface/InlineSurface.d.ts +7 -1
  121. package/lib/loop/plugins/a2ui-surface/InlineSurface.js +7 -2
  122. package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.js +4 -1
  123. package/lib/loop/plugins/a2ui-surface/ownComponents.d.ts +6 -0
  124. package/lib/loop/plugins/a2ui-surface/ownComponents.js +30 -0
  125. package/lib/loop/plugins/app-components/index.d.ts +26 -0
  126. package/lib/loop/plugins/app-components/index.js +56 -0
  127. package/lib/loop/plugins/app-elements/AppElements.d.ts +27 -0
  128. package/lib/loop/plugins/app-elements/AppElements.js +79 -0
  129. package/lib/loop/plugins/app-elements/index.d.ts +20 -0
  130. package/lib/loop/plugins/app-elements/index.js +43 -0
  131. package/lib/loop/plugins/app-page/AppPage.d.ts +9 -0
  132. package/lib/loop/plugins/app-page/AppPage.js +106 -8
  133. package/lib/loop/plugins/app-page/appPageModel.d.ts +17 -1
  134. package/lib/loop/plugins/app-page/appPageModel.js +122 -4
  135. package/lib/loop/plugins/app-page/index.d.ts +1 -0
  136. package/lib/loop/plugins/app-page/index.js +1 -0
  137. package/lib/loop/plugins/app-page/pageRun.d.ts +46 -0
  138. package/lib/loop/plugins/app-page/pageRun.js +111 -0
  139. package/lib/loop/plugins/assistant/index.js +8 -6
  140. package/lib/loop/plugins/chat/ChatView.js +16 -6
  141. package/lib/loop/plugins/chat/index.d.ts +1 -1
  142. package/lib/loop/plugins/chat/index.js +2 -1
  143. package/lib/models/PageTag.d.ts +1 -1
  144. package/lib/protocols/BrowserAgentAdapter.d.ts +8 -6
  145. package/lib/protocols/BrowserAgentAdapter.js +13 -10
  146. package/lib/runtimes/browser/a2aPeer.d.ts +2 -1
  147. package/lib/runtimes/browser/protocol.d.ts +1 -1
  148. package/lib/specs/actions.js +78 -1
  149. package/lib/specs/apps.d.ts +5 -0
  150. package/lib/specs/apps.js +1518 -216
  151. package/lib/specs/appspecSchema.js +630 -3
  152. package/lib/specs/teams/teams.d.ts +3 -0
  153. package/lib/specs/teams/teams.js +249 -0
  154. package/lib/specs/uiPlugins.js +6 -1
  155. package/lib/types/agentspecs.d.ts +200 -1
  156. package/lib/types/chat.d.ts +6 -5
  157. package/lib/types/teams.d.ts +13 -2
  158. package/package.json +2 -2
  159. package/scripts/codegen/generate_apps.py +20 -2
  160. package/scripts/codegen/generate_teams.py +15 -2
  161. package/lib/components/inspector/JsonTree.d.ts +0 -24
  162. package/lib/components/inspector/JsonTree.js +0 -89
  163. package/lib/components/inspector/a2aInspect.d.ts +0 -56
  164. package/lib/components/inspector/a2aInspect.js +0 -478
  165. package/lib/components/inspector/agentInspector.d.ts +0 -179
  166. package/lib/components/inspector/agentInspector.js +0 -267
  167. package/lib/components/inspector/chatInspect.d.ts +0 -38
  168. package/lib/components/inspector/chatInspect.js +0 -65
@@ -10,7 +10,10 @@ export declare const ANALYZE_SUPPORT_TICKETS_TEAM_SPEC_0_0_1: TeamSpec;
10
10
  export declare const AUDIT_INVENTORY_LEVELS_TEAM_SPEC_0_0_1: TeamSpec;
11
11
  export declare const AUTOMATE_REGULATORY_REPORTING_TEAM_SPEC_0_0_1: TeamSpec;
12
12
  export declare const COMPREHENSIVE_SALES_ANALYTICS_TEAM_SPEC_0_0_1: TeamSpec;
13
+ export declare const CROP_MONITORING_TEAM_SPEC_0_0_1: TeamSpec;
14
+ export declare const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1: TeamSpec;
13
15
  export declare const JUPYTER_TEAM_SPEC_0_0_1: TeamSpec;
16
+ export declare const MONTH_END_CLOSE_TEAM_SPEC_0_0_1: TeamSpec;
14
17
  export declare const NOTEBOOK_BENCHMARK_TEAM_SPEC_0_0_1: TeamSpec;
15
18
  export declare const OPTIMIZE_GRID_OPERATIONS_TEAM_SPEC_0_0_1: TeamSpec;
16
19
  export declare const PROCESS_CITIZEN_REQUESTS_TEAM_SPEC_0_0_1: TeamSpec;
@@ -704,6 +704,187 @@ export const COMPREHENSIVE_SALES_ANALYTICS_TEAM_SPEC_0_0_1 = {
704
704
  storage: 's3://reports/sales-analytics/',
705
705
  },
706
706
  };
707
+ export const CROP_MONITORING_TEAM_SPEC_0_0_1 = {
708
+ id: 'crop-monitoring',
709
+ version: '0.0.1',
710
+ name: 'Crop monitoring',
711
+ description: `One agent, its data: Crop monitoring follows crop vigour and growth over a season from the satellite imagery NASA Earthdata holds, and flags the fields that need attention.`,
712
+ tags: [
713
+ 'example',
714
+ 'scene',
715
+ 'earth-observation',
716
+ 'agriculture',
717
+ 'earthdata',
718
+ 'a2a',
719
+ ],
720
+ enabled: true,
721
+ icon: 'telescope',
722
+ emoji: '🛰️',
723
+ color: '#1a7f37',
724
+ agentSpecId: '',
725
+ orchestrationProtocol: 'a2a',
726
+ executionMode: 'supervisor',
727
+ supervisor: {
728
+ name: 'Crop monitoring',
729
+ ref: '',
730
+ app: 'crop-monitoring:0.0.1',
731
+ model: '',
732
+ goal: ``,
733
+ instructions: ``,
734
+ approval: 'auto',
735
+ canTerminate: true,
736
+ },
737
+ routingInstructions: `Crop monitoring answers every request from the imagery itself, one search at a time, and reports what the granules show without adding to it.`,
738
+ entry: 'crop-monitoring',
739
+ suggestions: [
740
+ {
741
+ text: 'How has crop vigour evolved over the last three months around 45.5N, 10.2E?',
742
+ emoji: '🌱',
743
+ },
744
+ {
745
+ text: 'Which fields around 41.9N, 12.5E show a drop in vegetation this month compared with last?',
746
+ emoji: '🌾',
747
+ },
748
+ {
749
+ text: 'Which datasets and granules cover the Po valley for June 2026?',
750
+ emoji: '🛰️',
751
+ },
752
+ ],
753
+ delegation: {
754
+ maxDepth: 0,
755
+ allowPeerDelegation: false,
756
+ includeGeneralPurpose: false,
757
+ },
758
+ context: { sharing: 'shared' },
759
+ validation: { timeout: '300s', retryOnFailure: false, maxRetries: 0 },
760
+ agents: [
761
+ {
762
+ id: 'crop-monitoring',
763
+ name: '',
764
+ ref: '',
765
+ app: 'crop-monitoring:0.0.1',
766
+ runsIn: 'runtime',
767
+ role: 'initiator',
768
+ goal: `Take the person's field and period, search the imagery that covers them, and report the vigour, the growth and the fields to watch.`,
769
+ dependsOn: [],
770
+ subagents: [],
771
+ model: '',
772
+ mcpServer: '',
773
+ tools: [],
774
+ trigger: '',
775
+ approval: 'auto',
776
+ },
777
+ ],
778
+ };
779
+ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
780
+ id: 'disaster-assessment',
781
+ version: '0.0.1',
782
+ name: 'Disaster assessment',
783
+ description: `An event desk in the browser that gets the area a disaster affected and the damage from Disaster assessment, and what changed on the ground from Change detection, each on a runtime over A2A, each reading NASA Earthdata. Event response takes the event and reports; the two others read the imagery and answer.`,
784
+ tags: [
785
+ 'example',
786
+ 'scene',
787
+ 'earth-observation',
788
+ 'disaster',
789
+ 'insurance',
790
+ 'earthdata',
791
+ 'a2a',
792
+ ],
793
+ enabled: true,
794
+ icon: 'pulse',
795
+ emoji: '🛰️',
796
+ color: '#cf222e',
797
+ agentSpecId: '',
798
+ orchestrationProtocol: 'a2a',
799
+ executionMode: 'supervisor',
800
+ supervisor: {
801
+ name: 'Event response',
802
+ ref: '',
803
+ app: 'event-response:0.0.1',
804
+ model: '',
805
+ goal: ``,
806
+ instructions: ``,
807
+ approval: 'auto',
808
+ canTerminate: true,
809
+ },
810
+ routingInstructions: `Event response asks Disaster assessment for the area and the damage, and Change detection for the change on the ground, one request each, and reports what they answer without adding to it.`,
811
+ entry: 'event-response',
812
+ suggestions: [
813
+ {
814
+ text: 'Valencia, Spain, was flooded on 29 October 2024. What was affected, and what changed?',
815
+ emoji: '🌊',
816
+ },
817
+ {
818
+ text: 'Fires burned around Los Angeles from 7 January 2025. What was affected, and what changed?',
819
+ emoji: '🔥',
820
+ },
821
+ {
822
+ text: 'The Ahr valley was hit by a storm on 14 July 2021. What was affected, and what changed?',
823
+ emoji: '🌧️',
824
+ },
825
+ ],
826
+ delegation: {
827
+ maxDepth: 1,
828
+ allowPeerDelegation: true,
829
+ includeGeneralPurpose: false,
830
+ },
831
+ context: { sharing: 'shared' },
832
+ validation: { timeout: '600s', retryOnFailure: false, maxRetries: 0 },
833
+ agents: [
834
+ {
835
+ id: 'event-response',
836
+ name: '',
837
+ ref: '',
838
+ app: 'event-response:0.0.1',
839
+ runsIn: 'browser',
840
+ talksTo: [
841
+ { member: 'disaster-assessment', over: 'a2a' },
842
+ { member: 'change-detection', over: 'a2a' },
843
+ ],
844
+ role: 'initiator',
845
+ goal: `Take the person's event, ask Disaster assessment and Change detection for it, and report what they answered.`,
846
+ dependsOn: [],
847
+ subagents: [],
848
+ model: '',
849
+ mcpServer: '',
850
+ tools: [],
851
+ trigger: '',
852
+ approval: 'auto',
853
+ },
854
+ {
855
+ id: 'disaster-assessment',
856
+ name: '',
857
+ ref: '',
858
+ app: 'disaster-assessment:0.0.1',
859
+ runsIn: 'runtime',
860
+ role: 'contributor',
861
+ goal: `Estimate the area the event affected and the extent of the damage from the imagery before and after it, over A2A.`,
862
+ dependsOn: [],
863
+ subagents: [],
864
+ model: '',
865
+ mcpServer: '',
866
+ tools: [],
867
+ trigger: '',
868
+ approval: 'auto',
869
+ },
870
+ {
871
+ id: 'change-detection',
872
+ name: '',
873
+ ref: '',
874
+ app: 'change-detection:0.0.1',
875
+ runsIn: 'runtime',
876
+ role: 'contributor',
877
+ goal: `Find what changed on the ground between the two dates from the imagery, over A2A.`,
878
+ dependsOn: [],
879
+ subagents: [],
880
+ model: '',
881
+ mcpServer: '',
882
+ tools: [],
883
+ trigger: '',
884
+ approval: 'auto',
885
+ },
886
+ ],
887
+ };
707
888
  export const JUPYTER_TEAM_SPEC_0_0_1 = {
708
889
  id: 'jupyter',
709
890
  version: '0.0.1',
@@ -928,6 +1109,71 @@ export const JUPYTER_TEAM_SPEC_0_0_1 = {
928
1109
  storage: '',
929
1110
  },
930
1111
  };
1112
+ export const MONTH_END_CLOSE_TEAM_SPEC_0_0_1 = {
1113
+ id: 'month-end-close',
1114
+ version: '0.0.1',
1115
+ name: 'Month-end close',
1116
+ description: `One agent, its data: Month-end close drives the close from the Odoo books, which it only reads — the checklist, the accruals to book, the reconciliation gaps that remain.`,
1117
+ tags: ['example', 'scene', 'accounting', 'finance', 'odoo', 'a2a'],
1118
+ enabled: true,
1119
+ icon: 'sync',
1120
+ emoji: '🧾',
1121
+ color: '#bf8700',
1122
+ agentSpecId: '',
1123
+ orchestrationProtocol: 'a2a',
1124
+ executionMode: 'supervisor',
1125
+ supervisor: {
1126
+ name: 'Month-end close',
1127
+ ref: '',
1128
+ app: 'month-end-close:0.0.1',
1129
+ model: '',
1130
+ goal: ``,
1131
+ instructions: ``,
1132
+ approval: 'auto',
1133
+ canTerminate: true,
1134
+ },
1135
+ routingInstructions: `Month-end close answers every request from the books itself, one read at a time, and reports what the books hold without adding to it.`,
1136
+ entry: 'month-end-close',
1137
+ suggestions: [
1138
+ {
1139
+ text: 'Where does the month-end close stand for last month? Give me the checklist.',
1140
+ emoji: '☑️',
1141
+ },
1142
+ {
1143
+ text: 'Which accruals should be booked for last month, and for how much?',
1144
+ emoji: '🧾',
1145
+ },
1146
+ {
1147
+ text: 'Which bank lines and open items are still unreconciled for last month?',
1148
+ emoji: '🏦',
1149
+ },
1150
+ ],
1151
+ delegation: {
1152
+ maxDepth: 0,
1153
+ allowPeerDelegation: false,
1154
+ includeGeneralPurpose: false,
1155
+ },
1156
+ context: { sharing: 'shared' },
1157
+ validation: { timeout: '300s', retryOnFailure: false, maxRetries: 0 },
1158
+ agents: [
1159
+ {
1160
+ id: 'month-end-close',
1161
+ name: '',
1162
+ ref: '',
1163
+ app: 'month-end-close:0.0.1',
1164
+ runsIn: 'runtime',
1165
+ role: 'initiator',
1166
+ goal: `Take the person's request, read the period's books, and report where the close stands: what is done, what is to book, what is still open.`,
1167
+ dependsOn: [],
1168
+ subagents: [],
1169
+ model: '',
1170
+ mcpServer: '',
1171
+ tools: [],
1172
+ trigger: '',
1173
+ approval: 'auto',
1174
+ },
1175
+ ],
1176
+ };
931
1177
  export const NOTEBOOK_BENCHMARK_TEAM_SPEC_0_0_1 = {
932
1178
  id: 'notebook-benchmark',
933
1179
  version: '0.0.1',
@@ -1679,7 +1925,10 @@ export const TEAM_SPECS = {
1679
1925
  'audit-inventory-levels': AUDIT_INVENTORY_LEVELS_TEAM_SPEC_0_0_1,
1680
1926
  'automate-regulatory-reporting': AUTOMATE_REGULATORY_REPORTING_TEAM_SPEC_0_0_1,
1681
1927
  'comprehensive-sales-analytics': COMPREHENSIVE_SALES_ANALYTICS_TEAM_SPEC_0_0_1,
1928
+ 'crop-monitoring': CROP_MONITORING_TEAM_SPEC_0_0_1,
1929
+ 'disaster-assessment': DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1,
1682
1930
  jupyter: JUPYTER_TEAM_SPEC_0_0_1,
1931
+ 'month-end-close': MONTH_END_CLOSE_TEAM_SPEC_0_0_1,
1683
1932
  'notebook-benchmark': NOTEBOOK_BENCHMARK_TEAM_SPEC_0_0_1,
1684
1933
  'optimize-grid-operations': OPTIMIZE_GRID_OPERATIONS_TEAM_SPEC_0_0_1,
1685
1934
  'process-citizen-requests': PROCESS_CITIZEN_REQUESTS_TEAM_SPEC_0_0_1,
@@ -949,7 +949,7 @@ export const A2UI_UI_PLUGIN_0_0_1 = {
949
949
  category: 'input',
950
950
  emoji: '🧾',
951
951
  description: 'Several fields asked at once, from a JSON Schema, checked as they are filled and again when they arrive (drawn with @datalayer/primer-rjsf).',
952
- version: '1.0.0',
952
+ version: '1.1.0',
953
953
  standard: false,
954
954
  properties: {
955
955
  type: 'object',
@@ -965,6 +965,11 @@ export const A2UI_UI_PLUGIN_0_0_1 = {
965
965
  title: 'Fields',
966
966
  description: 'The JSON Schema of what is asked: its fields, their types, what is required.',
967
967
  },
968
+ ui: {
969
+ type: 'object',
970
+ title: 'How its fields are drawn',
971
+ description: "By field name, the ui: options @datalayer/primer-rjsf reads (a uiSchema): ui:widget one of select, radio, range, updown, switch, checkbox, text, textarea, date, checkboxes, tags; each field's own widget when unsaid.",
972
+ },
968
973
  submit_label: {
969
974
  type: 'string',
970
975
  title: 'Send button',
@@ -446,6 +446,59 @@ export interface AppPermissionsSpec {
446
446
  export interface AppStarterSpec {
447
447
  label: string;
448
448
  message: string;
449
+ /**
450
+ * The heading it is offered under (LOOP P-20): the starters of one
451
+ * category together, those without one first. Absent when unsaid.
452
+ */
453
+ category?: string;
454
+ }
455
+ /**
456
+ * One of several assistants in one application (LOOP P-20): picked before
457
+ * the conversation starts — the first unless another is — and kept to its
458
+ * end. Its instructions are told in every run, its model run in place of the
459
+ * application's (a mode's wins over it), its starters offered in place of
460
+ * the application's.
461
+ */
462
+ export interface AppProfileSpec {
463
+ id: string;
464
+ label: string;
465
+ description: string;
466
+ instructions: string;
467
+ model: string | null;
468
+ starters: AppStarterSpec[];
469
+ }
470
+ /**
471
+ * What a person reads of an application in another language (LOOP P-26):
472
+ * each part keyed by what names it in the spec — a starter by its label, a
473
+ * category by its words, a setting by its field, a command by its name, a
474
+ * mode and a profile by their ids. Every key present; empty is untranslated.
475
+ */
476
+ export interface AppTranslationSpec {
477
+ name: string;
478
+ description: string;
479
+ welcome: string;
480
+ starters: Record<string, {
481
+ label: string;
482
+ message: string;
483
+ }>;
484
+ categories: Record<string, string>;
485
+ settings: Record<string, {
486
+ title: string;
487
+ description: string;
488
+ options: Record<string, string>;
489
+ }>;
490
+ commands: Record<string, string>;
491
+ modes: Record<string, {
492
+ label: string;
493
+ options: Record<string, {
494
+ label: string;
495
+ description: string;
496
+ }>;
497
+ }>;
498
+ profiles: Record<string, {
499
+ label: string;
500
+ description: string;
501
+ }>;
449
502
  }
450
503
  /** A slash command the user picks in the composer (LOOP P-19). */
451
504
  export interface AppCommandSpec {
@@ -523,6 +576,64 @@ export interface AppSurfaceSpec {
523
576
  composedBy: string;
524
577
  composedAt: string;
525
578
  }
579
+ /** What a page's output is drawn with of the catalog (LOOP P-05). */
580
+ export type AppPageOutputComponent = 'Text' | 'Image' | 'Table' | 'Chart';
581
+ /**
582
+ * A component its developer wrote (LOOP P-17), of one application only: the
583
+ * catalog grows for it, it does not open. Reviewed as the catalog's own — its
584
+ * properties a JSON Schema, what it shows and sends bindings — and drawn in a
585
+ * sandboxed frame of no origin from the built ES module at `source`.
586
+ */
587
+ export interface AppCustomComponentSpec {
588
+ /** Its name on a surface (`Gauge`); none of the catalog's own. */
589
+ name: string;
590
+ /** What it is for, in a sentence: what the palette says. */
591
+ description: string;
592
+ /** Its properties: the JSON Schema of an object. */
593
+ props: Record<string, unknown>;
594
+ /** What it shows from the page's data: bindings. */
595
+ shows: string[];
596
+ /** What it sends back: bindings it writes, then its action. */
597
+ sends: string[];
598
+ /** The address of its module: `https://`, or `http://localhost` while written. */
599
+ source: string;
600
+ /** Its Subresource Integrity hash (`sha384-…`); empty when unsaid. */
601
+ integrity: string;
602
+ /** Its height on the page, in pixels. */
603
+ height: number;
604
+ /** A configuration its schema accepts: what the palette previews. */
605
+ example?: Record<string, unknown>;
606
+ }
607
+ /** One thing a widget's page shows for its inputs (LOOP P-05), at `/outputs/<name>`. */
608
+ export interface AppPageOutputSpec {
609
+ name: string;
610
+ /** What a person reads above it; none when empty. */
611
+ title: string;
612
+ /**
613
+ * `Text` (words) unless said, `Image` (an address), `Table` (rows), `Chart`
614
+ * (points) — an `AppPageOutputComponent` — or a component of the
615
+ * application's own (P-17), its value what it shows first.
616
+ */
617
+ component: string;
618
+ /** The component's other properties: a Table's `columns`, a Chart's `kind`, `x`, `y`. */
619
+ props: Record<string, unknown>;
620
+ }
621
+ /**
622
+ * A widget's page written in its code (LOOP P-05, `@app.page`): its inputs a
623
+ * form, drawn at `/inputs/<name>`; its outputs values, shown at
624
+ * `/outputs/<name>`. As an input changes, the function its code names runs
625
+ * again on all of them, and the outputs change in place.
626
+ */
627
+ export interface AppPageSpec {
628
+ /** The function of its code that runs it. */
629
+ function: string;
630
+ inputs: AppFormSchema;
631
+ /** How the inputs are drawn, as `settingsUi` draws the settings. */
632
+ inputsUi?: Record<string, unknown>;
633
+ outputs: AppPageOutputSpec[];
634
+ /** Whether it runs again as an input changes; else when Run is pressed. */
635
+ live: boolean;
636
+ }
526
637
  /**
527
638
  * An application's voice (VOICE.md VO-41), off unless said: whether a person
528
639
  * may talk to it, whether its answers are heard, with which voice of the
@@ -537,6 +648,25 @@ export interface AppVoiceSpec {
537
648
  language: string;
538
649
  where: 'auto' | 'device' | 'server';
539
650
  }
651
+ /**
652
+ * A kind of file a person may send, and how large (LOOP P-21): a media type
653
+ * (`application/pdf`), a family (`image/*`, `audio/*`) or an extension
654
+ * (`.csv`), lowercase.
655
+ */
656
+ export interface AppUploadKindSpec {
657
+ type: string;
658
+ /** The largest file of this kind, in megabytes; 10 unless said, 25 at most. */
659
+ maxMb: number;
660
+ }
661
+ /**
662
+ * What a person may send in the composer without being asked (LOOP P-21):
663
+ * the kinds it takes, each with its largest size, and how many at once.
664
+ */
665
+ export interface AppUploadsSpec {
666
+ kinds: AppUploadKindSpec[];
667
+ /** The most files sent with one message; 5 unless said. */
668
+ maxFiles: number;
669
+ }
540
670
  /** What the user of an application sees. */
541
671
  export interface AppInterfaceSpec {
542
672
  layout: AppLayout;
@@ -550,14 +680,40 @@ export interface AppInterfaceSpec {
550
680
  commands: AppCommandSpec[];
551
681
  /** Mode switches in the composer, the option picked going with every run (P-19). */
552
682
  modes: AppModeSpec[];
683
+ /**
684
+ * Several assistants in one application (P-20): two at least, or none.
685
+ * Absent from a spec made before profiles.
686
+ */
687
+ profiles?: AppProfileSpec[];
553
688
  /**
554
689
  * What a person may set: the JSON Schema of a form (C-16), drawn beside the
555
690
  * conversation and on a deployment's Ship card; none when unsaid.
556
691
  */
557
692
  settings?: AppFormSchema;
693
+ /**
694
+ * How the settings' fields are drawn (P-20): a uiSchema as
695
+ * `@datalayer/primer-rjsf` reads it, by field name — `ui:widget` one of
696
+ * `select`, `radio`, `range`, `updown`, `switch`, `checkbox`, `text`,
697
+ * `textarea`, `date`, `checkboxes`, `tags`. Each field's own when unsaid.
698
+ */
699
+ settingsUi?: Record<string, unknown>;
700
+ /** The language its own words are in, BCP 47 (P-26); `en` when absent. */
701
+ language?: string;
702
+ /** Its words in other languages, by BCP 47 tag (P-26). */
703
+ translations?: Record<string, AppTranslationSpec>;
704
+ /**
705
+ * What a person may send in the composer without being asked (P-21): none
706
+ * when unsaid — the composer offers no attachment, and the runtime refuses
707
+ * a file sent with a message.
708
+ */
709
+ uploads?: AppUploadsSpec;
558
710
  /** The components of the catalog the surface may use. */
559
711
  components: string[];
712
+ /** Components its developer wrote (P-17); absent from a spec made before them. */
713
+ customComponents?: AppCustomComponentSpec[];
560
714
  surface?: AppSurfaceSpec;
715
+ /** A widget's page written in its code (P-05); none when unsaid. */
716
+ page?: AppPageSpec;
561
717
  /**
562
718
  * The character its floating assistant shows; the paper clip when unsaid.
563
719
  * Said, it wins over the one the person chose in their settings.
@@ -581,6 +737,12 @@ export interface AppInterfaceSpec {
581
737
  export interface AppTestCaseSpec {
582
738
  ask: string;
583
739
  expect: string;
740
+ /**
741
+ * The function of its code that decides the case, by name (LOOP P-06:
742
+ * `@app.test`); `expect` still says it in words, and decides it without
743
+ * the file. Empty, or absent, for a case in words alone.
744
+ */
745
+ code?: string;
584
746
  }
585
747
  /**
586
748
  * What was verified, and how, each in a sentence a person reads (LOOP E-14):
@@ -612,11 +774,38 @@ export interface AppRecordSpec {
612
774
  */
613
775
  suggestTests: boolean;
614
776
  }
615
- /** Optional checks from the catalogue. */
777
+ /** Where a check of an application's code runs (LOOP P-06). */
778
+ export type AppCheckStage = 'answer' | 'tool_call';
779
+ /** A check written in an application's code (LOOP P-06: `@app.check`). */
780
+ export interface AppCodeCheckSpec {
781
+ /** The function of its code that checks. */
782
+ name: string;
783
+ /** On every answer, or every tool call the rules let through. */
784
+ on: AppCheckStage;
785
+ /** What it checks, in a sentence a person reads. */
786
+ description: string;
787
+ }
788
+ /** Optional checks from the catalogue, and its code's own. */
616
789
  export interface AppChecksSpec {
617
790
  guards: string[];
618
791
  gates: string[];
619
792
  track: string;
793
+ /** Checks written in its code (LOOP P-06); absent when it has none. */
794
+ code?: AppCodeCheckSpec[];
795
+ }
796
+ /**
797
+ * A tool of an application's own, written in its code (LOOP P-06:
798
+ * `@app.tool`): its agent calls it, and the rules decide each call by what
799
+ * it `does`, or by a rule that names it by its name alone.
800
+ */
801
+ export interface AppToolSpec {
802
+ name: string;
803
+ /** What it does, for the agent. */
804
+ description: string;
805
+ /** The JSON Schema of its arguments, an object. */
806
+ parameters: Record<string, unknown>;
807
+ /** What it does, by class of action: `read`, `write`, `send`… */
808
+ does: string[];
620
809
  }
621
810
  /** A function of the host page the application's agent may call (LOOP D-10). */
622
811
  export interface AppHostFunctionSpec {
@@ -637,7 +826,15 @@ export interface AppHostFunctionSpec {
637
826
  export interface AppHostBridgeSpec {
638
827
  context: string[];
639
828
  functions: AppHostFunctionSpec[];
829
+ /**
830
+ * Who its user is (LOOP D-21): `claimed`, what the page says (unless
831
+ * said); `signed`, only a token the host's server signed with the
832
+ * deployment's secret — the unsigned one refused.
833
+ */
834
+ user?: AppHostUser;
640
835
  }
836
+ /** What the host page's word on its visitor is worth (LOOP D-21). */
837
+ export type AppHostUser = 'claimed' | 'signed';
641
838
  export interface AppDeploymentSpec {
642
839
  hosted?: {
643
840
  visibility: 'private' | 'invited' | 'organization' | 'link' | 'public';
@@ -711,6 +908,8 @@ export interface AppSpec {
711
908
  skills: string[];
712
909
  /** Backend tools (agentspecs/backend-tools) it adds to its agent's. */
713
910
  backendTools: string[];
911
+ /** Tools of its own, written in its code (LOOP P-06); absent when it has none. */
912
+ tools?: AppToolSpec[];
714
913
  /** The Frames it works under. */
715
914
  context: string[];
716
915
  /** The documents and datasets it answers from. */
@@ -8,7 +8,7 @@ import type { ComponentType, ReactNode } from 'react';
8
8
  import type { ICollaborationProvider } from '@datalayer/jupyter-react';
9
9
  import type { ChatMessage, MessageHandler } from './messages';
10
10
  import type { Protocol, ProtocolConfig } from './protocol';
11
- import type { AgentInspectorSink } from '../components/inspector/agentInspector';
11
+ import type { OtelLiveTracer } from '@datalayer/core/lib/otel/live';
12
12
  import type { McpServerSelection } from './inference';
13
13
  import type { MCPServerTool } from './mcp';
14
14
  import type { AgentRuntimeConfig } from './config';
@@ -1273,11 +1273,12 @@ export interface ChatBaseProps {
1273
1273
  */
1274
1274
  onToolCallComplete?: (context: ToolCallCompleteContext) => void;
1275
1275
  /**
1276
- * The Agent Inspector's sink: the agent's turns (its model, its tokens)
1277
- * and its tool calls, from start to end, are recorded there. Without it,
1278
- * the sink of the nearest `AgentInspectorProvider`, if any.
1276
+ * The Agent Inspector's tracer: the agent's turns (`invoke_agent` spans:
1277
+ * its model, its tokens) and its tool calls (`execute_tool` spans), from
1278
+ * start to end, are recorded there. Without it, the tracer of the nearest
1279
+ * `AgentInspectorProvider`, if any.
1279
1280
  */
1280
- inspector?: AgentInspectorSink | null;
1281
+ inspector?: OtelLiveTracer | null;
1281
1282
  /**
1282
1283
  * Whether to render the top-of-chat tool approval banner (and its review
1283
1284
  * dialog) when `pendingApprovals` is non-empty. The banner/dialog render
@@ -46,6 +46,11 @@ export interface TeamContextSpec {
46
46
  * what the team *is*.
47
47
  */
48
48
  sharing: TeamContextSharing;
49
+ /**
50
+ * The Frames every member works under, in order, `id` or `id:version`
51
+ * (LOOP A-04): the team's shared context, as a Cog names its own.
52
+ */
53
+ frames?: string[];
49
54
  }
50
55
  /** How far members may hand work to each other, and to subagents. */
51
56
  export interface TeamDelegationSpec {
@@ -60,8 +65,8 @@ export interface TeamDelegationSpec {
60
65
  export interface TeamLinkSpec {
61
66
  /** The member asked, by its id in the team. */
62
67
  member: string;
63
- /** The protocol: `a2a`. */
64
- over: 'a2a';
68
+ /** The protocol: `a2a` to an agent or an application, `mcp` to a server member. */
69
+ over: 'a2a' | 'mcp';
65
70
  }
66
71
  export interface TeamAgentspec {
67
72
  /** Agent identifier within the team */
@@ -80,6 +85,12 @@ export interface TeamAgentspec {
80
85
  * application, with its agent, connections, rules and interface.
81
86
  */
82
87
  app?: string;
88
+ /**
89
+ * MCP server catalogue reference, in place of `ref` and `app`: the member
90
+ * is that server, a system of the scene the others reach over MCP
91
+ * (LOOP A-04). It asks nobody.
92
+ */
93
+ server?: string;
83
94
  /** Where its loop turns: in the person's `browser`, or on a `runtime`. */
84
95
  runsIn?: 'browser' | 'runtime';
85
96
  /** The members it asks directly while it works, and over what. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.3.83",
3
+ "version": "1.3.85",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -147,7 +147,7 @@
147
147
  "@ai-sdk/react": "4.0.93",
148
148
  "@anthropic-ai/sdk": "^0.52.0",
149
149
  "@datalayer/agent-teams": "^1.0.0",
150
- "@datalayer/core": "^1.2.14",
150
+ "@datalayer/core": "^1.2.18",
151
151
  "@datalayer/decks": "^1.0.4",
152
152
  "@datalayer/icons-react": "^1.0.16",
153
153
  "@datalayer/jupyter-lexical": "^2.0.18",