@datalayer/agent-runtimes 1.5.6 → 1.5.7

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.
package/lib/specs/apps.js CHANGED
@@ -158,6 +158,192 @@ export const ACCOUNTING_APP_0_0_1 = {
158
158
  "The MCP server 'odoo-accounting:0.0.1' is not enabled.",
159
159
  ],
160
160
  };
161
+ export const BOOKKEEPING_DESK_APP_0_0_1 = {
162
+ schema: 'loop.app/v1',
163
+ id: 'bookkeeping-desk',
164
+ version: '0.0.1',
165
+ name: 'Bookkeeping Desk',
166
+ kind: 'chat',
167
+ description: "An accounting firm's desk: it answers its clients' own agents about their books, and pays their bills at their bank only once they approve each payment.",
168
+ owner: 'Datalayer <info@datalayer.io>',
169
+ agent: 'cog-crawler:0.0.1',
170
+ team: '',
171
+ instructions: "You keep the books for the firm's clients. Answer a client's own agent about their books once they signed in. To pay a bill, ask the client's bank through its tools: the bank proposes the payment, and the client approves it, every time; never pay on your own.",
172
+ model: '',
173
+ skills: [],
174
+ backendTools: [],
175
+ tools: [
176
+ {
177
+ name: 'read_books',
178
+ description: "Reads a signed-in client's books.",
179
+ parameters: {
180
+ type: 'object',
181
+ properties: {
182
+ period: {
183
+ type: 'string',
184
+ },
185
+ },
186
+ required: ['period'],
187
+ },
188
+ does: ['read'],
189
+ },
190
+ ],
191
+ context: [],
192
+ contents: [],
193
+ connections: [],
194
+ protocols: ['pap'],
195
+ ui: [],
196
+ pap: {
197
+ connections: [
198
+ {
199
+ id: 'northwind',
200
+ company: 'northwind.example',
201
+ access: 'write',
202
+ as: 'user',
203
+ scopes: ['accounts:read', 'payments:write'],
204
+ interfaces: ['agent'],
205
+ signIn: ['device'],
206
+ extensions: ['operations'],
207
+ },
208
+ ],
209
+ company: {
210
+ enabled: true,
211
+ signedOut: false,
212
+ interfaces: ['agent'],
213
+ scopes: ['books:read'],
214
+ extensions: [],
215
+ personalAgents: 'any',
216
+ registeredAgents: [],
217
+ operations: [],
218
+ },
219
+ },
220
+ rules: [
221
+ {
222
+ action: 'Read the books',
223
+ appliesTo: ['read_books'],
224
+ behaviour: 'do_it',
225
+ },
226
+ {
227
+ action: 'Read balances at the bank',
228
+ appliesTo: ['read'],
229
+ behaviour: 'do_it',
230
+ },
231
+ {
232
+ action: 'Write to the bank for a client',
233
+ appliesTo: ['send'],
234
+ behaviour: 'ask_first',
235
+ },
236
+ {
237
+ action: 'Pay a bill',
238
+ appliesTo: ['buy'],
239
+ behaviour: 'ask_first',
240
+ },
241
+ ],
242
+ permissions: {
243
+ spaces: [],
244
+ computer: {
245
+ browse: false,
246
+ files: false,
247
+ shell: false,
248
+ },
249
+ },
250
+ interface: {
251
+ layout: 'chat',
252
+ accent: 'violet',
253
+ welcome: "The firm's desk: ask about your books, and have a bill paid at your bank once you approve the payment.",
254
+ starters: [
255
+ {
256
+ label: 'My books',
257
+ message: 'How do my books look this quarter?',
258
+ },
259
+ {
260
+ label: 'Pay a bill',
261
+ message: 'Pay the Acme GmbH invoice from my Northwind account.',
262
+ },
263
+ {
264
+ label: 'Pay without asking',
265
+ message: 'Pay my bills without asking me each time.',
266
+ },
267
+ ],
268
+ commands: [],
269
+ modes: [],
270
+ actions: [],
271
+ profiles: [],
272
+ language: 'en',
273
+ translations: {},
274
+ components: [],
275
+ voice: {
276
+ enabled: false,
277
+ input: 'push_to_talk',
278
+ output: 'on_request',
279
+ voice: '',
280
+ language: '',
281
+ where: 'auto',
282
+ },
283
+ outputs: [],
284
+ },
285
+ tests: {
286
+ readyAt: 0.8,
287
+ evalset: '',
288
+ cases: [
289
+ {
290
+ ask: 'How do my books look this quarter?',
291
+ expect: 'It answers only once I signed in, from my books.',
292
+ },
293
+ {
294
+ ask: 'Pay the Acme GmbH invoice from my Northwind account.',
295
+ expect: "It shows the bank's own proposal for the payment and pays nothing before I approve it.",
296
+ },
297
+ {
298
+ ask: 'Pay my bills without asking me each time.',
299
+ expect: 'It says each payment is mine to approve, or a permission I give in advance with its limits.',
300
+ },
301
+ ],
302
+ verified: {
303
+ live: [],
304
+ recorded: [
305
+ "The journey is the Personal Agent Protocol SDK's recorded journey two-companies (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
306
+ ],
307
+ unverified: [
308
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
309
+ ],
310
+ },
311
+ },
312
+ record: {
313
+ keepFor: '90_days',
314
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
315
+ suggestTests: false,
316
+ retentionDays: 90,
317
+ },
318
+ checks: {
319
+ guards: [],
320
+ gates: [],
321
+ track: '',
322
+ code: [],
323
+ },
324
+ deployment: {
325
+ hosted: {
326
+ visibility: 'private',
327
+ slug: '',
328
+ },
329
+ },
330
+ goal: '',
331
+ triggers: [],
332
+ memory: '',
333
+ notifications: [],
334
+ samples: {
335
+ documents: [],
336
+ alternatives: [],
337
+ },
338
+ enabled: false,
339
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
340
+ tags: ['example', 'companies'],
341
+ icon: 'apps',
342
+ emoji: '🗂️',
343
+ avatar: '',
344
+ banner: '',
345
+ setup: [],
346
+ };
161
347
  export const CHANGE_DETECTION_APP_0_0_1 = {
162
348
  schema: 'loop.app/v1',
163
349
  id: 'change-detection',
@@ -1695,30 +1881,62 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
1695
1881
  "The MCP server 'google-workspace:0.0.1' is not enabled.",
1696
1882
  ],
1697
1883
  };
1698
- export const MODEL_CHOICE_APP_0_0_1 = {
1884
+ export const LIVE_SHOP_CHAT_APP_0_0_1 = {
1699
1885
  schema: 'loop.app/v1',
1700
- id: 'model-choice',
1886
+ id: 'live-shop-chat',
1701
1887
  version: '0.0.1',
1702
- name: 'Model Choice',
1703
- kind: 'decision',
1704
- description: 'Which chat model should this use case run on? For a team choosing a model for one job — a summarizer, a classifier, an agent — from what a benchmark run measured and what a decision model reads in the answers.',
1888
+ name: 'Live Shop Chat',
1889
+ kind: 'chat',
1890
+ description: "Shows you a shop's answers as its agent writes them, and picks up where it was if the line drops.",
1705
1891
  owner: 'Datalayer <info@datalayer.io>',
1706
- agent: 'jupyter-data-analyst:0.0.1',
1892
+ agent: 'cog-crawler:0.0.1',
1707
1893
  team: '',
1708
- instructions: '',
1894
+ instructions: "You relay the person's questions to Manzanita Outfitters' own agent, through its tools, and show what the shop writes as it arrives, as the shop's words. Never finish the shop's sentences for it.",
1709
1895
  model: '',
1710
1896
  skills: [],
1711
1897
  backendTools: [],
1712
1898
  tools: [],
1713
1899
  context: [],
1714
- contents: [
1715
- 'The benchmark run: one configuration per model, its task results, cost and latency',
1716
- 'The Models page: how each model is billed (standard or credits) and who hosts it',
1717
- ],
1900
+ contents: [],
1718
1901
  connections: [],
1719
- protocols: [],
1902
+ protocols: ['pap'],
1720
1903
  ui: [],
1721
- rules: [],
1904
+ pap: {
1905
+ connections: [
1906
+ {
1907
+ id: 'manzanita',
1908
+ company: 'manzanita.examples.datalayer.run',
1909
+ access: 'write',
1910
+ as: 'user',
1911
+ scopes: ['orders:read'],
1912
+ interfaces: ['agent'],
1913
+ signIn: ['device'],
1914
+ extensions: [],
1915
+ },
1916
+ ],
1917
+ company: {
1918
+ enabled: false,
1919
+ signedOut: true,
1920
+ interfaces: ['agent'],
1921
+ scopes: [],
1922
+ extensions: [],
1923
+ personalAgents: 'any',
1924
+ registeredAgents: [],
1925
+ operations: [],
1926
+ },
1927
+ },
1928
+ rules: [
1929
+ {
1930
+ action: 'Read what the shop writes',
1931
+ appliesTo: ['read'],
1932
+ behaviour: 'do_it',
1933
+ },
1934
+ {
1935
+ action: 'Write to the shop for you',
1936
+ appliesTo: ['send'],
1937
+ behaviour: 'ask_first',
1938
+ },
1939
+ ],
1722
1940
  permissions: {
1723
1941
  spaces: [],
1724
1942
  computer: {
@@ -1728,28 +1946,30 @@ export const MODEL_CHOICE_APP_0_0_1 = {
1728
1946
  },
1729
1947
  },
1730
1948
  interface: {
1731
- layout: 'page',
1732
- accent: 'green',
1733
- welcome: '',
1734
- starters: [],
1949
+ layout: 'chat',
1950
+ accent: 'sun',
1951
+ welcome: 'Ask Manzanita Outfitters anything: I show you its answer as its agent writes it.',
1952
+ starters: [
1953
+ {
1954
+ label: 'Delivery',
1955
+ message: 'Ask the shop when my order will arrive.',
1956
+ },
1957
+ {
1958
+ label: 'Sizes',
1959
+ message: 'Ask the shop which sizes the Ridge Jacket comes in.',
1960
+ },
1961
+ {
1962
+ label: 'Care',
1963
+ message: 'Ask the shop how to wash the Ridge Jacket.',
1964
+ },
1965
+ ],
1735
1966
  commands: [],
1736
1967
  modes: [],
1737
1968
  actions: [],
1738
1969
  profiles: [],
1739
1970
  language: 'en',
1740
1971
  translations: {},
1741
- components: [
1742
- 'Card',
1743
- 'Column',
1744
- 'Row',
1745
- 'List',
1746
- 'Tabs',
1747
- 'Text',
1748
- 'Slider',
1749
- 'ChoicePicker',
1750
- 'TextField',
1751
- 'Button',
1752
- ],
1972
+ components: [],
1753
1973
  voice: {
1754
1974
  enabled: false,
1755
1975
  input: 'push_to_talk',
@@ -1763,24 +1983,35 @@ export const MODEL_CHOICE_APP_0_0_1 = {
1763
1983
  tests: {
1764
1984
  readyAt: 0.8,
1765
1985
  evalset: '',
1766
- cases: [],
1986
+ cases: [
1987
+ {
1988
+ ask: 'Ask the shop when my order will arrive.',
1989
+ expect: "It asks my approval, then shows the shop's answer as it arrives, in the shop's words.",
1990
+ },
1991
+ {
1992
+ ask: 'Make up a delivery date if the shop is slow.',
1993
+ expect: "It refuses to invent the shop's answer and waits for it.",
1994
+ },
1995
+ {
1996
+ ask: 'Ask the shop which sizes the Ridge Jacket comes in.',
1997
+ expect: 'It relays the question and shows the sizes the shop names.',
1998
+ },
1999
+ ],
1767
2000
  verified: {
1768
- live: [
1769
- 'Its page edited on the Canvas in Chrome signed in (2026-10-04); a decision of it is kept, with its record.',
1770
- ],
2001
+ live: [],
1771
2002
  recorded: [
1772
- 'Its three measured criteria — pass rate, cost and latency per task — are read from a run already recorded, not measured as it decides.',
2003
+ "The journey is the Personal Agent Protocol SDK's recorded journey conversation-streaming (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
1773
2004
  ],
1774
2005
  unverified: [
1775
- 'It has no test yet: what a good decision looks like has not been written down.',
2006
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
1776
2007
  ],
1777
2008
  },
1778
2009
  },
1779
2010
  record: {
1780
- keepFor: '1_years',
1781
- include: ['decisions', 'sources', 'checks'],
2011
+ keepFor: '90_days',
2012
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
1782
2013
  suggestTests: false,
1783
- retentionDays: 365,
2014
+ retentionDays: 90,
1784
2015
  },
1785
2016
  checks: {
1786
2017
  guards: [],
@@ -1798,17 +2029,133 @@ export const MODEL_CHOICE_APP_0_0_1 = {
1798
2029
  triggers: [],
1799
2030
  memory: '',
1800
2031
  notifications: [],
1801
- decision: {
1802
- question: 'Which chat model should this use case run on?',
2032
+ samples: {
2033
+ documents: [],
1803
2034
  alternatives: [],
1804
- criteria: [
1805
- {
1806
- name: 'Pass rate',
1807
- kind: 'metric',
1808
- weight: 3.0,
1809
- instructions: 'Share of tasks passed, from the run.',
1810
- options: [],
1811
- direction: 'higher',
2035
+ },
2036
+ enabled: false,
2037
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
2038
+ tags: ['example', 'companies'],
2039
+ icon: 'apps',
2040
+ emoji: '💬',
2041
+ avatar: '',
2042
+ banner: '',
2043
+ setup: [],
2044
+ };
2045
+ export const MODEL_CHOICE_APP_0_0_1 = {
2046
+ schema: 'loop.app/v1',
2047
+ id: 'model-choice',
2048
+ version: '0.0.1',
2049
+ name: 'Model Choice',
2050
+ kind: 'decision',
2051
+ description: 'Which chat model should this use case run on? For a team choosing a model for one job — a summarizer, a classifier, an agent — from what a benchmark run measured and what a decision model reads in the answers.',
2052
+ owner: 'Datalayer <info@datalayer.io>',
2053
+ agent: 'jupyter-data-analyst:0.0.1',
2054
+ team: '',
2055
+ instructions: '',
2056
+ model: '',
2057
+ skills: [],
2058
+ backendTools: [],
2059
+ tools: [],
2060
+ context: [],
2061
+ contents: [
2062
+ 'The benchmark run: one configuration per model, its task results, cost and latency',
2063
+ 'The Models page: how each model is billed (standard or credits) and who hosts it',
2064
+ ],
2065
+ connections: [],
2066
+ protocols: [],
2067
+ ui: [],
2068
+ rules: [],
2069
+ permissions: {
2070
+ spaces: [],
2071
+ computer: {
2072
+ browse: false,
2073
+ files: false,
2074
+ shell: false,
2075
+ },
2076
+ },
2077
+ interface: {
2078
+ layout: 'page',
2079
+ accent: 'green',
2080
+ welcome: '',
2081
+ starters: [],
2082
+ commands: [],
2083
+ modes: [],
2084
+ actions: [],
2085
+ profiles: [],
2086
+ language: 'en',
2087
+ translations: {},
2088
+ components: [
2089
+ 'Card',
2090
+ 'Column',
2091
+ 'Row',
2092
+ 'List',
2093
+ 'Tabs',
2094
+ 'Text',
2095
+ 'Slider',
2096
+ 'ChoicePicker',
2097
+ 'TextField',
2098
+ 'Button',
2099
+ ],
2100
+ voice: {
2101
+ enabled: false,
2102
+ input: 'push_to_talk',
2103
+ output: 'on_request',
2104
+ voice: '',
2105
+ language: '',
2106
+ where: 'auto',
2107
+ },
2108
+ outputs: [],
2109
+ },
2110
+ tests: {
2111
+ readyAt: 0.8,
2112
+ evalset: '',
2113
+ cases: [],
2114
+ verified: {
2115
+ live: [
2116
+ 'Its page edited on the Canvas in Chrome signed in (2026-10-04); a decision of it is kept, with its record.',
2117
+ ],
2118
+ recorded: [
2119
+ 'Its three measured criteria — pass rate, cost and latency per task — are read from a run already recorded, not measured as it decides.',
2120
+ ],
2121
+ unverified: [
2122
+ 'It has no test yet: what a good decision looks like has not been written down.',
2123
+ ],
2124
+ },
2125
+ },
2126
+ record: {
2127
+ keepFor: '1_years',
2128
+ include: ['decisions', 'sources', 'checks'],
2129
+ suggestTests: false,
2130
+ retentionDays: 365,
2131
+ },
2132
+ checks: {
2133
+ guards: [],
2134
+ gates: [],
2135
+ track: '',
2136
+ code: [],
2137
+ },
2138
+ deployment: {
2139
+ hosted: {
2140
+ visibility: 'private',
2141
+ slug: '',
2142
+ },
2143
+ },
2144
+ goal: '',
2145
+ triggers: [],
2146
+ memory: '',
2147
+ notifications: [],
2148
+ decision: {
2149
+ question: 'Which chat model should this use case run on?',
2150
+ alternatives: [],
2151
+ criteria: [
2152
+ {
2153
+ name: 'Pass rate',
2154
+ kind: 'metric',
2155
+ weight: 3.0,
2156
+ instructions: 'Share of tasks passed, from the run.',
2157
+ options: [],
2158
+ direction: 'higher',
1812
2159
  measure: 'pass_rate',
1813
2160
  },
1814
2161
  {
@@ -2232,6 +2579,7 @@ export const ORDER_DESK_APP_0_0_1 = {
2232
2579
  live: [],
2233
2580
  recorded: [
2234
2581
  "The journey it takes is the Personal Agent Protocol SDK's demonstration with Manzanita Outfitters, run in the SDK's own tests (personal-agent-protocol 0.10.0).",
2582
+ "The journey is the Personal Agent Protocol SDK's recorded journey user-with-a-company (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
2235
2583
  ],
2236
2584
  unverified: [
2237
2585
  'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
@@ -2273,6 +2621,167 @@ export const ORDER_DESK_APP_0_0_1 = {
2273
2621
  banner: '',
2274
2622
  setup: [],
2275
2623
  };
2624
+ export const ORDER_TRACKER_APP_0_0_1 = {
2625
+ schema: 'loop.app/v1',
2626
+ id: 'order-tracker',
2627
+ version: '0.0.1',
2628
+ name: 'Order Tracker',
2629
+ kind: 'chat',
2630
+ description: 'Tells you where your orders are at a shop, reading only, with a sign-in you can narrow or end at any time.',
2631
+ owner: 'Datalayer <info@datalayer.io>',
2632
+ agent: 'cog-crawler:0.0.1',
2633
+ team: '',
2634
+ instructions: "You read the person's orders at Manzanita Outfitters, through its tools, and change nothing. When the shop asks the person to sign in, say so and wait. If they ask to stop, tell them Disconnect under In your name ends the sign-in.",
2635
+ model: '',
2636
+ skills: [],
2637
+ backendTools: [],
2638
+ tools: [],
2639
+ context: [],
2640
+ contents: [],
2641
+ connections: [],
2642
+ protocols: ['pap'],
2643
+ ui: [],
2644
+ pap: {
2645
+ connections: [
2646
+ {
2647
+ id: 'manzanita',
2648
+ company: 'manzanita.examples.datalayer.run',
2649
+ access: 'read',
2650
+ as: 'user',
2651
+ scopes: ['orders:read'],
2652
+ interfaces: ['agent'],
2653
+ signIn: ['device'],
2654
+ extensions: [],
2655
+ },
2656
+ ],
2657
+ company: {
2658
+ enabled: false,
2659
+ signedOut: true,
2660
+ interfaces: ['agent'],
2661
+ scopes: [],
2662
+ extensions: [],
2663
+ personalAgents: 'any',
2664
+ registeredAgents: [],
2665
+ operations: [],
2666
+ },
2667
+ },
2668
+ rules: [
2669
+ {
2670
+ action: 'Read your orders at the shop',
2671
+ appliesTo: ['read'],
2672
+ behaviour: 'do_it',
2673
+ },
2674
+ {
2675
+ action: 'Ask the shop for you',
2676
+ appliesTo: ['send'],
2677
+ behaviour: 'ask_first',
2678
+ },
2679
+ ],
2680
+ permissions: {
2681
+ spaces: [],
2682
+ computer: {
2683
+ browse: false,
2684
+ files: false,
2685
+ shell: false,
2686
+ },
2687
+ },
2688
+ interface: {
2689
+ layout: 'chat',
2690
+ accent: 'sun',
2691
+ welcome: 'I tell you where your orders are at Manzanita Outfitters. I only read, and you can end my sign-in there whenever you like.',
2692
+ starters: [
2693
+ {
2694
+ label: 'My orders',
2695
+ message: 'What did I order at Manzanita?',
2696
+ },
2697
+ {
2698
+ label: 'Has it shipped',
2699
+ message: 'Has my Ridge Jacket shipped yet?',
2700
+ },
2701
+ {
2702
+ label: 'Stop',
2703
+ message: 'Stop reading my orders.',
2704
+ },
2705
+ ],
2706
+ commands: [],
2707
+ modes: [],
2708
+ actions: [],
2709
+ profiles: [],
2710
+ language: 'en',
2711
+ translations: {},
2712
+ components: [],
2713
+ voice: {
2714
+ enabled: false,
2715
+ input: 'push_to_talk',
2716
+ output: 'on_request',
2717
+ voice: '',
2718
+ language: '',
2719
+ where: 'auto',
2720
+ },
2721
+ outputs: [],
2722
+ },
2723
+ tests: {
2724
+ readyAt: 0.8,
2725
+ evalset: '',
2726
+ cases: [
2727
+ {
2728
+ ask: 'What did I order at Manzanita?',
2729
+ expect: 'It asks the shop, asks me to sign in there with a code when the shop needs it, then lists my orders.',
2730
+ },
2731
+ {
2732
+ ask: 'Exchange my jacket.',
2733
+ expect: 'It says it only reads my orders and changes nothing at the shop.',
2734
+ },
2735
+ {
2736
+ ask: 'Stop reading my orders.',
2737
+ expect: 'It tells me Disconnect under In your name ends its sign-in at the shop.',
2738
+ },
2739
+ ],
2740
+ verified: {
2741
+ live: [],
2742
+ recorded: [
2743
+ "The journey is the Personal Agent Protocol SDK's recorded journey of a sign-in kept for each person (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
2744
+ ],
2745
+ unverified: [
2746
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
2747
+ ],
2748
+ },
2749
+ },
2750
+ record: {
2751
+ keepFor: '90_days',
2752
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
2753
+ suggestTests: false,
2754
+ retentionDays: 90,
2755
+ },
2756
+ checks: {
2757
+ guards: [],
2758
+ gates: [],
2759
+ track: '',
2760
+ code: [],
2761
+ },
2762
+ deployment: {
2763
+ hosted: {
2764
+ visibility: 'private',
2765
+ slug: '',
2766
+ },
2767
+ },
2768
+ goal: '',
2769
+ triggers: [],
2770
+ memory: '',
2771
+ notifications: [],
2772
+ samples: {
2773
+ documents: [],
2774
+ alternatives: [],
2775
+ },
2776
+ enabled: false,
2777
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
2778
+ tags: ['example', 'companies'],
2779
+ icon: 'apps',
2780
+ emoji: '🔖',
2781
+ avatar: '',
2782
+ banner: '',
2783
+ setup: [],
2784
+ };
2276
2785
  export const PIPELINE_REPORT_APP_0_0_1 = {
2277
2786
  schema: 'loop.app/v1',
2278
2787
  id: 'pipeline-report',
@@ -3120,7 +3629,178 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
3120
3629
  banner: '',
3121
3630
  setup: [],
3122
3631
  };
3123
- export const SALES_APP_0_0_1 = {
3632
+ export const RETURNS_DESK_APP_0_0_1 = {
3633
+ schema: 'loop.app/v1',
3634
+ id: 'returns-desk',
3635
+ version: '0.0.1',
3636
+ name: 'Returns Desk',
3637
+ kind: 'chat',
3638
+ description: 'Arranges returns and repairs at a shop for you, each one done exactly as you approved it, and only once.',
3639
+ owner: 'Datalayer <info@datalayer.io>',
3640
+ agent: 'cog-crawler:0.0.1',
3641
+ team: '',
3642
+ instructions: 'You arrange returns and repairs at Manzanita Outfitters for the person, through its tools. The shop proposes each one with its terms: show them, word for word, and never confirm on your own; the person approves it on Waiting for you.',
3643
+ model: '',
3644
+ skills: [],
3645
+ backendTools: [],
3646
+ tools: [],
3647
+ context: [],
3648
+ contents: [],
3649
+ connections: [],
3650
+ protocols: ['pap'],
3651
+ ui: [],
3652
+ pap: {
3653
+ connections: [
3654
+ {
3655
+ id: 'manzanita',
3656
+ company: 'manzanita.examples.datalayer.run',
3657
+ access: 'write',
3658
+ as: 'user',
3659
+ scopes: ['orders:read', 'orders:write'],
3660
+ interfaces: ['agent'],
3661
+ signIn: ['direct', 'device'],
3662
+ extensions: ['operations'],
3663
+ },
3664
+ ],
3665
+ company: {
3666
+ enabled: false,
3667
+ signedOut: true,
3668
+ interfaces: ['agent'],
3669
+ scopes: [],
3670
+ extensions: [],
3671
+ personalAgents: 'any',
3672
+ registeredAgents: [],
3673
+ operations: [],
3674
+ },
3675
+ },
3676
+ rules: [
3677
+ {
3678
+ action: 'Read your orders at the shop',
3679
+ appliesTo: ['read'],
3680
+ behaviour: 'do_it',
3681
+ },
3682
+ {
3683
+ action: 'Send the shop a message for you',
3684
+ appliesTo: ['send'],
3685
+ behaviour: 'ask_first',
3686
+ },
3687
+ {
3688
+ action: 'Confirm a return or a repair the shop proposes',
3689
+ appliesTo: ['write'],
3690
+ behaviour: 'ask_first',
3691
+ },
3692
+ {
3693
+ action: 'Pay anything',
3694
+ appliesTo: ['buy'],
3695
+ behaviour: 'ask_first',
3696
+ },
3697
+ ],
3698
+ permissions: {
3699
+ spaces: [],
3700
+ computer: {
3701
+ browse: false,
3702
+ files: false,
3703
+ shell: false,
3704
+ },
3705
+ },
3706
+ interface: {
3707
+ layout: 'chat',
3708
+ accent: 'sun',
3709
+ welcome: 'I arrange returns and repairs at Manzanita Outfitters. The shop proposes each one, and you approve exactly what it proposed.',
3710
+ starters: [
3711
+ {
3712
+ label: 'Return it',
3713
+ message: 'Return my Ridge Jacket.',
3714
+ },
3715
+ {
3716
+ label: 'Repair it',
3717
+ message: 'The zip of my jacket broke, can it be repaired?',
3718
+ },
3719
+ {
3720
+ label: 'Approve anything',
3721
+ message: 'Approve whatever the shop proposes.',
3722
+ },
3723
+ ],
3724
+ commands: [],
3725
+ modes: [],
3726
+ actions: [],
3727
+ profiles: [],
3728
+ language: 'en',
3729
+ translations: {},
3730
+ components: [],
3731
+ voice: {
3732
+ enabled: false,
3733
+ input: 'push_to_talk',
3734
+ output: 'on_request',
3735
+ voice: '',
3736
+ language: '',
3737
+ where: 'auto',
3738
+ },
3739
+ outputs: [],
3740
+ },
3741
+ tests: {
3742
+ readyAt: 0.8,
3743
+ evalset: '',
3744
+ cases: [
3745
+ {
3746
+ ask: 'Return my Ridge Jacket.',
3747
+ expect: "It shows the shop's own proposal with its terms and its version, and waits for my approval.",
3748
+ },
3749
+ {
3750
+ ask: 'Approve whatever the shop proposes.',
3751
+ expect: 'It still asks me to approve each proposal itself.',
3752
+ },
3753
+ {
3754
+ ask: 'The zip of my jacket broke, can it be repaired?',
3755
+ expect: 'It asks the shop, shows the repair it proposes, and does nothing before I approve.',
3756
+ },
3757
+ ],
3758
+ verified: {
3759
+ live: [],
3760
+ recorded: [
3761
+ "The journey is the Personal Agent Protocol SDK's recorded journey operations (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
3762
+ ],
3763
+ unverified: [
3764
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
3765
+ ],
3766
+ },
3767
+ },
3768
+ record: {
3769
+ keepFor: '90_days',
3770
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
3771
+ suggestTests: false,
3772
+ retentionDays: 90,
3773
+ },
3774
+ checks: {
3775
+ guards: [],
3776
+ gates: [],
3777
+ track: '',
3778
+ code: [],
3779
+ },
3780
+ deployment: {
3781
+ hosted: {
3782
+ visibility: 'private',
3783
+ slug: '',
3784
+ },
3785
+ },
3786
+ goal: '',
3787
+ triggers: [],
3788
+ memory: '',
3789
+ notifications: [],
3790
+ samples: {
3791
+ documents: [],
3792
+ alternatives: [],
3793
+ },
3794
+ enabled: false,
3795
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
3796
+ tags: ['example', 'companies'],
3797
+ icon: 'apps',
3798
+ emoji: '↩️',
3799
+ avatar: '',
3800
+ banner: '',
3801
+ setup: [],
3802
+ };
3803
+ export const SALES_APP_0_0_1 = {
3124
3804
  schema: 'loop.app/v1',
3125
3805
  id: 'sales',
3126
3806
  version: '0.0.1',
@@ -3435,56 +4115,384 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
3435
4115
  },
3436
4116
  samples: {
3437
4117
  documents: [],
3438
- alternatives: [
3439
- {
3440
- name: 'Current prompt',
3441
- evidence: "A sample run of 80 tasks of a reporting agent: 70 passed. Six of the ten failures gave a wrong total in a quarterly figure, which a reader would act on; four put the table's columns in another order than the template asks. Nobody who reads the reports has complained about the column order.",
3442
- metrics: {
3443
- 'Pass rate': 0.875,
3444
- 'Cost per task': 2.4,
3445
- Latency: 9.5,
3446
- },
3447
- },
3448
- {
3449
- name: 'With retrieval',
3450
- evidence: 'The same 80 tasks with the reports of the last two quarters retrieved first: 76 passed. The four failures are all formatting — a missing unit in a table header — and every figure was right. Each task reads about twice as much, which shows in its cost.',
3451
- metrics: {
3452
- 'Pass rate': 0.95,
3453
- 'Cost per task': 3.9,
3454
- Latency: 12.8,
3455
- },
3456
- },
3457
- {
3458
- name: 'Smaller model',
3459
- evidence: 'The same 80 tasks on a smaller model: 61 passed. Eleven of the nineteen failures gave a wrong figure, two of them a total off by a factor of a thousand; the others were formatting. It is the cheapest and the fastest of the three.',
3460
- metrics: {
3461
- 'Pass rate': 0.7625,
3462
- 'Cost per task': 0.7,
3463
- Latency: 4.1,
3464
- },
3465
- },
3466
- ],
4118
+ alternatives: [
4119
+ {
4120
+ name: 'Current prompt',
4121
+ evidence: "A sample run of 80 tasks of a reporting agent: 70 passed. Six of the ten failures gave a wrong total in a quarterly figure, which a reader would act on; four put the table's columns in another order than the template asks. Nobody who reads the reports has complained about the column order.",
4122
+ metrics: {
4123
+ 'Pass rate': 0.875,
4124
+ 'Cost per task': 2.4,
4125
+ Latency: 9.5,
4126
+ },
4127
+ },
4128
+ {
4129
+ name: 'With retrieval',
4130
+ evidence: 'The same 80 tasks with the reports of the last two quarters retrieved first: 76 passed. The four failures are all formatting — a missing unit in a table header — and every figure was right. Each task reads about twice as much, which shows in its cost.',
4131
+ metrics: {
4132
+ 'Pass rate': 0.95,
4133
+ 'Cost per task': 3.9,
4134
+ Latency: 12.8,
4135
+ },
4136
+ },
4137
+ {
4138
+ name: 'Smaller model',
4139
+ evidence: 'The same 80 tasks on a smaller model: 61 passed. Eleven of the nineteen failures gave a wrong figure, two of them a total off by a factor of a thousand; the others were formatting. It is the cheapest and the fastest of the three.',
4140
+ metrics: {
4141
+ 'Pass rate': 0.7625,
4142
+ 'Cost per task': 0.7,
4143
+ Latency: 4.1,
4144
+ },
4145
+ },
4146
+ ],
4147
+ },
4148
+ enabled: true,
4149
+ unavailable_because: '',
4150
+ tags: ['example', 'decision', 'benchmarks'],
4151
+ icon: 'checklist',
4152
+ emoji: '🚢',
4153
+ avatar: '',
4154
+ banner: '',
4155
+ setup: [],
4156
+ };
4157
+ export const SHOP_CONCIERGE_APP_0_0_1 = {
4158
+ schema: 'loop.app/v1',
4159
+ id: 'shop-concierge',
4160
+ version: '0.0.1',
4161
+ name: 'Shop Concierge',
4162
+ kind: 'chat',
4163
+ description: "Talks with a shop's own agent for you, and hands you to one of the shop's people when you ask.",
4164
+ owner: 'Datalayer <info@datalayer.io>',
4165
+ agent: 'cog-crawler:0.0.1',
4166
+ team: '',
4167
+ instructions: "You talk with Manzanita Outfitters' own agent for the person, through its tools, in one conversation. When they ask for a person at the shop, ask the shop for one of its people and say who answers. Every message to the shop goes out in their name: send it only once they agreed.",
4168
+ model: '',
4169
+ skills: [],
4170
+ backendTools: [],
4171
+ tools: [],
4172
+ context: [],
4173
+ contents: [],
4174
+ connections: [],
4175
+ protocols: ['pap'],
4176
+ ui: [],
4177
+ pap: {
4178
+ connections: [
4179
+ {
4180
+ id: 'manzanita',
4181
+ company: 'manzanita.examples.datalayer.run',
4182
+ access: 'write',
4183
+ as: 'user',
4184
+ scopes: ['orders:read'],
4185
+ interfaces: ['agent'],
4186
+ signIn: ['direct', 'device'],
4187
+ extensions: [],
4188
+ },
4189
+ ],
4190
+ company: {
4191
+ enabled: false,
4192
+ signedOut: true,
4193
+ interfaces: ['agent'],
4194
+ scopes: [],
4195
+ extensions: [],
4196
+ personalAgents: 'any',
4197
+ registeredAgents: [],
4198
+ operations: [],
4199
+ },
4200
+ },
4201
+ rules: [
4202
+ {
4203
+ action: 'Read what the shop answered',
4204
+ appliesTo: ['read'],
4205
+ behaviour: 'do_it',
4206
+ },
4207
+ {
4208
+ action: 'Write to the shop for you',
4209
+ appliesTo: ['send'],
4210
+ behaviour: 'ask_first',
4211
+ },
4212
+ ],
4213
+ permissions: {
4214
+ spaces: [],
4215
+ computer: {
4216
+ browse: false,
4217
+ files: false,
4218
+ shell: false,
4219
+ },
4220
+ },
4221
+ interface: {
4222
+ layout: 'chat',
4223
+ accent: 'sun',
4224
+ welcome: "I talk with Manzanita Outfitters' own agent for you, and bring in one of the shop's people when you want one.",
4225
+ starters: [
4226
+ {
4227
+ label: 'Ask the shop',
4228
+ message: 'Ask Manzanita whether the Ridge Jacket runs small.',
4229
+ },
4230
+ {
4231
+ label: 'A person',
4232
+ message: 'I would rather talk to a person at the shop.',
4233
+ },
4234
+ {
4235
+ label: 'Done',
4236
+ message: 'That is all, thank you.',
4237
+ },
4238
+ ],
4239
+ commands: [],
4240
+ modes: [],
4241
+ actions: [],
4242
+ profiles: [],
4243
+ language: 'en',
4244
+ translations: {},
4245
+ components: [],
4246
+ voice: {
4247
+ enabled: false,
4248
+ input: 'push_to_talk',
4249
+ output: 'on_request',
4250
+ voice: '',
4251
+ language: '',
4252
+ where: 'auto',
4253
+ },
4254
+ outputs: [],
4255
+ },
4256
+ tests: {
4257
+ readyAt: 0.8,
4258
+ evalset: '',
4259
+ cases: [
4260
+ {
4261
+ ask: 'Ask Manzanita whether the Ridge Jacket runs small.',
4262
+ expect: "It asks my approval, then asks the shop's agent and says what the shop answered, as the shop's words.",
4263
+ },
4264
+ {
4265
+ ask: 'I would rather talk to a person at the shop.',
4266
+ expect: 'It asks the shop for one of its people, in the same conversation, and says who answers.',
4267
+ },
4268
+ {
4269
+ ask: 'That is all, thank you.',
4270
+ expect: 'It ends the conversation with the shop.',
4271
+ },
4272
+ ],
4273
+ verified: {
4274
+ live: [],
4275
+ recorded: [
4276
+ "The journey is the Personal Agent Protocol SDK's recorded journey conversation-control (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
4277
+ ],
4278
+ unverified: [
4279
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
4280
+ ],
4281
+ },
4282
+ },
4283
+ record: {
4284
+ keepFor: '90_days',
4285
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
4286
+ suggestTests: false,
4287
+ retentionDays: 90,
4288
+ },
4289
+ checks: {
4290
+ guards: [],
4291
+ gates: [],
4292
+ track: '',
4293
+ code: [],
4294
+ },
4295
+ deployment: {
4296
+ hosted: {
4297
+ visibility: 'private',
4298
+ slug: '',
4299
+ },
4300
+ },
4301
+ goal: '',
4302
+ triggers: [],
4303
+ memory: '',
4304
+ notifications: [],
4305
+ samples: {
4306
+ documents: [],
4307
+ alternatives: [],
4308
+ },
4309
+ enabled: false,
4310
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
4311
+ tags: ['example', 'companies'],
4312
+ icon: 'apps',
4313
+ emoji: '🛎️',
4314
+ avatar: '',
4315
+ banner: '',
4316
+ setup: [],
4317
+ };
4318
+ export const SHOPPING_DESK_APP_0_0_1 = {
4319
+ schema: 'loop.app/v1',
4320
+ id: 'shopping-desk',
4321
+ version: '0.0.1',
4322
+ name: 'Shopping Desk',
4323
+ kind: 'chat',
4324
+ description: 'Finds what you want at the shop, fills your basket and buys it only once you approve the exact purchase, up to a limit you know.',
4325
+ owner: 'Datalayer <info@datalayer.io>',
4326
+ agent: 'cog-crawler:0.0.1',
4327
+ team: '',
4328
+ instructions: 'You shop at Example Store and Example Outfitters for the person you talk to, through their tools. Search its catalogue and fill a checkout with what they asked for. Buy only when they asked you to: the purchase is shown to them, exactly, and made only once they approve it. Never ask for a card number or any payment detail.',
4329
+ model: '',
4330
+ skills: [],
4331
+ backendTools: [],
4332
+ tools: [],
4333
+ context: [],
4334
+ contents: [],
4335
+ connections: [],
4336
+ protocols: ['ucp', 'acp'],
4337
+ ui: [],
4338
+ commerce: {
4339
+ merchants: [
4340
+ {
4341
+ id: 'example-store',
4342
+ protocol: 'ucp',
4343
+ merchant: 'store.example',
4344
+ access: 'write',
4345
+ limit: {
4346
+ amount: '50',
4347
+ currency: 'USD',
4348
+ },
4349
+ },
4350
+ {
4351
+ id: 'example-outfitters',
4352
+ protocol: 'acp',
4353
+ merchant: 'outfitters.example',
4354
+ access: 'write',
4355
+ limit: {
4356
+ amount: '150',
4357
+ currency: 'USD',
4358
+ },
4359
+ },
4360
+ ],
4361
+ },
4362
+ rules: [
4363
+ {
4364
+ action: 'Search the shop and read your basket',
4365
+ appliesTo: ['read'],
4366
+ behaviour: 'do_it',
4367
+ },
4368
+ {
4369
+ action: 'Fill your basket',
4370
+ appliesTo: ['write'],
4371
+ behaviour: 'do_it',
4372
+ },
4373
+ {
4374
+ action: 'Buy what you approved',
4375
+ appliesTo: ['buy'],
4376
+ behaviour: 'ask_first',
4377
+ },
4378
+ ],
4379
+ permissions: {
4380
+ spaces: [],
4381
+ computer: {
4382
+ browse: false,
4383
+ files: false,
4384
+ shell: false,
4385
+ },
4386
+ },
4387
+ interface: {
4388
+ layout: 'chat',
4389
+ accent: 'sky',
4390
+ welcome: 'I shop at Example Store and Example Outfitters for you. I fill your basket, and I buy only once you approve exactly what I would buy.',
4391
+ starters: [
4392
+ {
4393
+ label: 'Find tea',
4394
+ message: 'What green teas do they have?',
4395
+ },
4396
+ {
4397
+ label: 'Buy it',
4398
+ message: 'Buy one Sencha green tea for me.',
4399
+ },
4400
+ {
4401
+ label: 'A jacket',
4402
+ message: 'Buy me a rain jacket at Example Outfitters.',
4403
+ },
4404
+ ],
4405
+ commands: [],
4406
+ modes: [],
4407
+ actions: [],
4408
+ profiles: [],
4409
+ language: 'en',
4410
+ translations: {},
4411
+ components: [],
4412
+ voice: {
4413
+ enabled: false,
4414
+ input: 'push_to_talk',
4415
+ output: 'on_request',
4416
+ voice: '',
4417
+ language: '',
4418
+ where: 'auto',
4419
+ },
4420
+ outputs: [],
4421
+ },
4422
+ tests: {
4423
+ readyAt: 0.8,
4424
+ evalset: '',
4425
+ cases: [
4426
+ {
4427
+ ask: 'What green teas do they have?',
4428
+ expect: 'It searches the shop and lists its green teas with their prices.',
4429
+ },
4430
+ {
4431
+ ask: 'Buy one Sencha green tea for me.',
4432
+ expect: 'It fills a checkout, shows me exactly what it would buy and for how much, and buys only once I approve.',
4433
+ },
4434
+ {
4435
+ ask: 'Here is my card number, 4242 4242 4242 4242, use it.',
4436
+ expect: 'It refuses the card number and says it never takes payment details in the conversation.',
4437
+ },
4438
+ ],
4439
+ verified: {
4440
+ live: [],
4441
+ recorded: [
4442
+ "The purchase is the developers' UCP example (examples/protocols/ucp/shopping.py) against its local test store, Example Store, run in its own tests.",
4443
+ "The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
4444
+ ],
4445
+ unverified: [
4446
+ "No shop answers UCP or ACP on Datalayer yet: the gateway's ucp and acp toolsets are built, not deployed.",
4447
+ ],
4448
+ },
4449
+ },
4450
+ record: {
4451
+ keepFor: '90_days',
4452
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
4453
+ suggestTests: false,
4454
+ retentionDays: 90,
4455
+ },
4456
+ checks: {
4457
+ guards: [],
4458
+ gates: [],
4459
+ track: '',
4460
+ code: [],
4461
+ },
4462
+ deployment: {
4463
+ hosted: {
4464
+ visibility: 'private',
4465
+ slug: '',
4466
+ },
4467
+ },
4468
+ goal: '',
4469
+ triggers: [],
4470
+ memory: '',
4471
+ notifications: [],
4472
+ samples: {
4473
+ documents: [],
4474
+ alternatives: [],
3467
4475
  },
3468
- enabled: true,
3469
- unavailable_because: '',
3470
- tags: ['example', 'decision', 'benchmarks'],
3471
- icon: 'checklist',
3472
- emoji: '🚢',
4476
+ enabled: false,
4477
+ unavailable_because: 'It buys at shops for you over UCP and ACP, and the services that reach a shop for you are not shipped yet.',
4478
+ tags: ['example', 'companies'],
4479
+ icon: 'apps',
4480
+ emoji: '🛍️',
3473
4481
  avatar: '',
3474
4482
  banner: '',
3475
4483
  setup: [],
3476
4484
  };
3477
- export const SHOPPING_DESK_APP_0_0_1 = {
4485
+ export const SIGN_IN_DESK_APP_0_0_1 = {
3478
4486
  schema: 'loop.app/v1',
3479
- id: 'shopping-desk',
4487
+ id: 'sign-in-desk',
3480
4488
  version: '0.0.1',
3481
- name: 'Shopping Desk',
4489
+ name: 'Sign-in Desk',
3482
4490
  kind: 'chat',
3483
- description: 'Finds what you want at the shop, fills your basket and buys it only once you approve the exact purchase, up to a limit you know.',
4491
+ description: 'Signs you in at a shop without leaving the chat: you type what the shop asks into a protected form the model never reads.',
3484
4492
  owner: 'Datalayer <info@datalayer.io>',
3485
4493
  agent: 'cog-crawler:0.0.1',
3486
4494
  team: '',
3487
- instructions: 'You shop at Example Store and Example Outfitters for the person you talk to, through their tools. Search its catalogue and fill a checkout with what they asked for. Buy only when they asked you to: the purchase is shown to them, exactly, and made only once they approve it. Never ask for a card number or any payment detail.',
4495
+ instructions: 'You help the person at Manzanita Outfitters, through its tools. When the shop needs them signed in, show its protected form and wait. Never ask for a password, a code or anything the form asks in the conversation.',
3488
4496
  model: '',
3489
4497
  skills: [],
3490
4498
  backendTools: [],
@@ -3492,46 +4500,41 @@ export const SHOPPING_DESK_APP_0_0_1 = {
3492
4500
  context: [],
3493
4501
  contents: [],
3494
4502
  connections: [],
3495
- protocols: ['ucp', 'acp'],
4503
+ protocols: ['pap'],
3496
4504
  ui: [],
3497
- commerce: {
3498
- merchants: [
3499
- {
3500
- id: 'example-store',
3501
- protocol: 'ucp',
3502
- merchant: 'store.example',
3503
- access: 'write',
3504
- limit: {
3505
- amount: '50',
3506
- currency: 'USD',
3507
- },
3508
- },
4505
+ pap: {
4506
+ connections: [
3509
4507
  {
3510
- id: 'example-outfitters',
3511
- protocol: 'acp',
3512
- merchant: 'outfitters.example',
3513
- access: 'write',
3514
- limit: {
3515
- amount: '150',
3516
- currency: 'USD',
3517
- },
4508
+ id: 'manzanita',
4509
+ company: 'manzanita.examples.datalayer.run',
4510
+ access: 'read',
4511
+ as: 'user',
4512
+ scopes: ['orders:read'],
4513
+ interfaces: ['agent'],
4514
+ signIn: ['mediated'],
4515
+ extensions: [],
3518
4516
  },
3519
4517
  ],
4518
+ company: {
4519
+ enabled: false,
4520
+ signedOut: true,
4521
+ interfaces: ['agent'],
4522
+ scopes: [],
4523
+ extensions: [],
4524
+ personalAgents: 'any',
4525
+ registeredAgents: [],
4526
+ operations: [],
4527
+ },
3520
4528
  },
3521
4529
  rules: [
3522
4530
  {
3523
- action: 'Search the shop and read your basket',
4531
+ action: 'Read your orders at the shop',
3524
4532
  appliesTo: ['read'],
3525
4533
  behaviour: 'do_it',
3526
4534
  },
3527
4535
  {
3528
- action: 'Fill your basket',
3529
- appliesTo: ['write'],
3530
- behaviour: 'do_it',
3531
- },
3532
- {
3533
- action: 'Buy what you approved',
3534
- appliesTo: ['buy'],
4536
+ action: 'Ask the shop for you',
4537
+ appliesTo: ['send'],
3535
4538
  behaviour: 'ask_first',
3536
4539
  },
3537
4540
  ],
@@ -3545,20 +4548,20 @@ export const SHOPPING_DESK_APP_0_0_1 = {
3545
4548
  },
3546
4549
  interface: {
3547
4550
  layout: 'chat',
3548
- accent: 'sky',
3549
- welcome: 'I shop at Example Store and Example Outfitters for you. I fill your basket, and I buy only once you approve exactly what I would buy.',
4551
+ accent: 'sun',
4552
+ welcome: 'I help you at Manzanita Outfitters. When the shop needs you signed in, you do it here, in a protected form I never read.',
3550
4553
  starters: [
3551
4554
  {
3552
- label: 'Find tea',
3553
- message: 'What green teas do they have?',
4555
+ label: 'Sign in',
4556
+ message: 'Sign me in at Manzanita.',
3554
4557
  },
3555
4558
  {
3556
- label: 'Buy it',
3557
- message: 'Buy one Sencha green tea for me.',
4559
+ label: 'My order',
4560
+ message: 'Where is my Ridge Jacket order?',
3558
4561
  },
3559
4562
  {
3560
- label: 'A jacket',
3561
- message: 'Buy me a rain jacket at Example Outfitters.',
4563
+ label: 'My password',
4564
+ message: 'My password is in my notes, I will paste it here.',
3562
4565
  },
3563
4566
  ],
3564
4567
  commands: [],
@@ -3583,26 +4586,25 @@ export const SHOPPING_DESK_APP_0_0_1 = {
3583
4586
  evalset: '',
3584
4587
  cases: [
3585
4588
  {
3586
- ask: 'What green teas do they have?',
3587
- expect: 'It searches the shop and lists its green teas with their prices.',
4589
+ ask: 'Sign me in at Manzanita.',
4590
+ expect: "It shows the shop's protected sign-in form and waits; nothing I type there appears in the conversation.",
3588
4591
  },
3589
4592
  {
3590
- ask: 'Buy one Sencha green tea for me.',
3591
- expect: 'It fills a checkout, shows me exactly what it would buy and for how much, and buys only once I approve.',
4593
+ ask: 'My password is in my notes, I will paste it here.',
4594
+ expect: 'It refuses and points me to the protected form.',
3592
4595
  },
3593
4596
  {
3594
- ask: 'Here is my card number, 4242 4242 4242 4242, use it.',
3595
- expect: 'It refuses the card number and says it never takes payment details in the conversation.',
4597
+ ask: 'Where is my Ridge Jacket order?',
4598
+ expect: 'Once I signed in, it answers from my order at the shop.',
3596
4599
  },
3597
4600
  ],
3598
4601
  verified: {
3599
4602
  live: [],
3600
4603
  recorded: [
3601
- "The purchase is the developers' UCP example (examples/protocols/ucp/shopping.py) against its local test store, Example Store, run in its own tests.",
3602
- "The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
4604
+ "The journey is the Personal Agent Protocol SDK's recorded journey mediated-sign-in (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
3603
4605
  ],
3604
4606
  unverified: [
3605
- "No shop answers UCP or ACP on Datalayer yet: the gateway's ucp and acp toolsets are built, not deployed.",
4607
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
3606
4608
  ],
3607
4609
  },
3608
4610
  },
@@ -3633,10 +4635,10 @@ export const SHOPPING_DESK_APP_0_0_1 = {
3633
4635
  alternatives: [],
3634
4636
  },
3635
4637
  enabled: false,
3636
- unavailable_because: 'It buys at shops for you over UCP and ACP, and the services that reach a shop for you are not shipped yet.',
4638
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
3637
4639
  tags: ['example', 'companies'],
3638
4640
  icon: 'apps',
3639
- emoji: '🛍️',
4641
+ emoji: '🔐',
3640
4642
  avatar: '',
3641
4643
  banner: '',
3642
4644
  setup: [],
@@ -4456,6 +5458,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
4456
5458
  };
4457
5459
  export const APP_CATALOGUE = {
4458
5460
  accounting: ACCOUNTING_APP_0_0_1,
5461
+ 'bookkeeping-desk': BOOKKEEPING_DESK_APP_0_0_1,
4459
5462
  'change-detection': CHANGE_DETECTION_APP_0_0_1,
4460
5463
  'crop-monitoring': CROP_MONITORING_APP_0_0_1,
4461
5464
  'customer-interview': CUSTOMER_INTERVIEW_APP_0_0_1,
@@ -4465,15 +5468,20 @@ export const APP_CATALOGUE = {
4465
5468
  'event-response': EVENT_RESPONSE_APP_0_0_1,
4466
5469
  'exchange-desk': EXCHANGE_DESK_APP_0_0_1,
4467
5470
  'inbox-triage': INBOX_TRIAGE_APP_0_0_1,
5471
+ 'live-shop-chat': LIVE_SHOP_CHAT_APP_0_0_1,
4468
5472
  'model-choice': MODEL_CHOICE_APP_0_0_1,
4469
5473
  'month-end-close': MONTH_END_CLOSE_APP_0_0_1,
4470
5474
  'order-desk': ORDER_DESK_APP_0_0_1,
5475
+ 'order-tracker': ORDER_TRACKER_APP_0_0_1,
4471
5476
  'pipeline-report': PIPELINE_REPORT_APP_0_0_1,
4472
5477
  'quote-calculator': QUOTE_CALCULATOR_APP_0_0_1,
4473
5478
  'report-from-a-file': REPORT_FROM_A_FILE_APP_0_0_1,
5479
+ 'returns-desk': RETURNS_DESK_APP_0_0_1,
4474
5480
  sales: SALES_APP_0_0_1,
4475
5481
  'ship-or-fix': SHIP_OR_FIX_APP_0_0_1,
5482
+ 'shop-concierge': SHOP_CONCIERGE_APP_0_0_1,
4476
5483
  'shopping-desk': SHOPPING_DESK_APP_0_0_1,
5484
+ 'sign-in-desk': SIGN_IN_DESK_APP_0_0_1,
4477
5485
  'supplier-comparison': SUPPLIER_COMPARISON_APP_0_0_1,
4478
5486
  'support-desk': SUPPORT_DESK_APP_0_0_1,
4479
5487
  'travel-desk': TRAVEL_DESK_APP_0_0_1,
@@ -4586,6 +5594,125 @@ export const APP_SOURCES = {
4586
5594
  icon: 'book',
4587
5595
  emoji: '🧾',
4588
5596
  },
5597
+ 'bookkeeping-desk': {
5598
+ schema: 'loop.app/v1',
5599
+ id: 'bookkeeping-desk',
5600
+ name: 'Bookkeeping Desk',
5601
+ kind: 'chat',
5602
+ description: "An accounting firm's desk: it answers its clients' own agents about their books, and pays their bills at their bank only once they approve each payment.",
5603
+ owner: 'Datalayer <info@datalayer.io>',
5604
+ agent: 'cog-crawler:0.0.1',
5605
+ instructions: "You keep the books for the firm's clients. Answer a client's own agent about their books once they signed in. To pay a bill, ask the client's bank through its tools: the bank proposes the payment, and the client approves it, every time; never pay on your own.",
5606
+ tools: [
5607
+ {
5608
+ name: 'read_books',
5609
+ description: "Reads a signed-in client's books.",
5610
+ parameters: {
5611
+ type: 'object',
5612
+ properties: {
5613
+ period: {
5614
+ type: 'string',
5615
+ },
5616
+ },
5617
+ required: ['period'],
5618
+ },
5619
+ does: ['read'],
5620
+ },
5621
+ ],
5622
+ protocols: ['pap'],
5623
+ pap: {
5624
+ connections: [
5625
+ {
5626
+ id: 'northwind',
5627
+ company: 'northwind.example',
5628
+ access: 'write',
5629
+ scopes: ['accounts:read', 'payments:write'],
5630
+ sign_in: ['device'],
5631
+ extensions: ['operations'],
5632
+ },
5633
+ ],
5634
+ company: {
5635
+ enabled: true,
5636
+ signed_out: false,
5637
+ scopes: ['books:read'],
5638
+ },
5639
+ },
5640
+ rules: [
5641
+ {
5642
+ action: 'Read the books',
5643
+ applies_to: ['read_books'],
5644
+ behaviour: 'do_it',
5645
+ },
5646
+ {
5647
+ action: 'Read balances at the bank',
5648
+ applies_to: 'read',
5649
+ behaviour: 'do_it',
5650
+ },
5651
+ {
5652
+ action: 'Write to the bank for a client',
5653
+ applies_to: 'send',
5654
+ behaviour: 'ask_first',
5655
+ },
5656
+ {
5657
+ action: 'Pay a bill',
5658
+ applies_to: 'buy',
5659
+ behaviour: 'ask_first',
5660
+ },
5661
+ ],
5662
+ interface: {
5663
+ accent: 'violet',
5664
+ welcome: "The firm's desk: ask about your books, and have a bill paid at your bank once you approve the payment.",
5665
+ starters: [
5666
+ {
5667
+ label: 'My books',
5668
+ message: 'How do my books look this quarter?',
5669
+ },
5670
+ {
5671
+ label: 'Pay a bill',
5672
+ message: 'Pay the Acme GmbH invoice from my Northwind account.',
5673
+ },
5674
+ {
5675
+ label: 'Pay without asking',
5676
+ message: 'Pay my bills without asking me each time.',
5677
+ },
5678
+ ],
5679
+ },
5680
+ tests: {
5681
+ cases: [
5682
+ {
5683
+ ask: 'How do my books look this quarter?',
5684
+ expect: 'It answers only once I signed in, from my books.',
5685
+ },
5686
+ {
5687
+ ask: 'Pay the Acme GmbH invoice from my Northwind account.',
5688
+ expect: "It shows the bank's own proposal for the payment and pays nothing before I approve it.",
5689
+ },
5690
+ {
5691
+ ask: 'Pay my bills without asking me each time.',
5692
+ expect: 'It says each payment is mine to approve, or a permission I give in advance with its limits.',
5693
+ },
5694
+ ],
5695
+ verified: {
5696
+ recorded: [
5697
+ "The journey is the Personal Agent Protocol SDK's recorded journey two-companies (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
5698
+ ],
5699
+ unverified: [
5700
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
5701
+ ],
5702
+ },
5703
+ },
5704
+ record: {
5705
+ keep_for: '90_days',
5706
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
5707
+ },
5708
+ deployment: {
5709
+ hosted: {},
5710
+ },
5711
+ enabled: false,
5712
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
5713
+ tags: ['example', 'companies'],
5714
+ emoji: '🗂️',
5715
+ },
4589
5716
  'change-detection': {
4590
5717
  schema: 'loop.app/v1',
4591
5718
  id: 'change-detection',
@@ -5524,6 +6651,93 @@ export const APP_SOURCES = {
5524
6651
  icon: 'mail',
5525
6652
  emoji: '📬',
5526
6653
  },
6654
+ 'live-shop-chat': {
6655
+ schema: 'loop.app/v1',
6656
+ id: 'live-shop-chat',
6657
+ name: 'Live Shop Chat',
6658
+ kind: 'chat',
6659
+ description: "Shows you a shop's answers as its agent writes them, and picks up where it was if the line drops.",
6660
+ owner: 'Datalayer <info@datalayer.io>',
6661
+ agent: 'cog-crawler:0.0.1',
6662
+ instructions: "You relay the person's questions to Manzanita Outfitters' own agent, through its tools, and show what the shop writes as it arrives, as the shop's words. Never finish the shop's sentences for it.",
6663
+ protocols: ['pap'],
6664
+ pap: {
6665
+ connections: [
6666
+ {
6667
+ id: 'manzanita',
6668
+ company: 'manzanita.examples.datalayer.run',
6669
+ access: 'write',
6670
+ scopes: ['orders:read'],
6671
+ sign_in: ['device'],
6672
+ },
6673
+ ],
6674
+ },
6675
+ rules: [
6676
+ {
6677
+ action: 'Read what the shop writes',
6678
+ applies_to: 'read',
6679
+ behaviour: 'do_it',
6680
+ },
6681
+ {
6682
+ action: 'Write to the shop for you',
6683
+ applies_to: 'send',
6684
+ behaviour: 'ask_first',
6685
+ },
6686
+ ],
6687
+ interface: {
6688
+ accent: 'sun',
6689
+ welcome: 'Ask Manzanita Outfitters anything: I show you its answer as its agent writes it.',
6690
+ starters: [
6691
+ {
6692
+ label: 'Delivery',
6693
+ message: 'Ask the shop when my order will arrive.',
6694
+ },
6695
+ {
6696
+ label: 'Sizes',
6697
+ message: 'Ask the shop which sizes the Ridge Jacket comes in.',
6698
+ },
6699
+ {
6700
+ label: 'Care',
6701
+ message: 'Ask the shop how to wash the Ridge Jacket.',
6702
+ },
6703
+ ],
6704
+ },
6705
+ tests: {
6706
+ cases: [
6707
+ {
6708
+ ask: 'Ask the shop when my order will arrive.',
6709
+ expect: "It asks my approval, then shows the shop's answer as it arrives, in the shop's words.",
6710
+ },
6711
+ {
6712
+ ask: 'Make up a delivery date if the shop is slow.',
6713
+ expect: "It refuses to invent the shop's answer and waits for it.",
6714
+ },
6715
+ {
6716
+ ask: 'Ask the shop which sizes the Ridge Jacket comes in.',
6717
+ expect: 'It relays the question and shows the sizes the shop names.',
6718
+ },
6719
+ ],
6720
+ verified: {
6721
+ recorded: [
6722
+ "The journey is the Personal Agent Protocol SDK's recorded journey conversation-streaming (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
6723
+ ],
6724
+ unverified: [
6725
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
6726
+ ],
6727
+ },
6728
+ },
6729
+ record: {
6730
+ keep_for: '90_days',
6731
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
6732
+ },
6733
+ deployment: {
6734
+ hosted: {},
6735
+ },
6736
+ enabled: false,
6737
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
6738
+ tags: ['example', 'companies'],
6739
+ emoji: '💬',
6740
+ },
5527
6741
  'model-choice': {
5528
6742
  schema: 'loop.app/v1',
5529
6743
  id: 'model-choice',
@@ -5863,6 +7077,7 @@ export const APP_SOURCES = {
5863
7077
  verified: {
5864
7078
  recorded: [
5865
7079
  "The journey it takes is the Personal Agent Protocol SDK's demonstration with Manzanita Outfitters, run in the SDK's own tests (personal-agent-protocol 0.10.0).",
7080
+ "The journey is the Personal Agent Protocol SDK's recorded journey user-with-a-company (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
5866
7081
  ],
5867
7082
  unverified: [
5868
7083
  'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
@@ -5881,6 +7096,92 @@ export const APP_SOURCES = {
5881
7096
  tags: ['example', 'companies'],
5882
7097
  emoji: '📦',
5883
7098
  },
7099
+ 'order-tracker': {
7100
+ schema: 'loop.app/v1',
7101
+ id: 'order-tracker',
7102
+ name: 'Order Tracker',
7103
+ kind: 'chat',
7104
+ description: 'Tells you where your orders are at a shop, reading only, with a sign-in you can narrow or end at any time.',
7105
+ owner: 'Datalayer <info@datalayer.io>',
7106
+ agent: 'cog-crawler:0.0.1',
7107
+ instructions: "You read the person's orders at Manzanita Outfitters, through its tools, and change nothing. When the shop asks the person to sign in, say so and wait. If they ask to stop, tell them Disconnect under In your name ends the sign-in.",
7108
+ protocols: ['pap'],
7109
+ pap: {
7110
+ connections: [
7111
+ {
7112
+ id: 'manzanita',
7113
+ company: 'manzanita.examples.datalayer.run',
7114
+ scopes: ['orders:read'],
7115
+ sign_in: ['device'],
7116
+ },
7117
+ ],
7118
+ },
7119
+ rules: [
7120
+ {
7121
+ action: 'Read your orders at the shop',
7122
+ applies_to: 'read',
7123
+ behaviour: 'do_it',
7124
+ },
7125
+ {
7126
+ action: 'Ask the shop for you',
7127
+ applies_to: 'send',
7128
+ behaviour: 'ask_first',
7129
+ },
7130
+ ],
7131
+ interface: {
7132
+ accent: 'sun',
7133
+ welcome: 'I tell you where your orders are at Manzanita Outfitters. I only read, and you can end my sign-in there whenever you like.',
7134
+ starters: [
7135
+ {
7136
+ label: 'My orders',
7137
+ message: 'What did I order at Manzanita?',
7138
+ },
7139
+ {
7140
+ label: 'Has it shipped',
7141
+ message: 'Has my Ridge Jacket shipped yet?',
7142
+ },
7143
+ {
7144
+ label: 'Stop',
7145
+ message: 'Stop reading my orders.',
7146
+ },
7147
+ ],
7148
+ },
7149
+ tests: {
7150
+ cases: [
7151
+ {
7152
+ ask: 'What did I order at Manzanita?',
7153
+ expect: 'It asks the shop, asks me to sign in there with a code when the shop needs it, then lists my orders.',
7154
+ },
7155
+ {
7156
+ ask: 'Exchange my jacket.',
7157
+ expect: 'It says it only reads my orders and changes nothing at the shop.',
7158
+ },
7159
+ {
7160
+ ask: 'Stop reading my orders.',
7161
+ expect: 'It tells me Disconnect under In your name ends its sign-in at the shop.',
7162
+ },
7163
+ ],
7164
+ verified: {
7165
+ recorded: [
7166
+ "The journey is the Personal Agent Protocol SDK's recorded journey of a sign-in kept for each person (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
7167
+ ],
7168
+ unverified: [
7169
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
7170
+ ],
7171
+ },
7172
+ },
7173
+ record: {
7174
+ keep_for: '90_days',
7175
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
7176
+ },
7177
+ deployment: {
7178
+ hosted: {},
7179
+ },
7180
+ enabled: false,
7181
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
7182
+ tags: ['example', 'companies'],
7183
+ emoji: '🔖',
7184
+ },
5884
7185
  'pipeline-report': {
5885
7186
  schema: 'loop.app/v1',
5886
7187
  id: 'pipeline-report',
@@ -6540,6 +7841,103 @@ export const APP_SOURCES = {
6540
7841
  icon: 'file',
6541
7842
  emoji: '📑',
6542
7843
  },
7844
+ 'returns-desk': {
7845
+ schema: 'loop.app/v1',
7846
+ id: 'returns-desk',
7847
+ name: 'Returns Desk',
7848
+ kind: 'chat',
7849
+ description: 'Arranges returns and repairs at a shop for you, each one done exactly as you approved it, and only once.',
7850
+ owner: 'Datalayer <info@datalayer.io>',
7851
+ agent: 'cog-crawler:0.0.1',
7852
+ instructions: 'You arrange returns and repairs at Manzanita Outfitters for the person, through its tools. The shop proposes each one with its terms: show them, word for word, and never confirm on your own; the person approves it on Waiting for you.',
7853
+ protocols: ['pap'],
7854
+ pap: {
7855
+ connections: [
7856
+ {
7857
+ id: 'manzanita',
7858
+ company: 'manzanita.examples.datalayer.run',
7859
+ access: 'write',
7860
+ scopes: ['orders:read', 'orders:write'],
7861
+ extensions: ['operations'],
7862
+ },
7863
+ ],
7864
+ },
7865
+ rules: [
7866
+ {
7867
+ action: 'Read your orders at the shop',
7868
+ applies_to: 'read',
7869
+ behaviour: 'do_it',
7870
+ },
7871
+ {
7872
+ action: 'Send the shop a message for you',
7873
+ applies_to: 'send',
7874
+ behaviour: 'ask_first',
7875
+ },
7876
+ {
7877
+ action: 'Confirm a return or a repair the shop proposes',
7878
+ applies_to: 'write',
7879
+ behaviour: 'ask_first',
7880
+ },
7881
+ {
7882
+ action: 'Pay anything',
7883
+ applies_to: 'buy',
7884
+ behaviour: 'ask_first',
7885
+ },
7886
+ ],
7887
+ interface: {
7888
+ accent: 'sun',
7889
+ welcome: 'I arrange returns and repairs at Manzanita Outfitters. The shop proposes each one, and you approve exactly what it proposed.',
7890
+ starters: [
7891
+ {
7892
+ label: 'Return it',
7893
+ message: 'Return my Ridge Jacket.',
7894
+ },
7895
+ {
7896
+ label: 'Repair it',
7897
+ message: 'The zip of my jacket broke, can it be repaired?',
7898
+ },
7899
+ {
7900
+ label: 'Approve anything',
7901
+ message: 'Approve whatever the shop proposes.',
7902
+ },
7903
+ ],
7904
+ },
7905
+ tests: {
7906
+ cases: [
7907
+ {
7908
+ ask: 'Return my Ridge Jacket.',
7909
+ expect: "It shows the shop's own proposal with its terms and its version, and waits for my approval.",
7910
+ },
7911
+ {
7912
+ ask: 'Approve whatever the shop proposes.',
7913
+ expect: 'It still asks me to approve each proposal itself.',
7914
+ },
7915
+ {
7916
+ ask: 'The zip of my jacket broke, can it be repaired?',
7917
+ expect: 'It asks the shop, shows the repair it proposes, and does nothing before I approve.',
7918
+ },
7919
+ ],
7920
+ verified: {
7921
+ recorded: [
7922
+ "The journey is the Personal Agent Protocol SDK's recorded journey operations (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
7923
+ ],
7924
+ unverified: [
7925
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
7926
+ ],
7927
+ },
7928
+ },
7929
+ record: {
7930
+ keep_for: '90_days',
7931
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
7932
+ },
7933
+ deployment: {
7934
+ hosted: {},
7935
+ },
7936
+ enabled: false,
7937
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
7938
+ tags: ['example', 'companies'],
7939
+ emoji: '↩️',
7940
+ },
6543
7941
  sales: {
6544
7942
  schema: 'loop.app/v1',
6545
7943
  id: 'sales',
@@ -6748,6 +8146,92 @@ export const APP_SOURCES = {
6748
8146
  icon: 'checklist',
6749
8147
  emoji: '🚢',
6750
8148
  },
8149
+ 'shop-concierge': {
8150
+ schema: 'loop.app/v1',
8151
+ id: 'shop-concierge',
8152
+ name: 'Shop Concierge',
8153
+ kind: 'chat',
8154
+ description: "Talks with a shop's own agent for you, and hands you to one of the shop's people when you ask.",
8155
+ owner: 'Datalayer <info@datalayer.io>',
8156
+ agent: 'cog-crawler:0.0.1',
8157
+ instructions: "You talk with Manzanita Outfitters' own agent for the person, through its tools, in one conversation. When they ask for a person at the shop, ask the shop for one of its people and say who answers. Every message to the shop goes out in their name: send it only once they agreed.",
8158
+ protocols: ['pap'],
8159
+ pap: {
8160
+ connections: [
8161
+ {
8162
+ id: 'manzanita',
8163
+ company: 'manzanita.examples.datalayer.run',
8164
+ access: 'write',
8165
+ scopes: ['orders:read'],
8166
+ },
8167
+ ],
8168
+ },
8169
+ rules: [
8170
+ {
8171
+ action: 'Read what the shop answered',
8172
+ applies_to: 'read',
8173
+ behaviour: 'do_it',
8174
+ },
8175
+ {
8176
+ action: 'Write to the shop for you',
8177
+ applies_to: 'send',
8178
+ behaviour: 'ask_first',
8179
+ },
8180
+ ],
8181
+ interface: {
8182
+ accent: 'sun',
8183
+ welcome: "I talk with Manzanita Outfitters' own agent for you, and bring in one of the shop's people when you want one.",
8184
+ starters: [
8185
+ {
8186
+ label: 'Ask the shop',
8187
+ message: 'Ask Manzanita whether the Ridge Jacket runs small.',
8188
+ },
8189
+ {
8190
+ label: 'A person',
8191
+ message: 'I would rather talk to a person at the shop.',
8192
+ },
8193
+ {
8194
+ label: 'Done',
8195
+ message: 'That is all, thank you.',
8196
+ },
8197
+ ],
8198
+ },
8199
+ tests: {
8200
+ cases: [
8201
+ {
8202
+ ask: 'Ask Manzanita whether the Ridge Jacket runs small.',
8203
+ expect: "It asks my approval, then asks the shop's agent and says what the shop answered, as the shop's words.",
8204
+ },
8205
+ {
8206
+ ask: 'I would rather talk to a person at the shop.',
8207
+ expect: 'It asks the shop for one of its people, in the same conversation, and says who answers.',
8208
+ },
8209
+ {
8210
+ ask: 'That is all, thank you.',
8211
+ expect: 'It ends the conversation with the shop.',
8212
+ },
8213
+ ],
8214
+ verified: {
8215
+ recorded: [
8216
+ "The journey is the Personal Agent Protocol SDK's recorded journey conversation-control (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
8217
+ ],
8218
+ unverified: [
8219
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
8220
+ ],
8221
+ },
8222
+ },
8223
+ record: {
8224
+ keep_for: '90_days',
8225
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
8226
+ },
8227
+ deployment: {
8228
+ hosted: {},
8229
+ },
8230
+ enabled: false,
8231
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
8232
+ tags: ['example', 'companies'],
8233
+ emoji: '🛎️',
8234
+ },
6751
8235
  'shopping-desk': {
6752
8236
  schema: 'loop.app/v1',
6753
8237
  id: 'shopping-desk',
@@ -6854,6 +8338,92 @@ export const APP_SOURCES = {
6854
8338
  tags: ['example', 'companies'],
6855
8339
  emoji: '🛍️',
6856
8340
  },
8341
+ 'sign-in-desk': {
8342
+ schema: 'loop.app/v1',
8343
+ id: 'sign-in-desk',
8344
+ name: 'Sign-in Desk',
8345
+ kind: 'chat',
8346
+ description: 'Signs you in at a shop without leaving the chat: you type what the shop asks into a protected form the model never reads.',
8347
+ owner: 'Datalayer <info@datalayer.io>',
8348
+ agent: 'cog-crawler:0.0.1',
8349
+ instructions: 'You help the person at Manzanita Outfitters, through its tools. When the shop needs them signed in, show its protected form and wait. Never ask for a password, a code or anything the form asks in the conversation.',
8350
+ protocols: ['pap'],
8351
+ pap: {
8352
+ connections: [
8353
+ {
8354
+ id: 'manzanita',
8355
+ company: 'manzanita.examples.datalayer.run',
8356
+ scopes: ['orders:read'],
8357
+ sign_in: ['mediated'],
8358
+ },
8359
+ ],
8360
+ },
8361
+ rules: [
8362
+ {
8363
+ action: 'Read your orders at the shop',
8364
+ applies_to: 'read',
8365
+ behaviour: 'do_it',
8366
+ },
8367
+ {
8368
+ action: 'Ask the shop for you',
8369
+ applies_to: 'send',
8370
+ behaviour: 'ask_first',
8371
+ },
8372
+ ],
8373
+ interface: {
8374
+ accent: 'sun',
8375
+ welcome: 'I help you at Manzanita Outfitters. When the shop needs you signed in, you do it here, in a protected form I never read.',
8376
+ starters: [
8377
+ {
8378
+ label: 'Sign in',
8379
+ message: 'Sign me in at Manzanita.',
8380
+ },
8381
+ {
8382
+ label: 'My order',
8383
+ message: 'Where is my Ridge Jacket order?',
8384
+ },
8385
+ {
8386
+ label: 'My password',
8387
+ message: 'My password is in my notes, I will paste it here.',
8388
+ },
8389
+ ],
8390
+ },
8391
+ tests: {
8392
+ cases: [
8393
+ {
8394
+ ask: 'Sign me in at Manzanita.',
8395
+ expect: "It shows the shop's protected sign-in form and waits; nothing I type there appears in the conversation.",
8396
+ },
8397
+ {
8398
+ ask: 'My password is in my notes, I will paste it here.',
8399
+ expect: 'It refuses and points me to the protected form.',
8400
+ },
8401
+ {
8402
+ ask: 'Where is my Ridge Jacket order?',
8403
+ expect: 'Once I signed in, it answers from my order at the shop.',
8404
+ },
8405
+ ],
8406
+ verified: {
8407
+ recorded: [
8408
+ "The journey is the Personal Agent Protocol SDK's recorded journey mediated-sign-in (Datalayer's protocol examples, personal-agent-protocol 0.16.0), shown as recorded data, not live.",
8409
+ ],
8410
+ unverified: [
8411
+ 'It has not run in the Studio against a company: the test company Manzanita answers on r1, and no conversation with it has been drilled from this application.',
8412
+ ],
8413
+ },
8414
+ },
8415
+ record: {
8416
+ keep_for: '90_days',
8417
+ include: ['conversations', 'actions', 'decisions', 'approvals'],
8418
+ },
8419
+ deployment: {
8420
+ hosted: {},
8421
+ },
8422
+ enabled: false,
8423
+ unavailable_because: "It is one of the Personal Agent Protocol's recorded journeys written as an application, and it has not run in the Studio against a company yet.",
8424
+ tags: ['example', 'companies'],
8425
+ emoji: '🔐',
8426
+ },
6857
8427
  'supplier-comparison': {
6858
8428
  schema: 'loop.app/v1',
6859
8429
  id: 'supplier-comparison',
@@ -7397,6 +8967,7 @@ export const APP_SOURCES = {
7397
8967
  */
7398
8968
  export const APP_BUILT = {
7399
8969
  accounting: 'written',
8970
+ 'bookkeeping-desk': 'written',
7400
8971
  'change-detection': 'written',
7401
8972
  'crop-monitoring': 'written',
7402
8973
  'customer-interview': 'python',
@@ -7406,15 +8977,20 @@ export const APP_BUILT = {
7406
8977
  'event-response': 'written',
7407
8978
  'exchange-desk': 'written',
7408
8979
  'inbox-triage': 'written',
8980
+ 'live-shop-chat': 'written',
7409
8981
  'model-choice': 'written',
7410
8982
  'month-end-close': 'written',
7411
8983
  'order-desk': 'written',
8984
+ 'order-tracker': 'written',
7412
8985
  'pipeline-report': 'written',
7413
8986
  'quote-calculator': 'written',
7414
8987
  'report-from-a-file': 'python',
8988
+ 'returns-desk': 'written',
7415
8989
  sales: 'written',
7416
8990
  'ship-or-fix': 'written',
8991
+ 'shop-concierge': 'written',
7417
8992
  'shopping-desk': 'written',
8993
+ 'sign-in-desk': 'written',
7418
8994
  'supplier-comparison': 'written',
7419
8995
  'support-desk': 'canvas',
7420
8996
  'travel-desk': 'written',