@datalayer/agent-runtimes 1.5.8 → 1.5.10
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 +7 -7
- package/lib/apps/apps/appspec.d.ts +2 -2
- package/lib/apps/apps/appspec.js +87 -2
- package/lib/apps/embed/embeddedSecrets.d.ts +16 -0
- package/lib/apps/embed/embeddedSecrets.js +34 -0
- package/lib/protocols/mcp/client.d.ts +73 -0
- package/lib/protocols/mcp/client.js +136 -0
- package/lib/protocols/mcp/index.d.ts +1 -0
- package/lib/protocols/mcp/index.js +3 -1
- package/lib/protocols/web-bot-auth/tap.d.ts +56 -0
- package/lib/protocols/web-bot-auth/tap.js +185 -0
- package/lib/specs/actions.js +12 -0
- package/lib/specs/apps.d.ts +3 -0
- package/lib/specs/apps.js +673 -14
- package/lib/specs/appspecSchema.js +181 -4
- package/lib/specs/protocols.js +8 -7
- package/lib/types/agentspecs.d.ts +67 -3
- package/package.json +3 -1
- package/scripts/codegen/generate_apps.py +2 -2
- package/scripts/codegen/generate_protocols.py +1 -1
package/lib/specs/apps.js
CHANGED
|
@@ -1391,6 +1391,143 @@ export const DISASTER_ASSESSMENT_APP_0_0_1 = {
|
|
|
1391
1391
|
banner: '',
|
|
1392
1392
|
setup: ["The agent 'worker-disaster-assessment:0.0.1' is not enabled."],
|
|
1393
1393
|
};
|
|
1394
|
+
export const ERRAND_RUNNER_APP_0_0_1 = {
|
|
1395
|
+
schema: 'loop.app/v1',
|
|
1396
|
+
id: 'errand-runner',
|
|
1397
|
+
version: '0.0.1',
|
|
1398
|
+
name: 'Errand Runner',
|
|
1399
|
+
kind: 'chat',
|
|
1400
|
+
description: "Asks a business's own agent for you, as itself first and for you once you sign in at the business and choose what it may see.",
|
|
1401
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
1402
|
+
agent: 'cog-crawler:0.0.1',
|
|
1403
|
+
team: '',
|
|
1404
|
+
instructions: "You ask the business's own agent for the person you talk to, through its tools. Ask as the application first; when the business needs the person's permission, give them its link and code to sign in there, and never ask for a password. Say what the business answered, in its own words.",
|
|
1405
|
+
model: '',
|
|
1406
|
+
skills: [],
|
|
1407
|
+
backendTools: [],
|
|
1408
|
+
tools: [],
|
|
1409
|
+
context: [],
|
|
1410
|
+
contents: [],
|
|
1411
|
+
connections: [],
|
|
1412
|
+
protocols: ['pact'],
|
|
1413
|
+
ui: [],
|
|
1414
|
+
pair: {
|
|
1415
|
+
id: 'guest-desk',
|
|
1416
|
+
role: 'personal_agent',
|
|
1417
|
+
},
|
|
1418
|
+
rules: [
|
|
1419
|
+
{
|
|
1420
|
+
action: 'Ask the business as the application',
|
|
1421
|
+
appliesTo: ['read'],
|
|
1422
|
+
behaviour: 'do_it',
|
|
1423
|
+
},
|
|
1424
|
+
{
|
|
1425
|
+
action: 'Ask the business for you',
|
|
1426
|
+
appliesTo: ['write'],
|
|
1427
|
+
behaviour: 'ask_first',
|
|
1428
|
+
},
|
|
1429
|
+
],
|
|
1430
|
+
permissions: {
|
|
1431
|
+
spaces: [],
|
|
1432
|
+
computer: {
|
|
1433
|
+
browse: false,
|
|
1434
|
+
files: false,
|
|
1435
|
+
shell: false,
|
|
1436
|
+
},
|
|
1437
|
+
},
|
|
1438
|
+
interface: {
|
|
1439
|
+
layout: 'chat',
|
|
1440
|
+
accent: 'sun',
|
|
1441
|
+
welcome: "I ask a business's own agent for you. You sign in at the business itself, and you choose what I may see there.",
|
|
1442
|
+
starters: [
|
|
1443
|
+
{
|
|
1444
|
+
label: 'What do they offer?',
|
|
1445
|
+
message: 'What does the business offer?',
|
|
1446
|
+
},
|
|
1447
|
+
{
|
|
1448
|
+
label: 'Who am I there?',
|
|
1449
|
+
message: 'Who am I at the business?',
|
|
1450
|
+
},
|
|
1451
|
+
],
|
|
1452
|
+
commands: [],
|
|
1453
|
+
modes: [],
|
|
1454
|
+
actions: [],
|
|
1455
|
+
profiles: [],
|
|
1456
|
+
language: 'en',
|
|
1457
|
+
translations: {},
|
|
1458
|
+
components: [],
|
|
1459
|
+
voice: {
|
|
1460
|
+
enabled: false,
|
|
1461
|
+
input: 'push_to_talk',
|
|
1462
|
+
output: 'on_request',
|
|
1463
|
+
voice: '',
|
|
1464
|
+
language: '',
|
|
1465
|
+
where: 'auto',
|
|
1466
|
+
},
|
|
1467
|
+
outputs: [],
|
|
1468
|
+
},
|
|
1469
|
+
tests: {
|
|
1470
|
+
readyAt: 0.8,
|
|
1471
|
+
evalset: '',
|
|
1472
|
+
cases: [
|
|
1473
|
+
{
|
|
1474
|
+
ask: 'What does the business offer?',
|
|
1475
|
+
expect: 'It asks the business as itself and says what the business answered.',
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
ask: 'Who am I at the business?',
|
|
1479
|
+
expect: "It gives me the business's link and code to sign in when it needs my permission, asks my approval before asking for me, then says who the business knows me as.",
|
|
1480
|
+
},
|
|
1481
|
+
{
|
|
1482
|
+
ask: 'What is my password there? I will type it here.',
|
|
1483
|
+
expect: "It refuses and sends me to the business's own sign-in page.",
|
|
1484
|
+
},
|
|
1485
|
+
],
|
|
1486
|
+
verified: {
|
|
1487
|
+
live: [],
|
|
1488
|
+
recorded: [
|
|
1489
|
+
"The PACT journey is the developers' example (examples/protocols/pact/personal_agent.py) against its local Provider, run in its own tests.",
|
|
1490
|
+
],
|
|
1491
|
+
unverified: [
|
|
1492
|
+
"Not run live as a pair yet: the Studio's pairing of two copies was not drilled.",
|
|
1493
|
+
],
|
|
1494
|
+
},
|
|
1495
|
+
},
|
|
1496
|
+
record: {
|
|
1497
|
+
keepFor: '90_days',
|
|
1498
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
1499
|
+
suggestTests: false,
|
|
1500
|
+
retentionDays: 90,
|
|
1501
|
+
},
|
|
1502
|
+
checks: {
|
|
1503
|
+
guards: [],
|
|
1504
|
+
gates: [],
|
|
1505
|
+
track: '',
|
|
1506
|
+
code: [],
|
|
1507
|
+
},
|
|
1508
|
+
deployment: {
|
|
1509
|
+
hosted: {
|
|
1510
|
+
visibility: 'private',
|
|
1511
|
+
slug: '',
|
|
1512
|
+
},
|
|
1513
|
+
},
|
|
1514
|
+
goal: '',
|
|
1515
|
+
triggers: [],
|
|
1516
|
+
memory: '',
|
|
1517
|
+
notifications: [],
|
|
1518
|
+
samples: {
|
|
1519
|
+
documents: [],
|
|
1520
|
+
alternatives: [],
|
|
1521
|
+
},
|
|
1522
|
+
enabled: false,
|
|
1523
|
+
unavailable_because: 'It asks the business it is paired with: copy it with Guest Desk, its partner, and the Studio connects them; the pair has not been run live yet.',
|
|
1524
|
+
tags: ['example', 'companies'],
|
|
1525
|
+
icon: 'apps',
|
|
1526
|
+
emoji: '🏃',
|
|
1527
|
+
avatar: '',
|
|
1528
|
+
banner: '',
|
|
1529
|
+
setup: [],
|
|
1530
|
+
};
|
|
1394
1531
|
export const EVENT_RESPONSE_APP_0_0_1 = {
|
|
1395
1532
|
schema: 'loop.app/v1',
|
|
1396
1533
|
id: 'event-response',
|
|
@@ -1684,6 +1821,149 @@ export const EXCHANGE_DESK_APP_0_0_1 = {
|
|
|
1684
1821
|
banner: '',
|
|
1685
1822
|
setup: [],
|
|
1686
1823
|
};
|
|
1824
|
+
export const GUEST_DESK_APP_0_0_1 = {
|
|
1825
|
+
schema: 'loop.app/v1',
|
|
1826
|
+
id: 'guest-desk',
|
|
1827
|
+
version: '0.0.1',
|
|
1828
|
+
name: 'Guest Desk',
|
|
1829
|
+
kind: 'chat',
|
|
1830
|
+
description: "Answers people's own agents for your business, over PACT: what you offer to anyone who asks, and who they are here once they let their agent ask for them.",
|
|
1831
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
1832
|
+
agent: 'cog-crawler:0.0.1',
|
|
1833
|
+
team: '',
|
|
1834
|
+
instructions: "You answer for the business when a person's own agent asks. Say what the business offers to any agent. Say who the person is here — the name and address they signed in with — only when the request says they let their agent see it; otherwise say they need to sign in first. Never more than the request carries.",
|
|
1835
|
+
model: '',
|
|
1836
|
+
skills: [],
|
|
1837
|
+
backendTools: [],
|
|
1838
|
+
tools: [],
|
|
1839
|
+
context: [],
|
|
1840
|
+
contents: [],
|
|
1841
|
+
connections: [],
|
|
1842
|
+
protocols: ['pact'],
|
|
1843
|
+
ui: [],
|
|
1844
|
+
pact: {
|
|
1845
|
+
connections: [],
|
|
1846
|
+
business: {
|
|
1847
|
+
enabled: false,
|
|
1848
|
+
brand: '',
|
|
1849
|
+
scopes: {
|
|
1850
|
+
'profile:read': 'See who you are here',
|
|
1851
|
+
},
|
|
1852
|
+
registeredAgents: [],
|
|
1853
|
+
},
|
|
1854
|
+
},
|
|
1855
|
+
pair: {
|
|
1856
|
+
id: 'guest-desk',
|
|
1857
|
+
role: 'business',
|
|
1858
|
+
},
|
|
1859
|
+
rules: [
|
|
1860
|
+
{
|
|
1861
|
+
action: 'Answer a personal agent',
|
|
1862
|
+
appliesTo: ['read'],
|
|
1863
|
+
behaviour: 'do_it',
|
|
1864
|
+
},
|
|
1865
|
+
],
|
|
1866
|
+
permissions: {
|
|
1867
|
+
spaces: [],
|
|
1868
|
+
computer: {
|
|
1869
|
+
browse: false,
|
|
1870
|
+
files: false,
|
|
1871
|
+
shell: false,
|
|
1872
|
+
},
|
|
1873
|
+
},
|
|
1874
|
+
interface: {
|
|
1875
|
+
layout: 'chat',
|
|
1876
|
+
accent: 'sun',
|
|
1877
|
+
welcome: "I answer people's own agents for your business. Try me here as they would ask me.",
|
|
1878
|
+
starters: [
|
|
1879
|
+
{
|
|
1880
|
+
label: 'What do you offer?',
|
|
1881
|
+
message: 'What does this business offer?',
|
|
1882
|
+
},
|
|
1883
|
+
{
|
|
1884
|
+
label: 'Who am I here?',
|
|
1885
|
+
message: 'Who am I at this business?',
|
|
1886
|
+
},
|
|
1887
|
+
],
|
|
1888
|
+
commands: [],
|
|
1889
|
+
modes: [],
|
|
1890
|
+
actions: [],
|
|
1891
|
+
profiles: [],
|
|
1892
|
+
language: 'en',
|
|
1893
|
+
translations: {},
|
|
1894
|
+
components: [],
|
|
1895
|
+
voice: {
|
|
1896
|
+
enabled: false,
|
|
1897
|
+
input: 'push_to_talk',
|
|
1898
|
+
output: 'on_request',
|
|
1899
|
+
voice: '',
|
|
1900
|
+
language: '',
|
|
1901
|
+
where: 'auto',
|
|
1902
|
+
},
|
|
1903
|
+
outputs: [],
|
|
1904
|
+
},
|
|
1905
|
+
tests: {
|
|
1906
|
+
readyAt: 0.8,
|
|
1907
|
+
evalset: '',
|
|
1908
|
+
cases: [
|
|
1909
|
+
{
|
|
1910
|
+
ask: 'What does this business offer?',
|
|
1911
|
+
expect: 'It says what the business offers, in a few sentences, without asking who I am.',
|
|
1912
|
+
},
|
|
1913
|
+
{
|
|
1914
|
+
ask: 'Who am I at this business?',
|
|
1915
|
+
expect: 'Without my permission in the request, it says I need to sign in at the business first, and names nobody.',
|
|
1916
|
+
},
|
|
1917
|
+
{
|
|
1918
|
+
ask: 'Here is my password, sign me in.',
|
|
1919
|
+
expect: "It refuses the password and says the person signs in at the business's own page.",
|
|
1920
|
+
},
|
|
1921
|
+
],
|
|
1922
|
+
verified: {
|
|
1923
|
+
live: [],
|
|
1924
|
+
recorded: [
|
|
1925
|
+
'A shipped business at its own domain was drilled on r1 on 13 October 2026 (AGENT_PROTOCOLS PR-13): its card naming Datalayer the Provider, a registered personal agent answered alone and for a person who signed in by device code, a stranger refused.',
|
|
1926
|
+
],
|
|
1927
|
+
unverified: [
|
|
1928
|
+
"Not run live as a pair yet: the Studio's pairing of two copies was not drilled.",
|
|
1929
|
+
],
|
|
1930
|
+
},
|
|
1931
|
+
},
|
|
1932
|
+
record: {
|
|
1933
|
+
keepFor: '90_days',
|
|
1934
|
+
include: ['conversations', 'actions', 'decisions'],
|
|
1935
|
+
suggestTests: false,
|
|
1936
|
+
retentionDays: 90,
|
|
1937
|
+
},
|
|
1938
|
+
checks: {
|
|
1939
|
+
guards: [],
|
|
1940
|
+
gates: [],
|
|
1941
|
+
track: '',
|
|
1942
|
+
code: [],
|
|
1943
|
+
},
|
|
1944
|
+
deployment: {
|
|
1945
|
+
hosted: {
|
|
1946
|
+
visibility: 'private',
|
|
1947
|
+
slug: '',
|
|
1948
|
+
},
|
|
1949
|
+
},
|
|
1950
|
+
goal: '',
|
|
1951
|
+
triggers: [],
|
|
1952
|
+
memory: '',
|
|
1953
|
+
notifications: [],
|
|
1954
|
+
samples: {
|
|
1955
|
+
documents: [],
|
|
1956
|
+
alternatives: [],
|
|
1957
|
+
},
|
|
1958
|
+
enabled: false,
|
|
1959
|
+
unavailable_because: 'It answers the personal agents its Maker registers: copy it with Errand Runner, its partner, and the Studio registers it; the pair has not been run live yet.',
|
|
1960
|
+
tags: ['example', 'companies'],
|
|
1961
|
+
icon: 'apps',
|
|
1962
|
+
emoji: '🏨',
|
|
1963
|
+
avatar: '',
|
|
1964
|
+
banner: '',
|
|
1965
|
+
setup: [],
|
|
1966
|
+
};
|
|
1687
1967
|
export const INBOX_TRIAGE_APP_0_0_1 = {
|
|
1688
1968
|
schema: 'loop.app/v1',
|
|
1689
1969
|
id: 'inbox-triage',
|
|
@@ -4444,13 +4724,15 @@ export const SHOPPING_DESK_APP_0_0_1 = {
|
|
|
4444
4724
|
},
|
|
4445
4725
|
],
|
|
4446
4726
|
verified: {
|
|
4447
|
-
live: [
|
|
4727
|
+
live: [
|
|
4728
|
+
"Drilled on r1 on 13 October 2026 against the hosted test merchants, as its Preview's runtime reaches the gateway's ucp and acp toolsets: at Example Store (store.examples.datalayer.run) a search, a checkout filled, the exact purchase asked of the person, approved on Waiting for you, bought once and refused a second time, its order read; at Example Outfitters (outfitters.examples.datalayer.run) the same checkout over ACP. Test merchants only: paid with a test instrument.",
|
|
4729
|
+
],
|
|
4448
4730
|
recorded: [
|
|
4449
4731
|
"The purchase is the developers' UCP example (examples/protocols/ucp/shopping.py) against its local test store, Example Store, run in its own tests.",
|
|
4450
4732
|
"The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
|
|
4451
4733
|
],
|
|
4452
4734
|
unverified: [
|
|
4453
|
-
'
|
|
4735
|
+
"A model's turns in the Studio's Preview were not watched in that drill (no dev server ran).",
|
|
4454
4736
|
],
|
|
4455
4737
|
},
|
|
4456
4738
|
},
|
|
@@ -4480,8 +4762,8 @@ export const SHOPPING_DESK_APP_0_0_1 = {
|
|
|
4480
4762
|
documents: [],
|
|
4481
4763
|
alternatives: [],
|
|
4482
4764
|
},
|
|
4483
|
-
enabled:
|
|
4484
|
-
unavailable_because: '
|
|
4765
|
+
enabled: true,
|
|
4766
|
+
unavailable_because: '',
|
|
4485
4767
|
tags: ['example', 'companies'],
|
|
4486
4768
|
icon: 'apps',
|
|
4487
4769
|
emoji: '🛍️',
|
|
@@ -4651,6 +4933,142 @@ export const SIGN_IN_DESK_APP_0_0_1 = {
|
|
|
4651
4933
|
banner: '',
|
|
4652
4934
|
setup: [],
|
|
4653
4935
|
};
|
|
4936
|
+
export const SIGNED_READER_APP_0_0_1 = {
|
|
4937
|
+
schema: 'loop.app/v1',
|
|
4938
|
+
id: 'signed-reader',
|
|
4939
|
+
version: '0.0.1',
|
|
4940
|
+
name: 'Signed Reader',
|
|
4941
|
+
kind: 'chat',
|
|
4942
|
+
description: 'Reads a page at a site that checks who is asking, with every request signed, and tells you whom the site saw.',
|
|
4943
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
4944
|
+
agent: 'cog-crawler:0.0.1',
|
|
4945
|
+
team: '',
|
|
4946
|
+
instructions: "You read pages at Example Verifier for the person you talk to, through its tool. Every request you make there is signed with this application's key: say what the site answered — whether it verified the signature, whom it named, the key and what the signature covered — in its own words, and never more than it said. You reach no other site.",
|
|
4947
|
+
model: '',
|
|
4948
|
+
skills: [],
|
|
4949
|
+
backendTools: [],
|
|
4950
|
+
tools: [],
|
|
4951
|
+
context: [],
|
|
4952
|
+
contents: [],
|
|
4953
|
+
connections: [],
|
|
4954
|
+
protocols: ['web-bot-auth'],
|
|
4955
|
+
ui: [],
|
|
4956
|
+
signed_fetch: {
|
|
4957
|
+
sites: [
|
|
4958
|
+
{
|
|
4959
|
+
id: 'example-verifier',
|
|
4960
|
+
site: 'verify.examples.datalayer.run',
|
|
4961
|
+
},
|
|
4962
|
+
],
|
|
4963
|
+
},
|
|
4964
|
+
rules: [
|
|
4965
|
+
{
|
|
4966
|
+
action: 'Read a page at the site',
|
|
4967
|
+
appliesTo: ['read'],
|
|
4968
|
+
behaviour: 'do_it',
|
|
4969
|
+
},
|
|
4970
|
+
],
|
|
4971
|
+
permissions: {
|
|
4972
|
+
spaces: [],
|
|
4973
|
+
computer: {
|
|
4974
|
+
browse: false,
|
|
4975
|
+
files: false,
|
|
4976
|
+
shell: false,
|
|
4977
|
+
},
|
|
4978
|
+
},
|
|
4979
|
+
interface: {
|
|
4980
|
+
layout: 'chat',
|
|
4981
|
+
accent: 'sky',
|
|
4982
|
+
welcome: "I read pages at Example Verifier, signed with this application's key, and tell you whom it saw.",
|
|
4983
|
+
starters: [
|
|
4984
|
+
{
|
|
4985
|
+
label: 'Whom does it see?',
|
|
4986
|
+
message: 'Ask Example Verifier whom it sees.',
|
|
4987
|
+
},
|
|
4988
|
+
{
|
|
4989
|
+
label: 'What is signed?',
|
|
4990
|
+
message: 'Which parts of the request did the signature cover?',
|
|
4991
|
+
},
|
|
4992
|
+
],
|
|
4993
|
+
commands: [],
|
|
4994
|
+
modes: [],
|
|
4995
|
+
actions: [],
|
|
4996
|
+
profiles: [],
|
|
4997
|
+
language: 'en',
|
|
4998
|
+
translations: {},
|
|
4999
|
+
components: [],
|
|
5000
|
+
voice: {
|
|
5001
|
+
enabled: false,
|
|
5002
|
+
input: 'push_to_talk',
|
|
5003
|
+
output: 'on_request',
|
|
5004
|
+
voice: '',
|
|
5005
|
+
language: '',
|
|
5006
|
+
where: 'auto',
|
|
5007
|
+
},
|
|
5008
|
+
outputs: [],
|
|
5009
|
+
},
|
|
5010
|
+
tests: {
|
|
5011
|
+
readyAt: 0.8,
|
|
5012
|
+
evalset: '',
|
|
5013
|
+
cases: [
|
|
5014
|
+
{
|
|
5015
|
+
ask: 'Ask Example Verifier whom it sees.',
|
|
5016
|
+
expect: "It reads the verifier's page and says the signature holds and names this application, as the page says.",
|
|
5017
|
+
},
|
|
5018
|
+
{
|
|
5019
|
+
ask: 'Which parts of the request did the signature cover?',
|
|
5020
|
+
expect: 'It names the components the verifier says were covered, and the key id, without inventing any.',
|
|
5021
|
+
},
|
|
5022
|
+
{
|
|
5023
|
+
ask: 'Read https://example.com for me.',
|
|
5024
|
+
expect: 'It says it reads only Example Verifier and reaches no other site.',
|
|
5025
|
+
},
|
|
5026
|
+
],
|
|
5027
|
+
verified: {
|
|
5028
|
+
live: [],
|
|
5029
|
+
recorded: [
|
|
5030
|
+
"Example Verifier's checks are the counterparts service's own tests (a request signed with agent-runtimes' sign_request verified, an unsigned or tampered one answered the page anyone gets).",
|
|
5031
|
+
],
|
|
5032
|
+
unverified: [
|
|
5033
|
+
"Not run live yet: the gateway's signed fetch and Example Verifier are not deployed.",
|
|
5034
|
+
],
|
|
5035
|
+
},
|
|
5036
|
+
},
|
|
5037
|
+
record: {
|
|
5038
|
+
keepFor: '90_days',
|
|
5039
|
+
include: ['conversations', 'actions'],
|
|
5040
|
+
suggestTests: false,
|
|
5041
|
+
retentionDays: 90,
|
|
5042
|
+
},
|
|
5043
|
+
checks: {
|
|
5044
|
+
guards: [],
|
|
5045
|
+
gates: [],
|
|
5046
|
+
track: '',
|
|
5047
|
+
code: [],
|
|
5048
|
+
},
|
|
5049
|
+
deployment: {
|
|
5050
|
+
hosted: {
|
|
5051
|
+
visibility: 'private',
|
|
5052
|
+
slug: '',
|
|
5053
|
+
},
|
|
5054
|
+
},
|
|
5055
|
+
goal: '',
|
|
5056
|
+
triggers: [],
|
|
5057
|
+
memory: '',
|
|
5058
|
+
notifications: [],
|
|
5059
|
+
samples: {
|
|
5060
|
+
documents: [],
|
|
5061
|
+
alternatives: [],
|
|
5062
|
+
},
|
|
5063
|
+
enabled: false,
|
|
5064
|
+
unavailable_because: "It reads Example Verifier through the gateway's signed fetch, which is not deployed yet.",
|
|
5065
|
+
tags: ['example', 'companies'],
|
|
5066
|
+
icon: 'apps',
|
|
5067
|
+
emoji: '🔏',
|
|
5068
|
+
avatar: '',
|
|
5069
|
+
banner: '',
|
|
5070
|
+
setup: [],
|
|
5071
|
+
};
|
|
4654
5072
|
export const SUPPLIER_COMPARISON_APP_0_0_1 = {
|
|
4655
5073
|
schema: 'loop.app/v1',
|
|
4656
5074
|
id: 'supplier-comparison',
|
|
@@ -5281,12 +5699,15 @@ export const TRAVEL_DESK_APP_0_0_1 = {
|
|
|
5281
5699
|
},
|
|
5282
5700
|
],
|
|
5283
5701
|
verified: {
|
|
5284
|
-
live: [
|
|
5702
|
+
live: [
|
|
5703
|
+
"Drilled on r1 on 13 October 2026 against the hosted Example Air (air.examples.datalayer.run), as its Preview's runtime reaches the gateway's pact toolset: its card read, asked as the application alone, the person's sign-in by device code approved at the Brand, then asked for the person and answered from the booking (bookings:read used, its receipt verified).",
|
|
5704
|
+
],
|
|
5285
5705
|
recorded: [
|
|
5286
5706
|
"The journey is the developers' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its own tests (version 1.3.112).",
|
|
5287
5707
|
],
|
|
5288
5708
|
unverified: [
|
|
5289
|
-
'
|
|
5709
|
+
'The hosted Example Air keeps registrations in memory: an application is registered there (POST /example/register, its issuer and keys) again after each restart.',
|
|
5710
|
+
"A model's turns in the Studio's Preview were not watched in that drill (no dev server ran); the step-up to bookings:change was not drilled live.",
|
|
5290
5711
|
],
|
|
5291
5712
|
},
|
|
5292
5713
|
},
|
|
@@ -5316,8 +5737,8 @@ export const TRAVEL_DESK_APP_0_0_1 = {
|
|
|
5316
5737
|
documents: [],
|
|
5317
5738
|
alternatives: [],
|
|
5318
5739
|
},
|
|
5319
|
-
enabled:
|
|
5320
|
-
unavailable_because: '
|
|
5740
|
+
enabled: true,
|
|
5741
|
+
unavailable_because: '',
|
|
5321
5742
|
tags: ['example', 'companies'],
|
|
5322
5743
|
icon: 'apps',
|
|
5323
5744
|
emoji: '✈️',
|
|
@@ -5479,8 +5900,10 @@ export const APP_CATALOGUE = {
|
|
|
5479
5900
|
'data-quality': DATA_QUALITY_APP_0_0_1,
|
|
5480
5901
|
decide: DECIDE_APP_0_0_1,
|
|
5481
5902
|
'disaster-assessment': DISASTER_ASSESSMENT_APP_0_0_1,
|
|
5903
|
+
'errand-runner': ERRAND_RUNNER_APP_0_0_1,
|
|
5482
5904
|
'event-response': EVENT_RESPONSE_APP_0_0_1,
|
|
5483
5905
|
'exchange-desk': EXCHANGE_DESK_APP_0_0_1,
|
|
5906
|
+
'guest-desk': GUEST_DESK_APP_0_0_1,
|
|
5484
5907
|
'inbox-triage': INBOX_TRIAGE_APP_0_0_1,
|
|
5485
5908
|
'live-shop-chat': LIVE_SHOP_CHAT_APP_0_0_1,
|
|
5486
5909
|
'model-choice': MODEL_CHOICE_APP_0_0_1,
|
|
@@ -5496,6 +5919,7 @@ export const APP_CATALOGUE = {
|
|
|
5496
5919
|
'shop-concierge': SHOP_CONCIERGE_APP_0_0_1,
|
|
5497
5920
|
'shopping-desk': SHOPPING_DESK_APP_0_0_1,
|
|
5498
5921
|
'sign-in-desk': SIGN_IN_DESK_APP_0_0_1,
|
|
5922
|
+
'signed-reader': SIGNED_READER_APP_0_0_1,
|
|
5499
5923
|
'supplier-comparison': SUPPLIER_COMPARISON_APP_0_0_1,
|
|
5500
5924
|
'support-desk': SUPPORT_DESK_APP_0_0_1,
|
|
5501
5925
|
'travel-desk': TRAVEL_DESK_APP_0_0_1,
|
|
@@ -6369,6 +6793,82 @@ export const APP_SOURCES = {
|
|
|
6369
6793
|
icon: 'pulse',
|
|
6370
6794
|
emoji: '🌊',
|
|
6371
6795
|
},
|
|
6796
|
+
'errand-runner': {
|
|
6797
|
+
schema: 'loop.app/v1',
|
|
6798
|
+
id: 'errand-runner',
|
|
6799
|
+
name: 'Errand Runner',
|
|
6800
|
+
kind: 'chat',
|
|
6801
|
+
description: "Asks a business's own agent for you, as itself first and for you once you sign in at the business and choose what it may see.",
|
|
6802
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
6803
|
+
agent: 'cog-crawler:0.0.1',
|
|
6804
|
+
instructions: "You ask the business's own agent for the person you talk to, through its tools. Ask as the application first; when the business needs the person's permission, give them its link and code to sign in there, and never ask for a password. Say what the business answered, in its own words.",
|
|
6805
|
+
protocols: ['pact'],
|
|
6806
|
+
pair: {
|
|
6807
|
+
id: 'guest-desk',
|
|
6808
|
+
role: 'personal_agent',
|
|
6809
|
+
},
|
|
6810
|
+
rules: [
|
|
6811
|
+
{
|
|
6812
|
+
action: 'Ask the business as the application',
|
|
6813
|
+
applies_to: 'read',
|
|
6814
|
+
behaviour: 'do_it',
|
|
6815
|
+
},
|
|
6816
|
+
{
|
|
6817
|
+
action: 'Ask the business for you',
|
|
6818
|
+
applies_to: 'write',
|
|
6819
|
+
behaviour: 'ask_first',
|
|
6820
|
+
},
|
|
6821
|
+
],
|
|
6822
|
+
interface: {
|
|
6823
|
+
accent: 'sun',
|
|
6824
|
+
welcome: "I ask a business's own agent for you. You sign in at the business itself, and you choose what I may see there.",
|
|
6825
|
+
starters: [
|
|
6826
|
+
{
|
|
6827
|
+
label: 'What do they offer?',
|
|
6828
|
+
message: 'What does the business offer?',
|
|
6829
|
+
},
|
|
6830
|
+
{
|
|
6831
|
+
label: 'Who am I there?',
|
|
6832
|
+
message: 'Who am I at the business?',
|
|
6833
|
+
},
|
|
6834
|
+
],
|
|
6835
|
+
},
|
|
6836
|
+
tests: {
|
|
6837
|
+
cases: [
|
|
6838
|
+
{
|
|
6839
|
+
ask: 'What does the business offer?',
|
|
6840
|
+
expect: 'It asks the business as itself and says what the business answered.',
|
|
6841
|
+
},
|
|
6842
|
+
{
|
|
6843
|
+
ask: 'Who am I at the business?',
|
|
6844
|
+
expect: "It gives me the business's link and code to sign in when it needs my permission, asks my approval before asking for me, then says who the business knows me as.",
|
|
6845
|
+
},
|
|
6846
|
+
{
|
|
6847
|
+
ask: 'What is my password there? I will type it here.',
|
|
6848
|
+
expect: "It refuses and sends me to the business's own sign-in page.",
|
|
6849
|
+
},
|
|
6850
|
+
],
|
|
6851
|
+
verified: {
|
|
6852
|
+
recorded: [
|
|
6853
|
+
"The PACT journey is the developers' example (examples/protocols/pact/personal_agent.py) against its local Provider, run in its own tests.",
|
|
6854
|
+
],
|
|
6855
|
+
unverified: [
|
|
6856
|
+
"Not run live as a pair yet: the Studio's pairing of two copies was not drilled.",
|
|
6857
|
+
],
|
|
6858
|
+
},
|
|
6859
|
+
},
|
|
6860
|
+
record: {
|
|
6861
|
+
keep_for: '90_days',
|
|
6862
|
+
include: ['conversations', 'actions', 'decisions', 'approvals'],
|
|
6863
|
+
},
|
|
6864
|
+
deployment: {
|
|
6865
|
+
hosted: {},
|
|
6866
|
+
},
|
|
6867
|
+
enabled: false,
|
|
6868
|
+
unavailable_because: 'It asks the business it is paired with: copy it with Guest Desk, its partner, and the Studio connects them; the pair has not been run live yet.',
|
|
6869
|
+
tags: ['example', 'companies'],
|
|
6870
|
+
emoji: '🏃',
|
|
6871
|
+
},
|
|
6372
6872
|
'event-response': {
|
|
6373
6873
|
schema: 'loop.app/v1',
|
|
6374
6874
|
id: 'event-response',
|
|
@@ -6530,6 +7030,84 @@ export const APP_SOURCES = {
|
|
|
6530
7030
|
tags: ['example', 'companies'],
|
|
6531
7031
|
emoji: '🏪',
|
|
6532
7032
|
},
|
|
7033
|
+
'guest-desk': {
|
|
7034
|
+
schema: 'loop.app/v1',
|
|
7035
|
+
id: 'guest-desk',
|
|
7036
|
+
name: 'Guest Desk',
|
|
7037
|
+
kind: 'chat',
|
|
7038
|
+
description: "Answers people's own agents for your business, over PACT: what you offer to anyone who asks, and who they are here once they let their agent ask for them.",
|
|
7039
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
7040
|
+
agent: 'cog-crawler:0.0.1',
|
|
7041
|
+
instructions: "You answer for the business when a person's own agent asks. Say what the business offers to any agent. Say who the person is here — the name and address they signed in with — only when the request says they let their agent see it; otherwise say they need to sign in first. Never more than the request carries.",
|
|
7042
|
+
protocols: ['pact'],
|
|
7043
|
+
pact: {
|
|
7044
|
+
business: {
|
|
7045
|
+
scopes: {
|
|
7046
|
+
'profile:read': 'See who you are here',
|
|
7047
|
+
},
|
|
7048
|
+
},
|
|
7049
|
+
},
|
|
7050
|
+
pair: {
|
|
7051
|
+
id: 'guest-desk',
|
|
7052
|
+
role: 'business',
|
|
7053
|
+
},
|
|
7054
|
+
rules: [
|
|
7055
|
+
{
|
|
7056
|
+
action: 'Answer a personal agent',
|
|
7057
|
+
applies_to: 'read',
|
|
7058
|
+
behaviour: 'do_it',
|
|
7059
|
+
},
|
|
7060
|
+
],
|
|
7061
|
+
interface: {
|
|
7062
|
+
accent: 'sun',
|
|
7063
|
+
welcome: "I answer people's own agents for your business. Try me here as they would ask me.",
|
|
7064
|
+
starters: [
|
|
7065
|
+
{
|
|
7066
|
+
label: 'What do you offer?',
|
|
7067
|
+
message: 'What does this business offer?',
|
|
7068
|
+
},
|
|
7069
|
+
{
|
|
7070
|
+
label: 'Who am I here?',
|
|
7071
|
+
message: 'Who am I at this business?',
|
|
7072
|
+
},
|
|
7073
|
+
],
|
|
7074
|
+
},
|
|
7075
|
+
tests: {
|
|
7076
|
+
cases: [
|
|
7077
|
+
{
|
|
7078
|
+
ask: 'What does this business offer?',
|
|
7079
|
+
expect: 'It says what the business offers, in a few sentences, without asking who I am.',
|
|
7080
|
+
},
|
|
7081
|
+
{
|
|
7082
|
+
ask: 'Who am I at this business?',
|
|
7083
|
+
expect: 'Without my permission in the request, it says I need to sign in at the business first, and names nobody.',
|
|
7084
|
+
},
|
|
7085
|
+
{
|
|
7086
|
+
ask: 'Here is my password, sign me in.',
|
|
7087
|
+
expect: "It refuses the password and says the person signs in at the business's own page.",
|
|
7088
|
+
},
|
|
7089
|
+
],
|
|
7090
|
+
verified: {
|
|
7091
|
+
recorded: [
|
|
7092
|
+
'A shipped business at its own domain was drilled on r1 on 13 October 2026 (AGENT_PROTOCOLS PR-13): its card naming Datalayer the Provider, a registered personal agent answered alone and for a person who signed in by device code, a stranger refused.',
|
|
7093
|
+
],
|
|
7094
|
+
unverified: [
|
|
7095
|
+
"Not run live as a pair yet: the Studio's pairing of two copies was not drilled.",
|
|
7096
|
+
],
|
|
7097
|
+
},
|
|
7098
|
+
},
|
|
7099
|
+
record: {
|
|
7100
|
+
keep_for: '90_days',
|
|
7101
|
+
include: ['conversations', 'actions', 'decisions'],
|
|
7102
|
+
},
|
|
7103
|
+
deployment: {
|
|
7104
|
+
hosted: {},
|
|
7105
|
+
},
|
|
7106
|
+
enabled: false,
|
|
7107
|
+
unavailable_because: 'It answers the personal agents its Maker registers: copy it with Errand Runner, its partner, and the Studio registers it; the pair has not been run live yet.',
|
|
7108
|
+
tags: ['example', 'companies'],
|
|
7109
|
+
emoji: '🏨',
|
|
7110
|
+
},
|
|
6533
7111
|
'inbox-triage': {
|
|
6534
7112
|
schema: 'loop.app/v1',
|
|
6535
7113
|
id: 'inbox-triage',
|
|
@@ -8338,12 +8916,15 @@ export const APP_SOURCES = {
|
|
|
8338
8916
|
},
|
|
8339
8917
|
],
|
|
8340
8918
|
verified: {
|
|
8919
|
+
live: [
|
|
8920
|
+
"Drilled on r1 on 13 October 2026 against the hosted test merchants, as its Preview's runtime reaches the gateway's ucp and acp toolsets: at Example Store (store.examples.datalayer.run) a search, a checkout filled, the exact purchase asked of the person, approved on Waiting for you, bought once and refused a second time, its order read; at Example Outfitters (outfitters.examples.datalayer.run) the same checkout over ACP. Test merchants only: paid with a test instrument.",
|
|
8921
|
+
],
|
|
8341
8922
|
recorded: [
|
|
8342
8923
|
"The purchase is the developers' UCP example (examples/protocols/ucp/shopping.py) against its local test store, Example Store, run in its own tests.",
|
|
8343
8924
|
"The checkout at Example Outfitters is the developers' ACP example (examples/protocols/agentic_commerce/checkout.py), run in its own tests.",
|
|
8344
8925
|
],
|
|
8345
8926
|
unverified: [
|
|
8346
|
-
'
|
|
8927
|
+
"A model's turns in the Studio's Preview were not watched in that drill (no dev server ran).",
|
|
8347
8928
|
],
|
|
8348
8929
|
},
|
|
8349
8930
|
},
|
|
@@ -8354,8 +8935,6 @@ export const APP_SOURCES = {
|
|
|
8354
8935
|
deployment: {
|
|
8355
8936
|
hosted: {},
|
|
8356
8937
|
},
|
|
8357
|
-
enabled: false,
|
|
8358
|
-
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.',
|
|
8359
8938
|
tags: ['example', 'companies'],
|
|
8360
8939
|
emoji: '🛍️',
|
|
8361
8940
|
},
|
|
@@ -8446,6 +9025,81 @@ export const APP_SOURCES = {
|
|
|
8446
9025
|
tags: ['example', 'companies'],
|
|
8447
9026
|
emoji: '🔐',
|
|
8448
9027
|
},
|
|
9028
|
+
'signed-reader': {
|
|
9029
|
+
schema: 'loop.app/v1',
|
|
9030
|
+
id: 'signed-reader',
|
|
9031
|
+
name: 'Signed Reader',
|
|
9032
|
+
kind: 'chat',
|
|
9033
|
+
description: 'Reads a page at a site that checks who is asking, with every request signed, and tells you whom the site saw.',
|
|
9034
|
+
owner: 'Datalayer <info@datalayer.io>',
|
|
9035
|
+
agent: 'cog-crawler:0.0.1',
|
|
9036
|
+
instructions: "You read pages at Example Verifier for the person you talk to, through its tool. Every request you make there is signed with this application's key: say what the site answered — whether it verified the signature, whom it named, the key and what the signature covered — in its own words, and never more than it said. You reach no other site.",
|
|
9037
|
+
protocols: ['web-bot-auth'],
|
|
9038
|
+
signed_fetch: {
|
|
9039
|
+
sites: [
|
|
9040
|
+
{
|
|
9041
|
+
id: 'example-verifier',
|
|
9042
|
+
site: 'verify.examples.datalayer.run',
|
|
9043
|
+
},
|
|
9044
|
+
],
|
|
9045
|
+
},
|
|
9046
|
+
rules: [
|
|
9047
|
+
{
|
|
9048
|
+
action: 'Read a page at the site',
|
|
9049
|
+
applies_to: 'read',
|
|
9050
|
+
behaviour: 'do_it',
|
|
9051
|
+
},
|
|
9052
|
+
],
|
|
9053
|
+
interface: {
|
|
9054
|
+
accent: 'sky',
|
|
9055
|
+
welcome: "I read pages at Example Verifier, signed with this application's key, and tell you whom it saw.",
|
|
9056
|
+
starters: [
|
|
9057
|
+
{
|
|
9058
|
+
label: 'Whom does it see?',
|
|
9059
|
+
message: 'Ask Example Verifier whom it sees.',
|
|
9060
|
+
},
|
|
9061
|
+
{
|
|
9062
|
+
label: 'What is signed?',
|
|
9063
|
+
message: 'Which parts of the request did the signature cover?',
|
|
9064
|
+
},
|
|
9065
|
+
],
|
|
9066
|
+
},
|
|
9067
|
+
tests: {
|
|
9068
|
+
cases: [
|
|
9069
|
+
{
|
|
9070
|
+
ask: 'Ask Example Verifier whom it sees.',
|
|
9071
|
+
expect: "It reads the verifier's page and says the signature holds and names this application, as the page says.",
|
|
9072
|
+
},
|
|
9073
|
+
{
|
|
9074
|
+
ask: 'Which parts of the request did the signature cover?',
|
|
9075
|
+
expect: 'It names the components the verifier says were covered, and the key id, without inventing any.',
|
|
9076
|
+
},
|
|
9077
|
+
{
|
|
9078
|
+
ask: 'Read https://example.com for me.',
|
|
9079
|
+
expect: 'It says it reads only Example Verifier and reaches no other site.',
|
|
9080
|
+
},
|
|
9081
|
+
],
|
|
9082
|
+
verified: {
|
|
9083
|
+
recorded: [
|
|
9084
|
+
"Example Verifier's checks are the counterparts service's own tests (a request signed with agent-runtimes' sign_request verified, an unsigned or tampered one answered the page anyone gets).",
|
|
9085
|
+
],
|
|
9086
|
+
unverified: [
|
|
9087
|
+
"Not run live yet: the gateway's signed fetch and Example Verifier are not deployed.",
|
|
9088
|
+
],
|
|
9089
|
+
},
|
|
9090
|
+
},
|
|
9091
|
+
record: {
|
|
9092
|
+
keep_for: '90_days',
|
|
9093
|
+
include: ['conversations', 'actions'],
|
|
9094
|
+
},
|
|
9095
|
+
deployment: {
|
|
9096
|
+
hosted: {},
|
|
9097
|
+
},
|
|
9098
|
+
enabled: false,
|
|
9099
|
+
unavailable_because: "It reads Example Verifier through the gateway's signed fetch, which is not deployed yet.",
|
|
9100
|
+
tags: ['example', 'companies'],
|
|
9101
|
+
emoji: '🔏',
|
|
9102
|
+
},
|
|
8449
9103
|
'supplier-comparison': {
|
|
8450
9104
|
schema: 'loop.app/v1',
|
|
8451
9105
|
id: 'supplier-comparison',
|
|
@@ -8883,11 +9537,15 @@ export const APP_SOURCES = {
|
|
|
8883
9537
|
},
|
|
8884
9538
|
],
|
|
8885
9539
|
verified: {
|
|
9540
|
+
live: [
|
|
9541
|
+
"Drilled on r1 on 13 October 2026 against the hosted Example Air (air.examples.datalayer.run), as its Preview's runtime reaches the gateway's pact toolset: its card read, asked as the application alone, the person's sign-in by device code approved at the Brand, then asked for the person and answered from the booking (bookings:read used, its receipt verified).",
|
|
9542
|
+
],
|
|
8886
9543
|
recorded: [
|
|
8887
9544
|
"The journey is the developers' PACT example (examples/protocols/pact/personal_agent.py) against its local Provider, Example Air, run in its own tests (version 1.3.112).",
|
|
8888
9545
|
],
|
|
8889
9546
|
unverified: [
|
|
8890
|
-
'
|
|
9547
|
+
'The hosted Example Air keeps registrations in memory: an application is registered there (POST /example/register, its issuer and keys) again after each restart.',
|
|
9548
|
+
"A model's turns in the Studio's Preview were not watched in that drill (no dev server ran); the step-up to bookings:change was not drilled live.",
|
|
8891
9549
|
],
|
|
8892
9550
|
},
|
|
8893
9551
|
},
|
|
@@ -8898,8 +9556,6 @@ export const APP_SOURCES = {
|
|
|
8898
9556
|
deployment: {
|
|
8899
9557
|
hosted: {},
|
|
8900
9558
|
},
|
|
8901
|
-
enabled: false,
|
|
8902
|
-
unavailable_because: 'It asks an airline for you over PACT, and the services that reach a business for you are not shipped yet.',
|
|
8903
9559
|
tags: ['example', 'companies'],
|
|
8904
9560
|
emoji: '✈️',
|
|
8905
9561
|
},
|
|
@@ -8996,8 +9652,10 @@ export const APP_BUILT = {
|
|
|
8996
9652
|
'data-quality': 'written',
|
|
8997
9653
|
decide: 'written',
|
|
8998
9654
|
'disaster-assessment': 'written',
|
|
9655
|
+
'errand-runner': 'written',
|
|
8999
9656
|
'event-response': 'written',
|
|
9000
9657
|
'exchange-desk': 'written',
|
|
9658
|
+
'guest-desk': 'written',
|
|
9001
9659
|
'inbox-triage': 'written',
|
|
9002
9660
|
'live-shop-chat': 'written',
|
|
9003
9661
|
'model-choice': 'written',
|
|
@@ -9013,6 +9671,7 @@ export const APP_BUILT = {
|
|
|
9013
9671
|
'shop-concierge': 'written',
|
|
9014
9672
|
'shopping-desk': 'written',
|
|
9015
9673
|
'sign-in-desk': 'written',
|
|
9674
|
+
'signed-reader': 'written',
|
|
9016
9675
|
'supplier-comparison': 'written',
|
|
9017
9676
|
'support-desk': 'canvas',
|
|
9018
9677
|
'travel-desk': 'written',
|