@datalayer/agent-runtimes 1.5.9 → 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',
@@ -4653,6 +4933,142 @@ export const SIGN_IN_DESK_APP_0_0_1 = {
4653
4933
  banner: '',
4654
4934
  setup: [],
4655
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
+ };
4656
5072
  export const SUPPLIER_COMPARISON_APP_0_0_1 = {
4657
5073
  schema: 'loop.app/v1',
4658
5074
  id: 'supplier-comparison',
@@ -5484,8 +5900,10 @@ export const APP_CATALOGUE = {
5484
5900
  'data-quality': DATA_QUALITY_APP_0_0_1,
5485
5901
  decide: DECIDE_APP_0_0_1,
5486
5902
  'disaster-assessment': DISASTER_ASSESSMENT_APP_0_0_1,
5903
+ 'errand-runner': ERRAND_RUNNER_APP_0_0_1,
5487
5904
  'event-response': EVENT_RESPONSE_APP_0_0_1,
5488
5905
  'exchange-desk': EXCHANGE_DESK_APP_0_0_1,
5906
+ 'guest-desk': GUEST_DESK_APP_0_0_1,
5489
5907
  'inbox-triage': INBOX_TRIAGE_APP_0_0_1,
5490
5908
  'live-shop-chat': LIVE_SHOP_CHAT_APP_0_0_1,
5491
5909
  'model-choice': MODEL_CHOICE_APP_0_0_1,
@@ -5501,6 +5919,7 @@ export const APP_CATALOGUE = {
5501
5919
  'shop-concierge': SHOP_CONCIERGE_APP_0_0_1,
5502
5920
  'shopping-desk': SHOPPING_DESK_APP_0_0_1,
5503
5921
  'sign-in-desk': SIGN_IN_DESK_APP_0_0_1,
5922
+ 'signed-reader': SIGNED_READER_APP_0_0_1,
5504
5923
  'supplier-comparison': SUPPLIER_COMPARISON_APP_0_0_1,
5505
5924
  'support-desk': SUPPORT_DESK_APP_0_0_1,
5506
5925
  'travel-desk': TRAVEL_DESK_APP_0_0_1,
@@ -6374,6 +6793,82 @@ export const APP_SOURCES = {
6374
6793
  icon: 'pulse',
6375
6794
  emoji: '🌊',
6376
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
+ },
6377
6872
  'event-response': {
6378
6873
  schema: 'loop.app/v1',
6379
6874
  id: 'event-response',
@@ -6535,6 +7030,84 @@ export const APP_SOURCES = {
6535
7030
  tags: ['example', 'companies'],
6536
7031
  emoji: '🏪',
6537
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
+ },
6538
7111
  'inbox-triage': {
6539
7112
  schema: 'loop.app/v1',
6540
7113
  id: 'inbox-triage',
@@ -8452,6 +9025,81 @@ export const APP_SOURCES = {
8452
9025
  tags: ['example', 'companies'],
8453
9026
  emoji: '🔐',
8454
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
+ },
8455
9103
  'supplier-comparison': {
8456
9104
  schema: 'loop.app/v1',
8457
9105
  id: 'supplier-comparison',
@@ -9004,8 +9652,10 @@ export const APP_BUILT = {
9004
9652
  'data-quality': 'written',
9005
9653
  decide: 'written',
9006
9654
  'disaster-assessment': 'written',
9655
+ 'errand-runner': 'written',
9007
9656
  'event-response': 'written',
9008
9657
  'exchange-desk': 'written',
9658
+ 'guest-desk': 'written',
9009
9659
  'inbox-triage': 'written',
9010
9660
  'live-shop-chat': 'written',
9011
9661
  'model-choice': 'written',
@@ -9021,6 +9671,7 @@ export const APP_BUILT = {
9021
9671
  'shop-concierge': 'written',
9022
9672
  'shopping-desk': 'written',
9023
9673
  'sign-in-desk': 'written',
9674
+ 'signed-reader': 'written',
9024
9675
  'supplier-comparison': 'written',
9025
9676
  'support-desk': 'canvas',
9026
9677
  'travel-desk': 'written',