@sleep2agi/agent-node 2.5.0-preview.29 → 2.5.0-preview.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -138,7 +138,7 @@ ${B}`;break;case"retry":if(J_(B))Q[C]=B;break;case"id":if(G_(B))Q[C]=B;break;cas
|
|
|
138
138
|
`),kP(I,A)}catch(C){try{if(T4(I))PP(I)}catch{}throw C}}function zZ(A){if(!T4(A))return{backedUp:!1};return WZ(A,`${A}.prev`),{backedUp:!0}}function HZ(A){let Q;try{let C=VZ(A,"utf-8");return{config:JSON.parse(C),source:"primary"}}catch(C){Q=String(C?.message||C)}let I=`${A}.prev`;if(!T4(I))throw Error(`config.json parse failed (${Q}) and no .prev backup exists`);try{let C=VZ(I,"utf-8"),B=JSON.parse(C);return WZ(I,A),{config:B,source:"prev",primaryError:Q}}catch(C){throw Error(`config.json parse failed (${Q}); .prev parse also failed (${String(C?.message||C)})`)}}function RZ(A){if(typeof A!=="string")return null;let Q=A.indexOf(":");if(Q<0)return A||null;if(Q===0||Q===A.length-1)return null;return A.slice(0,Q)}function vZ(A,Q){let I=JSON.parse(JSON.stringify(A||{}));if(Q.model!==void 0)I.model=Q.model;if(Q.flags)I.flags={...I.flags||{},...Q.flags};if(Q.channels!==void 0){let C=new Map,B=Array.isArray(I.channels)?I.channels:[];for(let E of B){let g=RZ(E);if(g&&!C.has(g))C.set(g,String(E))}I.channels=Q.channels.map((E)=>C.get(E)??E)}return I}function jZ(A,Q,I){let C={model:typeof A?.model==="string"?A.model:null,flags:{},config_revision:I,config_update_capable:Q,role:typeof A?.role==="string"?A.role:null,channels:(()=>{let F=A?.channels;if(!Array.isArray(F))return[];let Y=new Set,G=[];for(let J of F){let N=RZ(J);if(!N||Y.has(N))continue;Y.add(N),G.push(N)}return G.sort()})()},B={},E=A?.runtimes_supported;if(Array.isArray(E)&&E.every((F)=>typeof F==="string"))B.runtimes_supported=E;let g=A?.allowed_secret_keys;if(Array.isArray(g)&&g.every((F)=>typeof F==="string"))B.allowed_secret_keys=g;let D=A?.max_concurrent_children;if(typeof D==="number"&&Number.isFinite(D)&&D>0)B.max_concurrent_children=D;if(Object.keys(B).length>0)C.daemon_capabilities=B;let U=A?.flags||{};for(let F of LZ)if(F in U)C.flags[F]=U[F];return C}function _Z(A){let Q=A.parsedAccess?.allowFrom,I=bP({channel:"telegram",channelDir:A.channelDir,allowFrom:Q});return{allowFromRaw:Q,bootWarn:I}}function SZ(A){if(Array.isArray(A))return{list:A.filter((I)=>typeof I==="string"&&I.length>0).map((I)=>String(I)),malformed:!1};if(A===void 0||A===null)return{list:[],malformed:!1};return{list:[],malformed:!0}}function qZ(A){let{list:Q,malformed:I}=SZ(A.allowFrom);if(Q.length===0)return{allow:!1,kind:"empty-fail-closed",reason:I?"allowFrom malformed (not a string[]) — fail-closed":'allowFrom empty — fail-closed (set ["*"] to open to all, or add specific ids)'};if(Q.includes("*"))return{allow:!0,kind:"wildcard-allow",reason:'allowFrom=["*"]'};let C=A.senderId||"",B=(A.senderUsername||"").trim();if(C&&Q.includes(C))return{allow:!0,kind:"explicit-allow",reason:`sender id ${C} in allowFrom`};if(B&&Q.includes(B))return{allow:!0,kind:"explicit-allow",reason:`sender username ${B} in allowFrom`};return{allow:!1,kind:"denied",reason:`sender id=${C} username=${B||"(none)"} not in allowFrom`}}function bP(A){let{list:Q,malformed:I}=SZ(A.allowFrom);if(Q.length>0)return null;let C=I?"malformed (not a string[])":"empty";return`[${A.channel}] FAIL-CLOSED: ${A.channelDir}/access.json allowFrom is ${C} — `+'ALL inbound messages will be denied. To open the channel: edit access.json and set `"allowFrom": ["*"]` for any-sender, or add specific sender ids. Pre-v0.11 behaviour was fail-open; this is a deliberate security change (see release notes).'}import{randomBytes as hP}from"crypto";import{closeSync as eI,constants as tA,fchmodSync as fP,fstatSync as ZD,fsyncSync as TZ,lstatSync as wE,openSync as ME,readFileSync as OZ,realpathSync as O4,renameSync as uP,rmSync as mP,writeFileSync as cP}from"fs";import{basename as iP,dirname as k4,resolve as lP}from"path";class sA extends Error{}function VB(A,Q){return A.dev===Q.dev&&A.ino===Q.ino}function kZ(A){try{return wE(A)}catch(Q){if(Q?.code==="ENOENT")return;throw Q}}function hF(A,Q){let I=lP(A),C=wE(I);if(C.isSymbolicLink()||!C.isDirectory()||O4(I)!==I)throw new sA(`OpenCode state refuses ${Q} at ${I}: expected a canonical real directory`);let B;try{B=ME(I,tA.O_RDONLY|(tA.O_DIRECTORY||0)|(tA.O_NOFOLLOW||0));let E=ZD(B),g=wE(I),D=process.getuid?.();if(!E.isDirectory()||g.isSymbolicLink()||!VB(C,E)||!VB(E,g)||O4(I)!==I)throw new sA(`OpenCode state refuses ${Q} at ${I}: directory identity changed`);if(D===void 0||E.uid!==D||(E.mode&511)!==448)throw new sA(`OpenCode state refuses ${Q} at ${I}: owner/mode must be current uid/0700`);return E}finally{if(B!==void 0)eI(B)}}function bF(A,Q,I=!1){let C=kZ(A);if(!C){if(I)return;throw new sA(`OpenCode state refuses ${Q} at ${A}: file is missing`)}if(C.isSymbolicLink()||!C.isFile()||C.nlink!==1||O4(A)!==A)throw new sA(`OpenCode state refuses ${Q} at ${A}: expected a canonical single-link regular file`);let B;try{B=ME(A,tA.O_RDONLY|(tA.O_NOFOLLOW||0));let E=ZD(B),g=wE(A),D=process.getuid?.();if(!E.isFile()||E.nlink!==1||g.isSymbolicLink()||!VB(C,E)||!VB(E,g))throw new sA(`OpenCode state refuses ${Q} at ${A}: file identity changed`);if(D===void 0||E.uid!==D||(E.mode&511)!==384)throw new sA(`OpenCode state refuses ${Q} at ${A}: owner/mode must be current uid/0600`);return E}catch(E){if(E?.code==="ELOOP")throw new sA(`OpenCode state refuses ${Q} at ${A}: symlinks are not allowed`);throw E}finally{if(B!==void 0)eI(B)}}function VE(A,Q){hF(k4(A),`${Q} parent`);let I=bF(A,Q),C=ME(A,tA.O_RDONLY|(tA.O_NOFOLLOW||0));try{let B=ZD(C),E=wE(A);if(!B.isFile()||B.nlink!==1||!VB(I,B)||!VB(B,E))throw new sA(`OpenCode state refuses ${Q} at ${A}: file changed before read`);return{body:OZ(C,"utf8"),stat:B}}finally{eI(C)}}function fF(A,Q,I,C){let B=k4(A);hF(B,`${I} parent`);let E=bF(A,I,!0);if(C&&(!E||!VB(C,E)))throw new sA(`OpenCode state refuses ${I} at ${A}: target changed after read`);let g=`${B}/.${iP(A)}.${hP(12).toString("hex")}.tmp`,D;try{D=ME(g,tA.O_WRONLY|tA.O_CREAT|tA.O_EXCL|(tA.O_NOFOLLOW||0),384),cP(D,Q,"utf8"),fP(D,384),TZ(D);let U=ZD(D),F=process.getuid?.();if(!U.isFile()||U.nlink!==1||F===void 0||U.uid!==F)throw new sA(`OpenCode state refuses ${I}: temporary file is not owner-controlled`);eI(D),D=void 0,hF(B,`${I} parent`);let Y=bF(A,I,!0);if(E===void 0!==(Y===void 0)||E&&Y&&!VB(E,Y))throw new sA(`OpenCode state refuses ${I} at ${A}: target changed before atomic rename`);uP(g,A),bF(A,I);let G=ME(B,tA.O_RDONLY|(tA.O_DIRECTORY||0)|(tA.O_NOFOLLOW||0));try{TZ(G)}finally{eI(G)}}catch(U){if(D!==void 0)try{eI(D)}catch{}throw mP(g,{force:!0}),U}}function PZ(A){for(let Q of[A,`${A}.prev`]){let I=kZ(Q);if(!I)continue;if(I.isSymbolicLink()||!I.isFile()||I.nlink!==1)throw new sA(`config state refuses ${Q}: symlinks, hardlinks, and non-files are not allowed`);let C=ME(Q,tA.O_RDONLY|(tA.O_NOFOLLOW||0));try{let B=ZD(C),E=wE(Q);if(!B.isFile()||B.nlink!==1||!VB(I,B)||!VB(B,E))throw new sA(`config state refuses ${Q}: identity changed`);try{let g=JSON.parse(OZ(C,"utf8"));if(g?.runtime==="opencode-cli"||g?.runtime==="opencode")return!0}catch{}}finally{eI(C)}}return!1}function xZ(A){hF(k4(A),"node workDir");let Q,I;try{return Q=VE(A,"config.json"),{config:JSON.parse(Q.body),source:"primary"}}catch(E){if(E instanceof sA)throw E;I=String(E?.message||E)}let C;try{C=VE(`${A}.prev`,"config.json.prev")}catch(E){throw Error(`OpenCode config parse failed (${I}) and no safe .prev backup exists: ${E?.message||E}`)}let B;try{B=JSON.parse(C.body)}catch(E){throw Error(`OpenCode config parse failed (${I}); safe .prev parse also failed (${E?.message||E})`)}return fF(A,JSON.stringify(B,null,2)+`
|
|
139
139
|
`,"config.json",Q?.stat),{config:B,source:"prev",primaryError:I}}function yZ(A){return JSON.parse(VE(A,"config.json").body)}function bZ(A,Q){let I=VE(A,"config.json");fF(A,JSON.stringify(Q,null,2)+`
|
|
140
140
|
`,"config.json",I.stat)}function hZ(A){let Q=VE(A,"config.json");return fF(`${A}.prev`,Q.body,"config.json.prev"),{backedUp:!0}}function fZ(A,Q){let I=VE(A,"config.json"),C=JSON.parse(I.body);if(C.session===Q)return!1;return C.session=Q,fF(A,JSON.stringify(C,null,2)+`
|
|
141
|
-
`,"config.json",I.stat),!0}f4();import{mkdirSync as Bq,appendFileSync as Rs}from"fs";var __dirname="/tmp/agent-orchestra-
|
|
141
|
+
`,"config.json",I.stat),!0}f4();import{mkdirSync as Bq,appendFileSync as Rs}from"fs";var __dirname="/tmp/agent-orchestra-release-step1/agent-node/src";var oJ=Qs(),Bs=process.env.ANET_OPENCODE_BIN,fJ=process.env.ANET_OPENCODE_VERSION,Is=process.env.PATH||"",_S=process.env.ANET_OPENCODE_SAFE_BASE,NQ=process.argv.slice(2),DA={},aS=[];if(NQ.length===1&&NQ[0]==="--print-entrypoint")console.log(et(process.argv[1])),process.exit(0);var tS="2.1.0";try{let A=new URL(".",import.meta.url).pathname;for(let Q of["../package.json","../../package.json"])try{let I=JSON.parse(fI(MA(A,Q),"utf-8"));if(I.version){tS=I.version;break}}catch{}}catch{}for(let A=0;A<NQ.length;A++){if(NQ[A]==="--version"||NQ[A]==="-v")console.log(`agent-node v${tS}`),process.exit(0);if(NQ[A]==="-h"||NQ[A]==="--help")console.log(`
|
|
142
142
|
@sleep2agi/agent-node — AI Agent 节点,一行命令加入 CommHub 网络
|
|
143
143
|
|
|
144
144
|
用法:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sleep2agi/agent-node",
|
|
3
|
-
"version": "2.5.0-preview.
|
|
3
|
+
"version": "2.5.0-preview.30",
|
|
4
4
|
"description": "AI Agent runtime for CommHub networks. Supports Claude Code CLI, Claude Agent SDK, Codex SDK, Codex app-server, Grok Build ACP, and OpenCode CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-node": "dist/cli.js"
|