@sleep2agi/agent-node 2.3.6-preview.2 → 2.3.7

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.
Files changed (2) hide show
  1. package/dist/cli.js +1 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -88,7 +88,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
88
88
  Runtime:
89
89
  claude-agent-sdk Claude Agent SDK — Claude/MiniMax/Anthropic 兼容 API
90
90
  codex-sdk Codex SDK — GPT-5.4,复用 codex 登录态
91
- `),process.exit(0);if(s[r]==="--new-session"){E["new-session"]="true";continue}if(s[r]==="--channel"&&r+1<s.length){N4.push(s[++r]);continue}if(s[r].startsWith("--")&&r+1<s.length)E[s[r].slice(2)]=s[++r]}function P4(r){return r.replace(/^~(?=\/|$)/,j4)}function xb(r){let i=r.indexOf(":");if(i<0)return{type:r,raw:r};if(i===0||i===r.length-1)throw Error(`invalid channel spec "${r}" (expected type or type:path)`);return{type:r.slice(0,i),path:P4(r.slice(i+1)),raw:r}}function zn(r){if(!ic(r))return null;try{return JSON.parse(ei(r,"utf-8"))}catch{return null}}var X={},tr="";if(E.config){let r=E.config.startsWith("/")?E.config:T(process.cwd(),E.config),i=zn(r);if(i)X=i,tr=r,console.log(`[agent-node] Config: ${r}`)}var F=E.alias||process.env.COMMHUB_ALIAS||process.env.ALIAS||X.alias;if(!E.config&&F){let r=T(process.cwd(),".anet","nodes",F,"config.json"),i=T(process.cwd(),".anet","profiles",`${F}.json`),v=ic(r)?r:i,o=zn(v);if(o)X={...o,...X},tr=v,console.log(`[agent-node] Config: ${v}`)}var Dn=zn(T(j4,".anet","config.json"))||{};if(Dn.hub&&!X.hub)X.hub=Dn.hub;if(Dn.token&&!X.token)X.token=Dn.token;if(!E.config&&!Object.keys(X).length){let r=zn(T(process.cwd(),".agent-node.json"));if(r)X=r,console.log("[agent-node] 配置: .agent-node.json")}if(X.env&&typeof X.env==="object"){let r=!1;for(let[i,v]of Object.entries(X.env)){if(process.env[i])continue;if(typeof v==="string"){if(process.env[i]=P4(v),/^(sk-|utok_|ntok_|atok_|ak-|gsk_|key-|Bearer\s)/i.test(v)||i.match(/(_TOKEN|_KEY|_SECRET|AUTH)$/i))r=!0}else if(v&&typeof v==="object"&&typeof v._envRef==="string"){let o=v._envRef,n=process.env[o];if(n===void 0||n==="")console.error(`[anet] FATAL: config.json env.${i} references env var "${o}" but it is not set in this shell.`),console.error(`[anet] Fix: export ${o}=<your-value> then re-run anet node start`),console.error("[anet] (set the value matching the previous plain secret you migrated away from)"),process.exit(1);process.env[i]=n}}if(r)console.warn("[anet] ⚠ DEPRECATED: config.json env contains plain secret values that are persisted on disk."),console.warn("[anet] Migrate to envRef form to keep secrets out of the JSON file:"),console.warn(`[anet] anet node migrate-token-to-envref ${F||"<alias>"}`),console.warn("[anet] Or inspect candidates across all nodes:"),console.warn("[anet] anet doctor")}if(!F)console.error(`错误: 必须指定 --alias
91
+ `),process.exit(0);if(s[r]==="--new-session"){E["new-session"]="true";continue}if(s[r]==="--channel"&&r+1<s.length){N4.push(s[++r]);continue}if(s[r].startsWith("--")&&r+1<s.length)E[s[r].slice(2)]=s[++r]}function P4(r){return r.replace(/^~(?=\/|$)/,j4)}function xb(r){let i=r.indexOf(":");if(i<0)return{type:r,raw:r};if(i===0||i===r.length-1)throw Error(`invalid channel spec "${r}" (expected type or type:path)`);return{type:r.slice(0,i),path:P4(r.slice(i+1)),raw:r}}function zn(r){if(!ic(r))return null;try{return JSON.parse(ei(r,"utf-8"))}catch{return null}}var X={},tr="";if(E.config){let r=E.config.startsWith("/")?E.config:T(process.cwd(),E.config),i=zn(r);if(i)X=i,tr=r,console.log(`[agent-node] Config: ${r}`)}var F=E.alias||process.env.COMMHUB_ALIAS||process.env.ALIAS||X.alias;if(!E.config&&F){let r=T(process.cwd(),".anet","nodes",F,"config.json"),i=T(process.cwd(),".anet","profiles",`${F}.json`),v=ic(r)?r:i,o=zn(v);if(o)X={...o,...X},tr=v,console.log(`[agent-node] Config: ${v}`)}var Dn=zn(T(j4,".anet","config.json"))||{};if(Dn.hub&&!X.hub)X.hub=Dn.hub;if(Dn.token&&!X.token)X.token=Dn.token;if(!E.config&&!Object.keys(X).length){let r=zn(T(process.cwd(),".agent-node.json"));if(r)X=r,console.log("[agent-node] 配置: .agent-node.json")}if(X.env&&typeof X.env==="object"){let r=!1;for(let[i,v]of Object.entries(X.env)){if(typeof v==="string"&&(/^(sk-|utok_|ntok_|atok_|ak-|gsk_|key-|Bearer\s)/i.test(v)||i.match(/(_TOKEN|_KEY|_SECRET|AUTH)$/i)))r=!0;if(process.env[i])continue;if(typeof v==="string")process.env[i]=P4(v);else if(v&&typeof v==="object"&&typeof v._envRef==="string"){let o=v._envRef,n=process.env[o];if(n===void 0||n==="")console.error(`[anet] FATAL: config.json env.${i} references env var "${o}" but it is not set in this shell.`),console.error(`[anet] Fix: export ${o}=<your-value> then re-run anet node start`),console.error("[anet] (set the value matching the previous plain secret you migrated away from)"),process.exit(1);process.env[i]=n}}if(r)console.warn("[anet] ⚠ DEPRECATED: config.json env contains plain secret values that are persisted on disk."),console.warn("[anet] Migrate to envRef form to keep secrets out of the JSON file:"),console.warn(`[anet] anet node migrate-token-to-envref ${F||"<alias>"}`),console.warn("[anet] Or inspect candidates across all nodes:"),console.warn("[anet] anet doctor")}if(!F)console.error(`错误: 必须指定 --alias
92
92
  用法: npx @sleep2agi/agent-node --alias "我的Agent"`),process.exit(1);var J4=E.runtime||process.env.RUNTIME||X.runtime||"claude-agent-sdk",Rb={"claude-agent-sdk":"claude","claude-sdk":"claude","agent-sdk":"claude",claude:"claude","codex-sdk":"codex",codex:"codex"},wn=Rb[J4]||"claude",Zb=J4,gi=E.url||E.hub||process.env.COMMHUB_URL||X.hub||"http://127.0.0.1:9200",Or=E.model||process.env.MODEL||X.model,b4={type:"preset",preset:"claude_code"};var rc=E.tools||(Array.isArray(X.tools)?X.tools.join(","):X.tools)||"",sg=rc==="all"?null:rc.split(",").filter(Boolean),Fr=rc==="all"?b4:sg&&sg.length?sg:b4,db=parseInt(E["max-turns"]||X.flags?.maxTurns||X.maxTurns||"50"),U4=parseFloat(E["max-budget"]||X.flags?.maxBudgetUsd||X.maxBudgetUsd||"0"),Rt=parseInt(E["claude-timeout-ms"]||process.env.CLAUDE_TIMEOUT_MS||X.flags?.claudeTimeoutMs||X.claudeTimeoutMs||"120000"),Cb=E["new-session"]==="true",Br=Cb?"":E.session||X.session||X.resume||X.sessionId||"",vi=E.prompt||X.systemPrompt||"",gr=X.token||Dn.token||process.env.COMMHUB_TOKEN||"";if(process.env.COMMHUB_TOKEN&&X.token&&process.env.COMMHUB_TOKEN!==X.token)console.warn(`[${F}] ⚠ COMMHUB_TOKEN env override ignored (using node config token). Unset COMMHUB_TOKEN to silence this warning.`);function fb(){if(!tr)return!1;let r=zn(tr),i=typeof r?.token==="string"?r.token:"";if(!i||i===gr)return!1;return gr=i,X.token=i,_r(`reloaded node token from ${tr}`),!0}var vc=E["log-dir"]||T(process.cwd(),".anet","nodes",F,"logs"),yb={debug:0,info:1,warn:2,error:3},hb=yb[E["log-level"]||process.env.LOG_LEVEL||X.logLevel||"info"]??1,ui=[...(Array.isArray(X.channels)?X.channels:[]).filter((r)=>!r.startsWith("server:")&&!r.startsWith("plugin:")),...N4],O4=ui.map((r)=>{try{return xb(r)}catch(i){console.error(`[agent-node] ${i.message}`),process.exit(1)}});function W4(r){if(!tr||!r)return;try{let i=JSON.parse(ei(tr,"utf-8"));if(i.session===r)return;i.session=r,tc(tr,JSON.stringify(i,null,2)+`
93
93
  `),nr(`session 写回: ${tr} → ${r.slice(0,8)}...`)}catch(i){_r(`writebackSession failed: ${i.message}`)}}function ab(r){if(!ic(r))return;for(let i of ei(r,"utf-8").split(`
94
94
  `)){let v=i.trim();if(!v||v.startsWith("#"))continue;let o=v.indexOf("=");if(o<=0)continue;let n=v.slice(0,o).trim(),t=v.slice(o+1).trim().replace(/^['"]|['"]$/g,"");if(!process.env[n])process.env[n]=t}}function pb(r){return T(process.cwd(),".anet","nodes",F,"channels",r)}function sb(r){let i=r.path||pb("telegram");ab(T(i,".env"));let v=process.env.TELEGRAM_BOT_TOKEN||"";if(!v)console.error(`[agent-node] telegram channel needs TELEGRAM_BOT_TOKEN in ${T(i,".env")}`),process.exit(1);try{Mb(T(i,".env"),384)}catch{}let o=zn(T(i,"access.json"))||{},n=T(i,"inbox");try{V4(n,{recursive:!0})}catch{}return{type:"telegram",dir:i,inboxDir:n,token:v,allowFrom:Array.isArray(o.allowFrom)?o.allowFrom.map(String):[]}}var dt=O4.filter((r)=>r.type==="telegram").map(sb),_4=O4.find((r)=>r.type!=="telegram");if(_4)console.error(`[agent-node] unsupported channel: ${_4.raw}`),process.exit(1);if(dt.length>0&&wn!=="codex"&&Array.isArray(Fr)&&!Fr.includes("Read"))Fr.push("Read");try{V4(vc,{recursive:!0})}catch{}function ht(r,i,v){if(i<hb)return;let o=new Date().toTimeString().slice(0,8),n=r.toUpperCase().padEnd(5),t=`[${o}] [${n}] [${F}] ${v}`;console.log(t);try{let u=new Date().toISOString().slice(0,10);rU(T(vc,`${u}.log`),t+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-node",
3
- "version": "2.3.6-preview.2",
3
+ "version": "2.3.7",
4
4
  "description": "AI Agent runtime for CommHub networks. Supports Claude Agent SDK, Codex SDK, and OpenAI/Anthropic-compatible HTTP API.",
5
5
  "bin": {
6
6
  "agent-node": "./dist/cli.js"