@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/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
- 'It has not run in the Studio against the hosted Example Store and Example Outfitters (store.examples.datalayer.run, outfitters.examples.datalayer.run) from this example yet.',
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: false,
4484
- 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.',
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
- 'It has not run in the Studio against the hosted Example Air (air.examples.datalayer.run) from this example yet; the hosted Example Air keeps registrations in memory, so an application is registered there again after each restart.',
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: false,
5320
- unavailable_because: 'It asks an airline for you over PACT, and the services that reach a business for you are not shipped yet.',
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
- 'It has not run in the Studio against the hosted Example Store and Example Outfitters (store.examples.datalayer.run, outfitters.examples.datalayer.run) from this example yet.',
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
- 'It has not run in the Studio against the hosted Example Air (air.examples.datalayer.run) from this example yet; the hosted Example Air keeps registrations in memory, so an application is registered there again after each restart.',
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',