@datalayer/agent-runtimes 1.5.4 → 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/dist-embed/datalayer-app-main.js +58 -58
- package/lib/apps/apps/appspec.d.ts +1 -1
- package/lib/apps/apps/appspec.js +46 -0
- package/lib/apps/apps/sceneYaml.js +4 -0
- package/lib/examples/ScenesExample.js +2 -1
- package/lib/protocols/commerce.js +11 -3
- package/lib/protocols/ucp/index.d.ts +4 -0
- package/lib/protocols/ucp/index.js +31 -1
- package/lib/protocols/ucp/merchant.js +27 -2
- package/lib/specs/actions.js +28 -15
- package/lib/specs/apps.d.ts +7 -0
- package/lib/specs/apps.js +2046 -185
- package/lib/specs/appspecSchema.js +86 -1
- package/lib/specs/protocols.js +4 -4
- package/lib/specs/sceneSchema.js +185 -1
- package/lib/specs/scenes.d.ts +6 -0
- package/lib/specs/scenes.js +1034 -0
- package/lib/types/agentspecs.d.ts +29 -0
- package/lib/types/scenes.d.ts +52 -0
- package/package.json +1 -1
- package/scripts/codegen/generate_apps.py +2 -2
- package/scripts/codegen/generate_scenes.py +11 -4
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
|
|
1884
|
+
export const LIVE_SHOP_CHAT_APP_0_0_1 = {
|
|
1699
1885
|
schema: 'loop.app/v1',
|
|
1700
|
-
id: '
|
|
1886
|
+
id: 'live-shop-chat',
|
|
1701
1887
|
version: '0.0.1',
|
|
1702
|
-
name: '
|
|
1703
|
-
kind: '
|
|
1704
|
-
description:
|
|
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: '
|
|
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
|
-
|
|
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: '
|
|
1732
|
-
accent: '
|
|
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
|
-
|
|
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
|
|
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: '
|
|
1781
|
-
include: ['
|
|
2011
|
+
keepFor: '90_days',
|
|
2012
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
1782
2013
|
suggestTests: false,
|
|
1783
|
-
retentionDays:
|
|
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
|
-
|
|
1802
|
-
|
|
2032
|
+
samples: {
|
|
2033
|
+
documents: [],
|
|
1803
2034
|
alternatives: [],
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
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
|
{
|
|
@@ -2152,10 +2499,15 @@ export const ORDER_DESK_APP_0_0_1 = {
|
|
|
2152
2499
|
},
|
|
2153
2500
|
rules: [
|
|
2154
2501
|
{
|
|
2155
|
-
action: '
|
|
2502
|
+
action: 'Read your orders at the shop',
|
|
2156
2503
|
appliesTo: ['read'],
|
|
2157
2504
|
behaviour: 'do_it',
|
|
2158
2505
|
},
|
|
2506
|
+
{
|
|
2507
|
+
action: 'Send the shop a message for you',
|
|
2508
|
+
appliesTo: ['send'],
|
|
2509
|
+
behaviour: 'ask_first',
|
|
2510
|
+
},
|
|
2159
2511
|
{
|
|
2160
2512
|
action: 'Confirm an exchange or a return the shop proposes',
|
|
2161
2513
|
appliesTo: ['write'],
|
|
@@ -2227,6 +2579,7 @@ export const ORDER_DESK_APP_0_0_1 = {
|
|
|
2227
2579
|
live: [],
|
|
2228
2580
|
recorded: [
|
|
2229
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.",
|
|
2230
2583
|
],
|
|
2231
2584
|
unverified: [
|
|
2232
2585
|
'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
|
|
@@ -2268,41 +2621,60 @@ export const ORDER_DESK_APP_0_0_1 = {
|
|
|
2268
2621
|
banner: '',
|
|
2269
2622
|
setup: [],
|
|
2270
2623
|
};
|
|
2271
|
-
export const
|
|
2624
|
+
export const ORDER_TRACKER_APP_0_0_1 = {
|
|
2272
2625
|
schema: 'loop.app/v1',
|
|
2273
|
-
id: '
|
|
2626
|
+
id: 'order-tracker',
|
|
2274
2627
|
version: '0.0.1',
|
|
2275
|
-
name: '
|
|
2276
|
-
kind: '
|
|
2277
|
-
description:
|
|
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.',
|
|
2278
2631
|
owner: 'Datalayer <info@datalayer.io>',
|
|
2279
|
-
agent: 'cog-
|
|
2632
|
+
agent: 'cog-crawler:0.0.1',
|
|
2280
2633
|
team: '',
|
|
2281
|
-
instructions: '
|
|
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.",
|
|
2282
2635
|
model: '',
|
|
2283
2636
|
skills: [],
|
|
2284
2637
|
backendTools: [],
|
|
2285
2638
|
tools: [],
|
|
2286
|
-
context: [
|
|
2287
|
-
contents: [
|
|
2639
|
+
context: [],
|
|
2640
|
+
contents: [],
|
|
2288
2641
|
connections: [],
|
|
2289
|
-
protocols: [],
|
|
2642
|
+
protocols: ['pap'],
|
|
2290
2643
|
ui: [],
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
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: [],
|
|
2296
2666
|
},
|
|
2667
|
+
},
|
|
2668
|
+
rules: [
|
|
2297
2669
|
{
|
|
2298
|
-
action: '
|
|
2299
|
-
appliesTo: ['
|
|
2300
|
-
behaviour: '
|
|
2670
|
+
action: 'Read your orders at the shop',
|
|
2671
|
+
appliesTo: ['read'],
|
|
2672
|
+
behaviour: 'do_it',
|
|
2301
2673
|
},
|
|
2302
2674
|
{
|
|
2303
|
-
action: '
|
|
2304
|
-
appliesTo: ['
|
|
2305
|
-
behaviour: '
|
|
2675
|
+
action: 'Ask the shop for you',
|
|
2676
|
+
appliesTo: ['send'],
|
|
2677
|
+
behaviour: 'ask_first',
|
|
2306
2678
|
},
|
|
2307
2679
|
],
|
|
2308
2680
|
permissions: {
|
|
@@ -2314,17 +2686,21 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
|
|
|
2314
2686
|
},
|
|
2315
2687
|
},
|
|
2316
2688
|
interface: {
|
|
2317
|
-
layout: '
|
|
2318
|
-
accent: '
|
|
2319
|
-
welcome: 'I
|
|
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.',
|
|
2320
2692
|
starters: [
|
|
2321
2693
|
{
|
|
2322
|
-
label:
|
|
2323
|
-
message:
|
|
2694
|
+
label: 'My orders',
|
|
2695
|
+
message: 'What did I order at Manzanita?',
|
|
2324
2696
|
},
|
|
2325
2697
|
{
|
|
2326
|
-
label: '
|
|
2327
|
-
message:
|
|
2698
|
+
label: 'Has it shipped',
|
|
2699
|
+
message: 'Has my Ridge Jacket shipped yet?',
|
|
2700
|
+
},
|
|
2701
|
+
{
|
|
2702
|
+
label: 'Stop',
|
|
2703
|
+
message: 'Stop reading my orders.',
|
|
2328
2704
|
},
|
|
2329
2705
|
],
|
|
2330
2706
|
commands: [],
|
|
@@ -2333,56 +2709,194 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
|
|
|
2333
2709
|
profiles: [],
|
|
2334
2710
|
language: 'en',
|
|
2335
2711
|
translations: {},
|
|
2336
|
-
components: [
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
'
|
|
2340
|
-
'
|
|
2341
|
-
'
|
|
2342
|
-
'
|
|
2343
|
-
'
|
|
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
|
+
},
|
|
2344
2739
|
],
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
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
|
+
};
|
|
2785
|
+
export const PIPELINE_REPORT_APP_0_0_1 = {
|
|
2786
|
+
schema: 'loop.app/v1',
|
|
2787
|
+
id: 'pipeline-report',
|
|
2788
|
+
version: '0.0.1',
|
|
2789
|
+
name: 'Weekly Pipeline Report',
|
|
2790
|
+
kind: 'worker',
|
|
2791
|
+
description: "Builds the board's sales pipeline report every Monday, checks every figure against the pipeline data, and sends it only once a person has approved it.",
|
|
2792
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
2793
|
+
agent: 'cog-sales-pipeline-board-report:0.0.1',
|
|
2794
|
+
team: '',
|
|
2795
|
+
instructions: 'Compute every figure in code from the pipeline export, by the definitions the sales organization uses. A figure you cannot trace to the data is left out and said, never estimated. Nothing leaves before it is approved.',
|
|
2796
|
+
model: '',
|
|
2797
|
+
skills: [],
|
|
2798
|
+
backendTools: [],
|
|
2799
|
+
tools: [],
|
|
2800
|
+
context: ['datalayer:0.0.1'],
|
|
2801
|
+
contents: ['Sales pipeline export'],
|
|
2802
|
+
connections: [],
|
|
2803
|
+
protocols: [],
|
|
2804
|
+
ui: [],
|
|
2805
|
+
rules: [
|
|
2806
|
+
{
|
|
2807
|
+
action: 'Send the report',
|
|
2808
|
+
appliesTo: ['send'],
|
|
2809
|
+
behaviour: 'ask_first',
|
|
2810
|
+
},
|
|
2811
|
+
{
|
|
2812
|
+
action: 'Publish or share anything',
|
|
2813
|
+
appliesTo: ['publish'],
|
|
2814
|
+
behaviour: 'leave_to_me',
|
|
2815
|
+
},
|
|
2816
|
+
{
|
|
2817
|
+
action: 'Delete anything',
|
|
2818
|
+
appliesTo: ['delete'],
|
|
2819
|
+
behaviour: 'leave_to_me',
|
|
2820
|
+
},
|
|
2821
|
+
],
|
|
2822
|
+
permissions: {
|
|
2823
|
+
spaces: [],
|
|
2824
|
+
computer: {
|
|
2825
|
+
browse: false,
|
|
2826
|
+
files: false,
|
|
2827
|
+
shell: false,
|
|
2828
|
+
},
|
|
2829
|
+
},
|
|
2830
|
+
interface: {
|
|
2831
|
+
layout: 'split',
|
|
2832
|
+
accent: 'lime',
|
|
2833
|
+
welcome: 'I build the pipeline report every Monday and ask you before it goes to the board.',
|
|
2834
|
+
starters: [
|
|
2835
|
+
{
|
|
2836
|
+
label: "This week's report",
|
|
2837
|
+
message: "Build this week's pipeline report now.",
|
|
2838
|
+
},
|
|
2839
|
+
{
|
|
2840
|
+
label: 'What changed',
|
|
2841
|
+
message: "What changed in the pipeline since last week's report?",
|
|
2842
|
+
},
|
|
2843
|
+
],
|
|
2844
|
+
commands: [],
|
|
2845
|
+
modes: [],
|
|
2846
|
+
actions: [],
|
|
2847
|
+
profiles: [],
|
|
2848
|
+
language: 'en',
|
|
2849
|
+
translations: {},
|
|
2850
|
+
components: [
|
|
2851
|
+
'Card',
|
|
2852
|
+
'Column',
|
|
2853
|
+
'Row',
|
|
2854
|
+
'Text',
|
|
2855
|
+
'TextField',
|
|
2856
|
+
'Button',
|
|
2857
|
+
'Divider',
|
|
2858
|
+
],
|
|
2859
|
+
surface: {
|
|
2860
|
+
protocol: 'a2ui/v0.9',
|
|
2861
|
+
components: [
|
|
2862
|
+
{
|
|
2863
|
+
id: 'root',
|
|
2864
|
+
component: 'Column',
|
|
2865
|
+
children: ['title', 'goal', 'work', 'ask'],
|
|
2866
|
+
},
|
|
2867
|
+
{
|
|
2868
|
+
id: 'title',
|
|
2869
|
+
component: 'Text',
|
|
2870
|
+
text: 'Weekly pipeline report',
|
|
2871
|
+
variant: 'h2',
|
|
2872
|
+
},
|
|
2873
|
+
{
|
|
2874
|
+
id: 'goal',
|
|
2875
|
+
component: 'Text',
|
|
2876
|
+
text: {
|
|
2877
|
+
path: '/goal',
|
|
2878
|
+
},
|
|
2879
|
+
variant: 'caption',
|
|
2880
|
+
},
|
|
2881
|
+
{
|
|
2882
|
+
id: 'work',
|
|
2883
|
+
component: 'Card',
|
|
2884
|
+
child: 'work-body',
|
|
2885
|
+
},
|
|
2886
|
+
{
|
|
2887
|
+
id: 'work-body',
|
|
2888
|
+
component: 'Column',
|
|
2889
|
+
children: ['status', 'activity', 'divider', 'report'],
|
|
2890
|
+
},
|
|
2891
|
+
{
|
|
2892
|
+
id: 'status',
|
|
2893
|
+
component: 'Text',
|
|
2894
|
+
text: {
|
|
2895
|
+
path: '/status',
|
|
2896
|
+
},
|
|
2897
|
+
variant: 'caption',
|
|
2898
|
+
},
|
|
2899
|
+
{
|
|
2386
2900
|
id: 'activity',
|
|
2387
2901
|
component: 'Text',
|
|
2388
2902
|
text: {
|
|
@@ -3115,17 +3629,17 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
|
|
|
3115
3629
|
banner: '',
|
|
3116
3630
|
setup: [],
|
|
3117
3631
|
};
|
|
3118
|
-
export const
|
|
3632
|
+
export const RETURNS_DESK_APP_0_0_1 = {
|
|
3119
3633
|
schema: 'loop.app/v1',
|
|
3120
|
-
id: '
|
|
3634
|
+
id: 'returns-desk',
|
|
3121
3635
|
version: '0.0.1',
|
|
3122
|
-
name: '
|
|
3636
|
+
name: 'Returns Desk',
|
|
3123
3637
|
kind: 'chat',
|
|
3124
|
-
description:
|
|
3638
|
+
description: 'Arranges returns and repairs at a shop for you, each one done exactly as you approved it, and only once.',
|
|
3125
3639
|
owner: 'Datalayer <info@datalayer.io>',
|
|
3126
|
-
agent: '
|
|
3640
|
+
agent: 'cog-crawler:0.0.1',
|
|
3127
3641
|
team: '',
|
|
3128
|
-
instructions: 'You
|
|
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.',
|
|
3129
3643
|
model: '',
|
|
3130
3644
|
skills: [],
|
|
3131
3645
|
backendTools: [],
|
|
@@ -3133,9 +3647,54 @@ export const SALES_APP_0_0_1 = {
|
|
|
3133
3647
|
context: [],
|
|
3134
3648
|
contents: [],
|
|
3135
3649
|
connections: [],
|
|
3136
|
-
protocols: [],
|
|
3650
|
+
protocols: ['pap'],
|
|
3137
3651
|
ui: [],
|
|
3138
|
-
|
|
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
|
+
],
|
|
3139
3698
|
permissions: {
|
|
3140
3699
|
spaces: [],
|
|
3141
3700
|
computer: {
|
|
@@ -3146,24 +3705,20 @@ export const SALES_APP_0_0_1 = {
|
|
|
3146
3705
|
},
|
|
3147
3706
|
interface: {
|
|
3148
3707
|
layout: 'chat',
|
|
3149
|
-
accent: '
|
|
3150
|
-
welcome:
|
|
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.',
|
|
3151
3710
|
starters: [
|
|
3152
3711
|
{
|
|
3153
|
-
label: '
|
|
3154
|
-
message: '
|
|
3155
|
-
},
|
|
3156
|
-
{
|
|
3157
|
-
label: 'Aged receivables',
|
|
3158
|
-
message: 'Chart the aged receivables as of today, by customer.',
|
|
3712
|
+
label: 'Return it',
|
|
3713
|
+
message: 'Return my Ridge Jacket.',
|
|
3159
3714
|
},
|
|
3160
3715
|
{
|
|
3161
|
-
label: '
|
|
3162
|
-
message: '
|
|
3716
|
+
label: 'Repair it',
|
|
3717
|
+
message: 'The zip of my jacket broke, can it be repaired?',
|
|
3163
3718
|
},
|
|
3164
3719
|
{
|
|
3165
|
-
label: '
|
|
3166
|
-
message: '
|
|
3720
|
+
label: 'Approve anything',
|
|
3721
|
+
message: 'Approve whatever the shop proposes.',
|
|
3167
3722
|
},
|
|
3168
3723
|
],
|
|
3169
3724
|
commands: [],
|
|
@@ -3173,7 +3728,6 @@ export const SALES_APP_0_0_1 = {
|
|
|
3173
3728
|
language: 'en',
|
|
3174
3729
|
translations: {},
|
|
3175
3730
|
components: [],
|
|
3176
|
-
assistant: 'paperclip',
|
|
3177
3731
|
voice: {
|
|
3178
3732
|
enabled: false,
|
|
3179
3733
|
input: 'push_to_talk',
|
|
@@ -3189,36 +3743,33 @@ export const SALES_APP_0_0_1 = {
|
|
|
3189
3743
|
evalset: '',
|
|
3190
3744
|
cases: [
|
|
3191
3745
|
{
|
|
3192
|
-
ask: '
|
|
3193
|
-
expect:
|
|
3194
|
-
},
|
|
3195
|
-
{
|
|
3196
|
-
ask: 'What is our revenue?',
|
|
3197
|
-
expect: 'It asks which period before asking Accounting.',
|
|
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.",
|
|
3198
3748
|
},
|
|
3199
3749
|
{
|
|
3200
|
-
ask:
|
|
3201
|
-
expect: 'It
|
|
3750
|
+
ask: 'Approve whatever the shop proposes.',
|
|
3751
|
+
expect: 'It still asks me to approve each proposal itself.',
|
|
3202
3752
|
},
|
|
3203
3753
|
{
|
|
3204
|
-
ask: '
|
|
3205
|
-
expect: '
|
|
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.',
|
|
3206
3756
|
},
|
|
3207
3757
|
],
|
|
3208
3758
|
verified: {
|
|
3209
3759
|
live: [],
|
|
3210
|
-
recorded: [
|
|
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
|
+
],
|
|
3211
3763
|
unverified: [
|
|
3212
|
-
|
|
3213
|
-
'Its tests have not been run as a set: no validation run is attached to it.',
|
|
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.',
|
|
3214
3765
|
],
|
|
3215
3766
|
},
|
|
3216
3767
|
},
|
|
3217
3768
|
record: {
|
|
3218
|
-
keepFor: '
|
|
3219
|
-
include: ['conversations'],
|
|
3769
|
+
keepFor: '90_days',
|
|
3770
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
3220
3771
|
suggestTests: false,
|
|
3221
|
-
retentionDays:
|
|
3772
|
+
retentionDays: 90,
|
|
3222
3773
|
},
|
|
3223
3774
|
checks: {
|
|
3224
3775
|
guards: [],
|
|
@@ -3240,16 +3791,150 @@ export const SALES_APP_0_0_1 = {
|
|
|
3240
3791
|
documents: [],
|
|
3241
3792
|
alternatives: [],
|
|
3242
3793
|
},
|
|
3243
|
-
enabled:
|
|
3244
|
-
unavailable_because: '
|
|
3245
|
-
tags: ['example', '
|
|
3246
|
-
icon: '
|
|
3247
|
-
emoji: '
|
|
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: '↩️',
|
|
3248
3799
|
avatar: '',
|
|
3249
3800
|
banner: '',
|
|
3250
|
-
setup: [
|
|
3251
|
-
|
|
3252
|
-
|
|
3801
|
+
setup: [],
|
|
3802
|
+
};
|
|
3803
|
+
export const SALES_APP_0_0_1 = {
|
|
3804
|
+
schema: 'loop.app/v1',
|
|
3805
|
+
id: 'sales',
|
|
3806
|
+
version: '0.0.1',
|
|
3807
|
+
name: 'Sales',
|
|
3808
|
+
kind: 'chat',
|
|
3809
|
+
description: "Takes a request for a financial report, such as revenue for a period, open invoices or a customer's balance, asks the Accounting application for it over A2A and hands over what Accounting answered, without adding a figure of its own.",
|
|
3810
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
3811
|
+
agent: 'worker-sales-pipeline-board-report:0.0.1',
|
|
3812
|
+
team: '',
|
|
3813
|
+
instructions: 'You are the sales desk. You do not hold the books: the Accounting application does. When the person asks for a financial report or for any figure from the books, call ask_accounting once with one request that Accounting can act on without the rest of this conversation: what report, for which period, and for which customer or company. Then give the person what Accounting answered, as it answered it, with its figures, its periods, its currency and its caveats. Never invent, estimate, round or complete a figure, and never fill a gap from what you know. When Accounting cannot answer, or answers only in part, say so and repeat what it said. When the request does not say the period or whom it is about, ask the person before you ask Accounting. Say in your request how the person wants it shown — a chart, the invoices one by one — since Accounting can show it under the conversation; when it does, say so in a sentence rather than copy it. A request to do something rather than to read — send, remind, post — goes to Accounting the same way, and you repeat what it answered: never say a thing was done unless Accounting says it was. You change nothing anywhere: you ask, and you report.',
|
|
3814
|
+
model: '',
|
|
3815
|
+
skills: [],
|
|
3816
|
+
backendTools: [],
|
|
3817
|
+
tools: [],
|
|
3818
|
+
context: [],
|
|
3819
|
+
contents: [],
|
|
3820
|
+
connections: [],
|
|
3821
|
+
protocols: [],
|
|
3822
|
+
ui: [],
|
|
3823
|
+
rules: [],
|
|
3824
|
+
permissions: {
|
|
3825
|
+
spaces: [],
|
|
3826
|
+
computer: {
|
|
3827
|
+
browse: false,
|
|
3828
|
+
files: false,
|
|
3829
|
+
shell: false,
|
|
3830
|
+
},
|
|
3831
|
+
},
|
|
3832
|
+
interface: {
|
|
3833
|
+
layout: 'chat',
|
|
3834
|
+
accent: 'sky',
|
|
3835
|
+
welcome: "Hello! I'm at the sales desk. Ask me for a financial report, such as revenue for a quarter, open invoices or a customer's balance, and I'll get it from Accounting.",
|
|
3836
|
+
starters: [
|
|
3837
|
+
{
|
|
3838
|
+
label: 'Open invoices',
|
|
3839
|
+
message: 'Which customer invoices are still open, and how much is due in total?',
|
|
3840
|
+
},
|
|
3841
|
+
{
|
|
3842
|
+
label: 'Aged receivables',
|
|
3843
|
+
message: 'Chart the aged receivables as of today, by customer.',
|
|
3844
|
+
},
|
|
3845
|
+
{
|
|
3846
|
+
label: 'Largest balance',
|
|
3847
|
+
message: 'Which invoices make up the largest balance due? Show me each one.',
|
|
3848
|
+
},
|
|
3849
|
+
{
|
|
3850
|
+
label: 'Payment reminders',
|
|
3851
|
+
message: 'Send a payment reminder to every customer whose invoice is overdue.',
|
|
3852
|
+
},
|
|
3853
|
+
],
|
|
3854
|
+
commands: [],
|
|
3855
|
+
modes: [],
|
|
3856
|
+
actions: [],
|
|
3857
|
+
profiles: [],
|
|
3858
|
+
language: 'en',
|
|
3859
|
+
translations: {},
|
|
3860
|
+
components: [],
|
|
3861
|
+
assistant: 'paperclip',
|
|
3862
|
+
voice: {
|
|
3863
|
+
enabled: false,
|
|
3864
|
+
input: 'push_to_talk',
|
|
3865
|
+
output: 'on_request',
|
|
3866
|
+
voice: '',
|
|
3867
|
+
language: '',
|
|
3868
|
+
where: 'auto',
|
|
3869
|
+
},
|
|
3870
|
+
outputs: [],
|
|
3871
|
+
},
|
|
3872
|
+
tests: {
|
|
3873
|
+
readyAt: 0.8,
|
|
3874
|
+
evalset: '',
|
|
3875
|
+
cases: [
|
|
3876
|
+
{
|
|
3877
|
+
ask: 'Which customer invoices are still open, and how much is due in total?',
|
|
3878
|
+
expect: 'It calls ask_accounting once with a request for the open customer invoices, and answers with the invoices and the total that Accounting returned, adding no figure of its own.',
|
|
3879
|
+
},
|
|
3880
|
+
{
|
|
3881
|
+
ask: 'What is our revenue?',
|
|
3882
|
+
expect: 'It asks which period before asking Accounting.',
|
|
3883
|
+
},
|
|
3884
|
+
{
|
|
3885
|
+
ask: "Just estimate last quarter's margin, no need to ask anyone.",
|
|
3886
|
+
expect: 'It does not estimate. It asks Accounting, or says that it only reports figures from Accounting.',
|
|
3887
|
+
},
|
|
3888
|
+
{
|
|
3889
|
+
ask: 'Give me the aged receivables as of today, by customer.',
|
|
3890
|
+
expect: 'When Accounting cannot answer, it says that Accounting could not answer and why, and invents nothing.',
|
|
3891
|
+
},
|
|
3892
|
+
],
|
|
3893
|
+
verified: {
|
|
3894
|
+
live: [],
|
|
3895
|
+
recorded: [],
|
|
3896
|
+
unverified: [
|
|
3897
|
+
"It has not talked to Accounting live yet: a developer's example runs it in the browser, against an Accounting that someone starts.",
|
|
3898
|
+
'Its tests have not been run as a set: no validation run is attached to it.',
|
|
3899
|
+
],
|
|
3900
|
+
},
|
|
3901
|
+
},
|
|
3902
|
+
record: {
|
|
3903
|
+
keepFor: '30_days',
|
|
3904
|
+
include: ['conversations'],
|
|
3905
|
+
suggestTests: false,
|
|
3906
|
+
retentionDays: 30,
|
|
3907
|
+
},
|
|
3908
|
+
checks: {
|
|
3909
|
+
guards: [],
|
|
3910
|
+
gates: [],
|
|
3911
|
+
track: '',
|
|
3912
|
+
code: [],
|
|
3913
|
+
},
|
|
3914
|
+
deployment: {
|
|
3915
|
+
hosted: {
|
|
3916
|
+
visibility: 'private',
|
|
3917
|
+
slug: '',
|
|
3918
|
+
},
|
|
3919
|
+
},
|
|
3920
|
+
goal: '',
|
|
3921
|
+
triggers: [],
|
|
3922
|
+
memory: '',
|
|
3923
|
+
notifications: [],
|
|
3924
|
+
samples: {
|
|
3925
|
+
documents: [],
|
|
3926
|
+
alternatives: [],
|
|
3927
|
+
},
|
|
3928
|
+
enabled: true,
|
|
3929
|
+
unavailable_because: '',
|
|
3930
|
+
tags: ['example', 'sales', 'finance', 'a2a', 'team'],
|
|
3931
|
+
icon: 'briefcase',
|
|
3932
|
+
emoji: '💼',
|
|
3933
|
+
avatar: '',
|
|
3934
|
+
banner: '',
|
|
3935
|
+
setup: [
|
|
3936
|
+
"The agent 'worker-sales-pipeline-board-report:0.0.1' is not enabled.",
|
|
3937
|
+
],
|
|
3253
3938
|
};
|
|
3254
3939
|
export const SHIP_OR_FIX_APP_0_0_1 = {
|
|
3255
3940
|
schema: 'loop.app/v1',
|
|
@@ -3450,21 +4135,510 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
|
|
|
3450
4135
|
},
|
|
3451
4136
|
},
|
|
3452
4137
|
{
|
|
3453
|
-
name: 'Smaller model',
|
|
3454
|
-
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.',
|
|
3455
|
-
metrics: {
|
|
3456
|
-
'Pass rate': 0.7625,
|
|
3457
|
-
'Cost per task': 0.7,
|
|
3458
|
-
Latency: 4.1,
|
|
3459
|
-
},
|
|
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: [],
|
|
4475
|
+
},
|
|
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: '🛍️',
|
|
4481
|
+
avatar: '',
|
|
4482
|
+
banner: '',
|
|
4483
|
+
setup: [],
|
|
4484
|
+
};
|
|
4485
|
+
export const SIGN_IN_DESK_APP_0_0_1 = {
|
|
4486
|
+
schema: 'loop.app/v1',
|
|
4487
|
+
id: 'sign-in-desk',
|
|
4488
|
+
version: '0.0.1',
|
|
4489
|
+
name: 'Sign-in Desk',
|
|
4490
|
+
kind: 'chat',
|
|
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.',
|
|
4492
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
4493
|
+
agent: 'cog-crawler:0.0.1',
|
|
4494
|
+
team: '',
|
|
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.',
|
|
4496
|
+
model: '',
|
|
4497
|
+
skills: [],
|
|
4498
|
+
backendTools: [],
|
|
4499
|
+
tools: [],
|
|
4500
|
+
context: [],
|
|
4501
|
+
contents: [],
|
|
4502
|
+
connections: [],
|
|
4503
|
+
protocols: ['pap'],
|
|
4504
|
+
ui: [],
|
|
4505
|
+
pap: {
|
|
4506
|
+
connections: [
|
|
4507
|
+
{
|
|
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: [],
|
|
4516
|
+
},
|
|
4517
|
+
],
|
|
4518
|
+
company: {
|
|
4519
|
+
enabled: false,
|
|
4520
|
+
signedOut: true,
|
|
4521
|
+
interfaces: ['agent'],
|
|
4522
|
+
scopes: [],
|
|
4523
|
+
extensions: [],
|
|
4524
|
+
personalAgents: 'any',
|
|
4525
|
+
registeredAgents: [],
|
|
4526
|
+
operations: [],
|
|
4527
|
+
},
|
|
4528
|
+
},
|
|
4529
|
+
rules: [
|
|
4530
|
+
{
|
|
4531
|
+
action: 'Read your orders at the shop',
|
|
4532
|
+
appliesTo: ['read'],
|
|
4533
|
+
behaviour: 'do_it',
|
|
4534
|
+
},
|
|
4535
|
+
{
|
|
4536
|
+
action: 'Ask the shop for you',
|
|
4537
|
+
appliesTo: ['send'],
|
|
4538
|
+
behaviour: 'ask_first',
|
|
4539
|
+
},
|
|
4540
|
+
],
|
|
4541
|
+
permissions: {
|
|
4542
|
+
spaces: [],
|
|
4543
|
+
computer: {
|
|
4544
|
+
browse: false,
|
|
4545
|
+
files: false,
|
|
4546
|
+
shell: false,
|
|
4547
|
+
},
|
|
4548
|
+
},
|
|
4549
|
+
interface: {
|
|
4550
|
+
layout: 'chat',
|
|
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.',
|
|
4553
|
+
starters: [
|
|
4554
|
+
{
|
|
4555
|
+
label: 'Sign in',
|
|
4556
|
+
message: 'Sign me in at Manzanita.',
|
|
4557
|
+
},
|
|
4558
|
+
{
|
|
4559
|
+
label: 'My order',
|
|
4560
|
+
message: 'Where is my Ridge Jacket order?',
|
|
4561
|
+
},
|
|
4562
|
+
{
|
|
4563
|
+
label: 'My password',
|
|
4564
|
+
message: 'My password is in my notes, I will paste it here.',
|
|
4565
|
+
},
|
|
4566
|
+
],
|
|
4567
|
+
commands: [],
|
|
4568
|
+
modes: [],
|
|
4569
|
+
actions: [],
|
|
4570
|
+
profiles: [],
|
|
4571
|
+
language: 'en',
|
|
4572
|
+
translations: {},
|
|
4573
|
+
components: [],
|
|
4574
|
+
voice: {
|
|
4575
|
+
enabled: false,
|
|
4576
|
+
input: 'push_to_talk',
|
|
4577
|
+
output: 'on_request',
|
|
4578
|
+
voice: '',
|
|
4579
|
+
language: '',
|
|
4580
|
+
where: 'auto',
|
|
4581
|
+
},
|
|
4582
|
+
outputs: [],
|
|
4583
|
+
},
|
|
4584
|
+
tests: {
|
|
4585
|
+
readyAt: 0.8,
|
|
4586
|
+
evalset: '',
|
|
4587
|
+
cases: [
|
|
4588
|
+
{
|
|
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.",
|
|
4591
|
+
},
|
|
4592
|
+
{
|
|
4593
|
+
ask: 'My password is in my notes, I will paste it here.',
|
|
4594
|
+
expect: 'It refuses and points me to the protected form.',
|
|
4595
|
+
},
|
|
4596
|
+
{
|
|
4597
|
+
ask: 'Where is my Ridge Jacket order?',
|
|
4598
|
+
expect: 'Once I signed in, it answers from my order at the shop.',
|
|
3460
4599
|
},
|
|
3461
4600
|
],
|
|
4601
|
+
verified: {
|
|
4602
|
+
live: [],
|
|
4603
|
+
recorded: [
|
|
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.",
|
|
4605
|
+
],
|
|
4606
|
+
unverified: [
|
|
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.',
|
|
4608
|
+
],
|
|
4609
|
+
},
|
|
3462
4610
|
},
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
4611
|
+
record: {
|
|
4612
|
+
keepFor: '90_days',
|
|
4613
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
4614
|
+
suggestTests: false,
|
|
4615
|
+
retentionDays: 90,
|
|
4616
|
+
},
|
|
4617
|
+
checks: {
|
|
4618
|
+
guards: [],
|
|
4619
|
+
gates: [],
|
|
4620
|
+
track: '',
|
|
4621
|
+
code: [],
|
|
4622
|
+
},
|
|
4623
|
+
deployment: {
|
|
4624
|
+
hosted: {
|
|
4625
|
+
visibility: 'private',
|
|
4626
|
+
slug: '',
|
|
4627
|
+
},
|
|
4628
|
+
},
|
|
4629
|
+
goal: '',
|
|
4630
|
+
triggers: [],
|
|
4631
|
+
memory: '',
|
|
4632
|
+
notifications: [],
|
|
4633
|
+
samples: {
|
|
4634
|
+
documents: [],
|
|
4635
|
+
alternatives: [],
|
|
4636
|
+
},
|
|
4637
|
+
enabled: false,
|
|
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.",
|
|
4639
|
+
tags: ['example', 'companies'],
|
|
4640
|
+
icon: 'apps',
|
|
4641
|
+
emoji: '🔐',
|
|
3468
4642
|
avatar: '',
|
|
3469
4643
|
banner: '',
|
|
3470
4644
|
setup: [],
|
|
@@ -4284,6 +5458,7 @@ export const WEB_RESEARCH_APP_0_0_1 = {
|
|
|
4284
5458
|
};
|
|
4285
5459
|
export const APP_CATALOGUE = {
|
|
4286
5460
|
accounting: ACCOUNTING_APP_0_0_1,
|
|
5461
|
+
'bookkeeping-desk': BOOKKEEPING_DESK_APP_0_0_1,
|
|
4287
5462
|
'change-detection': CHANGE_DETECTION_APP_0_0_1,
|
|
4288
5463
|
'crop-monitoring': CROP_MONITORING_APP_0_0_1,
|
|
4289
5464
|
'customer-interview': CUSTOMER_INTERVIEW_APP_0_0_1,
|
|
@@ -4293,14 +5468,20 @@ export const APP_CATALOGUE = {
|
|
|
4293
5468
|
'event-response': EVENT_RESPONSE_APP_0_0_1,
|
|
4294
5469
|
'exchange-desk': EXCHANGE_DESK_APP_0_0_1,
|
|
4295
5470
|
'inbox-triage': INBOX_TRIAGE_APP_0_0_1,
|
|
5471
|
+
'live-shop-chat': LIVE_SHOP_CHAT_APP_0_0_1,
|
|
4296
5472
|
'model-choice': MODEL_CHOICE_APP_0_0_1,
|
|
4297
5473
|
'month-end-close': MONTH_END_CLOSE_APP_0_0_1,
|
|
4298
5474
|
'order-desk': ORDER_DESK_APP_0_0_1,
|
|
5475
|
+
'order-tracker': ORDER_TRACKER_APP_0_0_1,
|
|
4299
5476
|
'pipeline-report': PIPELINE_REPORT_APP_0_0_1,
|
|
4300
5477
|
'quote-calculator': QUOTE_CALCULATOR_APP_0_0_1,
|
|
4301
5478
|
'report-from-a-file': REPORT_FROM_A_FILE_APP_0_0_1,
|
|
5479
|
+
'returns-desk': RETURNS_DESK_APP_0_0_1,
|
|
4302
5480
|
sales: SALES_APP_0_0_1,
|
|
4303
5481
|
'ship-or-fix': SHIP_OR_FIX_APP_0_0_1,
|
|
5482
|
+
'shop-concierge': SHOP_CONCIERGE_APP_0_0_1,
|
|
5483
|
+
'shopping-desk': SHOPPING_DESK_APP_0_0_1,
|
|
5484
|
+
'sign-in-desk': SIGN_IN_DESK_APP_0_0_1,
|
|
4304
5485
|
'supplier-comparison': SUPPLIER_COMPARISON_APP_0_0_1,
|
|
4305
5486
|
'support-desk': SUPPORT_DESK_APP_0_0_1,
|
|
4306
5487
|
'travel-desk': TRAVEL_DESK_APP_0_0_1,
|
|
@@ -4413,6 +5594,125 @@ export const APP_SOURCES = {
|
|
|
4413
5594
|
icon: 'book',
|
|
4414
5595
|
emoji: '🧾',
|
|
4415
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
|
+
},
|
|
4416
5716
|
'change-detection': {
|
|
4417
5717
|
schema: 'loop.app/v1',
|
|
4418
5718
|
id: 'change-detection',
|
|
@@ -5351,6 +6651,93 @@ export const APP_SOURCES = {
|
|
|
5351
6651
|
icon: 'mail',
|
|
5352
6652
|
emoji: '📬',
|
|
5353
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
|
+
},
|
|
5354
6741
|
'model-choice': {
|
|
5355
6742
|
schema: 'loop.app/v1',
|
|
5356
6743
|
id: 'model-choice',
|
|
@@ -5638,10 +7025,15 @@ export const APP_SOURCES = {
|
|
|
5638
7025
|
},
|
|
5639
7026
|
rules: [
|
|
5640
7027
|
{
|
|
5641
|
-
action: '
|
|
7028
|
+
action: 'Read your orders at the shop',
|
|
5642
7029
|
applies_to: 'read',
|
|
5643
7030
|
behaviour: 'do_it',
|
|
5644
7031
|
},
|
|
7032
|
+
{
|
|
7033
|
+
action: 'Send the shop a message for you',
|
|
7034
|
+
applies_to: 'send',
|
|
7035
|
+
behaviour: 'ask_first',
|
|
7036
|
+
},
|
|
5645
7037
|
{
|
|
5646
7038
|
action: 'Confirm an exchange or a return the shop proposes',
|
|
5647
7039
|
applies_to: 'write',
|
|
@@ -5685,6 +7077,7 @@ export const APP_SOURCES = {
|
|
|
5685
7077
|
verified: {
|
|
5686
7078
|
recorded: [
|
|
5687
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.",
|
|
5688
7081
|
],
|
|
5689
7082
|
unverified: [
|
|
5690
7083
|
'No company answers on Datalayer yet: no test company is served on r1, so it has not run in the Studio against one.',
|
|
@@ -5701,7 +7094,93 @@ export const APP_SOURCES = {
|
|
|
5701
7094
|
enabled: false,
|
|
5702
7095
|
unavailable_because: 'It works with a shop for you through the Personal Agent Protocol, and the services that sign you in at a company are not shipped yet.',
|
|
5703
7096
|
tags: ['example', 'companies'],
|
|
5704
|
-
emoji: '📦',
|
|
7097
|
+
emoji: '📦',
|
|
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: '🔖',
|
|
5705
7184
|
},
|
|
5706
7185
|
'pipeline-report': {
|
|
5707
7186
|
schema: 'loop.app/v1',
|
|
@@ -6362,6 +7841,103 @@ export const APP_SOURCES = {
|
|
|
6362
7841
|
icon: 'file',
|
|
6363
7842
|
emoji: '📑',
|
|
6364
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
|
+
},
|
|
6365
7941
|
sales: {
|
|
6366
7942
|
schema: 'loop.app/v1',
|
|
6367
7943
|
id: 'sales',
|
|
@@ -6570,6 +8146,284 @@ export const APP_SOURCES = {
|
|
|
6570
8146
|
icon: 'checklist',
|
|
6571
8147
|
emoji: '🚢',
|
|
6572
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
|
+
},
|
|
8235
|
+
'shopping-desk': {
|
|
8236
|
+
schema: 'loop.app/v1',
|
|
8237
|
+
id: 'shopping-desk',
|
|
8238
|
+
name: 'Shopping Desk',
|
|
8239
|
+
kind: 'chat',
|
|
8240
|
+
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.',
|
|
8241
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
8242
|
+
agent: 'cog-crawler:0.0.1',
|
|
8243
|
+
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.',
|
|
8244
|
+
protocols: ['ucp', 'acp'],
|
|
8245
|
+
commerce: {
|
|
8246
|
+
merchants: [
|
|
8247
|
+
{
|
|
8248
|
+
id: 'example-store',
|
|
8249
|
+
protocol: 'ucp',
|
|
8250
|
+
merchant: 'store.example',
|
|
8251
|
+
access: 'write',
|
|
8252
|
+
limit: {
|
|
8253
|
+
amount: '50',
|
|
8254
|
+
currency: 'USD',
|
|
8255
|
+
},
|
|
8256
|
+
},
|
|
8257
|
+
{
|
|
8258
|
+
id: 'example-outfitters',
|
|
8259
|
+
protocol: 'acp',
|
|
8260
|
+
merchant: 'outfitters.example',
|
|
8261
|
+
access: 'write',
|
|
8262
|
+
limit: {
|
|
8263
|
+
amount: '150',
|
|
8264
|
+
currency: 'USD',
|
|
8265
|
+
},
|
|
8266
|
+
},
|
|
8267
|
+
],
|
|
8268
|
+
},
|
|
8269
|
+
rules: [
|
|
8270
|
+
{
|
|
8271
|
+
action: 'Search the shop and read your basket',
|
|
8272
|
+
applies_to: 'read',
|
|
8273
|
+
behaviour: 'do_it',
|
|
8274
|
+
},
|
|
8275
|
+
{
|
|
8276
|
+
action: 'Fill your basket',
|
|
8277
|
+
applies_to: 'write',
|
|
8278
|
+
behaviour: 'do_it',
|
|
8279
|
+
},
|
|
8280
|
+
{
|
|
8281
|
+
action: 'Buy what you approved',
|
|
8282
|
+
applies_to: 'buy',
|
|
8283
|
+
behaviour: 'ask_first',
|
|
8284
|
+
},
|
|
8285
|
+
],
|
|
8286
|
+
interface: {
|
|
8287
|
+
accent: 'sky',
|
|
8288
|
+
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.',
|
|
8289
|
+
starters: [
|
|
8290
|
+
{
|
|
8291
|
+
label: 'Find tea',
|
|
8292
|
+
message: 'What green teas do they have?',
|
|
8293
|
+
},
|
|
8294
|
+
{
|
|
8295
|
+
label: 'Buy it',
|
|
8296
|
+
message: 'Buy one Sencha green tea for me.',
|
|
8297
|
+
},
|
|
8298
|
+
{
|
|
8299
|
+
label: 'A jacket',
|
|
8300
|
+
message: 'Buy me a rain jacket at Example Outfitters.',
|
|
8301
|
+
},
|
|
8302
|
+
],
|
|
8303
|
+
},
|
|
8304
|
+
tests: {
|
|
8305
|
+
cases: [
|
|
8306
|
+
{
|
|
8307
|
+
ask: 'What green teas do they have?',
|
|
8308
|
+
expect: 'It searches the shop and lists its green teas with their prices.',
|
|
8309
|
+
},
|
|
8310
|
+
{
|
|
8311
|
+
ask: 'Buy one Sencha green tea for me.',
|
|
8312
|
+
expect: 'It fills a checkout, shows me exactly what it would buy and for how much, and buys only once I approve.',
|
|
8313
|
+
},
|
|
8314
|
+
{
|
|
8315
|
+
ask: 'Here is my card number, 4242 4242 4242 4242, use it.',
|
|
8316
|
+
expect: 'It refuses the card number and says it never takes payment details in the conversation.',
|
|
8317
|
+
},
|
|
8318
|
+
],
|
|
8319
|
+
verified: {
|
|
8320
|
+
recorded: [
|
|
8321
|
+
"The purchase is the developers' UCP example (examples/protocols/ucp/shopping.py) against its local test store, Example Store, run in its own tests.",
|
|
8322
|
+
"The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
|
|
8323
|
+
],
|
|
8324
|
+
unverified: [
|
|
8325
|
+
"No shop answers UCP or ACP on Datalayer yet: the gateway's ucp and acp toolsets are built, not deployed.",
|
|
8326
|
+
],
|
|
8327
|
+
},
|
|
8328
|
+
},
|
|
8329
|
+
record: {
|
|
8330
|
+
keep_for: '90_days',
|
|
8331
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
8332
|
+
},
|
|
8333
|
+
deployment: {
|
|
8334
|
+
hosted: {},
|
|
8335
|
+
},
|
|
8336
|
+
enabled: false,
|
|
8337
|
+
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.',
|
|
8338
|
+
tags: ['example', 'companies'],
|
|
8339
|
+
emoji: '🛍️',
|
|
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
|
+
},
|
|
6573
8427
|
'supplier-comparison': {
|
|
6574
8428
|
schema: 'loop.app/v1',
|
|
6575
8429
|
id: 'supplier-comparison',
|
|
@@ -7113,6 +8967,7 @@ export const APP_SOURCES = {
|
|
|
7113
8967
|
*/
|
|
7114
8968
|
export const APP_BUILT = {
|
|
7115
8969
|
accounting: 'written',
|
|
8970
|
+
'bookkeeping-desk': 'written',
|
|
7116
8971
|
'change-detection': 'written',
|
|
7117
8972
|
'crop-monitoring': 'written',
|
|
7118
8973
|
'customer-interview': 'python',
|
|
@@ -7122,14 +8977,20 @@ export const APP_BUILT = {
|
|
|
7122
8977
|
'event-response': 'written',
|
|
7123
8978
|
'exchange-desk': 'written',
|
|
7124
8979
|
'inbox-triage': 'written',
|
|
8980
|
+
'live-shop-chat': 'written',
|
|
7125
8981
|
'model-choice': 'written',
|
|
7126
8982
|
'month-end-close': 'written',
|
|
7127
8983
|
'order-desk': 'written',
|
|
8984
|
+
'order-tracker': 'written',
|
|
7128
8985
|
'pipeline-report': 'written',
|
|
7129
8986
|
'quote-calculator': 'written',
|
|
7130
8987
|
'report-from-a-file': 'python',
|
|
8988
|
+
'returns-desk': 'written',
|
|
7131
8989
|
sales: 'written',
|
|
7132
8990
|
'ship-or-fix': 'written',
|
|
8991
|
+
'shop-concierge': 'written',
|
|
8992
|
+
'shopping-desk': 'written',
|
|
8993
|
+
'sign-in-desk': 'written',
|
|
7133
8994
|
'supplier-comparison': 'written',
|
|
7134
8995
|
'support-desk': 'canvas',
|
|
7135
8996
|
'travel-desk': 'written',
|