qlogicagent 2.10.50 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +321 -362
- package/dist/index.js +321 -362
- package/dist/pet-contracts.js +1 -1
- package/dist/protocol.js +1 -1
- package/dist/types/cli/acp-commands.d.ts +32 -0
- package/dist/types/cli/acp-session-handlers.d.ts +36 -25
- package/dist/types/cli/acp-session-host.d.ts +24 -0
- package/dist/types/cli/handlers/memory-handler.d.ts +10 -1
- package/dist/types/cli/handlers/pet-handler.d.ts +5 -11
- package/dist/types/cli/media-runtime-facade.d.ts +9 -1
- package/dist/types/cli/memory-candidate-service.d.ts +10 -1
- package/dist/types/cli/pet-runtime.d.ts +28 -6
- package/dist/types/cli/provider-core-facade.d.ts +3 -0
- package/dist/types/pet-contracts.d.ts +1 -1
- package/dist/types/protocol/methods.d.ts +1 -38
- package/dist/types/protocol/wire/acp-protocol.d.ts +64 -162
- package/dist/types/protocol/wire/agent-events.d.ts +2 -2
- package/dist/types/protocol/wire/agent-methods.d.ts +1 -30
- package/dist/types/protocol/wire/agent-rpc.d.ts +0 -15
- package/dist/types/protocol/wire/chat-types.d.ts +3 -3
- package/dist/types/protocol/wire/gateway-rpc.d.ts +31 -0
- package/dist/types/protocol/wire/index.d.ts +3 -3
- package/dist/types/protocol/wire/notification-payloads.d.ts +39 -5
- package/dist/types/protocol/wire/pet-contracts.d.ts +75 -2
- package/dist/types/protocol/wire/thread-protocol.d.ts +0 -12
- package/dist/types/runtime/infra/acp-detector.d.ts +5 -0
- package/dist/types/runtime/infra/acp-host-handler.d.ts +23 -0
- package/dist/types/runtime/pet/index.d.ts +4 -4
- package/dist/types/runtime/pet/pet-file-loader.d.ts +4 -61
- package/dist/types/runtime/pet/pet-profile-service.d.ts +51 -10
- package/dist/types/runtime/pet/petdex-asset.d.ts +138 -0
- package/dist/types/runtime/pet/petdex-forge-service.d.ts +110 -0
- package/dist/types/runtime/ports/memory-provider.d.ts +35 -0
- package/dist/types/skills/memory/local-memory-provider.d.ts +25 -0
- package/dist/types/skills/memory/local-store.d.ts +48 -0
- package/dist/types/skills/memory/memory-attachment-store.d.ts +62 -0
- package/dist/types/skills/memory/memory-consolidation.d.ts +2 -0
- package/dist/types/skills/memory/memory-db-path.d.ts +6 -0
- package/dist/types/skills/memory/sqlite-memory-schema.d.ts +1 -1
- package/dist/types/skills/tools/petdex-create-tool.d.ts +61 -0
- package/dist/types/transport/acp-server.d.ts +26 -8
- package/package.json +4 -2
- package/dist/types/runtime/pet/pet-consistency.d.ts +0 -79
- package/dist/types/runtime/pet/pet-skeleton.d.ts +0 -70
package/dist/pet-contracts.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=["idle","thinking","working","done","happy","error","
|
|
1
|
+
var e=["idle","thinking","working","done","happy","error","attention","dragging","sleeping"],t="qlogic.petdex.asset.v1",i="qlogic.petdex.validation.v1",n={format:"webp",columns:8,rows:9,frameCount:72,cellWidth:192,cellHeight:208,width:1536,height:1872};export{e as PETDEX_ANIMATION_IDS,n as PETDEX_ATLAS_CONTRACT,t as PETDEX_SCHEMA,i as PETDEX_VALIDATION_SCHEMA};
|
package/dist/protocol.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var q=["idle","thinking","working","done","happy","error","dragging","attention","poke-left","poke-right","notification","random-look","random-read","yawning","dozing","sleeping","waking","sweeping","juggling","building","eating"];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},X={REQUEST:"tool.approval.request",RESPONSE:"tool.approval.response"};function b(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 H(e){let t;try{t=JSON.parse(e)}catch{return null}return C(t)||b(t)||I(t)?t:null}import{randomUUID as G}from"node:crypto";var z=["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(["thread.turn","memory.dream","memory.propose","memory.consolidate","media.stt","pet.forge","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","pet.status"]);function A(e){return J.has(e)?{channel:"task",mutability:"write",defaultTimeoutMs:e==="thread.turn"?3e5:12e4}:z.some(t=>e===t||e.startsWith(`${t}.`)||e.startsWith(t))?{channel:"query",mutability:"read",defaultTimeoutMs:1e4}:{channel:"task",mutability:"write",defaultTimeoutMs:3e4}}function v(e){return $.has(e)||A(e).mutability==="read"?!1:Q.some(t=>e.startsWith(t))}function Z(e,t={}){let r=t.now??Date.now(),n=A(e),i=t.timeoutMs??n.defaultTimeoutMs;return{requestId:t.requestId??G(),createdAt:r,deadlineAt:r+i,channel:t.channel??n.channel,idempotencyKey:t.idempotencyKey,traceId:t.traceId}}function h(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=A(e.method).channel;return r.channel!==n?{ok:!1,error:{code:d.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${n}, got ${r.channel}.`}}:v(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=h({method:t,meta:r},this.now());if(!n.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:n.error};if(r.idempotencyKey){let i=this.idempotency.get(r.idempotencyKey);if(i)return this.counters.dedupedRequests+=1,i.error?{status:"deduped",error:i.error}:{status:"deduped",result:i.result}}return this.active.set(r.requestId,{method:t,meta:r,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,r="cancelled"){let 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 i=this.active.get(t);return i?(this.active.delete(t),i.cancelled?(this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"cancelled"}):i.meta.deadlineAt<=this.now()?(this.counters.deadlineExceededRequests+=1,this.counters.lateResponsesDropped+=1,{accepted:!1,reason:"deadline_exceeded"}):(this.counters.completedRequests+=1,i.meta.idempotencyKey&&this.idempotency.set(i.meta.idempotencyKey,{result:r,error: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"];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.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.forged","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_END:"session/end",SESSION_SET_CONFIG:"session/set_config_option",SESSION_SET_MODEL:"session/set_model",SESSION_SET_MODE:"session/set_mode",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"},oe={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={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"},ie={X_SUBAGENT_STARTED:"x_subagent_started",X_SUBAGENT_DELTA:"x_subagent_delta",X_SUBAGENT_ENDED:"x_subagent_ended",X_MEDIA_RESULT:"x_media_result",X_MEDIA_PROGRESS:"x_media_progress",X_SKILL_INSTRUCTION:"x_skill_instruction",X_RECOVERY:"x_recovery",X_SIDECHAIN_STARTED:"x_sidechain_started",X_SIDECHAIN_COMPLETED:"x_sidechain_completed",X_SUGGESTIONS:"x_suggestions",X_ASK_USER:"x_ask_user",X_SESSION_INFO:"x_session_info",X_MEMORY_UPDATED:"x_memory_updated",X_TEAM_MEMBER_UPDATE:"x_team_member_update",X_SOLO_STARTED:"x_solo_started",X_SOLO_AGENT_FINISHED:"x_solo_agent_finished",X_SOLO_SELECTED:"x_solo_selected",X_PRODUCT_TASK_STARTED:"x_product_task_started",X_PRODUCT_TASK_COMPLETED:"x_product_task_completed",X_PRODUCT_CHECKPOINT:"x_product_checkpoint",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 D(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 D(t)||O(t)||N(t)?t:null}function ae(e){return Object.values(x).includes(e)}function pe(e){return e.startsWith("x_")}var E=["gatewayVersion","toolNamespaces","workspaceIds","installedCapabilities","enabledCapabilities","features","approvalMode","toolManifests","skillManifests","pluginManifests","mcpManifests","approvalPolicy","workspaceSummaries"];function g(e){return e?e.map(t=>({...t})):void 0}function _(e){return e?e.map(t=>({...t})):void 0}function ce(e){return e?[...e]:void 0}function w(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function m(e){return{...e,toolNamespaces:[...e.toolNamespaces],workspaceIds:[...e.workspaceIds],...e.changedSections?{changedSections:[...e.changedSections]}:{},...e.installedCapabilities?{installedCapabilities:[...e.installedCapabilities]}:{},...e.enabledCapabilities?{enabledCapabilities:[...e.enabledCapabilities]}:{},...e.features?{features:[...e.features]}:{},...e.toolManifests?{toolManifests:g(e.toolManifests)}:{},...e.skillManifests?{skillManifests:g(e.skillManifests)}:{},...e.pluginManifests?{pluginManifests:g(e.pluginManifests)}:{},...e.mcpManifests?{mcpManifests:g(e.mcpManifests)}:{},...e.approvalPolicy?{approvalPolicy:{...e.approvalPolicy}}:{},...e.workspaceSummaries?{workspaceSummaries:_(e.workspaceSummaries)}:{}}}function le(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?m(r):{...m(t),snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,...r.gatewayVersion!==void 0?{gatewayVersion:r.gatewayVersion}:{},...r.syncMode?{syncMode:r.syncMode}:{},...r.baseSnapshotVersion?{baseSnapshotVersion:r.baseSnapshotVersion}:{},...r.changedSections?{changedSections:[...r.changedSections]}:{},...r.toolNamespaces?{toolNamespaces:[...r.toolNamespaces]}:{},...r.workspaceIds?{workspaceIds:[...r.workspaceIds]}:{},...r.installedCapabilities?{installedCapabilities:[...r.installedCapabilities]}:{},...r.enabledCapabilities?{enabledCapabilities:[...r.enabledCapabilities]}:{},...r.features?{features:[...r.features]}:{},...r.approvalMode?{approvalMode:r.approvalMode}:{},...r.toolManifests?{toolManifests:g(r.toolManifests)}:{},...r.skillManifests?{skillManifests:g(r.skillManifests)}:{},...r.pluginManifests?{pluginManifests:g(r.pluginManifests)}:{},...r.mcpManifests?{mcpManifests:g(r.mcpManifests)}:{},...r.approvalPolicy?{approvalPolicy:{...r.approvalPolicy}}:{},...r.workspaceSummaries?{workspaceSummaries:_(r.workspaceSummaries)}:{}}}function de(e){return w(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function ue(e){return w(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 i={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:n,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},c=i;for(let s of n){let o=r[s];if(o!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":c[s]=ce(o);break;case"approvalPolicy":c[s]={...o};break;case"workspaceSummaries":c[s]=_(o);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":c[s]=g(o);break;default:c[s]=o;break}}return i}var me=["web_search","web_fetch","deep_research","browser_execution"],ye=["web-intelligence","browser-execution"],Ae=["discovery","read-url","multi-source-research","interactive-browser"],fe=["stateless","render-backend","interactive-session"],Re=["stateless","stateless-single-step","stateful-session-required"],Ee=["required","conditional","none"],_e=["browser-read","browser-authenticated-read","browser-state-changing"];var Se=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],Pe=["web_search","web_fetch","deep_research","blocked"],Te=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],be=["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"],ve=["observe-only","parent-write","deny"];var he=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 L(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Me(e){return{...e,assetIds:[...e.assetIds]}}function K(){return{[y.desktopDockerBridge]:{id:y.desktopDockerBridge,title:"Desktop Docker Bridge",platform:"any",assetIds:[a.gatewayImage,a.dockerDesktopWin32X64,a.dockerDesktopDarwinX64,a.dockerDesktopDarwinArm64],description:"Docker bridge mode downloads the desktop slim gateway image on demand."},[y.desktopEmbeddedWin32X64]:{id:y.desktopEmbeddedWin32X64,title:"Desktop Embedded Win32 x64",platform:"win32-x64",assetIds:[a.nodeWin32X64,a.ffmpegWin32X64,a.whisperModelTiny],description:"Embedded desktop mode requires the bundled Node/FFmpeg runtimes and the whisper model asset."}}}function W(e,t){return e.assets[t]}function V(e,t){return e.profiles[t]}function ke(e,t){let r=V(e,t);return r?r.assetIds.map(n=>W(e,n)).filter(n=>!!n):[]}function xe(e,t){return e.assets[t.id]=L(t),F(e)}function S(e){if(!e)return;let t=e.artifacts[0];if(!(!t?.url||!t.sha256||typeof t.size!="number"))return{version:e.version,sha256:t.sha256,size:t.size,url:t.url}}function F(e){let t=S(e.assets[a.gatewayImage]),r=S(e.assets[a.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function U(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[o,p]of Object.entries(n)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.artifacts)||(r[o]=L(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let o=U(t.gateway,{id:a.gatewayImage,title:"OpenClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});o&&(r[o.id]=o)}if(!r[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let o=U(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."});o&&(r[o.id]=o)}let c={...K()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[o,p]of Object.entries(s)){if(!p||typeof p!="object")continue;let u=p;!u.id||!Array.isArray(u.assetIds)||(c[o]=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"],De=["file","directory","missing"],we=["metadata-only","workspace-copy","shadow-git"];var Ue=["api-key","oauth","token","aws-sdk"],Le=["rate_limit","auth","server_error","timeout","network","unknown"],Ke=["requiresOpenAiAnthropicToolPayload"];function We(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var B="openai-codex";function f(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 j(e){let t=f(e);return t==="volcengine-plan"?"volcengine":t==="qwen-coding"?"qwen":t==="byteplus-plan"?"byteplus":t}var Ve=j,Fe={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},Be={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"},[B]:{providerFamily:"openai"},openrouter:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},opencode:{openAiCompatTurnValidation:!1,providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]},kilocode:{providerThoughtSignatureSanitization:!0,providerThoughtSignatureModelHints:["gemini"]}};function P(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(n=>r.includes(n))}function l(e){let t=f(e??"");return{...Fe,...Be[t]}}function je(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 Xe(e){return l(e).anthropicToolChoiceMode==="openai-string-modes"}function He(e){return l(e).openAiCompatTurnValidation}function Ge(e){return l(e).providerFamily==="openai"}function ze(e){return l(e).providerFamily==="anthropic"}function Je(e){return P(e.modelId,l(e.provider).dropThinkingBlockModelHints)}function Qe(e){let t=l(e.provider);return t.providerThoughtSignatureSanitization&&P(e.modelId,t.providerThoughtSignatureModelHints)}function $e(e,t){let r=l(e),n=r.transcriptToolCallIdMode;if(n==="strict9")return n;if(P(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=f(e.provider),r=e.env??process.env,n=new Set(e.appliedEnvKeys??[]),i=o=>{let p=r[o]?.trim();if(!p)return null;let u=n.has(o)?`shell env: ${o}`:`env: ${o}`;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 o of s){let p=i(o);if(p)return p}return null}export{oe as ACP_EXTENDED_METHODS,ie as ACP_EXTENDED_SESSION_UPDATE_TYPES,ne as ACP_METHODS,re as ACP_PROTOCOL_VERSION,x as ACP_SESSION_UPDATE_TYPES,X 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,ve as MEMORY_WRITE_ACCESS_VALUES,we as MUTATION_CHECKPOINT_BACKEND_VALUES,De as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Ne as MUTATION_CHECKPOINT_PHASE_VALUES,q as PET_FORGE_STANDARD_STATES,Ue as PROVIDER_RUNTIME_AUTH_MODE_VALUES,Ke as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,T as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,B as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Le as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,he as RESOURCE_MANIFEST_SCHEMA_VERSION,a as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,Se as WEB_ACTION_SCOPE_VALUES,Ee as WEB_APPROVAL_DEFAULT_VALUES,ye as WEB_CAPABILITY_FAMILY_VALUES,me as WEB_CAPABILITY_ID_VALUES,Pe as WEB_DEGRADATION_TARGET_VALUES,Te as WEB_ESCALATION_REASON_VALUES,fe as WEB_EXECUTION_MODE_VALUES,_e as WEB_POLICY_RISK_CLASS_VALUES,be as WEB_RETRY_POLICY_VALUES,Re as WEB_STATEFULNESS_VALUES,Ae as WEB_TASK_MODE_VALUES,Z as buildAgentRpcMeta,A as classifyGatewayRpcMethod,m as cloneCapabilityManifestSnapshot,ge as createCapabilityManifestDiffPayload,K as createDefaultRuntimeResourceProfiles,de as deriveCapabilityToolNamespaces,ue as deriveCapabilityWorkspaceIds,S as getManifestShortcutEntry,W as getRuntimeResourceAsset,V as getRuntimeResourceProfile,ke as getRuntimeResourceProfileAssets,N as isAcpJsonRpcNotification,O as isAcpJsonRpcRequest,D as isAcpJsonRpcResponse,I as isAgentRpcNotification,b as isAgentRpcRequest,C as isAgentRpcResponse,ze as isAnthropicProviderRuntimeFamily,pe as isExtendedSessionUpdateType,Ge as isOpenAiProviderRuntimeFamily,ae as isStandardSessionUpdateType,Ze as listProviderRuntimeEnvApiKeyNames,le as mergeCapabilityManifestSnapshot,f as normalizeProviderRuntimeId,j as normalizeProviderRuntimeIdForAuth,Oe as normalizeRuntimeResourceManifest,se as parseAcpMessage,H as parseAgentRpcMessage,je as preservesProviderRuntimeAnthropicThinkingSignatures,We as readProviderRuntimeCompatFlag,h as requireGatewayRpcMeta,v as requiresIdempotencyKey,qe as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,l as resolveProviderRuntimeCapabilities,et as resolveProviderRuntimeEnvApiKey,Ve as resolveProviderRuntimeKeyFamily,$e as resolveProviderRuntimeTranscriptToolCallIdMode,Je as shouldDropThinkingBlocksForProviderRuntimeModel,Qe as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,He as supportsOpenAiCompatTurnValidationForProviderRuntime,xe as upsertRuntimeResourceAsset,Ye as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,Xe as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
|
|
1
|
+
var q=["idle","thinking","working","done","happy","error","attention","dragging","sleeping"];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};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-source slash-command registry for the ACP server.
|
|
3
|
+
*
|
|
4
|
+
* `buildAvailableCommands` (the list advertised via `available_commands_update` and summarized by
|
|
5
|
+
* `/help`) and `dispatchSlashCommand` (execution) share one source of truth — `BUILTIN_COMMANDS`.
|
|
6
|
+
* Each command's `dispatch` calls the same underlying data service the equivalent RPC handler uses
|
|
7
|
+
* (model-registry / tool-catalog / skills-query / project-store / acp-detector / memory store) and
|
|
8
|
+
* formats the result as a text reply. No half-wiring: a command is only listed if it can run.
|
|
9
|
+
*
|
|
10
|
+
* Command-set decision (per plan): 9 direct commands + `/init` (degraded to a prompt, no automatic
|
|
11
|
+
* function). `/compact` is intentionally NOT registered — context compaction is triggered
|
|
12
|
+
* automatically by reactive-compact, so exposing it as an explicit command would be misleading.
|
|
13
|
+
* `userInvocable` skill commands are enumerated dynamically; this codebase produces no
|
|
14
|
+
* `SkillCommandSpec`, so the enumeration is empty (a foreseen degradation, not a stub).
|
|
15
|
+
*/
|
|
16
|
+
import type { AcpSessionHost } from "./acp-session-host.js";
|
|
17
|
+
export interface AcpCommandReply {
|
|
18
|
+
handled: boolean;
|
|
19
|
+
reply?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface AcpCommandDef {
|
|
22
|
+
/** Command token including the leading "/". */
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
dispatch(host: AcpSessionHost, args: string): Promise<AcpCommandReply>;
|
|
26
|
+
}
|
|
27
|
+
export declare const BUILTIN_COMMANDS: AcpCommandDef[];
|
|
28
|
+
export declare function buildAvailableCommands(host: AcpSessionHost): Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function dispatchSlashCommand(host: AcpSessionHost, text: string, args: string): Promise<AcpCommandReply>;
|
|
@@ -1,30 +1,41 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { type AcpInitializeParams, type AcpInitializeResult, type AcpSessionEndParams, type AcpSessionMeta, type AcpSessionNewParams, type AcpSessionNewResult, type AcpSessionPromptParams, type AcpSessionPromptResult, type AcpSessionSetConfigParams } from "../protocol/wire/index.js";
|
|
5
|
-
export interface AcpSessionHost {
|
|
6
|
-
/** Gateway-supplied per-session context (_meta from session/new); inherited by every prompt. */
|
|
7
|
-
acpSessionMeta: AcpSessionMeta | null;
|
|
8
|
-
currentApiKey: string;
|
|
9
|
-
currentBaseUrl: string;
|
|
10
|
-
currentHooks: HookRegistry | null;
|
|
11
|
-
currentModel: string;
|
|
12
|
-
currentProvider: string;
|
|
13
|
-
currentSessionId: string;
|
|
14
|
-
memoryPrefetchState: ReturnType<typeof createMemoryPrefetchState>;
|
|
15
|
-
sessionState: SessionState | null;
|
|
16
|
-
sessionTaskDomain: unknown;
|
|
17
|
-
cancelIdleDreamTimer(): void;
|
|
18
|
-
disposeSessionRuntime?(): void;
|
|
19
|
-
enableIdleDream(): void;
|
|
20
|
-
ensureDefaultProject(): void;
|
|
21
|
-
log(message: string): void;
|
|
22
|
-
setActiveWorkdir(dir: string): void;
|
|
23
|
-
}
|
|
1
|
+
import type { AcpSessionHost } from "./acp-session-host.js";
|
|
2
|
+
import { type AcpInitializeParams, type AcpInitializeResult, type AcpSessionCloseParams, type AcpSessionLoadParams, type AcpSessionNewParams, type AcpSessionNewResult, type AcpSessionPromptParams, type AcpSessionPromptResult, type AcpSessionSetConfigParams } from "../protocol/wire/index.js";
|
|
3
|
+
export type { AcpSessionHost };
|
|
24
4
|
export declare function handleAcpInitialize(host: AcpSessionHost, params: AcpInitializeParams, packageVersion: string): Promise<AcpInitializeResult>;
|
|
25
5
|
export declare function handleAcpSessionNew(host: AcpSessionHost, params: AcpSessionNewParams): Promise<AcpSessionNewResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Standard ACP session/load: point the host at an existing session and return its persisted
|
|
8
|
+
* history as display-only chunks for the server to replay. The backend turn context is NOT
|
|
9
|
+
* rebuilt here — every session/prompt hydrates history from disk via the turn pipeline's
|
|
10
|
+
* withResumedHistory, so load only needs to (a) make this the active session and (b) hand back
|
|
11
|
+
* the transcript for the host to render. Returns data only; the server owns the send path.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleAcpSessionLoad(host: AcpSessionHost, params: AcpSessionLoadParams): Promise<{
|
|
14
|
+
replay: Array<{
|
|
15
|
+
type: "user_message_chunk" | "agent_message_chunk";
|
|
16
|
+
content: string;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Pre-prompt slash-command interception (data only). Extracts the leading text from the prompt; if
|
|
21
|
+
* it starts with "/", routes it through the single-source command registry (dispatchSlashCommand)
|
|
22
|
+
* and returns its {handled, reply}. Otherwise returns {handled:false} so the caller runs a normal
|
|
23
|
+
* turn. This NEVER emits session/update or runs a turn — the acp-server orchestrates the single
|
|
24
|
+
* send path (agent_message_chunk + result) when handled, keeping handleAcpSessionPrompt untouched.
|
|
25
|
+
*/
|
|
26
|
+
export declare function tryDispatchCommand(host: AcpSessionHost, params: AcpSessionPromptParams): Promise<{
|
|
27
|
+
handled: boolean;
|
|
28
|
+
reply?: string;
|
|
29
|
+
}>;
|
|
26
30
|
export declare function handleAcpSessionPrompt(host: AcpSessionHost, params: AcpSessionPromptParams): Promise<AcpSessionPromptResult>;
|
|
27
|
-
export declare function
|
|
31
|
+
export declare function handleAcpSessionClose(host: AcpSessionHost, params: AcpSessionCloseParams): Promise<void>;
|
|
28
32
|
export declare function handleAcpSessionSetConfig(host: AcpSessionHost, params: AcpSessionSetConfigParams): Promise<void>;
|
|
29
33
|
export declare function handleAcpSessionSetModel(host: AcpSessionHost, _sessionId: string, model: string): Promise<void>;
|
|
30
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Standard ACP session/set_mode: validate the requested permission mode and record it on the
|
|
36
|
+
* session-level acpSessionMeta.permissions bag. The rule engine is NOT touched here — the next
|
|
37
|
+
* session/prompt's syncTurnPermissionConfig reads permissions.mode and applies it (single track).
|
|
38
|
+
* Returns the applied modeId; the server emits current_mode_update. An unknown mode throws a coded
|
|
39
|
+
* error which the acp-server dispatch translates into a JSON-RPC error.
|
|
40
|
+
*/
|
|
41
|
+
export declare function handleAcpSessionSetMode(host: AcpSessionHost, _sessionId: string, modeId: string): Promise<string>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HookRegistry } from "../contracts/hooks.js";
|
|
2
|
+
import type { AcpSessionMeta } from "../protocol/wire/index.js";
|
|
3
|
+
import { createMemoryPrefetchState } from "../runtime/hooks/memory-hooks.js";
|
|
4
|
+
import type { SessionState } from "../runtime/session/session-state.js";
|
|
5
|
+
export interface AcpSessionHost {
|
|
6
|
+
/** Gateway-supplied per-session context (_meta from session/new); inherited by every prompt. */
|
|
7
|
+
acpSessionMeta: AcpSessionMeta | null;
|
|
8
|
+
currentApiKey: string;
|
|
9
|
+
currentBaseUrl: string;
|
|
10
|
+
currentHooks: HookRegistry | null;
|
|
11
|
+
currentModel: string;
|
|
12
|
+
currentProvider: string;
|
|
13
|
+
currentSessionId: string;
|
|
14
|
+
memoryPrefetchState: ReturnType<typeof createMemoryPrefetchState>;
|
|
15
|
+
sessionState: SessionState | null;
|
|
16
|
+
sessionTaskDomain: unknown;
|
|
17
|
+
cancelIdleDreamTimer(): void;
|
|
18
|
+
disposeSessionRuntime?(): void;
|
|
19
|
+
enableIdleDream(): void;
|
|
20
|
+
ensureDefaultProject(): void;
|
|
21
|
+
getActiveProjectRoot(): string;
|
|
22
|
+
log(message: string): void;
|
|
23
|
+
setActiveWorkdir(dir: string): void;
|
|
24
|
+
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { type AgentRpcError, type AgentRpcRequest } from "../../protocol/wire/index.js";
|
|
6
6
|
import type { MemoryHandlerProvider, ProjectMemoryStore, ProjectMemoryStoreFactory } from "../../runtime/ports/index.js";
|
|
7
|
+
import { type MemoryModelPurpose } from "../memory-candidate-service.js";
|
|
7
8
|
interface MemoryLlmClient {
|
|
8
9
|
model: string;
|
|
9
10
|
apiKey: string;
|
|
@@ -24,7 +25,7 @@ export interface MemoryHandlerHost {
|
|
|
24
25
|
};
|
|
25
26
|
ensureMemoryProvider?(): void;
|
|
26
27
|
getActiveProjectRoot(): string;
|
|
27
|
-
resolveClientForPurpose?(purpose:
|
|
28
|
+
resolveClientForPurpose?(purpose: MemoryModelPurpose): MemoryLlmClient | null;
|
|
28
29
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
29
30
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
30
31
|
}
|
|
@@ -49,4 +50,12 @@ export declare function handleMemoryWrite(this: MemoryHandlerHost, msg: AgentRpc
|
|
|
49
50
|
export declare function handleMemorySearch(this: MemoryHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
50
51
|
export declare function handleMemoryDelete(this: MemoryHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
51
52
|
export declare function handleMemoryUpdate(this: MemoryHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* memory.attachment.adopt — persist an uploaded素材 into the long-term-memory
|
|
55
|
+
* attachment store from a transient source URL (the gateway's temp MediaStore).
|
|
56
|
+
* The attachment is an orphan until linked to a memory at consolidate time.
|
|
57
|
+
*/
|
|
58
|
+
export declare function handleMemoryAttachmentAdopt(this: MemoryHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
59
|
+
/** memory.attachment.locate — resolve an attachment id to its on-disk path (for serving). */
|
|
60
|
+
export declare function handleMemoryAttachmentLocate(this: MemoryHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
52
61
|
export {};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - pet.hatch: Hatch a new pet (first time) or return existing soul
|
|
6
6
|
* - pet.interact: Handle user interaction (pat/feed/poke)
|
|
7
7
|
* - pet.status: Get current pet soul + stats
|
|
8
|
-
* - pet.forge: Generate a
|
|
8
|
+
* - pet.forge: Generate a Petdex asset summary from image/text (P4)
|
|
9
9
|
*/
|
|
10
10
|
import { type AgentRpcError, type AgentRpcRequest } from "../../protocol/wire/index.js";
|
|
11
11
|
import type { PetRuntime } from "../pet-runtime.js";
|
|
@@ -26,11 +26,12 @@ export interface PetHandlerHost {
|
|
|
26
26
|
memoryProvider?: PetMemoryProviderLike | null;
|
|
27
27
|
memoryUserId?: string;
|
|
28
28
|
ownerUserId?: string;
|
|
29
|
-
petRuntime: Pick<PetRuntime, "createPetSoulGenerator" | "createSmallLLMCall" | "forgeAnalyzeImage" | "
|
|
29
|
+
petRuntime: Pick<PetRuntime, "createPetSoulGenerator" | "createSmallLLMCall" | "forgeAnalyzeImage"> & Partial<Pick<PetRuntime, "forgeGeneratePetdexAtlas" | "isImageGenerationAvailable" | "isPetdexForgeAvailable">>;
|
|
30
30
|
getActiveProjectRoot(): string;
|
|
31
31
|
sendNotification(method: string, params: Record<string, unknown>): void;
|
|
32
32
|
sendResponse(id: string | number, result?: unknown, error?: AgentRpcError): void;
|
|
33
33
|
ensureModelRegistryHydrated?(): Promise<void>;
|
|
34
|
+
configureTurnMedia?(config: Record<string, unknown> | undefined, turnId: string): void;
|
|
34
35
|
}
|
|
35
36
|
export declare function handlePetHatch(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
36
37
|
export declare function handlePetInteract(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
@@ -40,16 +41,9 @@ export declare function handlePetJourneySnapshot(this: PetHandlerHost, msg: Agen
|
|
|
40
41
|
export declare function handlePetJourneyList(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
41
42
|
export declare function handlePetJourneyGet(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
42
43
|
export declare function handlePetCustomDelete(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
44
|
+
export declare function handlePetAssetImport(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
43
45
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* Pipeline (design §14.3 Plan A + §14.4):
|
|
47
|
-
* 1. Analyze image (if provided) → character description
|
|
48
|
-
* 2. Generate ONE base skeleton SVG (with labeled parts)
|
|
49
|
-
* 3. Validate skeleton structure (required IDs/classes)
|
|
50
|
-
* 4. For each state: renderState() injects CSS animations + effects
|
|
51
|
-
* 5. Structural consistency check; retry skeleton if score too low
|
|
52
|
-
* 6. Package and emit pet.forged
|
|
46
|
+
* Pet Forge creates the backend-owned Petdex asset record from a generated atlas.
|
|
53
47
|
*/
|
|
54
48
|
export declare function handlePetForge(this: PetHandlerHost, msg: AgentRpcRequest): Promise<void>;
|
|
55
49
|
export {};
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { type MediaCapability, type MediaClient, type MediaRequest, type MediaResult, type ProviderToolAPI } from "./provider-core-facade.js";
|
|
2
2
|
import type { MediaFileServiceContext } from "./media-file-api-service.js";
|
|
3
|
+
export interface MediaUsageCallbackEvent {
|
|
4
|
+
mediaType: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
model: string;
|
|
7
|
+
billingUnit: string;
|
|
8
|
+
billingQuantity: number;
|
|
9
|
+
}
|
|
3
10
|
export declare function setProviderToolAPI(api: ProviderToolAPI | undefined): void;
|
|
4
11
|
export declare function getProviderToolAPI(): ProviderToolAPI | undefined;
|
|
5
|
-
export declare function setMediaClientConfig(client: MediaClient | undefined, apiKeys?: Record<string, string>, onMediaUsage?: (
|
|
12
|
+
export declare function setMediaClientConfig(client: MediaClient | undefined, apiKeys?: Record<string, string>, onMediaUsage?: (event: MediaUsageCallbackEvent) => void, providers?: Partial<Record<MediaCapability, {
|
|
6
13
|
provider: string;
|
|
7
14
|
model: string;
|
|
8
15
|
}>>, onMediaProgress?: (taskId: string, mediaType: string, percent: number, status: string, provider?: string) => void): void;
|
|
@@ -10,6 +17,7 @@ export declare function getMediaRuntimeContext(): MediaFileServiceContext;
|
|
|
10
17
|
export declare function generateMedia(request: MediaRequest): Promise<MediaResult>;
|
|
11
18
|
export declare function isMediaAvailable(mediaType: string): boolean;
|
|
12
19
|
export declare function isMediaOperationAvailable(mediaType: string, operation: string): boolean;
|
|
20
|
+
export declare function isMediaOperationDeclaredAvailable(mediaType: string, operation: string): boolean;
|
|
13
21
|
export declare function generateMusicLyrics(prompt: string): Promise<string>;
|
|
14
22
|
export declare function cancelMediaTask(params: {
|
|
15
23
|
taskId: string;
|
|
@@ -8,6 +8,8 @@ interface MemoryLlmClient {
|
|
|
8
8
|
}>;
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
|
+
/** Model purposes the memory pipeline can resolve (text + multimodal). */
|
|
12
|
+
export type MemoryModelPurpose = "smallModel" | "textGeneration" | "imageUnderstanding" | "stt" | "videoUnderstanding";
|
|
11
13
|
export interface MemoryCandidateHost {
|
|
12
14
|
memoryProvider?: {
|
|
13
15
|
search?(query: string, userId: string, options?: {
|
|
@@ -19,8 +21,15 @@ export interface MemoryCandidateHost {
|
|
|
19
21
|
score?: number;
|
|
20
22
|
metadata?: Record<string, unknown>;
|
|
21
23
|
}>>;
|
|
24
|
+
/** Read an uploaded attachment's bytes (for multimodal understanding). */
|
|
25
|
+
readAttachmentBytes?(id: string): Promise<{
|
|
26
|
+
bytes: Buffer;
|
|
27
|
+
mimeType: string;
|
|
28
|
+
} | null>;
|
|
29
|
+
/** Persist the understood/extracted text back on the attachment row. */
|
|
30
|
+
setAttachmentText?(id: string, text: string): void;
|
|
22
31
|
} | null;
|
|
23
|
-
resolveClientForPurpose?(purpose:
|
|
32
|
+
resolveClientForPurpose?(purpose: MemoryModelPurpose): MemoryLlmClient | null;
|
|
24
33
|
}
|
|
25
34
|
export interface MemoryAttachment {
|
|
26
35
|
type: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ChatMessage } from "../agent/types.js";
|
|
2
2
|
import type { ModelPurpose } from "../runtime/infra/model-registry.js";
|
|
3
|
-
import { type PetStats } from "../runtime/pet/index.js";
|
|
3
|
+
import { type PetStats, type PetdexAnimationId, type PetdexPetAsset, type PetdexValidationReport } from "../runtime/pet/index.js";
|
|
4
|
+
import { type PetdexProductionRun } from "../runtime/pet/petdex-forge-service.js";
|
|
4
5
|
import type { LLMTransport } from "./provider-core-facade.js";
|
|
5
6
|
export type PetSoulGenerator = (rarity: string, stats: PetStats) => Promise<{
|
|
6
7
|
name: string;
|
|
@@ -8,6 +9,29 @@ export type PetSoulGenerator = (rarity: string, stats: PetStats) => Promise<{
|
|
|
8
9
|
catchphrase: string;
|
|
9
10
|
}>;
|
|
10
11
|
export type SmallLlmCall = (prompt: string, maxTokens: number) => Promise<string | null>;
|
|
12
|
+
export interface PetdexForgeInput {
|
|
13
|
+
id?: string;
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
prompt?: string | null;
|
|
17
|
+
referenceImageUrl?: string;
|
|
18
|
+
referenceMode?: "identity" | "refine";
|
|
19
|
+
baseSpritesheet?: Buffer;
|
|
20
|
+
refineAnimationId?: PetdexAnimationId;
|
|
21
|
+
refineFrameIndexes?: number[];
|
|
22
|
+
}
|
|
23
|
+
export interface PetdexForgeOutput {
|
|
24
|
+
asset: PetdexPetAsset;
|
|
25
|
+
spritesheet: Buffer;
|
|
26
|
+
validation: PetdexValidationReport;
|
|
27
|
+
productionRun?: PetdexProductionRun;
|
|
28
|
+
mediaUsage?: {
|
|
29
|
+
provider: string;
|
|
30
|
+
model: string;
|
|
31
|
+
billingUnit: string;
|
|
32
|
+
billingQuantity: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
11
35
|
export interface PetLlmClient {
|
|
12
36
|
transport: LLMTransport;
|
|
13
37
|
apiKey: string;
|
|
@@ -17,11 +41,9 @@ export interface PetRuntime {
|
|
|
17
41
|
createPetSoulGenerator(): PetSoulGenerator | undefined;
|
|
18
42
|
createSmallLLMCall(): SmallLlmCall | undefined;
|
|
19
43
|
forgeAnalyzeImage(imageBase64: string, hint?: string): Promise<string>;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
feedback: string;
|
|
24
|
-
}>;
|
|
44
|
+
isImageGenerationAvailable(): boolean;
|
|
45
|
+
isPetdexForgeAvailable(): boolean;
|
|
46
|
+
forgeGeneratePetdexAtlas(input: PetdexForgeInput): Promise<PetdexForgeOutput>;
|
|
25
47
|
awardXp(event: string): Promise<void>;
|
|
26
48
|
reactAfterTurn(messages: ChatMessage[]): Promise<void>;
|
|
27
49
|
isActive(): boolean;
|
|
@@ -14,6 +14,9 @@ export interface VolcengineFileTransport {
|
|
|
14
14
|
filename: string;
|
|
15
15
|
}): Promise<{
|
|
16
16
|
id: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
fileId?: string;
|
|
19
|
+
status?: string;
|
|
17
20
|
}>;
|
|
18
21
|
getFile(fileId: string, apiKey: string): Promise<Record<string, unknown>>;
|
|
19
22
|
listFiles(apiKey: string, options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PETDEX_ANIMATION_IDS, PETDEX_ATLAS_CONTRACT, PETDEX_SCHEMA, PETDEX_VALIDATION_SCHEMA, type PetdexAnimation, type PetdexAnimationId, type PetdexAnimationMap, type PetdexAssetManifest, type PetdexAssetSummary, type PetdexAssetValidation, type PetdexAtlasManifest, } from "./protocol/wire/pet-contracts.js";
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Reference: Codex app-server RPC, Claude Code JSON-RPC, GitHub Copilot Agent API.
|
|
8
8
|
*/
|
|
9
|
-
import type { ChatMessage, LocalizedToolText, ToolCapabilityCategory
|
|
9
|
+
import type { ChatMessage, LocalizedToolText, ToolCapabilityCategory } from "./wire/chat-types.js";
|
|
10
10
|
import type { AgentDescriptor, AgentConfig, GatewayRpcMethodMap, RpcProjectInfo, RpcProjectType, RpcProjectStatus, SoloStatus, ProductStatus, ProductSummary } from "./wire/index.js";
|
|
11
11
|
import type { AgentsScanParams, AgentsConfigParams, AgentsSetConfigParams, AgentsGetConfigParams, AgentsRemoveConfigParams, AgentsSetGatewayParams, SoloStartParams, SoloIdParams, SoloSelectParams, SoloDeleteParams, SoloMessageParams, SoloEvaluateParams, SoloEvaluation, ProductCreateParams, ProductPlanParams, ProductPlan, ProductConfirmParams, ProductMessageParams, ProductIdParams, ProductDeleteParams } from "./wire/acp-agent-management.js";
|
|
12
12
|
export interface InitializeParams {
|
|
@@ -66,17 +66,6 @@ export interface ThreadListResult {
|
|
|
66
66
|
lastActiveAt: string;
|
|
67
67
|
}>;
|
|
68
68
|
}
|
|
69
|
-
export interface ThreadTurnParams {
|
|
70
|
-
turnId?: string;
|
|
71
|
-
sessionId: string;
|
|
72
|
-
messages?: ChatMessage[];
|
|
73
|
-
tools?: ToolDefinition[];
|
|
74
|
-
config?: Record<string, unknown>;
|
|
75
|
-
}
|
|
76
|
-
export interface ThreadTurnResult {
|
|
77
|
-
accepted: boolean;
|
|
78
|
-
turnId: string;
|
|
79
|
-
}
|
|
80
69
|
export interface SessionResumeParams {
|
|
81
70
|
sessionId: string;
|
|
82
71
|
}
|
|
@@ -601,18 +590,6 @@ export interface TodosListResult {
|
|
|
601
590
|
export interface AgentPingResult {
|
|
602
591
|
status: "ok";
|
|
603
592
|
}
|
|
604
|
-
export interface AgentAbortParams {
|
|
605
|
-
turnId?: string;
|
|
606
|
-
}
|
|
607
|
-
export interface AgentAbortResult {
|
|
608
|
-
aborted: boolean;
|
|
609
|
-
}
|
|
610
|
-
export interface ToolApprovalResponseParams {
|
|
611
|
-
approvalId: string;
|
|
612
|
-
decision: "allow" | "deny";
|
|
613
|
-
toolName?: string;
|
|
614
|
-
updatedInput?: Record<string, unknown>;
|
|
615
|
-
}
|
|
616
593
|
export interface MemorySearchParams {
|
|
617
594
|
query: string;
|
|
618
595
|
/** Max results (default 10). */
|
|
@@ -729,10 +706,6 @@ export interface RpcMethodMap {
|
|
|
729
706
|
params: ThreadListParams;
|
|
730
707
|
result: ThreadListResult;
|
|
731
708
|
};
|
|
732
|
-
"thread.turn": {
|
|
733
|
-
params: ThreadTurnParams;
|
|
734
|
-
result: ThreadTurnResult;
|
|
735
|
-
};
|
|
736
709
|
"session.resume": {
|
|
737
710
|
params: SessionResumeParams;
|
|
738
711
|
result: SessionResumeResult;
|
|
@@ -861,16 +834,6 @@ export interface RpcMethodMap {
|
|
|
861
834
|
params: undefined;
|
|
862
835
|
result: AgentPingResult;
|
|
863
836
|
};
|
|
864
|
-
"agent.abort": {
|
|
865
|
-
params: AgentAbortParams;
|
|
866
|
-
result: AgentAbortResult;
|
|
867
|
-
};
|
|
868
|
-
"tool.approval.response": {
|
|
869
|
-
params: ToolApprovalResponseParams;
|
|
870
|
-
result: {
|
|
871
|
-
received: boolean;
|
|
872
|
-
};
|
|
873
|
-
};
|
|
874
837
|
"agents.scan": {
|
|
875
838
|
params: AgentsScanParams;
|
|
876
839
|
result: AgentDescriptor[];
|