anyray-connect 0.11.202 → 0.11.204
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/index.js +5 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -73,9 +73,10 @@ ${t.stderr??""}`}},WD=async e=>{try{return(await ND(e)).isDirectory()}catch{retu
|
|
|
73
73
|
|
|
74
74
|
`);return o.length>0?o+`
|
|
75
75
|
`:""},qC=e=>{if(e.trim().length===0)return!0;try{return YD(e),!0}catch{return!1}};import{randomUUID as tL}from"node:crypto";import{chmod as nL,mkdir as rL,rm as oL,writeFile as aL}from"node:fs/promises";import{dirname as sL}from"node:path";var Ie=async(e,t)=>{await rL(sL(e),{recursive:!0,mode:448});let n=`${e}.anyray-tmp-${process.pid}-${tL()}`;try{await aL(n,t,{flag:"wx",mode:384}),await Ae(n,e),await nL(e,384)}finally{await oL(n,{force:!0}).catch(()=>{})}};import{homedir as iL}from"node:os";import{join as cL}from"node:path";var Gt=()=>cL(iL(),".agents","skills");var pL="codex",fL="Codex app / CLI / IDE",mL="https://chatgpt.com/backend-api/codex",hL="chatgpt-account-id,originator,session_id,user-agent,x-codex-turn-metadata,x-codex-window-id,x-client-request-id",yL="x-anyray-client-context-window",gL="x-anyray-client-auto-compact-limit",Zl=()=>process.env.CODEX_HOME?.trim()||Yl(lL(),".codex"),dr=()=>Yl(Zl(),"config.toml"),jl=()=>`${dr()}.anyray-bak`,om=()=>Yl(Zl(),"hooks.json"),lr=()=>Yl(Zl(),"anyray.config.toml"),eA=e=>xa(e,"PostToolUse",rC),tA=(e,t=!1)=>be({...e.metadata,tool:e.metadata.tool??"codex",intent:(t?void 0:process.env.ANYRAY_CODEX_INTENT?.trim())||e.metadata.intent||pL,intentLabel:(t?void 0:process.env.ANYRAY_CODEX_INTENT_LABEL?.trim())||e.metadata.intentLabel||fL}),pt=e=>`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,am=()=>process.env.ANYRAY_CODEX_MODEL?.trim()||void 0,pi=(e,t={})=>{let n=tA(e,t.ignoreEnv),r=ae(e,"openai"),o=t.auth==="command"&&!r,a=r?"openai":t.ignoreEnv?void 0:process.env.ANYRAY_CODEX_PROVIDER?.trim(),s=t.ignoreEnv?void 0:am(),i=e.clientKey,c=r?['"x-anyray-auth-mode" = "passthrough"',`"x-anyray-custom-host" = ${pt(mL)}`,`"x-anyray-forward-headers" = ${pt(hL)}`,...i?[`"x-anyray-api-key" = ${pt(e.clientKey)}`]:[]]:o?[]:[`"Authorization" = ${pt(`Bearer ${e.clientKey??e.placeholderKey}`)}`];return n&&c.push(`"x-anyray-metadata" = ${pt(n)}`),a&&c.push(`"x-anyray-provider" = ${pt(a)}`),t.modelContextWindow&&c.push(`"${yL}" = ${pt(String(t.modelContextWindow))}`),t.modelAutoCompactTokenLimit&&c.push(`"${gL}" = ${pt(String(t.modelAutoCompactTokenLimit))}`),["# Anyray always-on routing \u2014 plain `codex` routes through the gateway.","# Managed by anyray-connect (this block is owned by the tool).",'model_provider = "anyray"',...s?[`model = ${pt(s)}`]:[],"","[model_providers.anyray]",'name = "Anyray Gateway"',`base_url = ${pt(e.openaiBaseUrl)}`,'wire_api = "responses"',...r?["requires_openai_auth = true"]:[],...c.length>0?[`http_headers = { ${c.join(", ")} }`]:[],...o?["","[model_providers.anyray.auth]",`command = ${pt(t.authCommand??"")}`,...t.authArgs&&t.authArgs.length>0?[`args = [${t.authArgs.map(l=>pt(l)).join(", ")}]`]:[]]:[],...t.mcpServer?["","[mcp_servers.anyray]",`command = ${pt(t.mcpServer.command)}`,`args = [${t.mcpServer.args.map(pt).join(", ")}]`]:[]]},wL=["model_providers.anyray","mcp_servers.anyray"],bL=()=>am()?["model_provider","model"]:["model_provider"],nA={id:"codex",title:"Codex app / CLI / IDE",automatic:!0,skillsDir(){return Gt()},async syncOrgMcp({entry:e}){let t=dr(),n=await R(t)?await Da(t,"utf-8"):"",{text:r,outcome:o}=IC(n,e);return o!=="changed"?{changed:!1}:!n&&e===void 0?{changed:!1}:(await Ie(t,r),{changed:!0})},async detect(){let e=Zl(),t=await R(e);return{installed:t,detail:t?dr():`no ${e} directory`}},async apply(e,t){let n=dr(),r=om(),o=tA(e),a=ae(e,"openai"),s=am(),i=te(),c={},l=await R(r);try{l&&(c=await F(r))}catch(I){return{status:"manual",refused:!0,messages:[`Could not inspect the Codex hooks file ${r} (${I instanceof Error?I.name:"unknown error"}); routing was left unchanged. Repair the JSON and re-run Connect so the retired Anyray PostToolUse entry can be removed safely.`]}}let d=eA(c),u=[],p=[];d?(t.dryRun||(await q(r,c,{backup:!1}),await pe(r)),u.push(r),p.push(`Removed the retired Anyray Codex PostToolUse hook from ${r}; Codex does not expose a safe pre-transcript replacement seam for side-effecting tools.`)):p.push("Codex source-side tool-output trimming is not installed because its blocking PostToolUse result can turn a completed side effect into an apparent failure.");let m=await R(n),f=m?await Da(n,"utf-8"):"";if(!qC(f))return{status:"manual",refused:!0,...u.length>0?{changedFiles:u}:{},messages:[`Could not parse ${n} as TOML, so routing was left unchanged \u2014 writing the Anyray block into it would leave the file just as unreadable to Codex. Repair the file and re-run Connect.`,...p]};let h=Hl(f,"model_providers.anyray");if(h==="foreign")return{status:"manual",refused:!0,...u.length>0?{changedFiles:u}:{},messages:[`Refused to replace the existing model provider in ${n}: model_providers.anyray is not owned by Anyray Connect. Rename that provider or route it manually; the file was left unchanged.`,...p]};let w=Hl(f,"mcp_servers.anyray"),y=w==="foreign",g=rm(f,"model_context_window"),b=rm(f,"model_auto_compact_token_limit"),k=[`${n} \u2190 always-on default route (model_provider = anyray)`,`Base URL: ${e.openaiBaseUrl}/responses (wire_api = responses)`,"Plain `codex` now routes through the gateway \u2014 no --profile needed.","Codex app, CLI, and IDE extension share this config.toml route.",a?"Subscription mode: Codex keeps your ChatGPT sign-in; its OAuth token passes through the gateway to the ChatGPT backend (never stored). Requires being signed in with ChatGPT, not an API key.":`Auth: ${e.clientKey?"personal gateway key (written to the config, not shown here)":"placeholder token (gateway swaps in the server-held key)"}`,s?`Model: ${s} (pinned via ANYRAY_CODEX_MODEL)`:"Model: inherits your existing default. If the desktop or IDE model picker ignores custom providers, re-run with ANYRAY_CODEX_MODEL pinned.",b?`Context budget: follows model_auto_compact_token_limit=${b}.`:g?`Context budget: follows model_context_window=${g}.`:"Context budget: follows the request model; unknown models use the safe fallback.",`Attribution: ${o??"(none \u2014 pass --user)"}`,"Codex cloud/web tasks run on OpenAI infrastructure and cannot route through a local gateway."];if(t.dryRun)return k.push(d?`Would remove the retired Anyray Codex PostToolUse hook from ${r}.`:"Codex source-side tool-output trimming remains unavailable: its only replacement signal rejects the already-completed tool promise and is unsafe for side-effecting tools."),{status:"configured",messages:k};let A=[...u];k.push(...p),m&&!await R(jl())&&(await uL(n,jl()),await dL(jl(),384),k.push(`Backed up your original config to ${jl()}.`));let E=i&&!y?Ue("profile"):void 0;k.push(y?`MCP name conflict in ${n}: mcp_servers.anyray is not owned by Anyray Connect, so it was left untouched.`:E?"Registered the Anyray retrieval MCP server (anyray_retrieve) for explicit recovery of stashed context.":`Skipped the Anyray MCP server \u2014 anyray-connect is running from a temporary path (${Pe()}). Re-run via the installer or a global install to enable retrieval.`);let O=f;h==="orphaned"&&(O=Gl(O,"model_providers.anyray"),k.push(`Repaired the Anyray block in ${n}: its end marker was missing and model_providers.anyray had been moved out of it, so routing was re-anchored. Codex rewrites this file itself, which is how the marker goes missing.`)),w==="orphaned"&&(O=Gl(O,"mcp_servers.anyray"));let S=Kl(O,pi(e,{mcpServer:E,modelContextWindow:g,modelAutoCompactTokenLimit:b}),bL());return await Ie(n,S),A.push(n),await R(lr())&&(await QC(lr(),{force:!0}),A.push(lr()),k.push(`Removed the old opt-in profile ${lr()} (the default route replaces it).`)),{status:"configured",messages:k,changedFiles:A,...y?{errorClass:"mcp_foreign"}:{}}},async pointsAt(e){let t=dr();if(!await R(t))return!1;try{let n=await Da(t,"utf-8"),r=`base_url = ${pt(`${e}/v1`)}`;return n.includes("[model_providers.anyray]")&&n.includes(r)}catch{return!1}},async configuredKeyIsCurrent(e){return Ht([dr()],e)},async mcpStatus(){if(!te())return{registered:!1,command:null,reason:"ephemeral-runtime"};let e=dr();if(!await R(e))return{registered:!1,command:null,reason:"no-config"};try{let t=await Da(e,"utf-8");if(!XC(t,"mcp_servers.anyray"))return{registered:!1,command:null,reason:"absent"};let n=t.match(/\[mcp_servers\.anyray\]\r?\ncommand = ("(?:[^"\\]|\\.)*")/),r=null;if(n)try{r=JSON.parse(n[1])}catch{r=null}return{registered:!0,command:r}}catch{return{registered:!1,command:null,reason:"unreadable"}}},async inferenceAuthLanes(){try{let e=await Da(dr(),"utf-8"),t=nm(e);if(!t||!t.includes("[model_providers.anyray]"))return["unknown"];if(/^requires_openai_auth = true$/m.test(t)||t.includes('"x-anyray-auth-mode" = "passthrough"'))return["subscription"];if(t.includes('"Authorization" = "Bearer ')||t.includes("[model_providers.anyray.auth]"))return["api_key"]}catch{}return["unknown"]},async revert(e){let t=dr(),n=await R(t),r=await R(lr()),o=await R(om());if(!n&&!r&&!o)return{status:"not-found",messages:["nothing to revert"]};let a=[],s=[];if(o){let i=om(),c;try{c=await F(i)}catch(l){return{status:"manual",messages:[`Could not inspect the Codex hooks file ${i} (${l instanceof Error?l.name:"unknown error"}); routing was left unchanged. Repair the JSON and re-run --revert.`]}}eA(c)&&(e.dryRun||(await q(i,c,{backup:!1}),await pe(i)),s.push(i),a.push(e.dryRun?`would remove the retired Anyray Codex PostToolUse hook from ${i}`:`removed the retired Anyray Codex PostToolUse hook from ${i}`))}if(n){let i=await Da(t,"utf-8"),c=wL.reduce((d,u)=>Hl(d,u)==="orphaned"?Gl(d,u):d,i),l=Vl(c)??(c===i?null:c);l!==null&&(e.dryRun||await Ie(t,l),s.push(t),a.push(e.dryRun?`would remove the Anyray default route from ${t}`:`removed the Anyray default route from ${t}`))}return r&&(e.dryRun||await QC(lr(),{force:!0}),s.push(lr()),a.push(e.dryRun?`would remove the old opt-in profile ${lr()}`:`removed the old opt-in profile ${lr()}`)),s.length===0?{status:"not-found",messages:["nothing to revert"]}:(!e.dryRun&&s.includes(t)&&await pe(t),{status:"reverted",messages:a,changedFiles:s})}};import{homedir as xL}from"node:os";import{join as RL}from"node:path";import{readFile as sA,rm as im}from"node:fs/promises";import{readFile as CL,writeFile as rA,access as AL}from"node:fs/promises";import{homedir as kL}from"node:os";import{join as sm}from"node:path";var vL="# >>> anyray connect >>>",SL="# <<< anyray connect <<<",fi=e=>e?{begin:`# >>> anyray connect (${e}) >>>`,end:`# <<< anyray connect (${e}) <<<`}:{begin:vL,end:SL},ft=()=>{let e=kL(),t=process.env.SHELL||"";return t.includes("zsh")?sm(e,".zshrc"):t.includes("bash")?sm(e,".bashrc"):sm(e,".profile")},Jl=async e=>{try{return await AL(e),await CL(e,"utf-8")}catch{return""}},IL=/^export\s+(ANTHROPIC_(BASE_URL|AUTH_TOKEN|API_KEY|MODEL|DEFAULT_[A-Z_]+)|OPENAI_(BASE_URL|API_KEY)|ANYRAY_[A-Z0-9_]+)=/,EL=(e,t,n=[])=>{let{begin:r,end:o}=fi(t),a=e.indexOf(r);if(a===-1)return e;let s=e.indexOf(o,a+r.length),i=e.indexOf(r,a+r.length);i!==-1&&(s===-1||i<s)&&(s=-1);let c=a;for(;c>0&&e[c-1]===`
|
|
76
|
-
`;)c-=1;if(s===-1){let d=new Set(n.map(
|
|
77
|
-
`),p=0;for(;p<u.length;){let
|
|
78
|
-
`)
|
|
76
|
+
`;)c-=1;if(s===-1){let d=new Set(n.map(h=>h.trim())),u=e.slice(c).split(`
|
|
77
|
+
`),p=0;for(;p<u.length;){let h=u[p].trim(),w=h===""||h.startsWith("#")||d.has(h)||IL.test(h);if(p>0&&!w)break;p+=1}let m=e.slice(0,c),f=u.slice(p).join(`
|
|
78
|
+
`);return m.length===0||f.length===0?m+f:`${m}
|
|
79
|
+
${f}`}let l=s+o.length;return e[l]===`
|
|
79
80
|
`&&(l+=1),e.slice(0,c)+e.slice(l)},oA=(e,t,n=[])=>{let r=e;for(;;){let o=EL(r,t,n);if(o===r)return r;r=o}},Xl=async(e,t,n)=>{let r=await Jl(e),{begin:o,end:a}=fi(n),s=oA(r,n,t).replace(/\s*$/,""),i=[o,...t,a].join(`
|
|
80
81
|
`),c=s?`${s}
|
|
81
82
|
|
|
@@ -316,7 +317,7 @@ Options:
|
|
|
316
317
|
of the table (listing only).
|
|
317
318
|
--help Show this help.
|
|
318
319
|
`,PG=e=>{let t={json:!1,help:!1};for(let n of e)n==="--help"||n==="-h"?t.help=!0:n==="--json"?t.json=!0:n.startsWith("-")?t.error=`unknown option: ${n}`:t.modelId?t.error=`unexpected argument: ${n}`:t.modelId=n;return t},DG=e=>{let t=se.find(n=>n.id===Go);if(!t)throw new Error("copilot-cli adapter missing from REGISTRY");return t.apply(e,{dryRun:!1,explicit:!0})},LG=e=>{let t=r=>r>=1e3?`${Math.round(r/1e3)}k`:String(r);return[...e.maxPromptTokens?[`${t(e.maxPromptTokens)} in`]:[],...e.maxOutputTokens?[`${t(e.maxOutputTokens)} out`]:[]].join(" / ")},NG=(e,t,n)=>`${e.origin.replace(/\/+$/,"")}/v1${Mi(t)}/${fr(n)==="responses"?"responses":"chat/completions"}`,WE=async(e=[],t={})=>{let n=PG(e);if(n.help)return process.stdout.write(FE),0;if(n.error)return D(n.error),process.stdout.write(FE),1;let r=await(t.loadTarget??Xe)();if(!r)return D("Not enrolled \u2014 run `anyray-connect` first."),1;let{target:o}=r,a=await(t.discoverSeatToken??xd)({allowKeychainPrompt:!0});if(!a.token)return D("No Copilot sign-in Connect can read \u2014 run `copilot` once and `/login` (say YES to storing credentials locally), then retry."),1;let s=a.token.token,i=a.capiSegment??"default",c=await(t.fetchCatalog??ja)(s,{},i,{laneOrigin:o.origin.replace(/\/+$/,""),...o.clientKey?{clientKey:o.clientKey}:{}}),l=oh(c);if(l.length===0)return D("Could not fetch your seat's model catalog from GitHub (offline, or the sign-in lost its Copilot seat)."),1;if(!n.modelId){let m=process.env.COPILOT_MODEL?.trim();if(n.json)return process.stdout.write(`${JSON.stringify({origin:o.origin,current:m??null,models:l.map(f=>({id:f.id,wire:fr(f.id),...f.maxPromptTokens?{maxPromptTokens:f.maxPromptTokens}:{},...f.maxOutputTokens?{maxOutputTokens:f.maxOutputTokens}:{}}))})}
|
|
319
|
-
`),0;C(J(`Copilot models your seat serves (via ${o.origin})`));for(let f of l){let h=f.id===m?"*":" ",w=LG(f);C(` ${h} ${f.id.padEnd(24)}${w?v(w):""}`)}return M("Switch the startup model: `anyray-connect models <id>` (per launch: `copilot --model <id>`)."),M("The CLI's own /models cannot list models on a custom provider \u2014 this list is the picker."),0}let d=l.find(m=>m.id===n.modelId);if(!d)return D(`'${n.modelId}' is not in your seat's catalog \u2014 run \`anyray-connect models\` to list it.`),1;let u=await(t.probeChat??Ed)(NG(o,i,d.id),{...rh(),authorization:`Bearer ${s}`,...o.clientKey?{"x-anyray-api-key":o.clientKey}:{}},d.id);if(u==="rejected")return D(`GitHub refuses chat as '${d.id}' for this sign-in (it is in the catalog, but chat entitlement is narrower). Pick another id from \`anyray-connect models\`.`),1;u==="unreachable"?P("Could not verify the model over the lane (offline?) \u2014 applying anyway."):B(`'${d.id}' answers on your lane.`);let p=process.env.ANYRAY_COPILOT_MODEL;process.env.ANYRAY_COPILOT_MODEL=d.id;try{let m=await(t.applyCopilotCli??DG)(o);if(m.status!=="configured"){for(let f of m.messages)C(f);return D("Apply did not complete \u2014 see above."),1}}finally{p===void 0?delete process.env.ANYRAY_COPILOT_MODEL:process.env.ANYRAY_COPILOT_MODEL=p}return B(`Copilot CLI startup model \u2192 ${d.id}`),M("Open a fresh terminal (or re-source your profile), then run `copilot`."),0};import{createReadStream as D1}from"node:fs";import{spawnSync as gx}from"node:child_process";import{createHash as L1}from"node:crypto";import{access as wx,chmod as pg,copyFile as N1,lstat as $1,mkdir as M1,mkdtemp as bx,readFile as zu,rename as B1,rm as fo,stat as F1,writeFile as W1}from"node:fs/promises";import{constants as Cx}from"node:fs";import{platform as As,tmpdir as U1}from"node:os";import{dirname as H1,isAbsolute as G1,join as Zu}from"node:path";import{z as Ve}from"zod";var Le="0.11.
|
|
320
|
+
`),0;C(J(`Copilot models your seat serves (via ${o.origin})`));for(let f of l){let h=f.id===m?"*":" ",w=LG(f);C(` ${h} ${f.id.padEnd(24)}${w?v(w):""}`)}return M("Switch the startup model: `anyray-connect models <id>` (per launch: `copilot --model <id>`)."),M("The CLI's own /models cannot list models on a custom provider \u2014 this list is the picker."),0}let d=l.find(m=>m.id===n.modelId);if(!d)return D(`'${n.modelId}' is not in your seat's catalog \u2014 run \`anyray-connect models\` to list it.`),1;let u=await(t.probeChat??Ed)(NG(o,i,d.id),{...rh(),authorization:`Bearer ${s}`,...o.clientKey?{"x-anyray-api-key":o.clientKey}:{}},d.id);if(u==="rejected")return D(`GitHub refuses chat as '${d.id}' for this sign-in (it is in the catalog, but chat entitlement is narrower). Pick another id from \`anyray-connect models\`.`),1;u==="unreachable"?P("Could not verify the model over the lane (offline?) \u2014 applying anyway."):B(`'${d.id}' answers on your lane.`);let p=process.env.ANYRAY_COPILOT_MODEL;process.env.ANYRAY_COPILOT_MODEL=d.id;try{let m=await(t.applyCopilotCli??DG)(o);if(m.status!=="configured"){for(let f of m.messages)C(f);return D("Apply did not complete \u2014 see above."),1}}finally{p===void 0?delete process.env.ANYRAY_COPILOT_MODEL:process.env.ANYRAY_COPILOT_MODEL=p}return B(`Copilot CLI startup model \u2192 ${d.id}`),M("Open a fresh terminal (or re-source your profile), then run `copilot`."),0};import{createReadStream as D1}from"node:fs";import{spawnSync as gx}from"node:child_process";import{createHash as L1}from"node:crypto";import{access as wx,chmod as pg,copyFile as N1,lstat as $1,mkdir as M1,mkdtemp as bx,readFile as zu,rename as B1,rm as fo,stat as F1,writeFile as W1}from"node:fs/promises";import{constants as Cx}from"node:fs";import{platform as As,tmpdir as U1}from"node:os";import{dirname as H1,isAbsolute as G1,join as Zu}from"node:path";import{z as Ve}from"zod";var Le="0.11.204";import{createWriteStream as r1}from"node:fs";import{spawnSync as ex}from"node:child_process";import{chmod as tx,copyFile as ng,lstat as rg,mkdir as og,readdir as Vu,realpath as Ku,rename as Uu,rm as Nt,stat as nx,symlink as o1,writeFile as a1}from"node:fs/promises";import{createHash as s1}from"node:crypto";import{basename as Hu,dirname as gn,join as ys}from"node:path";import{Readable as i1}from"node:stream";import{pipeline as c1}from"node:stream/promises";var $G=["hook_registration","mcp_registration","hook_binary","beacon_target"],sa=e=>e.status==="configured"||e.status==="queued",ia=async(e,t=se)=>{let n=new Set(e),r=[];for(let o of t)if(n.has(o.id))try{(await o.detect()).installed&&r.push(o)}catch{}return r},hs=async(e,t,n=se)=>{let r=[];for(let o of await ia(e,n))if(o.pointsAt)try{if(o.automaticRepairAllowed&&!await o.automaticRepairAllowed())continue;await o.pointsAt(t)||r.push(o)}catch{}return r},zy=async(e,t=se)=>{let n=[];for(let r of await ia(e,t))if(r.integrationStatus)try{n.push({adapter:r,checks:await r.integrationStatus()})}catch{n.push({adapter:r,checks:Object.fromEntries($G.map(o=>[o,"unreadable"]))})}return n},UE=e=>e.filter(t=>!t.integrationStatus),MG=e=>{let t=e?.code;return t==="EACCES"||t==="EPERM"||t==="EROFS"?"settings_not_writable":"apply_threw"},zt=async(e,t)=>{let n=[];for(let r of e)try{let o=await r.apply(t,{dryRun:!1});n.push({id:r.id,title:r.title,status:o.status,...o.errorClass?{errorClass:o.errorClass}:{}})}catch(o){let a=MG(o);if(r.classifyApplyError)try{a=r.classifyApplyError(o)}catch{}n.push({id:r.id,title:r.title,status:"failed",errorClass:a})}return n};import{constants as HE}from"node:fs";import{access as BG,chmod as FG,lstat as WG,mkdir as UG,open as HG,readFile as GG,realpath as KG,rm as VG,stat as KE,writeFile as jG}from"node:fs/promises";import{randomUUID as YG}from"node:crypto";import{platform as Qy}from"node:os";import{dirname as ZG,join as JG,posix as XG,win32 as VE}from"node:path";var hc="/usr/local/bin/anyray-credential-helper",yc="C:\\Program Files\\Anyray\\anyray-credential-helper.cmd",$u="/usr/local/bin/anyray-bootstrap-headers-helper",Mu="C:\\Program Files\\Anyray\\anyray-bootstrap-headers-helper.cmd",mc="Managed by anyray-connect desktop helper; do not edit.",zG=`anyray-connect desktop helper <--write|--print> --bin <absolute> [options]
|
|
320
321
|
|
|
321
322
|
Create the helpers required by Claude Desktop and Codex fleet artifacts: the
|
|
322
323
|
credential helper (inferenceCredentialHelper, also used by Codex) and the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anyray-connect",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.204",
|
|
4
4
|
"description": "Anyray connect — points local coding tools (Claude Code, Cursor, Windsurf, SDKs) at the Anyray gateway through supported configuration and enrolled personal authentication.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|