@mgamadeus/ddd-agents 0.1.0-alpha.22 → 0.1.0-alpha.24

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 (164) hide show
  1. package/README.md +3 -2
  2. package/dist/chat.js +87 -893
  3. package/dist/chat.js.map +1 -1
  4. package/dist/chunks/ConversationMessageInputComposerWidgets-BxyaFBA6.js +631 -0
  5. package/dist/chunks/ConversationMessageInputComposerWidgets-BxyaFBA6.js.map +1 -0
  6. package/dist/chunks/{WebSearchResultsConversationWidget-BvnLWHyi.js → WebSearchResultsConversationWidget-as3p5bHw.js} +147 -1125
  7. package/dist/chunks/WebSearchResultsConversationWidget-as3p5bHw.js.map +1 -0
  8. package/dist/chunks/{canvas-behaviours-BRFR1ALE.js → canvas-behaviours-AvzKSYyv.js} +4 -4
  9. package/dist/chunks/{canvas-behaviours-BRFR1ALE.js.map → canvas-behaviours-AvzKSYyv.js.map} +1 -1
  10. package/dist/chunks/canvas-reducers-Bfp_i7lc.js +88 -0
  11. package/dist/chunks/canvas-reducers-Bfp_i7lc.js.map +1 -0
  12. package/dist/chunks/{canvasBodies-9SuF6NAB.js → canvasBodies-Cvu3l38p.js} +12 -6
  13. package/dist/chunks/canvasBodies-Cvu3l38p.js.map +1 -0
  14. package/dist/chunks/canvasStorage-EvQsGdto.js +65 -0
  15. package/dist/chunks/canvasStorage-EvQsGdto.js.map +1 -0
  16. package/dist/chunks/contract-BxmMxYPF.js +96 -0
  17. package/dist/chunks/contract-BxmMxYPF.js.map +1 -0
  18. package/dist/chunks/conversation-BEF0aesf.js +31 -0
  19. package/dist/chunks/conversation-BEF0aesf.js.map +1 -0
  20. package/dist/chunks/entity-detail-name-3A82gDAp.js +15 -0
  21. package/dist/chunks/entity-detail-name-3A82gDAp.js.map +1 -0
  22. package/dist/chunks/icon-names-Di6c4zLo.js +86 -0
  23. package/dist/chunks/icon-names-Di6c4zLo.js.map +1 -0
  24. package/dist/chunks/index-7Qc_3GbG.js +1046 -0
  25. package/dist/chunks/index-7Qc_3GbG.js.map +1 -0
  26. package/dist/chunks/{ConversationMarkdown-W7NHglmL.js → widget-click-signal-sources-DulRkNvZ.js} +54 -7
  27. package/dist/chunks/widget-click-signal-sources-DulRkNvZ.js.map +1 -0
  28. package/dist/chunks/{widget-image-readiness-signal-DeOuL89j.js → widget-image-readiness-signal-D3ci53xr.js} +2 -2
  29. package/dist/chunks/{widget-image-readiness-signal-DeOuL89j.js.map → widget-image-readiness-signal-D3ci53xr.js.map} +1 -1
  30. package/dist/chunks/{widget-name-resolver-DyIY6Zu4.js → widget-name-resolver-BGN3HpoG.js} +80 -117
  31. package/dist/chunks/widget-name-resolver-BGN3HpoG.js.map +1 -0
  32. package/dist/chunks/{withPollingChangeSubscription-BLDAWF-o.js → withPollingChangeSubscription-B16htQGd.js} +2 -2
  33. package/dist/chunks/{withPollingChangeSubscription-BLDAWF-o.js.map → withPollingChangeSubscription-B16htQGd.js.map} +1 -1
  34. package/dist/client-testing.js +91 -2
  35. package/dist/client-testing.js.map +1 -1
  36. package/dist/client.js +1 -1
  37. package/dist/contract.js +8 -27
  38. package/dist/contract.js.map +1 -1
  39. package/dist/files/chat/Conversation.module.scss +268 -0
  40. package/dist/files/chat/ConversationViewBody/ConversationViewBody.module.scss +336 -0
  41. package/dist/files/chat/_conversation-tokens.scss +37 -0
  42. package/dist/files/image-render/WidgetImageRender.module.scss +22 -0
  43. package/dist/files/kit/ComposedViewConversationWidget.md +59 -0
  44. package/dist/files/kit/components/data/data.preview-fixtures.json +3298 -0
  45. package/dist/files/kit/components/embedding/widget.preview-fixtures.json +147 -0
  46. package/dist/files/kit/components/entity/entity-link.preview-fixtures.json +340 -0
  47. package/dist/files/kit/components/form/form.preview-fixtures.json +319 -0
  48. package/dist/files/kit/components/inputs/button.preview-fixtures.json +301 -0
  49. package/dist/files/kit/components/inputs/checkbox.preview-fixtures.json +35 -0
  50. package/dist/files/kit/components/inputs/date-picker.preview-fixtures.json +36 -0
  51. package/dist/files/kit/components/inputs/input.preview-fixtures.json +55 -0
  52. package/dist/files/kit/components/inputs/radio-group.preview-fixtures.json +76 -0
  53. package/dist/files/kit/components/inputs/select.preview-fixtures.json +314 -0
  54. package/dist/files/kit/components/inputs/slider.preview-fixtures.json +178 -0
  55. package/dist/files/kit/components/inputs/tabs.preview-fixtures.json +304 -0
  56. package/dist/files/kit/components/inputs/textarea.preview-fixtures.json +37 -0
  57. package/dist/files/kit/components/layout/layout.preview-fixtures.json +892 -0
  58. package/dist/files/kit/components/map/map.preview-fixtures.json +339 -0
  59. package/dist/files/kit/components/media/image-group.preview-fixtures.json +228 -0
  60. package/dist/files/kit/components/media/image.preview-fixtures.json +61 -0
  61. package/dist/files/kit/components/media/video-card/video-card.preview-fixtures.json +121 -0
  62. package/dist/files/kit/components/media/video.preview-fixtures.json +68 -0
  63. package/dist/files/kit/components/rich/code.preview-fixtures.json +105 -0
  64. package/dist/files/kit/components/rich/diagram.preview-fixtures.json +89 -0
  65. package/dist/files/kit/components/rich/math.preview-fixtures.json +152 -0
  66. package/dist/files/kit/components/rich/svg.preview-fixtures.json +243 -0
  67. package/dist/files/kit/components/text/badge.preview-fixtures.json +44 -0
  68. package/dist/files/kit/components/text/caption.preview-fixtures.json +31 -0
  69. package/dist/files/kit/components/text/favicon.preview-fixtures.json +69 -0
  70. package/dist/files/kit/components/text/label.preview-fixtures.json +48 -0
  71. package/dist/files/kit/components/text/link.preview-fixtures.json +103 -0
  72. package/dist/files/kit/components/text/markdown.preview-fixtures.json +29 -0
  73. package/dist/files/kit/components/text/source-ref.preview-fixtures.json +51 -0
  74. package/dist/files/kit/components/text/text.preview-fixtures.json +106 -0
  75. package/dist/files/kit/components/text/title.preview-fixtures.json +172 -0
  76. package/dist/files/kit/composed-view-widget-contract.json +88 -0
  77. package/dist/files/kit/composed-view.preview-fixtures.json +376 -0
  78. package/dist/files/renderer/conversation-widget-layout.module.scss +47 -0
  79. package/dist/files/renderer/widget-tree/composed-node-schema.json +3428 -0
  80. package/dist/files/styles/_conversation-widget-container.scss +6 -0
  81. package/dist/files/styles/_media.scss +50 -0
  82. package/dist/files/styles/_spacings.scss +23 -0
  83. package/dist/files/styles/_surfaces.scss +28 -0
  84. package/dist/files/widgets/ClockConversationWidget/ClockConversationWidget.md +53 -0
  85. package/dist/files/widgets/ClockConversationWidget/clock.preview-fixtures.json +76 -0
  86. package/dist/files/widgets/ConceptExplainerConversationWidget/ConceptExplainerConversationWidget.md +86 -0
  87. package/dist/files/widgets/ConceptExplainerConversationWidget/concept-explainer.preview-fixtures.json +23 -0
  88. package/dist/files/widgets/ConversationSearchResultsConversationWidget/ConversationSearchResultsConversationWidget.md +59 -0
  89. package/dist/files/widgets/ConversationSearchResultsConversationWidget/conversation-search-results.preview-fixtures.json +85 -0
  90. package/dist/files/widgets/CurrencyConverterConversationWidget/CurrencyConverterConversationWidget.md +51 -0
  91. package/dist/files/widgets/CurrencyConverterConversationWidget/currency-converter.preview-fixtures.json +73 -0
  92. package/dist/files/widgets/CustomVisualizationConversationWidget/CustomVisualizationConversationWidget.md +83 -0
  93. package/dist/files/widgets/CustomVisualizationConversationWidget/custom-visualization.preview-fixtures.json +227 -0
  94. package/dist/files/widgets/CustomVisualizationConversationWidget/sandbox-frame/custom-visualization-frame.html +188 -0
  95. package/dist/files/widgets/EntityMentionConversationWidget/EntityMentionConversationWidget.md +55 -0
  96. package/dist/files/widgets/EntityMentionConversationWidget/entity-mention.preview-fixtures.json +55 -0
  97. package/dist/files/widgets/MultiChoiceConversationWidget/MultiChoiceConversationWidget.md +61 -0
  98. package/dist/files/widgets/MultiChoiceConversationWidget/multi-choice-widget-contract.json +43 -0
  99. package/dist/files/widgets/MultiChoiceConversationWidget/multi-choice.preview-fixtures.json +103 -0
  100. package/dist/files/widgets/QuickRepliesConversationWidget/QuickRepliesConversationWidget.md +65 -0
  101. package/dist/files/widgets/QuickRepliesConversationWidget/quick-replies-widget-contract.json +43 -0
  102. package/dist/files/widgets/QuickRepliesConversationWidget/quick-replies.preview-fixtures.json +45 -0
  103. package/dist/files/widgets/SuggestedActions/SuggestedActions.md +60 -0
  104. package/dist/files/widgets/SuggestedActions/suggested-actions.preview-fixtures.json +19 -0
  105. package/dist/files/widgets/ToolTraceConversationWidget/ToolTraceConversationWidget.md +48 -0
  106. package/dist/files/widgets/ToolTraceConversationWidget/tool-trace.preview-fixtures.json +32 -0
  107. package/dist/files/widgets/WebSearchResultsConversationWidget/WebSearchResultsConversationWidget.md +49 -0
  108. package/dist/files/widgets/WebSearchResultsConversationWidget/web-search-results.preview-fixtures.json +57 -0
  109. package/dist/files/widgets/WritingDraftConversationWidget/WritingDraftConversationWidget.md +66 -0
  110. package/dist/files/widgets/WritingDraftConversationWidget/writing-draft.preview-fixtures.json +129 -0
  111. package/dist/image-render.js +11 -10
  112. package/dist/image-render.js.map +1 -1
  113. package/dist/index.js +32 -27
  114. package/dist/index.js.map +1 -1
  115. package/dist/kit.js +11 -2
  116. package/dist/kit.js.map +1 -1
  117. package/dist/preview.js +47 -18
  118. package/dist/preview.js.map +1 -1
  119. package/dist/provider.js +71 -0
  120. package/dist/provider.js.map +1 -0
  121. package/dist/renderer.js +142 -62
  122. package/dist/renderer.js.map +1 -1
  123. package/dist/styles.css +86 -38
  124. package/dist/types/client/testing/test-conversation-widgets.d.ts +25 -0
  125. package/dist/types/client/testing/widget-hydration-stand-ins.d.ts +42 -0
  126. package/dist/types/entries/chat.d.ts +12 -0
  127. package/dist/types/entries/client-testing.d.ts +4 -0
  128. package/dist/types/entries/contract.d.ts +1 -0
  129. package/dist/types/entries/index.d.ts +4 -3
  130. package/dist/types/entries/kit.d.ts +7 -0
  131. package/dist/types/entries/preview.d.ts +2 -0
  132. package/dist/types/entries/provider.d.ts +1 -0
  133. package/dist/types/entries/renderer.d.ts +19 -1
  134. package/dist/types/entries/widgets.d.ts +13 -0
  135. package/dist/types/kit/components/data/apex-chart-component.d.ts +3 -0
  136. package/dist/types/kit/components/data/chart-model.d.ts +164 -0
  137. package/dist/types/kit/components/data/data-value-format.d.ts +44 -0
  138. package/dist/types/kit/components/data/use-chart-palette.d.ts +9 -0
  139. package/dist/types/kit/components/data/use-number-locale.d.ts +5 -0
  140. package/dist/types/kit/components/map/use-google-maps-auth-failure.d.ts +18 -0
  141. package/dist/types/kit/entity-detail/entity-detail-bodies.d.ts +2 -0
  142. package/dist/types/provider/index.d.ts +1 -0
  143. package/dist/types/renderer/_access/ConversationWidgetGateSkeleton.d.ts +6 -0
  144. package/dist/types/renderer/_agent-space/use-conversation-widget-agent-space-fallback.d.ts +16 -0
  145. package/dist/types/renderer/canvas/entity-detail-instance.d.ts +5 -3
  146. package/dist/types/renderer/canvas/use-anchor-widget-agent-space-key.d.ts +17 -0
  147. package/dist/types/renderer/conversationWidgetRegistry.d.ts +6 -0
  148. package/dist/types/renderer/read-conversation-widget-variant.d.ts +22 -0
  149. package/dist/types/renderer/widget-hydration/use-widget-hydration.d.ts +5 -0
  150. package/dist/types/widgets/EntityMentionConversationWidget/stories/EntityMentionAskFlowStory.d.ts +8 -0
  151. package/dist/types/widgets/_shared/CardFooter.d.ts +6 -0
  152. package/dist/types/widgets/_shared/WidgetLabel.d.ts +8 -0
  153. package/dist/types/widgets/_shared/entity-update-channel.d.ts +17 -0
  154. package/dist/types/widgets/_shared/use-element-visible.d.ts +6 -0
  155. package/dist/widgets.js +120 -27
  156. package/dist/widgets.js.map +1 -1
  157. package/package.json +74 -1
  158. package/public-api.json +779 -0
  159. package/dist/chunks/ConversationMarkdown-W7NHglmL.js.map +0 -1
  160. package/dist/chunks/WebSearchResultsConversationWidget-BvnLWHyi.js.map +0 -1
  161. package/dist/chunks/canvasBodies-9SuF6NAB.js.map +0 -1
  162. package/dist/chunks/decide-canvas-open-Ct-wnNEJ.js +0 -20
  163. package/dist/chunks/decide-canvas-open-Ct-wnNEJ.js.map +0 -1
  164. package/dist/chunks/widget-name-resolver-DyIY6Zu4.js.map +0 -1
@@ -0,0 +1,147 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "widget-embedded-weather-forecast",
6
+ "description": "The Widget node: the embeddable WeatherForecast inside a Stack under a Title and a Caption — today's weather at the dental practice in Kassel (cloudy at 9 °C, rain from 16:00), answered by the WeatherForecast hydration.",
7
+ "dataSet": "kassel-dental-practice",
8
+ "payload": {
9
+ "view": {
10
+ "type": "Stack",
11
+ "gap": "small",
12
+ "children": [
13
+ {
14
+ "type": "Title",
15
+ "text": "Wetter heute an der Praxis"
16
+ },
17
+ {
18
+ "type": "Caption",
19
+ "text": "Wilhelmshöher Allee 120, Kassel – Regen ab etwa 16 Uhr"
20
+ },
21
+ {
22
+ "type": "Widget",
23
+ "widget": "WeatherForecast",
24
+ "fields": {
25
+ "agentSpaceId": 7
26
+ }
27
+ }
28
+ ]
29
+ }
30
+ },
31
+ "agentSpaceId": 7,
32
+ "locale": "de",
33
+ "expectedState": "data",
34
+ "width": 528,
35
+ "hydration": {
36
+ "WeatherForecast": {
37
+ "forecast": {
38
+ "placeName": "Kassel",
39
+ "observedAt": "2026-10-25T09:30:00+01:00",
40
+ "timezone": "Europe/Berlin",
41
+ "sourceName": "Xweather",
42
+ "condition": "CLOUDY",
43
+ "conditionText": "Bewölkt",
44
+ "temperatureC": 9.1,
45
+ "feelsLikeC": 7.4,
46
+ "windKmh": 17,
47
+ "precipitationMm": 0.0,
48
+ "isDaylight": true,
49
+ "hours": [
50
+ {
51
+ "at": "2026-10-25T10:00:00+01:00",
52
+ "condition": "CLOUDY",
53
+ "temperatureC": 9.8,
54
+ "precipitationProbabilityPercent": 20,
55
+ "windKmh": 18
56
+ },
57
+ {
58
+ "at": "2026-10-25T11:00:00+01:00",
59
+ "condition": "PARTLY_CLOUDY",
60
+ "temperatureC": 10.9,
61
+ "precipitationProbabilityPercent": 15,
62
+ "windKmh": 19
63
+ },
64
+ {
65
+ "at": "2026-10-25T12:00:00+01:00",
66
+ "condition": "PARTLY_CLOUDY",
67
+ "temperatureC": 11.8,
68
+ "precipitationProbabilityPercent": 10,
69
+ "windKmh": 21
70
+ },
71
+ {
72
+ "at": "2026-10-25T13:00:00+01:00",
73
+ "condition": "PARTLY_CLOUDY",
74
+ "temperatureC": 12.4,
75
+ "precipitationProbabilityPercent": 10,
76
+ "windKmh": 22
77
+ },
78
+ {
79
+ "at": "2026-10-25T14:00:00+01:00",
80
+ "condition": "CLOUDY",
81
+ "temperatureC": 12.6,
82
+ "precipitationProbabilityPercent": 25,
83
+ "windKmh": 22
84
+ },
85
+ {
86
+ "at": "2026-10-25T15:00:00+01:00",
87
+ "condition": "CLOUDY",
88
+ "temperatureC": 12.1,
89
+ "precipitationProbabilityPercent": 35,
90
+ "windKmh": 24
91
+ },
92
+ {
93
+ "at": "2026-10-25T16:00:00+01:00",
94
+ "condition": "RAIN",
95
+ "temperatureC": 11.3,
96
+ "precipitationProbabilityPercent": 60,
97
+ "windKmh": 26
98
+ },
99
+ {
100
+ "at": "2026-10-25T17:00:00+01:00",
101
+ "condition": "RAIN",
102
+ "temperatureC": 10.4,
103
+ "precipitationProbabilityPercent": 70,
104
+ "windKmh": 25
105
+ },
106
+ {
107
+ "at": "2026-10-25T18:00:00+01:00",
108
+ "condition": "CLOUDY",
109
+ "temperatureC": 9.6,
110
+ "precipitationProbabilityPercent": 45,
111
+ "windKmh": 21
112
+ },
113
+ {
114
+ "at": "2026-10-25T19:00:00+01:00",
115
+ "condition": "CLOUDY",
116
+ "temperatureC": 8.9,
117
+ "precipitationProbabilityPercent": 30,
118
+ "windKmh": 18
119
+ },
120
+ {
121
+ "at": "2026-10-25T20:00:00+01:00",
122
+ "condition": "PARTLY_CLOUDY",
123
+ "temperatureC": 8.2,
124
+ "precipitationProbabilityPercent": 20,
125
+ "windKmh": 15
126
+ },
127
+ {
128
+ "at": "2026-10-25T21:00:00+01:00",
129
+ "condition": "PARTLY_CLOUDY",
130
+ "temperatureC": 7.6,
131
+ "precipitationProbabilityPercent": 15,
132
+ "windKmh": 13
133
+ }
134
+ ],
135
+ "minTemperatureC": 6.0,
136
+ "maxTemperatureC": 13.0,
137
+ "sunrise": "07:38",
138
+ "sunset": "17:02",
139
+ "summaryText": "Vormittags freundlich, ab dem späten Nachmittag Regen, abends wieder trocken.",
140
+ "warnings": [],
141
+ "days": []
142
+ }
143
+ }
144
+ }
145
+ }
146
+ ]
147
+ }
@@ -0,0 +1,340 @@
1
+ {
2
+ "wireName": "ComposedView",
3
+ "fixtures": [
4
+ {
5
+ "name": "entity-link-business-card",
6
+ "description": "Screenshot 20 rebuilt: a business card whose name is an EntityLink (title variant) and whose footer button runs the same openEntity action. The action carries the reference as the backend stores it after resolving it (the L-SERIAL persist contract). A click on the name opens the entityDetail canvas with the body the app registers for the `business` entity type; the example response stands for that body's read of business 301.",
7
+ "payload": {
8
+ "actions": {
9
+ "openLeve": {
10
+ "type": "openEntity",
11
+ "ref": "call_places_1:business:0",
12
+ "entity": {
13
+ "entityType": "business",
14
+ "entityId": "301",
15
+ "agentSpaceId": 7
16
+ }
17
+ }
18
+ },
19
+ "view": {
20
+ "type": "Surface",
21
+ "slots": {
22
+ "media": [
23
+ {
24
+ "type": "Image",
25
+ "src": "https://thumb.wikimedia.org/wikipedia/commons/thumb/5/5a/M%C3%BCnster%2C_Prinzipalmarkt%2C_Stadtweinhaus_und_Rathaus_--_2023_--_7969-73.jpg/960px-M%C3%BCnster%2C_Prinzipalmarkt%2C_Stadtweinhaus_und_Rathaus_--_2023_--_7969-73.jpg",
26
+ "alt": "Der Prinzipalmarkt in Münster",
27
+ "aspectRatio": "16:9"
28
+ }
29
+ ],
30
+ "footer": [
31
+ {
32
+ "type": "Button",
33
+ "label": "Restaurantdetails öffnen",
34
+ "onClick": {
35
+ "action": "openLeve"
36
+ },
37
+ "icon": "info",
38
+ "fullWidth": true
39
+ }
40
+ ]
41
+ },
42
+ "children": [
43
+ {
44
+ "type": "Stack",
45
+ "gap": "xsmall",
46
+ "children": [
47
+ {
48
+ "type": "Stack",
49
+ "direction": "row",
50
+ "justify": "between",
51
+ "align": "center",
52
+ "children": [
53
+ {
54
+ "type": "EntityLink",
55
+ "text": "Altes Gasthaus Leve",
56
+ "action": "openLeve",
57
+ "variant": "title"
58
+ },
59
+ {
60
+ "type": "Badge",
61
+ "text": "Restaurant"
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "type": "Caption",
67
+ "text": "Westfälische Küche · Historisches Gasthaus"
68
+ },
69
+ {
70
+ "type": "Stack",
71
+ "direction": "row",
72
+ "gap": "xsmall",
73
+ "align": "center",
74
+ "children": [
75
+ {
76
+ "type": "Icon",
77
+ "name": "starActive"
78
+ },
79
+ {
80
+ "type": "Text",
81
+ "text": "4,3"
82
+ },
83
+ {
84
+ "type": "Caption",
85
+ "text": "(891)"
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "type": "Stack",
91
+ "direction": "row",
92
+ "gap": "xsmall",
93
+ "align": "center",
94
+ "children": [
95
+ {
96
+ "type": "Icon",
97
+ "name": "location",
98
+ "tone": "muted"
99
+ },
100
+ {
101
+ "type": "Text",
102
+ "text": "Alter Steinweg 37, 48143 Münster-Altstadt, Deutschland"
103
+ }
104
+ ]
105
+ }
106
+ ]
107
+ }
108
+ ]
109
+ }
110
+ },
111
+ "expectedState": "data",
112
+ "width": 528,
113
+ "interactions": [
114
+ {
115
+ "name": "open-detail-from-name",
116
+ "click": {
117
+ "selector": "[data-testid=composed-entity-link]"
118
+ }
119
+ }
120
+ ],
121
+ "agentSpaceId": 7,
122
+ "responses": {
123
+ "GET /api/example/agent-spaces/7/businesses/301": {
124
+ "business": {
125
+ "id": 301,
126
+ "name": "Altes Gasthaus Leve"
127
+ }
128
+ }
129
+ }
130
+ },
131
+ {
132
+ "name": "entity-link-in-sentence-and-chips",
133
+ "description": "The entity names inside prose (a Text with inline EntityLinks, as ChatGPT links names in its answer) and the same businesses as chips under it, each chip bound to its own action through a Repeat. Click the second chip: the entityDetail canvas opens for that business.",
134
+ "payload": {
135
+ "data": {
136
+ "businesses": [
137
+ {
138
+ "name": "Kleiner Kiepenkerl",
139
+ "action": "openKiepenkerl"
140
+ },
141
+ {
142
+ "name": "Großer Kiepenkerl Gasthaus",
143
+ "action": "openGrosser"
144
+ },
145
+ {
146
+ "name": "Gasthaus Stuhlmacher",
147
+ "action": "openStuhlmacher"
148
+ }
149
+ ]
150
+ },
151
+ "actions": {
152
+ "openKiepenkerl": {
153
+ "type": "openEntity",
154
+ "ref": "call_c_1:business:0",
155
+ "entity": {
156
+ "entityType": "business",
157
+ "entityId": "9001",
158
+ "agentSpaceId": 7
159
+ }
160
+ },
161
+ "openGrosser": {
162
+ "type": "openEntity",
163
+ "ref": "call_c_1:business:1",
164
+ "entity": {
165
+ "entityType": "business",
166
+ "entityId": "301",
167
+ "agentSpaceId": 7
168
+ }
169
+ },
170
+ "openStuhlmacher": {
171
+ "type": "openEntity",
172
+ "ref": "call_c_1:business:2",
173
+ "entity": {
174
+ "entityType": "business",
175
+ "entityId": "9003",
176
+ "agentSpaceId": 7
177
+ }
178
+ }
179
+ },
180
+ "view": {
181
+ "type": "Stack",
182
+ "gap": "small",
183
+ "children": [
184
+ {
185
+ "type": "Text",
186
+ "text": "Am nächsten an Ihnen liegen",
187
+ "children": [
188
+ {
189
+ "type": "EntityLink",
190
+ "text": "Kleiner Kiepenkerl",
191
+ "action": "openKiepenkerl"
192
+ },
193
+ {
194
+ "type": "Text",
195
+ "text": "und"
196
+ },
197
+ {
198
+ "type": "EntityLink",
199
+ "text": "Gasthaus Stuhlmacher",
200
+ "action": "openStuhlmacher"
201
+ }
202
+ ]
203
+ },
204
+ {
205
+ "type": "Flow",
206
+ "gap": "xsmall",
207
+ "children": [
208
+ {
209
+ "type": "Repeat",
210
+ "items": {
211
+ "$data": "businesses"
212
+ },
213
+ "children": [
214
+ {
215
+ "type": "EntityLink",
216
+ "text": {
217
+ "$item": "name"
218
+ },
219
+ "action": {
220
+ "$item": "action"
221
+ },
222
+ "variant": "chip"
223
+ }
224
+ ]
225
+ }
226
+ ]
227
+ }
228
+ ]
229
+ }
230
+ },
231
+ "expectedState": "data",
232
+ "width": 528,
233
+ "interactions": [
234
+ {
235
+ "name": "open-second-chip",
236
+ "click": {
237
+ "text": "Großer Kiepenkerl Gasthaus"
238
+ }
239
+ }
240
+ ],
241
+ "agentSpaceId": 7,
242
+ "responses": {
243
+ "GET /api/example/agent-spaces/7/businesses/9001": {
244
+ "business": {
245
+ "id": 9001,
246
+ "name": "Kleiner Kiepenkerl"
247
+ }
248
+ },
249
+ "GET /api/example/agent-spaces/7/businesses/301": {
250
+ "business": {
251
+ "id": 301,
252
+ "name": "Großer Kiepenkerl"
253
+ }
254
+ },
255
+ "GET /api/example/agent-spaces/7/businesses/9003": {
256
+ "business": {
257
+ "id": 9003,
258
+ "name": "Stuhlmacher"
259
+ }
260
+ }
261
+ }
262
+ },
263
+ {
264
+ "name": "entity-link-unresolved",
265
+ "description": "The error state: an EntityLink whose action is gone (the persist pass dropped the reference it could not resolve) — the name shows without the click and the node reports failed UNRESOLVED_REF (ChatGPT's 20b showed a broken panel instead).",
266
+ "payload": {
267
+ "view": {
268
+ "type": "Text",
269
+ "text": "Ihr stärkster Wettbewerber ist",
270
+ "children": [
271
+ {
272
+ "type": "EntityLink",
273
+ "text": "Altes Gasthaus Leve"
274
+ }
275
+ ]
276
+ }
277
+ },
278
+ "expectedState": "error",
279
+ "width": 528
280
+ },
281
+ {
282
+ "name": "entity-link-empty",
283
+ "description": "The empty state: the name is bound to a state value that is empty — nothing shows, the node reports empty.",
284
+ "payload": {
285
+ "state": {
286
+ "name": ""
287
+ },
288
+ "actions": {
289
+ "openLeve": {
290
+ "type": "openEntity",
291
+ "ref": "call_places_1:business:0",
292
+ "entity": {
293
+ "entityType": "business",
294
+ "entityId": "8812",
295
+ "agentSpaceId": 1
296
+ }
297
+ }
298
+ },
299
+ "view": {
300
+ "type": "EntityLink",
301
+ "text": {
302
+ "$state": "name"
303
+ },
304
+ "action": "openLeve"
305
+ }
306
+ },
307
+ "expectedState": "empty",
308
+ "width": 528
309
+ },
310
+ {
311
+ "name": "entity-link-loading",
312
+ "description": "The loading state: the name is bound to a tool result that is not stored yet — a skeleton line.",
313
+ "payload": {
314
+ "actions": {
315
+ "openLeve": {
316
+ "type": "openEntity",
317
+ "ref": "call_places_1:business:0",
318
+ "entity": {
319
+ "entityType": "business",
320
+ "entityId": "8812",
321
+ "agentSpaceId": 1
322
+ }
323
+ }
324
+ },
325
+ "view": {
326
+ "type": "EntityLink",
327
+ "text": {
328
+ "$from": {
329
+ "toolCall": "call_pending_1",
330
+ "path": "$.name"
331
+ }
332
+ },
333
+ "action": "openLeve"
334
+ }
335
+ },
336
+ "expectedState": "loading",
337
+ "width": 528
338
+ }
339
+ ]
340
+ }