qlogicagent 2.23.0 → 2.23.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/agent.js +43 -45
- package/dist/cli.js +7 -7
- package/dist/host-contract.js +1 -1
- package/dist/index.js +334 -338
- package/dist/protocol.js +1 -1
- package/dist/skills/builtin/desktop-screenshot/SKILL.md +3 -1
- package/dist/types/agent/agent.d.ts +0 -1
- package/dist/types/agent/tool-loop/loop-helpers.d.ts +1 -2
- package/dist/types/agent/tool-loop.d.ts +2 -4
- package/dist/types/agent/types.d.ts +2 -5
- package/dist/types/cli/handlers/turn-handler.d.ts +12 -11
- package/dist/types/contracts/turn-event.d.ts +6 -8
- package/dist/types/host-contract/index.d.ts +37 -87
- package/dist/types/orchestration/solo-evaluator.d.ts +2 -2
- package/dist/types/protocol/wire/acp-protocol.d.ts +1 -1
- package/dist/types/protocol/wire/index.d.ts +1 -1
- package/dist/types/protocol/wire/notification-payloads.d.ts +1 -13
- package/dist/types/runtime/config/tunable-defaults.d.ts +14 -6
- package/dist/types/runtime/infra/turn-telemetry-store.d.ts +1 -2
- package/dist/types/runtime/prompt/host-skill-directory.d.ts +16 -0
- package/dist/types/skills/mcp/mcp-manager.d.ts +12 -4
- package/dist/types/skills/memory/host-memory-provider.d.ts +2 -2
- package/dist/types/skills/memory/task-distillation.d.ts +1 -1
- package/dist/types/skills/tools/shell/command-classification.d.ts +0 -36
- package/dist/types/transport/acp-server.d.ts +3 -3
- package/dist/types/transport/delegate-client.d.ts +2 -2
- package/package.json +3 -3
- package/dist/types/agent/tool-loop/tool-budget-continuation-policy.d.ts +0 -45
- package/dist/types/runtime/prompt/capability-routing-policy.d.ts +0 -9
package/dist/protocol.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var G="1.0.0",l={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},z={REQUEST:"tool.approval.request"};function _(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 x(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function X(e){let t;try{t=JSON.parse(e)}catch{return null}return C(t)||_(t)||x(t)?t:null}import{randomUUID as $}from"node:crypto";var J=["settings.list","settings.get","settings.validate","provider.list","tools.list","todos.list","tasks.list","session.list","session.get","session.resolve","session.loadNativeTranscript","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","agent.health","agent.metrics"],Q=new Set(["memory.dream","memory.propose","memory.consolidate"]),Z=["memory.","usage."],ee=new Set(["memory.atlas","memory.activity","memory.list","memory.read","memory.search","memory.attachment.locate","memory.attachment.adopt"]);function A(e){return Q.has(e)?{channel:"task",mutability:"write",defaultTimeoutMs:12e4}:J.some(t=>e===t||e.startsWith(`${t}.`)||e.startsWith(t))?{channel:"query",mutability:"read",defaultTimeoutMs:1e4}:{channel:"task",mutability:"write",defaultTimeoutMs:3e4}}function M(e){return ee.has(e)||A(e).mutability==="read"?!1:Z.some(t=>e.startsWith(t))}function te(e,t={}){let n=t.now??Date.now(),r=A(e),o=t.timeoutMs??r.defaultTimeoutMs;return{requestId:t.requestId??$(),createdAt:n,deadlineAt:n+o,channel:t.channel??r.channel,idempotencyKey:t.idempotencyKey,traceId:t.traceId}}function v(e,t=Date.now()){let n=e.meta;if(!n||typeof n!="object")return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta is required."}};if(typeof n.requestId!="string"||n.requestId.length===0)return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.requestId is required."}};if(n.channel!=="query"&&n.channel!=="task")return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.channel must be query or task."}};if(typeof n.createdAt!="number"||!Number.isFinite(n.createdAt))return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.createdAt is required."}};if(typeof n.deadlineAt!="number"||!Number.isFinite(n.deadlineAt))return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.deadlineAt is required."}};if(n.deadlineAt<=t)return{ok:!1,error:{code:l.REQUEST_DEADLINE_EXCEEDED,message:"RPC request deadline has already expired."}};let r=A(e.method).channel;return n.channel!==r?{ok:!1,error:{code:l.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${r}, got ${n.channel}.`}}:M(e.method)&&(typeof n.idempotencyKey!="string"||n.idempotencyKey.length===0)?{ok:!1,error:{code:l.REQUEST_IDEMPOTENCY_REQUIRED,message:`RPC method ${e.method} requires meta.idempotencyKey.`}}:{ok:!0,meta:n}}var I=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,n){let r=v({method:t,meta:n},this.now());if(!r.ok)return this.counters.invalidRequests+=1,{status:"rejected",error:r.error};if(n.idempotencyKey){let o=this.idempotency.get(n.idempotencyKey);if(o)return this.counters.dedupedRequests+=1,o.error?{status:"deduped",error:o.error}:{status:"deduped",result:o.result}}return this.active.set(n.requestId,{method:t,meta:n,cancelled:!1,startedAt:this.now()}),{status:"started"}}cancel(t,n="cancelled"){let r=this.active.get(t);return!r||r.cancelled?!1:(r.cancelled=!0,r.cancelReason=n,this.counters.cancelledRequests+=1,!0)}expire(t){return this.active.get(t)?(this.active.delete(t),this.counters.deadlineExceededRequests+=1,!0):!1}settle(t,n,r){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:n,error:r,settledAt:this.now()}),{accepted:!0})):{accepted:!1,reason:"unknown"}}metrics(){return{activeRequests:this.active.size,...this.counters}}};var ne=["agent.health","agent.metrics","agent.cancel","provider.catalog","provider.list","provider.get","provider.install","provider.install.cancel","provider.update","provider.uninstall","provider.enable","provider.disable","provider.diagnose","provider.auth.status","provider.auth.setPreference","provider.auth.setUserKey","provider.auth.methods","provider.auth.start","provider.auth.attach","provider.auth.input","provider.auth.resize","provider.auth.cancel","provider.auth.logout","provider.models.list","provider.nativeSessions.list","provider.nativeSessions.load","provider.nativeSessions.resume","delegation.cancel","delegation.reset","session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.loadNativeTranscript","session.adoptNative","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.detach","project.delete","project.rename","project.archive","project.unarchive","project.update","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.move","files.copy","files.delete","files.search","files.undoOperation","files.gitStatus","turnBaseline.getSummary","turnBaseline.getFileDiff","turnBaseline.listRecent","turnBaseline.getFileBaseline","workingMaterials.get","workingMaterials.replace","workingMaterials.upsert","workingMaterials.remove","workingMaterials.reorder","skills.list","memory.list-files","memory.atlas","memory.activity","memory.propose","memory.consolidate","memory.update","memory.attachment.adopt","memory.attachment.locate"];var R=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.text_rollback","turn.file_changes","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.ask_user","turn.media_result","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_started","turn.subagent_delta","turn.subagent_activity","turn.subagent_ended","turn.subagent_completed","turn.subagent_decision","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.progress","turn.tool_use_summary","turn.tool_selection_policy","turn.lifecycle","turn.document_maintenance","turn.artifact_contract","turn.usage_update","team.member.notification","session.info","session.recovery_pending","thread.item","memory.updated","skills.updated","turn.memory_recall","turn.memory_written","system.activity","workflow.created","workflow.updated","workflow.deleted","workflow.runStarted","workflow.runCompleted","workflow.runFailed","workflow.nodeStatus","workflow.triggerDropped","workflow.alert","workflow.approvalRequested","workflow.approvalTimedOut"],b=["solo.progress","solo.specProgress","solo.agentDelta","solo.agentActivity","solo.agentUsage","solo.evaluation","solo.agentDiff","solo.state","product.taskStarted","product.taskOutput","product.members","product.agentActivity","product.taskCompleted","product.taskFailed","product.taskHandoff","product.budgetUpdate","product.budgetWarning","product.budgetExceeded","product.checkpointed","product.completed","product.dagTopology","plan.interrupted","product.planReady","product.planningDelta","product.leaderMessage","product.planFailed","product.planningAsk","mention.delegate_started","mention.delegate_activity","mention.delegate_settled"],re=[...R,...b],w=re;import{MODEL_PURPOSES as dn}from"@xiaozhiclaw/module-sdk/model-access";var ie=["fact","preference","insight","lesson","decision","plan","event","pattern","context","procedure","general"],_t=new Set(ie),oe=["equals","includes","excludes"],Ct=new Set(oe);import{createHash as vt}from"node:crypto";import{resolve as Ot}from"node:path";var O=["efficiency","dev","cloud","data","industrial","marketing","ecommerce","procurement","hr","accounting","finance","legal","lifestyle"];var Ht=new Set(O);var m={request:"x/delegate",update:"x/delegate.update",respond:"x/delegate.respond",cancel:"x/delegate.cancel"},se=["search","embedText","ingestExtracted","proposeExtracted","consumePendingProposals","feedback","findRelatedEvents","synthesizeTimeline","getActivitySummary","getAllProfiles","setProfile","getAtlas","setMemoryArchived","triggerDecay","resolveConflicts","readProcedureUsage","writeProcedureUsage","readDistillCandidates","writeDistillCandidates","readPromotionProposals","writePromotionProposals","listActiveMemoriesByTag","readDistilledProcedure","promoteDistilledProcedure","demoteDistilledProcedure","recordInjectedAccess","recordRecallOutcome","enqueueExtractionTurn","claimPendingExtractionTurns","completeExtractionTurn","releaseExtractionTurn","recordExtractionTurnFailure"],ae=["initialize","getIndex","addToIndex","replaceInIndex","removeFromIndex","createFile","writeFile","readFile","deleteFile","listFiles","searchLocal"],de=["getSkillSnapshot","readSkillFile","recordSkillInvocation","commitSkillMutation","applyCuratorPlan","prepareSkillInstall","finalizeSkillInstall"],pe=["loadForResume","appendTranscript","updateTitle","saveState","saveTaskSummary","groupSplit"],ce=["commitTurnTelemetry","listDistillableFeedback","markFeedbackDistilled","runUploadSweep"],le=["getSnapshot","create","switch","update"],Yt=1024*1024,ue=["resolveInstall","listResourceVersions"],ge=["probeSession"],me=["list","get","diagnose"],fe=["navigate","snapshot","click","type","screenshot","console","network"];var ye=["open","openWithCheckpoint","recordEvent","checkpoint","get","list","delete","getCheckpoint","listCheckpoints","restoreCheckpoint"],Ae=["getTunables","updateTunable","clearTunable","appendDirectoryAllowRule"];var Gt=new Set(se),zt=new Set(ae),Xt=new Set(Ae),$t=new Set(de),Jt=new Set(pe),Qt=new Set(ce),Zt=new Set(le),en=new Set(ye),tn=new Set(me),nn=new Set(ue),rn=new Set(ge),on=new Set(fe);var Se=1,Ie={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"},Re={ABORT:"x/abort",DREAM:"x/dream",SOLO_START:"x/solo.start",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",SOLO_DELETE:"x/solo.delete",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_MUTATE_DAG:"x/product.mutateDag",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_REPLAY:"x/product.replay",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",SOLO_SPEC_CHAT:"x/solo.specChat",SOLO_SPEC_JUDGE:"x/solo.specJudge",WORKFLOW_CHAT:"x/workflow.chat",WORKFLOW_MATCH_INTENT:"x/workflow.matchIntent",WORKFLOW_PLAN_COMMAND:"x/workflow.planCommand",PRODUCT_SUBSCRIBE:"x/product.subscribe",GOAL_START:"x/goal.start",GOAL_PAUSE:"x/goal.pause",GOAL_RESUME:"x/goal.resume",GOAL_UPDATE_GOAL:"x/goal.updateGoal",GOAL_STOP:"x/goal.stop",GOAL_MESSAGE:"x/goal.message",GOAL_RECOVER:"x/goal.recover",GOAL_DISMISS:"x/goal.dismiss",DELEGATE:m.request,DELEGATE_UPDATE:m.update,DELEGATE_RESPOND:m.respond,DELEGATE_CANCEL:m.cancel},N={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"},be={X_SESSION_INFO:"x_session_info",X_RELAY:"x_relay"};function D(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){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function L(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function he(e){let t;try{t=JSON.parse(e)}catch{return null}return L(t)||D(t)||H(t)?t:null}function Ee(e){return Object.values(N).includes(e)}function Pe(e){return e.startsWith("x_")}var h=["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(e){return e?e.map(t=>({...t})):void 0}function Te(e){return e?[...e]:void 0}function U(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function f(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(e.workspaceSummaries)}:{}}}function ke(e){let{previous:t,update:n}=e;return!(n.syncMode==="diff"&&t&&(!n.baseSnapshotVersion||t.snapshotVersion===n.baseSnapshotVersion))||!t?f(n):{...f(t),snapshotVersion:n.snapshotVersion,updatedAt:n.updatedAt,...n.gatewayVersion!==void 0?{gatewayVersion:n.gatewayVersion}:{},...n.syncMode?{syncMode:n.syncMode}:{},...n.baseSnapshotVersion?{baseSnapshotVersion:n.baseSnapshotVersion}:{},...n.changedSections?{changedSections:[...n.changedSections]}:{},...n.toolNamespaces?{toolNamespaces:[...n.toolNamespaces]}:{},...n.workspaceIds?{workspaceIds:[...n.workspaceIds]}:{},...n.installedCapabilities?{installedCapabilities:[...n.installedCapabilities]}:{},...n.enabledCapabilities?{enabledCapabilities:[...n.enabledCapabilities]}:{},...n.features?{features:[...n.features]}:{},...n.approvalMode?{approvalMode:n.approvalMode}:{},...n.toolManifests?{toolManifests:g(n.toolManifests)}:{},...n.skillManifests?{skillManifests:g(n.skillManifests)}:{},...n.pluginManifests?{pluginManifests:g(n.pluginManifests)}:{},...n.mcpManifests?{mcpManifests:g(n.mcpManifests)}:{},...n.approvalPolicy?{approvalPolicy:{...n.approvalPolicy}}:{},...n.workspaceSummaries?{workspaceSummaries:E(n.workspaceSummaries)}:{}}}function _e(e){return U(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function Ce(e){return U(e.map(t=>t.id))}function xe(e){let{previous:t,current:n}=e;if(!t)return{...f(n),syncMode:"full"};if(t.snapshotVersion===n.snapshotVersion)return null;let r=h.filter(s=>JSON.stringify(t[s])!==JSON.stringify(n[s]));if(r.length===h.length)return{...f(n),syncMode:"full"};let o={snapshotVersion:n.snapshotVersion,updatedAt:n.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:r,toolNamespaces:[...n.toolNamespaces],workspaceIds:[...n.workspaceIds]},p=o;for(let s of r){let i=n[s];if(i!==void 0)switch(s){case"toolNamespaces":case"workspaceIds":case"installedCapabilities":case"enabledCapabilities":case"features":p[s]=Te(i);break;case"approvalPolicy":p[s]={...i};break;case"workspaceSummaries":p[s]=E(i);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":p[s]=g(i);break;default:p[s]=i;break}}return o}var Me=["web_search","web_fetch","web_research","browser_execution"],ve=["web-intelligence","browser-execution"],we=["discovery","read-url","multi-source-research","interactive-browser"],Oe=["stateless","render-backend","interactive-session"],Ne=["stateless","stateless-single-step","stateful-session-required"],De=["required","conditional","none"],He=["browser-read","browser-authenticated-read","browser-state-changing"];var Le=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],Ue=["web_search","web_fetch","web_research","blocked"],je=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],Ke=["none","same-capability-once","degrade-only"];var Ve=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],Fe=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],We=["observe-only","parent-write","deny"];var qe=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 K(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Be(e){return{...e,assetIds:[...e.assetIds]}}function V(){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 F(e,t){return e.assets[t]}function W(e,t){return e.profiles[t]}function Ye(e,t){let n=W(e,t);return n?n.assetIds.map(r=>F(e,r)).filter(r=>!!r):[]}function Ge(e,t){return e.assets[t.id]=K(t),q(e)}function P(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 q(e){let t=P(e.assets[a.gatewayImage]),n=P(e.assets[a.whisperModelTiny]);return{...e,gateway:t,whisperModel:n}}function j(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 ze(e){let t=e&&typeof e=="object"?e:{},n={},r=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[i,d]of Object.entries(r)){if(!d||typeof d!="object")continue;let u=d;!u.id||!Array.isArray(u.artifacts)||(n[i]=K(u))}if(!n[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let i=j(t.gateway,{id:a.gatewayImage,title:"XiaoZhiClaw Gateway Image (Desktop Slim)",kind:"container-image",delivery:"remote",platform:"any",description:"Desktop Docker mode gateway image."});i&&(n[i.id]=i)}if(!n[a.whisperModelTiny]&&t.whisperModel&&typeof t.whisperModel=="object"){let i=j(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&&(n[i.id]=i)}let p={...V()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[i,d]of Object.entries(s)){if(!d||typeof d!="object")continue;let u=d;!u.id||!Array.isArray(u.assetIds)||(p[i]=Be(u))}return q({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:n,profiles:p})}var Xe=["pending","captured","failed","restored"],$e=["file","directory","missing"],Je=["metadata-only","workspace-copy","shadow-git"];var Qe=["api-key","oauth","token","aws-sdk"],Ze=["rate_limit","auth","server_error","timeout","network","unknown"],et=["requiresOpenAiAnthropicToolPayload"];function tt(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var B="openai-codex";function S(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 Y(e){let t=S(e);return t==="volcengine-plan"?"volcengine":t==="qwen-coding"?"qwen":t==="byteplus-plan"?"byteplus":t}var nt=Y,rt={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},it={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 T(e,t){let n=(e??"").toLowerCase();return!!n&&t.some(r=>n.includes(r))}function c(e){let t=S(e??"");return{...rt,...it[t]}}function ot(e){return c(e).preserveAnthropicThinkingSignatures}function st(e){let t=c(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function at(e){return c(e).anthropicToolSchemaMode==="openai-functions"}function dt(e){return c(e).anthropicToolChoiceMode==="openai-string-modes"}function pt(e){return c(e).openAiCompatTurnValidation}function ct(e){return c(e).providerFamily==="openai"}function lt(e){return c(e).providerFamily==="anthropic"}function ut(e){return T(e.modelId,c(e.provider).dropThinkingBlockModelHints)}function gt(e){let t=c(e.provider);return t.providerThoughtSignatureSanitization&&T(e.modelId,t.providerThoughtSignatureModelHints)}function mt(e,t){let n=c(e),r=n.transcriptToolCallIdMode;if(r==="strict9")return r;if(T(t,n.transcriptToolCallIdModelHints))return"strict9"}var k={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 ft(){return[...new Set(Object.values(k).flat())]}function yt(e){let t=S(e.provider),n=e.env??process.env,r=new Set(e.appliedEnvKeys??[]),o=i=>{let d=n[i]?.trim();if(!d)return null;let u=r.has(i)?`shell env: ${i}`:`env: ${i}`;return{apiKey:d,source:u}},p=e.resolveSpecialApiKey?.(t,n,r);if(p)return p;let s=k[t];if(!s||s.length===0)return null;for(let i of s){let d=o(i);if(d)return d}return null}export{Re as ACP_EXTENDED_METHODS,be as ACP_EXTENDED_SESSION_UPDATE_TYPES,Ie as ACP_METHODS,Se as ACP_PROTOCOL_VERSION,N as ACP_SESSION_UPDATE_TYPES,z as AGENT_RPC_APPROVAL_METHODS,l as AGENT_RPC_ERROR_CODES,G as AGENT_RPC_PROTOCOL_VERSION,b as AGENT_TEAM_WS_EVENT_NAMES,R as AGENT_WS_EVENT_NAMES,w as ALL_AGENT_WS_EVENT_NAMES,h as CAPABILITY_MANIFEST_DIFF_SECTIONS,ne as GATEWAY_RPC_METHODS,I as GatewayRpcContract,Ve as MEMORY_OBSERVATION_HOOK_VALUES,Fe as MEMORY_OBSERVATION_SOURCE_VALUES,We as MEMORY_WRITE_ACCESS_VALUES,Je as MUTATION_CHECKPOINT_BACKEND_VALUES,$e as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Xe as MUTATION_CHECKPOINT_PHASE_VALUES,Qe as PROVIDER_RUNTIME_AUTH_MODE_VALUES,et as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,k as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,B as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ze as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,qe as RESOURCE_MANIFEST_SCHEMA_VERSION,a as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,Le as WEB_ACTION_SCOPE_VALUES,De as WEB_APPROVAL_DEFAULT_VALUES,ve as WEB_CAPABILITY_FAMILY_VALUES,Me as WEB_CAPABILITY_ID_VALUES,Ue as WEB_DEGRADATION_TARGET_VALUES,je as WEB_ESCALATION_REASON_VALUES,Oe as WEB_EXECUTION_MODE_VALUES,He as WEB_POLICY_RISK_CLASS_VALUES,Ke as WEB_RETRY_POLICY_VALUES,Ne as WEB_STATEFULNESS_VALUES,we as WEB_TASK_MODE_VALUES,te as buildAgentRpcMeta,A as classifyGatewayRpcMethod,f as cloneCapabilityManifestSnapshot,xe as createCapabilityManifestDiffPayload,V as createDefaultRuntimeResourceProfiles,_e as deriveCapabilityToolNamespaces,Ce as deriveCapabilityWorkspaceIds,P as getManifestShortcutEntry,F as getRuntimeResourceAsset,W as getRuntimeResourceProfile,Ye as getRuntimeResourceProfileAssets,H as isAcpJsonRpcNotification,D as isAcpJsonRpcRequest,L as isAcpJsonRpcResponse,x as isAgentRpcNotification,_ as isAgentRpcRequest,C as isAgentRpcResponse,lt as isAnthropicProviderRuntimeFamily,Pe as isExtendedSessionUpdateType,ct as isOpenAiProviderRuntimeFamily,Ee as isStandardSessionUpdateType,ft as listProviderRuntimeEnvApiKeyNames,ke as mergeCapabilityManifestSnapshot,S as normalizeProviderRuntimeId,Y as normalizeProviderRuntimeIdForAuth,ze as normalizeRuntimeResourceManifest,he as parseAcpMessage,X as parseAgentRpcMessage,ot as preservesProviderRuntimeAnthropicThinkingSignatures,tt as readProviderRuntimeCompatFlag,v as requireGatewayRpcMeta,M as requiresIdempotencyKey,st as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,c as resolveProviderRuntimeCapabilities,yt as resolveProviderRuntimeEnvApiKey,nt as resolveProviderRuntimeKeyFamily,mt as resolveProviderRuntimeTranscriptToolCallIdMode,ut as shouldDropThinkingBlocksForProviderRuntimeModel,gt as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,pt as supportsOpenAiCompatTurnValidationForProviderRuntime,Ge as upsertRuntimeResourceAsset,at as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,dt as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
|
|
1
|
+
var G="1.0.0",l={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},z={REQUEST:"tool.approval.request"};function _(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 x(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function X(e){let t;try{t=JSON.parse(e)}catch{return null}return C(t)||_(t)||x(t)?t:null}import{randomUUID as $}from"node:crypto";var J=["settings.list","settings.get","settings.validate","provider.list","tools.list","todos.list","tasks.list","session.list","session.get","session.resolve","session.loadNativeTranscript","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","agent.health","agent.metrics"],Q=new Set(["memory.dream","memory.propose","memory.consolidate"]),Z=["memory.","usage."],ee=new Set(["memory.atlas","memory.activity","memory.list","memory.read","memory.search","memory.attachment.locate","memory.attachment.adopt"]);function A(e){return Q.has(e)?{channel:"task",mutability:"write",defaultTimeoutMs:12e4}:J.some(t=>e===t||e.startsWith(`${t}.`)||e.startsWith(t))?{channel:"query",mutability:"read",defaultTimeoutMs:1e4}:{channel:"task",mutability:"write",defaultTimeoutMs:3e4}}function M(e){return ee.has(e)||A(e).mutability==="read"?!1:Z.some(t=>e.startsWith(t))}function te(e,t={}){let r=t.now??Date.now(),n=A(e),o=t.timeoutMs??n.defaultTimeoutMs;return{requestId:t.requestId??$(),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:l.INVALID_REQUEST,message:"RPC request meta is required."}};if(typeof r.requestId!="string"||r.requestId.length===0)return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.requestId is required."}};if(r.channel!=="query"&&r.channel!=="task")return{ok:!1,error:{code:l.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:l.INVALID_REQUEST,message:"RPC request meta.createdAt is required."}};if(typeof r.deadlineAt!="number"||!Number.isFinite(r.deadlineAt))return{ok:!1,error:{code:l.INVALID_REQUEST,message:"RPC request meta.deadlineAt is required."}};if(r.deadlineAt<=t)return{ok:!1,error:{code:l.REQUEST_DEADLINE_EXCEEDED,message:"RPC request deadline has already expired."}};let n=A(e.method).channel;return r.channel!==n?{ok:!1,error:{code:l.INVALID_REQUEST,message:`RPC request channel mismatch: expected ${n}, got ${r.channel}.`}}:M(e.method)&&(typeof r.idempotencyKey!="string"||r.idempotencyKey.length===0)?{ok:!1,error:{code:l.REQUEST_IDEMPOTENCY_REQUIRED,message:`RPC method ${e.method} requires meta.idempotencyKey.`}}:{ok:!0,meta:r}}var I=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 re=["agent.health","agent.metrics","agent.cancel","provider.catalog","provider.list","provider.get","provider.install","provider.install.cancel","provider.update","provider.uninstall","provider.enable","provider.disable","provider.diagnose","provider.auth.status","provider.auth.setPreference","provider.auth.setUserKey","provider.auth.methods","provider.auth.start","provider.auth.attach","provider.auth.input","provider.auth.resize","provider.auth.cancel","provider.auth.logout","provider.models.list","provider.nativeSessions.list","provider.nativeSessions.load","provider.nativeSessions.resume","delegation.cancel","delegation.reset","session.list","session.get","session.create","session.update","session.delete","session.deleteAll","session.archive","session.loadNativeTranscript","session.adoptNative","session.moveToProject","session.getState","session.switchProject","session.getMessages","project.list","project.create","project.detach","project.delete","project.rename","project.archive","project.unarchive","project.update","instructions.list","instructions.read","instructions.write","instructions.delete","files.list","files.read","files.create","files.rename","files.move","files.copy","files.delete","files.search","files.undoOperation","files.gitStatus","turnBaseline.getSummary","turnBaseline.getFileDiff","turnBaseline.listRecent","turnBaseline.getFileBaseline","workingMaterials.get","workingMaterials.replace","workingMaterials.upsert","workingMaterials.remove","workingMaterials.reorder","skills.list","memory.list-files","memory.atlas","memory.activity","memory.propose","memory.consolidate","memory.update","memory.attachment.adopt","memory.attachment.locate"];var R=["turn.start","turn.delta","turn.end","turn.error","turn.recovery","turn.text_rollback","turn.file_changes","turn.tool_call","turn.tool_result","turn.tool_blocked","turn.reasoning_delta","turn.approval_request","turn.ask_user","turn.media_result","turn.plan_update","turn.suggestions","turn.sidechain_started","turn.subagent_started","turn.subagent_delta","turn.subagent_activity","turn.subagent_ended","turn.subagent_completed","turn.subagent_decision","turn.sidechain_completed","turn.task_updated","turn.todos_updated","turn.exec_progress","turn.progress","turn.tool_use_summary","turn.tool_selection_policy","turn.lifecycle","turn.document_maintenance","turn.artifact_contract","turn.usage_update","team.member.notification","session.info","session.recovery_pending","thread.item","memory.updated","skills.updated","turn.memory_recall","turn.memory_written","system.activity","workflow.created","workflow.updated","workflow.deleted","workflow.runStarted","workflow.runCompleted","workflow.runFailed","workflow.nodeStatus","workflow.triggerDropped","workflow.alert","workflow.approvalRequested","workflow.approvalTimedOut"],b=["solo.progress","solo.specProgress","solo.agentDelta","solo.agentActivity","solo.agentUsage","solo.evaluation","solo.agentDiff","solo.state","product.taskStarted","product.taskOutput","product.members","product.agentActivity","product.taskCompleted","product.taskFailed","product.taskHandoff","product.budgetUpdate","product.budgetWarning","product.budgetExceeded","product.checkpointed","product.completed","product.dagTopology","plan.interrupted","product.planReady","product.planningDelta","product.leaderMessage","product.planFailed","product.planningAsk","mention.delegate_started","mention.delegate_activity","mention.delegate_settled"],ne=[...R,...b],w=ne;import{MODEL_PURPOSES as ar}from"@xiaozhiclaw/module-sdk/model-access";var ie=["fact","preference","insight","lesson","decision","plan","event","pattern","context","procedure","general"],_t=new Set(ie),oe=["equals","includes","excludes"],Ct=new Set(oe);import{createHash as vt}from"node:crypto";import{resolve as Ot}from"node:path";var O=["efficiency","dev","cloud","data","industrial","marketing","ecommerce","procurement","hr","accounting","finance","legal","lifestyle"];var Ht=new Set(O);var m={request:"x/delegate",update:"x/delegate.update",respond:"x/delegate.respond",cancel:"x/delegate.cancel"},se=["search","embedText","ingestExtracted","proposeExtracted","consumePendingProposals","feedback","findRelatedEvents","synthesizeTimeline","getActivitySummary","getAllProfiles","setProfile","getAtlas","setMemoryArchived","triggerDecay","resolveConflicts","readProcedureUsage","writeProcedureUsage","readDistillCandidates","writeDistillCandidates","readPromotionProposals","writePromotionProposals","listActiveMemoriesByTag","readDistilledProcedure","promoteDistilledProcedure","demoteDistilledProcedure","recordInjectedAccess","recordRecallOutcome","enqueueExtractionTurn","claimPendingExtractionTurns","completeExtractionTurn","releaseExtractionTurn","recordExtractionTurnFailure"],ae=["initialize","getIndex","addToIndex","replaceInIndex","removeFromIndex","createFile","writeFile","readFile","deleteFile","listFiles","searchLocal"],de=["getSkillSnapshot","readSkillFile","recordSkillInvocation","commitSkillMutation","applyCuratorPlan","prepareSkillInstall","finalizeSkillInstall"],pe=["loadForResume","appendTranscript","updateTitle","saveState","saveTaskSummary","groupSplit"],ce=["commitTurnTelemetry","listDistillableFeedback","markFeedbackDistilled","runUploadSweep"],le=["getSnapshot","create","switch","update"],Yt=1024*1024,ue=["resolveInstall","listResourceVersions"],ge=["probeSession"],me=["list","get","diagnose"],fe=["navigate","snapshot","click","type","screenshot","console","network"];var ye=["open","openWithCheckpoint","recordEvent","checkpoint","get","list","delete","getCheckpoint","listCheckpoints","restoreCheckpoint"],Ae=["getTunables","updateTunable","clearTunable","appendDirectoryAllowRule"];var Gt=new Set(se),zt=new Set(ae),Xt=new Set(Ae),$t=new Set(de),Jt=new Set(pe),Qt=new Set(ce),Zt=new Set(le),er=new Set(ye),tr=new Set(me),rr=new Set(ue),nr=new Set(ge),ir=new Set(fe);var Se=1,Ie={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"},Re={ABORT:"x/abort",DREAM:"x/dream",SOLO_START:"x/solo.start",SOLO_SELECT:"x/solo.select",SOLO_CANCEL:"x/solo.cancel",SOLO_DELETE:"x/solo.delete",PRODUCT_CREATE:"x/product.create",PRODUCT_PLAN:"x/product.plan",PRODUCT_CONFIRM:"x/product.confirm",PRODUCT_MESSAGE:"x/product.message",PRODUCT_MUTATE_DAG:"x/product.mutateDag",PRODUCT_RESUME:"x/product.resume",PRODUCT_PAUSE:"x/product.pause",PRODUCT_CANCEL:"x/product.cancel",PRODUCT_ROLLBACK:"x/product.rollback",PRODUCT_REPLAY:"x/product.replay",SOLO_SUBSCRIBE:"x/solo.subscribe",SOLO_MESSAGE:"x/solo.message",SOLO_EVALUATE:"x/solo.evaluate",SOLO_SPEC_CHAT:"x/solo.specChat",SOLO_SPEC_JUDGE:"x/solo.specJudge",WORKFLOW_CHAT:"x/workflow.chat",WORKFLOW_MATCH_INTENT:"x/workflow.matchIntent",WORKFLOW_PLAN_COMMAND:"x/workflow.planCommand",PRODUCT_SUBSCRIBE:"x/product.subscribe",GOAL_START:"x/goal.start",GOAL_PAUSE:"x/goal.pause",GOAL_RESUME:"x/goal.resume",GOAL_UPDATE_GOAL:"x/goal.updateGoal",GOAL_STOP:"x/goal.stop",GOAL_MESSAGE:"x/goal.message",GOAL_RECOVER:"x/goal.recover",GOAL_DISMISS:"x/goal.dismiss",DELEGATE:m.request,DELEGATE_UPDATE:m.update,DELEGATE_RESPOND:m.respond,DELEGATE_CANCEL:m.cancel},N={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"},be={X_SESSION_INFO:"x_session_info",X_RELAY:"x_relay"};function D(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){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&typeof t.method=="string"&&!("id"in t)}function L(e){if(!e||typeof e!="object")return!1;let t=e;return t.jsonrpc==="2.0"&&"id"in t&&!("method"in t)}function he(e){let t;try{t=JSON.parse(e)}catch{return null}return L(t)||D(t)||H(t)?t:null}function Ee(e){return Object.values(N).includes(e)}function Pe(e){return e.startsWith("x_")}var h=["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(e){return e?e.map(t=>({...t})):void 0}function Te(e){return e?[...e]:void 0}function U(e){return[...new Set(e.map(t=>t.trim()).filter(Boolean))].sort((t,r)=>t.localeCompare(r))}function f(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(e.workspaceSummaries)}:{}}}function ke(e){let{previous:t,update:r}=e;return!(r.syncMode==="diff"&&t&&(!r.baseSnapshotVersion||t.snapshotVersion===r.baseSnapshotVersion))||!t?f(r):{...f(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:E(r.workspaceSummaries)}:{}}}function _e(e){return U(e.map(t=>t.name.split(".")[0]??"").filter(Boolean))}function Ce(e){return U(e.map(t=>t.id))}function xe(e){let{previous:t,current:r}=e;if(!t)return{...f(r),syncMode:"full"};if(t.snapshotVersion===r.snapshotVersion)return null;let n=h.filter(s=>JSON.stringify(t[s])!==JSON.stringify(r[s]));if(n.length===h.length)return{...f(r),syncMode:"full"};let o={snapshotVersion:r.snapshotVersion,updatedAt:r.updatedAt,syncMode:"diff",baseSnapshotVersion:t.snapshotVersion,changedSections:n,toolNamespaces:[...r.toolNamespaces],workspaceIds:[...r.workspaceIds]},p=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":p[s]=Te(i);break;case"approvalPolicy":p[s]={...i};break;case"workspaceSummaries":p[s]=E(i);break;case"toolManifests":case"skillManifests":case"pluginManifests":case"mcpManifests":p[s]=g(i);break;default:p[s]=i;break}}return o}var Me=["web_search","web_fetch","web_research","browser_execution"],ve=["web-intelligence","browser-execution"],we=["discovery","read-url","multi-source-research","interactive-browser"],Oe=["stateless","render-backend","interactive-session"],Ne=["stateless","stateless-single-step","stateful-session-required"],De=["required","conditional","none"],He=["browser-read","browser-authenticated-read","browser-state-changing"];var Le=["read-page","read-authenticated-page","fill-form","submit-form","download-file","reuse-session"],Ue=["web_search","web_fetch","web_research","blocked"],je=["requires-interaction","requires-login-state","requires-rendered-dom","requires-persistent-session","requires-state-changing-action"],Ke=["none","same-capability-once","degrade-only"];var Ve=["prefetch","sync_turn","on_pre_compress","on_session_end","on_delegation","on_memory_write"],Fe=["turn","sidechain","compress","session-end","agent-remember","auto-extract","implicit-extract","profile-extraction","dream"],We=["observe-only","parent-write","deny"];var qe=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 K(e){return{...e,artifacts:e.artifacts.map(t=>({...t}))}}function Be(e){return{...e,assetIds:[...e.assetIds]}}function V(){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 F(e,t){return e.assets[t]}function W(e,t){return e.profiles[t]}function Ye(e,t){let r=W(e,t);return r?r.assetIds.map(n=>F(e,n)).filter(n=>!!n):[]}function Ge(e,t){return e.assets[t.id]=K(t),q(e)}function P(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 q(e){let t=P(e.assets[a.gatewayImage]),r=P(e.assets[a.whisperModelTiny]);return{...e,gateway:t,whisperModel:r}}function j(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 ze(e){let t=e&&typeof e=="object"?e:{},r={},n=t.assets&&typeof t.assets=="object"?t.assets:{};for(let[i,d]of Object.entries(n)){if(!d||typeof d!="object")continue;let u=d;!u.id||!Array.isArray(u.artifacts)||(r[i]=K(u))}if(!r[a.gatewayImage]&&t.gateway&&typeof t.gateway=="object"){let i=j(t.gateway,{id:a.gatewayImage,title:"XiaoZhiClaw 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=j(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 p={...V()},s=t.profiles&&typeof t.profiles=="object"?t.profiles:{};for(let[i,d]of Object.entries(s)){if(!d||typeof d!="object")continue;let u=d;!u.id||!Array.isArray(u.assetIds)||(p[i]=Be(u))}return q({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:p})}var Xe=["pending","captured","failed","restored"],$e=["file","directory","missing"],Je=["metadata-only","workspace-copy","shadow-git"];var Qe=["api-key","oauth","token","aws-sdk"],Ze=["rate_limit","auth","server_error","timeout","network","unknown"],et=["requiresOpenAiAnthropicToolPayload"];function tt(e,t){return!e||typeof e!="object"||Array.isArray(e)?!1:e[t]===!0}var B="openai-codex";function S(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 Y(e){let t=S(e);return t==="volcengine-plan"?"volcengine":t==="qwen-coding"?"qwen":t==="byteplus-plan"?"byteplus":t}var rt=Y,nt={anthropicToolSchemaMode:"native",anthropicToolChoiceMode:"native",providerFamily:"default",preserveAnthropicThinkingSignatures:!0,openAiCompatTurnValidation:!0,providerThoughtSignatureSanitization:!1,transcriptToolCallIdMode:"default",transcriptToolCallIdModelHints:[],providerThoughtSignatureModelHints:[],dropThinkingBlockModelHints:[]},it={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 T(e,t){let r=(e??"").toLowerCase();return!!r&&t.some(n=>r.includes(n))}function c(e){let t=S(e??"");return{...nt,...it[t]}}function ot(e){return c(e).preserveAnthropicThinkingSignatures}function st(e){let t=c(e);return t.anthropicToolSchemaMode!=="native"||t.anthropicToolChoiceMode!=="native"}function at(e){return c(e).anthropicToolSchemaMode==="openai-functions"}function dt(e){return c(e).anthropicToolChoiceMode==="openai-string-modes"}function pt(e){return c(e).openAiCompatTurnValidation}function ct(e){return c(e).providerFamily==="openai"}function lt(e){return c(e).providerFamily==="anthropic"}function ut(e){return T(e.modelId,c(e.provider).dropThinkingBlockModelHints)}function gt(e){let t=c(e.provider);return t.providerThoughtSignatureSanitization&&T(e.modelId,t.providerThoughtSignatureModelHints)}function mt(e,t){let r=c(e),n=r.transcriptToolCallIdMode;if(n==="strict9")return n;if(T(t,r.transcriptToolCallIdModelHints))return"strict9"}var k={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 ft(){return[...new Set(Object.values(k).flat())]}function yt(e){let t=S(e.provider),r=e.env??process.env,n=new Set(e.appliedEnvKeys??[]),o=i=>{let d=r[i]?.trim();if(!d)return null;let u=n.has(i)?`shell env: ${i}`:`env: ${i}`;return{apiKey:d,source:u}},p=e.resolveSpecialApiKey?.(t,r,n);if(p)return p;let s=k[t];if(!s||s.length===0)return null;for(let i of s){let d=o(i);if(d)return d}return null}export{Re as ACP_EXTENDED_METHODS,be as ACP_EXTENDED_SESSION_UPDATE_TYPES,Ie as ACP_METHODS,Se as ACP_PROTOCOL_VERSION,N as ACP_SESSION_UPDATE_TYPES,z as AGENT_RPC_APPROVAL_METHODS,l as AGENT_RPC_ERROR_CODES,G as AGENT_RPC_PROTOCOL_VERSION,b as AGENT_TEAM_WS_EVENT_NAMES,R as AGENT_WS_EVENT_NAMES,w as ALL_AGENT_WS_EVENT_NAMES,h as CAPABILITY_MANIFEST_DIFF_SECTIONS,re as GATEWAY_RPC_METHODS,I as GatewayRpcContract,Ve as MEMORY_OBSERVATION_HOOK_VALUES,Fe as MEMORY_OBSERVATION_SOURCE_VALUES,We as MEMORY_WRITE_ACCESS_VALUES,Je as MUTATION_CHECKPOINT_BACKEND_VALUES,$e as MUTATION_CHECKPOINT_ENTRY_KIND_VALUES,Xe as MUTATION_CHECKPOINT_PHASE_VALUES,Qe as PROVIDER_RUNTIME_AUTH_MODE_VALUES,et as PROVIDER_RUNTIME_COMPAT_FLAG_VALUES,k as PROVIDER_RUNTIME_ENV_API_KEY_CANDIDATES,B as PROVIDER_RUNTIME_OPENAI_CODEX_PROVIDER_ID,Ze as PROVIDER_RUNTIME_VAULT_ERROR_TYPE_VALUES,qe as RESOURCE_MANIFEST_SCHEMA_VERSION,a as RUNTIME_ASSET_IDS,y as RUNTIME_PROFILE_IDS,Le as WEB_ACTION_SCOPE_VALUES,De as WEB_APPROVAL_DEFAULT_VALUES,ve as WEB_CAPABILITY_FAMILY_VALUES,Me as WEB_CAPABILITY_ID_VALUES,Ue as WEB_DEGRADATION_TARGET_VALUES,je as WEB_ESCALATION_REASON_VALUES,Oe as WEB_EXECUTION_MODE_VALUES,He as WEB_POLICY_RISK_CLASS_VALUES,Ke as WEB_RETRY_POLICY_VALUES,Ne as WEB_STATEFULNESS_VALUES,we as WEB_TASK_MODE_VALUES,te as buildAgentRpcMeta,A as classifyGatewayRpcMethod,f as cloneCapabilityManifestSnapshot,xe as createCapabilityManifestDiffPayload,V as createDefaultRuntimeResourceProfiles,_e as deriveCapabilityToolNamespaces,Ce as deriveCapabilityWorkspaceIds,P as getManifestShortcutEntry,F as getRuntimeResourceAsset,W as getRuntimeResourceProfile,Ye as getRuntimeResourceProfileAssets,H as isAcpJsonRpcNotification,D as isAcpJsonRpcRequest,L as isAcpJsonRpcResponse,x as isAgentRpcNotification,_ as isAgentRpcRequest,C as isAgentRpcResponse,lt as isAnthropicProviderRuntimeFamily,Pe as isExtendedSessionUpdateType,ct as isOpenAiProviderRuntimeFamily,Ee as isStandardSessionUpdateType,ft as listProviderRuntimeEnvApiKeyNames,ke as mergeCapabilityManifestSnapshot,S as normalizeProviderRuntimeId,Y as normalizeProviderRuntimeIdForAuth,ze as normalizeRuntimeResourceManifest,he as parseAcpMessage,X as parseAgentRpcMessage,ot as preservesProviderRuntimeAnthropicThinkingSignatures,tt as readProviderRuntimeCompatFlag,v as requireGatewayRpcMeta,M as requiresIdempotencyKey,st as requiresOpenAiCompatibleAnthropicToolPayloadForProviderRuntime,c as resolveProviderRuntimeCapabilities,yt as resolveProviderRuntimeEnvApiKey,rt as resolveProviderRuntimeKeyFamily,mt as resolveProviderRuntimeTranscriptToolCallIdMode,ut as shouldDropThinkingBlocksForProviderRuntimeModel,gt as shouldSanitizeProviderRuntimeThoughtSignaturesForModel,pt as supportsOpenAiCompatTurnValidationForProviderRuntime,Ge as upsertRuntimeResourceAsset,at as usesOpenAiFunctionAnthropicToolSchemaForProviderRuntime,dt as usesOpenAiStringModeAnthropicToolChoiceForProviderRuntime};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: desktop-screenshot
|
|
3
|
-
description:
|
|
3
|
+
description: 用户要求截屏、截图或查看当前屏幕时使用。选择后先加载完整工作流;其中包含跨平台截图、临时文件桥接、结果交付与隐私保护约束。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Desktop Screenshot
|
|
@@ -59,3 +59,5 @@ f="${TMPDIR:-/tmp}/qla-shot-$(date +%Y%m%d-%H%M%S).png"; import -window root "$f
|
|
|
59
59
|
## 之后
|
|
60
60
|
|
|
61
61
|
把命令打印出来的那条图片路径**用反引号包成行内代码**回给用户(如 `C:\Users\…\image.png`)——前端会把工作区内的图片路径**内联渲染成图片**,反引号能避免路径里的反斜杠被 markdown 转义破坏。再一句话说明截的是什么。命令失败时报告确切错误,不要改用安装大型依赖的方案。
|
|
62
|
+
|
|
63
|
+
如果用户还要求描述截图内容,只能依据截图本身或成功的图像理解结果作答。图像理解失败时,明确说明无法可靠分析并把截图交给用户;**不得枚举进程名、窗口标题、最近文件或无关目录来推断截图内容**。
|
|
@@ -2,11 +2,10 @@ import type { ChatMessage, ToolCallExecutionEvidence } from "../types.js";
|
|
|
2
2
|
export { isEmptyToolResult } from "./tool-result-classification.js";
|
|
3
3
|
export declare const OUTPUT_REQUEST_CONTEXT_PATTERN: RegExp;
|
|
4
4
|
export declare function findLastToolError(messages: unknown[], toolName: string, toolArguments?: string): string | undefined;
|
|
5
|
-
export declare function looksLikeBuildRequest(messages?: readonly ChatMessage[]): boolean;
|
|
6
5
|
export declare function isCapabilityDenial(text: string): boolean;
|
|
7
6
|
export declare function resolveToolLoopBudget(requested?: number, messages?: readonly ChatMessage[]): number;
|
|
8
7
|
export declare function countExplicitOutputArtifacts(messages?: readonly ChatMessage[]): number;
|
|
9
|
-
export declare function
|
|
8
|
+
export declare function resolvePerRoundToolCallBudget(requested?: number): number;
|
|
10
9
|
export declare function filterWhitespaceOnlyAssistant<T extends {
|
|
11
10
|
role: string;
|
|
12
11
|
content?: unknown;
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*
|
|
19
19
|
* Zero imports from express/pg/ioredis/ws.
|
|
20
20
|
*/
|
|
21
|
-
import type { AgentLogger, ChatMessage, ToolDefinition, ToolInvoker, TurnEvent, HookRegistry, LLMTransport, MaintainedDocumentIndex
|
|
21
|
+
import type { AgentLogger, ChatMessage, ToolDefinition, ToolInvoker, TurnEvent, HookRegistry, LLMTransport, MaintainedDocumentIndex } from "./types.js";
|
|
22
22
|
import type { ToolLoopRuntimePorts } from "../runtime/ports/index.js";
|
|
23
23
|
export interface ToolLoopParams {
|
|
24
24
|
turnId: string;
|
|
@@ -47,8 +47,6 @@ export interface ToolLoopParams {
|
|
|
47
47
|
* observed violation).
|
|
48
48
|
*/
|
|
49
49
|
freshEvidenceRequired?: boolean;
|
|
50
|
-
/** Versioned pre-model capability route for auditable product attribution. */
|
|
51
|
-
capabilityRoutingEvidence?: CapabilityRoutingEvidence;
|
|
52
50
|
/**
|
|
53
51
|
* Build/test verification gate (lever ②). Default true. Set false to disable the
|
|
54
52
|
* "fix-and-rerun until the test/build passes" recovery — used for A/B measurement.
|
|
@@ -127,7 +125,7 @@ export interface ToolLoopParams {
|
|
|
127
125
|
type: "web_search_preview" | "file_search" | "code_interpreter" | "computer_use_preview";
|
|
128
126
|
[key: string]: unknown;
|
|
129
127
|
}>;
|
|
130
|
-
/** Max builtin tool calls
|
|
128
|
+
/** Max genuinely executed builtin tool calls proposed by one model round. */
|
|
131
129
|
maxToolCalls?: number;
|
|
132
130
|
/** Disable parallel tool calling. */
|
|
133
131
|
parallelToolCalls?: boolean;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { HookRegistry } from "../contracts/hooks.js";
|
|
9
9
|
import type { AccumulatedToolCall, LLMChunk, LLMRequest, LLMTransport } from "../runtime/ports/index.js";
|
|
10
|
-
import type { ChatMessage as WireChatMessage, ChatMessageRole as WireChatMessageRole, ThinkingBlock as WireThinkingBlock, ToolCallMessage as WireToolCallMessage, ToolDefinition as WireToolDefinition, WireTokenUsage,
|
|
10
|
+
import type { ChatMessage as WireChatMessage, ChatMessageRole as WireChatMessageRole, ThinkingBlock as WireThinkingBlock, ToolCallMessage as WireToolCallMessage, ToolDefinition as WireToolDefinition, WireTokenUsage, FinalAnswerEvidence as WireFinalAnswerEvidence, ToolCallExecutionEvidence as WireToolCallExecutionEvidence } from "../protocol/wire/index.js";
|
|
11
11
|
export type ChatMessageRole = WireChatMessageRole;
|
|
12
12
|
export type ThinkingBlock = WireThinkingBlock;
|
|
13
13
|
export type ToolCallMessage = WireToolCallMessage;
|
|
@@ -154,8 +154,6 @@ export interface TurnConfig {
|
|
|
154
154
|
toolChoice?: "auto" | "none" | "required";
|
|
155
155
|
/** Turn demands fresh tool evidence — arms the loop's reactive one-shot forced retry. */
|
|
156
156
|
freshEvidenceRequired?: boolean;
|
|
157
|
-
/** Versioned pre-model capability route used by product trace and baseline attribution. */
|
|
158
|
-
capabilityRoutingEvidence?: CapabilityRoutingEvidence;
|
|
159
157
|
/** Parent fork depth (0 = top-level, default 0). CC: depth tracking for fork recursion limit. */
|
|
160
158
|
parentDepth?: number;
|
|
161
159
|
/** Per-turn token budget (prompt + completion). 0 or undefined = unlimited. */
|
|
@@ -184,7 +182,7 @@ export interface TurnConfig {
|
|
|
184
182
|
type: "web_search_preview" | "file_search" | "code_interpreter" | "computer_use_preview";
|
|
185
183
|
[key: string]: unknown;
|
|
186
184
|
}>;
|
|
187
|
-
/** Max
|
|
185
|
+
/** Max genuinely executable tool calls accepted from one model response; resets each round. */
|
|
188
186
|
maxToolCalls?: number;
|
|
189
187
|
/** Disable parallel tool calling (force sequential). */
|
|
190
188
|
parallelToolCalls?: boolean;
|
|
@@ -193,7 +191,6 @@ export interface TurnConfig {
|
|
|
193
191
|
/** MCP server configurations (stdio/sse/http). Passed from host to agent per-turn. */
|
|
194
192
|
mcpServers?: Record<string, unknown>;
|
|
195
193
|
}
|
|
196
|
-
export type CapabilityRoutingEvidence = WireCapabilityRoutingEvidence;
|
|
197
194
|
export type FinalAnswerEvidence = WireFinalAnswerEvidence;
|
|
198
195
|
export type ToolCallExecutionEvidence = WireToolCallExecutionEvidence;
|
|
199
196
|
/**
|
|
@@ -135,8 +135,9 @@ export declare function refreshPermissionCheckerToolMeta(permissionChecker: Perm
|
|
|
135
135
|
export declare function handleUserResponse(this: TurnControlHandlerHost, msg: AgentRpcRequest): void;
|
|
136
136
|
interface ModalityRegistryView {
|
|
137
137
|
acceptsInputModality(modality: string, purpose: ModelPurpose): boolean;
|
|
138
|
-
|
|
138
|
+
isToolProjected(purpose: ModelPurpose): boolean;
|
|
139
139
|
}
|
|
140
|
+
export declare function hostMediaModalityView(toolCatalog: ToolCatalog | undefined): ModalityRegistryView;
|
|
140
141
|
export interface UnsupportedMediaRefs {
|
|
141
142
|
image: string[];
|
|
142
143
|
video: string[];
|
|
@@ -144,10 +145,10 @@ export interface UnsupportedMediaRefs {
|
|
|
144
145
|
}
|
|
145
146
|
/** Plan for the media a text-only main model can't consume, produced by detectUnsupportedMediaForTools. */
|
|
146
147
|
export interface MediaUnderstandingPlan {
|
|
147
|
-
/** Refs the model should call the understanding tool on —
|
|
148
|
+
/** Refs the model should call the understanding tool on — the Host tool is projected AND the ref is
|
|
148
149
|
* tool-addressable (a short URL/path it can echo). Capped when surfaced (see the notice builder). */
|
|
149
150
|
toolRefs: UnsupportedMediaRefs;
|
|
150
|
-
/** Kinds present but NOT
|
|
151
|
+
/** Kinds present but NOT addressable this turn: no matching Host tool is projected, or every
|
|
151
152
|
* ref is a non-addressable (data:/oversized) URL. Surfaced as an HONEST "cannot read this" note so
|
|
152
153
|
* the model never points at an absent tool while being forbidden to admit blindness. */
|
|
153
154
|
blockedKinds: UnderstandMediaKind[];
|
|
@@ -157,13 +158,13 @@ export interface MediaUnderstandingPlan {
|
|
|
157
158
|
* model 400s on multimodal content), and PLAN what to tell the model: which refs to call the understanding
|
|
158
159
|
* tool on, and which kinds it must honestly report as unreadable (no Host Media MCP tool projected, or every
|
|
159
160
|
* ref is a non-addressable data:/oversized URL). It does NOT transcribe and does NOT touch the message
|
|
160
|
-
* text — the plan is surfaced via a model-only notice so the model
|
|
161
|
-
* video_understand / stt
|
|
162
|
-
* stays clean. Understanding executes through the Host-projected Media MCP tool.
|
|
161
|
+
* text — the plan is surfaced via a model-only capability notice so the model can autonomously choose
|
|
162
|
+
* image_understand / video_understand / stt, exactly as it would for an in-message media path; the
|
|
163
|
+
* user's bubble stays clean. Understanding executes through the Host-projected Media MCP tool.
|
|
163
164
|
*
|
|
164
165
|
* Reliability note: unlike the eager path, this DEPENDS on the model calling the tool — the medium is not
|
|
165
166
|
* transcribed anywhere, so if the model ignores the notice the understanding does not happen this turn
|
|
166
|
-
*
|
|
167
|
+
* Cross-turn is fine WITHIN a live session: the model's prior
|
|
167
168
|
* image_understand call (carrying the image_url ref) stays in the running conversation, so a later turn
|
|
168
169
|
* can re-read the same image — verified by a 2-turn test. The only gap is a COLD resume: the on-disk
|
|
169
170
|
* transcript stores just the user text (media stripped) + the assistant's text, not the tool calls/results
|
|
@@ -176,10 +177,10 @@ export interface MediaUnderstandingPlan {
|
|
|
176
177
|
*/
|
|
177
178
|
export declare function detectUnsupportedMediaForTools(lastUserMsg: ChatMessage, purpose: ModelPurpose, registry: ModalityRegistryView): MediaUnderstandingPlan;
|
|
178
179
|
/**
|
|
179
|
-
* Build the MODEL-ONLY notice for a MediaUnderstandingPlan.
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
180
|
+
* Build the MODEL-ONLY notice for a MediaUnderstandingPlan. Addressable media exposes the matching Host
|
|
181
|
+
* tool and refs without forcing selection. Blocked media gets an honest "cannot hand this off, do not
|
|
182
|
+
* guess" note (tool absent / unaddressable ref). For a user ATTACHMENT the notice rides the LLM copy
|
|
183
|
+
* of the user message
|
|
183
184
|
* (effectiveMessages), NEVER the persisted/displayed message, so the bubble stays clean; for a TOOL RESULT
|
|
184
185
|
* it is appended to the tool-result content. Returns "" when there is no unconsumable media.
|
|
185
186
|
*/
|
|
@@ -22,12 +22,12 @@ export type TurnEvent = {
|
|
|
22
22
|
type: "start";
|
|
23
23
|
turnId: string;
|
|
24
24
|
/**
|
|
25
|
-
* Effective
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* cap would otherwise be an invisible engine-imposed limit.
|
|
25
|
+
* Effective caller max-rounds and per-model-round tool-call limit after provider
|
|
26
|
+
* normalization. A zero/absent round limit is unbounded; the tool-call limit resets
|
|
27
|
+
* for every model response and is not a cumulative turn execution budget.
|
|
29
28
|
*/
|
|
30
29
|
effectiveMaxRounds?: number;
|
|
30
|
+
/** Maximum executable calls accepted from one model response. */
|
|
31
31
|
effectiveMaxToolCalls?: number;
|
|
32
32
|
} | {
|
|
33
33
|
type: "delta";
|
|
@@ -108,14 +108,13 @@ export type TurnEvent = {
|
|
|
108
108
|
type: "tool_selection_policy";
|
|
109
109
|
turnId: string;
|
|
110
110
|
policyId: string;
|
|
111
|
-
intent: "
|
|
111
|
+
intent: "benchmark_state_maintenance" | "fresh_evidence" | "verification" | "final_answer" | "tool_recovery" | "lifecycle_reconciliation";
|
|
112
112
|
reason: string;
|
|
113
113
|
availableToolNames: string[];
|
|
114
114
|
enabledToolNamesBefore: string[];
|
|
115
115
|
enabledToolNamesAfter: string[];
|
|
116
116
|
suppressedToolNames: string[];
|
|
117
117
|
nextAction: string;
|
|
118
|
-
routingEvidence?: import("../protocol/wire/notification-payloads.js").CapabilityRoutingEvidence;
|
|
119
118
|
} | {
|
|
120
119
|
type: "plan_update";
|
|
121
120
|
turnId: string;
|
|
@@ -129,10 +128,9 @@ export type TurnEvent = {
|
|
|
129
128
|
type: "tool_use_summary";
|
|
130
129
|
turnId: string;
|
|
131
130
|
telemetrySource?: "agent";
|
|
132
|
-
/** Versioned terminal ledger
|
|
131
|
+
/** Versioned terminal ledger for per-call execution and final-answer evidence. */
|
|
133
132
|
ledgerSchemaVersion: 4;
|
|
134
133
|
toolCalls: import("../protocol/wire/notification-payloads.js").ToolCallExecutionEvidence[];
|
|
135
|
-
routingEvidence?: import("../protocol/wire/notification-payloads.js").CapabilityRoutingEvidence;
|
|
136
134
|
finalAnswerEvidence: import("../protocol/wire/notification-payloads.js").FinalAnswerEvidence;
|
|
137
135
|
availableToolNames: string[];
|
|
138
136
|
enabledToolNames: string[];
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Gateway Host
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* 2026-07-10 Route B 补遗 X1-X7 入约:§13 通知 sink + host-state wire、ProfileConfigService keyId
|
|
6
|
-
* 正名 + revealKey、MemoryProfileService 库面收口——单一事实源 agent-supervision-authority-migration-spec.md)。
|
|
7
|
-
* 消费方:xiaozhiclaw-runtime gateway(实现方)+ qlogicagent agent 侧(GatewayDelegateRelay client)。
|
|
8
|
-
* 冻结纪律:接口不随实现漂移;任何字段/签名改动必须回评审(review-gate-checklist),
|
|
9
|
-
* S2 施工 lane 不得自行修改本文件。
|
|
10
|
-
*
|
|
11
|
-
* 标注 [S1 补定] 的辅助类型是 freeze 引用但未给定义的最小结构,属 S1 评审点,
|
|
12
|
-
* 其字段以 freeze 正文/recon 注释为据;实现 lane 负责与现状 store 形状做映射。
|
|
2
|
+
* Public Gateway Host contract consumed by xiaozhiclaw-runtime and qlogicagent.
|
|
3
|
+
* This file is the executable contract authority; current composition roots and tests are the
|
|
4
|
+
* implementation evidence. Historical migration drafts are not compatibility contracts.
|
|
13
5
|
*/
|
|
14
6
|
import { type ModelPurpose } from "@xiaozhiclaw/module-sdk/model-access";
|
|
15
7
|
import type { CapabilityRequirementV1 } from "@xiaozhiclaw/module-sdk";
|
|
@@ -23,14 +15,14 @@ export * from "./memory-category.js";
|
|
|
23
15
|
export type { AcpContentBlock, AcpResourceContents } from "./acp-content.js";
|
|
24
16
|
/** agent 逻辑身份(小智自身也是一个 agentId="qlogicagent")。自身 vs 第三方仅由此值决定(F2)。 */
|
|
25
17
|
export type AgentId = string;
|
|
26
|
-
/** 确定性派生的项目主键(
|
|
18
|
+
/** 确定性派生的项目主键(current contract,抄 VSCode getWorkspaceId)。绝不随机、绝不裸路径。 */
|
|
27
19
|
export type ProjectId = string;
|
|
28
20
|
/** 会话稳定身份(创建即恒定,session-identity-alignment-spec)。 */
|
|
29
21
|
export type CanonicalSessionId = string;
|
|
30
22
|
/** 能力实例种类。 */
|
|
31
23
|
export type MemberKind = "chat" | "product-leader" | "product-worker" | "goal-leader" | "solo-racer" | "workflow-node";
|
|
32
24
|
/**
|
|
33
|
-
* 能力实例的结构化 handle(
|
|
25
|
+
* 能力实例的结构化 handle(current contract,抄 VSCode ExtensionRunningLocation)。可判等、可字符串化。
|
|
34
26
|
* 取代今天各特性自造的 memberId 串(chat-* / product-*:*:* / goal-*:leader / solo-* / workflow-agent-*)。
|
|
35
27
|
*/
|
|
36
28
|
export interface MemberHandle {
|
|
@@ -54,10 +46,10 @@ export interface SessionContext {
|
|
|
54
46
|
projectId: ProjectId;
|
|
55
47
|
/** 项目/worktree 工作目录 */
|
|
56
48
|
cwd: string;
|
|
57
|
-
/** 仅 native-cwd agent(codex/claude)有意义(
|
|
49
|
+
/** 仅 native-cwd agent(codex/claude)有意义(current contract:传输层重连令牌,不承担状态恢复) */
|
|
58
50
|
resumeNativeId?: string;
|
|
59
51
|
}
|
|
60
|
-
/** sendTurn 的统一返回(
|
|
52
|
+
/** sendTurn 的统一返回(current contract:消灭"外部对象 / 内部字符串"双形态)。 */
|
|
61
53
|
export interface TurnResult {
|
|
62
54
|
content: string;
|
|
63
55
|
stopReason?: string;
|
|
@@ -68,10 +60,10 @@ export interface TurnResult {
|
|
|
68
60
|
/** 仅诊断,永不进入下游解析输入 */
|
|
69
61
|
diagnostics?: unknown;
|
|
70
62
|
}
|
|
71
|
-
/** agent 实例存活/失败状态(
|
|
63
|
+
/** agent 实例存活/失败状态(current contract 判活 + §5.3 fail-loud)。 */
|
|
72
64
|
export type AgentInstanceState = "starting" | "ready" | "busy" | "unresponsive" | "exited";
|
|
73
65
|
/**
|
|
74
|
-
* 结构化失败归类(
|
|
66
|
+
* 结构化失败归类(current contract E3:失败一律结构化明示,不得降级成裸 error 串)。
|
|
75
67
|
* UNKNOWN = 无法归类时的显式兜底:禁止硬塞错误 code,也禁止因归不了类降级成裸串。
|
|
76
68
|
*/
|
|
77
69
|
export declare const LIFECYCLE_CODES: readonly ["CANCELLED", "PROCESS_EXIT", "HEARTBEAT_TIMEOUT", "TURN_TIMEOUT", "PROTOCOL_MISMATCH", "UNKNOWN"];
|
|
@@ -95,7 +87,7 @@ export interface AgentSpec {
|
|
|
95
87
|
systemPrompt?: string;
|
|
96
88
|
/** Gateway materialized, session-scoped non-secret model/permission profile. */
|
|
97
89
|
profile?: ResolvedSpawnProfile;
|
|
98
|
-
/** 三态鉴权由 CredentialResolver 按 agentId 解析后显式传入(
|
|
90
|
+
/** 三态鉴权由 CredentialResolver 按 agentId 解析后显式传入(current contract);不糊在 envOverrides,明文不进事件/日志 */
|
|
99
91
|
credentials?: ResolvedCredentials;
|
|
100
92
|
/** 仅非密的运行覆盖(如 solo 自身分支 QLOGICAGENT_WORKTREE_WORKDIR/SOLO_LEAN) */
|
|
101
93
|
envOverrides?: Record<string, string>;
|
|
@@ -124,7 +116,7 @@ export interface TurnInput {
|
|
|
124
116
|
}
|
|
125
117
|
/**
|
|
126
118
|
* 中立监督每个 agent 进程(小智自身 + 第三方对等),不嵌套。
|
|
127
|
-
* 判活=ACK 响应性(
|
|
119
|
+
* 判活=ACK 响应性(current contract,内部实现,不暴露方法名清单)。失败=结构化事件(§5.3),不静默杀。
|
|
128
120
|
*
|
|
129
121
|
* 不变式(冻结):
|
|
130
122
|
* - F1 单注册:一个 memberKey(handle) 至多一个实例(池化种类按 key 复用)。
|
|
@@ -135,7 +127,7 @@ export interface TurnInput {
|
|
|
135
127
|
* - F6 判活地板 = "任意协议消息计活"(§6.3);我方 agent 可另加 ping 作补充、不作地板。
|
|
136
128
|
*/
|
|
137
129
|
export interface AgentSupervisor {
|
|
138
|
-
/** 确保 handle 对应实例在跑(不在则 spawn,池化种类复用)
|
|
130
|
+
/** 确保 handle 对应实例在跑(不在则 spawn,池化种类复用)。Host capabilities 由 session-bound projection 注入。 */
|
|
139
131
|
ensure(handle: MemberHandle, spec: AgentSpec): Promise<void>;
|
|
140
132
|
/**
|
|
141
133
|
* 向实例发一个回合,流式事件经 subscribe 回流,最终 resolve 统一 TurnResult。取代 processManager.sendTask。
|
|
@@ -224,7 +216,7 @@ export type ProjectAgentSessionEntry = {
|
|
|
224
216
|
};
|
|
225
217
|
/**
|
|
226
218
|
* 拥有会话存储 + 项目作用域 + agentId 绑定 + canonical↔native 映射 + 生命周期状态。
|
|
227
|
-
* 唯一权威(不与 qlogicagent 并存)。崩溃恢复靠网关持有并重放(
|
|
219
|
+
* 唯一权威(不与 qlogicagent 并存)。崩溃恢复靠网关持有并重放(current contract)。
|
|
228
220
|
*
|
|
229
221
|
* 不变式(冻结):
|
|
230
222
|
* - S1 绑定权威唯一在网关;canonical id 创建即恒定。
|
|
@@ -269,75 +261,13 @@ export interface SessionProjectService {
|
|
|
269
261
|
recordLifecycle(sessionId: CanonicalSessionId, ev: LifecycleEvent): void;
|
|
270
262
|
replayStateTo(handle: MemberHandle, sessionId: CanonicalSessionId): Promise<void>;
|
|
271
263
|
}
|
|
272
|
-
export interface CapabilityEndpoint {
|
|
273
|
-
/** 唯一规范名(astraclaw;不再双别名,C1) */
|
|
274
|
-
serverName: string;
|
|
275
|
-
transport: "stdio" | "ipc";
|
|
276
|
-
/** 网关稳定 endpoint */
|
|
277
|
-
address: string;
|
|
278
|
-
/** 演进用 */
|
|
279
|
-
version?: string;
|
|
280
|
-
/** token 放 ref、不放明文;由 gateway/CredentialResolver 解析。qlogicagent 只消费、不维护 registry。 */
|
|
281
|
-
auth?: {
|
|
282
|
-
kind: "none";
|
|
283
|
-
} | {
|
|
284
|
-
kind: "bearerRef";
|
|
285
|
-
ref: string;
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
/** [S1 补定] 已装技能引用(host 注册表成员)。 */
|
|
289
|
-
export interface SkillRef {
|
|
290
|
-
name: string;
|
|
291
|
-
description?: string;
|
|
292
|
-
version?: string;
|
|
293
|
-
enabled: boolean;
|
|
294
|
-
/** provenance(catalog 安装 / 本地创建 / 晋升产物等) */
|
|
295
|
-
source?: string;
|
|
296
|
-
}
|
|
297
|
-
/** [S1 补定] MCP 连接器引用。 */
|
|
298
|
-
export interface ConnectorRef {
|
|
299
|
-
serverName: string;
|
|
300
|
-
tools: string[];
|
|
301
|
-
transport?: string;
|
|
302
|
-
}
|
|
303
|
-
/** [S1 补定] host 管理的安装请求(装一次,全员共享;VSCode 扩展模型)。 */
|
|
304
|
-
export interface InstallRequest {
|
|
305
|
-
kind: "skill" | "mcp";
|
|
306
|
-
id: string;
|
|
307
|
-
version?: string;
|
|
308
|
-
source?: string;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* 拥有已装技能 + MCP 连接器的注册表 + 内容;对网关监督的每个 agent(含小智)统一注入一个能力 endpoint。
|
|
312
|
-
*
|
|
313
|
-
* 不变式(冻结):
|
|
314
|
-
* - C1 单注册:能力 server 唯一规范名,绝不注册第二别名。
|
|
315
|
-
* - C2 注入点唯一:能力注入只在 Supervisor spawn 处经本服务一处发生。
|
|
316
|
-
* - C3 内容 host 持有、使用 agent 侧:技能内容/连接器 config 归网关注册表;执行仍在 agent、经此 endpoint。
|
|
317
|
-
*/
|
|
318
|
-
export interface CapabilityService {
|
|
319
|
-
/** 供 Supervisor 在 spawn 每个 agent 时统一注入的能力接入点(对小智自己也走同一 endpoint)。 */
|
|
320
|
-
getEndpoint(forAgent: AgentId, session: SessionContext): CapabilityEndpoint;
|
|
321
|
-
/** MCP 连接器:发现 + 调用(mcp_connectors_list / mcp_tool_call 的后端)。 */
|
|
322
|
-
listConnectors(session: SessionContext): ConnectorRef[];
|
|
323
|
-
callConnector(toolName: string, args: unknown): Promise<{
|
|
324
|
-
content: unknown;
|
|
325
|
-
structuredContent?: unknown;
|
|
326
|
-
_meta?: unknown;
|
|
327
|
-
isError?: boolean;
|
|
328
|
-
imageUrls?: string[];
|
|
329
|
-
}>;
|
|
330
|
-
/** host 管理的安装(装一次,全员共享)。 */
|
|
331
|
-
install(ref: InstallRequest): Promise<void>;
|
|
332
|
-
uninstall(id: string): Promise<void>;
|
|
333
|
-
}
|
|
334
264
|
/** CredentialResolver —— 三态鉴权解析(G1)。token 传 ref,明文不进事件/日志。 */
|
|
335
265
|
export interface CredentialResolver {
|
|
336
266
|
resolve(agentId: AgentId, ownerId: string): ResolvedCredentials;
|
|
337
267
|
/** bearerRef → 实际 token,仅在注入 spawn env 的边界解引用 */
|
|
338
268
|
deref(ref: string): string;
|
|
339
269
|
}
|
|
340
|
-
/**
|
|
270
|
+
/** 单把 key 的 wire 视图(keyId 寻址;key 材料只给掩码,明文走 revealKey)。 */
|
|
341
271
|
export interface ProviderKeyInfo {
|
|
342
272
|
keyId: string;
|
|
343
273
|
/** 掩码展示(maskApiKey 语义);明文绝不进列表面 */
|
|
@@ -351,7 +281,7 @@ export interface ProviderInfo {
|
|
|
351
281
|
name?: string;
|
|
352
282
|
hasKey: boolean;
|
|
353
283
|
enabled: boolean;
|
|
354
|
-
/**
|
|
284
|
+
/** keyId 级子清单;一个 provider 可以配置多把 key。 */
|
|
355
285
|
keys?: ProviderKeyInfo[];
|
|
356
286
|
}
|
|
357
287
|
/** settings.addKey 的原子提交选项;只承载非密元数据/替换策略。 */
|
|
@@ -422,7 +352,7 @@ export interface ProfileConfigService {
|
|
|
422
352
|
};
|
|
423
353
|
listProviders(ownerId: string): ProviderInfo[];
|
|
424
354
|
/**
|
|
425
|
-
*
|
|
355
|
+
* keyId 粒度;一个 provider 可以配置多把 key。
|
|
426
356
|
* 返回新铸 keyId。prepare 阶段完成目录解析/候选探针,commit 阶段重读最新 settings 后只做一次
|
|
427
357
|
* 原子替换;失败不改变旧文件/旧 key enabled 状态。[X4 过渡] 本刀仍按 legacy 形态把材料直存
|
|
428
358
|
* settings.json,ref 化另批完成。明文绝不进入日志、事件或通知。
|
|
@@ -435,7 +365,7 @@ export interface ProfileConfigService {
|
|
|
435
365
|
/** [X5] 按 keyId 启停单把 key。false=未找到(不写盘)。 */
|
|
436
366
|
toggleKey(ownerId: string, keyId: string, on: boolean): boolean;
|
|
437
367
|
/**
|
|
438
|
-
*
|
|
368
|
+
* UI 显式索取明文;剪贴板副作用由前端负责。
|
|
439
369
|
* 红线:返回值绝不经 HostNotificationSink 广播、绝不落日志/事件;ref 期在此边界 deref(VSCode
|
|
440
370
|
* ISecretStorageService 同构:main 持密文,显式 API 解密返回调用方)。未找到 throw(fail-loud)。
|
|
441
371
|
*/
|
|
@@ -1125,6 +1055,10 @@ export interface HostSkillLifecycleRecord {
|
|
|
1125
1055
|
registryRiskTier?: "R0" | "R1" | "R2" | "R3";
|
|
1126
1056
|
registryEffectiveRiskTier?: "R0" | "R1" | "R2" | "R3";
|
|
1127
1057
|
registryKeptSignalAt?: string;
|
|
1058
|
+
/** Short, verified model-routing metadata. It describes when the Skill is useful, not how to run it. */
|
|
1059
|
+
routingSummary?: string;
|
|
1060
|
+
/** Optional catalog grouping metadata; it never triggers invocation. */
|
|
1061
|
+
capabilityClass?: string;
|
|
1128
1062
|
[extra: string]: unknown;
|
|
1129
1063
|
}
|
|
1130
1064
|
/** Gateway 对同一技能 store 的只读快照条目。active 只叠加全局/项目禁用,不叠 turn 工具条件。 */
|
|
@@ -1705,6 +1639,14 @@ export interface HostApplyCuratorPlanResult {
|
|
|
1705
1639
|
}
|
|
1706
1640
|
export type HostSkillInstallRiskTier = "R0" | "R1" | "R2" | "R3";
|
|
1707
1641
|
export type HostSkillReplacementPolicy = "managed-unmodified" | "user-confirmed";
|
|
1642
|
+
export interface HostSkillCredentialDescriptor {
|
|
1643
|
+
key: string;
|
|
1644
|
+
label: string;
|
|
1645
|
+
envKey: string;
|
|
1646
|
+
placeholder?: string;
|
|
1647
|
+
secret?: boolean;
|
|
1648
|
+
helpUrl?: string;
|
|
1649
|
+
}
|
|
1708
1650
|
export interface HostPrepareSkillInstallParams {
|
|
1709
1651
|
name: string;
|
|
1710
1652
|
version: string;
|
|
@@ -1721,6 +1663,14 @@ export interface HostPrepareSkillInstallParams {
|
|
|
1721
1663
|
manifestSchemaVersion: 18;
|
|
1722
1664
|
manifestDigest: `sha256:${string}`;
|
|
1723
1665
|
requiredCapabilities: CapabilityRequirementV1[];
|
|
1666
|
+
/** Optional in the wire contract for compatibility with schema-18 callers predating secure setup. */
|
|
1667
|
+
credentials?: HostSkillCredentialDescriptor[];
|
|
1668
|
+
/** Verified catalog terms used only for installed Skill recall. */
|
|
1669
|
+
searchTerms?: string[];
|
|
1670
|
+
/** Verified, single-line routing summary projected in the complete Skill directory. */
|
|
1671
|
+
routingSummary?: string;
|
|
1672
|
+
/** Optional catalog grouping metadata; it is never an invocation rule. */
|
|
1673
|
+
capabilityClass?: string;
|
|
1724
1674
|
}
|
|
1725
1675
|
export interface HostPrepareSkillInstallResult {
|
|
1726
1676
|
installationId: string;
|