@datalayer/agent-runtimes 1.3.87 → 1.3.89

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 (62) hide show
  1. package/lib/components/a2ui/datalayer/Download.d.ts +21 -0
  2. package/lib/components/a2ui/datalayer/Download.js +66 -0
  3. package/lib/components/a2ui/datalayer/drawn.d.ts +1 -1
  4. package/lib/components/a2ui/datalayer/drawn.js +1 -0
  5. package/lib/components/a2ui/datalayer/index.d.ts +2 -1
  6. package/lib/components/a2ui/datalayer/index.js +3 -0
  7. package/lib/components/inspector/a2aSpans.d.ts +9 -0
  8. package/lib/components/inspector/a2aSpans.js +11 -1
  9. package/lib/components/teams/AnswerSurfaces.d.ts +56 -0
  10. package/lib/components/teams/AnswerSurfaces.js +27 -0
  11. package/lib/components/teams/AnswerSurfacesView.d.ts +14 -0
  12. package/lib/components/teams/AnswerSurfacesView.js +30 -0
  13. package/lib/components/teams/index.d.ts +1 -0
  14. package/lib/components/teams/index.js +1 -0
  15. package/lib/components/teams/useA2ATeam.d.ts +56 -2
  16. package/lib/components/teams/useA2ATeam.js +122 -3
  17. package/lib/hooks/useAgentRuntimes.d.ts +13 -0
  18. package/lib/hooks/useAgentRuntimes.js +11 -1
  19. package/lib/loop/apps/AppFeedback.js +11 -2
  20. package/lib/loop/apps/AppRenderer.d.ts +13 -1
  21. package/lib/loop/apps/AppRenderer.js +34 -1
  22. package/lib/loop/apps/AppRuntimePlugins.d.ts +8 -0
  23. package/lib/loop/apps/AppRuntimePlugins.js +87 -0
  24. package/lib/loop/apps/feedback.d.ts +7 -0
  25. package/lib/loop/apps/feedback.js +3 -0
  26. package/lib/loop/apps/pluginPair.d.ts +60 -0
  27. package/lib/loop/apps/pluginPair.js +44 -0
  28. package/lib/loop/apps/threads.d.ts +35 -0
  29. package/lib/loop/apps/threads.js +79 -0
  30. package/lib/loop/embed/LoopEmbed.d.ts +4 -3
  31. package/lib/loop/embed/hostBridge.d.ts +27 -0
  32. package/lib/loop/embed/hostBridge.js +47 -0
  33. package/lib/loop/index.d.ts +1 -1
  34. package/lib/loop/index.js +1 -1
  35. package/lib/loop/plugins/agent-capacity/index.d.ts +7 -0
  36. package/lib/loop/plugins/agent-capacity/index.js +3 -2
  37. package/lib/loop/plugins/agents/DatalayerAgentBridge.js +11 -0
  38. package/lib/loop/plugins/agents/appLaunch.d.ts +15 -0
  39. package/lib/loop/plugins/agents/appLaunch.js +28 -0
  40. package/lib/loop/plugins/chat/ChatView.js +177 -109
  41. package/lib/loop/shell/LoopWorkspace.d.ts +3 -3
  42. package/lib/loop/shell/LoopWorkspace.js +1 -1
  43. package/lib/runtimes/__tests__/fixtures/accounting-agent-card.json +10 -2
  44. package/lib/runtimes/actions.js +23 -0
  45. package/lib/runtimes/apis.d.ts +18 -0
  46. package/lib/runtimes/browser/a2aPeer.d.ts +19 -2
  47. package/lib/runtimes/browser/a2aPeer.js +13 -7
  48. package/lib/specs/apps.js +102 -30
  49. package/lib/specs/envvars.d.ts +2 -0
  50. package/lib/specs/envvars.js +22 -0
  51. package/lib/specs/outputs.d.ts +1 -0
  52. package/lib/specs/outputs.js +12 -0
  53. package/lib/specs/sceneSchema.js +12 -1
  54. package/lib/specs/scenes.js +238 -121
  55. package/lib/specs/teams/teams.js +23 -7
  56. package/lib/specs/uiPlugins.js +55 -0
  57. package/lib/stores/agentRuntimeStore.js +4 -0
  58. package/lib/types/chat.d.ts +6 -0
  59. package/lib/types/scenes.d.ts +7 -1
  60. package/package.json +1 -1
  61. package/scripts/codegen/generate_envvars.py +0 -1
  62. package/scripts/codegen/generate_mcp_servers.py +11 -7
@@ -749,6 +749,10 @@ export const CROP_MONITORING_TEAM_SPEC_0_0_1 = {
749
749
  text: 'Which datasets and granules cover the Po valley for June 2026?',
750
750
  emoji: '🛰️',
751
751
  },
752
+ {
753
+ text: 'Save the June 2026 granules of the Po valley to my Space.',
754
+ emoji: '💾',
755
+ },
752
756
  ],
753
757
  delegation: {
754
758
  maxDepth: 0,
@@ -815,13 +819,17 @@ export const DISASTER_ASSESSMENT_TEAM_SPEC_0_0_1 = {
815
819
  emoji: '🌊',
816
820
  },
817
821
  {
818
- text: 'Fires burned around Los Angeles from 7 January 2025. What was affected, and what changed?',
822
+ text: 'Fires burned around Los Angeles from 7 January 2025. Which imagery shows what changed?',
819
823
  emoji: '🔥',
820
824
  },
821
825
  {
822
- text: 'The Ahr valley was hit by a storm on 14 July 2021. What was affected, and what changed?',
826
+ text: 'The Ahr valley was hit by a storm on 14 July 2021. Chart the imagery found each day from 10 to 20 July.',
823
827
  emoji: '🌧️',
824
828
  },
829
+ {
830
+ text: 'Send the Valencia flood assessment to the emergency services.',
831
+ emoji: '📣',
832
+ },
825
833
  ],
826
834
  delegation: {
827
835
  maxDepth: 1,
@@ -1140,13 +1148,14 @@ export const MONTH_END_CLOSE_TEAM_SPEC_0_0_1 = {
1140
1148
  emoji: '☑️',
1141
1149
  },
1142
1150
  {
1143
- text: 'Which accruals should be booked for last month, and for how much?',
1151
+ text: 'Which accruals should be booked for last month? Show me the entries each rests on.',
1144
1152
  emoji: '🧾',
1145
1153
  },
1146
1154
  {
1147
- text: 'Which bank lines and open items are still unreconciled for last month?',
1148
- emoji: '🏦',
1155
+ text: "Chart last month's expenses by account against the month before.",
1156
+ emoji: '📊',
1149
1157
  },
1158
+ { text: 'Post the accruals you suggested for last month.', emoji: '✍️' },
1150
1159
  ],
1151
1160
  delegation: {
1152
1161
  maxDepth: 0,
@@ -1741,10 +1750,17 @@ export const SALES_AND_ACCOUNTING_TEAM_SPEC_0_0_1 = {
1741
1750
  emoji: '🧾',
1742
1751
  },
1743
1752
  {
1744
- text: 'Give me the aged receivables as of today, by customer.',
1753
+ text: 'Chart the aged receivables as of today, by customer.',
1745
1754
  emoji: '⏳',
1746
1755
  },
1747
- { text: 'What does the trial balance say for last month?', emoji: '⚖️' },
1756
+ {
1757
+ text: 'Which invoices make up the largest balance due? Show me each one.',
1758
+ emoji: '🔎',
1759
+ },
1760
+ {
1761
+ text: 'Send a payment reminder to every customer more than 60 days late.',
1762
+ emoji: '✉️',
1763
+ },
1748
1764
  ],
1749
1765
  delegation: {
1750
1766
  maxDepth: 1,
@@ -998,6 +998,61 @@ export const A2UI_UI_PLUGIN_0_0_1 = {
998
998
  },
999
999
  },
1000
1000
  },
1001
+ {
1002
+ id: 'Download',
1003
+ name: 'File to download',
1004
+ category: 'data',
1005
+ emoji: '📄',
1006
+ description: 'A file the application gives, to save: a report, a sheet, an export — by its link, or the file itself as a data: URL.',
1007
+ version: '1.0.0',
1008
+ standard: false,
1009
+ properties: {
1010
+ type: 'object',
1011
+ required: ['name', 'url'],
1012
+ properties: {
1013
+ name: {
1014
+ type: 'string',
1015
+ title: 'File name',
1016
+ description: 'What the file is saved as, with its extension.',
1017
+ minLength: 1,
1018
+ },
1019
+ url: {
1020
+ type: 'string',
1021
+ title: 'Link',
1022
+ description: 'Where the file is: an http(s) link, or the file itself as a data: URL.',
1023
+ pattern: '^(https?://|data:)',
1024
+ },
1025
+ media_type: {
1026
+ type: 'string',
1027
+ title: 'Kind',
1028
+ description: 'Its media type (text/csv, application/pdf…), said beside its name.',
1029
+ },
1030
+ size: {
1031
+ type: 'integer',
1032
+ title: 'Size (bytes)',
1033
+ description: 'How large it is, said beside its name.',
1034
+ minimum: 0,
1035
+ },
1036
+ description: {
1037
+ type: 'string',
1038
+ title: 'Description',
1039
+ description: 'A line under its name.',
1040
+ },
1041
+ },
1042
+ },
1043
+ bindings: {
1044
+ shows: [],
1045
+ sends: [],
1046
+ },
1047
+ events: ['download'],
1048
+ example: {
1049
+ name: 'totals.csv',
1050
+ url: 'data:text/csv;base64,bW9udGgsdG90YWwKSmFuLDEyMDAK',
1051
+ media_type: 'text/csv',
1052
+ size: 21,
1053
+ description: "The month's totals.",
1054
+ },
1055
+ },
1001
1056
  ],
1002
1057
  };
1003
1058
  export const MCP_APPS_UI_PLUGIN_0_0_1 = {
@@ -371,6 +371,10 @@ export const agentRuntimeStore = createStore()(subscribeWithSelector(persist((se
371
371
  givenName: runtimeOptions.givenName,
372
372
  capabilities: runtimeOptions.capabilities,
373
373
  snapshot: runtimeOptions.snapshot,
374
+ // The application it is launched for, with its Appspec (R-19).
375
+ appSpec: runtimeOptions.appSpec,
376
+ appUid: runtimeOptions.appUid,
377
+ deploymentUid: runtimeOptions.deploymentUid,
374
378
  });
375
379
  set({ status: 'connecting' });
376
380
  const jupyterBaseUrl = runtimeRecord.ingress;
@@ -662,6 +662,12 @@ export type ResumedThread = {
662
662
  id: string;
663
663
  /** What it holds already; none for a new one. */
664
664
  messages: ChatMessage[];
665
+ /**
666
+ * Opened from a person's history (LOOP P-24): its conversation is read
667
+ * from the runtime the application's chat runs on as the chat mounts —
668
+ * held there, else resumed from its record — in place of `messages`.
669
+ */
670
+ fromRuntime?: boolean;
665
671
  /**
666
672
  * Told the thread a message is first sent on — this one, or a new one
667
673
  * after the header's + — so that its host keeps it. A stable function.
@@ -71,7 +71,13 @@ export interface SceneCueSpec {
71
71
  event: string;
72
72
  }
73
73
  /** What kind of answer comes back, and what the page shows. */
74
- export type SceneAnswerKind = 'words' | 'table' | 'chart' | 'notebook' | 'map' | 'file' | 'image';
74
+ export type SceneAnswerKind = 'words' | 'table' | 'chart' | 'notebook' | 'map' | 'file' | 'image'
75
+ /** The sources it read, as cards that open (STUDIO H-02). */
76
+ | 'sources'
77
+ /** A choice as buttons that answer the application. */
78
+ | 'choice'
79
+ /** A choice whose option does more than read: asked, and refused to a visitor. */
80
+ | 'approval';
75
81
  /** How fast a beat plays for the audience. */
76
82
  export type ScenePace = 'quick' | 'steady' | 'slow';
77
83
  /** One member asking another over a protocol, or answering the audience. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.3.87",
3
+ "version": "1.3.89",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -57,7 +57,6 @@ def generate_python_code(specs: list[dict[str, Any]]) -> str:
57
57
  "",
58
58
  "from agent_runtimes.types import EnvvarSpec",
59
59
  "",
60
- "",
61
60
  "# " + "=" * 76,
62
61
  "# Environment Variable Definitions",
63
62
  "# " + "=" * 76,
@@ -126,13 +126,17 @@ def generate_python_code(specs: list[dict[str, Any]]) -> str:
126
126
  if env_formatted:
127
127
  lines.append(f" env={env_formatted},")
128
128
 
129
- lines.extend(
130
- [
131
- f" required_env_vars={envvars_formatted},",
132
- ")",
133
- "",
134
- ]
135
- )
129
+ lines.append(f" required_env_vars={envvars_formatted},")
130
+ # What the code its tools write reads in the code sandbox: given there
131
+ # when the account has them, never required (LOOP R-19).
132
+ sandbox_envvars = spec.get("sandbox_envvars", [])
133
+ if sandbox_envvars:
134
+ lines.append(
135
+ " sandbox_env_vars=["
136
+ + ", ".join(f'"{v}"' for v in sandbox_envvars)
137
+ + "],"
138
+ )
139
+ lines.extend([")", ""])
136
140
 
137
141
  # Generate catalog dictionary
138
142
  lines.extend(