qlogicagent 2.12.12 → 2.12.14
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/cli.js +371 -352
- package/dist/index.js +370 -351
- package/dist/protocol.js +1 -1
- package/dist/types/cli/acp-extended-handlers.d.ts +7 -0
- package/dist/types/cli/community-resource-installer.d.ts +2 -1
- package/dist/types/cli/community-workflow-installer.d.ts +29 -0
- package/dist/types/cli/credential-vault.d.ts +62 -0
- package/dist/types/cli/handlers/community-handler.d.ts +3 -0
- package/dist/types/cli/handlers/project-handler.d.ts +1 -1
- package/dist/types/cli/handlers/workflow-handler.d.ts +138 -8
- package/dist/types/cli/project-command-service.d.ts +3 -1
- package/dist/types/orchestration/workflow/budget-permission-gate.d.ts +1 -1
- package/dist/types/orchestration/workflow/builtin-executors.d.ts +6 -0
- package/dist/types/orchestration/workflow/capability-catalog.d.ts +64 -0
- package/dist/types/orchestration/workflow/expression.d.ts +8 -0
- package/dist/types/orchestration/workflow/host-executors.d.ts +1 -1
- package/dist/types/orchestration/workflow/n8n-expression.d.ts +48 -0
- package/dist/types/orchestration/workflow/n8n-import.d.ts +45 -12
- package/dist/types/orchestration/workflow/node-schema.d.ts +100 -0
- package/dist/types/orchestration/workflow/qla-executor-host.d.ts +27 -1
- package/dist/types/orchestration/workflow/run-history-store.d.ts +8 -1
- package/dist/types/orchestration/workflow/workflow-audit-store.d.ts +31 -0
- package/dist/types/orchestration/workflow/workflow-bundle.d.ts +65 -0
- package/dist/types/orchestration/workflow/workflow-controller.d.ts +20 -3
- package/dist/types/orchestration/workflow/workflow-patch.d.ts +15 -0
- package/dist/types/orchestration/workflow/workflow-runtime.d.ts +24 -0
- package/dist/types/orchestration/workflow/workflow-scheduler.d.ts +21 -0
- package/dist/types/orchestration/workflow/workflow-store.d.ts +17 -0
- package/dist/types/orchestration/workflow/workflow-trigger.d.ts +21 -0
- package/dist/types/orchestration/workflow-chat-builder.d.ts +18 -0
- package/dist/types/protocol/wire/acp-agent-management.d.ts +5 -0
- package/dist/types/protocol/wire/acp-protocol.d.ts +1 -0
- package/dist/types/protocol/wire/agent-events.d.ts +2 -2
- package/dist/types/protocol/wire/gateway-rpc.d.ts +3 -1
- package/dist/types/runtime/community/community-consent-client.d.ts +4 -0
- package/dist/types/runtime/infra/project-store.d.ts +1 -1
- package/dist/types/transport/acp-server.d.ts +1 -0
- package/package.json +1 -1
package/dist/protocol.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var q=["idle","running-right","running-left","waving","jumping","failed","waiting","running","review"];var Y="1.0.0",d={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,TURN_ABORTED:-32e3,TURN_TIMEOUT:-32001,LLM_ERROR:-32010,LLM_AUTH_ERROR:-32011,LLM_RATE_LIMIT:-32012,LLM_QUOTA_EXHAUSTED:-32013,LLM_MODEL_NOT_FOUND:-32014,TOOL_INVOKE_FAILED:-32020,TOOL_TIMEOUT:-32021,PROTOCOL_MISMATCH:-32030,REQUEST_DEADLINE_EXCEEDED:-32040,REQUEST_CANCELLED:-32041,REQUEST_DEDUPED:-32042,REQUEST_IDEMPOTENCY_REQUIRED:-32043},H={REQUEST:"tool.approval.request"};function P(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&t.method.length>0}function C(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&(typeof t.id=="string"||typeof t.id=="number")&&!("method"in t)}function h(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function G(e){let t;try{t=JSON.parse(e)}catch{return null}return C(t)||P(t)||h(t)?t:null}import{randomUUID as z}from"node:crypto";var X=["settings.list","settings.get","settings.validate","provider.list","config.get","config.tunables","tools.list","todos.list","tasks.list","agents.list","agents.get","agents.processes","agents.scan","session.list","session.get","session.resolve","thread.list","project.list","files.list","files.gitStatus","instructions.list","instructions.read","skills.list","skills.stats","memory.atlas","memory.activity","memory.list","memory.read","memory.search","media.listModels","media.status","pet.status","agent.health","agent.metrics"],J=new Set(["memory.dream","memory.propose","memory.consolidate","media.stt","pet.forge","pet.asset.import","solo.start","solo.evaluate","product.plan","product.create","product.message"]),Q=["memory.","pet.","usage."],$=new Set(["memory.atlas","memory.activity","memory.list","memory.read","memory.search","memory.attachment.locate","memory.attachment.adopt","pet.status"]);function f(e){return J.has(e)?{channel:"task",mutability:"write",defaultTimeoutMs:12e4}:X.some(t=>e===t||e.startsWith(`${t}.`)||e.startsWith(t))?{channel:"query",mutability:"read",defaultTimeoutMs:1e4}:{channel:"task",mutability:"write",defaultTimeoutMs:3e4}}function I(e){return $.has(e)||f(e).mutability==="read"?!1:Q.some(t=>e.startsWith(t))}function Z(e,t={}){let r=t.now??Date.now(),o=f(e),i=t.timeoutMs??o.defaultTimeoutMs;return{requestId:t.requestId??z(),createdAt:r,deadlineAt:r+i,channel:t.channel??o.channel,idempotencyKey:t.idempotencyKey,traceId:t.traceId}}function v(e,t=Date.now()){let r=e.meta;if(!r||typeof r!="object")return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta is required."}};if(typeof r.requestId!="string"||r.requestId.length===0)return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.requestId is required."}};if(r.channel!=="query"&&r.channel!=="task")return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.channel must be query or task."}};if(typeof r.createdAt!="number"||!Number.isFinite(r.createdAt))return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.createdAt is required."}};if(typeof r.deadlineAt!="number"||!Number.isFinite(r.deadlineAt))return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.deadlineAt is required."}};if(r.deadlineAt<=t)return{ok:!1,error:{code:d.REQUEST_DEADLINE_EXCEEDED,message:"RPC request deadline has already expired."}};let o=f(e.method).channel;return r.channel!==o?{ok:!1,error:{code:d.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${o}, got ${r.channel}.`}}:I(e.method)&&(typeof r.idempotencyKey!="string"||r.idempotencyKey.length===0)?{ok:!1,error:{code:d.REQUEST_IDEMPOTENCY_REQUIRED,message:`RPC method ${e.method} requires meta.idempotencyKey.`}}:{ok:!0,meta:r}}var R=class{now;active=new Map;idempotency=new Map;counters={completedRequests:0,cancelledRequests:0,deadlineExceededRequests:0,dedupedRequests:0,lateResponsesDropped:0,invalidRequests:0};constructor(t={}){this.now=t.now??(()=>Date.now())}begin(t,r){let o=v({method:t,meta:r},this.now());if(!o.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:o.error};if(r.idempotencyKey){let i=this.idempotency.get(r.idempotencyKey);if(i)return this.counters.dedupedRequests+=1,i.error?{status:"deduped",error:i.error}:{status:"deduped",result:i.result}}return this.active.set(r.requestId,{method:t,meta:r,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,r="cancelled"){let o=this.active.get(t);return!o||o.cancelled?!1:(o.cancelled=!0,o.cancelReason=r,this.counters.cancelledRequests+=1,!0)}expire(t){return this.active.get(t)?(this.active.delete(t),this.counters.deadlineExceededRequests+=1,!0):!1}settle(t,r,o){let i=this.active.get(t);return i?(this.active.delete(t),i.cancelled?(this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"cancelled"}):i.meta.deadlineAt<=this.now()?(this.counters.deadlineExceededRequests+=1,this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"deadline_exceeded"}):(this.counters.completedRequests+=1,i.meta.idempotencyKey&&this.idempotency.set(i.meta.idempotencyKey,{result:r,error:o,settledAt:this.now()}),{accepted:!0})):{accepted:!1,reason:"unknown"}}metrics(){return{activeRequests:this.active.size,...this.counters}}};var ee=["agent.health","agent.metrics","agent.cancel","session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.delete","project.rename","project.archive","project.unarchive","project.update","project.archiveByGroup","project.purgeAll","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.delete","files.gitStatus","skills.list","memory.list-files","memory.atlas","memory.activity","memory.observe","memory.propose","memory.consolidate","memory.update","memory.attachment.adopt","memory.attachment.locate"];var M=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.skill_instruction","turn.ask_user","turn.media_result","turn.media_progress","turn.media_usage","turn.media_capability_check","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_delta","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.usage_update","team.member.notification","session.info","memory.updated","skills.updated","pet.soul_ready","pet.reaction","pet.growth","pet.state","pet.confirm","pet.asset.updated","system.activity","workflow.created","workflow.updated","workflow.deleted","workflow.runStarted","workflow.runCompleted","workflow.runFailed","workflow.nodeStatus"],k=["solo.progress","solo.agentDelta","solo.agentUsage","solo.agentDiff","solo.evaluation","product.taskStarted","product.taskOutput","product.taskCompleted","product.taskFailed","product.budgetUpdate","product.checkpointed","product.dagTopology","plan.interrupted"],te=[...M,...k];var re=1,oe={INITIALIZE:"initialize",SESSION_NEW:"session/new",SESSION_PROMPT:"session/prompt",SESSION_CLOSE:"session/close",SESSION_SET_CONFIG:"session/set_config_option",SESSION_SET_MODEL:"session/set_model",SESSION_SET_MODE:"session/set_mode",SESSION_LOAD:"session/load",SESSION_CANCEL:"session/cancel",SESSION_UPDATE:"session/update",SESSION_REQUEST_PERMISSION:"session/request_permission",FS_READ_TEXT_FILE:"fs/read_text_file",FS_WRITE_TEXT_FILE:"fs/write_text_file"},ne={ABORT:"x/abort",DREAM:"x/dream",AGENTS_LIST:"x/agents.list",SOLO_START:"x/solo.start",SOLO_STATUS:"x/solo.status",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_STATUS:"x/product.status",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",SOLO_SPEC_CHAT:"x/solo.specChat",SOLO_SPEC_JUDGE:"x/solo.specJudge",WORKFLOW_CHAT:"x/workflow.chat",PRODUCT_SUBSCRIBE:"x/product.subscribe"},x={USER_MESSAGE_CHUNK:"user_message_chunk",AGENT_MESSAGE_CHUNK:"agent_message_chunk",AGENT_THOUGHT_CHUNK:"agent_thought_chunk",TOOL_CALL:"tool_call",TOOL_CALL_UPDATE:"tool_call_update",PLAN:"plan",USAGE_UPDATE:"usage_update",CONFIG_OPTION_UPDATE:"config_option_update",SESSION_INFO_UPDATE:"session_info_update",AVAILABLE_COMMANDS_UPDATE:"available_commands_update",CURRENT_MODE_UPDATE:"current_mode_update"},ie={X_SKILL_INSTRUCTION:"x_skill_instruction",X_SESSION_INFO:"x_session_info",X_RELAY:"x_relay"};function O(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&"id"in t}function N(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function w(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function se(e){let t;try{t=JSON.parse(e)}catch{return null}return w(t)||O(t)||N(t)?t:null}function ae(e){return Object.values(x).includes(e)}function pe(e){return e.startsWith("x_")}var E=["gatewayVersion","toolNamespaces","workspaceIds","installedCapabilities","enabledCapabilities","features","approvalMode","toolManifests","skillManifests","pluginManifests","mcpManifests","approvalPolicy","workspaceSummaries"];function g(e){return e?e.map(t=>({...t})):void 0}function S(e){return e?e.map(t=>({...t})):void 0}function ce(e){return e?[...e]:void 0}function D(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function m(e){return{...e,toolNamespaces:[...e.toolNamespaces],workspaceIds:[...e.workspaceIds],...e.changedSections?{changedSections:[...e.changedSections]}:{},...e.installedCapabilities?{installedCapabilities:[...e.installedCapabilities]}:{},...e.enabledCapabilities?{enabledCapabilities:[...e.enabledCapabilities]}:{},...e.features?{features:[...e.features]}:{},...e.toolManifests?{toolManifests:g(e.toolManifests)}:{},...e.skillManifests?{skillManifests:g(e.skillManifests)}:{},...e.pluginManifests?{pluginManifests:g(e.pluginManifests)}:{},...e.mcpManifests?{mcpManifests:g(e.mcpManifests)}:{},...e.approvalPolicy?{approvalPolicy:{...e.approvalPolicy}}:{},...e.workspaceSummaries?{workspaceSummaries:S(e.workspaceSummaries)}:{}}}function le(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?m(r):{...m(t),snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,...r.gatewayVersion!==void 0?{gatewayVersion:r.gatewayVersion}:{},...r.syncMode?{syncMode:r.syncMode}:{},...r.baseSnapshotVersion?{baseSnapshotVersion:r.baseSnapshotVersion}:{},...r.changedSections?{changedSections:[...r.changedSections]}:{},...r.toolNamespaces?{toolNamespaces:[...r.toolNamespaces]}:{},...r.workspaceIds?{workspaceIds:[...r.workspaceIds]}:{},...r.installedCapabilities?{installedCapabilities:[...r.installedCapabilities]}:{},...r.enabledCapabilities?{enabledCapabilities:[...r.enabledCapabilities]}:{},...r.features?{features:[...r.features]}:{},...r.approvalMode?{approvalMode:r.approvalMode}:{},...r.toolManifests?{toolManifests:g(r.toolManifests)}:{},...r.skillManifests?{skillManifests:g(r.skillManifests)}:{},...r.pluginManifests?{pluginManifests:g(r.pluginManifests)}:{},...r.mcpManifests?{mcpManifests:g(r.mcpManifests)}:{},...r.approvalPolicy?{approvalPolicy:{...r.approvalPolicy}}:{},...r.workspaceSummaries?{workspaceSummaries:S(r.workspaceSummaries)}:{}}}function de(e){return D(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function ue(e){return D(e.map(t=>t.id))}function ge(e){let{previous:t,current:r}=e;if(!t)return{...m(r),syncMode:"full"};if(t.snapshotVersion===r.snapshotVersion)return null;let o=E.filter(s=>JSON.stringify(t[s])!==JSON.stringify(r[s]));if(o.length===E.length)return{...m(r),syncMode:"full"};let i={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:o,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},c=i;for(let s of o){let n=r[s];if(n!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":c[s]=ce(n);break;case"approvalPolicy":c[s]={...n};break;case"workspaceSummaries":c[s]=S(n);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":c[s]=g(n);break;default:c[s]=n;break}}return i}var me=["web_search","web_fetch","deep_research","browser_execution"],ye=["web-intelligence","browser-execution"],fe=["discovery","read-url","multi-source-research","interactive-browser"],Ae=["stateless","render-backend","interactive-session"],Re=["stateless","stateless-single-step","stateful-session-required"],Ee=["required","conditional","none"],Se=["browser-read","browser-authenticated-read","browser-state-changing"];var _e=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],be=["web_search","web_fetch","deep_research","blocked"],Te=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],Pe=["none","same-capability-once","degrade-only"];var Ce=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],he=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],Ie=["observe-only","parent-write","deny"];var ve=2,a={gatewayImage:"gateway.image.desktop-slim",whisperModelTiny:"speech.whisper.model.tiny",ffmpegWin32X64:"runtime.ffmpeg.win32-x64",nodeWin32X64:"runtime.node.win32-x64",dockerDesktopWin32X64:"runtime.docker-desktop.win32-x64",dockerDesktopDarwinX64:"runtime.docker-desktop.darwin-x64",dockerDesktopDarwinArm64:"runtime.docker-desktop.darwin-arm64"},y={desktopDockerBridge:"desktop.docker-bridge",desktopEmbeddedWin32X64:"desktop.embedded.win32-x64"};function U(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Me(e){return{...e,assetIds:[...e.assetIds]}}function K(){return{[y.desktopDockerBridge]:{id:y.desktopDockerBridge,title:"Desktop Docker Bridge",platform:"any",assetIds:[a.gatewayImage,a.dockerDesktopWin32X64,a.dockerDesktopDarwinX64,a.dockerDesktopDarwinArm64],description:"Docker bridge mode downloads the desktop slim gateway image on demand."},[y.desktopEmbeddedWin32X64]:{id:y.desktopEmbeddedWin32X64,title:"Desktop Embedded Win32 x64",platform:"win32-x64",assetIds:[a.nodeWin32X64,a.ffmpegWin32X64,a.whisperModelTiny],description:"Embedded desktop mode requires the bundled Node/FFmpeg runtimes and the whisper model asset."}}}function W(e,t){return e.assets[t]}function V(e,t){return e.profiles[t]}function ke(e,t){let r=V(e,t);return r?r.assetIds.map(o=>W(e,o)).filter(o=>!!o):[]}function xe(e,t){return e.assets[t.id]=U(t),F(e)}function _(e){if(!e)return;let t=e.artifacts[0];if(!(!t?.url||!t.sha256||typeof t.size!="number"))return{version:e.version,sha256:t.sha256,size:t.size,url:t.url}}function F(e){let t=_(e.assets[a.gatewayImage]),r=_(e.assets[a.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function L(e,t){if(!(typeof e.version!="string"||typeof e.url!="string"))return{...t,version:e.version,artifacts:[{fileName:e.url.split("/").pop()||`${t.id}.bin`,url:e.url,sha256:typeof e.sha256=="string"?e.sha256:void 0,size:typeof e.size=="number"?e.size:void 0}]}}function Oe(e){let t=e&&typeof e=="object"?e:{},r={},o=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[n,p]of Object.entries(o)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.artifacts)||(r[n]=U(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let n=L(t.gateway,{id:a.gatewayImage,title:"OpenClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});n&&(r[n.id]=n)}if(!r[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let n=L(t.whisperModel,{id:a.whisperModelTiny,title:"Whisper Tiny Model",kind:"model",delivery:"remote",platform:"any",description:"Shared whisper.cpp tiny model asset for embedded desktop speech recognition."});n&&(r[n.id]=n)}let c={...K()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[n,p]of Object.entries(s)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.assetIds)||(c[n]=Me(u))}return F({schemaVersion:typeof t.schemaVersion=="number"?t.schemaVersion:2,channel:typeof t.channel=="string"?t.channel:void 0,publishedAt:typeof t.publishedAt=="string"?t.publishedAt:void 0,minElectronVersion:typeof t.minElectronVersion=="string"?t.minElectronVersion:void 0,releaseNotes:typeof t.releaseNotes=="string"?t.releaseNotes:void 0,assets:r,profiles:c})}var Ne=["pending","captured","failed","restored"],we=["file","directory","missing"],De=["metadata-only","workspace-copy","shadow-git"];var Le=["api-key","oauth","token","aws-sdk"],Ue=["rate_limit","auth","server_error","timeout","network","unknown"],Ke=["requiresOpenAiAnthropicToolPayload"];function We(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var j="openai-codex";function A(e){let t=e.trim().toLowerCase();return t==="z.ai"||t==="z-ai"?"zai":t==="opencode-zen"?"opencode":t==="kimi-code"?"kimi-coding":t==="bedrock"||t==="aws-bedrock"?"amazon-bedrock":t==="bytedance"||t==="doubao"?"volcengine":t}function B(e){let t=A(e);return t==="volcengine-plan"?"volcengine":t==="qwen-coding"?"qwen":t==="byteplus-plan"?"byteplus":t}var Ve=B,Fe={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},je={anthropic:{providerFamily:"anthropic"},"amazon-bedrock":{providerFamily:"anthropic"},"kimi-coding":{anthropicToolSchemaMode:"openai-functions",anthropicToolChoiceMode:"openai-string-modes",preserveAnthropicThinkingSignatures:!1},mistral:{transcriptToolCallIdMode:"strict9",transcriptToolCallIdModelHints:["mistral","mixtral","codestral","pixtral","devstral","ministral","mistralai"]},openai:{providerFamily:"openai"},[j]:{providerFamily:"openai"},openrouter:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},opencode:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},kilocode:{providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]}};function b(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(o=>r.includes(o))}function l(e){let t=A(e??"");return{...Fe,...je[t]}}function Be(e){return l(e).preserveAnthropicThinkingSignatures}function qe(e){let t=l(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function Ye(e){return l(e).anthropicToolSchemaMode==="openai-functions"}function He(e){return l(e).anthropicToolChoiceMode==="openai-string-modes"}function Ge(e){return l(e).openAiCompatTurnValidation}function ze(e){return l(e).providerFamily==="openai"}function Xe(e){return l(e).providerFamily==="anthropic"}function Je(e){return b(e.modelId,l(e.provider).dropThinkingBlockModelHints)}function Qe(e){let t=l(e.provider);return t.providerThoughtSignatureSanitization&&b(e.modelId,t.providerThoughtSignatureModelHints)}function $e(e,t){let r=l(e),o=r.transcriptToolCallIdMode;if(o==="strict9")return o;if(b(t,r.transcriptToolCallIdModelHints))return"strict9"}var T={anthropic:["ANTHROPIC_OAUTH_TOKEN","ANTHROPIC_API_KEY"],chutes:["CHUTES_OAUTH_TOKEN","CHUTES_API_KEY"],zai:["ZAI_API_KEY","Z_AI_API_KEY"],opencode:["OPENCODE_API_KEY","OPENCODE_ZEN_API_KEY"],qwen:["DASHSCOPE_API_KEY","QWEN_API_KEY"],"qwen-coding":["DASHSCOPE_API_KEY","QWEN_API_KEY"],volcengine:["VOLCANO_ENGINE_API_KEY","ARK_API_KEY","DOUBAO_API_KEY"],"volcengine-plan":["VOLCANO_ENGINE_API_KEY","ARK_API_KEY","DOUBAO_API_KEY"],byteplus:["BYTEPLUS_API_KEY"],"byteplus-plan":["BYTEPLUS_API_KEY"],"kimi-coding":["KIMI_API_KEY","KIMICODE_API_KEY"],huggingface:["HUGGINGFACE_HUB_TOKEN","HF_TOKEN"],openai:["OPENAI_API_KEY"],voyage:["VOYAGE_API_KEY"],groq:["GROQ_API_KEY"],deepgram:["DEEPGRAM_API_KEY"],cerebras:["CEREBRAS_API_KEY"],xai:["XAI_API_KEY"],openrouter:["OPENROUTER_API_KEY"],litellm:["LITELLM_API_KEY"],"vercel-ai-gateway":["AI_GATEWAY_API_KEY"],"cloudflare-ai-gateway":["CLOUDFLARE_AI_GATEWAY_API_KEY"],moonshot:["MOONSHOT_API_KEY"],minimax:["MINIMAX_API_KEY"],"minimax-cn":["MINIMAX_CN_API_KEY","MINIMAX_API_KEY"],nvidia:["NVIDIA_API_KEY"],xiaomi:["XIAOMI_API_KEY"],synthetic:["SYNTHETIC_API_KEY"],venice:["VENICE_API_KEY"],mistral:["MISTRAL_API_KEY"],together:["TOGETHER_API_KEY"],qianfan:["QIANFAN_API_KEY"],ollama:["OLLAMA_API_KEY"],vllm:["VLLM_API_KEY"],kilocode:["KILOCODE_API_KEY"]};function Ze(){return[...new Set(Object.values(T).flat())]}function et(e){let t=A(e.provider),r=e.env??process.env,o=new Set(e.appliedEnvKeys??[]),i=n=>{let p=r[n]?.trim();if(!p)return null;let u=o.has(n)?`shell env: ${n}`:`env: ${n}`;return{apiKey:p,source:u}},c=e.resolveSpecialApiKey?.(t,r,o);if(c)return c;let s=T[t];if(!s||s.length===0)return null;for(let n of s){let p=i(n);if(p)return p}return null}export{ne as ACP_EXTENDED_METHODS,ie as ACP_EXTENDED_SESSION_UPDATE_TYPES,oe as ACP_METHODS,re as ACP_PROTOCOL_VERSION,x as ACP_SESSION_UPDATE_TYPES,H as AGENT_RPC_APPROVAL_METHODS,d as AGENT_RPC_ERROR_CODES,Y as AGENT_RPC_PROTOCOL_VERSION,k as AGENT_TEAM_WS_EVENT_NAMES,M as AGENT_WS_EVENT_NAMES,te as ALL_AGENT_WS_EVENT_NAMES,E as CAPABILITY_MANIFEST_DIFF_SECTIONS,ee as GATEWAY_RPC_METHODS,R as GatewayRpcContract,Ce as MEMORY_OBSERVATION_HOOK_VALUES,he as MEMORY_OBSERVATION_SOURCE_VALUES,Ie as MEMORY_WRITE_ACCESS_VALUES,De as MUTATION_CHECKPOINT_BACKEND_VALUES,we as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Ne as MUTATION_CHECKPOINT_PHASE_VALUES,q as PETDEX_ANIMATION_IDS,Le as PROVIDER_RUNTIME_AUTH_MODE_VALUES,Ke as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,T as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,j as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ue as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,ve as RESOURCE_MANIFEST_SCHEMA_VERSION,a as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,_e as WEB_ACTION_SCOPE_VALUES,Ee as WEB_APPROVAL_DEFAULT_VALUES,ye as WEB_CAPABILITY_FAMILY_VALUES,me as WEB_CAPABILITY_ID_VALUES,be as WEB_DEGRADATION_TARGET_VALUES,Te as WEB_ESCALATION_REASON_VALUES,Ae as WEB_EXECUTION_MODE_VALUES,Se as WEB_POLICY_RISK_CLASS_VALUES,Pe as WEB_RETRY_POLICY_VALUES,Re as WEB_STATEFULNESS_VALUES,fe as WEB_TASK_MODE_VALUES,Z as buildAgentRpcMeta,f as classifyGatewayRpcMethod,m as cloneCapabilityManifestSnapshot,ge as createCapabilityManifestDiffPayload,K as createDefaultRuntimeResourceProfiles,de as deriveCapabilityToolNamespaces,ue as deriveCapabilityWorkspaceIds,_ as getManifestShortcutEntry,W as getRuntimeResourceAsset,V as getRuntimeResourceProfile,ke as getRuntimeResourceProfileAssets,N as isAcpJsonRpcNotification,O as isAcpJsonRpcRequest,w as isAcpJsonRpcResponse,h as isAgentRpcNotification,P as isAgentRpcRequest,C as isAgentRpcResponse,Xe as isAnthropicProviderRuntimeFamily,pe as isExtendedSessionUpdateType,ze as isOpenAiProviderRuntimeFamily,ae as isStandardSessionUpdateType,Ze as listProviderRuntimeEnvApiKeyNames,le as mergeCapabilityManifestSnapshot,A as normalizeProviderRuntimeId,B as normalizeProviderRuntimeIdForAuth,Oe as normalizeRuntimeResourceManifest,se as parseAcpMessage,G as parseAgentRpcMessage,Be as preservesProviderRuntimeAnthropicThinkingSignatures,We as readProviderRuntimeCompatFlag,v as requireGatewayRpcMeta,I as requiresIdempotencyKey,qe as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,l as resolveProviderRuntimeCapabilities,et as resolveProviderRuntimeEnvApiKey,Ve as resolveProviderRuntimeKeyFamily,$e as resolveProviderRuntimeTranscriptToolCallIdMode,Je as shouldDropThinkingBlocksForProviderRuntimeModel,Qe as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,Ge as supportsOpenAiCompatTurnValidationForProviderRuntime,xe as upsertRuntimeResourceAsset,Ye as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,He as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
|
|
1
|
+
var q=["idle","running-right","running-left","waving","jumping","failed","waiting","running","review"];var Y="1.0.0",d={PARSE_ERROR:-32700,INVALID_REQUEST:-32600,METHOD_NOT_FOUND:-32601,INVALID_PARAMS:-32602,INTERNAL_ERROR:-32603,TURN_ABORTED:-32e3,TURN_TIMEOUT:-32001,LLM_ERROR:-32010,LLM_AUTH_ERROR:-32011,LLM_RATE_LIMIT:-32012,LLM_QUOTA_EXHAUSTED:-32013,LLM_MODEL_NOT_FOUND:-32014,TOOL_INVOKE_FAILED:-32020,TOOL_TIMEOUT:-32021,PROTOCOL_MISMATCH:-32030,REQUEST_DEADLINE_EXCEEDED:-32040,REQUEST_CANCELLED:-32041,REQUEST_DEDUPED:-32042,REQUEST_IDEMPOTENCY_REQUIRED:-32043},H={REQUEST:"tool.approval.request"};function P(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&t.method.length>0}function C(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&(typeof t.id=="string"||typeof t.id=="number")&&!("method"in t)}function I(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function G(e){let t;try{t=JSON.parse(e)}catch{return null}return C(t)||P(t)||I(t)?t:null}import{randomUUID as z}from"node:crypto";var X=["settings.list","settings.get","settings.validate","provider.list","config.get","config.tunables","tools.list","todos.list","tasks.list","agents.list","agents.get","agents.processes","agents.scan","session.list","session.get","session.resolve","thread.list","project.list","files.list","files.gitStatus","instructions.list","instructions.read","skills.list","skills.stats","memory.atlas","memory.activity","memory.list","memory.read","memory.search","media.listModels","media.status","pet.status","agent.health","agent.metrics"],J=new Set(["memory.dream","memory.propose","memory.consolidate","media.stt","pet.forge","pet.asset.import","solo.start","solo.evaluate","product.plan","product.create","product.message"]),Q=["memory.","pet.","usage."],$=new Set(["memory.atlas","memory.activity","memory.list","memory.read","memory.search","memory.attachment.locate","memory.attachment.adopt","pet.status"]);function f(e){return J.has(e)?{channel:"task",mutability:"write",defaultTimeoutMs:12e4}:X.some(t=>e===t||e.startsWith(`${t}.`)||e.startsWith(t))?{channel:"query",mutability:"read",defaultTimeoutMs:1e4}:{channel:"task",mutability:"write",defaultTimeoutMs:3e4}}function h(e){return $.has(e)||f(e).mutability==="read"?!1:Q.some(t=>e.startsWith(t))}function Z(e,t={}){let r=t.now??Date.now(),o=f(e),i=t.timeoutMs??o.defaultTimeoutMs;return{requestId:t.requestId??z(),createdAt:r,deadlineAt:r+i,channel:t.channel??o.channel,idempotencyKey:t.idempotencyKey,traceId:t.traceId}}function v(e,t=Date.now()){let r=e.meta;if(!r||typeof r!="object")return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta is required."}};if(typeof r.requestId!="string"||r.requestId.length===0)return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.requestId is required."}};if(r.channel!=="query"&&r.channel!=="task")return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.channel must be query or task."}};if(typeof r.createdAt!="number"||!Number.isFinite(r.createdAt))return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.createdAt is required."}};if(typeof r.deadlineAt!="number"||!Number.isFinite(r.deadlineAt))return{ok:!1,error:{code:d.INVALID_REQUEST,message:"RPC request meta.deadlineAt is required."}};if(r.deadlineAt<=t)return{ok:!1,error:{code:d.REQUEST_DEADLINE_EXCEEDED,message:"RPC request deadline has already expired."}};let o=f(e.method).channel;return r.channel!==o?{ok:!1,error:{code:d.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${o}, got ${r.channel}.`}}:h(e.method)&&(typeof r.idempotencyKey!="string"||r.idempotencyKey.length===0)?{ok:!1,error:{code:d.REQUEST_IDEMPOTENCY_REQUIRED,message:`RPC method ${e.method} requires meta.idempotencyKey.`}}:{ok:!0,meta:r}}var R=class{now;active=new Map;idempotency=new Map;counters={completedRequests:0,cancelledRequests:0,deadlineExceededRequests:0,dedupedRequests:0,lateResponsesDropped:0,invalidRequests:0};constructor(t={}){this.now=t.now??(()=>Date.now())}begin(t,r){let o=v({method:t,meta:r},this.now());if(!o.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:o.error};if(r.idempotencyKey){let i=this.idempotency.get(r.idempotencyKey);if(i)return this.counters.dedupedRequests+=1,i.error?{status:"deduped",error:i.error}:{status:"deduped",result:i.result}}return this.active.set(r.requestId,{method:t,meta:r,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,r="cancelled"){let o=this.active.get(t);return!o||o.cancelled?!1:(o.cancelled=!0,o.cancelReason=r,this.counters.cancelledRequests+=1,!0)}expire(t){return this.active.get(t)?(this.active.delete(t),this.counters.deadlineExceededRequests+=1,!0):!1}settle(t,r,o){let i=this.active.get(t);return i?(this.active.delete(t),i.cancelled?(this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"cancelled"}):i.meta.deadlineAt<=this.now()?(this.counters.deadlineExceededRequests+=1,this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"deadline_exceeded"}):(this.counters.completedRequests+=1,i.meta.idempotencyKey&&this.idempotency.set(i.meta.idempotencyKey,{result:r,error:o,settledAt:this.now()}),{accepted:!0})):{accepted:!1,reason:"unknown"}}metrics(){return{activeRequests:this.active.size,...this.counters}}};var ee=["agent.health","agent.metrics","agent.cancel","session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.delete","project.rename","project.archive","project.unarchive","project.update","project.archiveByGroup","project.purgeAll","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.delete","files.gitStatus","skills.list","memory.list-files","memory.atlas","memory.activity","memory.observe","memory.propose","memory.consolidate","memory.update","memory.attachment.adopt","memory.attachment.locate"];var M=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.skill_instruction","turn.ask_user","turn.media_result","turn.media_progress","turn.media_usage","turn.media_capability_check","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_delta","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.usage_update","team.member.notification","session.info","memory.updated","skills.updated","pet.soul_ready","pet.reaction","pet.growth","pet.state","pet.confirm","pet.asset.updated","system.activity","workflow.created","workflow.updated","workflow.deleted","workflow.runStarted","workflow.runCompleted","workflow.runFailed","workflow.nodeStatus","workflow.triggerDropped","workflow.alert","workflow.approvalRequested"],k=["solo.progress","solo.agentDelta","solo.agentUsage","solo.agentDiff","solo.evaluation","product.taskStarted","product.taskOutput","product.taskCompleted","product.taskFailed","product.budgetUpdate","product.checkpointed","product.dagTopology","plan.interrupted"],te=[...M,...k];var re=1,oe={INITIALIZE:"initialize",SESSION_NEW:"session/new",SESSION_PROMPT:"session/prompt",SESSION_CLOSE:"session/close",SESSION_SET_CONFIG:"session/set_config_option",SESSION_SET_MODEL:"session/set_model",SESSION_SET_MODE:"session/set_mode",SESSION_LOAD:"session/load",SESSION_CANCEL:"session/cancel",SESSION_UPDATE:"session/update",SESSION_REQUEST_PERMISSION:"session/request_permission",FS_READ_TEXT_FILE:"fs/read_text_file",FS_WRITE_TEXT_FILE:"fs/write_text_file"},ne={ABORT:"x/abort",DREAM:"x/dream",AGENTS_LIST:"x/agents.list",SOLO_START:"x/solo.start",SOLO_STATUS:"x/solo.status",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_STATUS:"x/product.status",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",SOLO_SPEC_CHAT:"x/solo.specChat",SOLO_SPEC_JUDGE:"x/solo.specJudge",WORKFLOW_CHAT:"x/workflow.chat",WORKFLOW_MATCH_INTENT:"x/workflow.matchIntent",PRODUCT_SUBSCRIBE:"x/product.subscribe"},x={USER_MESSAGE_CHUNK:"user_message_chunk",AGENT_MESSAGE_CHUNK:"agent_message_chunk",AGENT_THOUGHT_CHUNK:"agent_thought_chunk",TOOL_CALL:"tool_call",TOOL_CALL_UPDATE:"tool_call_update",PLAN:"plan",USAGE_UPDATE:"usage_update",CONFIG_OPTION_UPDATE:"config_option_update",SESSION_INFO_UPDATE:"session_info_update",AVAILABLE_COMMANDS_UPDATE:"available_commands_update",CURRENT_MODE_UPDATE:"current_mode_update"},ie={X_SKILL_INSTRUCTION:"x_skill_instruction",X_SESSION_INFO:"x_session_info",X_RELAY:"x_relay"};function O(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&"id"in t}function N(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function w(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function se(e){let t;try{t=JSON.parse(e)}catch{return null}return w(t)||O(t)||N(t)?t:null}function ae(e){return Object.values(x).includes(e)}function pe(e){return e.startsWith("x_")}var E=["gatewayVersion","toolNamespaces","workspaceIds","installedCapabilities","enabledCapabilities","features","approvalMode","toolManifests","skillManifests","pluginManifests","mcpManifests","approvalPolicy","workspaceSummaries"];function g(e){return e?e.map(t=>({...t})):void 0}function _(e){return e?e.map(t=>({...t})):void 0}function ce(e){return e?[...e]:void 0}function D(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function m(e){return{...e,toolNamespaces:[...e.toolNamespaces],workspaceIds:[...e.workspaceIds],...e.changedSections?{changedSections:[...e.changedSections]}:{},...e.installedCapabilities?{installedCapabilities:[...e.installedCapabilities]}:{},...e.enabledCapabilities?{enabledCapabilities:[...e.enabledCapabilities]}:{},...e.features?{features:[...e.features]}:{},...e.toolManifests?{toolManifests:g(e.toolManifests)}:{},...e.skillManifests?{skillManifests:g(e.skillManifests)}:{},...e.pluginManifests?{pluginManifests:g(e.pluginManifests)}:{},...e.mcpManifests?{mcpManifests:g(e.mcpManifests)}:{},...e.approvalPolicy?{approvalPolicy:{...e.approvalPolicy}}:{},...e.workspaceSummaries?{workspaceSummaries:_(e.workspaceSummaries)}:{}}}function le(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?m(r):{...m(t),snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,...r.gatewayVersion!==void 0?{gatewayVersion:r.gatewayVersion}:{},...r.syncMode?{syncMode:r.syncMode}:{},...r.baseSnapshotVersion?{baseSnapshotVersion:r.baseSnapshotVersion}:{},...r.changedSections?{changedSections:[...r.changedSections]}:{},...r.toolNamespaces?{toolNamespaces:[...r.toolNamespaces]}:{},...r.workspaceIds?{workspaceIds:[...r.workspaceIds]}:{},...r.installedCapabilities?{installedCapabilities:[...r.installedCapabilities]}:{},...r.enabledCapabilities?{enabledCapabilities:[...r.enabledCapabilities]}:{},...r.features?{features:[...r.features]}:{},...r.approvalMode?{approvalMode:r.approvalMode}:{},...r.toolManifests?{toolManifests:g(r.toolManifests)}:{},...r.skillManifests?{skillManifests:g(r.skillManifests)}:{},...r.pluginManifests?{pluginManifests:g(r.pluginManifests)}:{},...r.mcpManifests?{mcpManifests:g(r.mcpManifests)}:{},...r.approvalPolicy?{approvalPolicy:{...r.approvalPolicy}}:{},...r.workspaceSummaries?{workspaceSummaries:_(r.workspaceSummaries)}:{}}}function de(e){return D(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function ue(e){return D(e.map(t=>t.id))}function ge(e){let{previous:t,current:r}=e;if(!t)return{...m(r),syncMode:"full"};if(t.snapshotVersion===r.snapshotVersion)return null;let o=E.filter(s=>JSON.stringify(t[s])!==JSON.stringify(r[s]));if(o.length===E.length)return{...m(r),syncMode:"full"};let i={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:o,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},c=i;for(let s of o){let n=r[s];if(n!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":c[s]=ce(n);break;case"approvalPolicy":c[s]={...n};break;case"workspaceSummaries":c[s]=_(n);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":c[s]=g(n);break;default:c[s]=n;break}}return i}var me=["web_search","web_fetch","deep_research","browser_execution"],ye=["web-intelligence","browser-execution"],fe=["discovery","read-url","multi-source-research","interactive-browser"],Ae=["stateless","render-backend","interactive-session"],Re=["stateless","stateless-single-step","stateful-session-required"],Ee=["required","conditional","none"],_e=["browser-read","browser-authenticated-read","browser-state-changing"];var Se=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],be=["web_search","web_fetch","deep_research","blocked"],Te=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],Pe=["none","same-capability-once","degrade-only"];var Ce=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],Ie=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],he=["observe-only","parent-write","deny"];var ve=2,a={gatewayImage:"gateway.image.desktop-slim",whisperModelTiny:"speech.whisper.model.tiny",ffmpegWin32X64:"runtime.ffmpeg.win32-x64",nodeWin32X64:"runtime.node.win32-x64",dockerDesktopWin32X64:"runtime.docker-desktop.win32-x64",dockerDesktopDarwinX64:"runtime.docker-desktop.darwin-x64",dockerDesktopDarwinArm64:"runtime.docker-desktop.darwin-arm64"},y={desktopDockerBridge:"desktop.docker-bridge",desktopEmbeddedWin32X64:"desktop.embedded.win32-x64"};function U(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Me(e){return{...e,assetIds:[...e.assetIds]}}function K(){return{[y.desktopDockerBridge]:{id:y.desktopDockerBridge,title:"Desktop Docker Bridge",platform:"any",assetIds:[a.gatewayImage,a.dockerDesktopWin32X64,a.dockerDesktopDarwinX64,a.dockerDesktopDarwinArm64],description:"Docker bridge mode downloads the desktop slim gateway image on demand."},[y.desktopEmbeddedWin32X64]:{id:y.desktopEmbeddedWin32X64,title:"Desktop Embedded Win32 x64",platform:"win32-x64",assetIds:[a.nodeWin32X64,a.ffmpegWin32X64,a.whisperModelTiny],description:"Embedded desktop mode requires the bundled Node/FFmpeg runtimes and the whisper model asset."}}}function W(e,t){return e.assets[t]}function V(e,t){return e.profiles[t]}function ke(e,t){let r=V(e,t);return r?r.assetIds.map(o=>W(e,o)).filter(o=>!!o):[]}function xe(e,t){return e.assets[t.id]=U(t),F(e)}function S(e){if(!e)return;let t=e.artifacts[0];if(!(!t?.url||!t.sha256||typeof t.size!="number"))return{version:e.version,sha256:t.sha256,size:t.size,url:t.url}}function F(e){let t=S(e.assets[a.gatewayImage]),r=S(e.assets[a.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function L(e,t){if(!(typeof e.version!="string"||typeof e.url!="string"))return{...t,version:e.version,artifacts:[{fileName:e.url.split("/").pop()||`${t.id}.bin`,url:e.url,sha256:typeof e.sha256=="string"?e.sha256:void 0,size:typeof e.size=="number"?e.size:void 0}]}}function Oe(e){let t=e&&typeof e=="object"?e:{},r={},o=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[n,p]of Object.entries(o)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.artifacts)||(r[n]=U(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let n=L(t.gateway,{id:a.gatewayImage,title:"OpenClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});n&&(r[n.id]=n)}if(!r[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let n=L(t.whisperModel,{id:a.whisperModelTiny,title:"Whisper Tiny Model",kind:"model",delivery:"remote",platform:"any",description:"Shared whisper.cpp tiny model asset for embedded desktop speech recognition."});n&&(r[n.id]=n)}let c={...K()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[n,p]of Object.entries(s)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.assetIds)||(c[n]=Me(u))}return F({schemaVersion:typeof t.schemaVersion=="number"?t.schemaVersion:2,channel:typeof t.channel=="string"?t.channel:void 0,publishedAt:typeof t.publishedAt=="string"?t.publishedAt:void 0,minElectronVersion:typeof t.minElectronVersion=="string"?t.minElectronVersion:void 0,releaseNotes:typeof t.releaseNotes=="string"?t.releaseNotes:void 0,assets:r,profiles:c})}var Ne=["pending","captured","failed","restored"],we=["file","directory","missing"],De=["metadata-only","workspace-copy","shadow-git"];var Le=["api-key","oauth","token","aws-sdk"],Ue=["rate_limit","auth","server_error","timeout","network","unknown"],Ke=["requiresOpenAiAnthropicToolPayload"];function We(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var j="openai-codex";function A(e){let t=e.trim().toLowerCase();return t==="z.ai"||t==="z-ai"?"zai":t==="opencode-zen"?"opencode":t==="kimi-code"?"kimi-coding":t==="bedrock"||t==="aws-bedrock"?"amazon-bedrock":t==="bytedance"||t==="doubao"?"volcengine":t}function B(e){let t=A(e);return t==="volcengine-plan"?"volcengine":t==="qwen-coding"?"qwen":t==="byteplus-plan"?"byteplus":t}var Ve=B,Fe={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},je={anthropic:{providerFamily:"anthropic"},"amazon-bedrock":{providerFamily:"anthropic"},"kimi-coding":{anthropicToolSchemaMode:"openai-functions",anthropicToolChoiceMode:"openai-string-modes",preserveAnthropicThinkingSignatures:!1},mistral:{transcriptToolCallIdMode:"strict9",transcriptToolCallIdModelHints:["mistral","mixtral","codestral","pixtral","devstral","ministral","mistralai"]},openai:{providerFamily:"openai"},[j]:{providerFamily:"openai"},openrouter:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},opencode:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},kilocode:{providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]}};function b(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(o=>r.includes(o))}function l(e){let t=A(e??"");return{...Fe,...je[t]}}function Be(e){return l(e).preserveAnthropicThinkingSignatures}function qe(e){let t=l(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function Ye(e){return l(e).anthropicToolSchemaMode==="openai-functions"}function He(e){return l(e).anthropicToolChoiceMode==="openai-string-modes"}function Ge(e){return l(e).openAiCompatTurnValidation}function ze(e){return l(e).providerFamily==="openai"}function Xe(e){return l(e).providerFamily==="anthropic"}function Je(e){return b(e.modelId,l(e.provider).dropThinkingBlockModelHints)}function Qe(e){let t=l(e.provider);return t.providerThoughtSignatureSanitization&&b(e.modelId,t.providerThoughtSignatureModelHints)}function $e(e,t){let r=l(e),o=r.transcriptToolCallIdMode;if(o==="strict9")return o;if(b(t,r.transcriptToolCallIdModelHints))return"strict9"}var T={anthropic:["ANTHROPIC_OAUTH_TOKEN","ANTHROPIC_API_KEY"],chutes:["CHUTES_OAUTH_TOKEN","CHUTES_API_KEY"],zai:["ZAI_API_KEY","Z_AI_API_KEY"],opencode:["OPENCODE_API_KEY","OPENCODE_ZEN_API_KEY"],qwen:["DASHSCOPE_API_KEY","QWEN_API_KEY"],"qwen-coding":["DASHSCOPE_API_KEY","QWEN_API_KEY"],volcengine:["VOLCANO_ENGINE_API_KEY","ARK_API_KEY","DOUBAO_API_KEY"],"volcengine-plan":["VOLCANO_ENGINE_API_KEY","ARK_API_KEY","DOUBAO_API_KEY"],byteplus:["BYTEPLUS_API_KEY"],"byteplus-plan":["BYTEPLUS_API_KEY"],"kimi-coding":["KIMI_API_KEY","KIMICODE_API_KEY"],huggingface:["HUGGINGFACE_HUB_TOKEN","HF_TOKEN"],openai:["OPENAI_API_KEY"],voyage:["VOYAGE_API_KEY"],groq:["GROQ_API_KEY"],deepgram:["DEEPGRAM_API_KEY"],cerebras:["CEREBRAS_API_KEY"],xai:["XAI_API_KEY"],openrouter:["OPENROUTER_API_KEY"],litellm:["LITELLM_API_KEY"],"vercel-ai-gateway":["AI_GATEWAY_API_KEY"],"cloudflare-ai-gateway":["CLOUDFLARE_AI_GATEWAY_API_KEY"],moonshot:["MOONSHOT_API_KEY"],minimax:["MINIMAX_API_KEY"],"minimax-cn":["MINIMAX_CN_API_KEY","MINIMAX_API_KEY"],nvidia:["NVIDIA_API_KEY"],xiaomi:["XIAOMI_API_KEY"],synthetic:["SYNTHETIC_API_KEY"],venice:["VENICE_API_KEY"],mistral:["MISTRAL_API_KEY"],together:["TOGETHER_API_KEY"],qianfan:["QIANFAN_API_KEY"],ollama:["OLLAMA_API_KEY"],vllm:["VLLM_API_KEY"],kilocode:["KILOCODE_API_KEY"]};function Ze(){return[...new Set(Object.values(T).flat())]}function et(e){let t=A(e.provider),r=e.env??process.env,o=new Set(e.appliedEnvKeys??[]),i=n=>{let p=r[n]?.trim();if(!p)return null;let u=o.has(n)?`shell env: ${n}`:`env: ${n}`;return{apiKey:p,source:u}},c=e.resolveSpecialApiKey?.(t,r,o);if(c)return c;let s=T[t];if(!s||s.length===0)return null;for(let n of s){let p=i(n);if(p)return p}return null}export{ne as ACP_EXTENDED_METHODS,ie as ACP_EXTENDED_SESSION_UPDATE_TYPES,oe as ACP_METHODS,re as ACP_PROTOCOL_VERSION,x as ACP_SESSION_UPDATE_TYPES,H as AGENT_RPC_APPROVAL_METHODS,d as AGENT_RPC_ERROR_CODES,Y as AGENT_RPC_PROTOCOL_VERSION,k as AGENT_TEAM_WS_EVENT_NAMES,M as AGENT_WS_EVENT_NAMES,te as ALL_AGENT_WS_EVENT_NAMES,E as CAPABILITY_MANIFEST_DIFF_SECTIONS,ee as GATEWAY_RPC_METHODS,R as GatewayRpcContract,Ce as MEMORY_OBSERVATION_HOOK_VALUES,Ie as MEMORY_OBSERVATION_SOURCE_VALUES,he as MEMORY_WRITE_ACCESS_VALUES,De as MUTATION_CHECKPOINT_BACKEND_VALUES,we as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Ne as MUTATION_CHECKPOINT_PHASE_VALUES,q as PETDEX_ANIMATION_IDS,Le as PROVIDER_RUNTIME_AUTH_MODE_VALUES,Ke as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,T as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,j as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ue as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,ve as RESOURCE_MANIFEST_SCHEMA_VERSION,a as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,Se as WEB_ACTION_SCOPE_VALUES,Ee as WEB_APPROVAL_DEFAULT_VALUES,ye as WEB_CAPABILITY_FAMILY_VALUES,me as WEB_CAPABILITY_ID_VALUES,be as WEB_DEGRADATION_TARGET_VALUES,Te as WEB_ESCALATION_REASON_VALUES,Ae as WEB_EXECUTION_MODE_VALUES,_e as WEB_POLICY_RISK_CLASS_VALUES,Pe as WEB_RETRY_POLICY_VALUES,Re as WEB_STATEFULNESS_VALUES,fe as WEB_TASK_MODE_VALUES,Z as buildAgentRpcMeta,f as classifyGatewayRpcMethod,m as cloneCapabilityManifestSnapshot,ge as createCapabilityManifestDiffPayload,K as createDefaultRuntimeResourceProfiles,de as deriveCapabilityToolNamespaces,ue as deriveCapabilityWorkspaceIds,S as getManifestShortcutEntry,W as getRuntimeResourceAsset,V as getRuntimeResourceProfile,ke as getRuntimeResourceProfileAssets,N as isAcpJsonRpcNotification,O as isAcpJsonRpcRequest,w as isAcpJsonRpcResponse,I as isAgentRpcNotification,P as isAgentRpcRequest,C as isAgentRpcResponse,Xe as isAnthropicProviderRuntimeFamily,pe as isExtendedSessionUpdateType,ze as isOpenAiProviderRuntimeFamily,ae as isStandardSessionUpdateType,Ze as listProviderRuntimeEnvApiKeyNames,le as mergeCapabilityManifestSnapshot,A as normalizeProviderRuntimeId,B as normalizeProviderRuntimeIdForAuth,Oe as normalizeRuntimeResourceManifest,se as parseAcpMessage,G as parseAgentRpcMessage,Be as preservesProviderRuntimeAnthropicThinkingSignatures,We as readProviderRuntimeCompatFlag,v as requireGatewayRpcMeta,h as requiresIdempotencyKey,qe as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,l as resolveProviderRuntimeCapabilities,et as resolveProviderRuntimeEnvApiKey,Ve as resolveProviderRuntimeKeyFamily,$e as resolveProviderRuntimeTranscriptToolCallIdMode,Je as shouldDropThinkingBlocksForProviderRuntimeModel,Qe as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,Ge as supportsOpenAiCompatTurnValidationForProviderRuntime,xe as upsertRuntimeResourceAsset,Ye as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,He as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
|
|
@@ -50,6 +50,13 @@ export declare function handleAcpSoloSpecJudge(host: AcpExtendedHost, params: Re
|
|
|
50
50
|
*/
|
|
51
51
|
export declare function handleAcpWorkflowChat(host: AcpExtendedHost, params: Record<string, unknown>): Promise<WorkflowChatResult>;
|
|
52
52
|
export declare function handleAcpAgentsList(host: AcpExtendedHost): Promise<unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* x/workflow.matchIntent(spec D22 语义兜底)— 确定性短语在客户端已查过且未命中,且存在
|
|
55
|
+
* semantic:true 的活跃意图工作流时才会被调用:对候选集做**一次**轻量 LLM 分类(单发,非 agent
|
|
56
|
+
* turn)。候选枚举是纯文件读(active root + automation 项目的工作流 store),不经引擎。
|
|
57
|
+
* 无 LLM / 分类失败 → {matched:null}(放行进正常聊天,绝不拦死用户消息)。
|
|
58
|
+
*/
|
|
59
|
+
export declare function handleAcpWorkflowMatchIntent(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
53
60
|
export declare function handleAcpProductCreate(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
54
61
|
export declare function handleAcpProductPlan(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
55
62
|
export declare function handleAcpProductConfirm(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { CommunityInstallResolution } from "../runtime/community/community-consent-client.js";
|
|
2
2
|
import { type InstalledCommunityPetResource } from "../runtime/pet/pet-community-assets.js";
|
|
3
3
|
import { type CommunityInstalledResource, type InstallCommunitySkillOptions } from "./community-skill-installer.js";
|
|
4
|
-
|
|
4
|
+
import { type CommunityWorkflowBundlePayload } from "./community-workflow-installer.js";
|
|
5
|
+
export type CommunityInstalledAnyResource = CommunityInstalledResource | InstalledCommunityPetResource | CommunityWorkflowBundlePayload;
|
|
5
6
|
export interface CommunityMcpInstallPreview {
|
|
6
7
|
kind: "mcp";
|
|
7
8
|
mode: "preview";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Community WORKFLOW install (IT-5, spec D35/D23): download the published package, verify
|
|
3
|
+
* size+checksum against registry metadata, gunzip, and parse the SANITIZED WorkflowBundle.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately NOTHING lands on disk here: a workflow bundle is a declarative graph, not an
|
|
6
|
+
* executable artifact — applying it goes through the same `workflow.import` write path every
|
|
7
|
+
* other bundle uses (validateWorkflowDef gate, project-scoped persistence, credential re-bind
|
|
8
|
+
* checklist in the UI). This function only fetches + verifies + parses.
|
|
9
|
+
*
|
|
10
|
+
* NOT the executable launcher-gate path: bundles carry no code; they run inside the engine's
|
|
11
|
+
* restricted expression language under the D29/D30 permission gates, and applying one never
|
|
12
|
+
* activates it (activation requires publish + the unattended grant door).
|
|
13
|
+
*/
|
|
14
|
+
import type { CommunityInstallResolution } from "../runtime/community/community-consent-client.js";
|
|
15
|
+
export interface CommunityWorkflowBundlePayload {
|
|
16
|
+
kind: "workflow";
|
|
17
|
+
mode: "bundle";
|
|
18
|
+
resourceId: string;
|
|
19
|
+
version: string;
|
|
20
|
+
sourceTier: string;
|
|
21
|
+
riskTier: string;
|
|
22
|
+
/** The sanitized WorkflowBundle JSON (schemaVersion 2) — feed to workflow.import. */
|
|
23
|
+
bundle: Record<string, unknown>;
|
|
24
|
+
manifest: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface InstallCommunityWorkflowOptions {
|
|
27
|
+
fetchFn?: typeof fetch;
|
|
28
|
+
}
|
|
29
|
+
export declare function installCommunityWorkflowResource(install: CommunityInstallResolution, options?: InstallCommunityWorkflowOptions): Promise<CommunityWorkflowBundlePayload>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential Vault (spec D29, IT-7) — owner-scoped, encrypted-at-rest storage for workflow
|
|
3
|
+
* node credentials (http auth headers, oauth tokens, …).
|
|
4
|
+
*
|
|
5
|
+
* Storage layout (under the active owner profile, sibling of settings):
|
|
6
|
+
* <ownerProfile>/credentials/.vault-key random 32-byte key, created once (0600)
|
|
7
|
+
* <ownerProfile>/credentials/<id>.json AES-256-GCM ciphertext envelope
|
|
8
|
+
*
|
|
9
|
+
* Threat model: the key and the data live in separate files on the SAME machine — this protects
|
|
10
|
+
* against credential files leaking individually (backups, copy-paste, bundle export), not against
|
|
11
|
+
* an attacker with full user-account access (no user master password exists to anchor more).
|
|
12
|
+
*
|
|
13
|
+
* Hard rules (D29): decrypted secrets exist only inside the engine process at execution time —
|
|
14
|
+
* list() never returns secret material, and nothing here is ever serialized into defs, bundles,
|
|
15
|
+
* exports, or Hub publishes (the bundle sanitizer strips by key shape as the second fence).
|
|
16
|
+
*/
|
|
17
|
+
export type CredentialType = "apiKey" | "bearer" | "basic" | "oauth2" | "custom";
|
|
18
|
+
/** Public, secret-free view (what credential.list returns / the UI renders). */
|
|
19
|
+
export interface CredentialSummary {
|
|
20
|
+
id: string;
|
|
21
|
+
type: CredentialType;
|
|
22
|
+
label: string;
|
|
23
|
+
createdAt: string;
|
|
24
|
+
updatedAt: string;
|
|
25
|
+
/** Secret-free hints for pickers (e.g. apiKey header name, oauth2 scopes). */
|
|
26
|
+
meta?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Secret payload shapes by type (validated on create):
|
|
30
|
+
* apiKey: { headerName, value } · bearer: { token } · basic: { username, password }
|
|
31
|
+
* oauth2: { accessToken, refreshToken?, tokenUrl?, clientId?, clientSecret?, scopes? }
|
|
32
|
+
* custom: { headers: Record<string,string> }
|
|
33
|
+
*/
|
|
34
|
+
export type CredentialData = Record<string, unknown>;
|
|
35
|
+
export declare class CredentialVault {
|
|
36
|
+
private readonly dir;
|
|
37
|
+
constructor(ownerProfileDir?: string);
|
|
38
|
+
private keyPath;
|
|
39
|
+
private ensureKey;
|
|
40
|
+
private encrypt;
|
|
41
|
+
private decrypt;
|
|
42
|
+
private filePath;
|
|
43
|
+
list(): CredentialSummary[];
|
|
44
|
+
create(input: {
|
|
45
|
+
type: CredentialType;
|
|
46
|
+
label: string;
|
|
47
|
+
data: CredentialData;
|
|
48
|
+
meta?: Record<string, unknown>;
|
|
49
|
+
id?: string;
|
|
50
|
+
}): CredentialSummary;
|
|
51
|
+
/** Decrypted payload — engine-internal use ONLY (execution-time injection). Never over RPC. */
|
|
52
|
+
get(id: string): {
|
|
53
|
+
summary: CredentialSummary;
|
|
54
|
+
data: CredentialData;
|
|
55
|
+
};
|
|
56
|
+
delete(id: string): boolean;
|
|
57
|
+
/** Update the secret payload in place (e.g. oauth2 token refresh / exchange completion). */
|
|
58
|
+
updateData(id: string, data: CredentialData, metaPatch?: Record<string, unknown>): CredentialSummary;
|
|
59
|
+
}
|
|
60
|
+
export declare function validateCredentialData(type: CredentialType, data: CredentialData): void;
|
|
61
|
+
/** Materialize a credential into HTTP request headers (the engine-side injection point). */
|
|
62
|
+
export declare function credentialToHeaders(type: CredentialType, data: CredentialData): Record<string, string>;
|
|
@@ -11,6 +11,7 @@ export interface CommunityHandlerHost {
|
|
|
11
11
|
resolveCommunityConsentStore?: () => CommunityConsentStore;
|
|
12
12
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
13
13
|
}
|
|
14
|
+
export declare const METHOD_CONSENT_REQUIRED_MESSAGE = "Community participation consent is required before publishing shared skills.";
|
|
14
15
|
export declare function handleCommunityGetConsent(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
15
16
|
export declare function handleCommunitySetConsent(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
16
17
|
export declare function handleCommunityListShared(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
@@ -26,3 +27,5 @@ export declare function handleCommunityWithdrawShared(this: CommunityHandlerHost
|
|
|
26
27
|
export declare function handleCommunityWithdrawAllShared(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
27
28
|
export declare function handleCommunityListNotices(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
28
29
|
export declare function handleCommunityMarkNoticeRead(this: CommunityHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
30
|
+
export declare function hasMethodSharingConsent(consent: CommunityConsentView): boolean;
|
|
31
|
+
export declare function createFileCommunityConsentStore(): CommunityConsentStore;
|
|
@@ -17,7 +17,7 @@ export interface ProjectHandlerHost {
|
|
|
17
17
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
18
18
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
19
19
|
}
|
|
20
|
-
export declare function handleProjectCreate(this: ProjectHandlerHost, msg: AgentRpcRequest): void
|
|
20
|
+
export declare function handleProjectCreate(this: ProjectHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
21
21
|
export declare function handleProjectList(this: ProjectHandlerHost, msg: AgentRpcRequest): void;
|
|
22
22
|
export declare function handleProjectDelete(this: ProjectHandlerHost, msg: AgentRpcRequest): void;
|
|
23
23
|
export declare function handleProjectPurgeAll(this: ProjectHandlerHost, msg: AgentRpcRequest): void;
|
|
@@ -10,42 +10,172 @@ import { AgentProcessManager } from "../../runtime/infra/agent-process.js";
|
|
|
10
10
|
import type { AcpDetector } from "../../runtime/infra/acp-detector.js";
|
|
11
11
|
import { type AgentRpcError, type AgentRpcRequest } from "../../protocol/wire/index.js";
|
|
12
12
|
import { WorkflowController } from "../../orchestration/workflow/workflow-controller.js";
|
|
13
|
-
import { WorkflowStore } from "../../orchestration/workflow/workflow-store.js";
|
|
13
|
+
import { WorkflowStore, type WorkflowRecord } from "../../orchestration/workflow/workflow-store.js";
|
|
14
14
|
import { WorkflowRunHistoryStore } from "../../orchestration/workflow/run-history-store.js";
|
|
15
15
|
import { WorkflowScheduler } from "../../orchestration/workflow/workflow-scheduler.js";
|
|
16
|
+
import { WorkflowAuditStore } from "../../orchestration/workflow/workflow-audit-store.js";
|
|
16
17
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
18
|
+
/**
|
|
19
|
+
* One fully-wired engine root. The workflow store is project-scoped on disk
|
|
20
|
+
* (`<project>/.qlogicagent/workflows/`), and "every automation = its own project" (spec D21)
|
|
21
|
+
* means the engine must serve the active project root AND every type:"automation" project
|
|
22
|
+
* root at once — so the singleton controller became this per-root bundle (multi-root,单轨).
|
|
23
|
+
*/
|
|
24
|
+
export interface WorkflowRootBundle {
|
|
25
|
+
cwd: string;
|
|
26
|
+
/** The owning project id (undefined only when the active root has no registered project). */
|
|
27
|
+
projectId?: string;
|
|
28
|
+
store: WorkflowStore;
|
|
29
|
+
controller: WorkflowController;
|
|
30
|
+
scheduler: WorkflowScheduler;
|
|
31
|
+
runHistory: WorkflowRunHistoryStore;
|
|
32
|
+
/** D38 audit trail (config/lifecycle changes; runs live in runHistory). */
|
|
33
|
+
audit: WorkflowAuditStore;
|
|
34
|
+
pm: AgentProcessManager;
|
|
35
|
+
}
|
|
17
36
|
export interface WorkflowCoordinatorHost {
|
|
18
37
|
acpDetector: AcpDetector;
|
|
19
38
|
getActiveProjectRoot(): string;
|
|
20
39
|
handleMcpToolCall(memberId: string, tool: string, args: Record<string, unknown>): Promise<unknown>;
|
|
21
40
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
22
41
|
toolCatalog: ToolCatalog;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
workflowProcessManager: AgentProcessManager | null;
|
|
26
|
-
workflowScheduler: WorkflowScheduler | null;
|
|
27
|
-
workflowRunHistory: WorkflowRunHistoryStore | null;
|
|
42
|
+
/** Per-root engine bundles keyed by resolved cwd; built lazily by ensureWorkflowRoot. */
|
|
43
|
+
workflowRoots: Map<string, WorkflowRootBundle> | null;
|
|
28
44
|
}
|
|
29
45
|
export interface WorkflowHandlerHost extends WorkflowCoordinatorHost {
|
|
30
46
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
47
|
+
/** Community hub access for workflow.publishHub (same injection seam as CommunityHandlerHost). */
|
|
48
|
+
resolveCommunityConsentClient?: () => import("../../runtime/community/community-consent-client.js").CommunityConsentClient | null;
|
|
49
|
+
resolveCommunityConsentStore?: () => import("./community-handler.js").CommunityConsentStore;
|
|
50
|
+
}
|
|
51
|
+
/** A resolved workflow routing target: which project root an RPC operates on. */
|
|
52
|
+
interface WorkflowTarget {
|
|
53
|
+
cwd: string;
|
|
54
|
+
projectId?: string;
|
|
31
55
|
}
|
|
32
|
-
/** Build (
|
|
33
|
-
export declare function
|
|
56
|
+
/** Build (or fetch) the engine bundle for one project root, wired to real capabilities (§1.5). */
|
|
57
|
+
export declare function ensureWorkflowRoot(this: WorkflowCoordinatorHost, target: WorkflowTarget): WorkflowRootBundle;
|
|
58
|
+
/** `workflow.approvals` — 列出全部挂起审批(刷新/重连后的拉取恢复路径;推送通知是快路径)。 */
|
|
59
|
+
export declare function handleWorkflowApprovals(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
60
|
+
/** `workflow.approve` — 人工审批决定(approved=false 即拒绝);未知/过期 id fail-loud。 */
|
|
61
|
+
export declare function handleWorkflowApprove(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* `workflow.onForm` — form 触发(D34):校验活跃 form 触发 + 必填字段,以表单值为 $trigger 起 run。
|
|
64
|
+
* attended(用户亲手填表提交)。
|
|
65
|
+
*/
|
|
66
|
+
export declare function handleWorkflowOnForm(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
34
67
|
export declare function handleWorkflowCreate(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
35
68
|
export declare function handleWorkflowGet(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
36
69
|
export declare function handleWorkflowDescribe(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
37
70
|
export declare function handleWorkflowPatch(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
38
71
|
export declare function handleWorkflowRun(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* `workflow.update` — record-level meta/def update (rename, whole-def replacement from the
|
|
74
|
+
* chat builder, concurrency). Graph micro-edits stay on workflow.patch; trigger stays a
|
|
75
|
+
* set_trigger patch op (single track each).
|
|
76
|
+
*/
|
|
77
|
+
export declare function handleWorkflowUpdate(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
39
78
|
export declare function handleWorkflowSetActive(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
40
79
|
export declare function handleWorkflowList(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
41
80
|
export declare function handleWorkflowDelete(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* `workflow.cancelRun` — stop an in-flight run (D32; engine support landed with the teammate's
|
|
83
|
+
* runId/AbortController work, this exposes it on the RPC face + a UI stop button). Cancels the
|
|
84
|
+
* newest active run when runId is omitted. fail-loud when nothing is running.
|
|
85
|
+
*/
|
|
86
|
+
export declare function handleWorkflowCancelRun(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* `workflow.dryRun` — test-run the DRAFT with an optional simulated trigger payload, WITHOUT
|
|
89
|
+
* recording into run history (D36: test runs stay out of production stats). Returns the full
|
|
90
|
+
* outcome incl. per-node trace for inspection.
|
|
91
|
+
*/
|
|
92
|
+
export declare function handleWorkflowDryRun(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
93
|
+
/** `workflow.metrics` — aggregate run history into success-rate/duration/trigger stats (D33). */
|
|
94
|
+
export declare function handleWorkflowMetrics(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
95
|
+
/** `workflow.publish` — snapshot the draft as the trigger-run version (D31). */
|
|
96
|
+
export declare function handleWorkflowPublish(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
97
|
+
/** `workflow.archive` — keep the data, kill the lifecycle (deactivate + refuse runs). */
|
|
98
|
+
export declare function handleWorkflowArchive(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
99
|
+
export declare function handleCredentialList(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
100
|
+
export declare function handleCredentialCreate(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
101
|
+
export declare function handleCredentialDelete(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* `credential.oauthStart` — create an oauth2 credential (config persisted, token pending) and
|
|
104
|
+
* return the authorize URL the UI opens in the browser. The gateway's /api/oauth/callback lands
|
|
105
|
+
* the code on credential.oauthComplete.
|
|
106
|
+
*/
|
|
107
|
+
export declare function handleCredentialOauthStart(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
108
|
+
/** `credential.oauthComplete` — exchange the authorization code and store tokens in the vault. */
|
|
109
|
+
export declare function handleCredentialOauthComplete(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* `workflow.setPermissionScope` — the owner's explicit unattended capability grant (D30):
|
|
112
|
+
* which sensitive kinds this workflow may run under schedule/im/webhook triggers.
|
|
113
|
+
*/
|
|
114
|
+
export declare function handleWorkflowSetPermissionScope(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* `workflow.capabilities` — enumerate the real agents/tools/skills/mcp/memory a workflow in the
|
|
117
|
+
* target project can reference (single source of truth, five consumers: AI builder prompt,
|
|
118
|
+
* "+" suggestions, advanced node library, config dropdowns, Hub requires checks). Channels are
|
|
119
|
+
* gateway-owned: the gateway merges its channel registry into this response in ws-server.
|
|
120
|
+
*/
|
|
121
|
+
export declare function handleWorkflowCapabilities(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
122
|
+
/** `workflow.export` — serialize one workflow as a sanitized portable bundle (no credentials). */
|
|
123
|
+
export declare function handleWorkflowExport(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* `workflow.publishHub` — publish a workflow to the community Hub (IT-5, spec D35):
|
|
126
|
+
* sanitized bundle (D23 — credential values already stripped) becomes the gzip payload;
|
|
127
|
+
* the WorkflowManifest is DERIVED from the record (trigger summary, node count, sensitive
|
|
128
|
+
* capability kinds as declaredPermissions, credential/capability requirements), so the
|
|
129
|
+
* publisher only supplies presentation fields. Same consent + review pipeline as skills.
|
|
130
|
+
*/
|
|
131
|
+
export declare function handleWorkflowPublishHub(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* `workflow.import` — materialize a portable bundle (or raw n8n JSON, format:"n8n") into a target
|
|
134
|
+
* project. The caller creates/owns the project (frontend: WorkspaceStep → POST /api/projects);
|
|
135
|
+
* this RPC only lands the workflow. fail-loud on malformed payloads (§1.5).
|
|
136
|
+
*/
|
|
137
|
+
export declare function handleWorkflowImport(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* `workflow.duplicate` — copy a workflow (same graph/trigger, fresh id, inactive) into a target
|
|
140
|
+
* project: export→import in-process (one serialization path, spec D23). 复制/另存为 both land here.
|
|
141
|
+
*/
|
|
142
|
+
export declare function handleWorkflowDuplicate(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
42
143
|
export declare function handleWorkflowOnImMessage(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
43
144
|
export declare function handleWorkflowOnWebhook(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* `workflow.onIntent` — fire an intent-triggered run (spec D22). The MATCH already happened
|
|
147
|
+
* (deterministic phrases client-side; semantic fallback via x/workflow.matchIntent) and the user
|
|
148
|
+
* confirmed; this entry point only verifies the workflow really has an ACTIVE intent trigger
|
|
149
|
+
* (fail-loud otherwise — a stale client must not run a disarmed workflow) and starts the run with
|
|
150
|
+
* the utterance as `$trigger` payload.
|
|
151
|
+
*/
|
|
152
|
+
export declare function handleWorkflowOnIntent(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
153
|
+
/** All ACTIVE intent-triggered workflows across the active root + automation projects (D22 索引源). */
|
|
154
|
+
export declare function collectActiveIntentWorkflows(this: WorkflowCoordinatorHost): Promise<Array<{
|
|
155
|
+
workflowId: string;
|
|
156
|
+
projectId?: string;
|
|
157
|
+
name: string;
|
|
158
|
+
trigger: Extract<NonNullable<WorkflowRecord["trigger"]>, {
|
|
159
|
+
type: "intent";
|
|
160
|
+
}>;
|
|
161
|
+
}>>;
|
|
162
|
+
/**
|
|
163
|
+
* `workflow.intentIndex` — the deterministic-match index the CLIENT consumes (phrases/aliases/
|
|
164
|
+
* confirm/surfaces per active intent workflow). The frontend matches utterances locally with zero
|
|
165
|
+
* latency (spec D22); semantic fallback goes through x/workflow.matchIntent.
|
|
166
|
+
*/
|
|
167
|
+
export declare function handleWorkflowIntentIndex(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
44
168
|
/** `workflow.revisions` — newest-first def-revision summaries for the undo/history UI. */
|
|
45
169
|
export declare function handleWorkflowRevisions(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
46
170
|
/** `workflow.revert` — re-apply a stored revision as a NEW rev (git-revert semantics). */
|
|
47
171
|
export declare function handleWorkflowRevert(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* `workflow.audit` — newest-first config/lifecycle audit entries (D38: who did what when).
|
|
174
|
+
* Runs are NOT here (runHistory is the run audit); a timeline UI merges both.
|
|
175
|
+
*/
|
|
176
|
+
export declare function handleWorkflowAudit(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
48
177
|
/** `workflow.runs` — newest-first run summaries (status/trigger/timing; outputs stay behind runDetail). */
|
|
49
178
|
export declare function handleWorkflowRuns(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
50
179
|
/** `workflow.runDetail` — one run incl. per-node output previews (画布点节点看产出). */
|
|
51
180
|
export declare function handleWorkflowRunDetail(this: WorkflowHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
181
|
+
export {};
|
|
@@ -18,9 +18,11 @@ export interface ProjectCreateResult {
|
|
|
18
18
|
project: ProjectInfo;
|
|
19
19
|
nameDuplicate?: ProjectInfo;
|
|
20
20
|
isAgentTeamProject: boolean;
|
|
21
|
+
/** True when creation switched the active project (container types never switch). */
|
|
22
|
+
autoSwitched: boolean;
|
|
21
23
|
deduplicated?: boolean;
|
|
22
24
|
}
|
|
23
25
|
type ProjectPlanStatus = NonNullable<ProjectInfo["planStatus"]>;
|
|
24
26
|
export declare function isProjectPlanStatus(value: unknown): value is ProjectPlanStatus;
|
|
25
|
-
export declare function createProject(host: ProjectCommandHost, command: ProjectCreateCommand): ProjectCreateResult
|
|
27
|
+
export declare function createProject(host: ProjectCommandHost, command: ProjectCreateCommand): Promise<ProjectCreateResult>;
|
|
26
28
|
export {};
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { WorkflowPauseSignal, type ExecutionGate } from "./workflow-runtime.js";
|
|
26
26
|
/** The trigger kinds that can start a run. Single source of the union (consumed by the controller). */
|
|
27
|
-
export type WorkflowTriggerKind = "manual" | "schedule" | "im-message" | "webhook";
|
|
27
|
+
export type WorkflowTriggerKind = "manual" | "schedule" | "im-message" | "webhook" | "intent" | "form";
|
|
28
28
|
/**
|
|
29
29
|
* Node kinds that reach the outside world (network calls, channel sends, agent/tool/mcp side
|
|
30
30
|
* effects). These require explicit authorization to run unattended. Control / data-shaping kinds
|
|
@@ -9,4 +9,10 @@
|
|
|
9
9
|
* not a user executor.
|
|
10
10
|
*/
|
|
11
11
|
import type { NodeExecutor } from "./node-schema.js";
|
|
12
|
+
/**
|
|
13
|
+
* Params the runtime must NOT pre-resolve at node level (D34): these carry per-item
|
|
14
|
+
* expressions ($json = each item) that the executor evaluates itself — same restricted
|
|
15
|
+
* language, same evaluator, just per-item invocation.
|
|
16
|
+
*/
|
|
17
|
+
export declare const RAW_PARAM_KEYS: Record<string, readonly string[]>;
|
|
12
18
|
export declare const builtinExecutors: Record<string, NodeExecutor>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Catalog (spec D24) — THE single source of truth for "what can a workflow node
|
|
3
|
+
* actually reference". One catalog feeds five consumers: the AI graph builder's prompt +
|
|
4
|
+
* list_capabilities tool, the canvas "+" suggestions, the advanced node library, the node
|
|
5
|
+
* config dropdowns, and Hub bundle `requires` verification.
|
|
6
|
+
*
|
|
7
|
+
* Channels are deliberately ABSENT here: the engine is channel-opaque (delivery lives in the
|
|
8
|
+
* gateway), so the gateway merges its own channel registry into `workflow.capabilities` /
|
|
9
|
+
* `x/workflow.chat` responses. Everything else enumerates REAL runtime state — no static lists.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolDefinition } from "../../protocol/wire/chat-types.js";
|
|
12
|
+
export type CapabilityCategory = "agent" | "tool" | "skill" | "mcp" | "memory" | "channel" | "control";
|
|
13
|
+
export interface CapabilityEntry {
|
|
14
|
+
category: CapabilityCategory;
|
|
15
|
+
/** Workflow node kind that uses this capability. */
|
|
16
|
+
kind: string;
|
|
17
|
+
/** Concrete reference: tool name / agent id / "server.tool" / memory op / channel name. */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Human-readable name for pickers and the AI prompt. */
|
|
20
|
+
label: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
/** JSON schema of the underlying callable's input (tools/mcp), when known. */
|
|
23
|
+
paramsSchema?: Record<string, unknown>;
|
|
24
|
+
/** Prefill for add_node params when the user picks this entry. */
|
|
25
|
+
paramsTemplate?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface CapabilityCatalogDeps {
|
|
28
|
+
getToolManifest(): ToolDefinition[];
|
|
29
|
+
/** Available agent ids a workflow `agent` node can target (self first). */
|
|
30
|
+
listAgentIds(): {
|
|
31
|
+
id: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
}[];
|
|
34
|
+
/** Project root for project-scoped skill resolution. */
|
|
35
|
+
projectRoot: string;
|
|
36
|
+
}
|
|
37
|
+
/** Enumerate every capability a workflow in `projectRoot` can reference right now. */
|
|
38
|
+
export declare function buildCapabilityCatalog(deps: CapabilityCatalogDeps): CapabilityEntry[];
|
|
39
|
+
/**
|
|
40
|
+
* Compact catalog text for the AI graph builder's system prompt: category headers + `id — desc`
|
|
41
|
+
* lines, hard-capped per category so huge tool sets don't blow the prompt (the agent uses the
|
|
42
|
+
* list_capabilities tool for the long tail).
|
|
43
|
+
*/
|
|
44
|
+
export declare function renderCatalogForPrompt(entries: CapabilityEntry[], perCategoryCap?: number): string;
|
|
45
|
+
/** Refs the validator extracts from a def to check against the catalog (anti-hallucination). */
|
|
46
|
+
export declare function collectCapabilityRefs(def: {
|
|
47
|
+
nodes: {
|
|
48
|
+
id: string;
|
|
49
|
+
kind: string;
|
|
50
|
+
params?: Record<string, unknown>;
|
|
51
|
+
}[];
|
|
52
|
+
}): {
|
|
53
|
+
category: CapabilityCategory;
|
|
54
|
+
ref: string;
|
|
55
|
+
nodeId: string;
|
|
56
|
+
}[];
|
|
57
|
+
/** Validate def refs against the catalog. Returns human-readable errors (empty = clean). */
|
|
58
|
+
export declare function validateCapabilityRefs(def: {
|
|
59
|
+
nodes: {
|
|
60
|
+
id: string;
|
|
61
|
+
kind: string;
|
|
62
|
+
params?: Record<string, unknown>;
|
|
63
|
+
}[];
|
|
64
|
+
}, entries: CapabilityEntry[]): string[];
|
|
@@ -37,6 +37,14 @@ export interface ExpressionContext {
|
|
|
37
37
|
* Returns the raw value (object/array/number/string/boolean/null/undefined).
|
|
38
38
|
*/
|
|
39
39
|
export declare function evaluateExpression(body: string, ctx: ExpressionContext): unknown;
|
|
40
|
+
/**
|
|
41
|
+
* Static syntax+semantics gate: is `body` a valid expression of THIS language (no evaluation)?
|
|
42
|
+
* Beyond the grammar, it statically enforces what evalNode would reject at run time anyway:
|
|
43
|
+
* known context roots, whitelist function names, and "$node(...) is the only callable".
|
|
44
|
+
* Returns null when valid, else the error message. The n8n expression converter uses this as
|
|
45
|
+
* its single-track output gate — anything it emits must pass here.
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateExpressionSyntax(body: string): string | null;
|
|
40
48
|
/**
|
|
41
49
|
* Resolve a binding template:
|
|
42
50
|
* - exactly `{{ expr }}` (whole string) → returns the raw evaluated value (keeps type)
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* to the host. fail-loud — invoking a host-backed kind with no host throws (no silent fallback).
|
|
10
10
|
*/
|
|
11
11
|
import type { NodeExecutor } from "./node-schema.js";
|
|
12
|
-
/** The host-backed kinds. Register these into a NodeRegistry to enable agent/tool/http/mcp/channel. */
|
|
12
|
+
/** The host-backed kinds. Register these into a NodeRegistry to enable agent/tool/http/mcp/channel/skill/memory/subworkflow/approval. */
|
|
13
13
|
export declare const hostExecutors: Record<string, NodeExecutor>;
|
|
14
14
|
/** Host-backed kind names (used by callers to know which kinds need a host). */
|
|
15
15
|
export declare const HOST_BACKED_KINDS: string[];
|