openclaw-code-agent 4.7.11 → 4.7.12
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/README.md +1 -1
- package/dist/index.js +1 -1
- package/npm-shrinkwrap.json +10 -9
- package/openclaw.plugin.json +1 -1
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -128,7 +128,7 @@ Because worktree isolation defaults to `delegate`, `defaultWorkdir` should norma
|
|
|
128
128
|
|
|
129
129
|
Chat-launched sessions route updates back to their originating chat thread. For agent-launched tool sessions without an origin route, configure `fallbackChannel` or `agentChannels` in the reference guide.
|
|
130
130
|
|
|
131
|
-
The current package requires, is built against, and is validated against OpenClaw `2026.
|
|
131
|
+
The current package requires, is built against, and is validated against OpenClaw `2026.9.1`, while its plugin API, Gateway, and peer dependency contracts retain the verified `2026.8.1` compatibility floor. The manifest still declares `contracts.tools`, the plugin still imports only `openclaw/plugin-sdk/plugin-entry`, and its session store, wake routing, callbacks, worktree flows, and Codex/Claude model restrictions remain plugin-owned. OpenClaw's host-side model catalog and activatable-harness checks do not rewrite Code Agent's unprefixed Codex harness models (`gpt-5.6-sol`, `gpt-5.6-terra`, and `gpt-5.6-luna`), its Claude Code aliases (`sonnet` and `opus`), or either harness-scoped allowlist. Existing sessions, permissions, Telegram/topic routes, automation delivery context, callback ownership, and namespaced tool allowlists remain under the same plugin contracts. OpenClaw `2026.9.1` improves origin-channel approvals, callback acknowledgement, cron delivery recovery, managed worktrees, and Codex lifecycle behavior; these are host-side improvements and do not transfer ownership of Code Agent's routing or follow-through state. Installing this package performs no host-side configuration migration.
|
|
132
132
|
|
|
133
133
|
If you use Codex, make sure the local `codex` command or `OPENCLAW_CODEX_APP_SERVER_COMMAND` override is available and authenticated. Codex-specific defaults live under `harnesses.codex`: `reasoningEffort` is sent as `reasoningEffort`, and `fastMode: true` sends `service_tier: "fast"` on Codex App Server thread, resume, and turn payloads. The Codex harness starts the app server with stdio listener args by default, only sends UUID-shaped backend thread IDs to `thread/resume`, and reports startup timeouts with redacted recent stderr. When Codex auth is inconsistent, this is the recommended `~/.codex/config.toml` setting:
|
|
134
134
|
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as Zo,A as de,Aa as qt,B as br,C as Rr,D as Ar,E as Rt,F as At,G as It,H as Tt,I as zo,J as Ho,K as C,L as D,M as z,N as Qo,O as xt,P as Yo,Pa as Vt,Q as Ir,R as L,S as Ct,T as Je,U as Mt,V as Jo,W as Xo,X as Ee,Y as oe,Z as Xe,_ as _t,a as Te,aa as H,b as xe,ba as Tr,c as wr,ca as xr,d as qo,da as Ze,e as Ce,ea as et,f as ue,fa as B,g as Z,ga as Dt,h as le,ha as ei,i as Ye,ia as tt,j as Vo,ja as ie,k as _,ka as Ne,l as Uo,la as ti,m as Y,ma as $t,n as Me,na as nt,o as Pt,oa as Et,p as ce,pa as Nt,q as _e,qa as Oe,r as wt,ra as Ot,s as bt,sa as ni,t as Go,ta as Wt,u as De,ua as Ft,v as $e,va as ri,w as jo,wa as Lt,x as p,xa as Bt,y as k,ya as Kt,z as $,za as Se}from"./chunks/chunk.js";import{readdirSync as hf,statSync as yf,rmSync as Sf}from"fs";import{execFileSync as kf}from"child_process";import{join as Bo}from"path";var oi={name:"openclaw-code-agent",version:"4.7.11",type:"module",packageManager:"pnpm@11.15.1",main:"dist/index.js",scripts:{"audit:prod":"pnpm audit --prod",build:"esbuild index.ts --bundle --splitting --platform=node --target=node22 --format=esm --outdir=dist --entry-names=index --chunk-names=chunks/[name] --minify --charset=utf8 --pure:console.log --pure:console.warn --pure:console.info --pure:console.debug --external:@anthropic-ai/claude-agent-sdk --external:openclaw/plugin-sdk/plugin-entry","generate:npm-shrinkwrap":"node scripts/generate-npm-shrinkwrap.mjs","check-static-guardrails":"node scripts/check-static-guardrails.mjs && node scripts/check-npm-shrinkwrap.mjs","check-plugin-security":"node scripts/check-plugin-security.mjs",test:"node scripts/run-tests.mjs","test:integ:crabbox":"node scripts/run-tests.mjs tests/oca-codex-crabbox-integ.test.ts tests/oca-plugin-workflows-integ.test.ts tests/oca-codex-telegram-proof.test.ts tests/oca-codex-proof-app-server.test.ts tests/oca-codex-proof-workflow.test.ts","test:serial":"node scripts/run-tests.mjs","test:file":"node scripts/run-tests.mjs","smoke:backend":"node scripts/run-tests.mjs tests/codex-harness.test.ts tests/plan-mode-e2e.test.ts tests/session-restore-service.test.ts","smoke:backend-parity":"node scripts/run-tests.mjs tests/backend-contract-smoke.test.ts tests/codex-harness.test.ts tests/harness-registry.test.ts","smoke:codex-worktrees":"node scripts/run-tests.mjs tests/codex-harness.test.ts tests/session-bootstrap.test.ts tests/session-restore-service.test.ts","smoke:codex-live":"OPENCLAW_RUN_LIVE_CODEX_SMOKE=1 node scripts/run-tests.mjs tests/live-codex-app-server-smoke.test.ts","proof:codex-doctor":"node --import tsx scripts/e2e/oca-codex-telegram-proof.ts doctor","proof:codex-local":"node --import tsx scripts/e2e/oca-codex-telegram-proof.ts local-smoke","proof:codex-telegram":"node scripts/e2e/run-oca-codex-telegram-proof.mjs","smoke:codex-release":"OPENCLAW_RUN_LIVE_CODEX_RELEASE_SMOKE=1 node scripts/run-tests.mjs tests/live-codex-app-server-smoke.test.ts","smoke:opencode-live":"OPENCLAW_RUN_LIVE_OPENCODE_SMOKE=1 node scripts/run-tests.mjs tests/live-opencode-server-smoke.test.ts",typecheck:"tsc -p tsconfig.typecheck.json --noEmit","validate:release-metadata":"node scripts/validate-release-metadata.mjs","verify:npm-consumer":"node scripts/verify-npm-consumer-install.mjs",verify:"pnpm check-static-guardrails && pnpm typecheck && pnpm build && pnpm test"},openclaw:{extensions:["./dist/index.js"],install:{npmSpec:"openclaw-code-agent",defaultChoice:"npm",minHostVersion:">=2026.8.2"},compat:{pluginApi:">=2026.8.1",minGatewayVersion:"2026.8.1"},build:{openclawVersion:"2026.8.2",pluginSdkVersion:"2026.8.2"}},files:["dist/","skills/","openclaw.plugin.json","npm-shrinkwrap.json","README.md","LICENSE"],dependencies:{"@anthropic-ai/claude-agent-sdk":"0.3.251","@anthropic-ai/sdk":"0.122.0","@hono/node-server":"2.1.1","@modelcontextprotocol/sdk":"1.30.0","express-rate-limit":"8.7.0","fast-uri":"3.1.5",hono:"4.12.34","ip-address":"10.7.0",zod:"4.5.4"},devDependencies:{"@types/node":"^26.0.1",esbuild:"^0.28.1",nanoid:"^6.0.0",openclaw:"2026.8.2",tsx:"^4.21.0",typescript:"^7.0.2"},keywords:["openclaw","plugin","claude","claude-code","opencode","coding-agent","codex","ai","anthropic","agent","code-generation","automation","cli","background-process","developer-tools"],repository:{type:"git",url:"git+https://github.com/goldmar/openclaw-code-agent.git"},homepage:"https://github.com/goldmar/openclaw-code-agent#readme",bugs:{url:"https://github.com/goldmar/openclaw-code-agent/issues"},license:"MIT",author:"Mark Goldenstein",publishConfig:{access:"public",provenance:!0},description:"An OpenClaw plugin that orchestrates coding agent sessions as managed background processes. Launch, monitor, and control coding agents (Claude Code, Codex, experimental OpenCode, and more) directly from your AI gateway.",peerDependencies:{openclaw:">=2026.8.1"}};import{execFile as xl}from"node:child_process";import{mkdirSync as Cl,readFileSync as Ml,renameSync as _l,writeFileSync as Dl}from"node:fs";import{dirname as $l,join as El}from"node:path";import{promisify as Nl}from"node:util";import*as pi from"child_process";import{createHash as fl}from"crypto";var W="code-agent";var gl=new Set(["1","true","yes","on"]);function Mr(){let n=process.env.OPENCLAW_CODE_AGENT_BUTTON_DIAGNOSTICS?.trim().toLowerCase();return!!(n&&gl.has(n))}function K(n){if(!(typeof n!="string"||n.length===0))return fl("sha256").update(n).digest("hex").slice(0,12)}function ii(n){return typeof n.callbackData=="string"?n.callbackData:typeof n.value=="string"?n.value:void 0}function E(n){let e=(n??[]).filter(r=>Array.isArray(r)&&r.length>0),t=e.flat();return{buttonRows:e.length||void 0,buttonCount:t.length||void 0,buttonLabels:t.length>0?t.map(r=>typeof r.label=="string"?r.label:void 0):void 0,callbackByteLengths:t.length>0?t.map(r=>{let o=ii(r);return o?Buffer.byteLength(o,"utf8"):void 0}):void 0,callbackHashes:t.length>0?t.map(r=>K(ii(r))):void 0,buttonStyles:t.length>0?t.map(r=>typeof r.style=="string"?r.style:void 0):void 0}}function pe(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function ai(n){let e=pe(n),t=Array.isArray(e?.blocks)?e.blocks:void 0;if(t)return t.map(r=>pe(r)?.type).filter(r=>typeof r=="string"&&r.length>0)}function li(n){let e=pe(n),t=Array.isArray(e?.blocks)?e.blocks:void 0;if(!t)return;let r=t.map(o=>{let i=pe(o);return i?.type!=="buttons"||!Array.isArray(i.buttons)?[]:i.buttons}).filter(o=>o.length>0);return r.length>0?r:void 0}function _r(n){let e=li(n);return{presentationBlockTypes:ai(n),...E(e)}}function Dr(n){let e=pe(n),t=e?.interactive,r=pe(e?.channelData),o=pe(r?.telegram),i=Array.isArray(o?.buttons)?o.buttons:void 0;return{renderedPayloadKeys:e?Object.keys(e).sort():void 0,interactiveBlockTypes:ai(t),...si("interactive",E(li(t))),...si("telegramChannelData",E(i)),hasPresentation:!!e?.presentation,hasInteractive:!!t,hasTelegramChannelDataButtons:!!i?.some(s=>s.length>0)}}function di(n){let e=pe(n);return e?{sendResultKeys:Object.keys(e).sort(),messageId:Cr(e.messageId),chatId:Cr(e.chatId),telegramThreadId:Cr(e.messageThreadId??e.threadId),channel:typeof e.channel=="string"?e.channel:void 0}:{sendResultType:typeof n}}function Cr(n){return typeof n=="string"||typeof n=="number"?n:void 0}function si(n,e){let t={};for(let[r,o]of Object.entries(e))o!==void 0&&(t[`${n}${r.charAt(0).toUpperCase()}${r.slice(1)}`]=o);return t}function M(n,e){if(!Mr())return;let t=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0));`${JSON.stringify({event:n,callbackNamespace:W,...t})}`}var ui=5e3,mi=64,hl={primary:"primary",success:"success",positive:"success",danger:"danger",destructive:"danger",negative:"danger"},yl={execFile:pi.execFile},me=class extends Error{constructor(e){super(e),this.name="MissingRuntimeDirectNotificationCapabilityError"}},We=class{constructor(e=yl.execFile){this.execFile=e}execFile;async send(e,t,r){M("direct_send_started",{...J(e),messageTextLength:t.length,...E(r)});try{await this.sendViaRuntime(e,t,r),M("direct_send_succeeded",{...J(e),deliveryPath:"runtime",...E(r)});return}catch(o){if(!(o instanceof me))throw M("direct_send_failed",{...J(e),deliveryPath:"runtime",...E(r),error:$r(o)}),o;M("direct_send_runtime_capability_missing",{...J(e),deliveryPath:"runtime",...E(r),reason:o.message}),await this.sendViaBoundedCliFallback(e,t,r,o.message),M("direct_send_succeeded",{...J(e),deliveryPath:"cli-fallback",...E(r)})}}async sendViaRuntime(e,t,r){let o=xe(),i=qo(),s=o?.channel?.outbound?.loadAdapter;if(!o)throw new me("OpenClaw plugin runtime is unavailable for direct notification delivery");if(i==null)throw new me("OpenClaw runtime config snapshot is unavailable for direct notification delivery");if(!o.channel)throw new me(`OpenClaw plugin runtime channel surface is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);if(!o.channel.outbound)throw new me(`OpenClaw plugin runtime channel outbound surface is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);if(!s)throw new me(`OpenClaw plugin runtime channel outbound loadAdapter is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);let a=await s(e.channel);if(!a)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" is unavailable`);let l=jt(r);if(M("runtime_adapter_loaded",{...J(e),adapterHasRenderPresentation:typeof a.renderPresentation=="function",adapterHasSendPayload:typeof a.sendPayload=="function",adapterHasSendText:typeof a.sendText=="function",...E(r),...l?_r(l):{}}),l){await this.sendPresentation(a,i,e,t,l);return}if(!a.sendText)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" cannot send text`);await a.sendText({cfg:i,to:e.target,text:t,accountId:e.accountId,threadId:e.threadId})}async sendPresentation(e,t,r,o,i){let s=kl(i),a={text:o,presentation:i,interactive:s};M("presentation_render_started",{...J(r),messageTextLength:o.length,adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",..._r(i)});let l={cfg:t,to:r.target,text:o,payload:a,accountId:r.accountId,threadId:r.threadId},d=e.renderPresentation?await e.renderPresentation({payload:a,presentation:i,ctx:l}):a,u=Pl(d,s,r.channel);if(M("presentation_render_completed",{...J(r),adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...Dr(u)}),!u||typeof u!="object"||!e.sendPayload)throw new Error(`OpenClaw outbound adapter for channel "${r.channel}" cannot preserve interactive presentation`);let f=await e.sendPayload({...l,payload:u});M("presentation_send_payload_completed",{...J(r),...Dr(u),...di(f)})}sendViaBoundedCliFallback(e,t,r,o){return new Promise((i,s)=>{let a=Sl(e,t,r);M("direct_send_cli_fallback_started",{...J(e),deliveryPath:"cli-fallback",reason:o,messageTextLength:t.length,...E(r)}),this.execFile("openclaw",a,{timeout:ui,killSignal:"SIGKILL"},(l,d,u)=>{if(!l){M("direct_send_cli_fallback_completed",{...J(e),deliveryPath:"cli-fallback",...E(r)}),i();return}let f=u?.trim()?` | stderr: ${u.trim()}`:"";M("direct_send_cli_fallback_failed",{...J(e),deliveryPath:"cli-fallback",...E(r),error:$r(l),stderrLength:u?.length}),s(new Error(`${o}; bounded openclaw message send fallback failed within ${ui}ms timeout: ${$r(l)}${f}`))})})}};function J(n){return{channel:n.channel,target:n.target,accountId:n.accountId,threadId:n.threadId,sessionKey:n.sessionKey}}function Sl(n,e,t){let r=jt(t),o=["message","send","--channel",n.channel,"--target",n.target,"--message",e];return n.accountId&&o.push("--account",n.accountId),n.threadId&&o.push("--thread-id",n.threadId),r&&o.push("--presentation",JSON.stringify(r)),o}function $r(n){return n instanceof Error?n.message:String(n)}function Er(n){if(!n||typeof n!="object")return"unknown";let e=n.version;return typeof e=="string"&&e.trim()?e:"unknown"}function jt(n){let e=(n??[]).filter(t=>Array.isArray(t)&&t.length>0).map(t=>({type:"buttons",buttons:t.map(r=>({label:r.label,value:Tl(r.callbackData),...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function kl(n){let e=n.blocks.filter(t=>t.type==="buttons"&&t.buttons.length>0).map(t=>({type:"buttons",buttons:t.buttons.map(r=>({label:r.label,value:r.value,...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function vl(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let e=n.interactive;if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.blocks;return Array.isArray(t)&&t.some(r=>{if(!r||typeof r!="object"||Array.isArray(r))return!1;let o=r;return o.type==="buttons"&&Array.isArray(o.buttons)&&o.buttons.length>0})}function Pl(n,e,t){if(!e)return n;let r=vl(n)?n:wl(n,e);return t!=="telegram"?r:bl(r,e)}function wl(n,e){return!n||typeof n!="object"||Array.isArray(n)?n:{...n,interactive:e}}function bl(n,e){if(!n||typeof n!="object"||Array.isArray(n))return n;let t=n,r=Fe(t.channelData),o=Fe(r?.telegram),i=Al(o?.buttons);if(i)return{...t,channelData:{...r??{},telegram:{...o??{},buttons:i}}};let s=Rl(e);return s?{...t,channelData:{...r??{},telegram:{...o??{},buttons:s}}}:n}function Rl(n){let e=n.blocks.filter(t=>t.type==="buttons"&&t.buttons.length>0).map(t=>t.buttons.filter(r=>typeof r.value=="string"&&r.value.trim().length>0&&Buffer.byteLength(r.value,"utf8")<=mi).map(r=>({text:r.label,callback_data:r.value,...fi(r.style)}))).filter(t=>t.length>0);return e.length>0?e:void 0}function Al(n){if(!Array.isArray(n))return;let e=n.map(t=>Array.isArray(t)?t.map(r=>{if(!r||typeof r!="object"||Array.isArray(r))return;let{style:o,...i}=r;if(!(typeof i.text!="string"||i.text.trim().length===0)&&!(i.callback_data!==void 0&&(typeof i.callback_data!="string"||i.callback_data.trim().length===0||Buffer.byteLength(i.callback_data,"utf8")>mi))&&Il(i))return{...i,...fi(o)}}).filter(r=>!!r):[]).filter(t=>t.length>0);return e.length>0?e:void 0}function Il(n){return Gt(n.callback_data)||Gt(n.url)||Ut(n.web_app)||Ut(n.webApp)||Ut(n.login_url)||Ut(n.loginUrl)||typeof n.switch_inline_query=="string"||typeof n.switch_inline_query_current_chat=="string"||Fe(n.switch_inline_query_chosen_chat)!==void 0||Fe(n.callback_game)!==void 0||n.pay===!0||ci(n.copy_text)||ci(n.copyText)}function Gt(n){return typeof n=="string"&&n.trim().length>0}function Ut(n){let e=Fe(n);return Gt(e?.url)}function ci(n){let e=Fe(n);return Gt(e?.text)}function fi(n){if(typeof n!="string")return{};let e=n.trim().toLowerCase(),t=hl[e];return t?{style:t}:{}}function Fe(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function Tl(n){return n.startsWith(`${W}:`)?n:`${W}:${n}`}var Ol=Nl(xl),rt="openclaw-code-agent",Wl=`https://registry.npmjs.org/${encodeURIComponent(rt)}/latest`,Fl="openclaw-code-agent-auto-update.json",Si=1440*60*1e3,Ll=7*Si,Bl=1e4,Le="plugin:auto-update";function fe(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function Nr(n){return n instanceof Error?n.message:String(n)}function te(n){return n?.trim().replace(/^v/i,"")||void 0}function ee(n,e){let t=n[e];return typeof t=="string"&&t.trim()?t.trim():void 0}function gi(n){let e=n?.trim().replace(/^npm:/,"");if(!e)return;if(e.startsWith("@")){let r=e.indexOf("@",1);return r===-1?e:e.slice(0,r)}let t=e.indexOf("@");return t===-1?e:e.slice(0,t)}function Or(n){let e=`${n.stdout}
|
|
1
|
+
import{$ as Zo,A as de,Aa as qt,B as br,C as Rr,D as Ar,E as Rt,F as At,G as It,H as Tt,I as zo,J as Ho,K as C,L as D,M as z,N as Qo,O as xt,P as Yo,Pa as Vt,Q as Ir,R as L,S as Ct,T as Je,U as Mt,V as Jo,W as Xo,X as Ee,Y as oe,Z as Xe,_ as _t,a as Te,aa as H,b as xe,ba as Tr,c as wr,ca as xr,d as qo,da as Ze,e as Ce,ea as et,f as ue,fa as B,g as Z,ga as Dt,h as le,ha as ei,i as Ye,ia as tt,j as Vo,ja as ie,k as _,ka as Ne,l as Uo,la as ti,m as Y,ma as $t,n as Me,na as nt,o as Pt,oa as Et,p as ce,pa as Nt,q as _e,qa as Oe,r as wt,ra as Ot,s as bt,sa as ni,t as Go,ta as Wt,u as De,ua as Ft,v as $e,va as ri,w as jo,wa as Lt,x as p,xa as Bt,y as k,ya as Kt,z as $,za as Se}from"./chunks/chunk.js";import{readdirSync as hf,statSync as yf,rmSync as Sf}from"fs";import{execFileSync as kf}from"child_process";import{join as Bo}from"path";var oi={name:"openclaw-code-agent",version:"4.7.12",type:"module",packageManager:"pnpm@11.15.1",main:"dist/index.js",scripts:{"audit:prod":"pnpm audit --prod",build:"esbuild index.ts --bundle --splitting --platform=node --target=node22 --format=esm --outdir=dist --entry-names=index --chunk-names=chunks/[name] --minify --charset=utf8 --pure:console.log --pure:console.warn --pure:console.info --pure:console.debug --external:@anthropic-ai/claude-agent-sdk --external:openclaw/plugin-sdk/plugin-entry","generate:npm-shrinkwrap":"node scripts/generate-npm-shrinkwrap.mjs","check-static-guardrails":"node scripts/check-static-guardrails.mjs && node scripts/check-npm-shrinkwrap.mjs","check-plugin-security":"node scripts/check-plugin-security.mjs",test:"node scripts/run-tests.mjs","test:integ:crabbox":"node scripts/run-tests.mjs tests/oca-codex-crabbox-integ.test.ts tests/oca-plugin-workflows-integ.test.ts tests/oca-codex-telegram-proof.test.ts tests/oca-codex-proof-app-server.test.ts tests/oca-codex-proof-workflow.test.ts","test:serial":"node scripts/run-tests.mjs","test:file":"node scripts/run-tests.mjs","smoke:backend":"node scripts/run-tests.mjs tests/codex-harness.test.ts tests/plan-mode-e2e.test.ts tests/session-restore-service.test.ts","smoke:backend-parity":"node scripts/run-tests.mjs tests/backend-contract-smoke.test.ts tests/codex-harness.test.ts tests/harness-registry.test.ts","smoke:codex-worktrees":"node scripts/run-tests.mjs tests/codex-harness.test.ts tests/session-bootstrap.test.ts tests/session-restore-service.test.ts","smoke:codex-live":"OPENCLAW_RUN_LIVE_CODEX_SMOKE=1 node scripts/run-tests.mjs tests/live-codex-app-server-smoke.test.ts","proof:codex-doctor":"node --import tsx scripts/e2e/oca-codex-telegram-proof.ts doctor","proof:codex-local":"node --import tsx scripts/e2e/oca-codex-telegram-proof.ts local-smoke","proof:codex-telegram":"node scripts/e2e/run-oca-codex-telegram-proof.mjs","smoke:codex-release":"OPENCLAW_RUN_LIVE_CODEX_RELEASE_SMOKE=1 node scripts/run-tests.mjs tests/live-codex-app-server-smoke.test.ts","smoke:opencode-live":"OPENCLAW_RUN_LIVE_OPENCODE_SMOKE=1 node scripts/run-tests.mjs tests/live-opencode-server-smoke.test.ts",typecheck:"tsc -p tsconfig.typecheck.json --noEmit","validate:release-metadata":"node scripts/validate-release-metadata.mjs","verify:npm-consumer":"node scripts/verify-npm-consumer-install.mjs",verify:"pnpm check-static-guardrails && pnpm typecheck && pnpm build && pnpm test"},openclaw:{extensions:["./dist/index.js"],install:{npmSpec:"openclaw-code-agent",defaultChoice:"npm",minHostVersion:">=2026.9.1"},compat:{pluginApi:">=2026.8.1",minGatewayVersion:"2026.8.1"},build:{openclawVersion:"2026.9.1",pluginSdkVersion:"2026.9.1"}},files:["dist/","skills/","openclaw.plugin.json","npm-shrinkwrap.json","README.md","LICENSE"],dependencies:{"@anthropic-ai/claude-agent-sdk":"0.3.251","@anthropic-ai/sdk":"0.122.0","@hono/node-server":"2.1.1","@modelcontextprotocol/sdk":"1.30.0","express-rate-limit":"8.7.0","fast-uri":"3.1.6",hono:"4.12.34","ip-address":"10.7.0",qs:"6.16.0",zod:"4.5.4"},devDependencies:{"@types/node":"^26.0.1",esbuild:"^0.28.1",nanoid:"^6.0.0",openclaw:"2026.9.1",tsx:"^4.21.0",typescript:"^7.0.2"},keywords:["openclaw","plugin","claude","claude-code","opencode","coding-agent","codex","ai","anthropic","agent","code-generation","automation","cli","background-process","developer-tools"],repository:{type:"git",url:"git+https://github.com/goldmar/openclaw-code-agent.git"},homepage:"https://github.com/goldmar/openclaw-code-agent#readme",bugs:{url:"https://github.com/goldmar/openclaw-code-agent/issues"},license:"MIT",author:"Mark Goldenstein",publishConfig:{access:"public",provenance:!0},description:"An OpenClaw plugin that orchestrates coding agent sessions as managed background processes. Launch, monitor, and control coding agents (Claude Code, Codex, experimental OpenCode, and more) directly from your AI gateway.",peerDependencies:{openclaw:">=2026.8.1"}};import{execFile as xl}from"node:child_process";import{mkdirSync as Cl,readFileSync as Ml,renameSync as _l,writeFileSync as Dl}from"node:fs";import{dirname as $l,join as El}from"node:path";import{promisify as Nl}from"node:util";import*as pi from"child_process";import{createHash as fl}from"crypto";var W="code-agent";var gl=new Set(["1","true","yes","on"]);function Mr(){let n=process.env.OPENCLAW_CODE_AGENT_BUTTON_DIAGNOSTICS?.trim().toLowerCase();return!!(n&&gl.has(n))}function K(n){if(!(typeof n!="string"||n.length===0))return fl("sha256").update(n).digest("hex").slice(0,12)}function ii(n){return typeof n.callbackData=="string"?n.callbackData:typeof n.value=="string"?n.value:void 0}function E(n){let e=(n??[]).filter(r=>Array.isArray(r)&&r.length>0),t=e.flat();return{buttonRows:e.length||void 0,buttonCount:t.length||void 0,buttonLabels:t.length>0?t.map(r=>typeof r.label=="string"?r.label:void 0):void 0,callbackByteLengths:t.length>0?t.map(r=>{let o=ii(r);return o?Buffer.byteLength(o,"utf8"):void 0}):void 0,callbackHashes:t.length>0?t.map(r=>K(ii(r))):void 0,buttonStyles:t.length>0?t.map(r=>typeof r.style=="string"?r.style:void 0):void 0}}function pe(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function ai(n){let e=pe(n),t=Array.isArray(e?.blocks)?e.blocks:void 0;if(t)return t.map(r=>pe(r)?.type).filter(r=>typeof r=="string"&&r.length>0)}function li(n){let e=pe(n),t=Array.isArray(e?.blocks)?e.blocks:void 0;if(!t)return;let r=t.map(o=>{let i=pe(o);return i?.type!=="buttons"||!Array.isArray(i.buttons)?[]:i.buttons}).filter(o=>o.length>0);return r.length>0?r:void 0}function _r(n){let e=li(n);return{presentationBlockTypes:ai(n),...E(e)}}function Dr(n){let e=pe(n),t=e?.interactive,r=pe(e?.channelData),o=pe(r?.telegram),i=Array.isArray(o?.buttons)?o.buttons:void 0;return{renderedPayloadKeys:e?Object.keys(e).sort():void 0,interactiveBlockTypes:ai(t),...si("interactive",E(li(t))),...si("telegramChannelData",E(i)),hasPresentation:!!e?.presentation,hasInteractive:!!t,hasTelegramChannelDataButtons:!!i?.some(s=>s.length>0)}}function di(n){let e=pe(n);return e?{sendResultKeys:Object.keys(e).sort(),messageId:Cr(e.messageId),chatId:Cr(e.chatId),telegramThreadId:Cr(e.messageThreadId??e.threadId),channel:typeof e.channel=="string"?e.channel:void 0}:{sendResultType:typeof n}}function Cr(n){return typeof n=="string"||typeof n=="number"?n:void 0}function si(n,e){let t={};for(let[r,o]of Object.entries(e))o!==void 0&&(t[`${n}${r.charAt(0).toUpperCase()}${r.slice(1)}`]=o);return t}function M(n,e){if(!Mr())return;let t=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0));`${JSON.stringify({event:n,callbackNamespace:W,...t})}`}var ui=5e3,mi=64,hl={primary:"primary",success:"success",positive:"success",danger:"danger",destructive:"danger",negative:"danger"},yl={execFile:pi.execFile},me=class extends Error{constructor(e){super(e),this.name="MissingRuntimeDirectNotificationCapabilityError"}},We=class{constructor(e=yl.execFile){this.execFile=e}execFile;async send(e,t,r){M("direct_send_started",{...J(e),messageTextLength:t.length,...E(r)});try{await this.sendViaRuntime(e,t,r),M("direct_send_succeeded",{...J(e),deliveryPath:"runtime",...E(r)});return}catch(o){if(!(o instanceof me))throw M("direct_send_failed",{...J(e),deliveryPath:"runtime",...E(r),error:$r(o)}),o;M("direct_send_runtime_capability_missing",{...J(e),deliveryPath:"runtime",...E(r),reason:o.message}),await this.sendViaBoundedCliFallback(e,t,r,o.message),M("direct_send_succeeded",{...J(e),deliveryPath:"cli-fallback",...E(r)})}}async sendViaRuntime(e,t,r){let o=xe(),i=qo(),s=o?.channel?.outbound?.loadAdapter;if(!o)throw new me("OpenClaw plugin runtime is unavailable for direct notification delivery");if(i==null)throw new me("OpenClaw runtime config snapshot is unavailable for direct notification delivery");if(!o.channel)throw new me(`OpenClaw plugin runtime channel surface is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);if(!o.channel.outbound)throw new me(`OpenClaw plugin runtime channel outbound surface is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);if(!s)throw new me(`OpenClaw plugin runtime channel outbound loadAdapter is unavailable for direct notification delivery (runtimeVersion=${Er(o)})`);let a=await s(e.channel);if(!a)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" is unavailable`);let l=jt(r);if(M("runtime_adapter_loaded",{...J(e),adapterHasRenderPresentation:typeof a.renderPresentation=="function",adapterHasSendPayload:typeof a.sendPayload=="function",adapterHasSendText:typeof a.sendText=="function",...E(r),...l?_r(l):{}}),l){await this.sendPresentation(a,i,e,t,l);return}if(!a.sendText)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" cannot send text`);await a.sendText({cfg:i,to:e.target,text:t,accountId:e.accountId,threadId:e.threadId})}async sendPresentation(e,t,r,o,i){let s=kl(i),a={text:o,presentation:i,interactive:s};M("presentation_render_started",{...J(r),messageTextLength:o.length,adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",..._r(i)});let l={cfg:t,to:r.target,text:o,payload:a,accountId:r.accountId,threadId:r.threadId},d=e.renderPresentation?await e.renderPresentation({payload:a,presentation:i,ctx:l}):a,u=Pl(d,s,r.channel);if(M("presentation_render_completed",{...J(r),adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...Dr(u)}),!u||typeof u!="object"||!e.sendPayload)throw new Error(`OpenClaw outbound adapter for channel "${r.channel}" cannot preserve interactive presentation`);let f=await e.sendPayload({...l,payload:u});M("presentation_send_payload_completed",{...J(r),...Dr(u),...di(f)})}sendViaBoundedCliFallback(e,t,r,o){return new Promise((i,s)=>{let a=Sl(e,t,r);M("direct_send_cli_fallback_started",{...J(e),deliveryPath:"cli-fallback",reason:o,messageTextLength:t.length,...E(r)}),this.execFile("openclaw",a,{timeout:ui,killSignal:"SIGKILL"},(l,d,u)=>{if(!l){M("direct_send_cli_fallback_completed",{...J(e),deliveryPath:"cli-fallback",...E(r)}),i();return}let f=u?.trim()?` | stderr: ${u.trim()}`:"";M("direct_send_cli_fallback_failed",{...J(e),deliveryPath:"cli-fallback",...E(r),error:$r(l),stderrLength:u?.length}),s(new Error(`${o}; bounded openclaw message send fallback failed within ${ui}ms timeout: ${$r(l)}${f}`))})})}};function J(n){return{channel:n.channel,target:n.target,accountId:n.accountId,threadId:n.threadId,sessionKey:n.sessionKey}}function Sl(n,e,t){let r=jt(t),o=["message","send","--channel",n.channel,"--target",n.target,"--message",e];return n.accountId&&o.push("--account",n.accountId),n.threadId&&o.push("--thread-id",n.threadId),r&&o.push("--presentation",JSON.stringify(r)),o}function $r(n){return n instanceof Error?n.message:String(n)}function Er(n){if(!n||typeof n!="object")return"unknown";let e=n.version;return typeof e=="string"&&e.trim()?e:"unknown"}function jt(n){let e=(n??[]).filter(t=>Array.isArray(t)&&t.length>0).map(t=>({type:"buttons",buttons:t.map(r=>({label:r.label,value:Tl(r.callbackData),...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function kl(n){let e=n.blocks.filter(t=>t.type==="buttons"&&t.buttons.length>0).map(t=>({type:"buttons",buttons:t.buttons.map(r=>({label:r.label,value:r.value,...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function vl(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let e=n.interactive;if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e.blocks;return Array.isArray(t)&&t.some(r=>{if(!r||typeof r!="object"||Array.isArray(r))return!1;let o=r;return o.type==="buttons"&&Array.isArray(o.buttons)&&o.buttons.length>0})}function Pl(n,e,t){if(!e)return n;let r=vl(n)?n:wl(n,e);return t!=="telegram"?r:bl(r,e)}function wl(n,e){return!n||typeof n!="object"||Array.isArray(n)?n:{...n,interactive:e}}function bl(n,e){if(!n||typeof n!="object"||Array.isArray(n))return n;let t=n,r=Fe(t.channelData),o=Fe(r?.telegram),i=Al(o?.buttons);if(i)return{...t,channelData:{...r??{},telegram:{...o??{},buttons:i}}};let s=Rl(e);return s?{...t,channelData:{...r??{},telegram:{...o??{},buttons:s}}}:n}function Rl(n){let e=n.blocks.filter(t=>t.type==="buttons"&&t.buttons.length>0).map(t=>t.buttons.filter(r=>typeof r.value=="string"&&r.value.trim().length>0&&Buffer.byteLength(r.value,"utf8")<=mi).map(r=>({text:r.label,callback_data:r.value,...fi(r.style)}))).filter(t=>t.length>0);return e.length>0?e:void 0}function Al(n){if(!Array.isArray(n))return;let e=n.map(t=>Array.isArray(t)?t.map(r=>{if(!r||typeof r!="object"||Array.isArray(r))return;let{style:o,...i}=r;if(!(typeof i.text!="string"||i.text.trim().length===0)&&!(i.callback_data!==void 0&&(typeof i.callback_data!="string"||i.callback_data.trim().length===0||Buffer.byteLength(i.callback_data,"utf8")>mi))&&Il(i))return{...i,...fi(o)}}).filter(r=>!!r):[]).filter(t=>t.length>0);return e.length>0?e:void 0}function Il(n){return Gt(n.callback_data)||Gt(n.url)||Ut(n.web_app)||Ut(n.webApp)||Ut(n.login_url)||Ut(n.loginUrl)||typeof n.switch_inline_query=="string"||typeof n.switch_inline_query_current_chat=="string"||Fe(n.switch_inline_query_chosen_chat)!==void 0||Fe(n.callback_game)!==void 0||n.pay===!0||ci(n.copy_text)||ci(n.copyText)}function Gt(n){return typeof n=="string"&&n.trim().length>0}function Ut(n){let e=Fe(n);return Gt(e?.url)}function ci(n){let e=Fe(n);return Gt(e?.text)}function fi(n){if(typeof n!="string")return{};let e=n.trim().toLowerCase(),t=hl[e];return t?{style:t}:{}}function Fe(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:void 0}function Tl(n){return n.startsWith(`${W}:`)?n:`${W}:${n}`}var Ol=Nl(xl),rt="openclaw-code-agent",Wl=`https://registry.npmjs.org/${encodeURIComponent(rt)}/latest`,Fl="openclaw-code-agent-auto-update.json",Si=1440*60*1e3,Ll=7*Si,Bl=1e4,Le="plugin:auto-update";function fe(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function Nr(n){return n instanceof Error?n.message:String(n)}function te(n){return n?.trim().replace(/^v/i,"")||void 0}function ee(n,e){let t=n[e];return typeof t=="string"&&t.trim()?t.trim():void 0}function gi(n){let e=n?.trim().replace(/^npm:/,"");if(!e)return;if(e.startsWith("@")){let r=e.indexOf("@",1);return r===-1?e:e.slice(0,r)}let t=e.indexOf("@");return t===-1?e:e.slice(0,t)}function Or(n){let e=`${n.stdout}
|
|
2
2
|
${n.stderr}`;if(/No install record/i.test(e))throw new Error("OpenClaw reported no managed install record for OpenClaw Code Agent.");let t;try{t=JSON.parse(n.stdout)}catch{throw new Error("OpenClaw returned invalid JSON while inspecting the OpenClaw Code Agent install.")}if(!fe(t)||!fe(t.plugin)||!fe(t.install))throw new Error("OpenClaw inspection did not include the OpenClaw Code Agent plugin and managed install record.");let r=ee(t.plugin,"id"),o=te(ee(t.plugin,"version"));if(r!==rt||!o)throw new Error("OpenClaw inspection returned an unexpected OpenClaw Code Agent plugin identity or version.");let i=ee(t.install,"source"),s=te(ee(t.install,"version")),a=te(ee(t.install,"resolvedVersion"));if(i==="npm"){let l=ee(t.install,"resolvedName")??gi(ee(t.install,"spec"))??gi(ee(t.install,"resolvedSpec"));if(!l)throw new Error("The OpenClaw Code Agent npm install record does not identify its package.");return{pluginVersion:o,install:{source:i,packageName:l,recordedVersion:s,resolvedVersion:a}}}if(i==="clawhub"){let l=ee(t.install,"clawhubPackage");if(!l)throw new Error("The OpenClaw Code Agent ClawHub install record does not identify its package.");return{pluginVersion:o,install:{source:i,packageName:l,recordedVersion:s,resolvedVersion:a}}}throw new Error(`OpenClaw Code Agent self-update does not support managed install source ${i??"unknown"}.`)}function Kl(n,e){return["plugins","install",n.source==="npm"?`${n.packageName}@${e}`:`clawhub:${n.packageName}@${e}`,"--force"]}function ql(n,e,t){if(e.install.source!==n.install.source||e.install.packageName!==n.install.packageName)throw new Error("OpenClaw Code Agent update verification found that the managed install source or package changed.");if(e.pluginVersion!==t)throw new Error(`OpenClaw Code Agent update verification found installed plugin version ${e.pluginVersion}, expected ${t}.`);let r=[e.install.recordedVersion,e.install.resolvedVersion].filter(o=>!!o);if(r.length===0||r.some(o=>o!==t))throw new Error(`OpenClaw Code Agent update verification found managed install version ${r.join("/")||"unknown"}, expected ${t}.`)}function Wr(n){let t=te(n)?.match(/^((?:0|[1-9]\d*))\.((?:0|[1-9]\d*))\.((?:0|[1-9]\d*))$/);if(!t?.[1]||!t[2]||!t[3])return;let r=[Number(t[1]),Number(t[2]),Number(t[3])];return r.every(Number.isSafeInteger)?r:void 0}function Vl(n,e){let t=Wr(n),r=Wr(e);if(!t||!r)return!1;for(let o=0;o<3;o+=1){if(t[o]>r[o])return!0;if(t[o]<r[o])return!1}return!1}function Ul(n){if(!fe(n))return{};let e={};for(let t of["lastCheckedAt","latestVersion","promptedVersion","lastPromptedAt","dismissedVersion","lastDismissedAt","updateInstalledVersion","restartPromptedVersion","lastError"]){let r=n[t];typeof r=="string"&&r.trim()&&(e[t]=r)}return e}function hi(n){if(!(!n?.provider||!n.target||n.provider==="system"||n.target==="system"))return{channel:n.provider,target:n.target,accountId:n.accountId,threadId:n.threadId,sessionKey:n.sessionKey}}function yi(){if(_.fallbackChannel)return ue(_.fallbackChannel)}async function Gl(){let{fetchNpmReleaseMetadata:n}=await import("./chunks/npm-release-client.js"),e=await n(Wl,Bl),t=fe(e)&&typeof e.version=="string"?te(e.version):void 0;return t?{version:t}:void 0}async function jl(n,e){let t=await n("openclaw",["plugins","search",e,"--limit","100","--json"]),r;try{r=JSON.parse(t.stdout)}catch{throw new Error("OpenClaw returned invalid JSON while checking ClawHub for OpenClaw Code Agent updates.")}let o=fe(r)&&Array.isArray(r.results)?r.results:[];for(let i of o){if(!fe(i)||!fe(i.package)||ee(i.package,"name")!==e)continue;let s=te(ee(i.package,"latestVersion"));return s?{version:s}:void 0}}async function zl(n){let e=Or(await n("openclaw",["plugins","inspect",rt,"--json"]));return e.install.source==="npm"?Gl():jl(n,e.install.packageName)}async function Hl(n,e){let t=await Ol(n,e,{timeout:12e4,maxBuffer:1048576});return{stdout:t.stdout?.toString()??"",stderr:t.stderr?.toString()??""}}var zt=class{constructor(e){this.options=e;this.statePath=El(e.stateDir,Fl),this.notifier=e.notifier??new We,this.runCommand=e.runCommand??Hl,this.fetchLatestRelease=e.fetchLatestRelease??(()=>zl(this.runCommand)),this.now=e.now??Date.now}options;statePath;notifier;fetchLatestRelease;runCommand;now;checkInFlight;maybeCheckForUpdate(e={}){this.checkInFlight||(this.checkInFlight=this.checkForUpdate(e).catch(t=>{`${Nr(t)}`}).finally(()=>{this.checkInFlight=void 0}))}async waitForIdle(){await this.checkInFlight}async installConfirmed(e,t){let r=te(e);if(!r||!Wr(r))return"Could not determine which stable OpenClaw Code Agent version to update to.";let o=Or(await this.runCommand("openclaw",["plugins","inspect",rt,"--json"])),i=await this.runCommand("openclaw",Kl(o.install,r));if(/No install record/i.test(`${i.stdout}
|
|
3
3
|
${i.stderr}`))throw new Error("OpenClaw reported no managed install record while updating OpenClaw Code Agent.");let s=Or(await this.runCommand("openclaw",["plugins","inspect",rt,"--json"]));ql(o,s,r);let a=this.readState();this.writeState({...a,updateInstalledVersion:r});let l=hi(t?.route??yi());if(l)try{return await this.sendRestartPrompt(l,r),`OpenClaw Code Agent ${r} installation was verified. Restart confirmation was sent.`}catch(d){`${r}${Nr(d)}`}return[`OpenClaw Code Agent ${r} installation was verified.`,"Restart the Gateway explicitly to load it: openclaw gateway restart"].join(`
|
|
4
4
|
`)}async restartConfirmed(e){let t=te(e);return await this.runCommand("openclaw",["gateway","restart"]),t?`Gateway restart requested for OpenClaw Code Agent ${t}.`:"Gateway restart requested."}dismiss(e){return this.postpone(e,"Dismissed")}remindLater(e){return this.postpone(e,"Will remind later about")}postpone(e,t){let r=te(e),o=this.readState();return this.writeState({...o,...r?{dismissedVersion:r,lastDismissedAt:new Date(this.now()).toISOString()}:{}}),r?`${t} OpenClaw Code Agent ${r} update reminder.`:`${t} OpenClaw Code Agent update reminder.`}async checkForUpdate(e){let t=this.readState(),r=t.lastCheckedAt?Date.parse(t.lastCheckedAt):Number.NaN;if(Number.isFinite(r)&&this.now()-r<Si){await this.promptFromState(t,e);return}let o=new Date(this.now()).toISOString(),i={...t,lastCheckedAt:o};delete i.lastError,this.writeState(i);try{let s=await this.fetchLatestRelease(),a=te(s?.version),l={...this.readState(),latestVersion:a};delete l.lastError,this.writeState(l),await this.promptFromState(l,e)}catch(s){throw this.writeState({...this.readState(),lastError:Nr(s)}),s}}async promptFromState(e,t){let r=te(e.latestVersion);if(!Vl(r,this.options.currentVersion)||!this.shouldPromptForVersion(e,r))return;let o=hi(t.route??yi());o&&(await this.sendUpdatePrompt(o,r),this.writeState({...this.readState(),latestVersion:r,promptedVersion:r,lastPromptedAt:new Date(this.now()).toISOString()}))}async sendUpdatePrompt(e,t){await this.notifier.send(e,[`OpenClaw Code Agent update available: ${this.options.currentVersion} -> ${t}.`,"","Update now will reinstall the exact approved version from OpenClaw Code Agent's recorded npm or ClawHub source, then verify it.","If the update succeeds, OpenClaw Code Agent will ask separately before restarting the Gateway."].join(`
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openclaw-code-agent",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.12",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "openclaw-code-agent",
|
|
9
|
-
"version": "4.7.
|
|
9
|
+
"version": "4.7.12",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@anthropic-ai/claude-agent-sdk": "0.3.251",
|
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
"@hono/node-server": "2.1.1",
|
|
15
15
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
16
16
|
"express-rate-limit": "8.7.0",
|
|
17
|
-
"fast-uri": "3.1.
|
|
17
|
+
"fast-uri": "3.1.6",
|
|
18
18
|
"hono": "4.12.34",
|
|
19
19
|
"ip-address": "10.7.0",
|
|
20
|
+
"qs": "6.16.0",
|
|
20
21
|
"zod": "4.5.4"
|
|
21
22
|
},
|
|
22
23
|
"peerDependencies": {
|
|
@@ -639,9 +640,9 @@
|
|
|
639
640
|
"license": "Unlicense"
|
|
640
641
|
},
|
|
641
642
|
"node_modules/fast-uri": {
|
|
642
|
-
"version": "3.1.
|
|
643
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.
|
|
644
|
-
"integrity": "sha512-
|
|
643
|
+
"version": "3.1.6",
|
|
644
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz",
|
|
645
|
+
"integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==",
|
|
645
646
|
"funding": [
|
|
646
647
|
{
|
|
647
648
|
"type": "github",
|
|
@@ -857,9 +858,9 @@
|
|
|
857
858
|
"license": "ISC"
|
|
858
859
|
},
|
|
859
860
|
"node_modules/jose": {
|
|
860
|
-
"version": "6.2.
|
|
861
|
-
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.
|
|
862
|
-
"integrity": "sha512-
|
|
861
|
+
"version": "6.2.11",
|
|
862
|
+
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.11.tgz",
|
|
863
|
+
"integrity": "sha512-A5NPn7g8EAzGU3IzRs+Yiq8K5n3ypYS75M5+KKiVHdUexfpWK1kP4ZMq7QnTGDoMj6TJ1dtcEJjW60yZDXS4hg==",
|
|
863
864
|
"license": "MIT",
|
|
864
865
|
"funding": {
|
|
865
866
|
"url": "https://github.com/sponsors/panva"
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openclaw-code-agent",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"packageManager": "pnpm@11.15.1",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,15 +35,15 @@
|
|
|
35
35
|
"install": {
|
|
36
36
|
"npmSpec": "openclaw-code-agent",
|
|
37
37
|
"defaultChoice": "npm",
|
|
38
|
-
"minHostVersion": ">=2026.
|
|
38
|
+
"minHostVersion": ">=2026.9.1"
|
|
39
39
|
},
|
|
40
40
|
"compat": {
|
|
41
41
|
"pluginApi": ">=2026.8.1",
|
|
42
42
|
"minGatewayVersion": "2026.8.1"
|
|
43
43
|
},
|
|
44
44
|
"build": {
|
|
45
|
-
"openclawVersion": "2026.
|
|
46
|
-
"pluginSdkVersion": "2026.
|
|
45
|
+
"openclawVersion": "2026.9.1",
|
|
46
|
+
"pluginSdkVersion": "2026.9.1"
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"files": [
|
|
@@ -60,16 +60,17 @@
|
|
|
60
60
|
"@hono/node-server": "2.1.1",
|
|
61
61
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
62
62
|
"express-rate-limit": "8.7.0",
|
|
63
|
-
"fast-uri": "3.1.
|
|
63
|
+
"fast-uri": "3.1.6",
|
|
64
64
|
"hono": "4.12.34",
|
|
65
65
|
"ip-address": "10.7.0",
|
|
66
|
+
"qs": "6.16.0",
|
|
66
67
|
"zod": "4.5.4"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@types/node": "^26.0.1",
|
|
70
71
|
"esbuild": "^0.28.1",
|
|
71
72
|
"nanoid": "^6.0.0",
|
|
72
|
-
"openclaw": "2026.
|
|
73
|
+
"openclaw": "2026.9.1",
|
|
73
74
|
"tsx": "^4.21.0",
|
|
74
75
|
"typescript": "^7.0.2"
|
|
75
76
|
},
|