qlogicagent 2.12.2 → 2.12.4
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 +346 -318
- package/dist/index.js +346 -318
- package/dist/orchestration.js +1 -1
- package/dist/protocol.js +1 -1
- package/dist/types/cli/acp-extended-handlers.d.ts +0 -1
- package/dist/types/cli/agent-runtime-bootstrap.d.ts +2 -0
- package/dist/types/cli/conversation-context.d.ts +30 -0
- package/dist/types/cli/core-tool-coordinator.d.ts +5 -1
- package/dist/types/cli/core-tools/agent-tool-service.d.ts +12 -0
- package/dist/types/cli/core-tools/registry.d.ts +1 -1
- package/dist/types/cli/core-tools/team-registry.d.ts +62 -0
- package/dist/types/cli/core-tools/team-tool-bootstrap.d.ts +3 -1
- package/dist/types/cli/core-tools/team-tool-service.d.ts +2 -1
- package/dist/types/cli/core-tools/utility-tool-bootstrap.d.ts +3 -1
- package/dist/types/cli/dream-host-adapter.d.ts +1 -0
- package/dist/types/cli/handlers/config-handler.d.ts +2 -0
- package/dist/types/cli/handlers/dream-handler.d.ts +2 -0
- package/dist/types/cli/runtime-hook-bootstrap.d.ts +2 -0
- package/dist/types/cli/session-coordinator.d.ts +7 -6
- package/dist/types/cli/session-history-coordinator.d.ts +2 -0
- package/dist/types/cli/stdio-agent-session-bootstrap.d.ts +2 -0
- package/dist/types/cli/stdio-server.d.ts +10 -0
- package/dist/types/cli/tool-bootstrap.d.ts +7 -12
- package/dist/types/contracts/fire-hook.d.ts +14 -0
- package/dist/types/protocol/wire/acp-protocol.d.ts +0 -1
- package/dist/types/runtime/execution/dream-agent.d.ts +30 -5
- package/dist/types/runtime/execution/fork-context.d.ts +14 -0
- package/dist/types/runtime/infra/background-tasks.d.ts +89 -0
- package/dist/types/runtime/infra/task-runtime.d.ts +1 -38
- package/dist/types/runtime/tasks/task-types.d.ts +22 -8
- package/dist/types/skills/memory/local-memory-provider.d.ts +15 -0
- package/dist/types/skills/memory/local-store.d.ts +11 -0
- package/dist/types/skills/memory/memory-consolidation.d.ts +7 -0
- package/dist/types/skills/tools/agent-tool.d.ts +21 -10
- package/dist/types/skills/tools/exec-tool.d.ts +13 -0
- package/dist/types/skills/tools/monitor-tool.d.ts +3 -3
- package/dist/types/skills/tools/send-message-tool.d.ts +6 -0
- package/dist/types/skills/tools/shell/index.d.ts +1 -1
- package/dist/types/skills/tools/shell/task-output.d.ts +0 -1
- package/dist/types/skills/tools/task-tool.d.ts +37 -5
- package/dist/types/skills/tools/team-tool.d.ts +5 -0
- package/dist/types/skills/web-search/source-factory.d.ts +1 -1
- package/dist/types/transport/acp-server.d.ts +0 -1
- package/package.json +1 -1
package/dist/orchestration.js
CHANGED
|
@@ -24,7 +24,7 @@ All file paths should be relative to this directory.`:"",r={role:"user",content:
|
|
|
24
24
|
|
|
25
25
|
You are the "${t.agent.name}" agent.${o}
|
|
26
26
|
|
|
27
|
-
${t.taskPrompt}`}]};return n.push(r),n}function on(e){return e.map(t=>({role:"tool",tool_call_id:t,content:ke}))}function rn(e,t){if(t.allowedTools&&t.allowedTools.length>0){let n=new Set(t.allowedTools);return e.filter(o=>n.has(o))}if(t.toolCapabilityProfile==="no_tools")return[];if(t.toolCapabilityProfile==="read_tools"){let n=new Set(["file_edit","create_file","write_file","replace_string_in_file","multi_replace_string_in_file","create_directory","delete_file","rename_file","move_file","exec","run_in_terminal","run_command","git_commit","git_push","patch"]);return e.filter(o=>!n.has(o))}return t.canFork?[...e]:e.filter(n=>n!=="agent")}function sn(e,t,n){let o=Date.now().toString(36);return`${e}:fork:${t}:d${n}:${o}`}var an={name:"general",label:"General Purpose",description:"A general-purpose sub-agent that can perform any task with full tool access.",maxTurns:200,toolCapabilityProfile:"all_tools",canFork:!1},ln={name:"explore",label:"Explore",description:"Fast read-only codebase exploration. Search files, read code, analyze structure. Cannot write or execute.",maxTurns:50,toolCapabilityProfile:"read_tools",allowedTools:["read_file","search","web_search","web_fetch","think","memory","tool_search"],canFork:!1},cn={name:"plan",label:"Plan",description:"Planning mode. Explore, analyze, and produce a structured plan. Cannot write files or execute commands.",maxTurns:80,toolCapabilityProfile:"read_tools",allowedTools:["read_file","search","web_search","web_fetch","think","memory","task","tool_search"],canFork:!1},un={name:"code",label:"Code",description:"A coding sub-agent with full tool access for implementation tasks.",maxTurns:200,toolCapabilityProfile:"all_tools",canFork:!0},pn={name:"research",label:"Research",description:"Web research and information gathering. Searches the web, fetches pages, and synthesizes findings.",maxTurns:30,toolCapabilityProfile:"read_tools",allowedTools:["web_search","web_fetch","read_file","search","think","memory"],canFork:!1},dn={name:"verify",label:"Verify",description:"Verification agent. Runs tests, checks build output, validates changes are correct.",maxTurns:40,toolCapabilityProfile:"all_tools",allowedTools:["exec","read_file","search","think"],canFork:!1},Y=[an,ln,cn,un,pn,dn];function mn(){return[...Y]}function fn(e){return Y.find(t=>t.name===e)}function gn(e){return Y.some(t=>t.name===e)}function Tn(e,t){if(e.allowedTools&&e.allowedTools.length>0){let n=new Set(e.allowedTools);return t.filter(o=>n.has(o))}if(e.toolCapabilityProfile==="no_tools")return[];if(e.toolCapabilityProfile==="read_tools"){let n=new Set(["file_edit","create_file","write_file","replace_string_in_file","multi_replace_string_in_file","create_directory","delete_file","rename_file","move_file","exec","run_in_terminal","run_command","git_commit","git_push","patch"]);return t.filter(o=>!n.has(o))}return e.canFork?[...t]:t.filter(n=>n!=="
|
|
27
|
+
${t.taskPrompt}`}]};return n.push(r),n}function on(e){return e.map(t=>({role:"tool",tool_call_id:t,content:ke}))}function rn(e,t){if(t.allowedTools&&t.allowedTools.length>0){let n=new Set(t.allowedTools);return e.filter(o=>n.has(o))}if(t.toolCapabilityProfile==="no_tools")return[];if(t.toolCapabilityProfile==="read_tools"){let n=new Set(["file_edit","create_file","write_file","replace_string_in_file","multi_replace_string_in_file","create_directory","delete_file","rename_file","move_file","exec","run_in_terminal","run_command","git_commit","git_push","patch"]);return e.filter(o=>!n.has(o))}return t.canFork?[...e]:e.filter(n=>n!=="agent"&&n!=="team")}function sn(e,t,n){let o=Date.now().toString(36);return`${e}:fork:${t}:d${n}:${o}`}var an={name:"general",label:"General Purpose",description:"A general-purpose sub-agent that can perform any task with full tool access.",maxTurns:200,toolCapabilityProfile:"all_tools",canFork:!1},ln={name:"explore",label:"Explore",description:"Fast read-only codebase exploration. Search files, read code, analyze structure. Cannot write or execute.",maxTurns:50,toolCapabilityProfile:"read_tools",allowedTools:["read_file","search","web_search","web_fetch","think","memory","tool_search"],canFork:!1},cn={name:"plan",label:"Plan",description:"Planning mode. Explore, analyze, and produce a structured plan. Cannot write files or execute commands.",maxTurns:80,toolCapabilityProfile:"read_tools",allowedTools:["read_file","search","web_search","web_fetch","think","memory","task","tool_search"],canFork:!1},un={name:"code",label:"Code",description:"A coding sub-agent with full tool access for implementation tasks.",maxTurns:200,toolCapabilityProfile:"all_tools",canFork:!0},pn={name:"research",label:"Research",description:"Web research and information gathering. Searches the web, fetches pages, and synthesizes findings.",maxTurns:30,toolCapabilityProfile:"read_tools",allowedTools:["web_search","web_fetch","read_file","search","think","memory"],canFork:!1},dn={name:"verify",label:"Verify",description:"Verification agent. Runs tests, checks build output, validates changes are correct.",maxTurns:40,toolCapabilityProfile:"all_tools",allowedTools:["exec","read_file","search","think"],canFork:!1},Y=[an,ln,cn,un,pn,dn];function mn(){return[...Y]}function fn(e){return Y.find(t=>t.name===e)}function gn(e){return Y.some(t=>t.name===e)}function Tn(e,t){if(e.allowedTools&&e.allowedTools.length>0){let n=new Set(e.allowedTools);return t.filter(o=>n.has(o))}if(e.toolCapabilityProfile==="no_tools")return[];if(e.toolCapabilityProfile==="read_tools"){let n=new Set(["file_edit","create_file","write_file","replace_string_in_file","multi_replace_string_in_file","create_directory","delete_file","rename_file","move_file","exec","run_in_terminal","run_command","git_commit","git_push","patch"]);return t.filter(o=>!n.has(o))}return e.canFork?[...t]:t.filter(n=>n!=="agent"&&n!=="team")}var yn=new Set(["agent_tool","team_create","fork_agent","send_message"]);function hn(e,t){switch(e){case"worker":return t.filter(n=>!yn.has(n));case"coordinator":return[...t];default:return[...t]}}function Cn(e){return{permissionRole:"worker",isolation:"shared",lifecycle:"pending",depth:0,maxTurns:200,tokenBudget:0,startedAt:Date.now(),...e}}function _n(e){return{promptTokens:0,hasAttemptedReactiveCompact:!1,currentMaxOutputTokens:e.maxOutputTokens,consecutiveTruncations:0,aborted:e.abortSignal?.aborted??!1}}function bn(e,t){if(e.aborted)return{level:"blocking",usagePercent:100,reason:"budget_exhausted"};let n=t.contextWindowTokens-t.responseBufferTokens-e.currentMaxOutputTokens,o=n>0?e.promptTokens/n*100:100;return e.promptTokens>=n?e.hasAttemptedReactiveCompact||!t.reactiveCompactEnabled?{level:"blocking",usagePercent:o,reason:"prompt_too_long"}:{level:"blocking",usagePercent:o,reason:"prompt_too_long"}:o>=85?{level:"warning",usagePercent:o,remainingTokens:n-e.promptTokens}:{level:"ok"}}function Rn(e,t,n){let o=e.message?.toLowerCase()??"",r=e.status??0;return r===413||o.includes("prompt_too_long")||o.includes("context_length_exceeded")?!t.hasAttemptedReactiveCompact&&n.reactiveCompactEnabled?{action:"reactive_compact"}:{action:"abort",reason:"prompt_too_long_unrecoverable"}:r>=500&&r<600?{action:"retry",reason:`server_error_${r}`}:r===429?{action:"retry",reason:"rate_limited"}:r===401||r===403?{action:"abort",reason:"auth_error"}:r===404?{action:"abort",reason:"model_not_found"}:{action:"abort",reason:o||"unknown_error"}}function Sn(e,t,n){if(!t.outputEscalationEnabled)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};if(e.consecutiveTruncations>=3)return{shouldEscalate:!1,newMax:e.currentMaxOutputTokens};let o=Math.min(e.currentMaxOutputTokens*2,n);return o<=e.currentMaxOutputTokens?{shouldEscalate:!1,newMax:e.currentMaxOutputTokens}:{shouldEscalate:!0,newMax:o}}function xn(e,t){return e.aborted?!0:t.abortSignal?.aborted?(e.aborted=!0,!0):!1}var kn={maxConsecutiveFailures:3,minMessagesAfterCompact:4,targetUsagePercent:50};function An(e){let t=[];if(e.todoList&&e.todoList.length>0){let n=e.todoList.map(o=>` ${o.status==="completed"?"[x]":o.status==="in-progress"?"[~]":"[ ]"} #${o.id}: ${o.title}`);t.push(`## Active Todo List
|
|
28
28
|
${n.join(`
|
|
29
29
|
`)}`)}if(e.activeSkillContext&&t.push(`## Active Skill: ${e.activeSkillContext.name}
|
|
30
30
|
Step ${e.activeSkillContext.step}:
|
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","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};
|
|
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"},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};
|
|
@@ -60,4 +60,3 @@ export declare function handleAcpProductPause(host: AcpExtendedHost, params: Rec
|
|
|
60
60
|
export declare function handleAcpProductCancel(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
61
61
|
export declare function handleAcpProductRollback(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
62
62
|
export declare function handleAcpProductSubscribe(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
63
|
-
export declare function handleAcpTeamDelegate(host: AcpExtendedHost, params: Record<string, unknown>): Promise<unknown>;
|
|
@@ -3,6 +3,7 @@ import type { HookRegistry } from "../contracts/hooks.js";
|
|
|
3
3
|
import type { NotificationMethod, NotificationMethodMap } from "../protocol/notifications.js";
|
|
4
4
|
import type { AcpPermissionRequestParams } from "../protocol/wire/index.js";
|
|
5
5
|
import type { MemoryPrefetchState } from "../runtime/hooks/memory-hooks.js";
|
|
6
|
+
import type { BackgroundTaskManager } from "../runtime/infra/background-tasks.js";
|
|
6
7
|
import type { TaskStore } from "../runtime/infra/task-runtime.js";
|
|
7
8
|
import type { MemoryDreamRuntimeProvider, MemoryHandlerProvider, PermissionMetadataResolver, PermissionRuleEnginePort, PathService, ProjectMemoryStore, ToolCatalog } from "../runtime/ports/index.js";
|
|
8
9
|
import type { McpManager } from "../skills/mcp/mcp-manager.js";
|
|
@@ -17,6 +18,7 @@ export interface AgentRuntimeBootstrapDeps {
|
|
|
17
18
|
config: Record<string, unknown>;
|
|
18
19
|
log: AgentLogger;
|
|
19
20
|
taskStore: TaskStore;
|
|
21
|
+
backgroundTasks: BackgroundTaskManager;
|
|
20
22
|
sessionId: string;
|
|
21
23
|
getTurnId(): string;
|
|
22
24
|
projectRoot: string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation context slicing for sub-agent inheritance (agent inheritContext=true).
|
|
3
|
+
*
|
|
4
|
+
* Produces a SAFE, budget-capped prefix of the parent conversation for a forked
|
|
5
|
+
* sub-agent: system prompts dropped (the child has its own), media/tool plumbing
|
|
6
|
+
* stripped (the child's tool_call_ids differ — carrying parent tool results would
|
|
7
|
+
* dangle), budget-capped from the tail, sensitive text redacted in group mode.
|
|
8
|
+
*
|
|
9
|
+
* Pure + dependency-free so it is unit-testable in isolation.
|
|
10
|
+
*/
|
|
11
|
+
import type { ChatMessage } from "../agent/types.js";
|
|
12
|
+
export interface ConversationContextSlice {
|
|
13
|
+
/** Trimmed parent messages (user/assistant text only, oldest→newest). */
|
|
14
|
+
messages: ChatMessage[];
|
|
15
|
+
/** Approximate token count of the slice (chars/4 heuristic). */
|
|
16
|
+
approxTokens: number;
|
|
17
|
+
/** Whether older messages were dropped to fit the budget. */
|
|
18
|
+
truncated: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ConversationContextOptions {
|
|
21
|
+
/** Token budget for the inherited prefix. */
|
|
22
|
+
maxTokens: number;
|
|
23
|
+
/** Redact secret-looking text (group chat / untrusted). */
|
|
24
|
+
redactSensitive: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build a sub-agent-safe slice of the parent conversation.
|
|
28
|
+
* Returns null when there is nothing inheritable (no user/assistant text).
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildConversationContextSlice(history: readonly ChatMessage[] | null | undefined, opts: ConversationContextOptions): ConversationContextSlice | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { AgentLogger, ToolInvoker } from "../agent/types.js";
|
|
1
|
+
import type { AgentLogger, ChatMessage, ToolInvoker } from "../agent/types.js";
|
|
2
2
|
import type { HookRegistry } from "../contracts/hooks.js";
|
|
3
|
+
import type { BackgroundTaskManager } from "../runtime/infra/background-tasks.js";
|
|
3
4
|
import type { ToolCatalog } from "../runtime/ports/index.js";
|
|
4
5
|
import type { LLMTransport } from "./provider-core-facade.js";
|
|
5
6
|
export interface CliCoreToolHostDeps {
|
|
@@ -10,6 +11,9 @@ export interface CliCoreToolHostDeps {
|
|
|
10
11
|
getCurrentSessionId(): string;
|
|
11
12
|
getActiveProjectRoot(): string;
|
|
12
13
|
getVerbose(): boolean;
|
|
14
|
+
getBackgroundTasks(): BackgroundTaskManager | null;
|
|
15
|
+
getConversationHistory(): readonly ChatMessage[] | null;
|
|
16
|
+
isGroupContext(): boolean;
|
|
13
17
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
14
18
|
emitAgentStatus(agentId: string, state: string, extra?: {
|
|
15
19
|
missedBeats?: number;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { AgentLogger, ToolInvoker } from "../../agent/types.js";
|
|
2
2
|
import type { HookRegistry } from "../../contracts/hooks.js";
|
|
3
|
+
import type { ChatMessage } from "../../agent/types.js";
|
|
4
|
+
import type { BackgroundTaskManager } from "../../runtime/infra/background-tasks.js";
|
|
3
5
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
4
6
|
import type { AgentToolDeps } from "../../skills/tools/agent-tool.js";
|
|
5
7
|
import type { LLMTransport } from "../provider-core-facade.js";
|
|
@@ -9,6 +11,16 @@ export interface AgentToolServiceHost {
|
|
|
9
11
|
readonly currentApiKey: string;
|
|
10
12
|
readonly currentModel: string;
|
|
11
13
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
14
|
+
/** Unified background execution registry. Required for background=true forks. */
|
|
15
|
+
getBackgroundTasks(): BackgroundTaskManager | null;
|
|
16
|
+
/**
|
|
17
|
+
* Parent conversation history for inheritContext=true forks (foreground only).
|
|
18
|
+
* Returns the raw prior turns; the service trims/strips/budget-caps them.
|
|
19
|
+
* Null/empty → the sub-agent starts fresh.
|
|
20
|
+
*/
|
|
21
|
+
getConversationHistory(): readonly ChatMessage[] | null;
|
|
22
|
+
/** Whether the current turn is group-chat / untrusted (drives context redaction). */
|
|
23
|
+
isGroupContext(): boolean;
|
|
12
24
|
}
|
|
13
25
|
export interface AgentToolServiceOptions {
|
|
14
26
|
host: AgentToolServiceHost;
|
|
@@ -5,5 +5,5 @@ import { type CronToolRegistrationDeps } from "./cron-tool-bootstrap.js";
|
|
|
5
5
|
import { type MonitorToolRegistrationDeps } from "./monitor-tool-bootstrap.js";
|
|
6
6
|
import { type TeamToolRegistrationDeps } from "./team-tool-bootstrap.js";
|
|
7
7
|
import { type UtilityToolRegistrationDeps } from "./utility-tool-bootstrap.js";
|
|
8
|
-
export type CoreToolSetRegistrationDeps = AgentToolRegistrationDeps & CheckpointToolRegistrationDeps & ConfigToolRegistrationDeps & CronToolRegistrationDeps & MonitorToolRegistrationDeps & TeamToolRegistrationDeps & UtilityToolRegistrationDeps
|
|
8
|
+
export type CoreToolSetRegistrationDeps = AgentToolRegistrationDeps & CheckpointToolRegistrationDeps & ConfigToolRegistrationDeps & CronToolRegistrationDeps & MonitorToolRegistrationDeps & Omit<TeamToolRegistrationDeps, "teamRegistry"> & Omit<UtilityToolRegistrationDeps, "teamRegistry">;
|
|
9
9
|
export declare function registerCoreToolSet(deps: CoreToolSetRegistrationDeps): void;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TeamRegistry — session-scoped roster shared by the team tool (producer)
|
|
3
|
+
* and the send_message tool (consumer).
|
|
4
|
+
*
|
|
5
|
+
* The team tool spawns each member as a real subprocess agent
|
|
6
|
+
* (AgentProcessManager) and registers a delivery closure here. send_message
|
|
7
|
+
* looks the target up by name or full member id and routes the message into
|
|
8
|
+
* the member's process via that closure, returning the member's reply.
|
|
9
|
+
*
|
|
10
|
+
* This is the ONLY bridge between the two tools — send_message has no other
|
|
11
|
+
* way to reach team members, so an unregistered/dead target fails loud.
|
|
12
|
+
*/
|
|
13
|
+
export interface TeamRegistryMember {
|
|
14
|
+
/** Full member id, e.g. "team-research-coder". */
|
|
15
|
+
memberId: string;
|
|
16
|
+
/** Display name within the team, e.g. "coder". */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Team this member belongs to. */
|
|
19
|
+
teamName: string;
|
|
20
|
+
/** Role description. */
|
|
21
|
+
role: string;
|
|
22
|
+
/** Deliver a message into the member's process and return its reply text. */
|
|
23
|
+
deliver: (message: string, fromId: string) => Promise<string>;
|
|
24
|
+
/** Whether the member's process is still alive. */
|
|
25
|
+
isAlive: () => boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface TeamRegistryListEntry {
|
|
28
|
+
memberId: string;
|
|
29
|
+
name: string;
|
|
30
|
+
teamName: string;
|
|
31
|
+
role: string;
|
|
32
|
+
alive: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface DeliveryOutcome {
|
|
35
|
+
ok: boolean;
|
|
36
|
+
/** Per-recipient replies (broadcast may have several). */
|
|
37
|
+
replies?: Array<{
|
|
38
|
+
memberId: string;
|
|
39
|
+
name: string;
|
|
40
|
+
reply: string;
|
|
41
|
+
}>;
|
|
42
|
+
error?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare class TeamRegistry {
|
|
45
|
+
private readonly members;
|
|
46
|
+
register(member: TeamRegistryMember): void;
|
|
47
|
+
unregister(memberId: string): void;
|
|
48
|
+
/** Live roster (alive flag reflects the underlying process). */
|
|
49
|
+
list(): TeamRegistryListEntry[];
|
|
50
|
+
/**
|
|
51
|
+
* Resolve a send_message `to` token to concrete members.
|
|
52
|
+
* Accepts a member name ("coder"), a full member id ("team-x-coder"),
|
|
53
|
+
* or "*" for broadcast to all alive members.
|
|
54
|
+
* Returns [] when nothing matches (caller fails loud).
|
|
55
|
+
*/
|
|
56
|
+
private resolveTargets;
|
|
57
|
+
/**
|
|
58
|
+
* Deliver a message to the resolved target(s) and collect replies.
|
|
59
|
+
* Fail-loud: no target → ok:false; any delivery error → surfaced.
|
|
60
|
+
*/
|
|
61
|
+
deliver(to: string, message: string, fromId: string): Promise<DeliveryOutcome>;
|
|
62
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
2
2
|
import type { AgentLogger } from "../../agent/types.js";
|
|
3
3
|
import { type TeamToolServiceHost } from "./team-tool-service.js";
|
|
4
|
+
import type { TeamRegistry } from "./team-registry.js";
|
|
4
5
|
export interface TeamToolRegistrationDeps {
|
|
5
6
|
host: TeamToolServiceHost;
|
|
6
7
|
log: AgentLogger;
|
|
7
8
|
toolCatalog: ToolCatalog;
|
|
9
|
+
teamRegistry: TeamRegistry;
|
|
8
10
|
}
|
|
9
|
-
export declare function registerTeamTool({ host, log, toolCatalog }: TeamToolRegistrationDeps): void;
|
|
11
|
+
export declare function registerTeamTool({ host, log, toolCatalog, teamRegistry }: TeamToolRegistrationDeps): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentLogger } from "../../agent/types.js";
|
|
2
2
|
import type { TeamToolDeps } from "../../skills/tools/team-tool.js";
|
|
3
|
+
import type { TeamRegistry } from "./team-registry.js";
|
|
3
4
|
export interface TeamToolService extends TeamToolDeps {
|
|
4
5
|
dispose(): void;
|
|
5
6
|
}
|
|
@@ -18,4 +19,4 @@ export interface TeamToolServiceHost {
|
|
|
18
19
|
}): void;
|
|
19
20
|
handleMcpToolCall(memberId: string, toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
20
21
|
}
|
|
21
|
-
export declare function createTeamToolService(host: TeamToolServiceHost, log: AgentLogger): TeamToolService;
|
|
22
|
+
export declare function createTeamToolService(host: TeamToolServiceHost, log: AgentLogger, registry: TeamRegistry): TeamToolService;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
2
2
|
import type { AgentLogger } from "../../agent/types.js";
|
|
3
|
+
import type { TeamRegistry } from "./team-registry.js";
|
|
3
4
|
export interface UtilityToolRegistrationDeps {
|
|
4
5
|
toolCatalog: ToolCatalog;
|
|
5
6
|
host: {
|
|
6
7
|
readonly currentSessionId: string;
|
|
7
8
|
};
|
|
8
9
|
log: Pick<AgentLogger, "info">;
|
|
10
|
+
teamRegistry: TeamRegistry;
|
|
9
11
|
}
|
|
10
|
-
export declare function registerUtilityTools({ host, log, toolCatalog }: UtilityToolRegistrationDeps): void;
|
|
12
|
+
export declare function registerUtilityTools({ host, log, toolCatalog, teamRegistry }: UtilityToolRegistrationDeps): void;
|
|
@@ -11,6 +11,7 @@ export interface DreamHostAdapterDeps {
|
|
|
11
11
|
getMemoryProvider(): DreamHandlerHost["memoryProvider"];
|
|
12
12
|
getMemoryUserId(): string;
|
|
13
13
|
getToolCatalog(): DreamHandlerHost["toolCatalog"];
|
|
14
|
+
getTaskStore(): DreamHandlerHost["taskStore"];
|
|
14
15
|
getVerbose(): boolean;
|
|
15
16
|
log(message: string): void;
|
|
16
17
|
resolveMemoryRoot(): string;
|
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
* config.get/config.update only operate on tunables and non-model settings.
|
|
8
8
|
*/
|
|
9
9
|
import { type AgentRpcError, type AgentRpcRequest } from "../../protocol/wire/index.js";
|
|
10
|
+
import type { BackgroundTaskManager } from "../../runtime/infra/background-tasks.js";
|
|
10
11
|
import type { TaskStore } from "../../runtime/infra/task-runtime.js";
|
|
11
12
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
12
13
|
export interface ConfigHandlerHost {
|
|
13
14
|
taskStore: TaskStore;
|
|
15
|
+
backgroundTasks: BackgroundTaskManager;
|
|
14
16
|
toolCatalog?: ToolCatalog;
|
|
15
17
|
syncToolListMediaConfig?(): void;
|
|
16
18
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
@@ -6,6 +6,7 @@ import type { TurnConfig } from "../../agent/types.js";
|
|
|
6
6
|
import type { AgentRpcError, AgentRpcRequest } from "../../protocol/wire/index.js";
|
|
7
7
|
import { type DreamRunDeps } from "../../runtime/execution/dream-agent.js";
|
|
8
8
|
import { type DecayCycleDeps } from "../../runtime/execution/memory-decay.js";
|
|
9
|
+
import type { TaskStore } from "../../runtime/infra/task-runtime.js";
|
|
9
10
|
import type { ToolCatalog } from "../../runtime/ports/index.js";
|
|
10
11
|
type DreamMemoryProvider = NonNullable<DreamRunDeps["memoryProvider"]> & DecayCycleDeps["adapter"];
|
|
11
12
|
export interface DreamHandlerHost {
|
|
@@ -17,6 +18,7 @@ export interface DreamHandlerHost {
|
|
|
17
18
|
memoryProvider?: DreamMemoryProvider | null;
|
|
18
19
|
memoryUserId?: string;
|
|
19
20
|
toolCatalog: ToolCatalog;
|
|
21
|
+
taskStore: TaskStore;
|
|
20
22
|
verbose?: boolean;
|
|
21
23
|
log(message: string): void;
|
|
22
24
|
resolveMemoryRoot?(): string;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { AgentLogger } from "../agent/types.js";
|
|
2
2
|
import type { HookRegistry } from "../contracts/hooks.js";
|
|
3
3
|
import { type MemoryPrefetchState } from "../runtime/hooks/memory-hooks.js";
|
|
4
|
+
import type { BackgroundTaskManager } from "../runtime/infra/background-tasks.js";
|
|
4
5
|
import type { TaskStore } from "../runtime/infra/task-runtime.js";
|
|
5
6
|
import type { MemoryDreamRuntimeProvider, MemoryHandlerProvider, MemoryLearningSink, ProjectMemoryStore, ToolCatalog } from "../runtime/ports/index.js";
|
|
6
7
|
import type { LLMTransport } from "./provider-core-facade.js";
|
|
7
8
|
export interface RuntimeHookBootstrapDeps {
|
|
8
9
|
log: AgentLogger;
|
|
9
10
|
taskStore: TaskStore;
|
|
11
|
+
backgroundTasks: BackgroundTaskManager;
|
|
10
12
|
sessionId: string;
|
|
11
13
|
projectRoot: string;
|
|
12
14
|
memdir: ProjectMemoryStore;
|
|
@@ -9,12 +9,13 @@ export declare class CliPathService extends DefaultPathService implements PathSe
|
|
|
9
9
|
getActiveProjectRoot(): string;
|
|
10
10
|
setActiveWorkdir(dir: string): void;
|
|
11
11
|
/**
|
|
12
|
-
* The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
12
|
+
* The directory seeded as the file/exec tools' initial CWD: setActiveWorkdir
|
|
13
|
+
* pushes this value into toolBootstrap.setWorkdir → initCwd (the single CWD
|
|
14
|
+
* source read via getCwd()). Note this is the SEED, not the live value — an
|
|
15
|
+
* in-turn `exec("cd sub")` moves getCwd() without touching this. The permission
|
|
16
|
+
* pipeline classifies cross-workspace ops against THIS project-level dir, not
|
|
17
|
+
* getActiveProjectRoot() (also used for memory/sessions, may be a stale
|
|
18
|
+
* projectStore dir). Falls back to getActiveProjectRoot() before first set.
|
|
18
19
|
*/
|
|
19
20
|
getActiveWorkdir(): string;
|
|
20
21
|
resolveProjectDir(projectId?: string): string | undefined;
|
|
@@ -2,5 +2,7 @@ import type { ChatMessage } from "../agent/types.js";
|
|
|
2
2
|
export declare class SessionHistoryCoordinator {
|
|
3
3
|
private readonly resumedSessionHistories;
|
|
4
4
|
saveResumedSession(sessionId: string, messages: readonly unknown[]): void;
|
|
5
|
+
/** Raw resumed history for a session (prior persisted turns), or [] if none. */
|
|
6
|
+
getResumedHistory(sessionId: string): ChatMessage[];
|
|
5
7
|
withResumedHistory(sessionId: string, messages: ChatMessage[]): ChatMessage[];
|
|
6
8
|
}
|
|
@@ -4,6 +4,7 @@ import type { HookRegistry } from "../contracts/hooks.js";
|
|
|
4
4
|
import type { NotificationMethod, NotificationMethodMap } from "../protocol/notifications.js";
|
|
5
5
|
import type { AcpPermissionRequestParams } from "../protocol/wire/index.js";
|
|
6
6
|
import type { MemoryPrefetchState } from "../runtime/hooks/memory-hooks.js";
|
|
7
|
+
import type { BackgroundTaskManager } from "../runtime/infra/background-tasks.js";
|
|
7
8
|
import type { TaskStore } from "../runtime/infra/task-runtime.js";
|
|
8
9
|
import type { MemoryDreamRuntimeProvider, MemoryHandlerProvider, PermissionMetadataResolver, PermissionRuleEnginePort, PathService, ProjectMemoryStore, ToolCatalog } from "../runtime/ports/index.js";
|
|
9
10
|
import type { McpManager } from "../skills/mcp/mcp-manager.js";
|
|
@@ -21,6 +22,7 @@ export interface StdioAgentSessionBootstrapDeps {
|
|
|
21
22
|
resolvedTextConfig: ResolvedTextGenerationConfig;
|
|
22
23
|
verbose: boolean;
|
|
23
24
|
taskStore: TaskStore;
|
|
25
|
+
backgroundTasks: BackgroundTaskManager;
|
|
24
26
|
sessionId: string;
|
|
25
27
|
getTurnId(): string;
|
|
26
28
|
projectRoot: string;
|
|
@@ -41,6 +41,10 @@ export declare class StdioServer {
|
|
|
41
41
|
private sessionState;
|
|
42
42
|
private currentMediaApiKeys;
|
|
43
43
|
private taskStore;
|
|
44
|
+
/** Unified background execution registry (agent forks + backgrounded shell commands). */
|
|
45
|
+
private backgroundTasks;
|
|
46
|
+
/** Settled-task notifications queued for injection into the next turn's context. */
|
|
47
|
+
private pendingTaskNotifications;
|
|
44
48
|
/** Session-scoped memory prefetch state (LRU dedup + byte limit). */
|
|
45
49
|
private memoryPrefetchState;
|
|
46
50
|
/** Last user message text for auto-extract hook (set at turn start, cleared at turn end). */
|
|
@@ -87,6 +91,12 @@ export declare class StdioServer {
|
|
|
87
91
|
* Reads from projectStore (single source of truth).
|
|
88
92
|
*/
|
|
89
93
|
private getActiveProjectRoot;
|
|
94
|
+
/**
|
|
95
|
+
* Drain queued background-task completion notifications.
|
|
96
|
+
* Called by the turn pipeline at turn start — settled tasks are injected
|
|
97
|
+
* into the model's context as <task_notification> blocks.
|
|
98
|
+
*/
|
|
99
|
+
drainPendingTaskNotifications(): string[];
|
|
90
100
|
ensureModelRegistryHydrated(): Promise<void>;
|
|
91
101
|
syncToolListMediaConfig(): void;
|
|
92
102
|
configureTurnMedia(config: Record<string, unknown> | undefined, turnId: string): void;
|
|
@@ -2,6 +2,7 @@ import type { PortableTool } from "../skills/portable-tool.js";
|
|
|
2
2
|
import type { PermissionMode } from "../runtime/ports/permission-contracts.js";
|
|
3
3
|
import { type TaskToolHooks } from "../skills/tools/task-tool.js";
|
|
4
4
|
import { type ExecProgress } from "../skills/tools/exec-tool.js";
|
|
5
|
+
import type { BackgroundTaskManager } from "../runtime/infra/background-tasks.js";
|
|
5
6
|
import type { ModelPurpose } from "../runtime/infra/model-registry.js";
|
|
6
7
|
import type { LLMTransport } from "./provider-core-facade.js";
|
|
7
8
|
import type { AgentLogger } from "../agent/types.js";
|
|
@@ -30,6 +31,12 @@ export declare function setProjectSwitchCallback(cb: ((project: {
|
|
|
30
31
|
* Connects planning-task events to the HookRegistry.
|
|
31
32
|
*/
|
|
32
33
|
export declare function setTaskToolHooks(hooks: TaskToolHooks | undefined): void;
|
|
34
|
+
/**
|
|
35
|
+
* Set the unified background task registry. Called from stdio-server at startup.
|
|
36
|
+
* exec(background=true) and the task tool's output/cancel actions route through it.
|
|
37
|
+
* Hosts that never set it get a loud error from those paths (no silent fakes).
|
|
38
|
+
*/
|
|
39
|
+
export declare function setBackgroundTaskRuntime(manager: BackgroundTaskManager | null): void;
|
|
33
40
|
/**
|
|
34
41
|
* Set the ask_user callback. The host (Electron / test harness) provides
|
|
35
42
|
* an implementation that presents questions to the user and returns answers.
|
|
@@ -47,18 +54,6 @@ export declare function setBootstrapWorkdir(newWorkdir: string): void;
|
|
|
47
54
|
* device/system paths that no mode should ever touch via file tools.
|
|
48
55
|
*/
|
|
49
56
|
export declare function enforceAbsoluteFloors(resolved: string): string | null;
|
|
50
|
-
/**
|
|
51
|
-
* Validate a shell command string before execution.
|
|
52
|
-
*
|
|
53
|
-
* Cross-workspace access is NO LONGER blocked here — that decision is now owned
|
|
54
|
-
* by the permission pipeline (classifyOperation + hook-runner), which prompts in
|
|
55
|
-
* `default` mode and allows in `auto`/`full_access`.
|
|
56
|
-
*
|
|
57
|
-
* This function only enforces the absolute, mode-independent floor: device and
|
|
58
|
-
* system paths (/dev/* except /dev/null, /proc/*, /sys/*) that must never be
|
|
59
|
-
* accessible regardless of mode. Returns an error string on violation, null on
|
|
60
|
-
* pass.
|
|
61
|
-
*/
|
|
62
57
|
export declare function validateExecCommand(command: string, _workdir: string): string | null;
|
|
63
58
|
export interface BootstrapConfig {
|
|
64
59
|
workdir?: string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HookRegistry, HookPoint, HookContextMap } from "./hooks.js";
|
|
2
|
+
/** Minimal logger shape — avoids coupling fire-hook to a concrete logger type. */
|
|
3
|
+
export interface HookWarnLogger {
|
|
4
|
+
warn(message: string): void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Fire a lifecycle hook fire-and-forget, but FAIL-LOUD on error.
|
|
8
|
+
*
|
|
9
|
+
* Hook handlers are non-blocking (their result is discarded), yet a thrown hook
|
|
10
|
+
* must not vanish silently — that hid memory/recall/stop-hook failures for which
|
|
11
|
+
* there was no other signal. On rejection we log a warning naming the hook point;
|
|
12
|
+
* the main turn proceeds regardless.
|
|
13
|
+
*/
|
|
14
|
+
export declare function fireHook<P extends HookPoint>(hooks: HookRegistry | undefined, point: P, context: HookContextMap[P], log: HookWarnLogger): void;
|
|
@@ -39,7 +39,6 @@ export declare const ACP_EXTENDED_METHODS: {
|
|
|
39
39
|
readonly SOLO_SPEC_JUDGE: "x/solo.specJudge";
|
|
40
40
|
readonly WORKFLOW_CHAT: "x/workflow.chat";
|
|
41
41
|
readonly PRODUCT_SUBSCRIBE: "x/product.subscribe";
|
|
42
|
-
readonly TEAM_DELEGATE: "x/team.delegate";
|
|
43
42
|
};
|
|
44
43
|
export type AcpExtendedMethod = (typeof ACP_EXTENDED_METHODS)[keyof typeof ACP_EXTENDED_METHODS];
|
|
45
44
|
/** qlogicagent 专属扩展套件的协商开关(host 与 agent 双向声明)。存在即启用扩展。 */
|