@datalayer/agent-runtimes 1.5.52 → 1.5.53
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/chunks/{ChatView-Dy-IgGFL.js → ChatView-CRp8Mt57.js} +4 -4
- package/dist-embed/datalayer-app-main.js +86 -86
- package/lib/api/runtimes/environments.d.ts +2 -2
- package/lib/api/runtimes/environments.js +5 -5
- package/lib/api/runtimes/runtimes.d.ts +7 -7
- package/lib/api/runtimes/runtimes.js +5 -5
- package/lib/apps/__tests__/fixtures/sceneCheckCases.json +1 -1
- package/lib/apps/apps/AppBrowserSandbox.js +1 -1
- package/lib/apps/apps/AppComposer.d.ts +3 -3
- package/lib/apps/apps/AppComposer.js +3 -3
- package/lib/apps/apps/AppFeedback.d.ts +1 -1
- package/lib/apps/apps/AppKept.d.ts +1 -1
- package/lib/apps/apps/AppKept.js +1 -1
- package/lib/apps/apps/AppRenderer.d.ts +14 -14
- package/lib/apps/apps/AppRenderer.js +18 -20
- package/lib/apps/apps/AppRuntimePlugins.js +2 -3
- package/lib/apps/apps/agent.js +1 -1
- package/lib/apps/apps/appspec.d.ts +10 -10
- package/lib/apps/apps/appspec.js +35 -35
- package/lib/apps/apps/browserSandbox.d.ts +1 -1
- package/lib/apps/apps/checks.d.ts +16 -7
- package/lib/apps/apps/checks.js +65 -21
- package/lib/apps/apps/composer.d.ts +2 -2
- package/lib/apps/apps/composer.js +1 -1
- package/lib/apps/apps/computer.d.ts +3 -3
- package/lib/apps/apps/computer.js +1 -1
- package/lib/apps/apps/customComponents.d.ts +2 -2
- package/lib/apps/apps/customComponents.js +3 -3
- package/lib/apps/apps/feedback.d.ts +2 -2
- package/lib/apps/apps/hostTools.d.ts +3 -3
- package/lib/apps/apps/hostTools.js +2 -2
- package/lib/apps/apps/kept.d.ts +1 -1
- package/lib/apps/apps/language.d.ts +1 -1
- package/lib/apps/apps/pluginPair.d.ts +1 -1
- package/lib/apps/apps/records.js +1 -1
- package/lib/apps/apps/rules.d.ts +2 -2
- package/lib/apps/apps/rules.js +2 -2
- package/lib/apps/apps/saved.d.ts +1 -1
- package/lib/apps/apps/saved.js +1 -1
- package/lib/apps/apps/sceneChecks.js +3 -3
- package/lib/apps/apps/sceneYaml.js +1 -1
- package/lib/apps/apps/sessionRules.d.ts +7 -8
- package/lib/apps/apps/sessionRules.js +6 -7
- package/lib/apps/apps/settingsInputs.d.ts +1 -1
- package/lib/apps/apps/settingsInputs.js +1 -1
- package/lib/apps/apps/threads.d.ts +2 -2
- package/lib/apps/apps/threads.js +1 -1
- package/lib/apps/apps/uploads.d.ts +1 -1
- package/lib/apps/apps/visitorToken.d.ts +1 -1
- package/lib/apps/apps/visitorToken.js +2 -2
- package/lib/apps/core/a2uiComponents.js +1 -2
- package/lib/apps/core/appFiles.js +1 -1
- package/lib/apps/core/canvasBlocks.d.ts +1 -1
- package/lib/apps/core/canvasBlocks.js +1 -1
- package/lib/apps/core/canvasParts.d.ts +3 -3
- package/lib/apps/core/canvasParts.js +1 -1
- package/lib/apps/core/index.d.ts +12 -13
- package/lib/apps/core/index.js +5 -6
- package/lib/apps/embed/AppEmbed.d.ts +9 -9
- package/lib/apps/embed/AppEmbed.js +9 -10
- package/lib/apps/embed/LoopEmbed.d.ts +2 -3
- package/lib/apps/embed/datalayer-app.js +1 -1
- package/lib/apps/embed/element.js +11 -11
- package/lib/apps/embed/embedConfig.d.ts +8 -10
- package/lib/apps/embed/embedConfig.js +6 -7
- package/lib/apps/embed/embedSession.d.ts +3 -3
- package/lib/apps/embed/embedSession.js +2 -2
- package/lib/apps/embed/embeddedSecrets.d.ts +1 -1
- package/lib/apps/embed/embeddedSecrets.js +1 -1
- package/lib/apps/embed/hostBridge.d.ts +14 -14
- package/lib/apps/embed/hostBridge.js +9 -9
- package/lib/apps/embed/loader.js +2 -2
- package/lib/apps/embed/visitorApp.d.ts +1 -1
- package/lib/apps/index.d.ts +1 -1
- package/lib/apps/index.js +3 -3
- package/lib/apps/plugins/a2ui/A2uiView.js +1 -1
- package/lib/apps/plugins/a2ui-surface/AnswerShows.d.ts +2 -2
- package/lib/apps/plugins/a2ui-surface/AnswerShows.js +1 -1
- package/lib/apps/plugins/a2ui-surface/InlineSurface.d.ts +1 -1
- package/lib/apps/plugins/a2ui-surface/SurfaceToolResult.js +2 -2
- package/lib/apps/plugins/a2ui-surface/index.js +1 -1
- package/lib/apps/plugins/a2ui-surface/ownComponents.js +1 -1
- package/lib/apps/plugins/a2ui-surface/toolResult.d.ts +2 -2
- package/lib/apps/plugins/a2ui-surface/toolResult.js +2 -2
- package/lib/apps/plugins/agent-capacity/index.d.ts +2 -2
- package/lib/apps/plugins/agents/DatalayerAgentBridge.js +4 -4
- package/lib/apps/plugins/agents/appLaunch.d.ts +1 -1
- package/lib/apps/plugins/agents/plugin.d.ts +4 -4
- package/lib/apps/plugins/agents/switchable.js +1 -1
- package/lib/apps/plugins/app-activity/AppActivity.d.ts +1 -1
- package/lib/apps/plugins/app-components/index.d.ts +1 -2
- package/lib/apps/plugins/app-components/index.js +1 -2
- package/lib/apps/plugins/app-computer/AppComputer.d.ts +1 -1
- package/lib/apps/plugins/app-computer/AppComputer.js +2 -2
- package/lib/apps/plugins/app-elements/AppElements.d.ts +1 -2
- package/lib/apps/plugins/app-elements/AppElements.js +1 -1
- package/lib/apps/plugins/app-elements/QuestionView.d.ts +1 -2
- package/lib/apps/plugins/app-elements/QuestionView.js +1 -1
- package/lib/apps/plugins/app-elements/index.d.ts +2 -2
- package/lib/apps/plugins/app-elements/index.js +2 -2
- package/lib/apps/plugins/app-page/AppPage.d.ts +3 -3
- package/lib/apps/plugins/app-page/appPageModel.d.ts +5 -5
- package/lib/apps/plugins/app-page/appPageModel.js +1 -1
- package/lib/apps/plugins/app-page/index.d.ts +3 -3
- package/lib/apps/plugins/app-page/index.js +1 -1
- package/lib/apps/plugins/app-page/pageRun.d.ts +2 -2
- package/lib/apps/plugins/app-page/pageRun.js +2 -2
- package/lib/apps/plugins/app-rules/AppRulesCard.d.ts +5 -5
- package/lib/apps/plugins/app-rules/AppRulesCard.js +4 -4
- package/lib/apps/plugins/assistant/index.d.ts +2 -2
- package/lib/apps/plugins/assistant-characters/index.d.ts +2 -2
- package/lib/apps/plugins/assistant-characters/index.js +2 -2
- package/lib/apps/plugins/canvas-blocks/index.d.ts +1 -1
- package/lib/apps/plugins/canvas-blocks/index.js +1 -1
- package/lib/apps/plugins/canvas-parts/index.d.ts +5 -5
- package/lib/apps/plugins/canvas-parts/index.js +5 -5
- package/lib/apps/plugins/chat/ChatView.js +36 -34
- package/lib/apps/plugins/chat/index.d.ts +8 -8
- package/lib/apps/plugins/document/DocumentView.js +2 -2
- package/lib/apps/plugins/notebook/NotebookView.js +1 -1
- package/lib/apps/plugins/page-layout/SplitLayout.d.ts +1 -1
- package/lib/apps/plugins/pap-sign-in/PapSignInCard.d.ts +1 -1
- package/lib/apps/plugins/pap-sign-in/PapSignInCard.js +1 -1
- package/lib/apps/plugins/pap-sign-in/index.js +1 -1
- package/lib/apps/plugins/pap-sign-in/signIn.d.ts +1 -1
- package/lib/apps/plugins/pap-sign-in/signIn.js +1 -1
- package/lib/apps/plugins/plugins-panel/index.d.ts +1 -1
- package/lib/apps/plugins/plugins-panel/index.js +1 -1
- package/lib/apps/plugins/shield-displays/DiffCard.d.ts +2 -2
- package/lib/apps/plugins/shield-displays/TerminalCard.d.ts +1 -1
- package/lib/apps/plugins/shield-displays/index.js +3 -3
- package/lib/apps/presets.d.ts +9 -9
- package/lib/apps/presets.js +3 -3
- package/lib/apps/shell/LoopWorkspace.d.ts +1 -1
- package/lib/apps/shell/LoopWorkspace.js +1 -1
- package/lib/apps/shell/PluginToggles.d.ts +1 -1
- package/lib/apps/shell/SidebarRail.d.ts +1 -1
- package/lib/apps/shell/paneMotion.d.ts +1 -1
- package/lib/apps/shell/paneMotion.js +1 -1
- package/lib/chat/ChatFloating.d.ts +8 -9
- package/lib/chat/ChatFloating.js +4 -4
- package/lib/chat/ChatInline.js +1 -1
- package/lib/chat/ChatLanguage.d.ts +1 -1
- package/lib/chat/ChatLanguage.js +1 -1
- package/lib/chat/assistant/AssistantContextMenu.d.ts +1 -1
- package/lib/chat/assistant/AssistantStage.d.ts +4 -4
- package/lib/chat/assistant/AssistantStage.js +1 -1
- package/lib/chat/assistant/BalloonParts.d.ts +1 -1
- package/lib/chat/assistant/BalloonVisual.d.ts +1 -1
- package/lib/chat/assistant/SpeechBalloon.d.ts +2 -2
- package/lib/chat/assistant/SpriteCharacter.d.ts +1 -1
- package/lib/chat/assistant/characters.d.ts +2 -2
- package/lib/chat/assistant/formats/acf.js +1 -1
- package/lib/chat/assistant/formats/files.js +1 -1
- package/lib/chat/assistant/formats/index.d.ts +1 -1
- package/lib/chat/assistant/formats/index.js +1 -1
- package/lib/chat/assistant/formats/types.d.ts +1 -1
- package/lib/chat/assistant/state.d.ts +2 -2
- package/lib/chat/assistant/toolLine.js +1 -1
- package/lib/chat/base/ChatBase.js +28 -20
- package/lib/chat/base/conversationItems.d.ts +3 -3
- package/lib/chat/base/loopElement.d.ts +2 -2
- package/lib/chat/base/loopStep.d.ts +3 -3
- package/lib/chat/base/loopStep.js +1 -1
- package/lib/chat/base/loopWindow.d.ts +3 -3
- package/lib/chat/base/loopWindow.js +3 -3
- package/lib/chat/base/uiFiles.d.ts +1 -1
- package/lib/chat/base/uiFiles.js +1 -1
- package/lib/chat/base/uiOps.d.ts +1 -1
- package/lib/chat/base/uiOps.js +1 -1
- package/lib/chat/index.js +1 -1
- package/lib/chat/indicators/McpStatusIndicator.js +1 -1
- package/lib/chat/indicators/SkillsStatusIndicator.js +1 -1
- package/lib/chat/messages/ChatMessageList.d.ts +3 -4
- package/lib/chat/messages/ChatMessageList.js +2 -2
- package/lib/chat/messages/markdownWithoutHtml.d.ts +1 -1
- package/lib/chat/messages/markdownWithoutHtml.js +1 -1
- package/lib/chat/presence/Presence.d.ts +2 -2
- package/lib/chat/presence/Presence.js +1 -1
- package/lib/chat/presence/presenceStatus.d.ts +2 -2
- package/lib/chat/presence/presenceStatus.js +2 -2
- package/lib/chat/prompt/InputPrompt.d.ts +3 -3
- package/lib/chat/prompt/InputPromptBase.d.ts +1 -1
- package/lib/chat/prompt/InputPromptBase.js +1 -1
- package/lib/chat/prompt/InputPromptLexical.d.ts +1 -1
- package/lib/chat/styles/streamdownStyles.js +1 -1
- package/lib/chat/useViewportDrag.d.ts +1 -1
- package/lib/chat/viewModes.d.ts +1 -1
- package/lib/chat/viewModes.js +2 -2
- package/lib/chat/words.js +1 -1
- package/lib/client/mixins/RuntimesMixin.d.ts +3 -3
- package/lib/client/mixins/RuntimesMixin.js +3 -3
- package/lib/components/a2ui/custom/index.d.ts +3 -3
- package/lib/components/a2ui/custom/index.js +1 -1
- package/lib/components/a2ui/custom/sandbox.d.ts +2 -2
- package/lib/components/a2ui/custom/sandbox.js +2 -2
- package/lib/components/a2ui/datalayer/Chart.js +2 -2
- package/lib/components/a2ui/datalayer/Chat.js +1 -1
- package/lib/components/a2ui/datalayer/Download.js +1 -1
- package/lib/components/a2ui/datalayer/Evidence.js +1 -1
- package/lib/components/a2ui/datalayer/FileUpload.d.ts +1 -1
- package/lib/components/a2ui/datalayer/FileUpload.js +2 -2
- package/lib/components/a2ui/datalayer/Form.js +2 -2
- package/lib/components/a2ui/datalayer/SchemaForm.d.ts +1 -1
- package/lib/components/a2ui/datalayer/Table.js +1 -1
- package/lib/components/a2ui/datalayer/drawn.d.ts +1 -1
- package/lib/components/a2ui/datalayer/drawn.js +1 -1
- package/lib/components/a2ui/datalayer/formWidgets.js +1 -1
- package/lib/components/a2ui/datalayer/index.d.ts +1 -1
- package/lib/components/a2ui/datalayer/schema.d.ts +2 -2
- package/lib/components/a2ui/datalayer/schema.js +2 -2
- package/lib/components/a2ui/styles.js +1 -1
- package/lib/components/a2ui/visibleWhen.d.ts +3 -3
- package/lib/components/a2ui/visibleWhen.js +3 -3
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +1 -1
- package/lib/components/code-sandboxes/CodeSandboxLauncher.js +1 -1
- package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +1 -1
- package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +2 -2
- package/lib/components/inspector/a2aSpans.d.ts +1 -1
- package/lib/components/inspector/a2aSpans.js +1 -1
- package/lib/components/teams/A2ATeamGraph.d.ts +3 -3
- package/lib/components/teams/A2ATeamGraph.js +1 -3
- package/lib/components/teams/AnswerSurfaces.d.ts +1 -1
- package/lib/components/teams/NotebookPreview.d.ts +1 -1
- package/lib/components/teams/SceneTranscript.d.ts +1 -1
- package/lib/components/teams/SceneView.d.ts +1 -1
- package/lib/components/teams/a2aTeamFlow.d.ts +1 -1
- package/lib/components/teams/a2aTeamFlow.js +1 -1
- package/lib/components/teams/sceneStage.d.ts +1 -1
- package/lib/components/teams/sceneTranscript.d.ts +1 -1
- package/lib/components/teams/useA2ATeam.d.ts +5 -5
- package/lib/components/teams/useA2ATeam.js +3 -3
- package/lib/config/AgentConfiguration.d.ts +1 -1
- package/lib/examples/AssistantExample.d.ts +1 -1
- package/lib/examples/AssistantExample.js +1 -1
- package/lib/examples/AssistantGalleryExample.d.ts +1 -1
- package/lib/examples/AssistantGalleryExample.js +1 -1
- package/lib/examples/LoopAppComputerExample.d.ts +1 -1
- package/lib/examples/LoopAppComputerExample.js +1 -1
- package/lib/examples/ProtocolSignedRequestsExample.d.ts +1 -1
- package/lib/examples/ProtocolSignedRequestsExample.js +1 -1
- package/lib/examples/ProtocolUcpCheckoutExample.d.ts +1 -1
- package/lib/examples/ProtocolUcpCheckoutExample.js +1 -1
- package/lib/examples/ScenesExample.d.ts +1 -1
- package/lib/examples/ScenesExample.js +1 -1
- package/lib/examples/ShieldHarnessExample.d.ts +1 -1
- package/lib/examples/ShieldHarnessExample.js +1 -1
- package/lib/examples/ShieldPolicyExample.d.ts +1 -1
- package/lib/examples/ShieldPolicyExample.js +1 -1
- package/lib/examples/VoiceChatExample.d.ts +1 -1
- package/lib/examples/VoiceChatExample.js +1 -1
- package/lib/examples/example-selector.js +3 -3
- package/lib/examples/exampleGroups.js +3 -3
- package/lib/examples/pap/PapSignInDisplayView.d.ts +1 -1
- package/lib/examples/pap/PapSignInDisplayView.js +1 -1
- package/lib/examples/pap/papSignInCases.js +1 -1
- package/lib/examples/protocols/signedRequestsDemo.d.ts +1 -1
- package/lib/examples/protocols/signedRequestsDemo.js +1 -1
- package/lib/examples/protocols/ucpCheckoutDemo.d.ts +1 -1
- package/lib/examples/protocols/ucpCheckoutDemo.js +1 -1
- package/lib/examples/shield/shieldHarness.d.ts +1 -1
- package/lib/examples/shield/shieldPolicyDemo.d.ts +2 -2
- package/lib/examples/shield/shieldPolicyDemo.js +1 -1
- package/lib/examples/utils/assistantGallery.d.ts +1 -1
- package/lib/examples/utils/clippyJsCharacters.js +2 -2
- package/lib/examples/utils/testSpriteCharacter.js +2 -2
- package/lib/hooks/ownRoutes.d.ts +1 -1
- package/lib/hooks/useAgentRuntimes.d.ts +1 -1
- package/lib/hooks/useChat.js +1 -1
- package/lib/index.js +1 -1
- package/lib/loop-example-main.js +1 -1
- package/lib/models/Environment.d.ts +11 -11
- package/lib/models/Environment.js +1 -1
- package/lib/models/RuntimeDTO.d.ts +1 -1
- package/lib/portable/activity.d.ts +2 -2
- package/lib/portable/activity.js +3 -3
- package/lib/portable/adapterEvents.d.ts +1 -1
- package/lib/portable/agUiRefusal.d.ts +1 -1
- package/lib/portable/agUiRefusal.js +1 -1
- package/lib/portable/agui.d.ts +2 -2
- package/lib/portable/agui.js +2 -2
- package/lib/portable/approvalCard.d.ts +1 -1
- package/lib/portable/approvalCard.js +1 -1
- package/lib/portable/approvals.d.ts +2 -2
- package/lib/portable/approvals.js +1 -1
- package/lib/portable/conversation.d.ts +2 -2
- package/lib/portable/conversation.js +1 -1
- package/lib/portable/direct.d.ts +2 -2
- package/lib/portable/displays.d.ts +2 -2
- package/lib/portable/displays.js +3 -3
- package/lib/portable/fixtures.d.ts +4 -5
- package/lib/portable/fixtures.js +4 -5
- package/lib/portable/hosts/agentClient.d.ts +5 -6
- package/lib/portable/hosts/agentClient.js +7 -7
- package/lib/portable/hosts/approvalRenderers.d.ts +6 -7
- package/lib/portable/hosts/approvalRenderers.js +2 -3
- package/lib/portable/hosts/client.d.ts +9 -6
- package/lib/portable/hosts/client.js +9 -8
- package/lib/portable/hosts/contracts.d.ts +2 -4
- package/lib/portable/hosts/contracts.js +2 -4
- package/lib/portable/hosts/contracts.json +2 -2
- package/lib/portable/hosts/deadLetters.js +2 -2
- package/lib/portable/hosts/deliveries.d.ts +2 -3
- package/lib/portable/hosts/forbiddenGraph.d.ts +4 -4
- package/lib/portable/hosts/forbiddenGraph.js +4 -4
- package/lib/portable/hosts/health.d.ts +3 -4
- package/lib/portable/hosts/health.js +3 -4
- package/lib/portable/hosts/index.d.ts +1 -1
- package/lib/portable/hosts/index.js +1 -1
- package/lib/portable/hosts/observability.d.ts +1 -1
- package/lib/portable/hosts/observability.js +3 -4
- package/lib/portable/hosts/postgresQueue.d.ts +2 -2
- package/lib/portable/hosts/postgresQueue.js +3 -3
- package/lib/portable/hosts/queue.d.ts +1 -1
- package/lib/portable/hosts/quotas.d.ts +2 -2
- package/lib/portable/hosts/quotas.js +2 -2
- package/lib/portable/hosts/rateLimit.d.ts +1 -1
- package/lib/portable/hosts/resolution.d.ts +2 -2
- package/lib/portable/hosts/schema.d.ts +1 -1
- package/lib/portable/hosts/schema.js +1 -1
- package/lib/portable/hosts/secretCipher.d.ts +2 -2
- package/lib/portable/hosts/sessionUid.js +1 -2
- package/lib/portable/hosts/turnState.d.ts +1 -1
- package/lib/portable/index.js +12 -12
- package/lib/portable/lifecycle.d.ts +3 -3
- package/lib/portable/presence.d.ts +3 -3
- package/lib/portable/protectedInput.d.ts +1 -1
- package/lib/portable/records.d.ts +2 -2
- package/lib/portable/records.js +2 -2
- package/lib/portable/runMeasures.d.ts +1 -1
- package/lib/portable/runMeasures.js +1 -1
- package/lib/portable/runtimes.d.ts +1 -1
- package/lib/portable/semantic-events.json +1 -1
- package/lib/portable/semantic.d.ts +1 -1
- package/lib/portable/semantic.js +1 -1
- package/lib/portable/semanticOfAgUi.d.ts +2 -2
- package/lib/portable/semanticOfAgUi.js +1 -1
- package/lib/portable/signIn.d.ts +5 -5
- package/lib/portable/signIn.js +1 -1
- package/lib/portable/signInStatus.d.ts +1 -2
- package/lib/portable/signInStatus.js +1 -2
- package/lib/portable/thread.d.ts +2 -2
- package/lib/portable/thread.js +2 -2
- package/lib/portable/views.d.ts +5 -5
- package/lib/protocols/A2AAdapter.d.ts +1 -1
- package/lib/protocols/A2AAdapter.js +3 -3
- package/lib/protocols/AGUIAdapter.d.ts +1 -1
- package/lib/protocols/AGUIAdapter.js +2 -2
- package/lib/protocols/BrowserAgentAdapter.d.ts +2 -2
- package/lib/protocols/BrowserAgentAdapter.js +1 -1
- package/lib/protocols/VercelAIAdapter.js +2 -2
- package/lib/protocols/a2a/index.d.ts +1 -1
- package/lib/protocols/a2a/index.js +1 -1
- package/lib/protocols/agentProtocols.d.ts +1 -1
- package/lib/protocols/agentProtocols.js +1 -1
- package/lib/protocols/agentic-commerce/index.d.ts +2 -2
- package/lib/protocols/agentic-commerce/index.js +2 -2
- package/lib/protocols/commerce.d.ts +1 -1
- package/lib/protocols/commerce.js +3 -3
- package/lib/protocols/core.d.ts +3 -3
- package/lib/protocols/core.js +2 -2
- package/lib/protocols/mcp/client.js +1 -1
- package/lib/protocols/mcp/index.js +1 -1
- package/lib/protocols/pact/index.d.ts +6 -6
- package/lib/protocols/pact/index.js +6 -6
- package/lib/protocols/ucp/index.d.ts +2 -2
- package/lib/protocols/ucp/index.js +2 -2
- package/lib/protocols/ucp/merchant.js +1 -2
- package/lib/protocols/web-bot-auth/index.d.ts +1 -1
- package/lib/protocols/web-bot-auth/index.js +1 -1
- package/lib/protocols/web-bot-auth/tap.js +1 -1
- package/lib/runtimes/actions.js +2 -2
- package/lib/runtimes/apis.d.ts +3 -4
- package/lib/runtimes/browser/a2aPeer.d.ts +1 -1
- package/lib/runtimes/browser/a2aPeer.js +1 -1
- package/lib/runtimes/browser/protocol.d.ts +1 -1
- package/lib/runtimes/variants.d.ts +3 -3
- package/lib/runtimes/variants.js +4 -4
- package/lib/specs/agents/agents.js +2 -2
- package/lib/specs/apps.js +28 -28
- package/lib/specs/appspecSchema.js +62 -62
- package/lib/specs/harnesses.d.ts +1 -1
- package/lib/specs/harnesses.js +1 -1
- package/lib/specs/policies.d.ts +1 -1
- package/lib/specs/policies.js +2 -2
- package/lib/specs/protocols.d.ts +1 -1
- package/lib/specs/sceneSchema.js +4 -4
- package/lib/specs/scenes.js +4 -4
- package/lib/specs/standards.d.ts +1 -1
- package/lib/specs/ui.d.ts +2 -2
- package/lib/specs/ui.js +1 -1
- package/lib/specs/uiRenderers.d.ts +1 -1
- package/lib/specs/voices.d.ts +2 -2
- package/lib/specs/voices.js +2 -2
- package/lib/stories/loop/ReferenceScreens.js +1 -1
- package/lib/stories/loop/pictures-main.js +2 -2
- package/lib/test-setup.js +1 -1
- package/lib/types/agentspecs.d.ts +81 -85
- package/lib/types/chat.d.ts +26 -13
- package/lib/types/messages.d.ts +1 -1
- package/lib/types/protocol.d.ts +3 -3
- package/lib/types/scenes.d.ts +6 -6
- package/lib/types/teams.d.ts +3 -3
- package/lib/ui-plugins/MCPUIPlugin.d.ts +2 -2
- package/lib/ui-plugins/MCPUIPlugin.js +1 -1
- package/lib/voice/ComposerVoice.d.ts +5 -3
- package/lib/voice/ComposerVoice.js +4 -4
- package/lib/voice/HandsFree.d.ts +9 -3
- package/lib/voice/HandsFree.js +8 -3
- package/lib/voice/ReadAloud.d.ts +1 -1
- package/lib/voice/VoiceInput.d.ts +1 -2
- package/lib/voice/VoiceMenu.d.ts +1 -1
- package/lib/voice/captions.d.ts +1 -1
- package/lib/voice/captions.js +1 -1
- package/lib/voice/capture.d.ts +1 -1
- package/lib/voice/capture.js +1 -1
- package/lib/voice/chatVoice.d.ts +1 -1
- package/lib/voice/chatVoice.js +3 -3
- package/lib/voice/choices.d.ts +2 -2
- package/lib/voice/choices.js +2 -2
- package/lib/voice/consent.js +1 -1
- package/lib/voice/handsFree.d.ts +29 -4
- package/lib/voice/handsFree.js +32 -4
- package/lib/voice/hearing.d.ts +1 -1
- package/lib/voice/hearing.js +1 -1
- package/lib/voice/index.d.ts +2 -2
- package/lib/voice/pinned.d.ts +2 -2
- package/lib/voice/pinned.js +2 -2
- package/lib/voice/sayAloud.d.ts +2 -2
- package/lib/voice/sayAloud.js +2 -2
- package/lib/voice/sentences.d.ts +1 -1
- package/lib/voice/sentences.js +1 -1
- package/lib/voice/serverHearing.d.ts +8 -2
- package/lib/voice/serverHearing.js +37 -6
- package/lib/voice/settings.d.ts +2 -2
- package/lib/voice/settings.js +2 -2
- package/lib/voice/speaker.d.ts +10 -4
- package/lib/voice/speaker.js +5 -2
- package/lib/voice/types.d.ts +1 -1
- package/lib/voice/useSpokenAnswers.js +2 -2
- package/lib/voice/useVoiceSettings.js +1 -1
- package/lib/voice/useVoiceSpeaker.js +1 -1
- package/package.json +2 -2
- package/scripts/codegen/generate_agentic_commerce.sh +1 -1
- package/scripts/codegen/generate_agents.py +5 -5
- package/scripts/codegen/generate_apps.py +3 -3
- package/scripts/codegen/generate_harnesses.py +4 -4
- package/scripts/codegen/generate_mcp_servers.py +2 -2
- package/scripts/codegen/generate_policies.py +3 -3
- package/scripts/codegen/generate_protocols.py +3 -4
- package/scripts/codegen/generate_scenes.py +4 -4
- package/scripts/codegen/generate_standards.py +3 -3
- package/scripts/codegen/generate_teams.py +1 -1
- package/scripts/codegen/generate_ui.py +8 -8
- package/scripts/codegen/generate_ui_renderers.py +3 -3
- package/scripts/codegen/generate_voices.py +4 -4
- package/scripts/dist-embed.mjs +1 -1
- package/scripts/generate-environments-types.py +1 -1
- package/scripts/record-scene-checks.py +2 -2
- package/scripts/voice/measure.py +3 -3
- package/scripts/voice/pin_store.py +1 -1
- package/scripts/voice/serve_store.py +1 -1
- package/scripts/voice/transcribe.mjs +1 -1
package/lib/apps/apps/appspec.js
CHANGED
|
@@ -9,7 +9,7 @@ import { UI_RENDERER_CATALOGUE } from '../../specs/uiRenderers';
|
|
|
9
9
|
import { DEFAULT_MAX_FILES, DEFAULT_UPLOAD_MB } from './uploads';
|
|
10
10
|
/** The version of the spec itself. */
|
|
11
11
|
export const APP_SCHEMA = 'loop.app/v1';
|
|
12
|
-
/** The language an application's own words are in, unless it says (
|
|
12
|
+
/** The language an application's own words are in, unless it says (P-26). */
|
|
13
13
|
export const DEFAULT_LANGUAGE = 'en';
|
|
14
14
|
/** The face of an application that has not chosen one. */
|
|
15
15
|
export const DEFAULT_EMOJI = '\u{1F440}';
|
|
@@ -23,7 +23,7 @@ export const APP_ACCENTS = [
|
|
|
23
23
|
'violet',
|
|
24
24
|
];
|
|
25
25
|
/**
|
|
26
|
-
* The themes an application may run in (
|
|
26
|
+
* The themes an application may run in (T-30): Appearance's, as
|
|
27
27
|
* primer-addons lists them (`themeVariants`), in its order.
|
|
28
28
|
*/
|
|
29
29
|
export const APP_THEME_VARIANTS = [
|
|
@@ -39,7 +39,7 @@ export const APP_THEME_VARIANTS = [
|
|
|
39
39
|
];
|
|
40
40
|
/** The colour modes a theme is worn in. */
|
|
41
41
|
export const APP_THEME_MODES = ['light', 'dark', 'auto'];
|
|
42
|
-
/** The four ways an application sits in another product's page (
|
|
42
|
+
/** The four ways an application sits in another product's page (D-07). */
|
|
43
43
|
export const APP_EMBED_MODES = [
|
|
44
44
|
'inline',
|
|
45
45
|
'bubble',
|
|
@@ -47,7 +47,7 @@ export const APP_EMBED_MODES = [
|
|
|
47
47
|
'assistant',
|
|
48
48
|
];
|
|
49
49
|
/**
|
|
50
|
-
* How an Appspec names the character of its floating assistant (
|
|
50
|
+
* How an Appspec names the character of its floating assistant (T-24):
|
|
51
51
|
* the id a plugin contributes it under, `paperclip` or `acme-owl` — as
|
|
52
52
|
* agentspecs' `ASSISTANT_CHARACTER_ID`. Which ids exist is what the enabled
|
|
53
53
|
* plugins contribute (`assistantCharacterNamed`), not the spec's to say.
|
|
@@ -77,7 +77,7 @@ export const DEFAULT_LAYOUTS = {
|
|
|
77
77
|
/** The media type of an answer drawn as A2UI surfaces. */
|
|
78
78
|
export const A2UI_OUTPUT = 'application/json+a2ui';
|
|
79
79
|
/**
|
|
80
|
-
* The UI plugins an application is drawn with (
|
|
80
|
+
* The UI plugins an application is drawn with (R8), as its `ui`
|
|
81
81
|
* lists them: what `appPreset` mounts for it. A decision: its page alone,
|
|
82
82
|
* drawn by its host. Every other kind: the conversation — `chat`, which
|
|
83
83
|
* stands for the conversation base the runtime mounts — then the A2UI
|
|
@@ -136,7 +136,7 @@ const texts = (value) => Array.isArray(value)
|
|
|
136
136
|
: [];
|
|
137
137
|
const records = (value) => Array.isArray(value) ? value.filter(isData) : [];
|
|
138
138
|
/**
|
|
139
|
-
* An application's UI plugins as its document says them (
|
|
139
|
+
* An application's UI plugins as its document says them (R8):
|
|
140
140
|
* `{plugin, renderer}` each. Anything else — a bare id, the old shape — is
|
|
141
141
|
* not read as a plugin: `parseAppspec` refuses it (`uiShapeProblems`).
|
|
142
142
|
*/
|
|
@@ -160,7 +160,7 @@ const uiShapeProblems = (value) => Array.isArray(value)
|
|
|
160
160
|
: '.'))
|
|
161
161
|
: [];
|
|
162
162
|
/**
|
|
163
|
-
* One turn of a test's conversation as its document says it (
|
|
163
|
+
* One turn of a test's conversation as its document says it (E-01):
|
|
164
164
|
* what it says, chooses or presses, with a press's payload; nothing it does
|
|
165
165
|
* not say.
|
|
166
166
|
*/
|
|
@@ -202,7 +202,7 @@ export function emptyAppspec(kind = 'chat') {
|
|
|
202
202
|
contents: [],
|
|
203
203
|
connections: [],
|
|
204
204
|
protocols: [],
|
|
205
|
-
// A blank application starts with its kind's UI plugins (
|
|
205
|
+
// A blank application starts with its kind's UI plugins (R8).
|
|
206
206
|
ui: uiFor(kind),
|
|
207
207
|
rules: [],
|
|
208
208
|
permissions: {
|
|
@@ -299,9 +299,9 @@ const KNOWN_KEYS = [
|
|
|
299
299
|
'avatar',
|
|
300
300
|
'banner',
|
|
301
301
|
];
|
|
302
|
-
/** Where a check of its code runs (
|
|
302
|
+
/** Where a check of its code runs (P-06). */
|
|
303
303
|
const CHECK_STAGES = ['answer', 'tool_call'];
|
|
304
|
-
/** A tool of its own, written in its code (
|
|
304
|
+
/** A tool of its own, written in its code (P-06); a wrong one is said by the checks. */
|
|
305
305
|
function parseTool(data) {
|
|
306
306
|
return {
|
|
307
307
|
name: text(data.name),
|
|
@@ -320,7 +320,7 @@ function parseConnection(data) {
|
|
|
320
320
|
only: texts(data.only),
|
|
321
321
|
};
|
|
322
322
|
}
|
|
323
|
-
/** The Personal Agent Protocol profiles Datalayer speaks, as agentspecs' `PAP_PROFILES` (
|
|
323
|
+
/** The Personal Agent Protocol profiles Datalayer speaks, as agentspecs' `PAP_PROFILES` (S-03). */
|
|
324
324
|
export const PAP_PROFILES = ['draft-01'];
|
|
325
325
|
/** The profile a `pap` block is written for when the Studio or a builder starts one. */
|
|
326
326
|
export const PAP_PROFILE = PAP_PROFILES[PAP_PROFILES.length - 1];
|
|
@@ -348,7 +348,7 @@ const enumsOf = (value, allowed, otherwise) => {
|
|
|
348
348
|
return value.filter((item) => allowed.includes(item));
|
|
349
349
|
};
|
|
350
350
|
/**
|
|
351
|
-
* Personal Agent Protocol (
|
|
351
|
+
* Personal Agent Protocol (S-01): the companies the
|
|
352
352
|
* application works with, and whether it is one. Defaults are agentspecs'.
|
|
353
353
|
*/
|
|
354
354
|
function parsePap(data) {
|
|
@@ -385,7 +385,7 @@ function parsePap(data) {
|
|
|
385
385
|
},
|
|
386
386
|
};
|
|
387
387
|
}
|
|
388
|
-
/** A standing permission an operation gives (
|
|
388
|
+
/** A standing permission an operation gives (R-07), as agentspecs reads it. */
|
|
389
389
|
function parsePapStanding(data) {
|
|
390
390
|
return {
|
|
391
391
|
connection: text(data.connection),
|
|
@@ -452,7 +452,7 @@ function dumpPap(pap) {
|
|
|
452
452
|
.text('summary', operation.summary, '\u0000')
|
|
453
453
|
.value('user_approval_required', operation.userApprovalRequired, true).data)).data).data;
|
|
454
454
|
}
|
|
455
|
-
/** PACT (
|
|
455
|
+
/** PACT (PI-01): the businesses it asks for each person, and as one (PR-13). */
|
|
456
456
|
function parsePact(data) {
|
|
457
457
|
const business = isData(data.business) ? data.business : {};
|
|
458
458
|
const scopes = {};
|
|
@@ -480,7 +480,7 @@ function parsePact(data) {
|
|
|
480
480
|
},
|
|
481
481
|
};
|
|
482
482
|
}
|
|
483
|
-
/** Commerce (
|
|
483
|
+
/** Commerce (PI-01): the merchants it shops at for each person. */
|
|
484
484
|
function parseCommerce(data) {
|
|
485
485
|
return {
|
|
486
486
|
merchants: records(data.merchants).map(merchant => ({
|
|
@@ -515,7 +515,7 @@ function dumpCommerce(commerce) {
|
|
|
515
515
|
}
|
|
516
516
|
: {}).data)).data;
|
|
517
517
|
}
|
|
518
|
-
/** Signed fetch (
|
|
518
|
+
/** Signed fetch (EX-11): the exact sites it reads pages of, each request signed. */
|
|
519
519
|
function parseSignedFetch(data) {
|
|
520
520
|
return {
|
|
521
521
|
sites: records(data.sites).map(site => ({
|
|
@@ -532,7 +532,7 @@ function dumpSignedFetch(signedFetch) {
|
|
|
532
532
|
.text('id', site.id, '\u0000')
|
|
533
533
|
.text('site', site.site, '\u0000').data)).data;
|
|
534
534
|
}
|
|
535
|
-
/** One of a pair of examples (
|
|
535
|
+
/** One of a pair of examples (PR-13): its id and its side, or a problem. */
|
|
536
536
|
function parsePair(data) {
|
|
537
537
|
const id = text(data.id);
|
|
538
538
|
const role = text(data.role);
|
|
@@ -569,7 +569,7 @@ function dumpPact(pact) {
|
|
|
569
569
|
.text('issuer', agent.issuer, '\u0000')
|
|
570
570
|
.text('jwks_uri', agent.jwksUri, '\u0000').data)).data).data;
|
|
571
571
|
}
|
|
572
|
-
/** A2A (
|
|
572
|
+
/** A2A (PR-02): the extensions its Agent Card advertises. */
|
|
573
573
|
function parseA2A(data) {
|
|
574
574
|
return {
|
|
575
575
|
extensions: records(data.extensions).map(extension => ({
|
|
@@ -599,8 +599,8 @@ function parseRule(data) {
|
|
|
599
599
|
behaviour: oneOf(data.behaviour, BEHAVIOURS, 'ask_first'),
|
|
600
600
|
};
|
|
601
601
|
}
|
|
602
|
-
/** A slash command (
|
|
603
|
-
/** An action of its code, typed (
|
|
602
|
+
/** A slash command (P-19); a wrong one is said by the checks. */
|
|
603
|
+
/** An action of its code, typed (RU-5): its payload's schema kept as written. */
|
|
604
604
|
function parseAction(data) {
|
|
605
605
|
const action = { name: text(data.name) };
|
|
606
606
|
if (text(data.description)) {
|
|
@@ -631,7 +631,7 @@ function parseModeOption(data) {
|
|
|
631
631
|
}
|
|
632
632
|
return option;
|
|
633
633
|
}
|
|
634
|
-
/** A mode switch (
|
|
634
|
+
/** A mode switch (P-19). */
|
|
635
635
|
function parseMode(data) {
|
|
636
636
|
const mode = {
|
|
637
637
|
id: text(data.id),
|
|
@@ -643,7 +643,7 @@ function parseMode(data) {
|
|
|
643
643
|
}
|
|
644
644
|
return mode;
|
|
645
645
|
}
|
|
646
|
-
/** A starter, its category said only when it has one (
|
|
646
|
+
/** A starter, its category said only when it has one (P-20). */
|
|
647
647
|
function parseStarter(data) {
|
|
648
648
|
const starter = {
|
|
649
649
|
label: text(data.label),
|
|
@@ -654,7 +654,7 @@ function parseStarter(data) {
|
|
|
654
654
|
}
|
|
655
655
|
return starter;
|
|
656
656
|
}
|
|
657
|
-
/** One of several assistants in one application (
|
|
657
|
+
/** One of several assistants in one application (P-20). */
|
|
658
658
|
function parseProfile(data) {
|
|
659
659
|
return {
|
|
660
660
|
id: text(data.id),
|
|
@@ -674,7 +674,7 @@ function recordsBy(value) {
|
|
|
674
674
|
return Object.fromEntries(Object.entries(isData(value) ? value : {}).filter((entry) => isData(entry[1])));
|
|
675
675
|
}
|
|
676
676
|
const mapValues = (value, map) => Object.fromEntries(Object.entries(value).map(([key, item]) => [key, map(item)]));
|
|
677
|
-
/** An application's words in one other language (
|
|
677
|
+
/** An application's words in one other language (P-26), every key present. */
|
|
678
678
|
function parseTranslation(data) {
|
|
679
679
|
return {
|
|
680
680
|
name: text(data.name),
|
|
@@ -713,7 +713,7 @@ function parseSurface(data) {
|
|
|
713
713
|
composedAt: text(data.composed_at),
|
|
714
714
|
};
|
|
715
715
|
}
|
|
716
|
-
/** An application's voice (
|
|
716
|
+
/** An application's voice (VO-41): off unless said. */
|
|
717
717
|
export const DEFAULT_VOICE = {
|
|
718
718
|
enabled: false,
|
|
719
719
|
input: 'push_to_talk',
|
|
@@ -743,7 +743,7 @@ function parseUploads(data) {
|
|
|
743
743
|
maxFiles: numberOf(data.max_files, DEFAULT_MAX_FILES),
|
|
744
744
|
};
|
|
745
745
|
}
|
|
746
|
-
/** What a page's output may be drawn with (
|
|
746
|
+
/** What a page's output may be drawn with (P-05), and the property of each that shows its value. */
|
|
747
747
|
export const PAGE_OUTPUT_SHOWS = {
|
|
748
748
|
Text: 'text',
|
|
749
749
|
Image: 'url',
|
|
@@ -753,7 +753,7 @@ export const PAGE_OUTPUT_SHOWS = {
|
|
|
753
753
|
/** The height of a component its developer wrote (P-17), unless it says. */
|
|
754
754
|
export const DEFAULT_CUSTOM_HEIGHT = 240;
|
|
755
755
|
/**
|
|
756
|
-
* A component its developer wrote (
|
|
756
|
+
* A component its developer wrote (P-17), as written: its schema and
|
|
757
757
|
* example kept whole, so that the checks say what is wrong with them.
|
|
758
758
|
*/
|
|
759
759
|
function parseCustomComponent(data) {
|
|
@@ -924,7 +924,7 @@ function parseDecision(data) {
|
|
|
924
924
|
decisionModel: text(data.decision_model),
|
|
925
925
|
};
|
|
926
926
|
}
|
|
927
|
-
/** What it is tried on before it is anybody's (
|
|
927
|
+
/** What it is tried on before it is anybody's (E-06, E-11): read only. */
|
|
928
928
|
function parseSamples(data) {
|
|
929
929
|
return {
|
|
930
930
|
documents: records(data.documents).map(document => ({
|
|
@@ -1025,7 +1025,7 @@ export function parseAppspec(document) {
|
|
|
1025
1025
|
const verified = isData(tests.verified) ? tests.verified : {};
|
|
1026
1026
|
const record = isData(data.record) ? data.record : {};
|
|
1027
1027
|
const checks = isData(data.checks) ? data.checks : {};
|
|
1028
|
-
// A check of its code runs on an answer or a tool call (
|
|
1028
|
+
// A check of its code runs on an answer or a tool call (P-06).
|
|
1029
1029
|
for (const check of records(checks.code)) {
|
|
1030
1030
|
if (!CHECK_STAGES.includes(check.on)) {
|
|
1031
1031
|
problems.push(`The check \`${text(check.name)}\` of its code runs on answer or tool_call, not \`${String(check.on)}\`.`);
|
|
@@ -1074,12 +1074,12 @@ export function parseAppspec(document) {
|
|
|
1074
1074
|
evalset: text(tests.evalset),
|
|
1075
1075
|
cases: records(tests.cases).map(testCase => ({
|
|
1076
1076
|
ask: text(testCase.ask),
|
|
1077
|
-
// A conversation, turn by turn, when it is one (
|
|
1077
|
+
// A conversation, turn by turn, when it is one (E-01).
|
|
1078
1078
|
...(records(testCase.turns).length
|
|
1079
1079
|
? { turns: records(testCase.turns).map(parseTestTurn) }
|
|
1080
1080
|
: {}),
|
|
1081
1081
|
expect: text(testCase.expect),
|
|
1082
|
-
// Decided by its code (
|
|
1082
|
+
// Decided by its code (P-06), when it names the function.
|
|
1083
1083
|
...(text(testCase.code) ? { code: text(testCase.code) } : {}),
|
|
1084
1084
|
// Given files with what it is asked, when it is.
|
|
1085
1085
|
...(records(testCase.files).length
|
|
@@ -1133,7 +1133,7 @@ export function parseAppspec(document) {
|
|
|
1133
1133
|
app.decision = parseDecision(data.decision);
|
|
1134
1134
|
}
|
|
1135
1135
|
// A `pap` block names a profile Datalayer speaks, or it is refused and not
|
|
1136
|
-
// read (
|
|
1136
|
+
// read (S-03); a block saying nothing is no block.
|
|
1137
1137
|
if (isData(data.pap) && Object.keys(data.pap).length > 0) {
|
|
1138
1138
|
const problem = papProfileProblem(data.pap.profile);
|
|
1139
1139
|
if (problem) {
|
|
@@ -1168,7 +1168,7 @@ export function parseAppspec(document) {
|
|
|
1168
1168
|
return { app, problems };
|
|
1169
1169
|
}
|
|
1170
1170
|
/**
|
|
1171
|
-
* What is wrong with the UI plugins an application names (
|
|
1171
|
+
* What is wrong with the UI plugins an application names (R8), in
|
|
1172
1172
|
* the sentences agentspecs says (`ui_choices_problems`): a plugin the
|
|
1173
1173
|
* catalogue does not have or said twice — a renderer named as a plugin is
|
|
1174
1174
|
* refused —, a renderer the catalogue does not have or the plugin may not be
|
|
@@ -1213,7 +1213,7 @@ export function uiProblems(app) {
|
|
|
1213
1213
|
}
|
|
1214
1214
|
/**
|
|
1215
1215
|
* What is wrong with the protocols an application says it speaks
|
|
1216
|
-
* (
|
|
1216
|
+
* (PS-02), as agentspecs says it: an id the catalogue does not
|
|
1217
1217
|
* know or said twice, a planned protocol while it is offered, and a `pap`,
|
|
1218
1218
|
* `pact`, `a2a` or `signed_fetch` block configuring a protocol it does not list.
|
|
1219
1219
|
*/
|
|
@@ -1545,7 +1545,7 @@ export function dumpAppspec(app) {
|
|
|
1545
1545
|
.value('ready_at', app.tests.readyAt, DEFAULT_READY_AT)
|
|
1546
1546
|
.text('evalset', app.tests.evalset)
|
|
1547
1547
|
.list('cases', app.tests.cases.map(testCase => ({
|
|
1548
|
-
// One message, or a conversation in its place (
|
|
1548
|
+
// One message, or a conversation in its place (E-01).
|
|
1549
1549
|
...(testCase.turns?.length
|
|
1550
1550
|
? {
|
|
1551
1551
|
turns: testCase.turns.map(turn => parseTestTurn({ ...turn })),
|
|
@@ -10,34 +10,43 @@ export interface AppCheck {
|
|
|
10
10
|
setup: string[];
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* The component a layout names (
|
|
13
|
+
* The component a layout names (C-13), from the catalogs of the enabled
|
|
14
14
|
* UI specs, by the name a surface gives it.
|
|
15
15
|
*/
|
|
16
16
|
export declare const componentNamed: (name: string) => ComponentSpec | undefined;
|
|
17
17
|
/**
|
|
18
|
-
* What its code declares that agentspecs refuses (
|
|
18
|
+
* What its code declares that agentspecs refuses (P-06): its tools,
|
|
19
19
|
* its checks and the tests it decides, each by a Python name, each name
|
|
20
20
|
* once; a tool says what it does, by class, each class once.
|
|
21
21
|
*/
|
|
22
22
|
export declare function ownCodeProblems(app: AppSpec): string[];
|
|
23
23
|
/**
|
|
24
|
-
* What agentspecs refuses of a widget's page written in its code (
|
|
25
|
-
* P-05): a page that is not a widget's, inputs that are not a form, outputs
|
|
24
|
+
* What agentspecs refuses of a widget's page written in its code (P-05): a page that is not a widget's, inputs that are not a form, outputs
|
|
26
25
|
* of one name twice, drawn with another component, saying in their `props`
|
|
27
26
|
* what their value fills or lacking what their component needs, and an input
|
|
28
27
|
* named as a setting — both are on the page at `/inputs/<name>`.
|
|
29
28
|
*/
|
|
30
29
|
export declare function pageProblems(app: AppSpec): string[];
|
|
30
|
+
/** What the spec says of itself that the tolerant reader lets through. */
|
|
31
|
+
/** What was said aloud is kept 30 days at most (VO-63): agentspecs' `AUDIO_KEPT_DAYS_AT_MOST`. */
|
|
32
|
+
export declare const AUDIO_KEPT_DAYS_AT_MOST = 30;
|
|
33
|
+
/**
|
|
34
|
+
* agentspecs' refusals of an application keeping audio (VO-42, VO-63),
|
|
35
|
+
* in its sentences: never public, only when it listens, and never
|
|
36
|
+
* kept longer than 30 days — by `record.keep_for`, or by the Track its
|
|
37
|
+
* `checks.track` names, whose retention wins.
|
|
38
|
+
*/
|
|
39
|
+
export declare function keptAudioProblems(app: AppSpec): string[];
|
|
31
40
|
/** How an organization's own context is named: never a catalogue id (agentspecs' `ORGANIZATION_FRAME_PREFIX`). */
|
|
32
41
|
/**
|
|
33
|
-
* What stops a Form block from asking (
|
|
42
|
+
* What stops a Form block from asking (C-16), in agentspecs'
|
|
34
43
|
* `form_problems` sentences: its schema is an object of named fields, each
|
|
35
44
|
* required one among them, so that the page draws it and the runtime checks
|
|
36
45
|
* what it receives against the same schema.
|
|
37
46
|
*/
|
|
38
47
|
export declare function formProblems(node: Record<string, unknown>): string[];
|
|
39
48
|
export declare const ORGANIZATION_FRAME_PREFIX = "org-";
|
|
40
|
-
/** Whether a reference names an organization's own context rather than the catalogue's (
|
|
49
|
+
/** Whether a reference names an organization's own context rather than the catalogue's (U-32). */
|
|
41
50
|
export declare const isOrganizationFrame: (ref: string) => boolean;
|
|
42
51
|
/**
|
|
43
52
|
* The Guards the runtime executes (agent-runtimes `loop/apps/guards.py`): the
|
|
@@ -49,7 +58,7 @@ export declare const EXECUTED_GUARDS: readonly string[];
|
|
|
49
58
|
* Where an application is checked: the plugins its organization has turned
|
|
50
59
|
* off (catalogue ids, `plugins_off` in IAM), none when it has decided nothing
|
|
51
60
|
* or the checks run with no organization; and the ids of its organization's
|
|
52
|
-
* contexts (`frames` in IAM: its versions and its own,
|
|
61
|
+
* contexts (`frames` in IAM: its versions and its own, U-32), unsaid
|
|
53
62
|
* when no organization is known — a context of an organization's own is then
|
|
54
63
|
* refused.
|
|
55
64
|
*/
|
package/lib/apps/apps/checks.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
* The instant checks of an application (
|
|
6
|
+
* The instant checks of an application (V-01 to V-04): what an editor
|
|
7
7
|
* shows on every change, with no model call.
|
|
8
8
|
*
|
|
9
9
|
* The same checks `loop apps validate` runs with agentspecs, in the words it
|
|
@@ -57,7 +57,7 @@ const idOf = (ref) => {
|
|
|
57
57
|
return at > 0 && ref.slice(at + 1).includes('.') ? ref.slice(0, at) : ref;
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
60
|
-
* The component a layout names (
|
|
60
|
+
* The component a layout names (C-13), from the catalogs of the enabled
|
|
61
61
|
* UI specs, by the name a surface gives it.
|
|
62
62
|
*/
|
|
63
63
|
export const componentNamed = (name) => getComponent(name);
|
|
@@ -88,7 +88,7 @@ const matches = (name, pattern) => new RegExp('^' +
|
|
|
88
88
|
/** The name of a function of an application's code (agentspecs' `CODE_NAME`). */
|
|
89
89
|
const CODE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
90
90
|
/**
|
|
91
|
-
* What its code declares that agentspecs refuses (
|
|
91
|
+
* What its code declares that agentspecs refuses (P-06): its tools,
|
|
92
92
|
* its checks and the tests it decides, each by a Python name, each name
|
|
93
93
|
* once; a tool says what it does, by class, each class once.
|
|
94
94
|
*/
|
|
@@ -137,8 +137,7 @@ export function ownCodeProblems(app) {
|
|
|
137
137
|
return problems;
|
|
138
138
|
}
|
|
139
139
|
/**
|
|
140
|
-
* What agentspecs refuses of a widget's page written in its code (
|
|
141
|
-
* P-05): a page that is not a widget's, inputs that are not a form, outputs
|
|
140
|
+
* What agentspecs refuses of a widget's page written in its code (P-05): a page that is not a widget's, inputs that are not a form, outputs
|
|
142
141
|
* of one name twice, drawn with another component, saying in their `props`
|
|
143
142
|
* what their value fills or lacking what their component needs, and an input
|
|
144
143
|
* named as a setting — both are on the page at `/inputs/<name>`.
|
|
@@ -210,6 +209,45 @@ export function pageProblems(app) {
|
|
|
210
209
|
return problems;
|
|
211
210
|
}
|
|
212
211
|
/** What the spec says of itself that the tolerant reader lets through. */
|
|
212
|
+
/** What was said aloud is kept 30 days at most (VO-63): agentspecs' `AUDIO_KEPT_DAYS_AT_MOST`. */
|
|
213
|
+
export const AUDIO_KEPT_DAYS_AT_MOST = 30;
|
|
214
|
+
/**
|
|
215
|
+
* agentspecs' refusals of an application keeping audio (VO-42, VO-63),
|
|
216
|
+
* in its sentences: never public, only when it listens, and never
|
|
217
|
+
* kept longer than 30 days — by `record.keep_for`, or by the Track its
|
|
218
|
+
* `checks.track` names, whose retention wins.
|
|
219
|
+
*/
|
|
220
|
+
export function keptAudioProblems(app) {
|
|
221
|
+
if (!app.record.include.includes('audio')) {
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
if (app.deployment.hosted?.visibility === 'public') {
|
|
225
|
+
return [
|
|
226
|
+
'A public application keeps no audio: remove `audio` from `record.include`, or open it to fewer people.',
|
|
227
|
+
];
|
|
228
|
+
}
|
|
229
|
+
const voice = app.interface.voice;
|
|
230
|
+
if (!voice?.enabled || voice.input === 'off') {
|
|
231
|
+
return [
|
|
232
|
+
'An application keeps audio only when it listens: turn `interface.voice` on.',
|
|
233
|
+
];
|
|
234
|
+
}
|
|
235
|
+
let days = app.record.retentionDays;
|
|
236
|
+
let keeper = `\`record.keep_for\` (${app.record.keepFor})`;
|
|
237
|
+
const track = app.checks.track.trim()
|
|
238
|
+
? getTrack(app.checks.track)
|
|
239
|
+
: undefined;
|
|
240
|
+
if (track) {
|
|
241
|
+
days = track.retentionDays;
|
|
242
|
+
keeper = `its Track ${track.id} (${track.retainFor})`;
|
|
243
|
+
}
|
|
244
|
+
if (days > AUDIO_KEPT_DAYS_AT_MOST) {
|
|
245
|
+
return [
|
|
246
|
+
`Audio is kept ${AUDIO_KEPT_DAYS_AT_MOST} days at most, and ${keeper} keeps the record ${days} days: keep it \`${AUDIO_KEPT_DAYS_AT_MOST}_days\` or less, or remove \`audio\` from \`record.include\`.`,
|
|
247
|
+
];
|
|
248
|
+
}
|
|
249
|
+
return [];
|
|
250
|
+
}
|
|
213
251
|
function shapeProblems(app) {
|
|
214
252
|
const problems = [];
|
|
215
253
|
if (!app.id.trim()) {
|
|
@@ -224,7 +262,7 @@ function shapeProblems(app) {
|
|
|
224
262
|
if (Boolean(app.agent) === Boolean(app.team)) {
|
|
225
263
|
problems.push('An application names who does the work: an `agent`, or a `team`, and not both.');
|
|
226
264
|
}
|
|
227
|
-
// agentspecs refuses either way round (
|
|
265
|
+
// agentspecs refuses either way round (E-01): off says why, on says nothing.
|
|
228
266
|
const because = (app.unavailable_because ?? '').trim();
|
|
229
267
|
if (!app.enabled && !because) {
|
|
230
268
|
problems.push('An application that is not offered says why, under `unavailable_because`.');
|
|
@@ -249,7 +287,8 @@ function shapeProblems(app) {
|
|
|
249
287
|
else if (app.triggers.length > 0) {
|
|
250
288
|
problems.push(`A ${app.kind} application starts when somebody opens it: \`triggers\` are a worker's.`);
|
|
251
289
|
}
|
|
252
|
-
|
|
290
|
+
problems.push(...keptAudioProblems(app));
|
|
291
|
+
// Its profiles (P-20): two at least, or none; each id slash-safe and
|
|
253
292
|
// said once, each with a label.
|
|
254
293
|
const profiles = app.interface.profiles ?? [];
|
|
255
294
|
if (profiles.length === 1) {
|
|
@@ -317,7 +356,7 @@ function shapeProblems(app) {
|
|
|
317
356
|
}
|
|
318
357
|
}
|
|
319
358
|
}
|
|
320
|
-
// What its code declares (
|
|
359
|
+
// What its code declares (P-06), as agentspecs refuses it.
|
|
321
360
|
problems.push(...ownCodeProblems(app));
|
|
322
361
|
const servers = app.connections.map(connection => idOf(connection.server));
|
|
323
362
|
if (new Set(servers).size !== servers.length) {
|
|
@@ -345,7 +384,7 @@ function shapeProblems(app) {
|
|
|
345
384
|
}
|
|
346
385
|
/** How an organization's own context is named: never a catalogue id (agentspecs' `ORGANIZATION_FRAME_PREFIX`). */
|
|
347
386
|
/**
|
|
348
|
-
* What stops a Form block from asking (
|
|
387
|
+
* What stops a Form block from asking (C-16), in agentspecs'
|
|
349
388
|
* `form_problems` sentences: its schema is an object of named fields, each
|
|
350
389
|
* required one among them, so that the page draws it and the runtime checks
|
|
351
390
|
* what it receives against the same schema.
|
|
@@ -385,7 +424,7 @@ export function formProblems(node) {
|
|
|
385
424
|
}
|
|
386
425
|
const isPlainRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
387
426
|
export const ORGANIZATION_FRAME_PREFIX = 'org-';
|
|
388
|
-
/** Whether a reference names an organization's own context rather than the catalogue's (
|
|
427
|
+
/** Whether a reference names an organization's own context rather than the catalogue's (U-32). */
|
|
389
428
|
export const isOrganizationFrame = (ref) => idOf(ref).startsWith(ORGANIZATION_FRAME_PREFIX);
|
|
390
429
|
/**
|
|
391
430
|
* Every reference that does not resolve, in sentences. A context of an
|
|
@@ -399,7 +438,7 @@ function referenceProblems(app, organizationFrames) {
|
|
|
399
438
|
missing('agent or Cog', app.agent);
|
|
400
439
|
}
|
|
401
440
|
// An agent on a catalogue harness is served by the runtime's ACP adapter
|
|
402
|
-
// (
|
|
441
|
+
// (SH-10); `custom` and a harness that is none are refused, not run
|
|
403
442
|
// on pydantic-ai in their place (SH-01).
|
|
404
443
|
const agent = app.agent ? getAgentspecs(idOf(app.agent)) : undefined;
|
|
405
444
|
const unserved = agent ? unservedHarnessProblem(agent) : undefined;
|
|
@@ -455,13 +494,13 @@ function referenceProblems(app, organizationFrames) {
|
|
|
455
494
|
if (app.model && !getModel(app.model)) {
|
|
456
495
|
missing('model', app.model);
|
|
457
496
|
}
|
|
458
|
-
// The model a profile runs on is the catalogue's (
|
|
497
|
+
// The model a profile runs on is the catalogue's (P-20).
|
|
459
498
|
for (const profile of app.interface.profiles ?? []) {
|
|
460
499
|
if (profile.model && !getModel(profile.model)) {
|
|
461
500
|
problems.push(`The profile “${profile.id}” runs on “${profile.model}”, which is no model.`);
|
|
462
501
|
}
|
|
463
502
|
}
|
|
464
|
-
// The model a mode runs on is the catalogue's (
|
|
503
|
+
// The model a mode runs on is the catalogue's (P-19).
|
|
465
504
|
for (const mode of app.interface.modes ?? []) {
|
|
466
505
|
for (const option of mode.options) {
|
|
467
506
|
if (option.model && !getModel(option.model)) {
|
|
@@ -527,7 +566,7 @@ function referenceProblems(app, organizationFrames) {
|
|
|
527
566
|
if (server === undefined) {
|
|
528
567
|
if (hostTools.includes(target))
|
|
529
568
|
continue;
|
|
530
|
-
// A tool of its own, written in its code (
|
|
569
|
+
// A tool of its own, written in its code (P-06).
|
|
531
570
|
if ((app.tools ?? []).some(tool => tool.name === target))
|
|
532
571
|
continue;
|
|
533
572
|
if (!getBackendToolSpec(name)) {
|
|
@@ -579,7 +618,7 @@ function attentionNotes(app) {
|
|
|
579
618
|
if (app.record.include.length === 0) {
|
|
580
619
|
notes.push('It keeps no record of what it did.');
|
|
581
620
|
}
|
|
582
|
-
// A Guard the runtime does not run checks nothing (
|
|
621
|
+
// A Guard the runtime does not run checks nothing (R-06): said here,
|
|
583
622
|
// where the builder decides, rather than found out in production.
|
|
584
623
|
for (const ref of app.checks.guards) {
|
|
585
624
|
const guard = own(GUARD_CATALOGUE, idOf(ref));
|
|
@@ -690,6 +729,11 @@ const ENUMS = {
|
|
|
690
729
|
'sources',
|
|
691
730
|
'outputs',
|
|
692
731
|
'feedback',
|
|
732
|
+
// agentspecs' RecordItem whole: audio (VO-42, VO-63, refused by keptAudioProblems unless allowed),
|
|
733
|
+
// a harness's diffs and terminals.
|
|
734
|
+
'audio',
|
|
735
|
+
'diffs',
|
|
736
|
+
'terminals',
|
|
693
737
|
],
|
|
694
738
|
visibility: ['private', 'invited', 'organization', 'link', 'public'],
|
|
695
739
|
mode: ['inline', 'bubble', 'panel', 'assistant'],
|
|
@@ -852,7 +896,7 @@ export function documentShapeProblems(document) {
|
|
|
852
896
|
if (ui.assistant !== undefined && !isAssistantCharacterId(ui.assistant)) {
|
|
853
897
|
at('interface.assistant', 'names a character by the id a plugin contributes it under, lowercase words joined by a hyphen: `paperclip`, `acme-owl`');
|
|
854
898
|
}
|
|
855
|
-
// Its voice (
|
|
899
|
+
// Its voice (VO-41, VO-12).
|
|
856
900
|
mapping(ui.voice, 'interface.voice', voice => {
|
|
857
901
|
oneOf(voice.input, ENUMS.voiceInput, 'interface.voice.input');
|
|
858
902
|
oneOf(voice.output, ENUMS.voiceOutput, 'interface.voice.output');
|
|
@@ -867,7 +911,7 @@ export function documentShapeProblems(document) {
|
|
|
867
911
|
unknownKeys(item, ['label', 'message', 'category'], where, 'a starter');
|
|
868
912
|
};
|
|
869
913
|
records(ui.starters, 'interface.starters', starter);
|
|
870
|
-
// Its profiles (
|
|
914
|
+
// Its profiles (P-20), as agentspecs refuses them: no key unknown.
|
|
871
915
|
records(ui.profiles, 'interface.profiles', (profile, where) => {
|
|
872
916
|
required(profile, 'id', where);
|
|
873
917
|
required(profile, 'label', where);
|
|
@@ -899,7 +943,7 @@ export function documentShapeProblems(document) {
|
|
|
899
943
|
], `interface.translations.${tag}`, 'a translation'));
|
|
900
944
|
}
|
|
901
945
|
});
|
|
902
|
-
// Its commands and modes in the composer (
|
|
946
|
+
// Its commands and modes in the composer (P-19), as agentspecs
|
|
903
947
|
// refuses them: names and ids slash-safe and said once, no key unknown.
|
|
904
948
|
const named = new Set();
|
|
905
949
|
records(ui.commands, 'interface.commands', (item, where) => {
|
|
@@ -980,14 +1024,14 @@ export function documentShapeProblems(document) {
|
|
|
980
1024
|
// Its settings are the JSON Schema of a form (C-16), checked as a Form's
|
|
981
1025
|
// schema is; the list of settings of earlier versions is refused.
|
|
982
1026
|
if (Array.isArray(ui.settings)) {
|
|
983
|
-
at('interface.settings', 'is the JSON Schema of a form, an object of named fields (
|
|
1027
|
+
at('interface.settings', 'is the JSON Schema of a form, an object of named fields (C-16), not a list of settings: say each one as a property, its title and its default');
|
|
984
1028
|
}
|
|
985
1029
|
else {
|
|
986
1030
|
mapping(ui.settings, 'interface.settings', settings => {
|
|
987
1031
|
problems.push(...formProblems({ id: 'settings', schema: settings }));
|
|
988
1032
|
});
|
|
989
1033
|
}
|
|
990
|
-
// What a person may send without being asked (
|
|
1034
|
+
// What a person may send without being asked (P-21), as agentspecs
|
|
991
1035
|
// refuses it: a kind at least, each a type said once, sizes it takes.
|
|
992
1036
|
mapping(ui.uploads, 'interface.uploads', uploads => {
|
|
993
1037
|
unknownKeys(uploads, ['kinds', 'max_files'], 'interface.uploads', 'uploads');
|
|
@@ -1030,7 +1074,7 @@ export function documentShapeProblems(document) {
|
|
|
1030
1074
|
required(item, 'id', where);
|
|
1031
1075
|
required(item, 'component', where);
|
|
1032
1076
|
});
|
|
1033
|
-
}); // A widget's page written in its code (
|
|
1077
|
+
}); // A widget's page written in its code (P-05), as agentspecs reads it.
|
|
1034
1078
|
mapping(ui.page, 'interface.page', page => {
|
|
1035
1079
|
unknownKeys(page, ['function', 'inputs', 'inputs_ui', 'outputs', 'live'], 'interface.page', 'a page');
|
|
1036
1080
|
required(page, 'function', 'interface.page');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Commands, modes and profiles in the composer (
|
|
2
|
+
* Commands, modes and profiles in the composer (P-19, P-20), as rules:
|
|
3
3
|
* what a command sends, which option of each mode a run is in, which profile
|
|
4
4
|
* a conversation is with and what it offers. agentspecs' own
|
|
5
5
|
* (`command_prompt`, `AppInterface.mode_choice`, `mode_effect`,
|
|
@@ -30,7 +30,7 @@ export declare function modeDefaults(app: Pick<AppSpec, 'interface'>): Record<st
|
|
|
30
30
|
*/
|
|
31
31
|
export declare function modeChoice(app: Pick<AppSpec, 'name' | 'interface'>, chosen?: Record<string, string>): Record<string, string>;
|
|
32
32
|
/**
|
|
33
|
-
* The profile a conversation is with (
|
|
33
|
+
* The profile a conversation is with (P-20): the one chosen, else the
|
|
34
34
|
* first; undefined for an application without profiles. One it does not have
|
|
35
35
|
* is refused, in a sentence, as the runtime refuses it.
|
|
36
36
|
*/
|
|
@@ -44,7 +44,7 @@ export function modeChoice(app, chosen = {}) {
|
|
|
44
44
|
return { ...modeDefaults(app), ...chosen };
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* The profile a conversation is with (
|
|
47
|
+
* The profile a conversation is with (P-20): the one chosen, else the
|
|
48
48
|
* first; undefined for an application without profiles. One it does not have
|
|
49
49
|
* is refused, in a sentence, as the runtime refuses it.
|
|
50
50
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* An application's computer (
|
|
2
|
+
* An application's computer (R-23, I-01): the sandbox its agent runs on,
|
|
3
3
|
* as the computer view shows it — its three parts, each off until it is
|
|
4
4
|
* turned on; what its agent ran on it, from the conversation's tool calls;
|
|
5
5
|
* its files, read-only; its browser's page, live; and *Take over* and
|
|
@@ -138,7 +138,7 @@ export type ComputerContext = {
|
|
|
138
138
|
/** The person's token; none on the machine itself. */
|
|
139
139
|
token?: string;
|
|
140
140
|
/**
|
|
141
|
-
* Where what an application serves a person is served from (
|
|
141
|
+
* Where what an application serves a person is served from (D-22):
|
|
142
142
|
* `user-apps.datalayer.run`, the same runtime behind another name. A file
|
|
143
143
|
* fetched from the runtimes' host would be same-origin with every other
|
|
144
144
|
* runtime; from this one it is origin of its own. Unset, the runtime's own
|
|
@@ -149,7 +149,7 @@ export type ComputerContext = {
|
|
|
149
149
|
/** The computer's routes, for an agent. */
|
|
150
150
|
export declare const computerUrl: (context: ComputerContext, tail?: string) => string;
|
|
151
151
|
/**
|
|
152
|
-
* Where a file of its computer is read (
|
|
152
|
+
* Where a file of its computer is read (D-22): the same path, on the
|
|
153
153
|
* host kept for what applications serve when there is one. Only the origin
|
|
154
154
|
* changes — the runtime is the same, and its prefix is answered there too.
|
|
155
155
|
*/
|
|
@@ -156,7 +156,7 @@ export function terminalEntries(conversation) {
|
|
|
156
156
|
/** The computer's routes, for an agent. */
|
|
157
157
|
export const computerUrl = (context, tail = '') => `${context.serverUrl.replace(/\/+$/, '')}/api/v1/apps/agents/${encodeURIComponent(context.agentId)}/computer${tail}`;
|
|
158
158
|
/**
|
|
159
|
-
* Where a file of its computer is read (
|
|
159
|
+
* Where a file of its computer is read (D-22): the same path, on the
|
|
160
160
|
* host kept for what applications serve when there is one. Only the origin
|
|
161
161
|
* changes — the runtime is the same, and its prefix is answered there too.
|
|
162
162
|
*/
|