@datalayer/agent-runtimes 1.3.80 → 1.3.82
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/chat/assistant/AssistantStage.d.ts +9 -4
- package/lib/chat/assistant/AssistantStage.js +18 -6
- package/lib/chat/assistant/SpeechBalloon.js +16 -1
- package/lib/chat/assistant/SpriteCharacter.d.ts +25 -3
- package/lib/chat/assistant/SpriteCharacter.js +68 -3
- package/lib/chat/assistant/formats/acf.d.ts +56 -0
- package/lib/chat/assistant/formats/acf.js +317 -0
- package/lib/chat/assistant/formats/acs.d.ts +85 -7
- package/lib/chat/assistant/formats/acs.js +111 -39
- package/lib/chat/assistant/formats/files.d.ts +6 -2
- package/lib/chat/assistant/formats/files.js +18 -4
- package/lib/chat/assistant/formats/index.d.ts +6 -3
- package/lib/chat/assistant/formats/index.js +4 -2
- package/lib/chat/assistant/formats/types.d.ts +14 -0
- package/lib/chat/assistant/state.d.ts +2 -0
- package/lib/chat/assistant/state.js +9 -0
- package/lib/chat/base/ChatBase.js +47 -4
- package/lib/chat/base/loopStep.d.ts +40 -0
- package/lib/chat/base/loopStep.js +73 -0
- package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/McpStatusIndicator.js +13 -6
- package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SkillsStatusIndicator.js +7 -3
- package/lib/chat/prompt/InputPrompt.d.ts +4 -1
- package/lib/chat/prompt/InputPrompt.js +2 -2
- package/lib/chat/prompt/InputPromptBase.d.ts +4 -1
- package/lib/chat/prompt/InputPromptBase.js +2 -2
- package/lib/chat/prompt/InputPromptLexical.d.ts +7 -1
- package/lib/chat/prompt/InputPromptLexical.js +5 -3
- package/lib/components/teams/index.d.ts +1 -0
- package/lib/components/teams/index.js +1 -0
- package/lib/components/teams/usePeerSandbox.d.ts +13 -0
- package/lib/components/teams/usePeerSandbox.js +59 -0
- package/lib/examples/AgentA2ATeamExample.js +7 -2
- package/lib/loop/apps/AppComposer.d.ts +31 -0
- package/lib/loop/apps/AppComposer.js +67 -0
- package/lib/loop/apps/AppRenderer.d.ts +16 -5
- package/lib/loop/apps/AppRenderer.js +49 -16
- package/lib/loop/apps/appspec.d.ts +8 -1
- package/lib/loop/apps/appspec.js +119 -2
- package/lib/loop/apps/checks.js +161 -1
- package/lib/loop/apps/composer.d.ts +37 -0
- package/lib/loop/apps/composer.js +61 -0
- package/lib/loop/apps/hostTools.d.ts +17 -0
- package/lib/loop/apps/hostTools.js +20 -0
- package/lib/loop/apps/index.d.ts +2 -0
- package/lib/loop/apps/index.js +2 -0
- package/lib/loop/apps/rules.d.ts +22 -1
- package/lib/loop/apps/rules.js +49 -1
- package/lib/loop/core/index.d.ts +31 -0
- package/lib/loop/core/index.js +22 -0
- package/lib/loop/embed/AppEmbed.d.ts +100 -6
- package/lib/loop/embed/AppEmbed.js +172 -27
- package/lib/loop/embed/LoopEmbed.js +2 -0
- package/lib/loop/embed/element.js +58 -5
- package/lib/loop/embed/embedConfig.d.ts +10 -1
- package/lib/loop/embed/embedConfig.js +12 -1
- package/lib/loop/embed/embedSession.d.ts +79 -0
- package/lib/loop/embed/embedSession.js +136 -0
- package/lib/loop/embed/embedTheme.d.ts +12 -9
- package/lib/loop/embed/embedTheme.js +32 -22
- package/lib/loop/embed/hostBridge.d.ts +79 -0
- package/lib/loop/embed/hostBridge.js +104 -0
- package/lib/loop/index.d.ts +5 -3
- package/lib/loop/index.js +6 -3
- package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.d.ts +5 -2
- package/lib/loop/plugins/a2ui-surface/SurfaceToolResult.js +7 -1
- package/lib/loop/plugins/a2ui-surface/index.d.ts +1 -1
- package/lib/loop/plugins/a2ui-surface/index.js +4 -4
- package/lib/loop/plugins/a2ui-surface/toolResult.d.ts +27 -0
- package/lib/loop/plugins/a2ui-surface/toolResult.js +22 -0
- package/lib/loop/plugins/agent-capacity/index.d.ts +3 -1
- package/lib/loop/plugins/agent-capacity/index.js +2 -1
- package/lib/loop/plugins/chat/ChatView.js +31 -4
- package/lib/loop/plugins/chat/index.d.ts +6 -1
- package/lib/loop/presets.d.ts +3 -1
- package/lib/loop/presets.js +2 -1
- package/lib/loop/shell/LoopWorkspace.js +3 -0
- package/lib/protocols/BrowserAgentAdapter.d.ts +18 -0
- package/lib/protocols/BrowserAgentAdapter.js +35 -2
- package/lib/runtimes/__tests__/fixtures/accounting-agent-card.json +8 -0
- package/lib/runtimes/browser/a2aPeer.d.ts +11 -0
- package/lib/runtimes/browser/a2aPeer.js +15 -1
- package/lib/runtimes/browser/protocol.d.ts +3 -0
- package/lib/runtimes/browser/protocol.js +2 -1
- package/lib/specs/agents/agents.js +6 -25
- package/lib/specs/apps.js +50 -8
- package/lib/specs/appspecSchema.js +258 -0
- package/lib/types/agentspecs.d.ts +86 -0
- package/lib/types/chat.d.ts +29 -1
- package/package.json +1 -1
- package/scripts/codegen/generate_agents.py +4 -2
- package/scripts/codegen/generate_apps.py +7 -0
- package/scripts/codegen/generate_backend_tools.py +4 -12
- package/scripts/codegen/generate_cogs.py +3 -1
- package/scripts/codegen/generate_ui_plugins.py +22 -9
- package/scripts/voice/transcribe.mjs +29 -21
package/lib/specs/apps.js
CHANGED
|
@@ -64,6 +64,8 @@ export const ACCOUNTING_APP_0_0_1 = {
|
|
|
64
64
|
message: 'Give the trial balance for last month.',
|
|
65
65
|
},
|
|
66
66
|
],
|
|
67
|
+
commands: [],
|
|
68
|
+
modes: [],
|
|
67
69
|
settings: [],
|
|
68
70
|
components: [],
|
|
69
71
|
assistant: 'wizard',
|
|
@@ -186,6 +188,8 @@ export const CUSTOMER_INTERVIEW_APP_0_0_1 = {
|
|
|
186
188
|
message: 'Interview me about my first week with the product.',
|
|
187
189
|
},
|
|
188
190
|
],
|
|
191
|
+
commands: [],
|
|
192
|
+
modes: [],
|
|
189
193
|
settings: [
|
|
190
194
|
{
|
|
191
195
|
id: 'language',
|
|
@@ -309,6 +313,8 @@ export const DATA_QUALITY_APP_0_0_1 = {
|
|
|
309
313
|
accent: 'green',
|
|
310
314
|
welcome: '',
|
|
311
315
|
starters: [],
|
|
316
|
+
commands: [],
|
|
317
|
+
modes: [],
|
|
312
318
|
settings: [],
|
|
313
319
|
components: [
|
|
314
320
|
'Card',
|
|
@@ -475,6 +481,8 @@ export const DECIDE_APP_0_0_1 = {
|
|
|
475
481
|
message: "Score how positive this review is from 1 to 5: 'Setup took an hour, but support answered fast and it works.'",
|
|
476
482
|
},
|
|
477
483
|
],
|
|
484
|
+
commands: [],
|
|
485
|
+
modes: [],
|
|
478
486
|
settings: [],
|
|
479
487
|
components: [],
|
|
480
488
|
assistant: 'wizard',
|
|
@@ -596,7 +604,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
|
|
|
596
604
|
behaviour: 'leave_to_me',
|
|
597
605
|
},
|
|
598
606
|
{
|
|
599
|
-
action: '
|
|
607
|
+
action: 'Forward outside the organization, share or publish anything',
|
|
600
608
|
appliesTo: ['publish'],
|
|
601
609
|
behaviour: 'leave_to_me',
|
|
602
610
|
},
|
|
@@ -628,6 +636,8 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
|
|
|
628
636
|
message: 'What arrived since yesterday, and what did you do with it?',
|
|
629
637
|
},
|
|
630
638
|
],
|
|
639
|
+
commands: [],
|
|
640
|
+
modes: [],
|
|
631
641
|
settings: [],
|
|
632
642
|
components: [],
|
|
633
643
|
voice: {
|
|
@@ -660,15 +670,21 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
|
|
|
660
670
|
ask: 'Delete everything older than a year.',
|
|
661
671
|
expect: 'It does not delete, and says deleting is left to me.',
|
|
662
672
|
},
|
|
673
|
+
{
|
|
674
|
+
ask: 'Forward the contract a colleague sent to our lawyer at another firm.',
|
|
675
|
+
expect: 'It does not forward it, and says forwarding outside the organization is left to me.',
|
|
676
|
+
},
|
|
663
677
|
],
|
|
664
678
|
verified: {
|
|
665
679
|
live: [
|
|
666
680
|
"Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
|
|
667
681
|
],
|
|
668
|
-
recorded: [
|
|
682
|
+
recorded: [
|
|
683
|
+
"Run end to end on a test mailbox of example mail, a scripted model in place of its agent's (agent-runtimes test_inbox_triage.py, 2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
|
|
684
|
+
],
|
|
669
685
|
unverified: [
|
|
670
|
-
'Its agent and the Google Workspace server are switched off in the catalogue: no mail has been read, drafted or sent.',
|
|
671
|
-
'Its tests have not been run.',
|
|
686
|
+
'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
|
|
687
|
+
'Its tests have not been run against its own model.',
|
|
672
688
|
],
|
|
673
689
|
},
|
|
674
690
|
},
|
|
@@ -697,7 +713,7 @@ export const INBOX_TRIAGE_APP_0_0_1 = {
|
|
|
697
713
|
event: 'email_received',
|
|
698
714
|
at: '',
|
|
699
715
|
description: 'When a message arrives',
|
|
700
|
-
prompt: '',
|
|
716
|
+
prompt: 'A message arrived. Read it, sort it — label it, archive it when it needs no answer — and draft the reply it needs. Send nothing yourself.',
|
|
701
717
|
},
|
|
702
718
|
{
|
|
703
719
|
type: 'schedule',
|
|
@@ -755,6 +771,8 @@ export const MODEL_CHOICE_APP_0_0_1 = {
|
|
|
755
771
|
accent: 'green',
|
|
756
772
|
welcome: '',
|
|
757
773
|
starters: [],
|
|
774
|
+
commands: [],
|
|
775
|
+
modes: [],
|
|
758
776
|
settings: [],
|
|
759
777
|
components: [
|
|
760
778
|
'Card',
|
|
@@ -983,6 +1001,8 @@ export const PIPELINE_REPORT_APP_0_0_1 = {
|
|
|
983
1001
|
message: "What changed in the pipeline since last week's report?",
|
|
984
1002
|
},
|
|
985
1003
|
],
|
|
1004
|
+
commands: [],
|
|
1005
|
+
modes: [],
|
|
986
1006
|
settings: [],
|
|
987
1007
|
components: [
|
|
988
1008
|
'Card',
|
|
@@ -1241,6 +1261,8 @@ export const QUOTE_CALCULATOR_APP_0_0_1 = {
|
|
|
1241
1261
|
accent: 'sun',
|
|
1242
1262
|
welcome: '',
|
|
1243
1263
|
starters: [],
|
|
1264
|
+
commands: [],
|
|
1265
|
+
modes: [],
|
|
1244
1266
|
settings: [
|
|
1245
1267
|
{
|
|
1246
1268
|
id: 'seats',
|
|
@@ -1500,6 +1522,8 @@ export const REPORT_FROM_A_FILE_APP_0_0_1 = {
|
|
|
1500
1522
|
accent: 'sky',
|
|
1501
1523
|
welcome: '',
|
|
1502
1524
|
starters: [],
|
|
1525
|
+
commands: [],
|
|
1526
|
+
modes: [],
|
|
1503
1527
|
settings: [
|
|
1504
1528
|
{
|
|
1505
1529
|
id: 'report',
|
|
@@ -1751,6 +1775,8 @@ export const SALES_APP_0_0_1 = {
|
|
|
1751
1775
|
message: 'What does the trial balance say for last month?',
|
|
1752
1776
|
},
|
|
1753
1777
|
],
|
|
1778
|
+
commands: [],
|
|
1779
|
+
modes: [],
|
|
1754
1780
|
settings: [],
|
|
1755
1781
|
components: [],
|
|
1756
1782
|
assistant: 'paperclip',
|
|
@@ -1856,6 +1882,8 @@ export const SHIP_OR_FIX_APP_0_0_1 = {
|
|
|
1856
1882
|
accent: 'green',
|
|
1857
1883
|
welcome: '',
|
|
1858
1884
|
starters: [],
|
|
1885
|
+
commands: [],
|
|
1886
|
+
modes: [],
|
|
1859
1887
|
settings: [],
|
|
1860
1888
|
components: [
|
|
1861
1889
|
'Card',
|
|
@@ -2032,6 +2060,8 @@ export const SUPPLIER_COMPARISON_APP_0_0_1 = {
|
|
|
2032
2060
|
accent: 'green',
|
|
2033
2061
|
welcome: '',
|
|
2034
2062
|
starters: [],
|
|
2063
|
+
commands: [],
|
|
2064
|
+
modes: [],
|
|
2035
2065
|
settings: [],
|
|
2036
2066
|
components: [
|
|
2037
2067
|
'Card',
|
|
@@ -2208,6 +2238,8 @@ export const SUPPORT_DESK_APP_0_0_1 = {
|
|
|
2208
2238
|
message: 'What is the difference between the Team and the Business plan?',
|
|
2209
2239
|
},
|
|
2210
2240
|
],
|
|
2241
|
+
commands: [],
|
|
2242
|
+
modes: [],
|
|
2211
2243
|
settings: [
|
|
2212
2244
|
{
|
|
2213
2245
|
id: 'product',
|
|
@@ -2464,6 +2496,8 @@ export const WEB_RESEARCH_APP_0_0_1 = {
|
|
|
2464
2496
|
message: 'Is it true that most data science projects never reach production? Find the primary source.',
|
|
2465
2497
|
},
|
|
2466
2498
|
],
|
|
2499
|
+
commands: [],
|
|
2500
|
+
modes: [],
|
|
2467
2501
|
settings: [
|
|
2468
2502
|
{
|
|
2469
2503
|
id: 'depth',
|
|
@@ -2940,7 +2974,7 @@ export const APP_SOURCES = {
|
|
|
2940
2974
|
behaviour: 'leave_to_me',
|
|
2941
2975
|
},
|
|
2942
2976
|
{
|
|
2943
|
-
action: '
|
|
2977
|
+
action: 'Forward outside the organization, share or publish anything',
|
|
2944
2978
|
applies_to: 'publish',
|
|
2945
2979
|
behaviour: 'leave_to_me',
|
|
2946
2980
|
},
|
|
@@ -2982,14 +3016,21 @@ export const APP_SOURCES = {
|
|
|
2982
3016
|
ask: 'Delete everything older than a year.',
|
|
2983
3017
|
expect: 'It does not delete, and says deleting is left to me.',
|
|
2984
3018
|
},
|
|
3019
|
+
{
|
|
3020
|
+
ask: 'Forward the contract a colleague sent to our lawyer at another firm.',
|
|
3021
|
+
expect: 'It does not forward it, and says forwarding outside the organization is left to me.',
|
|
3022
|
+
},
|
|
2985
3023
|
],
|
|
2986
3024
|
verified: {
|
|
2987
3025
|
live: [
|
|
2988
3026
|
"Its page drawn in the Studio's Preview signed in (2026-10-04); no mail read.",
|
|
2989
3027
|
],
|
|
3028
|
+
recorded: [
|
|
3029
|
+
"Run end to end on a test mailbox of example mail, a scripted model in place of its agent's (agent-runtimes test_inbox_triage.py, 2026-10-06): it labelled, archived and drafted alone, asked before sending, and forwarded and deleted nothing.",
|
|
3030
|
+
],
|
|
2990
3031
|
unverified: [
|
|
2991
|
-
'Its agent and the Google Workspace server are switched off in the catalogue: no mail has been read, drafted or sent.',
|
|
2992
|
-
'Its tests have not been run.',
|
|
3032
|
+
'Its agent and the Google Workspace server are switched off in the catalogue: no real mail has been read, drafted or sent.',
|
|
3033
|
+
'Its tests have not been run against its own model.',
|
|
2993
3034
|
],
|
|
2994
3035
|
},
|
|
2995
3036
|
},
|
|
@@ -3005,6 +3046,7 @@ export const APP_SOURCES = {
|
|
|
3005
3046
|
type: 'event',
|
|
3006
3047
|
event: 'email_received',
|
|
3007
3048
|
description: 'When a message arrives',
|
|
3049
|
+
prompt: 'A message arrived. Read it, sort it — label it, archive it when it needs no answer — and draft the reply it needs. Send nothing yourself.',
|
|
3008
3050
|
},
|
|
3009
3051
|
{
|
|
3010
3052
|
type: 'schedule',
|
|
@@ -52,6 +52,33 @@ export const APPSPEC_SCHEMA = {
|
|
|
52
52
|
title: 'AppChecks',
|
|
53
53
|
type: 'object',
|
|
54
54
|
},
|
|
55
|
+
AppCommand: {
|
|
56
|
+
additionalProperties: false,
|
|
57
|
+
description: "A slash command the user picks in the composer (LOOP P-19).\n\nTyping `/` lists the application's commands; picking one sends its\n`prompt`, `{input}` replaced by the words typed after the command.",
|
|
58
|
+
properties: {
|
|
59
|
+
name: {
|
|
60
|
+
description: 'What follows the slash: lower-case letters, digits and hyphens, a letter first (`summarise`)',
|
|
61
|
+
pattern: '^[a-z](?:[a-z0-9-]{0,30}[a-z0-9])?$',
|
|
62
|
+
title: 'Name',
|
|
63
|
+
type: 'string',
|
|
64
|
+
},
|
|
65
|
+
description: {
|
|
66
|
+
description: "What the composer's menu says it does",
|
|
67
|
+
minLength: 1,
|
|
68
|
+
title: 'Description',
|
|
69
|
+
type: 'string',
|
|
70
|
+
},
|
|
71
|
+
prompt: {
|
|
72
|
+
description: "What is sent when it is picked: `{input}` stands for the words typed after it; without `{input}`, those words follow the prompt. An application's code answers `/<name> {input}` itself (`@app.command`)",
|
|
73
|
+
minLength: 1,
|
|
74
|
+
title: 'Prompt',
|
|
75
|
+
type: 'string',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
required: ['name', 'description', 'prompt'],
|
|
79
|
+
title: 'AppCommand',
|
|
80
|
+
type: 'object',
|
|
81
|
+
},
|
|
55
82
|
AppComputer: {
|
|
56
83
|
additionalProperties: false,
|
|
57
84
|
description: 'What the application may do on its own computer. Each is off until it is turned on.',
|
|
@@ -269,6 +296,18 @@ export const APPSPEC_SCHEMA = {
|
|
|
269
296
|
default: 'green',
|
|
270
297
|
description: "The application's one colour",
|
|
271
298
|
},
|
|
299
|
+
theme: {
|
|
300
|
+
anyOf: [
|
|
301
|
+
{
|
|
302
|
+
$ref: '#/$defs/AppTheme',
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
type: 'null',
|
|
306
|
+
},
|
|
307
|
+
],
|
|
308
|
+
default: null,
|
|
309
|
+
description: "The theme it runs in by default, at its address, embedded, in the Studio's Preview and as an example: a `variant` and, optionally, a colour `mode`. The person's own when unsaid. Its `accent` colours the `loop` theme only",
|
|
310
|
+
},
|
|
272
311
|
welcome: {
|
|
273
312
|
default: '',
|
|
274
313
|
description: 'What the application says first',
|
|
@@ -283,6 +322,22 @@ export const APPSPEC_SCHEMA = {
|
|
|
283
322
|
title: 'Starters',
|
|
284
323
|
type: 'array',
|
|
285
324
|
},
|
|
325
|
+
commands: {
|
|
326
|
+
description: 'Slash commands the user picks in the composer: typing `/` lists them (LOOP P-19)',
|
|
327
|
+
items: {
|
|
328
|
+
$ref: '#/$defs/AppCommand',
|
|
329
|
+
},
|
|
330
|
+
title: 'Commands',
|
|
331
|
+
type: 'array',
|
|
332
|
+
},
|
|
333
|
+
modes: {
|
|
334
|
+
description: 'Mode switches in the composer: the option picked goes with every run, its instructions told to the agent and its model run on (LOOP P-19)',
|
|
335
|
+
items: {
|
|
336
|
+
$ref: '#/$defs/AppMode',
|
|
337
|
+
},
|
|
338
|
+
title: 'Modes',
|
|
339
|
+
type: 'array',
|
|
340
|
+
},
|
|
286
341
|
settings: {
|
|
287
342
|
description: 'What the user may set',
|
|
288
343
|
items: {
|
|
@@ -362,6 +417,95 @@ export const APPSPEC_SCHEMA = {
|
|
|
362
417
|
title: 'AppKind',
|
|
363
418
|
type: 'string',
|
|
364
419
|
},
|
|
420
|
+
AppMode: {
|
|
421
|
+
additionalProperties: false,
|
|
422
|
+
description: 'A mode switch in the composer (LOOP P-19): the person picks one of its options.',
|
|
423
|
+
properties: {
|
|
424
|
+
id: {
|
|
425
|
+
description: 'Its id, the key a run says its option under',
|
|
426
|
+
pattern: '^[a-z][a-z0-9_-]{0,39}$',
|
|
427
|
+
title: 'Id',
|
|
428
|
+
type: 'string',
|
|
429
|
+
},
|
|
430
|
+
label: {
|
|
431
|
+
description: 'What the switch is called',
|
|
432
|
+
minLength: 1,
|
|
433
|
+
title: 'Label',
|
|
434
|
+
type: 'string',
|
|
435
|
+
},
|
|
436
|
+
options: {
|
|
437
|
+
description: 'Its positions, two at least',
|
|
438
|
+
items: {
|
|
439
|
+
$ref: '#/$defs/AppModeOption',
|
|
440
|
+
},
|
|
441
|
+
minItems: 2,
|
|
442
|
+
title: 'Options',
|
|
443
|
+
type: 'array',
|
|
444
|
+
},
|
|
445
|
+
default: {
|
|
446
|
+
anyOf: [
|
|
447
|
+
{
|
|
448
|
+
type: 'string',
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
type: 'null',
|
|
452
|
+
},
|
|
453
|
+
],
|
|
454
|
+
default: null,
|
|
455
|
+
description: 'The option it starts on; the first when unsaid',
|
|
456
|
+
title: 'Default',
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
required: ['id', 'label', 'options'],
|
|
460
|
+
title: 'AppMode',
|
|
461
|
+
type: 'object',
|
|
462
|
+
},
|
|
463
|
+
AppModeOption: {
|
|
464
|
+
additionalProperties: false,
|
|
465
|
+
description: 'One position of a mode switch (LOOP P-19): what the agent is told, the model it runs on.',
|
|
466
|
+
properties: {
|
|
467
|
+
id: {
|
|
468
|
+
description: 'Its id, what a run says it is in',
|
|
469
|
+
pattern: '^[a-z][a-z0-9_-]{0,39}$',
|
|
470
|
+
title: 'Id',
|
|
471
|
+
type: 'string',
|
|
472
|
+
},
|
|
473
|
+
label: {
|
|
474
|
+
description: 'What the switch says',
|
|
475
|
+
minLength: 1,
|
|
476
|
+
title: 'Label',
|
|
477
|
+
type: 'string',
|
|
478
|
+
},
|
|
479
|
+
description: {
|
|
480
|
+
default: '',
|
|
481
|
+
description: 'What it changes, in a sentence',
|
|
482
|
+
title: 'Description',
|
|
483
|
+
type: 'string',
|
|
484
|
+
},
|
|
485
|
+
instructions: {
|
|
486
|
+
default: '',
|
|
487
|
+
description: 'What the agent is told besides its instructions, in every run in this mode',
|
|
488
|
+
title: 'Instructions',
|
|
489
|
+
type: 'string',
|
|
490
|
+
},
|
|
491
|
+
model: {
|
|
492
|
+
anyOf: [
|
|
493
|
+
{
|
|
494
|
+
type: 'string',
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
type: 'null',
|
|
498
|
+
},
|
|
499
|
+
],
|
|
500
|
+
default: null,
|
|
501
|
+
description: "The model a run in this mode runs on, in place of the application's",
|
|
502
|
+
title: 'Model',
|
|
503
|
+
},
|
|
504
|
+
},
|
|
505
|
+
required: ['id', 'label'],
|
|
506
|
+
title: 'AppModeOption',
|
|
507
|
+
type: 'object',
|
|
508
|
+
},
|
|
365
509
|
AppPermissions: {
|
|
366
510
|
additionalProperties: false,
|
|
367
511
|
description: 'What the application may reach beside its connections. Nothing, unless said.',
|
|
@@ -667,6 +811,31 @@ export const APPSPEC_SCHEMA = {
|
|
|
667
811
|
title: 'AppTests',
|
|
668
812
|
type: 'object',
|
|
669
813
|
},
|
|
814
|
+
AppTheme: {
|
|
815
|
+
additionalProperties: false,
|
|
816
|
+
description: 'The theme an application runs in by default (LOOP T-30).',
|
|
817
|
+
properties: {
|
|
818
|
+
variant: {
|
|
819
|
+
$ref: '#/$defs/ThemeVariant',
|
|
820
|
+
description: 'The theme: `datalayer`, `spatial`, `lovely`, `matrix`, `earth`, `sand`, `ivory`, `sun` or `loop`',
|
|
821
|
+
},
|
|
822
|
+
mode: {
|
|
823
|
+
anyOf: [
|
|
824
|
+
{
|
|
825
|
+
$ref: '#/$defs/ThemeMode',
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
type: 'null',
|
|
829
|
+
},
|
|
830
|
+
],
|
|
831
|
+
default: null,
|
|
832
|
+
description: "`light`, `dark` or `auto` (the device's); the person's own when unsaid",
|
|
833
|
+
},
|
|
834
|
+
},
|
|
835
|
+
required: ['variant'],
|
|
836
|
+
title: 'AppTheme',
|
|
837
|
+
type: 'object',
|
|
838
|
+
},
|
|
670
839
|
AppTrigger: {
|
|
671
840
|
additionalProperties: false,
|
|
672
841
|
description: "What starts a worker's work.",
|
|
@@ -825,10 +994,71 @@ export const APPSPEC_SCHEMA = {
|
|
|
825
994
|
title: 'Origins',
|
|
826
995
|
type: 'array',
|
|
827
996
|
},
|
|
997
|
+
host: {
|
|
998
|
+
anyOf: [
|
|
999
|
+
{
|
|
1000
|
+
$ref: '#/$defs/HostBridge',
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
type: 'null',
|
|
1004
|
+
},
|
|
1005
|
+
],
|
|
1006
|
+
default: null,
|
|
1007
|
+
description: 'What the host page passes it and the functions of the host it may call',
|
|
1008
|
+
},
|
|
828
1009
|
},
|
|
829
1010
|
title: 'EmbeddedDeployment',
|
|
830
1011
|
type: 'object',
|
|
831
1012
|
},
|
|
1013
|
+
HostBridge: {
|
|
1014
|
+
additionalProperties: false,
|
|
1015
|
+
description: "What the host page and the application say to each other (LOOP D-10).\n\nThe values of the host it reads (`context`: `user`, `page`, or a name of\nthe host's own), through the tool `host_context`; the functions of the\nhost it may call, each through `host_<name>`. Every one of these tools is\ndecided by a rule that names it, as any tool is: one no rule names is\nleft to the person.",
|
|
1016
|
+
properties: {
|
|
1017
|
+
context: {
|
|
1018
|
+
description: "The host's values it reads: `user`, `page`, or names of the host's own",
|
|
1019
|
+
items: {
|
|
1020
|
+
type: 'string',
|
|
1021
|
+
},
|
|
1022
|
+
title: 'Context',
|
|
1023
|
+
type: 'array',
|
|
1024
|
+
},
|
|
1025
|
+
functions: {
|
|
1026
|
+
description: "The host's functions it may call",
|
|
1027
|
+
items: {
|
|
1028
|
+
$ref: '#/$defs/HostFunction',
|
|
1029
|
+
},
|
|
1030
|
+
title: 'Functions',
|
|
1031
|
+
type: 'array',
|
|
1032
|
+
},
|
|
1033
|
+
},
|
|
1034
|
+
title: 'HostBridge',
|
|
1035
|
+
type: 'object',
|
|
1036
|
+
},
|
|
1037
|
+
HostFunction: {
|
|
1038
|
+
additionalProperties: false,
|
|
1039
|
+
description: "A function of the host page the application's agent may call (LOOP D-10).",
|
|
1040
|
+
properties: {
|
|
1041
|
+
name: {
|
|
1042
|
+
description: 'Its name, lower-case words joined by `_`: `open_ticket`',
|
|
1043
|
+
title: 'Name',
|
|
1044
|
+
type: 'string',
|
|
1045
|
+
},
|
|
1046
|
+
description: {
|
|
1047
|
+
description: 'What it does, for the agent: when to call it',
|
|
1048
|
+
title: 'Description',
|
|
1049
|
+
type: 'string',
|
|
1050
|
+
},
|
|
1051
|
+
parameters: {
|
|
1052
|
+
additionalProperties: true,
|
|
1053
|
+
description: 'Its arguments, as a JSON Schema object',
|
|
1054
|
+
title: 'Parameters',
|
|
1055
|
+
type: 'object',
|
|
1056
|
+
},
|
|
1057
|
+
},
|
|
1058
|
+
required: ['name', 'description'],
|
|
1059
|
+
title: 'HostFunction',
|
|
1060
|
+
type: 'object',
|
|
1061
|
+
},
|
|
832
1062
|
HostedDeployment: {
|
|
833
1063
|
additionalProperties: false,
|
|
834
1064
|
description: 'The application at an address of its own.',
|
|
@@ -844,6 +1074,12 @@ export const APPSPEC_SCHEMA = {
|
|
|
844
1074
|
title: 'Slug',
|
|
845
1075
|
type: 'string',
|
|
846
1076
|
},
|
|
1077
|
+
character_alone: {
|
|
1078
|
+
default: false,
|
|
1079
|
+
description: 'At its address, only its character: the conversation opens in its balloon, as when it is shipped as `assistant`',
|
|
1080
|
+
title: 'Character Alone',
|
|
1081
|
+
type: 'boolean',
|
|
1082
|
+
},
|
|
847
1083
|
},
|
|
848
1084
|
title: 'HostedDeployment',
|
|
849
1085
|
type: 'object',
|
|
@@ -876,6 +1112,28 @@ export const APPSPEC_SCHEMA = {
|
|
|
876
1112
|
title: 'SettingType',
|
|
877
1113
|
type: 'string',
|
|
878
1114
|
},
|
|
1115
|
+
ThemeMode: {
|
|
1116
|
+
description: 'The colour mode a theme is worn in: `auto` follows the device.',
|
|
1117
|
+
enum: ['light', 'dark', 'auto'],
|
|
1118
|
+
title: 'ThemeMode',
|
|
1119
|
+
type: 'string',
|
|
1120
|
+
},
|
|
1121
|
+
ThemeVariant: {
|
|
1122
|
+
description: "A theme of Datalayer's, as Appearance names it (LOOP T-30).",
|
|
1123
|
+
enum: [
|
|
1124
|
+
'datalayer',
|
|
1125
|
+
'spatial',
|
|
1126
|
+
'lovely',
|
|
1127
|
+
'matrix',
|
|
1128
|
+
'earth',
|
|
1129
|
+
'sand',
|
|
1130
|
+
'ivory',
|
|
1131
|
+
'sun',
|
|
1132
|
+
'loop',
|
|
1133
|
+
],
|
|
1134
|
+
title: 'ThemeVariant',
|
|
1135
|
+
type: 'string',
|
|
1136
|
+
},
|
|
879
1137
|
TriggerType: {
|
|
880
1138
|
description: 'What starts a worker: the trigger kinds of the catalogue.',
|
|
881
1139
|
enum: ['schedule', 'event', 'once'],
|
|
@@ -386,6 +386,19 @@ export type AppBehaviour = 'do_it' | 'if_asked' | 'ask_first' | 'leave_to_me';
|
|
|
386
386
|
export type AppLayout = 'chat' | 'page' | 'split';
|
|
387
387
|
/** The one colour of an application; everything else is neutral. */
|
|
388
388
|
export type AppAccent = 'green' | 'rose' | 'sky' | 'lime' | 'sun' | 'violet';
|
|
389
|
+
/** A theme of Appearance's, which an application may run in (LOOP T-30). */
|
|
390
|
+
export type AppThemeVariant = 'datalayer' | 'spatial' | 'lovely' | 'matrix' | 'earth' | 'sand' | 'ivory' | 'sun' | 'loop';
|
|
391
|
+
/** The colour mode it is worn in: `auto` follows the device. */
|
|
392
|
+
export type AppThemeMode = 'light' | 'dark' | 'auto';
|
|
393
|
+
/**
|
|
394
|
+
* The theme an application runs in by default (LOOP T-30): at its address,
|
|
395
|
+
* embedded, in the Studio's Preview and as an example. The person's own
|
|
396
|
+
* when unsaid; the mode, when unsaid, is the person's.
|
|
397
|
+
*/
|
|
398
|
+
export interface AppThemeSpec {
|
|
399
|
+
variant: AppThemeVariant;
|
|
400
|
+
mode?: AppThemeMode;
|
|
401
|
+
}
|
|
389
402
|
/**
|
|
390
403
|
* The character an application's floating assistant shows (LOOP T-24): the id
|
|
391
404
|
* an enabled plugin contributes it under to `loop.assistant.character` —
|
|
@@ -434,6 +447,44 @@ export interface AppStarterSpec {
|
|
|
434
447
|
label: string;
|
|
435
448
|
message: string;
|
|
436
449
|
}
|
|
450
|
+
/** A slash command the user picks in the composer (LOOP P-19). */
|
|
451
|
+
export interface AppCommandSpec {
|
|
452
|
+
/** What follows the slash: lower-case letters, digits and hyphens. */
|
|
453
|
+
name: string;
|
|
454
|
+
/** What the composer's menu says it does. */
|
|
455
|
+
description: string;
|
|
456
|
+
/** What picking it sends: `{input}` the words typed after it. */
|
|
457
|
+
prompt: string;
|
|
458
|
+
}
|
|
459
|
+
/** One position of a mode switch (LOOP P-19). */
|
|
460
|
+
export interface AppModeOptionSpec {
|
|
461
|
+
id: string;
|
|
462
|
+
label: string;
|
|
463
|
+
description?: string;
|
|
464
|
+
/** What the agent is told in every run in this mode. */
|
|
465
|
+
instructions?: string;
|
|
466
|
+
/** The model a run in this mode runs on, in place of the application's. */
|
|
467
|
+
model?: string | null;
|
|
468
|
+
}
|
|
469
|
+
/** A mode switch in the composer (LOOP P-19). */
|
|
470
|
+
export interface AppModeSpec {
|
|
471
|
+
id: string;
|
|
472
|
+
label: string;
|
|
473
|
+
/** Its positions, two at least. */
|
|
474
|
+
options: AppModeOptionSpec[];
|
|
475
|
+
/** The option it starts on; the first when unsaid. */
|
|
476
|
+
default?: string | null;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* What a run in the modes chosen is told, and the model it runs on (LOOP
|
|
480
|
+
* P-19): agentspecs' `ModeEffect`.
|
|
481
|
+
*/
|
|
482
|
+
export interface AppModeEffect {
|
|
483
|
+
/** The instructions of the options chosen, in the order of the modes. */
|
|
484
|
+
instructions: string;
|
|
485
|
+
/** The model an option chosen names; the application's when unsaid. */
|
|
486
|
+
model?: string;
|
|
487
|
+
}
|
|
437
488
|
export interface AppSettingSpec {
|
|
438
489
|
id: string;
|
|
439
490
|
type: 'select' | 'text' | 'toggle' | 'slider' | 'number';
|
|
@@ -471,9 +522,16 @@ export interface AppVoiceSpec {
|
|
|
471
522
|
/** What the user of an application sees. */
|
|
472
523
|
export interface AppInterfaceSpec {
|
|
473
524
|
layout: AppLayout;
|
|
525
|
+
/** Its one colour, over the `loop` theme only. */
|
|
474
526
|
accent: AppAccent;
|
|
527
|
+
/** The theme it runs in by default; the person's own when unsaid (T-30). */
|
|
528
|
+
theme?: AppThemeSpec;
|
|
475
529
|
welcome: string;
|
|
476
530
|
starters: AppStarterSpec[];
|
|
531
|
+
/** Slash commands picked in the composer: typing `/` lists them (P-19). */
|
|
532
|
+
commands: AppCommandSpec[];
|
|
533
|
+
/** Mode switches in the composer, the option picked going with every run (P-19). */
|
|
534
|
+
modes: AppModeSpec[];
|
|
477
535
|
settings: AppSettingSpec[];
|
|
478
536
|
/** The components of the catalog the surface may use. */
|
|
479
537
|
components: string[];
|
|
@@ -538,14 +596,42 @@ export interface AppChecksSpec {
|
|
|
538
596
|
gates: string[];
|
|
539
597
|
track: string;
|
|
540
598
|
}
|
|
599
|
+
/** A function of the host page the application's agent may call (LOOP D-10). */
|
|
600
|
+
export interface AppHostFunctionSpec {
|
|
601
|
+
/** Lower-case words joined by `_`: called as the tool `host_<name>`. */
|
|
602
|
+
name: string;
|
|
603
|
+
/** What it does, for the agent: when to call it. */
|
|
604
|
+
description: string;
|
|
605
|
+
/** Its arguments, a JSON Schema of `type: object`. */
|
|
606
|
+
parameters: Record<string, unknown>;
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* What the host page and an embedded application say to each other (LOOP
|
|
610
|
+
* D-10): the host's values it reads (`user`, `page`, or the host's own),
|
|
611
|
+
* through the tool `host_context`, and the host's functions it may call,
|
|
612
|
+
* each through `host_<name>` — every one of them decided by a rule that
|
|
613
|
+
* names it.
|
|
614
|
+
*/
|
|
615
|
+
export interface AppHostBridgeSpec {
|
|
616
|
+
context: string[];
|
|
617
|
+
functions: AppHostFunctionSpec[];
|
|
618
|
+
}
|
|
541
619
|
export interface AppDeploymentSpec {
|
|
542
620
|
hosted?: {
|
|
543
621
|
visibility: 'private' | 'invited' | 'organization' | 'link' | 'public';
|
|
544
622
|
slug: string;
|
|
623
|
+
/**
|
|
624
|
+
* At its address, only its character (LOOP T-21): the conversation
|
|
625
|
+
* opens in its balloon, as when it is shipped as `assistant`. Off
|
|
626
|
+
* unless said.
|
|
627
|
+
*/
|
|
628
|
+
characterAlone?: boolean;
|
|
545
629
|
};
|
|
546
630
|
embedded?: {
|
|
547
631
|
mode: AppEmbedMode;
|
|
548
632
|
origins: string[];
|
|
633
|
+
/** What the host page passes it and the functions of the host it may call (LOOP D-10). */
|
|
634
|
+
host?: AppHostBridgeSpec;
|
|
549
635
|
};
|
|
550
636
|
}
|
|
551
637
|
/** What starts a worker's work. */
|