qlogicagent 2.11.9 → 2.11.11
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/agent.js +6 -6
- package/dist/cli.js +331 -269
- package/dist/index.js +334 -272
- package/dist/protocol.js +1 -1
- package/dist/types/agent/tool-loop/tool-result-events.d.ts +4 -0
- package/dist/types/agent/types.d.ts +1 -1
- package/dist/types/cli/acp-extended-handlers.d.ts +22 -0
- package/dist/types/cli/acp-extended-host-adapter.d.ts +1 -0
- package/dist/types/cli/acp-session-host.d.ts +8 -0
- package/dist/types/cli/agent-config-coordinator.d.ts +1 -0
- package/dist/types/cli/handlers/product-handler.d.ts +1 -0
- package/dist/types/cli/product-coordinator.d.ts +9 -0
- package/dist/types/cli/skills-query-service.d.ts +7 -4
- package/dist/types/cli/stdio-server.d.ts +1 -0
- package/dist/types/cli/turn-ask-user-setup.d.ts +15 -0
- package/dist/types/orchestration/solo-evaluator.d.ts +28 -1
- package/dist/types/orchestration/solo-persistence.d.ts +2 -1
- package/dist/types/orchestration/solo-spec-builder.d.ts +48 -0
- package/dist/types/orchestration/workflow/workflow-controller.d.ts +6 -0
- package/dist/types/orchestration/workflow/workflow-runtime.d.ts +3 -0
- package/dist/types/orchestration/workflow-chat-builder.d.ts +39 -0
- package/dist/types/protocol/wire/acp-agent-management.d.ts +59 -0
- package/dist/types/protocol/wire/acp-protocol.d.ts +3 -0
- package/dist/types/protocol/wire/agent-events.d.ts +2 -2
- package/dist/types/runtime/infra/acp-detector.d.ts +9 -0
- package/dist/types/runtime/infra/agent-paths.d.ts +2 -19
- package/dist/types/runtime/infra/default-path-service.d.ts +0 -3
- package/dist/types/runtime/infra/index.d.ts +1 -1
- package/dist/types/runtime/infra/llmrouter-catalog.d.ts +18 -5
- package/dist/types/runtime/infra/migrate-project-skills.d.ts +21 -0
- package/dist/types/runtime/infra/model-registry.d.ts +7 -12
- package/dist/types/runtime/infra/project-skill-manifest.d.ts +28 -0
- package/dist/types/runtime/infra/skill-resolver.d.ts +51 -0
- package/dist/types/runtime/ports/agent-execution-contracts.d.ts +1 -1
- package/dist/types/runtime/ports/path-service.d.ts +0 -3
- package/dist/types/skills/index.d.ts +1 -2
- package/dist/types/skills/skill-system/skill-types.d.ts +0 -59
- package/dist/types/transport/acp-server.d.ts +3 -0
- package/package.json +3 -3
- package/dist/types/runtime/infra/provider-catalog-adapter.d.ts +0 -69
- package/dist/types/skills/skill-system/skill-loader.d.ts +0 -16
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 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","assistants.list","assistants.resolve","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(),n=f(e),o=t.timeoutMs??n.defaultTimeoutMs;return{requestId:t.requestId??z(),createdAt:r,deadlineAt:r+o,channel:t.channel??n.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 n=f(e.method).channel;return r.channel!==n?{ok:!1,error:{code:d.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${n}, 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 n=v({method:t,meta:r},this.now());if(!n.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:n.error};if(r.idempotencyKey){let o=this.idempotency.get(r.idempotencyKey);if(o)return this.counters.dedupedRequests+=1,o.error?{status:"deduped",error:o.error}:{status:"deduped",result:o.result}}return this.active.set(r.requestId,{method:t,meta:r,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,r="cancelled"){let n=this.active.get(t);return!n||n.cancelled?!1:(n.cancelled=!0,n.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,n){let o=this.active.get(t);return o?(this.active.delete(t),o.cancelled?(this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"cancelled"}):o.meta.deadlineAt<=this.now()?(this.counters.deadlineExceededRequests+=1,this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"deadline_exceeded"}):(this.counters.completedRequests+=1,o.meta.idempotencyKey&&this.idempotency.set(o.meta.idempotencyKey,{result:r,error:n,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","assistants.list","assistants.resolve","assistants.cloneBuiltin","assistants.upsert","assistants.create","assistants.update","assistants.delete","assistants.setState","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.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"],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,ne={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"},ie={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",PRODUCT_SUBSCRIBE:"x/product.subscribe",TEAM_DELEGATE:"x/team.delegate"},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"},oe={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 n=E.filter(s=>JSON.stringify(t[s])!==JSON.stringify(r[s]));if(n.length===E.length)return{...m(r),syncMode:"full"};let o={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:n,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},c=o;for(let s of n){let i=r[s];if(i!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":c[s]=ce(i);break;case"approvalPolicy":c[s]={...i};break;case"workspaceSummaries":c[s]=S(i);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":c[s]=g(i);break;default:c[s]=i;break}}return o}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"],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 W(){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 K(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(n=>K(e,n)).filter(n=>!!n):[]}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={},n=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[i,p]of Object.entries(n)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.artifacts)||(r[i]=U(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let i=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."});i&&(r[i.id]=i)}if(!r[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let i=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."});i&&(r[i.id]=i)}let c={...W()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[i,p]of Object.entries(s)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.assetIds)||(c[i]=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"],We=["requiresOpenAiAnthropicToolPayload"];function Ke(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(n=>r.includes(n))}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),n=r.transcriptToolCallIdMode;if(n==="strict9")return n;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,n=new Set(e.appliedEnvKeys??[]),o=i=>{let p=r[i]?.trim();if(!p)return null;let u=n.has(i)?`shell env: ${i}`:`env: ${i}`;return{apiKey:p,source:u}},c=e.resolveSpecialApiKey?.(t,r,n);if(c)return c;let s=T[t];if(!s||s.length===0)return null;for(let i of s){let p=o(i);if(p)return p}return null}export{ie as ACP_EXTENDED_METHODS,oe as ACP_EXTENDED_SESSION_UPDATE_TYPES,ne 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,We 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,W as createDefaultRuntimeResourceProfiles,de as deriveCapabilityToolNamespaces,ue as deriveCapabilityWorkspaceIds,_ as getManifestShortcutEntry,K 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,Ke 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};
|
|
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","assistants.list","assistants.resolve","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(),n=f(e),o=t.timeoutMs??n.defaultTimeoutMs;return{requestId:t.requestId??z(),createdAt:r,deadlineAt:r+o,channel:t.channel??n.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 n=f(e.method).channel;return r.channel!==n?{ok:!1,error:{code:d.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${n}, 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 n=v({method:t,meta:r},this.now());if(!n.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:n.error};if(r.idempotencyKey){let o=this.idempotency.get(r.idempotencyKey);if(o)return this.counters.dedupedRequests+=1,o.error?{status:"deduped",error:o.error}:{status:"deduped",result:o.result}}return this.active.set(r.requestId,{method:t,meta:r,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,r="cancelled"){let n=this.active.get(t);return!n||n.cancelled?!1:(n.cancelled=!0,n.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,n){let o=this.active.get(t);return o?(this.active.delete(t),o.cancelled?(this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"cancelled"}):o.meta.deadlineAt<=this.now()?(this.counters.deadlineExceededRequests+=1,this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"deadline_exceeded"}):(this.counters.completedRequests+=1,o.meta.idempotencyKey&&this.idempotency.set(o.meta.idempotencyKey,{result:r,error:n,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","assistants.list","assistants.resolve","assistants.cloneBuiltin","assistants.upsert","assistants.create","assistants.update","assistants.delete","assistants.setState","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.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,ne={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"},ie={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",TEAM_DELEGATE:"x/team.delegate"},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"},oe={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 n=E.filter(s=>JSON.stringify(t[s])!==JSON.stringify(r[s]));if(n.length===E.length)return{...m(r),syncMode:"full"};let o={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:n,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},c=o;for(let s of n){let i=r[s];if(i!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":c[s]=ce(i);break;case"approvalPolicy":c[s]={...i};break;case"workspaceSummaries":c[s]=S(i);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":c[s]=g(i);break;default:c[s]=i;break}}return o}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"],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 W(){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 K(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(n=>K(e,n)).filter(n=>!!n):[]}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={},n=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[i,p]of Object.entries(n)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.artifacts)||(r[i]=U(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let i=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."});i&&(r[i.id]=i)}if(!r[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let i=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."});i&&(r[i.id]=i)}let c={...W()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[i,p]of Object.entries(s)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.assetIds)||(c[i]=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"],We=["requiresOpenAiAnthropicToolPayload"];function Ke(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(n=>r.includes(n))}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),n=r.transcriptToolCallIdMode;if(n==="strict9")return n;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,n=new Set(e.appliedEnvKeys??[]),o=i=>{let p=r[i]?.trim();if(!p)return null;let u=n.has(i)?`shell env: ${i}`:`env: ${i}`;return{apiKey:p,source:u}},c=e.resolveSpecialApiKey?.(t,r,n);if(c)return c;let s=T[t];if(!s||s.length===0)return null;for(let i of s){let p=o(i);if(p)return p}return null}export{ie as ACP_EXTENDED_METHODS,oe as ACP_EXTENDED_SESSION_UPDATE_TYPES,ne 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,We 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,W as createDefaultRuntimeResourceProfiles,de as deriveCapabilityToolNamespaces,ue as deriveCapabilityWorkspaceIds,_ as getManifestShortcutEntry,K 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,Ke 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};
|
|
@@ -3,5 +3,9 @@ import type { ToolExecutionResultPort } from "../../runtime/ports/index.js";
|
|
|
3
3
|
type ToolResultEvent = Extract<TurnEvent, {
|
|
4
4
|
type: "tool_result";
|
|
5
5
|
}>;
|
|
6
|
+
type ToolMediaResultEvent = Extract<TurnEvent, {
|
|
7
|
+
type: "media_result";
|
|
8
|
+
}>;
|
|
6
9
|
export declare function createToolResultEvent(turnId: string, result: ToolExecutionResultPort): ToolResultEvent;
|
|
10
|
+
export declare function createToolMediaResultEvents(turnId: string, result: ToolExecutionResultPort): ToolMediaResultEvent[];
|
|
7
11
|
export {};
|
|
@@ -236,7 +236,7 @@ export type TurnEvent = {
|
|
|
236
236
|
} | {
|
|
237
237
|
type: "media_result";
|
|
238
238
|
turnId: string;
|
|
239
|
-
mediaType: "image" | "tts" | "video" | "music";
|
|
239
|
+
mediaType: "image" | "tts" | "video" | "music" | "3d";
|
|
240
240
|
url: string;
|
|
241
241
|
model?: string;
|
|
242
242
|
provider?: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SoloSpecChatResult, SoloSpecJudgeResult, WorkflowChatResult } from "../protocol/wire/acp-agent-management.js";
|
|
1
2
|
import { type DreamHandlerHost } from "./handlers/dream-handler.js";
|
|
2
3
|
import { type ProductCoordinatorHost } from "./handlers/product-handler.js";
|
|
3
4
|
import { type SoloHandlerHost } from "./handlers/solo-handler.js";
|
|
@@ -12,6 +13,10 @@ export interface AcpExtendedHost extends DreamHandlerHost, SoloHandlerHost, Prod
|
|
|
12
13
|
apiKey: string;
|
|
13
14
|
model: string;
|
|
14
15
|
} | null;
|
|
16
|
+
/** Parked ask_user resolvers, keyed by requestId; resolved by thread.user_response. */
|
|
17
|
+
pendingAskUser: Map<string, {
|
|
18
|
+
resolve: (answers: Record<string, string> | null) => void;
|
|
19
|
+
}>;
|
|
15
20
|
}
|
|
16
21
|
export declare function handleAcpDream(host: AcpExtendedHost, params: {
|
|
17
22
|
sessionId: string;
|
|
@@ -27,6 +32,23 @@ export declare function handleAcpSoloCancel(host: AcpExtendedHost, params: Recor
|
|
|
27
32
|
export declare function handleAcpSoloSubscribe(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
28
33
|
export declare function handleAcpSoloMessage(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
29
34
|
export declare function handleAcpSoloEvaluate(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* R3 多轮对话式 spec(x/solo.specChat):每轮带全量 history 跑一次 runSpecChatRound(受限工具
|
|
37
|
+
* ask_user + set_spec,纯推理不改文件)。澄清走 Cut6 的 turn.ask_user/thread.user_response 往返。
|
|
38
|
+
* 成功返回 { reply, spec };LLM/连接级失败降级 { error }(不抛,前端可重发)。
|
|
39
|
+
*/
|
|
40
|
+
export declare function handleAcpSoloSpecChat(host: AcpExtendedHost, params: Record<string, unknown>): Promise<SoloSpecChatResult>;
|
|
41
|
+
/**
|
|
42
|
+
* R3 启动软门防呆(x/solo.specJudge):用 host LLM 一次性评判 spec 是否达可开赛标准。
|
|
43
|
+
* 无 LLM → 降级放行({ ok:true })(软门本就"警告可走")。返回 { ok, issues[] }。
|
|
44
|
+
*/
|
|
45
|
+
export declare function handleAcpSoloSpecJudge(host: AcpExtendedHost, params: Record<string, unknown>): Promise<SoloSpecJudgeResult>;
|
|
46
|
+
/**
|
|
47
|
+
* M4 自动化页对话式搭图/改图(x/workflow.chat):forked agent + propose_workflow 工具,产出工作流提案
|
|
48
|
+
* (新建 def / 改已有 patch),propose-only 无副作用。澄清走 Cut6 ask 往返。失败降级 { error } 不抛。
|
|
49
|
+
* 应用由前端经既有 workflow.create/patch 完成(触发 WS 回流画布),故本轮不碰引擎控制器。
|
|
50
|
+
*/
|
|
51
|
+
export declare function handleAcpWorkflowChat(host: AcpExtendedHost, params: Record<string, unknown>): Promise<WorkflowChatResult>;
|
|
30
52
|
export declare function handleAcpAgentsList(host: AcpExtendedHost): Promise<unknown>;
|
|
31
53
|
export declare function handleAcpProductCreate(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
32
54
|
export declare function handleAcpProductPlan(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
@@ -23,6 +23,7 @@ export interface AcpExtendedHostAdapterDeps {
|
|
|
23
23
|
emitAgentStatus(agentId: string, state: string, extra?: AgentStatusExtra): void;
|
|
24
24
|
handleMcpToolCall(memberId: string, toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
25
25
|
resolveClientForPurpose: AcpExtendedHost["resolveClientForPurpose"];
|
|
26
|
+
pendingAskUser: AcpExtendedHost["pendingAskUser"];
|
|
26
27
|
}
|
|
27
28
|
export declare function createAcpExtendedHostAdapter(deps: AcpExtendedHostAdapterDeps): AcpExtendedHost;
|
|
28
29
|
export {};
|
|
@@ -18,6 +18,14 @@ export interface AcpSessionHost {
|
|
|
18
18
|
disposeSessionRuntime?(): void;
|
|
19
19
|
enableIdleDream(): void;
|
|
20
20
|
ensureDefaultProject(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the model-registry catalog (this.models) is hydrated from the owner profile +
|
|
23
|
+
* built-in/llmrouter catalog. A spawned/headless qlogicagent only runs load() (bindings +
|
|
24
|
+
* enabled-overrides) — its catalog is empty, so getActiveModel() returns null and the turn fails
|
|
25
|
+
* "No LLM provider". Awaiting this before a turn resolves the model lets the agent self-resolve its
|
|
26
|
+
* own configured model (idempotent; the promise is cached).
|
|
27
|
+
*/
|
|
28
|
+
ensureModelRegistryHydrated?(): Promise<void>;
|
|
21
29
|
getActiveProjectRoot(): string;
|
|
22
30
|
log(message: string): void;
|
|
23
31
|
setActiveWorkdir(dir: string): void;
|
|
@@ -9,6 +9,7 @@ export interface ProductHandlerHost extends ProductCoordinatorHost {
|
|
|
9
9
|
getActiveProjectRoot(): string;
|
|
10
10
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
11
11
|
}
|
|
12
|
+
export { productProjectMap, writeProductTerminalPlanStatus } from "../product-coordinator.js";
|
|
12
13
|
export declare function ensureProductOrchestrator(this: ProductCoordinatorHost): import("../../orchestration/agent-instance.js").ProductOrchestrator;
|
|
13
14
|
export declare function ensureProductPlanner(this: ProductCoordinatorHost): import("../../orchestration/product-planner.js").ProductPlanner;
|
|
14
15
|
/** `product.plan` - Start interactive planning with leader agent. */
|
|
@@ -21,5 +21,14 @@ export interface ProductCoordinatorHost {
|
|
|
21
21
|
handleMcpToolCall(memberId: string, tool: string, args: Record<string, unknown>): Promise<unknown>;
|
|
22
22
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
23
23
|
}
|
|
24
|
+
/** productId → 容器项目 id(R2 容器优先,与 solo-handler.soloProjectMap 对称)。终态回写用。
|
|
25
|
+
* 定义在此(callbacks 所在文件)与 solo 对称;product-handler 再导出供 ACP 入口/测试引用。 */
|
|
26
|
+
export declare const productProjectMap: Map<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* 终态回写 product 容器项目的 planStatus(比照 R1 solo onTerminal),并 re-push 项目使 历史方案
|
|
29
|
+
* 刷新后留存。**仅当项目仍 "running" 时迁移**——避免"完成晚到覆盖取消"或反向覆盖(R1 cancel-clobber
|
|
30
|
+
* 教训)。完成(含部分失败,planStatus 枚举无 "failed")→ "completed";取消 → "cancelled"。
|
|
31
|
+
*/
|
|
32
|
+
export declare function writeProductTerminalPlanStatus(host: ProductCoordinatorHost, productId: string, status: "completed" | "cancelled"): void;
|
|
24
33
|
export declare function ensureProductOrchestrator(host: ProductCoordinatorHost): ProductOrchestrator;
|
|
25
34
|
export declare function ensureProductPlanner(host: ProductCoordinatorHost): ProductPlanner;
|
|
@@ -2,7 +2,9 @@ export interface SkillListEntry {
|
|
|
2
2
|
id: string;
|
|
3
3
|
name: string;
|
|
4
4
|
path: string;
|
|
5
|
+
/** Effective in this project: globally-scoped, or enabled via the project manifest. */
|
|
5
6
|
active: boolean;
|
|
7
|
+
/** Enablement scope (= lifecycle enabledScope). "global" is active everywhere. */
|
|
6
8
|
scope: "project" | "global";
|
|
7
9
|
category: "automation";
|
|
8
10
|
displayName: {
|
|
@@ -19,8 +21,9 @@ export interface SkillListEntry {
|
|
|
19
21
|
version?: string;
|
|
20
22
|
description?: string;
|
|
21
23
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
/**
|
|
25
|
+
* List every skill in the single global store, annotated with its enablement
|
|
26
|
+
* scope and whether it is active in the given project. Name-collisions cannot
|
|
27
|
+
* occur (one directory per name in the store), so each skill appears once.
|
|
28
|
+
*/
|
|
26
29
|
export declare function listSkillsForProject(projectRoot?: string): SkillListEntry[];
|
|
@@ -133,6 +133,7 @@ export declare class StdioServer {
|
|
|
133
133
|
*/
|
|
134
134
|
private ensureMemoryProvider;
|
|
135
135
|
private resolveAgent;
|
|
136
|
+
private invalidateResolvedLlmCache;
|
|
136
137
|
/**
|
|
137
138
|
* Load LLM config from ModelRegistry (textGeneration binding).
|
|
138
139
|
* Returns provider/model/apiKey if found, undefined otherwise.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AskUserQuestion } from "../skills/tools/ask-user-tool.js";
|
|
1
2
|
interface PendingAskUserRequest {
|
|
2
3
|
resolve(answers: Record<string, string> | null): void;
|
|
3
4
|
}
|
|
@@ -5,5 +6,19 @@ export interface TurnAskUserSetupHost {
|
|
|
5
6
|
pendingAskUser: Map<string, PendingAskUserRequest>;
|
|
6
7
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Build the ask_user backend closure: mint a requestId, park its resolver in
|
|
11
|
+
* `host.pendingAskUser`, and emit `turn.ask_user`. The answer is delivered later via
|
|
12
|
+
* `thread.user_response` (handleUserResponse), which resolves the same map entry by requestId.
|
|
13
|
+
*
|
|
14
|
+
* Shared by the turn pipeline (configureTurnAskUser) and the Solo Spec phase
|
|
15
|
+
* (handleAcpSoloSpecChat) so both drive the SAME UI channel. requestId isolation (full UUID) lets a
|
|
16
|
+
* concurrent chat-turn ask and a spec-phase ask coexist in the one shared map without collision.
|
|
17
|
+
*
|
|
18
|
+
* The optional `signal` makes an unanswered ask abortable + self-cleaning: on abort we drop the
|
|
19
|
+
* parked resolver from the map and resolve to null (caller degrades to a best-effort result), so a
|
|
20
|
+
* cancelled/abandoned turn can't leak a map entry or hang the awaiting fork forever.
|
|
21
|
+
*/
|
|
22
|
+
export declare function makeAskUserBackend(host: TurnAskUserSetupHost): (questions: AskUserQuestion[], signal?: AbortSignal) => Promise<Record<string, string> | null>;
|
|
8
23
|
export declare function configureTurnAskUser(host: TurnAskUserSetupHost): void;
|
|
9
24
|
export {};
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
import type { AgentProcessManager } from "../runtime/infra/agent-process.js";
|
|
22
22
|
import type { AcpDetector } from "../runtime/infra/acp-detector.js";
|
|
23
23
|
import type { AgentConfigStore } from "../runtime/infra/agent-config-store.js";
|
|
24
|
-
import type { SoloAgentState, SoloEvaluation, SoloStatus, SoloStartParams, SoloSelectParams } from "../protocol/wire/acp-agent-management.js";
|
|
24
|
+
import type { SoloState, SoloAgentState, SoloEvaluation, SoloStatus, SoloStartParams, SoloSelectParams, SoloSpec } from "../protocol/wire/acp-agent-management.js";
|
|
25
25
|
export interface SoloCallbacks {
|
|
26
26
|
log?: {
|
|
27
27
|
info(msg: string): void;
|
|
@@ -39,7 +39,34 @@ export interface SoloCallbacks {
|
|
|
39
39
|
}[]) => void;
|
|
40
40
|
/** Token usage report after agent completes. */
|
|
41
41
|
onAgentUsage?: (soloId: string, agentId: string, inputTokens: number, outputTokens: number) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Race reached a terminal state WITHOUT an evaluation winner (all agents failed, or cancelled).
|
|
44
|
+
* The success path uses onEvaluation; this lets the host write back the plan project's planStatus
|
|
45
|
+
* (failed/cancelled) so 历史方案 is correct and recovery doesn't restore a dead run.
|
|
46
|
+
*/
|
|
47
|
+
onTerminal?: (soloId: string, state: SoloState) => void;
|
|
42
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Assemble the prompt every competitor receives (Cut4). Shared context (rules/memory) + optional
|
|
51
|
+
* <spec> block, then the body. Body = spec.rawTask when a Spec was built (the task captured during
|
|
52
|
+
* specBuild), else the raw task. With neither sharedConfig nor spec the result is exactly `task`
|
|
53
|
+
* (regression-safe vs the pre-Spec path).
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildEnrichedTask(task: string, sharedConfig: {
|
|
56
|
+
memory?: string[];
|
|
57
|
+
rules?: string[];
|
|
58
|
+
model?: string;
|
|
59
|
+
} | undefined, spec: SoloSpec | undefined): string;
|
|
60
|
+
/**
|
|
61
|
+
* Build the judge prompt (Cut4). When the Spec defines acceptance criteria, the judge scores
|
|
62
|
+
* per-criterion (满足/部分/不满足) instead of a subjective compare. The WINNER:/REASONING: output
|
|
63
|
+
* markers are unchanged so parseEvaluationResponse still works — only the basis of REASONING upgrades.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildEvaluationPrompt(originalTask: string, spec: SoloSpec | undefined, succeeded: ReadonlyArray<{
|
|
66
|
+
displayId: string;
|
|
67
|
+
resultText?: string;
|
|
68
|
+
diff?: string;
|
|
69
|
+
}>): string;
|
|
43
70
|
export declare class SoloEvaluator {
|
|
44
71
|
private processManager;
|
|
45
72
|
private acpDetector;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Mirrors the product-persistence.ts pattern.
|
|
6
6
|
*/
|
|
7
7
|
import type { PathService } from "../runtime/ports/index.js";
|
|
8
|
-
import type { SoloState, SoloAgentState, SoloEvaluation } from "../protocol/wire/acp-agent-management.js";
|
|
8
|
+
import type { SoloState, SoloAgentState, SoloEvaluation, SoloSpec } from "../protocol/wire/acp-agent-management.js";
|
|
9
9
|
export interface PersistedSoloState {
|
|
10
10
|
soloId: string;
|
|
11
11
|
state: SoloState;
|
|
@@ -32,6 +32,7 @@ export interface PersistedSoloState {
|
|
|
32
32
|
}>;
|
|
33
33
|
}>;
|
|
34
34
|
evaluation?: SoloEvaluation;
|
|
35
|
+
spec?: SoloSpec;
|
|
35
36
|
createdAt: number;
|
|
36
37
|
}
|
|
37
38
|
export interface SoloPersistenceOptions {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solo Spec Builder — 小智(qlogicagent)主持的「一轮澄清 + 轻量 spec」过程。
|
|
3
|
+
*
|
|
4
|
+
* 路径选择:走 runForkedAgent(进程内推理 agent,同 team-delegate/dream),而非 solo 竞赛的
|
|
5
|
+
* processManager.spawn(ACP 子进程)。理由:spec 阶段是交互式推理(分析→ask-user 澄清→产 spec),
|
|
6
|
+
* 不改文件、不需 worktree,且需要 ask-user 交互 —— 这正是 runForkedAgent 的场景。
|
|
7
|
+
*
|
|
8
|
+
* 本模块是纯编排:askUser 后端 + ask_user 工具定义由调用方(Cut3 RPC handler)注入,
|
|
9
|
+
* 这样模块本身不依赖全局 ask-user 回调或 toolCatalog。
|
|
10
|
+
*/
|
|
11
|
+
import type { ForkedAgentRunnerFactory } from "../runtime/ports/agent-execution-contracts.js";
|
|
12
|
+
import type { LLMTransport } from "../runtime/ports/index.js";
|
|
13
|
+
import type { ToolDefinition, AgentLogger } from "../agent/types.js";
|
|
14
|
+
import type { SoloSpec } from "../protocol/wire/acp-agent-management.js";
|
|
15
|
+
import { type AskUserQuestion } from "../skills/tools/ask-user-tool.js";
|
|
16
|
+
/** R3 多轮对话式 spec 的单轮入参。history 含到本轮为止的完整对话(末条为用户最新消息)。 */
|
|
17
|
+
export interface SpecChatDeps {
|
|
18
|
+
rawTask: string;
|
|
19
|
+
history: {
|
|
20
|
+
role: "user" | "assistant";
|
|
21
|
+
content: string;
|
|
22
|
+
}[];
|
|
23
|
+
transport: LLMTransport;
|
|
24
|
+
apiKey: string;
|
|
25
|
+
model: string;
|
|
26
|
+
createAgentRunner: ForkedAgentRunnerFactory;
|
|
27
|
+
askUserToolDef: ToolDefinition;
|
|
28
|
+
askUser: (questions: AskUserQuestion[], signal?: AbortSignal) => Promise<Record<string, string> | null>;
|
|
29
|
+
log: AgentLogger;
|
|
30
|
+
parentSignal?: AbortSignal;
|
|
31
|
+
}
|
|
32
|
+
/** R3 多轮对话式 spec:agent 通过此工具产出/更新结构化规格(类比 plan_mode 的 plan 入参)。 */
|
|
33
|
+
export declare const SET_SPEC_TOOL_NAME = "set_spec";
|
|
34
|
+
export declare const SET_SPEC_TOOL_DEF: ToolDefinition;
|
|
35
|
+
/**
|
|
36
|
+
* R3 单轮对话式 spec(无状态:每轮带全量 history 重跑 forked agent)。受限工具 = ask_user + set_spec,
|
|
37
|
+
* 纯推理不改文件(plan-mode 式)。返回本轮自然语言 reply + 最新 SoloSpec(set_spec 未调时回退解析文本)。
|
|
38
|
+
* 失败(LLM/连接级)会抛 —— 由调用方降级。
|
|
39
|
+
*/
|
|
40
|
+
export declare function runSpecChatRound(deps: SpecChatDeps): Promise<{
|
|
41
|
+
reply: string;
|
|
42
|
+
spec: SoloSpec;
|
|
43
|
+
}>;
|
|
44
|
+
/** 解析小智的标记块文本 → SoloSpec。带兜底,绝不抛(降级:goal=rawTask、acceptance 可空)。 */
|
|
45
|
+
export declare function parseSpecResponse(text: string, rawTask: string, clarifications?: {
|
|
46
|
+
question: string;
|
|
47
|
+
answer: string;
|
|
48
|
+
}[]): SoloSpec;
|
|
@@ -32,9 +32,13 @@ export interface TriggerEvent {
|
|
|
32
32
|
* permission gate — unattended kinds are restricted) plus its payload (exposed to expressions).
|
|
33
33
|
*/
|
|
34
34
|
export interface RunContext {
|
|
35
|
+
/** The workflow record id (so the runtime factory can tag per-node status notifications). */
|
|
36
|
+
workflowId: string;
|
|
35
37
|
type: WorkflowTriggerKind;
|
|
36
38
|
payload?: Record<string, unknown>;
|
|
37
39
|
}
|
|
40
|
+
/** Per-node lifecycle status surfaced for live canvas coloring (not durable; fire-and-forget). */
|
|
41
|
+
export type NodeRunStatus = "running" | "completed" | "failed";
|
|
38
42
|
/** Builds a runtime for a workflow run. `ctx` carries the run's trigger kind + payload (spec §B3). */
|
|
39
43
|
export type RuntimeFactory = (def: WorkflowDef, ctx: RunContext) => WorkflowRuntime;
|
|
40
44
|
export interface RunOutcome {
|
|
@@ -140,4 +144,6 @@ export declare function defaultRuntimeFactory(opts: {
|
|
|
140
144
|
/** Sensitive kinds an unattended run may execute (D15 permission gate). */
|
|
141
145
|
allowUnattendedKinds?: readonly string[];
|
|
142
146
|
now?: () => Date;
|
|
147
|
+
/** Per-node lifecycle for live canvas coloring; workflowId comes from the run ctx. */
|
|
148
|
+
emitNodeStatus?: (workflowId: string, nodeId: string, status: NodeRunStatus) => void;
|
|
143
149
|
}): RuntimeFactory;
|
|
@@ -67,6 +67,8 @@ export interface WorkflowRuntimeOptions {
|
|
|
67
67
|
signal?: AbortSignal;
|
|
68
68
|
/** Durable run checkpoint for crash-restart recovery (plan §M3). */
|
|
69
69
|
checkpoint?: RunCheckpoint;
|
|
70
|
+
/** Per-node lifecycle callback for live status (canvas coloring). Fire-and-forget, not durable. */
|
|
71
|
+
onNodeStatus?: (nodeId: string, status: "running" | "completed" | "failed") => void;
|
|
70
72
|
}
|
|
71
73
|
export declare class WorkflowRuntime {
|
|
72
74
|
private def;
|
|
@@ -78,6 +80,7 @@ export declare class WorkflowRuntime {
|
|
|
78
80
|
private readonly host?;
|
|
79
81
|
private readonly signal?;
|
|
80
82
|
private readonly checkpoint?;
|
|
83
|
+
private readonly onNodeStatus?;
|
|
81
84
|
private dag;
|
|
82
85
|
private readonly nodeDefs;
|
|
83
86
|
private readonly nodeOutputs;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Chat Builder (M4) — 自动化页"意图先行"的对话搭图/改图(D18/D17)。
|
|
3
|
+
*
|
|
4
|
+
* 与 solo-spec-builder.runSpecChatRound 同构:进程内 runForkedAgent + 受限工具,纯推理产出,
|
|
5
|
+
* 不直接落库。区别:产出的是 **工作流提案**——新建给完整 WorkflowDef,改已有给 WorkflowPatch[]。
|
|
6
|
+
* 应用由调用方(前端经既有 workflow.create/patch RPC,触发 WS 回流画布)完成,故本轮无副作用、
|
|
7
|
+
* 也无需访问引擎控制器。
|
|
8
|
+
*/
|
|
9
|
+
import type { ForkedAgentRunnerFactory } from "../runtime/ports/agent-execution-contracts.js";
|
|
10
|
+
import type { LLMTransport } from "../runtime/ports/index.js";
|
|
11
|
+
import type { ToolDefinition, AgentLogger } from "../agent/types.js";
|
|
12
|
+
/** agent 通过此工具产出工作流提案:新建给 def,改已有给 patch。 */
|
|
13
|
+
export declare const PROPOSE_WORKFLOW_TOOL_NAME = "propose_workflow";
|
|
14
|
+
export declare const PROPOSE_WORKFLOW_TOOL_DEF: ToolDefinition;
|
|
15
|
+
/** 单轮入参。history 含到本轮为止的完整对话(末条为用户最新消息)。currentWorkflow 为已有图的渲染文本(改图上下文)。
|
|
16
|
+
* v1 不带 ask_user(不反问;直接用默认搭,用户再说一句改),故澄清往返的网关路由也无需接。 */
|
|
17
|
+
export interface WorkflowChatDeps {
|
|
18
|
+
history: {
|
|
19
|
+
role: "user" | "assistant";
|
|
20
|
+
content: string;
|
|
21
|
+
}[];
|
|
22
|
+
currentWorkflow?: string;
|
|
23
|
+
/** D19 框选局部修改:用户框选的节点 id;非空时指示 agent 只产出 scoped patch(引擎按同 scope 强制)。 */
|
|
24
|
+
scope?: string[];
|
|
25
|
+
transport: LLMTransport;
|
|
26
|
+
apiKey: string;
|
|
27
|
+
model: string;
|
|
28
|
+
createAgentRunner: ForkedAgentRunnerFactory;
|
|
29
|
+
log: AgentLogger;
|
|
30
|
+
parentSignal?: AbortSignal;
|
|
31
|
+
}
|
|
32
|
+
export interface WorkflowChatResult {
|
|
33
|
+
reply: string;
|
|
34
|
+
def?: Record<string, unknown>;
|
|
35
|
+
patch?: unknown[];
|
|
36
|
+
trigger?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
/** 跑一轮对话式搭图/改图,返回自然语言 reply + 工作流提案(def 新建 / patch 改已有)。失败抛,由调用方降级。 */
|
|
39
|
+
export declare function runWorkflowChatRound(deps: WorkflowChatDeps): Promise<WorkflowChatResult>;
|
|
@@ -180,6 +180,63 @@ export interface SoloEvaluation {
|
|
|
180
180
|
winnerId: string;
|
|
181
181
|
reasoning: string;
|
|
182
182
|
}
|
|
183
|
+
/** Lightweight Spec (design D3): goal + constraints + acceptance, fits one screen. */
|
|
184
|
+
export interface SoloSpec {
|
|
185
|
+
goal: string;
|
|
186
|
+
constraints: string[];
|
|
187
|
+
/** 3-5 checkable acceptance criteria — the evaluate scoring rubric. */
|
|
188
|
+
acceptance: string[];
|
|
189
|
+
/** Original raw task, kept for reference. */
|
|
190
|
+
rawTask: string;
|
|
191
|
+
/** Clarification Q&A trail (optional). */
|
|
192
|
+
clarifications?: {
|
|
193
|
+
question: string;
|
|
194
|
+
answer: string;
|
|
195
|
+
}[];
|
|
196
|
+
}
|
|
197
|
+
/** x/solo.specChat RPC params (R3 多轮对话式 spec)。history 含到本轮为止的完整对话(末条为用户最新消息)。 */
|
|
198
|
+
export interface SoloSpecChatParams {
|
|
199
|
+
rawTask: string;
|
|
200
|
+
history: {
|
|
201
|
+
role: "user" | "assistant";
|
|
202
|
+
content: string;
|
|
203
|
+
}[];
|
|
204
|
+
projectId?: string;
|
|
205
|
+
}
|
|
206
|
+
/** x/solo.specChat RPC result. */
|
|
207
|
+
export interface SoloSpecChatResult {
|
|
208
|
+
reply?: string;
|
|
209
|
+
spec?: SoloSpec;
|
|
210
|
+
error?: string;
|
|
211
|
+
}
|
|
212
|
+
/** x/solo.specJudge RPC params/result(启动软门防呆:judge 最终 spec 质量)。 */
|
|
213
|
+
export interface SoloSpecJudgeParams {
|
|
214
|
+
spec: SoloSpec;
|
|
215
|
+
}
|
|
216
|
+
export interface SoloSpecJudgeResult {
|
|
217
|
+
ok: boolean;
|
|
218
|
+
issues: string[];
|
|
219
|
+
}
|
|
220
|
+
/** x/workflow.chat RPC params(M4 自动化页对话式搭图/改图)。history 含到本轮的完整对话;
|
|
221
|
+
* currentWorkflow 为已有图的渲染文本(改图上下文,前端从 store 提供)。 */
|
|
222
|
+
export interface WorkflowChatParams {
|
|
223
|
+
history: {
|
|
224
|
+
role: "user" | "assistant";
|
|
225
|
+
content: string;
|
|
226
|
+
}[];
|
|
227
|
+
currentWorkflow?: string;
|
|
228
|
+
/** D19 框选局部修改:框选的节点 id;非空 → agent 产 scoped patch(前端再以同 scope 调 workflow.patch)。 */
|
|
229
|
+
scope?: string[];
|
|
230
|
+
}
|
|
231
|
+
/** x/workflow.chat RPC result:propose-only —— 新建给 def,改已有给 patch(均为松类型,前端转发给
|
|
232
|
+
* 既有 workflow.create/patch 落库,引擎做强校验)。 */
|
|
233
|
+
export interface WorkflowChatResult {
|
|
234
|
+
reply?: string;
|
|
235
|
+
def?: Record<string, unknown>;
|
|
236
|
+
patch?: unknown[];
|
|
237
|
+
trigger?: Record<string, unknown>;
|
|
238
|
+
error?: string;
|
|
239
|
+
}
|
|
183
240
|
/** solo.start RPC params. */
|
|
184
241
|
export interface SoloStartParams {
|
|
185
242
|
task: string;
|
|
@@ -196,6 +253,8 @@ export interface SoloStartParams {
|
|
|
196
253
|
/** Model override for all agents. */
|
|
197
254
|
model?: string;
|
|
198
255
|
};
|
|
256
|
+
/** Spec from the Spec phase; when present, injected into enrichedTask + persisted + used as evaluate rubric. */
|
|
257
|
+
spec?: SoloSpec;
|
|
199
258
|
}
|
|
200
259
|
/** solo.status / solo.cancel / solo.select RPC params. */
|
|
201
260
|
export interface SoloIdParams {
|
|
@@ -35,6 +35,9 @@ export declare const ACP_EXTENDED_METHODS: {
|
|
|
35
35
|
readonly SOLO_SUBSCRIBE: "x/solo.subscribe";
|
|
36
36
|
readonly SOLO_MESSAGE: "x/solo.message";
|
|
37
37
|
readonly SOLO_EVALUATE: "x/solo.evaluate";
|
|
38
|
+
readonly SOLO_SPEC_CHAT: "x/solo.specChat";
|
|
39
|
+
readonly SOLO_SPEC_JUDGE: "x/solo.specJudge";
|
|
40
|
+
readonly WORKFLOW_CHAT: "x/workflow.chat";
|
|
38
41
|
readonly PRODUCT_SUBSCRIBE: "x/product.subscribe";
|
|
39
42
|
readonly TEAM_DELEGATE: "x/team.delegate";
|
|
40
43
|
};
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Turn-lifecycle events relayed to the Control UI WebSocket.
|
|
14
14
|
* These are the "chat session" events that every UI client needs.
|
|
15
15
|
*/
|
|
16
|
-
export declare const AGENT_WS_EVENT_NAMES: readonly ["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.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"];
|
|
16
|
+
export declare const AGENT_WS_EVENT_NAMES: readonly ["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.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"];
|
|
17
17
|
/**
|
|
18
18
|
* Agent Team events (Solo Mode, Product Mode, Plan lifecycle).
|
|
19
19
|
* Relayed to the UI's team/orchestration panel.
|
|
@@ -23,7 +23,7 @@ export declare const AGENT_TEAM_WS_EVENT_NAMES: readonly ["solo.progress", "solo
|
|
|
23
23
|
* All agent notifications that Gateway should relay to WS clients.
|
|
24
24
|
* Union of session events + team events.
|
|
25
25
|
*/
|
|
26
|
-
export declare const ALL_AGENT_WS_EVENT_NAMES: readonly ["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.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", "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"];
|
|
26
|
+
export declare const ALL_AGENT_WS_EVENT_NAMES: readonly ["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.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", "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"];
|
|
27
27
|
/** Type-level event name for session events. */
|
|
28
28
|
export type AgentWsEventName = (typeof AGENT_WS_EVENT_NAMES)[number];
|
|
29
29
|
/** Type-level event name for team events. */
|