qlogicagent 2.12.11 → 2.12.13

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.
Files changed (40) hide show
  1. package/dist/cli.js +359 -341
  2. package/dist/index.js +358 -340
  3. package/dist/protocol.js +1 -1
  4. package/dist/types/cli/acp-extended-handlers.d.ts +7 -0
  5. package/dist/types/cli/community-resource-installer.d.ts +2 -1
  6. package/dist/types/cli/community-workflow-installer.d.ts +29 -0
  7. package/dist/types/cli/credential-vault.d.ts +62 -0
  8. package/dist/types/cli/handlers/community-handler.d.ts +3 -0
  9. package/dist/types/cli/handlers/project-handler.d.ts +1 -1
  10. package/dist/types/cli/handlers/skills-handler.d.ts +1 -1
  11. package/dist/types/cli/handlers/workflow-handler.d.ts +138 -8
  12. package/dist/types/cli/project-command-service.d.ts +3 -1
  13. package/dist/types/cli/stdio-acp-request-host.d.ts +26 -1
  14. package/dist/types/cli/stdio-server.d.ts +8 -4
  15. package/dist/types/orchestration/workflow/budget-permission-gate.d.ts +1 -1
  16. package/dist/types/orchestration/workflow/builtin-executors.d.ts +6 -0
  17. package/dist/types/orchestration/workflow/capability-catalog.d.ts +64 -0
  18. package/dist/types/orchestration/workflow/expression.d.ts +8 -0
  19. package/dist/types/orchestration/workflow/host-executors.d.ts +1 -1
  20. package/dist/types/orchestration/workflow/n8n-expression.d.ts +48 -0
  21. package/dist/types/orchestration/workflow/n8n-import.d.ts +45 -12
  22. package/dist/types/orchestration/workflow/node-schema.d.ts +65 -0
  23. package/dist/types/orchestration/workflow/qla-executor-host.d.ts +20 -1
  24. package/dist/types/orchestration/workflow/run-history-store.d.ts +8 -1
  25. package/dist/types/orchestration/workflow/workflow-audit-store.d.ts +31 -0
  26. package/dist/types/orchestration/workflow/workflow-bundle.d.ts +65 -0
  27. package/dist/types/orchestration/workflow/workflow-controller.d.ts +20 -3
  28. package/dist/types/orchestration/workflow/workflow-patch.d.ts +9 -0
  29. package/dist/types/orchestration/workflow/workflow-runtime.d.ts +21 -0
  30. package/dist/types/orchestration/workflow/workflow-scheduler.d.ts +21 -0
  31. package/dist/types/orchestration/workflow/workflow-store.d.ts +17 -0
  32. package/dist/types/orchestration/workflow/workflow-trigger.d.ts +21 -0
  33. package/dist/types/orchestration/workflow-chat-builder.d.ts +9 -0
  34. package/dist/types/protocol/wire/acp-protocol.d.ts +1 -0
  35. package/dist/types/protocol/wire/agent-events.d.ts +2 -2
  36. package/dist/types/protocol/wire/gateway-rpc.d.ts +3 -1
  37. package/dist/types/runtime/community/community-consent-client.d.ts +4 -0
  38. package/dist/types/runtime/infra/project-store.d.ts +1 -1
  39. package/dist/types/transport/acp-server.d.ts +1 -0
  40. 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
- export type CommunityInstalledAnyResource = CommunityInstalledResource | InstalledCommunityPetResource;
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): 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;
@@ -20,7 +20,7 @@ export declare function extractSkillMeta(skillMdPath: string): {
20
20
  export declare function handleSkillsList(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
21
21
  export declare function handleSkillsActivate(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
22
22
  export declare function handleSkillsDeactivate(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
23
- export declare function handleSkillsDelete(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
23
+ export declare function handleSkillsDelete(this: SkillsHandlerHost, msg: AgentRpcRequest): Promise<void>;
24
24
  export declare function handleSkillsPromote(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
25
25
  export declare function handleSkillsStats(this: SkillsHandlerHost, msg: AgentRpcRequest): void;
26
26
  export declare function handleSkillsPin(this: SkillsHandlerHost, 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
- workflowController: WorkflowController | null;
24
- workflowStore: WorkflowStore | null;
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 (once) the WorkflowController wired to real qlogicagent capabilities (no mocks, §1.5). */
33
- export declare function ensureWorkflowController(this: WorkflowCoordinatorHost): WorkflowController;
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 {};
@@ -1,3 +1,28 @@
1
1
  import type { CliAcpRequestHandlerHost } from "./cli-acp-request-handler.js";
2
- export type StdioAcpRequestHostSource = Pick<CliAcpRequestHandlerHost, "activeTurn" | "acpSessionMeta" | "currentHooks" | "currentSessionId" | "currentTurnId" | "memoryPrefetchState" | "permissionChecker" | "sessionHistory" | "sessionLlmConfig" | "sessionState" | "sessionTaskDomain" | "cancelIdleDreamTimer" | "disposeSessionRuntime" | "enableIdleDream" | "ensureDefaultProject" | "ensureModelRegistryHydrated" | "getActiveProjectRoot" | "log" | "sendNotification" | "setActiveWorkdir">;
2
+ /**
3
+ * Everything the ACP request handlers — INCLUDING the shared turn pipeline
4
+ * (`runTurnPipeline`, which `session/prompt` invokes with this adapter as
5
+ * `this`) — read off the host. The turn pipeline's host contract is implicit
6
+ * (`this: any`), so members it touches must be forwarded here explicitly;
7
+ * see TURN_PIPELINE_HOST_MEMBERS for the regression-tested list.
8
+ */
9
+ export type StdioAcpRequestHostSource = Pick<CliAcpRequestHandlerHost, "activeTurn" | "acpSessionMeta" | "currentHooks" | "currentSessionId" | "currentTurnId" | "memoryPrefetchState" | "permissionChecker" | "sessionHistory" | "sessionLlmConfig" | "sessionState" | "sessionTaskDomain" | "cancelIdleDreamTimer" | "disposeSessionRuntime" | "enableIdleDream" | "ensureDefaultProject" | "ensureModelRegistryHydrated" | "getActiveProjectRoot" | "log" | "sendNotification" | "setActiveWorkdir"> & {
10
+ currentModel: string | undefined;
11
+ lastAssistantMessageForExtract: string | undefined;
12
+ lastUserMessageForAutoExtract: string | undefined;
13
+ mcpReady: Promise<void>;
14
+ memdir: unknown;
15
+ pendingAskUser: unknown;
16
+ petRuntime: unknown;
17
+ projectMemoryStoreFactory: unknown;
18
+ toolCatalog: unknown;
19
+ configureTurnMedia(config: Record<string, unknown> | undefined, turnId: string): void;
20
+ drainPendingTaskNotifications(): string[];
21
+ resolveAgent(config: unknown): unknown;
22
+ resolveClientForPurpose(purpose: unknown): unknown;
23
+ sendResponse(id: string | number, result?: unknown, error?: unknown): void;
24
+ };
25
+ /** Host members the shared turn pipeline reads/writes — keep in sync with
26
+ * `grep -oE "this\.[a-zA-Z]+" src/cli/handlers/turn-handler.ts | sort -u`. */
27
+ export declare const TURN_PIPELINE_HOST_MEMBERS: readonly ["activeTurn", "configureTurnMedia", "currentHooks", "currentModel", "currentTurnId", "drainPendingTaskNotifications", "getActiveProjectRoot", "lastAssistantMessageForExtract", "lastUserMessageForAutoExtract", "log", "mcpReady", "memdir", "pendingAskUser", "permissionChecker", "petRuntime", "projectMemoryStoreFactory", "resolveAgent", "resolveClientForPurpose", "sendNotification", "sendResponse", "sessionHistory", "sessionState", "sessionTaskDomain", "setActiveWorkdir", "toolCatalog"];
3
28
  export declare function createStdioAcpRequestHandlerHost(host: StdioAcpRequestHostSource): CliAcpRequestHandlerHost;
@@ -63,10 +63,12 @@ export declare class StdioServer {
63
63
  private pendingTaskNotifications;
64
64
  /** Session-scoped memory prefetch state (LRU dedup + byte limit). */
65
65
  memoryPrefetchState: MemoryPrefetchState;
66
- /** Last user message text for auto-extract hook (set at turn start, cleared at turn end). */
67
- private lastUserMessageForAutoExtract;
68
- /** Last assistant message text for implicit extraction hook (set at turn end). */
69
- private lastAssistantMessageForExtract;
66
+ /** Last user message text for auto-extract hook (set at turn start, cleared at turn end).
67
+ * Public: the turn pipeline writes it through the ACP host adapter. */
68
+ lastUserMessageForAutoExtract: string | undefined;
69
+ /** Last assistant message text for implicit extraction hook (set at turn end).
70
+ * Public: the turn pipeline writes it through the ACP host adapter. */
71
+ lastAssistantMessageForExtract: string | undefined;
70
72
  /** MEMDIR file-based memory (CC memdir parity). */
71
73
  memdir: ProjectMemoryStore | null;
72
74
  readonly projectMemoryStoreFactory: import("../runtime/ports/project-memory-store.js").ProjectMemoryStoreFactory;
@@ -91,6 +93,8 @@ export declare class StdioServer {
91
93
  get mediaPersistence(): import("../runtime/infra/media-persistence.js").MediaPersistence;
92
94
  private get pathService();
93
95
  get toolCatalog(): import("../runtime/ports/tool-contracts.js").ToolCatalog;
96
+ /** Turn pipeline awaits this before tool dispatch (MCP servers connected). */
97
+ get mcpReady(): Promise<void>;
94
98
  get petRuntime(): import("./pet-runtime.js").PetRuntime;
95
99
  private get agent();
96
100
  /** Cached LLM transport for sub-agent forks (dream). */
@@ -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>;