@xyagent/cli 0.0.1
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/README.md +860 -0
- package/bin/agentlink +8585 -0
- package/bin/agentlink-agent +7 -0
- package/bin/agentlink-mcp-stdio +173 -0
- package/docs/LOGGING.md +159 -0
- package/package.json +38 -0
- package/src/core.mjs +320 -0
- package/src/tunnel.mjs +291 -0
- package/src/tunnel_proxy.mjs +913 -0
- package/src/tunnel_service.mjs +699 -0
- package/src/tunnel_state.mjs +301 -0
- package/src/unified_producer.mjs +259 -0
- package/src-ext/README.md +75 -0
- package/src-ext/bin.mjs +128 -0
- package/src-ext/commands/agent.mjs +66 -0
- package/src-ext/commands/help.mjs +31 -0
- package/src-ext/commands/pair.mjs +455 -0
- package/src-ext/commands/reload.mjs +78 -0
- package/src-ext/commands/service.mjs +64 -0
- package/src-ext/core/accountResolver.mjs +137 -0
- package/src-ext/core/activeRuns.mjs +76 -0
- package/src-ext/core/agentlinkToolsBootstrap.mjs +75 -0
- package/src-ext/core/agentlinkToolsRegistry.mjs +323 -0
- package/src-ext/core/agentlinkToolsServer.mjs +109 -0
- package/src-ext/core/approvalGateway.mjs +132 -0
- package/src-ext/core/attachAuditLog.mjs +79 -0
- package/src-ext/core/attachDenylist.mjs +128 -0
- package/src-ext/core/autoTunnelDetector.mjs +98 -0
- package/src-ext/core/autoTunnelGateway.mjs +393 -0
- package/src-ext/core/autoTunnelWiring.mjs +184 -0
- package/src-ext/core/boundedMap.mjs +98 -0
- package/src-ext/core/bridgeAttachAutoScanner.mjs +237 -0
- package/src-ext/core/bridgeHooks.mjs +168 -0
- package/src-ext/core/bridgeSelfUninstall.mjs +133 -0
- package/src-ext/core/claudeTrust.mjs +74 -0
- package/src-ext/core/codexTrust.mjs +77 -0
- package/src-ext/core/cosUploadClient.mjs +326 -0
- package/src-ext/core/createWorkspace.mjs +170 -0
- package/src-ext/core/daemonRestart.mjs +49 -0
- package/src-ext/core/defaultWorkspace.mjs +65 -0
- package/src-ext/core/ensureGitRepo.mjs +57 -0
- package/src-ext/core/hermesProfile.mjs +75 -0
- package/src-ext/core/interruptGateway.mjs +119 -0
- package/src-ext/core/interruptRunListener.mjs +106 -0
- package/src-ext/core/mcpRuntimeFanout.mjs +236 -0
- package/src-ext/core/mcpStdioClient.mjs +316 -0
- package/src-ext/core/openclawGatewayClient.mjs +230 -0
- package/src-ext/core/pairCodeClient.mjs +331 -0
- package/src-ext/core/pairInventory.mjs +59 -0
- package/src-ext/core/pathExpand.mjs +34 -0
- package/src-ext/core/preprocessAttachments.mjs +113 -0
- package/src-ext/core/relayWorker.mjs +284 -0
- package/src-ext/core/relayWorkerHttp.mjs +58 -0
- package/src-ext/core/scanWorkspaces.mjs +842 -0
- package/src-ext/core/sessionSlot.mjs +70 -0
- package/src-ext/core/stateMachine.mjs +85 -0
- package/src-ext/core/toolsServerLifecycle.mjs +169 -0
- package/src-ext/core/unifiedDispatchHandler.mjs +439 -0
- package/src-ext/core/usageReporter.mjs +207 -0
- package/src-ext/openclaw-plugin/envelope-builder.cjs +619 -0
- package/src-ext/openclaw-plugin/index.cjs +1919 -0
- package/src-ext/openclaw-plugin/openclaw.plugin.json +20 -0
- package/src-ext/openclaw-plugin/package.json +12 -0
- package/src-ext/openclaw-plugin/relay-defaults.json +3 -0
- package/src-ext/openclaw-plugin/todoTranslatorUtils.cjs +101 -0
- package/src-ext/runtime/_shared/cliExec.mjs +138 -0
- package/src-ext/runtime/_shared/cosTextRefs.mjs +120 -0
- package/src-ext/runtime/_shared/fetchAndBase64Encode.mjs +52 -0
- package/src-ext/runtime/_shared/relayObjectToBlock.mjs +307 -0
- package/src-ext/runtime/_shared/sessionPicker.mjs +418 -0
- package/src-ext/runtime/_shared/slashCommandRouter.mjs +1346 -0
- package/src-ext/runtime/_shared/todoTranslatorUtils.mjs +94 -0
- package/src-ext/runtime/claude/askUserQuestionTranslator.mjs +241 -0
- package/src-ext/runtime/claude/customCommandsCollector.mjs +132 -0
- package/src-ext/runtime/claude/handleRequest.mjs +1418 -0
- package/src-ext/runtime/claude/index.mjs +160 -0
- package/src-ext/runtime/claude/internalCommandNames.mjs +58 -0
- package/src-ext/runtime/claude/launcher.mjs +313 -0
- package/src-ext/runtime/claude/mcpConfigAdapter.mjs +174 -0
- package/src-ext/runtime/claude/mcpConfigWriter.mjs +57 -0
- package/src-ext/runtime/claude/modelContextWindow.mjs +30 -0
- package/src-ext/runtime/claude/modelScanner.mjs +257 -0
- package/src-ext/runtime/claude/permissionInterruptBlock.mjs +86 -0
- package/src-ext/runtime/claude/permissionPromptServer.mjs +170 -0
- package/src-ext/runtime/claude/permissionPromptServerWorker.mjs +214 -0
- package/src-ext/runtime/claude/preflight.mjs +62 -0
- package/src-ext/runtime/claude/stdoutParser.mjs +365 -0
- package/src-ext/runtime/claude/todoTranslator.mjs +66 -0
- package/src-ext/runtime/claude/usageProbe.mjs +576 -0
- package/src-ext/runtime/claude/usageProbeStrip.mjs +14 -0
- package/src-ext/runtime/codex/codexCustomCommandsCollector.mjs +87 -0
- package/src-ext/runtime/codex/elicitationHandler.mjs +91 -0
- package/src-ext/runtime/codex/eventMapper.mjs +154 -0
- package/src-ext/runtime/codex/handleRequest.mjs +1152 -0
- package/src-ext/runtime/codex/index.mjs +142 -0
- package/src-ext/runtime/codex/mcpConfigAdapter.mjs +155 -0
- package/src-ext/runtime/codex/modelScanner.mjs +305 -0
- package/src-ext/runtime/codex/planNotificationHandler.mjs +61 -0
- package/src-ext/runtime/codex/preflight.mjs +67 -0
- package/src-ext/runtime/hermes/commandBackend.mjs +117 -0
- package/src-ext/runtime/hermes/envSetup.mjs +229 -0
- package/src-ext/runtime/hermes/gatewayManager.mjs +625 -0
- package/src-ext/runtime/hermes/handleRequest.mjs +1257 -0
- package/src-ext/runtime/hermes/httpBackend.mjs +219 -0
- package/src-ext/runtime/hermes/index.mjs +196 -0
- package/src-ext/runtime/hermes/mcpConfigAdapter.mjs +189 -0
- package/src-ext/runtime/hermes/preflight.mjs +359 -0
- package/src-ext/runtime/hermes/responsesBackend.mjs +276 -0
- package/src-ext/runtime/hermes/sessionStore.mjs +78 -0
- package/src-ext/runtime/hermes/todoTranslator.mjs +90 -0
- package/src-ext/runtime/hermes/workspaceRpc.mjs +124 -0
- package/src-ext/runtime/openclaw/buildOpenclawDaemonInput.mjs +143 -0
- package/src-ext/runtime/openclaw/mcpConfigAdapter.mjs +91 -0
- package/src-ext/runtime/openclaw/openclawConfig.mjs +145 -0
- package/src-ext/runtime/picoclaw/constants.mjs +39 -0
- package/src-ext/runtime/picoclaw/handleRequest.mjs +289 -0
- package/src-ext/runtime/picoclaw/index.mjs +314 -0
- package/src-ext/runtime/picoclaw/pairFlow.mjs +224 -0
- package/src-ext/runtime/picoclaw/state.mjs +78 -0
- package/src-ext/runtime/picoclaw/todoTranslator.mjs +67 -0
- package/src-ext/runtime/picoclaw/translator.mjs +272 -0
- package/src-ext/runtime/picoclaw/wsClient.mjs +129 -0
- package/src-ext/service/serviceManager.mjs +521 -0
- package/src-shared/README.md +44 -0
- package/src-shared/chat_push_normalizer.mjs +113 -0
- package/src-shared/correlation.mjs +25 -0
- package/src-shared/envelope_builder.mjs +612 -0
- package/src-shared/logger.mjs +167 -0
- package/src-shared/relay-defaults.json +3 -0
- package/src-shared/relay_revoke.mjs +46 -0
- package/src-shared/vendor/README.md +60 -0
- package/src-shared/vendor/smol-toml/LICENSE +24 -0
- package/src-shared/vendor/smol-toml/README.md +236 -0
- package/src-shared/vendor/smol-toml/VENDORED.md +37 -0
- package/src-shared/vendor/smol-toml/dist/date.d.ts +41 -0
- package/src-shared/vendor/smol-toml/dist/date.js +127 -0
- package/src-shared/vendor/smol-toml/dist/error.d.ts +38 -0
- package/src-shared/vendor/smol-toml/dist/error.js +63 -0
- package/src-shared/vendor/smol-toml/dist/extract.d.ts +30 -0
- package/src-shared/vendor/smol-toml/dist/extract.js +109 -0
- package/src-shared/vendor/smol-toml/dist/index.cjs +900 -0
- package/src-shared/vendor/smol-toml/dist/index.d.ts +43 -0
- package/src-shared/vendor/smol-toml/dist/index.js +33 -0
- package/src-shared/vendor/smol-toml/dist/parse.d.ts +37 -0
- package/src-shared/vendor/smol-toml/dist/parse.js +148 -0
- package/src-shared/vendor/smol-toml/dist/primitive.d.ts +31 -0
- package/src-shared/vendor/smol-toml/dist/primitive.js +178 -0
- package/src-shared/vendor/smol-toml/dist/stringify.d.ts +31 -0
- package/src-shared/vendor/smol-toml/dist/stringify.js +163 -0
- package/src-shared/vendor/smol-toml/dist/struct.d.ts +32 -0
- package/src-shared/vendor/smol-toml/dist/struct.js +194 -0
- package/src-shared/vendor/smol-toml/dist/util.d.ts +42 -0
- package/src-shared/vendor/smol-toml/dist/util.js +100 -0
- package/src-shared/vendor/smol-toml/package.json +54 -0
- package/src-shared/vendor/yaml/LICENSE +13 -0
- package/src-shared/vendor/yaml/README.md +155 -0
- package/src-shared/vendor/yaml/VENDORED.md +29 -0
- package/src-shared/vendor/yaml/bin.mjs +11 -0
- package/src-shared/vendor/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/src-shared/vendor/yaml/browser/dist/compose/compose-doc.js +42 -0
- package/src-shared/vendor/yaml/browser/dist/compose/compose-node.js +92 -0
- package/src-shared/vendor/yaml/browser/dist/compose/compose-scalar.js +80 -0
- package/src-shared/vendor/yaml/browser/dist/compose/composer.js +217 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-block-map.js +113 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-block-seq.js +47 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-flow-collection.js +203 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-flow-scalar.js +223 -0
- package/src-shared/vendor/yaml/browser/dist/compose/resolve-props.js +148 -0
- package/src-shared/vendor/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/src-shared/vendor/yaml/browser/dist/compose/util-empty-scalar-position.js +27 -0
- package/src-shared/vendor/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/src-shared/vendor/yaml/browser/dist/compose/util-map-includes.js +17 -0
- package/src-shared/vendor/yaml/browser/dist/doc/Document.js +334 -0
- package/src-shared/vendor/yaml/browser/dist/doc/anchors.js +72 -0
- package/src-shared/vendor/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/src-shared/vendor/yaml/browser/dist/doc/createNode.js +89 -0
- package/src-shared/vendor/yaml/browser/dist/doc/directives.js +176 -0
- package/src-shared/vendor/yaml/browser/dist/errors.js +57 -0
- package/src-shared/vendor/yaml/browser/dist/index.js +17 -0
- package/src-shared/vendor/yaml/browser/dist/log.js +14 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/Alias.js +101 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/Collection.js +147 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/Node.js +38 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/Pair.js +36 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/addPairToJSMap.js +104 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/identity.js +36 -0
- package/src-shared/vendor/yaml/browser/dist/nodes/toJS.js +37 -0
- package/src-shared/vendor/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/src-shared/vendor/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/src-shared/vendor/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/src-shared/vendor/yaml/browser/dist/parse/cst.js +98 -0
- package/src-shared/vendor/yaml/browser/dist/parse/lexer.js +717 -0
- package/src-shared/vendor/yaml/browser/dist/parse/line-counter.js +39 -0
- package/src-shared/vendor/yaml/browser/dist/parse/parser.js +954 -0
- package/src-shared/vendor/yaml/browser/dist/public-api.js +99 -0
- package/src-shared/vendor/yaml/browser/dist/schema/Schema.js +38 -0
- package/src-shared/vendor/yaml/browser/dist/schema/common/map.js +17 -0
- package/src-shared/vendor/yaml/browser/dist/schema/common/null.js +15 -0
- package/src-shared/vendor/yaml/browser/dist/schema/common/seq.js +17 -0
- package/src-shared/vendor/yaml/browser/dist/schema/common/string.js +14 -0
- package/src-shared/vendor/yaml/browser/dist/schema/core/bool.js +19 -0
- package/src-shared/vendor/yaml/browser/dist/schema/core/float.js +43 -0
- package/src-shared/vendor/yaml/browser/dist/schema/core/int.js +38 -0
- package/src-shared/vendor/yaml/browser/dist/schema/core/schema.js +23 -0
- package/src-shared/vendor/yaml/browser/dist/schema/json/schema.js +62 -0
- package/src-shared/vendor/yaml/browser/dist/schema/tags.js +83 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/binary.js +66 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/schema.js +37 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/src-shared/vendor/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringify.js +124 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyCollection.js +143 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyNumber.js +24 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/src-shared/vendor/yaml/browser/dist/stringify/stringifyString.js +328 -0
- package/src-shared/vendor/yaml/browser/dist/util.js +11 -0
- package/src-shared/vendor/yaml/browser/dist/visit.js +233 -0
- package/src-shared/vendor/yaml/browser/index.js +5 -0
- package/src-shared/vendor/yaml/browser/package.json +3 -0
- package/src-shared/vendor/yaml/dist/cli.d.ts +8 -0
- package/src-shared/vendor/yaml/dist/cli.mjs +199 -0
- package/src-shared/vendor/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/src-shared/vendor/yaml/dist/compose/compose-collection.js +90 -0
- package/src-shared/vendor/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/src-shared/vendor/yaml/dist/compose/compose-doc.js +44 -0
- package/src-shared/vendor/yaml/dist/compose/compose-node.d.ts +28 -0
- package/src-shared/vendor/yaml/dist/compose/compose-node.js +95 -0
- package/src-shared/vendor/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/src-shared/vendor/yaml/dist/compose/compose-scalar.js +82 -0
- package/src-shared/vendor/yaml/dist/compose/composer.d.ts +62 -0
- package/src-shared/vendor/yaml/dist/compose/composer.js +221 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-map.js +115 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-block-seq.js +49 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-end.js +39 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-flow-collection.js +205 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-flow-scalar.js +225 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/src-shared/vendor/yaml/dist/compose/resolve-props.js +150 -0
- package/src-shared/vendor/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/compose/util-contains-newline.js +36 -0
- package/src-shared/vendor/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/compose/util-empty-scalar-position.js +29 -0
- package/src-shared/vendor/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/src-shared/vendor/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/src-shared/vendor/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/compose/util-map-includes.js +19 -0
- package/src-shared/vendor/yaml/dist/doc/Document.d.ts +141 -0
- package/src-shared/vendor/yaml/dist/doc/Document.js +336 -0
- package/src-shared/vendor/yaml/dist/doc/anchors.d.ts +24 -0
- package/src-shared/vendor/yaml/dist/doc/anchors.js +77 -0
- package/src-shared/vendor/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/src-shared/vendor/yaml/dist/doc/applyReviver.js +57 -0
- package/src-shared/vendor/yaml/dist/doc/createNode.d.ts +17 -0
- package/src-shared/vendor/yaml/dist/doc/createNode.js +91 -0
- package/src-shared/vendor/yaml/dist/doc/directives.d.ts +49 -0
- package/src-shared/vendor/yaml/dist/doc/directives.js +178 -0
- package/src-shared/vendor/yaml/dist/errors.d.ts +21 -0
- package/src-shared/vendor/yaml/dist/errors.js +62 -0
- package/src-shared/vendor/yaml/dist/index.d.ts +22 -0
- package/src-shared/vendor/yaml/dist/index.js +50 -0
- package/src-shared/vendor/yaml/dist/log.d.ts +3 -0
- package/src-shared/vendor/yaml/dist/log.js +17 -0
- package/src-shared/vendor/yaml/dist/nodes/Alias.d.ts +28 -0
- package/src-shared/vendor/yaml/dist/nodes/Alias.js +103 -0
- package/src-shared/vendor/yaml/dist/nodes/Collection.d.ts +73 -0
- package/src-shared/vendor/yaml/dist/nodes/Collection.js +151 -0
- package/src-shared/vendor/yaml/dist/nodes/Node.d.ts +47 -0
- package/src-shared/vendor/yaml/dist/nodes/Node.js +40 -0
- package/src-shared/vendor/yaml/dist/nodes/Pair.d.ts +21 -0
- package/src-shared/vendor/yaml/dist/nodes/Pair.js +39 -0
- package/src-shared/vendor/yaml/dist/nodes/Scalar.d.ts +42 -0
- package/src-shared/vendor/yaml/dist/nodes/Scalar.js +27 -0
- package/src-shared/vendor/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/src-shared/vendor/yaml/dist/nodes/YAMLMap.js +147 -0
- package/src-shared/vendor/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/src-shared/vendor/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/src-shared/vendor/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/nodes/addPairToJSMap.js +106 -0
- package/src-shared/vendor/yaml/dist/nodes/identity.d.ts +23 -0
- package/src-shared/vendor/yaml/dist/nodes/identity.js +53 -0
- package/src-shared/vendor/yaml/dist/nodes/toJS.d.ts +27 -0
- package/src-shared/vendor/yaml/dist/nodes/toJS.js +39 -0
- package/src-shared/vendor/yaml/dist/options.d.ts +338 -0
- package/src-shared/vendor/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/src-shared/vendor/yaml/dist/parse/cst-scalar.js +218 -0
- package/src-shared/vendor/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/src-shared/vendor/yaml/dist/parse/cst-stringify.js +63 -0
- package/src-shared/vendor/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/src-shared/vendor/yaml/dist/parse/cst-visit.js +99 -0
- package/src-shared/vendor/yaml/dist/parse/cst.d.ts +108 -0
- package/src-shared/vendor/yaml/dist/parse/cst.js +112 -0
- package/src-shared/vendor/yaml/dist/parse/lexer.d.ts +87 -0
- package/src-shared/vendor/yaml/dist/parse/lexer.js +719 -0
- package/src-shared/vendor/yaml/dist/parse/line-counter.d.ts +22 -0
- package/src-shared/vendor/yaml/dist/parse/line-counter.js +41 -0
- package/src-shared/vendor/yaml/dist/parse/parser.d.ts +84 -0
- package/src-shared/vendor/yaml/dist/parse/parser.js +958 -0
- package/src-shared/vendor/yaml/dist/public-api.d.ts +43 -0
- package/src-shared/vendor/yaml/dist/public-api.js +104 -0
- package/src-shared/vendor/yaml/dist/schema/Schema.d.ts +18 -0
- package/src-shared/vendor/yaml/dist/schema/Schema.js +40 -0
- package/src-shared/vendor/yaml/dist/schema/common/map.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/schema/common/map.js +19 -0
- package/src-shared/vendor/yaml/dist/schema/common/null.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/schema/common/null.js +17 -0
- package/src-shared/vendor/yaml/dist/schema/common/seq.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/schema/common/seq.js +19 -0
- package/src-shared/vendor/yaml/dist/schema/common/string.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/schema/common/string.js +16 -0
- package/src-shared/vendor/yaml/dist/schema/core/bool.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/schema/core/bool.js +21 -0
- package/src-shared/vendor/yaml/dist/schema/core/float.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/schema/core/float.js +47 -0
- package/src-shared/vendor/yaml/dist/schema/core/int.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/schema/core/int.js +42 -0
- package/src-shared/vendor/yaml/dist/schema/core/schema.d.ts +1 -0
- package/src-shared/vendor/yaml/dist/schema/core/schema.js +25 -0
- package/src-shared/vendor/yaml/dist/schema/json/schema.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/schema/json/schema.js +64 -0
- package/src-shared/vendor/yaml/dist/schema/json-schema.d.ts +69 -0
- package/src-shared/vendor/yaml/dist/schema/tags.d.ts +40 -0
- package/src-shared/vendor/yaml/dist/schema/tags.js +86 -0
- package/src-shared/vendor/yaml/dist/schema/types.d.ts +90 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/binary.js +68 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/omap.d.ts +28 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/schema.js +39 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/src-shared/vendor/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/src-shared/vendor/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/src-shared/vendor/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/src-shared/vendor/yaml/dist/stringify/stringify.d.ts +21 -0
- package/src-shared/vendor/yaml/dist/stringify/stringify.js +127 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyCollection.js +145 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyComment.js +24 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyNumber.js +26 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyPair.js +152 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/src-shared/vendor/yaml/dist/stringify/stringifyString.js +330 -0
- package/src-shared/vendor/yaml/dist/test-events.d.ts +4 -0
- package/src-shared/vendor/yaml/dist/test-events.js +134 -0
- package/src-shared/vendor/yaml/dist/util.d.ts +12 -0
- package/src-shared/vendor/yaml/dist/util.js +28 -0
- package/src-shared/vendor/yaml/dist/visit.d.ts +102 -0
- package/src-shared/vendor/yaml/dist/visit.js +236 -0
- package/src-shared/vendor/yaml/package.json +96 -0
- package/src-shared/vendor/yaml/util.js +2 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
// AUTO-GENERATED — DO NOT EDIT.
|
|
2
|
+
// Generated by scripts/build-openclaw-plugin.mjs
|
|
3
|
+
// Source: src-shared/envelope_builder.mjs
|
|
4
|
+
/**
|
|
5
|
+
* envelope_builder.mjs — C1.1.2 + C1.1.3
|
|
6
|
+
*
|
|
7
|
+
* Builders for unified Agent Protocol envelope objects.
|
|
8
|
+
* Each builder returns a plain object without `id` (server assigns).
|
|
9
|
+
*
|
|
10
|
+
* Protocol reference: docs/protocol/unified-agent-sse.md §5.1
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// GAP-16: ID generator — "blk_" prefix + 26 Crockford Base32 chars (ULID format)
|
|
15
|
+
// Crockford alphabet: 0-9 A-H J K M N P-T V-Z (32 chars, no I L O U)
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
const CROCKFORD_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* tool_result.output 里嵌套的每个 Block 都必须独立通过 block.schema 校验
|
|
22
|
+
* (block.schema.json 要求 id/type/status;text 块要 type/format/text;image
|
|
23
|
+
* 要 source 等等)。runtime translator 出于人类可读优先,常常只传 {type,
|
|
24
|
+
* format, text},需要在这里补齐 schema 必填项。
|
|
25
|
+
*
|
|
26
|
+
* 规则:
|
|
27
|
+
* - 任意 item 必带 id (auto blk_<ULID>) + status (默认 completed) + type
|
|
28
|
+
* - type === "text" → 默认 format="plain", text=""
|
|
29
|
+
* - type === "thinking" → 默认 text=""
|
|
30
|
+
* - type === "tool_use" → 默认 tool_call_id=id, tool_name="unknown",
|
|
31
|
+
* input={}, input_complete=true
|
|
32
|
+
* - 其他 type 透传,由调用方保证 schema 完整
|
|
33
|
+
*
|
|
34
|
+
* 非 object item(字符串/null)兜底包成 text 块,避免 server 拒。
|
|
35
|
+
*/
|
|
36
|
+
function normalizeToolResultOutputItem(raw) {
|
|
37
|
+
if (raw == null) {
|
|
38
|
+
return { id: newBlockId(), type: "text", status: "completed", format: "plain", text: "" };
|
|
39
|
+
}
|
|
40
|
+
if (typeof raw === "string") {
|
|
41
|
+
return { id: newBlockId(), type: "text", status: "completed", format: "plain", text: raw };
|
|
42
|
+
}
|
|
43
|
+
if (typeof raw !== "object") {
|
|
44
|
+
return { id: newBlockId(), type: "text", status: "completed", format: "plain", text: String(raw) };
|
|
45
|
+
}
|
|
46
|
+
const out = { ...raw };
|
|
47
|
+
if (!out.id) out.id = newBlockId();
|
|
48
|
+
if (!out.status) out.status = "completed";
|
|
49
|
+
if (!out.type) out.type = "text";
|
|
50
|
+
if (out.type === "text") {
|
|
51
|
+
if (out.format === undefined) out.format = "plain";
|
|
52
|
+
if (out.text === undefined) out.text = "";
|
|
53
|
+
} else if (out.type === "thinking") {
|
|
54
|
+
if (out.text === undefined) out.text = "";
|
|
55
|
+
} else if (out.type === "tool_use") {
|
|
56
|
+
if (out.tool_call_id === undefined) out.tool_call_id = out.id;
|
|
57
|
+
if (out.tool_name === undefined) out.tool_name = "unknown";
|
|
58
|
+
if (out.input === undefined) out.input = {};
|
|
59
|
+
if (out.input_complete === undefined) out.input_complete = true;
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function newCrockfordSuffix() {
|
|
65
|
+
const bytes = new Uint8Array(16);
|
|
66
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
67
|
+
crypto.getRandomValues(bytes);
|
|
68
|
+
} else {
|
|
69
|
+
// fallback: Math.random (Node < 22 shouldn't happen, but safe)
|
|
70
|
+
for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);
|
|
71
|
+
}
|
|
72
|
+
// Encode 128 bits as 26 Crockford Base32 chars (128 / 5 = 25.6 → 26 chars, top 2 bits zero)
|
|
73
|
+
// Pack bytes into a BigInt then extract 5-bit groups from MSB.
|
|
74
|
+
let n = BigInt(0);
|
|
75
|
+
for (const b of bytes) n = (n << BigInt(8)) | BigInt(b);
|
|
76
|
+
const chars = [];
|
|
77
|
+
for (let i = 0; i < 26; i++) {
|
|
78
|
+
chars.unshift(CROCKFORD_CHARS[Number(n & BigInt(31))]);
|
|
79
|
+
n >>= BigInt(5);
|
|
80
|
+
}
|
|
81
|
+
return chars.join("");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function newBlockId() {
|
|
85
|
+
return "blk_" + newCrockfordSuffix();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Mint a fresh `run_<26 Crockford>` id — matches envelope.schema run_id pattern
|
|
89
|
+
// `^run_[0-9A-HJKMNP-TV-Z]{26}$`. Used by hermes bridge when synthesizing a
|
|
90
|
+
// child run for delegate_task (no upstream child session id available).
|
|
91
|
+
function newRunId() {
|
|
92
|
+
return "run_" + newCrockfordSuffix();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
// C1.1.2 — 5 envelope builders
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* run.started
|
|
101
|
+
* @param {string} runId
|
|
102
|
+
* @param {{
|
|
103
|
+
* model?: string|null,
|
|
104
|
+
* options?: object,
|
|
105
|
+
* parentRunId?: string,
|
|
106
|
+
* spawnToolUseId?: string,
|
|
107
|
+
* extensions?: object,
|
|
108
|
+
* }} [meta]
|
|
109
|
+
*
|
|
110
|
+
* parentRunId — top-level envelope field; set when this run is a child run
|
|
111
|
+
* spawned by a subagent dispatch. Server's subagent_synth correlates child
|
|
112
|
+
* lifecycle back to the parent's `subagent_ref` block via this field plus
|
|
113
|
+
* `extensions.openclaw.child_session_key`.
|
|
114
|
+
*
|
|
115
|
+
* spawnToolUseId — when provided (non-empty string), written to
|
|
116
|
+
* `payload.spawn_tool_use_id`. Lets relay subagent_synth SDK mode detect that
|
|
117
|
+
* the CLI will supply the child run id, so relay skips minting its own ULID.
|
|
118
|
+
*
|
|
119
|
+
* Note: `usage` was removed — run_started.schema.json uses additionalProperties:false
|
|
120
|
+
* and does not list `usage`; it is reported via a separate usage.report envelope.
|
|
121
|
+
*/
|
|
122
|
+
function buildRunStarted(runId, meta) {
|
|
123
|
+
const env = {
|
|
124
|
+
type: "run.started",
|
|
125
|
+
run_id: runId,
|
|
126
|
+
payload: {
|
|
127
|
+
model: meta?.model ?? "",
|
|
128
|
+
options: meta?.options ?? {},
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
if (meta?.parentRunId) env.parent_run_id = meta.parentRunId;
|
|
132
|
+
if (meta?.spawnToolUseId) env.payload.spawn_tool_use_id = meta.spawnToolUseId;
|
|
133
|
+
if (meta?.extensions && typeof meta.extensions === "object") {
|
|
134
|
+
env.extensions = meta.extensions;
|
|
135
|
+
}
|
|
136
|
+
return env;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* run.completed
|
|
141
|
+
* @param {string} runId
|
|
142
|
+
* @param {string} stopReason e.g. "end_turn" | "max_tokens" | "user_canceled"
|
|
143
|
+
* @param {{ parentRunId?: string, extensions?: object }} [opts]
|
|
144
|
+
*
|
|
145
|
+
* parentRunId + extensions same semantics as buildRunStarted; required for
|
|
146
|
+
* child run termination so subagent_synth.synthChildRunTerminal can fire
|
|
147
|
+
* subagent_ref.completed on the parent timeline.
|
|
148
|
+
*/
|
|
149
|
+
function buildRunCompleted(runId, stopReason, opts) {
|
|
150
|
+
const env = {
|
|
151
|
+
type: "run.completed",
|
|
152
|
+
run_id: runId,
|
|
153
|
+
payload: { stop_reason: stopReason || "end_turn" },
|
|
154
|
+
};
|
|
155
|
+
if (opts?.parentRunId) env.parent_run_id = opts.parentRunId;
|
|
156
|
+
if (opts?.extensions && typeof opts.extensions === "object") {
|
|
157
|
+
env.extensions = opts.extensions;
|
|
158
|
+
}
|
|
159
|
+
return env;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* content_block.started
|
|
164
|
+
* @param {string} runId
|
|
165
|
+
* @param {{ id?: string, type: string, [k: string]: any }} block
|
|
166
|
+
* @param {number} [index=0] block index within the message (schema required, defaults to 0)
|
|
167
|
+
*
|
|
168
|
+
* Automatically fills schema-required fields for known block types:
|
|
169
|
+
* - All blocks: `status` defaults to "in_progress"
|
|
170
|
+
* - text blocks: `format` defaults to "plain", `text` defaults to "" (filled via deltas, finalized on completed)
|
|
171
|
+
* - thinking blocks: `text` defaults to "" (filled via deltas, finalized on completed)
|
|
172
|
+
*/
|
|
173
|
+
function buildBlockStarted(runId, block, index = 0) {
|
|
174
|
+
const id = block.id || newBlockId();
|
|
175
|
+
const enrichedBlock = { ...block, id };
|
|
176
|
+
if (enrichedBlock.status === undefined) {
|
|
177
|
+
enrichedBlock.status = "in_progress";
|
|
178
|
+
}
|
|
179
|
+
if (enrichedBlock.type === "text") {
|
|
180
|
+
if (enrichedBlock.format === undefined) enrichedBlock.format = "plain";
|
|
181
|
+
if (enrichedBlock.text === undefined) enrichedBlock.text = "";
|
|
182
|
+
}
|
|
183
|
+
if (enrichedBlock.type === "thinking") {
|
|
184
|
+
if (enrichedBlock.text === undefined) enrichedBlock.text = "";
|
|
185
|
+
}
|
|
186
|
+
// tool_use block — schema requires tool_call_id + tool_name; input defaults
|
|
187
|
+
// to {} and input_complete defaults to false (app accumulates via deltas).
|
|
188
|
+
if (enrichedBlock.type === "tool_use") {
|
|
189
|
+
if (enrichedBlock.tool_call_id === undefined) enrichedBlock.tool_call_id = id;
|
|
190
|
+
if (enrichedBlock.tool_name === undefined) enrichedBlock.tool_name = "unknown";
|
|
191
|
+
if (enrichedBlock.input === undefined) enrichedBlock.input = {};
|
|
192
|
+
if (enrichedBlock.input_complete === undefined) enrichedBlock.input_complete = false;
|
|
193
|
+
}
|
|
194
|
+
// tool_result block — schema requires tool_call_id + output (List<Block>).
|
|
195
|
+
if (enrichedBlock.type === "tool_result") {
|
|
196
|
+
if (enrichedBlock.tool_call_id === undefined) enrichedBlock.tool_call_id = id;
|
|
197
|
+
if (enrichedBlock.output === undefined) enrichedBlock.output = [];
|
|
198
|
+
if (enrichedBlock.is_error === undefined) enrichedBlock.is_error = false;
|
|
199
|
+
}
|
|
200
|
+
// subagent_ref — schema requires child_run_id (^run_[0-9A-HJKMNP-TV-Z]{26}$).
|
|
201
|
+
// fail-fast: blk_ prefix fallback violates schema; caller must supply valid run id.
|
|
202
|
+
if (enrichedBlock.type === "subagent_ref") {
|
|
203
|
+
if (enrichedBlock.child_run_id === undefined) throw new Error("subagent_ref block requires child_run_id");
|
|
204
|
+
}
|
|
205
|
+
// interrupt block — protocol initial status is "awaiting" (not "in_progress").
|
|
206
|
+
// Transparently pass through subtype / prompt / options / title / selection_mode.
|
|
207
|
+
if (enrichedBlock.type === "interrupt") {
|
|
208
|
+
if (enrichedBlock.status === "in_progress") {
|
|
209
|
+
// "in_progress" was set by the generic default above — override with "awaiting"
|
|
210
|
+
// only if the caller did NOT explicitly pass a status.
|
|
211
|
+
// We detect this by checking if the original block.status was undefined.
|
|
212
|
+
if (block.status === undefined) {
|
|
213
|
+
enrichedBlock.status = "awaiting";
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
type: "content_block.started",
|
|
219
|
+
run_id: runId,
|
|
220
|
+
payload: { index, block: enrichedBlock },
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* content_block.delta
|
|
226
|
+
* @param {string} runId
|
|
227
|
+
* @param {string} blockId
|
|
228
|
+
* @param {string|object} delta If a string is provided it is wrapped into
|
|
229
|
+
* { text_append: delta } so app-side consumers (chat_store_unified.dart)
|
|
230
|
+
* can read `payload.delta['text_append']` directly.
|
|
231
|
+
* @param {number} [index=0] block index within the message (schema required, defaults to 0)
|
|
232
|
+
*/
|
|
233
|
+
function buildBlockDelta(runId, blockId, delta, index = 0) {
|
|
234
|
+
const normalizedDelta =
|
|
235
|
+
typeof delta === "string" ? { text_append: delta } : delta;
|
|
236
|
+
return {
|
|
237
|
+
type: "content_block.delta",
|
|
238
|
+
run_id: runId,
|
|
239
|
+
payload: { index, block_id: blockId, delta: normalizedDelta },
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* content_block.completed
|
|
245
|
+
* @param {string} runId
|
|
246
|
+
* @param {{ id: string, type: string, [k: string]: any }} block
|
|
247
|
+
* @param {number} [index=0] block index within the message (schema required, defaults to 0)
|
|
248
|
+
*
|
|
249
|
+
* Automatically fills schema-required fields for known block types:
|
|
250
|
+
* - All blocks: `status` defaults to "completed"
|
|
251
|
+
* - text blocks: `format` defaults to "plain"; `text` defaults to "" only as a
|
|
252
|
+
* last-resort schema guard. Callers SHOULD pass the full accumulated text
|
|
253
|
+
* (protocol §5.3.5: completed payload is the terminal full state).
|
|
254
|
+
* - thinking blocks: `text` defaults to "" with the same caveat.
|
|
255
|
+
*/
|
|
256
|
+
function buildBlockCompleted(runId, block, index = 0) {
|
|
257
|
+
const enrichedBlock = { ...block };
|
|
258
|
+
if (enrichedBlock.status === undefined) {
|
|
259
|
+
enrichedBlock.status = "completed";
|
|
260
|
+
}
|
|
261
|
+
if (enrichedBlock.type === "text") {
|
|
262
|
+
if (enrichedBlock.format === undefined) enrichedBlock.format = "plain";
|
|
263
|
+
if (enrichedBlock.text === undefined) enrichedBlock.text = "";
|
|
264
|
+
}
|
|
265
|
+
if (enrichedBlock.type === "thinking") {
|
|
266
|
+
if (enrichedBlock.text === undefined) enrichedBlock.text = "";
|
|
267
|
+
}
|
|
268
|
+
if (enrichedBlock.type === "tool_use") {
|
|
269
|
+
if (enrichedBlock.tool_call_id === undefined) enrichedBlock.tool_call_id = enrichedBlock.id;
|
|
270
|
+
if (enrichedBlock.tool_name === undefined) enrichedBlock.tool_name = "unknown";
|
|
271
|
+
if (enrichedBlock.input === undefined) enrichedBlock.input = {};
|
|
272
|
+
if (enrichedBlock.input_complete === undefined) enrichedBlock.input_complete = true;
|
|
273
|
+
}
|
|
274
|
+
if (enrichedBlock.type === "tool_result") {
|
|
275
|
+
if (enrichedBlock.tool_call_id === undefined) enrichedBlock.tool_call_id = enrichedBlock.id;
|
|
276
|
+
if (enrichedBlock.output === undefined) enrichedBlock.output = [];
|
|
277
|
+
if (enrichedBlock.is_error === undefined) enrichedBlock.is_error = false;
|
|
278
|
+
}
|
|
279
|
+
// subagent_ref — schema requires child_run_id (^run_[0-9A-HJKMNP-TV-Z]{26}$).
|
|
280
|
+
// fail-fast: blk_ prefix fallback violates schema; caller must supply valid run id.
|
|
281
|
+
if (enrichedBlock.type === "subagent_ref") {
|
|
282
|
+
if (enrichedBlock.child_run_id === undefined) throw new Error("subagent_ref block requires child_run_id");
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
type: "content_block.completed",
|
|
286
|
+
run_id: runId,
|
|
287
|
+
payload: { index, block: enrichedBlock },
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* run.paused
|
|
293
|
+
* @param {string} runId
|
|
294
|
+
* @param {string[]} interruptIds block ids that caused the pause (e.g. ["blk_xxx..."])
|
|
295
|
+
*
|
|
296
|
+
* `reason` is always "interrupt" per protocol (RunPausedPayload requires reason: string).
|
|
297
|
+
* `interrupt_ids` lists the block ids that caused the pause; allowed to be empty.
|
|
298
|
+
*/
|
|
299
|
+
function buildRunPaused(runId, interruptIds) {
|
|
300
|
+
return {
|
|
301
|
+
type: "run.paused",
|
|
302
|
+
run_id: runId,
|
|
303
|
+
payload: {
|
|
304
|
+
reason: "interrupt",
|
|
305
|
+
interrupt_ids: Array.isArray(interruptIds) ? interruptIds : [],
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* run.failed — GAP-01 + GAP-19:
|
|
312
|
+
* - payload includes stop_reason: "error" (spec §5.2, GAP-01)
|
|
313
|
+
* - run_id_ref moved to extensions (not top-level, GAP-19)
|
|
314
|
+
* @param {string} runId
|
|
315
|
+
* @param {string} code error code
|
|
316
|
+
* @param {string} message error message
|
|
317
|
+
* @param {object|null} [details] optional structured details (e.g. { model, missing_modality })
|
|
318
|
+
*/
|
|
319
|
+
function buildRunFailed(runId, code, message, details = null) {
|
|
320
|
+
return {
|
|
321
|
+
type: "run.failed",
|
|
322
|
+
run_id: runId,
|
|
323
|
+
extensions: { run_id_ref: runId },
|
|
324
|
+
payload: {
|
|
325
|
+
stop_reason: "error",
|
|
326
|
+
error: { code, message, ...(details ? { details } : {}) },
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
// C1.1.3 — translateOpenClawChunkToEnvelope
|
|
333
|
+
// ---------------------------------------------------------------------------
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Translate a single openclaw stream chunk into zero or more unified envelopes.
|
|
337
|
+
*
|
|
338
|
+
* Real openclaw SSE event names:
|
|
339
|
+
* - response.output_text.delta — streaming text delta
|
|
340
|
+
* - response.output_text.done — text segment complete (no-op here)
|
|
341
|
+
* - response.reasoning_summary_text.delta — thinking/reasoning delta
|
|
342
|
+
* - response.tool_use.start — tool call begin: chunk carries
|
|
343
|
+
* { call_id, name, input?, parent_tool_use_id? }
|
|
344
|
+
* - response.tool_use.arguments.delta — incremental input/arguments JSON
|
|
345
|
+
* (string fragment to append to input_json)
|
|
346
|
+
* - response.tool_use.completed — tool call args complete (input_complete=true)
|
|
347
|
+
* - response.tool_result — tool result envelope: chunk has
|
|
348
|
+
* { call_id, output[]: Block[], is_error?, summary? }
|
|
349
|
+
* - response.completed / failed / end — turn finished
|
|
350
|
+
* - __envelopes — passthrough escape hatch:
|
|
351
|
+
* chunk.envelopes is appended verbatim
|
|
352
|
+
* (used by hermes bridge to inject
|
|
353
|
+
* child-run run.started/run.completed
|
|
354
|
+
* with parent_run_id + extensions)
|
|
355
|
+
*
|
|
356
|
+
* Run-scope override: tool_use / tool_result chunks may carry chunk.run_id;
|
|
357
|
+
* when present, the produced envelope's run_id uses it instead of the function
|
|
358
|
+
* arg runId. tool_use.start records the run scope on the call state so
|
|
359
|
+
* arguments.delta / completed envelopes ride the same run. text / thinking
|
|
360
|
+
* deltas always use the function arg runId.
|
|
361
|
+
*
|
|
362
|
+
* blockState shape:
|
|
363
|
+
* {
|
|
364
|
+
* text: { blockId, started },
|
|
365
|
+
* thinking: { blockId, started },
|
|
366
|
+
* toolUses: Map<call_id, { blockId, started, argsJson }>,
|
|
367
|
+
* }
|
|
368
|
+
*
|
|
369
|
+
* Multiple tool_use calls can be in flight simultaneously (parallel tool_use),
|
|
370
|
+
* so we key by call_id. parent_tool_use_id, when present on any envelope,
|
|
371
|
+
* surfaces in payload extensions so app can render subagent nesting.
|
|
372
|
+
*
|
|
373
|
+
* @param {{ event?: string, type?: string, [k: string]: any }} chunk
|
|
374
|
+
* @param {string} runId
|
|
375
|
+
* @param {object} blockState
|
|
376
|
+
* @returns {{ envelopes: any[], blockState: object }}
|
|
377
|
+
*/
|
|
378
|
+
function translateOpenClawChunkToEnvelope(chunk, runId, blockState) {
|
|
379
|
+
const event = chunk.event || chunk.type;
|
|
380
|
+
const envelopes = [];
|
|
381
|
+
let text = { ...blockState.text };
|
|
382
|
+
let thinking = { ...blockState.thinking };
|
|
383
|
+
// Clone the toolUses Map shallowly so callers can detect change.
|
|
384
|
+
const toolUses = new Map(blockState.toolUses || []);
|
|
385
|
+
|
|
386
|
+
// hermes subagent passthrough: bridge mints child-run-scoped envelopes
|
|
387
|
+
// (run.started / run.completed with parent_run_id + extensions) directly
|
|
388
|
+
// because the translator only knows about a single (parent) runId per call.
|
|
389
|
+
// Anything in chunk.envelopes is appended verbatim; this is **not** a hot
|
|
390
|
+
// path — only used by hermes when delegate_task fires.
|
|
391
|
+
if (event === "__envelopes") {
|
|
392
|
+
if (Array.isArray(chunk.envelopes)) {
|
|
393
|
+
for (const env of chunk.envelopes) {
|
|
394
|
+
if (env && typeof env === "object") envelopes.push(env);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return { envelopes, blockState: { text, thinking, toolUses } };
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// tool_use / tool_result chunks may override the run scope (subagent child
|
|
401
|
+
// run). text / thinking deltas stay on the caller's runId — child runs in
|
|
402
|
+
// hermes don't emit text, only tool calls.
|
|
403
|
+
const toolRunId = (typeof chunk.run_id === "string" && chunk.run_id) || runId;
|
|
404
|
+
|
|
405
|
+
if (event === "response.output_text.delta") {
|
|
406
|
+
const deltaText = chunk.delta ?? chunk.text ?? "";
|
|
407
|
+
|
|
408
|
+
if (!text.started) {
|
|
409
|
+
text.blockId = newBlockId();
|
|
410
|
+
text.content = "";
|
|
411
|
+
envelopes.push(buildBlockStarted(runId, { id: text.blockId, type: "text" }));
|
|
412
|
+
text.started = true;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
text.content = (text.content || "") + String(deltaText);
|
|
416
|
+
envelopes.push(buildBlockDelta(runId, text.blockId, deltaText));
|
|
417
|
+
} else if (event === "response.reasoning_summary_text.delta") {
|
|
418
|
+
const deltaText = chunk.delta ?? chunk.text ?? "";
|
|
419
|
+
|
|
420
|
+
if (!thinking.started) {
|
|
421
|
+
thinking.blockId = newBlockId();
|
|
422
|
+
thinking.content = "";
|
|
423
|
+
envelopes.push(buildBlockStarted(runId, { id: thinking.blockId, type: "thinking" }));
|
|
424
|
+
thinking.started = true;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
thinking.content = (thinking.content || "") + String(deltaText);
|
|
428
|
+
envelopes.push(buildBlockDelta(runId, thinking.blockId, deltaText));
|
|
429
|
+
} else if (event === "response.tool_use.start") {
|
|
430
|
+
// Begin a tool_use block. Stamp tool_call_id = call_id (stable across the lifecycle).
|
|
431
|
+
const callId = String(chunk.call_id || chunk.tool_use_id || newBlockId());
|
|
432
|
+
const toolName = String(chunk.name || chunk.tool_name || "unknown");
|
|
433
|
+
const inputInitial =
|
|
434
|
+
(chunk.input && typeof chunk.input === "object") ? chunk.input : {};
|
|
435
|
+
const blockId = newBlockId();
|
|
436
|
+
toolUses.set(callId, { blockId, started: true, argsJson: "", runId: toolRunId });
|
|
437
|
+
const startedBlock = {
|
|
438
|
+
id: blockId,
|
|
439
|
+
type: "tool_use",
|
|
440
|
+
tool_call_id: callId,
|
|
441
|
+
tool_name: toolName,
|
|
442
|
+
input: inputInitial,
|
|
443
|
+
input_complete: false,
|
|
444
|
+
};
|
|
445
|
+
const env = buildBlockStarted(toolRunId, startedBlock);
|
|
446
|
+
if (chunk.parent_tool_use_id) {
|
|
447
|
+
env.extensions = { parent_tool_use_id: chunk.parent_tool_use_id };
|
|
448
|
+
}
|
|
449
|
+
envelopes.push(env);
|
|
450
|
+
} else if (event === "response.function_call_arguments.delta") {
|
|
451
|
+
// picoclaw legacy event name → maps to tool_use.start + arguments.delta.
|
|
452
|
+
// chunk shape: { call_id, name, arguments } where arguments is a JSON
|
|
453
|
+
// fragment to append. We auto-start a tool_use block on first occurrence.
|
|
454
|
+
const callId = String(chunk.call_id || "");
|
|
455
|
+
const toolName = String(chunk.name || "unknown");
|
|
456
|
+
const argsFragment = String(chunk.arguments || "");
|
|
457
|
+
if (callId) {
|
|
458
|
+
let tu = toolUses.get(callId);
|
|
459
|
+
if (!tu) {
|
|
460
|
+
const blockId = newBlockId();
|
|
461
|
+
tu = { blockId, started: true, argsJson: "" };
|
|
462
|
+
toolUses.set(callId, tu);
|
|
463
|
+
envelopes.push(buildBlockStarted(runId, {
|
|
464
|
+
id: blockId, type: "tool_use",
|
|
465
|
+
tool_call_id: callId, tool_name: toolName,
|
|
466
|
+
input: {}, input_complete: false,
|
|
467
|
+
}));
|
|
468
|
+
}
|
|
469
|
+
if (argsFragment) {
|
|
470
|
+
tu.argsJson += argsFragment;
|
|
471
|
+
envelopes.push(buildBlockDelta(runId, tu.blockId, { input_json_delta: argsFragment }));
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
} else if (event === "response.tool_use.arguments.delta") {
|
|
475
|
+
const callId = String(chunk.call_id || chunk.tool_use_id || "");
|
|
476
|
+
const tu = toolUses.get(callId);
|
|
477
|
+
if (tu && tu.started) {
|
|
478
|
+
const fragment = String(chunk.delta ?? chunk.arguments ?? "");
|
|
479
|
+
tu.argsJson += fragment;
|
|
480
|
+
// Stream the arguments JSON fragment as block.delta with the
|
|
481
|
+
// standard input_json_delta key (matches Anthropic streaming convention).
|
|
482
|
+
// Delta MUST be on the same run scope as the tool_use.start envelope.
|
|
483
|
+
envelopes.push(
|
|
484
|
+
buildBlockDelta(tu.runId || runId, tu.blockId, { input_json_delta: fragment }),
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
// else: unknown call_id; drop silently
|
|
488
|
+
} else if (event === "response.tool_use.completed") {
|
|
489
|
+
const callId = String(chunk.call_id || chunk.tool_use_id || "");
|
|
490
|
+
const tu = toolUses.get(callId);
|
|
491
|
+
if (tu && tu.started) {
|
|
492
|
+
// Try to parse accumulated argsJson; if that fails, fall back to chunk.input.
|
|
493
|
+
let finalInput = {};
|
|
494
|
+
if (chunk.input && typeof chunk.input === "object") {
|
|
495
|
+
finalInput = chunk.input;
|
|
496
|
+
} else if (tu.argsJson) {
|
|
497
|
+
try { finalInput = JSON.parse(tu.argsJson); } catch { /* keep {} */ }
|
|
498
|
+
}
|
|
499
|
+
const completedBlock = {
|
|
500
|
+
id: tu.blockId,
|
|
501
|
+
type: "tool_use",
|
|
502
|
+
tool_call_id: callId,
|
|
503
|
+
tool_name: chunk.name || chunk.tool_name || "unknown",
|
|
504
|
+
input: finalInput,
|
|
505
|
+
input_complete: true,
|
|
506
|
+
};
|
|
507
|
+
// Same run scope as the matching .start envelope.
|
|
508
|
+
const env = buildBlockCompleted(tu.runId || runId, completedBlock);
|
|
509
|
+
if (chunk.parent_tool_use_id) {
|
|
510
|
+
env.extensions = { parent_tool_use_id: chunk.parent_tool_use_id };
|
|
511
|
+
}
|
|
512
|
+
envelopes.push(env);
|
|
513
|
+
toolUses.delete(callId);
|
|
514
|
+
}
|
|
515
|
+
} else if (event === "response.tool_result") {
|
|
516
|
+
// Tool result lives in a single block — emit started + completed together.
|
|
517
|
+
const callId = String(chunk.call_id || chunk.tool_use_id || "");
|
|
518
|
+
const blockId = newBlockId();
|
|
519
|
+
const rawOutput = Array.isArray(chunk.output) ? chunk.output : [];
|
|
520
|
+
// tool_result.output[*] 是嵌套 Block(block.schema.json 递归 $ref),
|
|
521
|
+
// 每项必须独立通过 block.schema 校验:id + type + status + 各子 schema 的
|
|
522
|
+
// required(text 块要 format/text)。runtime translator 大多只传
|
|
523
|
+
// {type, format, text},server jsonschema oneOf 会拒(误导性日志报
|
|
524
|
+
// "missing properties: format, text",其实是 id+status 缺失导致 text 分支
|
|
525
|
+
// 也跑挂)。在 builder 层集中补全。
|
|
526
|
+
const output = rawOutput.map(normalizeToolResultOutputItem);
|
|
527
|
+
const isError = !!chunk.is_error;
|
|
528
|
+
const summary = typeof chunk.summary === "string" ? chunk.summary : undefined;
|
|
529
|
+
const block = {
|
|
530
|
+
id: blockId, type: "tool_result", tool_call_id: callId,
|
|
531
|
+
output, is_error: isError, ...(summary !== undefined ? { summary } : {}),
|
|
532
|
+
};
|
|
533
|
+
// tool_result must land on the same run scope as the originating tool_use.
|
|
534
|
+
const started = buildBlockStarted(toolRunId, block);
|
|
535
|
+
const completed = buildBlockCompleted(toolRunId, block);
|
|
536
|
+
if (chunk.parent_tool_use_id) {
|
|
537
|
+
started.extensions = { parent_tool_use_id: chunk.parent_tool_use_id };
|
|
538
|
+
completed.extensions = { parent_tool_use_id: chunk.parent_tool_use_id };
|
|
539
|
+
}
|
|
540
|
+
envelopes.push(started, completed);
|
|
541
|
+
} else if (event === "response.output_text.done") {
|
|
542
|
+
// No incremental envelope needed — full text already accumulated via deltas.
|
|
543
|
+
// If runtime carries authoritative full text on .done (e.g. picoclaw), prefer it.
|
|
544
|
+
if (typeof chunk.text === "string" && chunk.text.length > 0) {
|
|
545
|
+
text.content = chunk.text;
|
|
546
|
+
}
|
|
547
|
+
} else if (
|
|
548
|
+
event === "response.completed" ||
|
|
549
|
+
event === "response.failed" ||
|
|
550
|
+
event === "end"
|
|
551
|
+
) {
|
|
552
|
+
// Close any still-open tool_use blocks (defensive — runtimes SHOULD emit
|
|
553
|
+
// tool_use.completed for each, but if they crash mid-call, don't leak the block).
|
|
554
|
+
// Honor the per-tool runId so child-run tools close on their own run scope.
|
|
555
|
+
for (const [callId, tu] of toolUses) {
|
|
556
|
+
if (tu.started) {
|
|
557
|
+
envelopes.push(buildBlockCompleted(tu.runId || runId, {
|
|
558
|
+
id: tu.blockId, type: "tool_use",
|
|
559
|
+
tool_call_id: callId, tool_name: "unknown", input: {}, input_complete: false,
|
|
560
|
+
}));
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
toolUses.clear();
|
|
564
|
+
// Close thinking first, then text. Then run.completed/failed.
|
|
565
|
+
// Carry the accumulated full text on the completed envelope (protocol
|
|
566
|
+
// §5.3.5: completed payload is the terminal full state of the block).
|
|
567
|
+
if (thinking.started && thinking.blockId) {
|
|
568
|
+
envelopes.push(buildBlockCompleted(runId, {
|
|
569
|
+
id: thinking.blockId,
|
|
570
|
+
type: "thinking",
|
|
571
|
+
text: thinking.content || "",
|
|
572
|
+
}));
|
|
573
|
+
}
|
|
574
|
+
if (text.started && text.blockId) {
|
|
575
|
+
envelopes.push(buildBlockCompleted(runId, {
|
|
576
|
+
id: text.blockId,
|
|
577
|
+
type: "text",
|
|
578
|
+
text: text.content || "",
|
|
579
|
+
}));
|
|
580
|
+
}
|
|
581
|
+
if (event === "response.failed") {
|
|
582
|
+
// OpenClaw's gateway (OpenAI Responses format) nests the failure under
|
|
583
|
+
// `response.error`; older/other shapes use top-level `error`. Read the
|
|
584
|
+
// nested path first so the original message (e.g. authentication_error)
|
|
585
|
+
// reaches the App instead of the generic "runtime error" fallback.
|
|
586
|
+
const errMsg =
|
|
587
|
+
chunk.response?.error?.message ||
|
|
588
|
+
chunk.error?.message ||
|
|
589
|
+
chunk.message ||
|
|
590
|
+
chunk.text ||
|
|
591
|
+
"runtime error";
|
|
592
|
+
envelopes.push(buildRunFailed(runId, "runtime.error", errMsg));
|
|
593
|
+
} else {
|
|
594
|
+
envelopes.push(buildRunCompleted(runId, "end_turn"));
|
|
595
|
+
}
|
|
596
|
+
text = { blockId: null, started: false, content: "" };
|
|
597
|
+
thinking = { blockId: null, started: false, content: "" };
|
|
598
|
+
}
|
|
599
|
+
// Unknown events: return empty envelopes
|
|
600
|
+
|
|
601
|
+
return { envelopes, blockState: { text, thinking, toolUses } };
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Convenience factory: produce an empty blockState with the shape expected by
|
|
606
|
+
* `translateOpenClawChunkToEnvelope`. Callers should use this instead of
|
|
607
|
+
* hand-rolling the shape so callsites stay correct across future shape changes.
|
|
608
|
+
*/
|
|
609
|
+
function newBlockState() {
|
|
610
|
+
return {
|
|
611
|
+
text: { blockId: null, started: false, content: "" },
|
|
612
|
+
thinking: { blockId: null, started: false, content: "" },
|
|
613
|
+
toolUses: new Map(),
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
// Auto-generated CJS wrapper. Source of truth: src-shared/envelope_builder.mjs.
|
|
618
|
+
// Do not edit this file by hand; run `node scripts/build-openclaw-plugin.mjs`.
|
|
619
|
+
module.exports = { buildRunStarted, buildRunCompleted, buildBlockStarted, buildBlockDelta, buildBlockCompleted, buildRunFailed };
|