aut-cli 0.8.0 → 0.9.0
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 +4 -0
- package/dist/cli.js +21 -21
- package/dist/integrations/AGENTS.snippet.md +1 -1
- package/dist/integrations/skills/aut/SKILL.md +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,3 +117,7 @@ npm run check
|
|
|
117
117
|
|
|
118
118
|
检查包括类型、账号与原生 Track 合同、权限/并发保护、文件传输恢复、技能安装和 npm
|
|
119
119
|
包隔离安装。仅发布 dist 中的运行产物和集成说明,不包含服务端代码、源映射或凭据。
|
|
120
|
+
|
|
121
|
+
## Content transport (0.9)
|
|
122
|
+
|
|
123
|
+
Text commands upload their payload directly to private OSS using a short-lived upload permit, then submit only the object reference to the API. Reads obtain content from the authorized CDN URL and verify size and SHA-256 before decoding. API credentials are never sent to storage/CDN. Existing command syntax is unchanged. Version 0.9 is required for the metadata-only API.
|
package/dist/cli.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`,{flag:"wx",mode:384}),
|
|
2
|
+
var Ar=Object.defineProperty;var se=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var At=(e,r)=>{for(var t in r)Ar(e,t,{get:r[t],enumerable:!0})};var Tt,It=se(()=>{Tt={name:"aut-cli",version:"0.9.0",license:"SEE LICENSE IN LICENSE",description:"Agent Utopia command-line client with durable uploads and collaboration workflows.",type:"module",engines:{node:">=22"},bin:{aut:"dist/aut.cjs"},files:["dist/aut.cjs","dist/cli.js","dist/integrations/LICENSE","dist/integrations/AGENTS.snippet.md","dist/integrations/checkpoint.md","dist/integrations/skills/aut/SKILL.md","README.md","LICENSE","NOTICE.md"],scripts:{build:"node scripts/build.mjs",typecheck:"tsc --noEmit",test:"node --import tsx --test test/*.test.ts","test:package":"node scripts/package-smoke.mjs",check:"npm run typecheck && npm test && npm run build && npm run test:package",prepack:"npm run build && npm run test:package",prepublishOnly:"npm run typecheck && npm test"},devDependencies:{"@types/node":"26.6.3",esbuild:"0.28.2",tsx:"4.23.15",typescript:"7.0.2"},repository:{type:"git",url:"git+https://github.com/FredrickUnderwood/amb-codebases-amb-cli.git"},homepage:"https://www.npmjs.com/package/aut-cli",publishConfig:{access:"public",registry:"https://registry.npmjs.org/"}}});var X,Oe=se(()=>{"use strict";It();X=Tt.version});function U(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$/.test(e)}function je(e){return e.startsWith("aut_agent_")||e.startsWith("amb_account_")}function Y(e){let r=e?.track_ids||[];if(!Array.isArray(e?.scopes)||!e.scopes.length||e.scopes.some(t=>!Xr.includes(t))||new Set(e.scopes).size!==e.scopes.length||!Array.isArray(r)||new Set(r).size!==r.length||r.some(t=>!U(t))||!(e.resource_mode==="all_visible"&&r.length===0||e.resource_mode==="selected_tracks"&&r.length>0&&r.length<=100&&e.scopes.every(t=>Vr.includes(t))))throw new Error("\u8D26\u53F7\u6388\u6743\u8303\u56F4\u65E0\u6548\uFF1Bselected_tracks \u9700 1\u2013100 \u4E2A\u552F\u4E00 Track\uFF0C\u4E14\u4E0D\u80FD\u5305\u542B\u8D26\u53F7\u5168\u5C40\u901A\u77E5\u7B49 scope");return{scopes:[...e.scopes],resource_mode:e.resource_mode,...r.length?{track_ids:[...r]}:{}}}function Le(e,r){return Y(e),Y(r),e.scopes.every(t=>r.scopes.includes(t))&&(r.resource_mode==="all_visible"||e.resource_mode==="selected_tracks"&&e.track_ids.every(t=>r.track_ids.includes(t)))}function ot(e,r,t=Date.now()){let n=e;if(!n||!U(n.account_id)||!U(n.credential_id)||n.credential_kind!==(r.startsWith("aut_agent_")?"agent_pat":"account_session")||!Number.isSafeInteger(n.credential_epoch)||n.credential_epoch<1||!Number.isSafeInteger(n.authorization_epoch)||n.authorization_epoch<1||"organization_id"in n||"user_id"in n||"id"in n)throw new Error("Auth \u8FD4\u56DE\u7684\u8D26\u53F7\u8EAB\u4EFD\u65E0\u6548\u6216\u6DF7\u5165\u7EC4\u7EC7\u8EAB\u4EFD");Y(n);let o=Date.parse(n.checked_at),i=Date.parse(n.valid_until),s=Date.parse(n.expires_at);if(![o,i,s].every(Number.isFinite)||o>t+1e3||i<=t||i<=o||i-o>5e3||i>s)throw new Error("Auth \u8D26\u53F7\u8EAB\u4EFD\u5DF2\u8FC7\u671F\u6216\u6821\u9A8C\u7A97\u53E3\u65E0\u6548\uFF1B\u8BF7\u68C0\u67E5\u672C\u673A\u65F6\u949F\u5E76\u91CD\u65B0\u9A8C\u8BC1");return n}function Ce(e){return JSON.parse(e,(r,t,n)=>{if(typeof t=="number"&&(!Number.isFinite(t)||Number.isInteger(t)&&!Number.isSafeInteger(t))){if(!n?.source||!/^-?(?:0|[1-9]\d*)$/.test(n.source))throw new Error("JSON \u6570\u503C\u8D85\u51FA\u53EF\u7CBE\u786E\u8868\u793A\u8303\u56F4");return n.source}return t})}function B(e,r){if(!e||!/^(?:0|[1-9]\d*)$/.test(e)||e.length>20||BigInt(e)>18446744073709551615n)throw new Error(`${r} \u5FC5\u987B\u4E3A uint64 \u5341\u8FDB\u5236\u6574\u6570`);return e}function te(e,r){let t=B(e,r);return JSON.rawJSON(t)}var Xr,Vr,De,V=se(()=>{"use strict";Xr=["account:read","credentials:manage","identity:manage","track:read","track:write","track:share","track:admin","organization:manage","collaboration:manage","contract:read","contract:work","contract:manage","utopia:read","utopia:write","utopia.board.write","support:read","support:write","notifications:read","notifications:write"],Vr=["account:read","credentials:manage","track:read","track:write","track:share","track:admin","contract:read","contract:work","contract:manage","collaboration:manage","utopia.board.write"],De=["account:read","track:read","notifications:read"]});import{existsSync as tr,lstatSync as dt,readFileSync as mn,renameSync as gn,unlinkSync as rr,writeFileSync as nr}from"node:fs";import{dirname as or,join as Ge,resolve as ut}from"node:path";import{randomUUID as wn}from"node:crypto";function me(e=process.cwd()){let r=ut(e);for(;;){for(let n of[".amb.json",".amb-solo.json",".amb-track",".amb-team.json"]){try{dt(Ge(r,n))}catch(o){if(o.code==="ENOENT")continue;throw o}throw new Error(`\u8BF7\u5148\u5907\u4EFD\u79FB\u8D70\u65E7\u7ED1\u5B9A ${Ge(r,n)}\uFF0C\u518D\u8FD0\u884C aut track bind\uFF1B\u65E7\u6587\u4EF6\u4E0D\u4F1A\u88AB\u8BFB\u53D6\u6216\u8F6C\u6362`)}let t=or(r);if(t===r)return;r=t}}function ct(e){let r;try{r=dt(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(!r.isFile()||r.isSymbolicLink()||r.size>8192)throw new Error(".aut.json \u5FC5\u987B\u662F\u666E\u901A\u7684\u5C0F\u578B\u7ED1\u5B9A\u6587\u4EF6");let t=JSON.parse(mn(e,"utf8"));if(t.version!==2||t.product!=="agent-utopia"||!U(t.account_id)||!U(t.track_id)||!U(t.owner_party_id)||typeof t.auth_url!="string"||typeof t.platform_url!="string"||Object.keys(t).some(n=>!["version","product","auth_url","platform_url","account_id","track_id","owner_party_id"].includes(n)))throw new Error(".aut.json \u4E0D\u662F Agent Utopia \u8D26\u53F7\u7ED1\u5B9A\uFF1B\u8BF7\u5907\u4EFD\u79FB\u8D70\u540E\u91CD\u65B0 bind");return t}function ir(e,r=process.cwd()){e.assertActive(),me(r);let t=ut(r);for(;;){let n=ct(Ge(t,".aut.json"));if(n){if(n.auth_url!==e.profile.auth_url||n.platform_url!==e.profile.platform_url||n.account_id!==e.profile.account_id)throw new Error("\u9879\u76EE\u7ED1\u5B9A\u4E0E\u5F53\u524D\u8D26\u53F7\u6216\u73AF\u5883\u4E0D\u4E00\u81F4\uFF1B\u4E0D\u4F1A\u5207\u6362\u767B\u5F55\u6216\u53D1\u9001\u8BF7\u6C42");return n.track_id}let o=or(t);if(o===t)break;t=o}throw new Error("\u7F3A\u5C11 Track ID\uFF1B\u8BF7\u5148\u8FD0\u884C aut track bind ID")}async function sr(e,r,t=process.cwd(),n=!1){if(!U(r))throw new Error("Track ID \u65E0\u6548");let o=ut(t);if(me(o),!tr(o)||!dt(o).isDirectory())throw new Error("\u7ED1\u5B9A\u76EE\u5F55\u5FC5\u987B\u5DF2\u7ECF\u5B58\u5728");let i=Ge(o,".aut.json"),s=ct(i),c=await e.request("platform","/api/v1/tracks/"+encodeURIComponent(r));if(c?.track?.id!==r||!U(c.track.owner_party_id)||c.can_read!==!0)throw new Error("\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u5339\u914D\u4E14\u53EF\u8BFB\u7684 Track\uFF0C\u672A\u5199\u5165\u7ED1\u5B9A");let a={version:2,product:"agent-utopia",auth_url:e.profile.auth_url,platform_url:e.profile.platform_url,account_id:e.profile.account_id,track_id:r,owner_party_id:c.track.owner_party_id},f=JSON.stringify(s)===JSON.stringify(a);if(s&&!f&&!n)throw new Error("\u5DF2\u6709\u4E0D\u540C\u7ED1\u5B9A\uFF1B\u786E\u8BA4\u540E\u4F7F\u7528 --replace");e.assertActive(),me(o);let m=i+".lock";try{nr(m,String(process.pid),{flag:"wx",mode:384})}catch{throw new Error("\u9879\u76EE\u7ED1\u5B9A\u6B63\u5728\u4FEE\u6539")}let l=i+"."+wn()+".tmp";try{if(e.assertActive(),JSON.stringify(ct(i))!==JSON.stringify(s))throw new Error("\u9879\u76EE\u7ED1\u5B9A\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u7ED1\u5B9A");f||(nr(l,JSON.stringify(a,null,2)+`
|
|
3
|
+
`,{flag:"wx",mode:384}),gn(l,i))}finally{tr(l)&&rr(l),rr(m)}return{status:f?"up-to-date":"bound",path:i,...a}}var lt=se(()=>{"use strict";V()});var Er={};At(Er,{installIntegration:()=>Cn,projectBundle:()=>Ln,projectFiles:()=>ht,utopiaSkill:()=>We});import P from"node:fs";import{randomBytes as On,createHash as Rn}from"node:crypto";import{join as we,resolve as Un}from"node:path";import{fileURLToPath as br}from"node:url";function We(){return P.readFileSync(we(kr(),"skills/aut/SKILL.md"),"utf8")}function ht(e){if(!["claude-code","codex","agents"].includes(e))throw new Error("\u96C6\u6210\u652F\u6301 claude-code\u3001codex \u6216 agents");let r=e==="claude-code"?".claude/skills/aut/SKILL.md":".agents/skills/aut/SKILL.md";return[{path:e==="claude-code"?"CLAUDE.md":"AGENTS.md",merge:"amb-block",content:P.readFileSync(we(kr(),"AGENTS.snippet.md"),"utf8").replace("{{skill_path}}",r)},{path:r,merge:"managed-skill",content:We()}]}function Ln(e="agents"){return{protocol:"aut-project",version:3,product:"agent-utopia",files:ht(e)}}function He(e){let r=P.lstatSync(e,{throwIfNoEntry:!1});if(!r)return;if(!r.isFile()||r.isSymbolicLink()||r.size>2*1024*1024)throw new Error(`\u96C6\u6210\u6587\u4EF6\u987B\u4E3A\u4E0D\u8D85\u8FC7 2 MiB \u7684\u666E\u901A\u6587\u4EF6\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\uFF1A${e}`);let t=P.openSync(e,P.constants.O_RDONLY|(P.constants.O_NOFOLLOW||0));try{return new TextDecoder("utf-8",{fatal:!0}).decode(P.readFileSync(t))}finally{P.closeSync(t)}}function Cn(e,r){let t=ht(e),n=Un(r);me(n);let o=P.lstatSync(n,{throwIfNoEntry:!1});if(o&&(!o.isDirectory()||o.isSymbolicLink()))throw new Error("\u96C6\u6210\u6839\u76EE\u5F55\u5FC5\u987B\u662F\u666E\u901A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5");P.mkdirSync(n,{recursive:!0});let i=P.realpathSync(n);me(i);for(let y of[".agents",".claude"]){let E=P.lstatSync(we(i,y),{throwIfNoEntry:!1});if(E&&(!E.isDirectory()||E.isSymbolicLink()))throw new Error("\u5BBF\u4E3B\u76EE\u5F55\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6")}let s=we(i,".claude/hooks/amb-session-start.mjs");if(P.lstatSync(s,{throwIfNoEntry:!1}))throw new Error("\u53D1\u73B0\u65E7 AMB session hook\uFF1B\u8BF7\u5148\u6838\u5BF9\u5E76\u79FB\u9664\u65E7 hook \u4E0E\u5BBF\u4E3B\u5F15\u7528\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u6267\u884C\u6216\u8FC1\u79FB");for(let y of[".claude/settings.json",".claude/settings.local.json"])if(He(we(i,y))?.includes("amb-session-start.mjs"))throw new Error("\u5BBF\u4E3B\u8BBE\u7F6E\u4ECD\u5F15\u7528\u65E7 AMB session hook\uFF0C\u8BF7\u5148\u6838\u5BF9\u5E76\u79FB\u9664\u5F15\u7528");let c=t[0],a=we(i,c.path),f=He(a),m=f||"",l=c.content.trim(),p=[...m.matchAll(/<!-- ((?:aut|amb)(?:-solo)?):(begin|end) -->/g)],v;if(!p.length)v=m+(m?`
|
|
4
4
|
|
|
5
|
-
`:"")+
|
|
6
|
-
\u8BF7\u5148\u4EBA\u5DE5\u6838\u5BF9\u5E76\u5907\u4EFD\u79FB\u8D70\uFF1B--force \u4E5F\u4E0D\u4F1A\u8986\u76D6\u81EA\u5B9A\u4E49\u5185\u5BB9\u3002`);let O=[];for(let R of["amb","amb-team","amb-solo"]){let D=
|
|
7
|
-
`,
|
|
5
|
+
`:"")+c.content;else{if(p.length!==2||p[0][1]!==p[1][1]||p[0][2]!=="begin"||p[1][2]!=="end")throw new Error(`${c.path} \u4E2D AMB \u6807\u8BB0\u51B2\u7A81\u6216\u4E0D\u5B8C\u6574\uFF0C\u8BF7\u624B\u52A8\u5408\u5E76`);let y=p[0].index,E=p[1].index+p[1][0].length,w=m.slice(y,E).trim();if(w!==l&&!jn.has(Dn(w)))throw new Error(`${c.path} \u7684 AMB \u8BF4\u660E\u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u624B\u52A8\u5408\u5E76`);v=m.slice(0,y)+l+m.slice(E)}let h=On(9).toString("base64url"),d=a+"."+h+".tmp",_,u=_t({agent:e,scope:"project",directory:i});if(v!==f)try{if(P.writeFileSync(d,v,{flag:"wx",mode:420}),He(a)!==f)throw new Error("\u9879\u76EE\u8BF4\u660E\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u672A\u8986\u76D6");if(f!==void 0&&(_=a+".bak-"+h,P.writeFileSync(_,f,{flag:"wx",mode:384})),He(a)!==f)throw new Error("\u9879\u76EE\u8BF4\u660E\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u672A\u8986\u76D6");f===void 0?P.linkSync(d,a):P.renameSync(d,a)}finally{P.rmSync(d,{force:!0})}return{installed:t.map(y=>y.path),directory:i,skill:u,..._?{backup:_}:{},next:"\u9879\u76EE\u8BF4\u660E\u548CAgent Utopia Skill \u5DF2\u5B89\u88C5\uFF1B\u672A\u8FDE\u63A5\u670D\u52A1\u5668\u6216\u521B\u5EFA\u7ED1\u5B9A\u3002\u6838\u5BF9 aut status --json\u3001aut whoami --json \u540E\uFF0C\u7531\u7528\u6237\u660E\u786E\u9009\u62E9 aut track bind TRACK_ID\u3002"}}var _r,Pn,Dn,jn,kr,yt=se(()=>{"use strict";bt();lt();_r=br(new URL("./integrations/",import.meta.url)),Pn=br(new URL("../integrations/",import.meta.url)),Dn=e=>Rn("sha256").update(e).digest("hex"),jn=new Set(["f11d24279126311266be98995c6e85d1712d8842b8daa6efb3b8b4b851953783","57bed13cbd2e32a8565f2eb77c022cd31446c55f6ed2cd10e24060a6267a9128","2d99e2648f2e7631dcffb07290c7dc46a49eb8d08f24e6ad6ac74fc240a8f88c"]),kr=()=>P.existsSync(_r)?_r:Pn});var xr={};At(xr,{installSkill:()=>_t});import I from"node:fs";import{createHash as $n,randomBytes as Bn}from"node:crypto";import{homedir as qn}from"node:os";import{join as z,resolve as zn,basename as Fn}from"node:path";function Ie(e){let r=I.lstatSync(e,{throwIfNoEntry:!1});if(!r)return;if(r.isSymbolicLink()||!r.isFile()||r.size>2*1024*1024)throw new Error(`\u5B89\u88C5\u8DEF\u5F84\u5FC5\u987B\u662F\u666E\u901A\u6587\u4EF6\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u76EE\u5F55\uFF1A${e}`);let t=I.openSync(e,I.constants.O_RDONLY|(I.constants.O_NOFOLLOW||0));try{let n=I.fstatSync(t),o=I.readFileSync(t),i=I.lstatSync(e,{throwIfNoEntry:!1});if(!n.isFile()||!i?.isFile()||r.dev!==n.dev||r.ino!==n.ino||n.dev!==i.dev||n.ino!==i.ino||r.mtimeMs!==i.mtimeMs||r.size!==o.length)throw new Error(`\u6587\u4EF6\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${e}`);return{content:o,device:n.dev,inode:n.ino,modified:i.mtimeMs}}finally{I.closeSync(t)}}function ne(e,r){let t=Ie(e);if(!!t!=!!r||t&&r&&(t.device!==r.device||t.inode!==r.inode||t.modified!==r.modified||!t.content.equals(r.content)))throw new Error(`\u6587\u4EF6\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u672A\u8986\u76D6\u65B0\u5185\u5BB9\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${e}`)}function _t(e){let{agent:r}=e,t=e.scope??"user";if(!["codex","claude-code","agents"].includes(r))throw new Error("Skill \u5B89\u88C5\u9700\u8981 --agent codex\u3001claude-code \u6216 agents");if(!["user","project"].includes(t))throw new Error("--scope \u53EA\u652F\u6301 user \u6216 project");if(e.directory!==void 0&&t!=="project")throw new Error("--dir \u53EA\u9002\u7528\u4E8E --scope project\uFF0C\u8868\u793A\u9879\u76EE\u6839\u76EE\u5F55");let n=t==="user"?qn():zn(e.directory??"."),o=I.lstatSync(n,{throwIfNoEntry:!1});if(!o?.isDirectory()||o.isSymbolicLink())throw new Error(`\u5B89\u88C5\u6839\u76EE\u5F55\u5FC5\u987B\u662F\u5DF2\u5B58\u5728\u7684\u666E\u901A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\uFF1A${n}`);let i=I.realpathSync(n),s=r==="claude-code"?".claude":".agents",c=[s,"skills","aut"],a=[],f=i;for(let g of["",...c]){g&&(f=z(f,g)),I.lstatSync(f,{throwIfNoEntry:!1})||I.mkdirSync(f);let N=I.lstatSync(f);if(N.isSymbolicLink()||!N.isDirectory())throw new Error(`Skill \u8DEF\u5F84\u5FC5\u987B\u662F\u666E\u901A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\uFF1A${f}`);a.push({path:f,device:N.dev,inode:N.ino})}function m(){for(let g of a){let b=I.lstatSync(g.path,{throwIfNoEntry:!1});if(!b?.isDirectory()||b.isSymbolicLink()||b.dev!==g.device||b.ino!==g.inode)throw new Error(`Skill \u76EE\u5F55\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${g.path}`)}}let l=z(f,"SKILL.md"),p=z(f,Sr),v=z(f,".aut-install.lock");m();let h;try{h=I.openSync(v,"wx",384)}catch(g){throw g.code==="EEXIST"?new Error(`\u53E6\u4E00\u6B21 Skill \u5B89\u88C5\u5C1A\u672A\u7ED3\u675F\uFF1B\u5982\u4E0A\u6B21\u5B89\u88C5\u5DF2\u4E2D\u65AD\uFF0C\u8BF7\u786E\u8BA4\u540E\u79FB\u9664\uFF1A${v}`):g}I.closeSync(h);let d=[],_,u=!1,y=[];try{let Ve=function(R,D){let $=R+"."+kt(9)+".tmp";d.push($);try{I.writeFileSync($,D,{flag:"wx",mode:420})}catch(H){throw H.code==="EEXIST"&&d.pop(),H}return $},Ze=function(R,D,$){$?I.renameSync(R,D):I.linkSync(R,D)};var E=Ve,w=Ze;let g=Ie(l),b=Ie(p),N=We(),j=Et(N),k=/<!-- aut-skill-version: ([A-Za-z0-9.+-]+) -->/.exec(N)?.[1];if(!k)throw new Error("\u968F CLI \u5206\u53D1\u7684 Agent Utopia Skill \u7F3A\u5C11\u7248\u672C\u4FE1\u606F");let S=g?.content.equals(Buffer.from(N))??!1,x=g?Et(g.content):void 0,T=x&&vr.has(x);if(g&&!S&&!T)throw new Error(`\u5DF2\u6709\u81EA\u5B9A\u4E49\u6216\u65E0\u6CD5\u9A8C\u8BC1\u7684 Skill\uFF0C\u5DF2\u4FDD\u7559\u539F\u6587\u4EF6\uFF1A${l}
|
|
6
|
+
\u8BF7\u5148\u4EBA\u5DE5\u6838\u5BF9\u5E76\u5907\u4EFD\u79FB\u8D70\uFF1B--force \u4E5F\u4E0D\u4F1A\u8986\u76D6\u81EA\u5B9A\u4E49\u5185\u5BB9\u3002`);let O=[];for(let R of["amb","amb-team","amb-solo"]){let D=z(i,s,"skills",R),$=I.lstatSync(D,{throwIfNoEntry:!1});if(!$)continue;if(!$.isDirectory()||$.isSymbolicLink())throw new Error(`\u65E7 Skill \u8DEF\u5F84\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6\uFF1A${D}`);let H=z(D,"SKILL.md"),ie=Ie(H);if(!ie||!vr.has(Et(ie.content)))throw new Error(`\u65E7 Skill \u5DF2\u6709\u81EA\u5B9A\u4E49\u6216\u672A\u77E5\u5185\u5BB9\uFF0C\u8BF7\u5148\u4EBA\u5DE5\u6838\u5BF9\uFF0C\u907F\u514D\u540C\u65F6\u52A0\u8F7D\u4E24\u4E2A\u7248\u672C\uFF1A${D}`);let he=new Map;for(let W of I.readdirSync(D)){if(W!=="SKILL.md"&&W!==Sr&&W!==".amb-install.json"&&!/^SKILL\.md\.bak-[A-Za-z0-9._-]+$/.test(W))throw new Error(`\u65E7 Skill \u76EE\u5F55\u6709\u989D\u5916\u6587\u4EF6\u6216\u5B89\u88C5\u9501\uFF0C\u8BF7\u5148\u4EBA\u5DE5\u6838\u5BF9\uFF1A${D}`);let Te=Ie(z(D,W));if(!Te)throw new Error("\u65E7 Skill \u6587\u4EF6\u5728\u68C0\u67E5\u65F6\u6D88\u5931\uFF0C\u8BF7\u91CD\u8BD5");he.set(W,Te)}O.push({directory:D,file:H,snapshot:ie,device:$.dev,inode:$.ino,files:he})}let q=z(i,s,"amb-skill-backups"),oe=I.lstatSync(q,{throwIfNoEntry:!1});if(oe&&(!oe.isDirectory()||oe.isSymbolicLink()))throw new Error("Skill \u5907\u4EFD\u76EE\u5F55\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6");let vt=JSON.stringify({version:1,sha256:j,skill_version:k,cli_version:X},null,2)+`
|
|
7
|
+
`,Nr=b?.content.toString("utf8")!==vt,xt=S?void 0:Ve(l,N),Nt=Nr?Ve(p,vt):void 0;if(m(),ne(l,g),ne(p,b),g&&!S){let R=l+".bak-"+new Date().toISOString().replaceAll(/[:.]/g,"-")+"-"+kt(6);if(I.writeFileSync(R,g.content,{flag:"wx",mode:384}),!I.readFileSync(R).equals(g.content))throw new Error(`Skill \u5907\u4EFD\u9A8C\u8BC1\u5931\u8D25\uFF1A${R}`);_=R}m(),ne(l,g),ne(p,b);for(let R of O){m();let D=I.lstatSync(R.directory,{throwIfNoEntry:!1});if(!D?.isDirectory()||D.isSymbolicLink()||D.dev!==R.device||D.ino!==R.inode)throw new Error("\u65E7 Skill \u76EE\u5F55\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316");ne(R.file,R.snapshot);let $=I.readdirSync(R.directory).sort();if(JSON.stringify($)!==JSON.stringify([...R.files.keys()].sort()))throw new Error("\u65E7 Skill \u76EE\u5F55\u5185\u5BB9\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316");for(let[W,Te]of R.files)ne(z(R.directory,W),Te);I.existsSync(q)||I.mkdirSync(q);let H=I.lstatSync(q);if(!H.isDirectory()||H.isSymbolicLink())throw new Error("Skill \u5907\u4EFD\u76EE\u5F55\u53D1\u751F\u53D8\u5316");let ie=z(q,kt(12));I.mkdirSync(ie,{mode:448});let he=z(ie,Fn(R.directory));I.renameSync(R.directory,he),y.push({from:R.directory,backup:he})}return m(),ne(l,g),xt&&(Ze(xt,l,g),u=!0),Nt&&Ze(Nt,p,b),{status:g?S?"up-to-date":"updated":"installed",agent:r,product:"agent-utopia",scope:t,directory:f,file:l,skill_version:k,cli_version:X,..._?{backup:_}:{},...y.length?{migrated:y}:{},next:"\u65B0\u5F00\u4F1A\u8BDD\u540E\u52A0\u8F7D Agent Utopia Skill\u3002\u5347\u7EA7 aut-cli \u540E\u518D\u6B21\u8FD0\u884C\u76F8\u540C\u5B89\u88C5\u547D\u4EE4\u5373\u53EF\u66F4\u65B0\uFF1B\u9879\u76EE\u5185\u5DF2\u6709\u526F\u672C\u65F6\uFF0C\u53E6\u7528 --scope project --dir <\u9879\u76EE\u6839\u76EE\u5F55> \u66F4\u65B0\u3002"}}catch(g){if(!u)for(let N of[...y].reverse())I.lstatSync(N.from,{throwIfNoEntry:!1})||I.renameSync(N.backup,N.from);if(!_&&!u&&!y.length)throw g;let b=g instanceof Error?g.message:String(g);throw new Error(b+(_?`
|
|
8
8
|
\u539F Skill \u7684\u5B8C\u6574\u5907\u4EFD\uFF1A${_}`:"")+(y.length&&u?`
|
|
9
9
|
\u65E7 Skill \u76EE\u5F55\u5907\u4EFD\uFF1A${y.map(N=>N.backup).join(", ")}`:"")+(u?`
|
|
10
10
|
\u65B0\u7684 Skill \u5DF2\u5199\u5165\uFF0C\u5B89\u88C5\u8BB0\u5F55\u5C1A\u672A\u5B8C\u6210\u3002\u8BF7\u518D\u6B21\u8FD0\u884C\u76F8\u540C\u547D\u4EE4\u4FEE\u590D\u5B89\u88C5\u8BB0\u5F55\u3002`:`
|
|
11
|
-
\u539F Skill \u5C1A\u672A\u66FF\u6362\uFF0C\u8BF7\u89E3\u51B3\u4E0A\u8FF0\u95EE\u9898\u540E\u91CD\u8BD5\u3002`),{cause:
|
|
12
|
-
`+N.stderr.trim().slice(-2e3):""));return N.stdout};try{let
|
|
13
|
-
\u5F53\u524D\u5305\uFF1A${
|
|
14
|
-
npm \u5168\u5C40\u5305\uFF1A${b}`)};N(),
|
|
15
|
-
\u4E0B\u6B21\u8FD0\u884C aut \u5373\u4F7F\u7528\u65B0\u7248\u672C\u3002`:`${
|
|
11
|
+
\u539F Skill \u5C1A\u672A\u66FF\u6362\uFF0C\u8BF7\u89E3\u51B3\u4E0A\u8FF0\u95EE\u9898\u540E\u91CD\u8BD5\u3002`),{cause:g})}finally{m();for(let g of d)I.rmSync(g,{force:!0});I.unlinkSync(v)}}var kt,Sr,vr,Et,bt=se(()=>{"use strict";yt();Oe();kt=(e=32)=>Bn(e).toString("base64url"),Sr=".aut-install.json",vr=new Set(["2d87c85263a566031506a6210cce412c664dbc95c04265df6330e4f89518face","028045d7db1fa9923e15480eebf897e3817b9bfb3b3532b9f080815340f22e16","a1ae7cb2e0abb898a53edcbbb447371c02078f64bb10a68cc106207be26216b8","d1fff3ba6231a0650949a25908feb1027e3ecb505ff56336ddbe1f0604950072","2a11c37973d4bf0316446fb34eff7efa0b612711dac63e846884b089f4da5d54","cd0d9742c70afbc0a114595a577a265185e330f6ba55b9d850429dedf42f26b1","f1a71e248a80699f61f80335e234e3a4c71aba2532a79f078f965bdcdd0aea56","c88a8c86efad9d8a955fd10b96b1ca9701711fe2f5a082577586bac6e8c98d54","d1c0b6ab80cab8b84f2755032c8c0358c939c67b2d7b9875094e89d6bf774ff9","19047c4453610aaa295c2e13b1624be3816bd96fe971ff405d3a7c7d66bbc2a7"]),Et=e=>$n("sha256").update(e).digest("hex")});Oe();import{parseArgs as St}from"node:util";import{spawn as Tr}from"node:child_process";import{lstatSync as Ot,mkdtempSync as Or,readFileSync as Rr,realpathSync as J,rmSync as Ur}from"node:fs";import{tmpdir as Pr}from"node:os";import{delimiter as Dr,dirname as ye,isAbsolute as Re,join as M,resolve as jr}from"node:path";import{fileURLToPath as Lr}from"node:url";var Qe="https://registry.npmjs.org/";function Cr(e,r,t){return new Promise((n,o)=>{let i=Tr(e,r,{cwd:t.cwd,env:t.env,shell:!1,stdio:["ignore","pipe","pipe"],windowsHide:!0}),s="",c="",a,f,m=p=>{a??=p,i.kill(),f??=setTimeout(()=>i.kill("SIGKILL"),2e3),f.unref()},l=setTimeout(()=>m(new Error("\u5347\u7EA7\u547D\u4EE4\u8D85\u65F6\uFF0C\u672A\u80FD\u786E\u8BA4\u5B89\u88C5\u7ED3\u679C\uFF1B\u8BF7\u68C0\u67E5\u5F53\u524D\u5B89\u88C5\u7248\u672C\u3002")),t.timeoutMs);i.stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),i.stdout.on("data",p=>{t.progress&&process.stderr.write(p),s+=p,s.length>2e6&&m(new Error("npm \u8F93\u51FA\u8FC7\u5927\uFF0C\u5DF2\u505C\u6B62\u5347\u7EA7\u3002"))}),i.stderr.on("data",p=>{t.progress&&process.stderr.write(p),c=(c+p).slice(-8e3)}),i.on("error",p=>{a=p}),i.on("close",(p,v)=>{clearTimeout(l),f&&clearTimeout(f),a?o(a):n({stdout:s,stderr:c,status:p,signal:v})})})}function et(e){if(!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e))return;let r=e.split(".").map(Number);if(r.every(Number.isSafeInteger))return r}function Pt(e,r){for(let t=0;t<3;t++)if(e[t]!==r[t])return e[t]-r[t];return 0}function $r(e,r){if(!e||e==="*")return!0;let t=/^>=\s*(\d+)(?:\.(\d+))?(?:\.(\d+))?$/.exec(e.trim()),n=et(r);if(!t||!n)return null;let o=[Number(t[1]),Number(t[2]||0),Number(t[3]||0)];return o.every(Number.isSafeInteger)?Pt(n,o)>=0:null}function _e(e){return JSON.parse(Rr(M(e,"package.json"),"utf8"))}function Br(e){let r=ye(J(Lr(e)));for(;;){try{return{directory:r,manifest:_e(r)}}catch(n){if(n.code!=="ENOENT")throw n}let t=ye(r);if(t===r)throw new Error("\u65E0\u6CD5\u8BC6\u522B\u5F53\u524D\u5B89\u88C5\u6765\u6E90\uFF0C\u8BF7\u901A\u8FC7\u539F\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002");r=t}}function qr(e){let r=ye(e.nodePath),t=[e.env.npm_execpath,M(r,"node_modules/npm/bin/npm-cli.js"),M(r,"../lib/node_modules/npm/bin/npm-cli.js"),...String(e.env.PATH||e.env.Path||"").split(Dr).filter(n=>n&&Re(n)).flatMap(n=>[M(n,"npm"),M(n,"node_modules/npm/bin/npm-cli.js"),M(n,"../lib/node_modules/npm/bin/npm-cli.js")])];for(let n of t)if(!(!n||!Re(n)))try{let o=J(n),i=ye(ye(o)),s=_e(i),c=s.bin;if(s.name==="npm"&&c?.npm==="bin/npm-cli.js"&&o===J(M(i,"bin/npm-cli.js")))return o}catch{}throw new Error("\u672A\u627E\u5230\u53EF\u9A8C\u8BC1\u7684 npm CLI\u3002\u8BF7\u5B89\u88C5\u4E0E\u5F53\u524D Node.js \u914D\u5957\u7684 npm\uFF0C\u518D\u8FD0\u884C\u5347\u7EA7\u547D\u4EE4\u3002")}function Rt(e){let r=e.trim();if(!Re(r)||/[\r\n\0]/.test(r))throw new Error("npm \u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BC6\u522B\u7684\u5168\u5C40\u5B89\u88C5\u8DEF\u5F84\uFF0C\u672A\u6267\u884C\u5B89\u88C5\u3002");return r}function Ut(e,r){let n=r.bin,o=typeof n=="string"?n:n?.["aut"];if(typeof o!="string"||Re(o))throw new Error("\u5B89\u88C5\u5305\u672A\u58F0\u660E\u6709\u6548\u7684\u547D\u4EE4\u5165\u53E3\uFF0C\u672A\u80FD\u786E\u8BA4\u5B89\u88C5\u7ED3\u679C\u3002");let i=J(jr(e,o)),s=J(e);if(!i.startsWith(s+(process.platform==="win32"?"\\":"/")))throw new Error("\u5B89\u88C5\u5305\u547D\u4EE4\u5165\u53E3\u4E0D\u5728\u5305\u76EE\u5F55\u5185\uFF0C\u672A\u80FD\u786E\u8BA4\u5B89\u88C5\u7ED3\u679C\u3002");return i}function zr(e={}){let r={fetch:globalThis.fetch.bind(globalThis),run:Cr,nodePath:process.execPath,nodeVersion:process.versions.node,env:process.env,...e};return async function(n){let{packageName:o,currentVersion:i,check:s}=n;if(o!=="aut-cli")throw new Error("\u4E0D\u652F\u6301\u66F4\u65B0\u6B64\u8F6F\u4EF6\u5305\u3002");let c;try{let w=await r.fetch(Qe+o+"/latest",{headers:{Accept:"application/json","Cache-Control":"no-cache"},cache:"no-store",redirect:"error",signal:AbortSignal.timeout(2e4)});if(!w.ok)throw new Error(`HTTP ${w.status}`);c=await w.json()}catch(w){throw new Error("\u65E0\u6CD5\u4ECE\u5B98\u65B9 npm \u67E5\u8BE2\u6700\u65B0\u7248\u672C\uFF0C\u672A\u6267\u884C\u5B89\u88C5\uFF1A"+(w instanceof Error?w.message:String(w)))}let a=c?.version,f=typeof a=="string"?et(a):void 0;if(c?.name!==o||!f||typeof a!="string")throw new Error("\u5B98\u65B9 npm \u672A\u8FD4\u56DE\u6709\u6548\u7684\u7A33\u5B9A\u7248\u672C\uFF0C\u672A\u6267\u884C\u5B89\u88C5\u3002");let m=c.engines,l=typeof m?.node=="string"?m.node:void 0;if(m?.node!==void 0&&!l)throw new Error("\u5B98\u65B9 npm \u8FD4\u56DE\u4E86\u65E0\u6CD5\u8BC6\u522B\u7684 Node.js \u8981\u6C42\uFF0C\u672A\u6267\u884C\u5B89\u88C5\u3002");let p=et(i),v=p?Pt(p,f):void 0,h={package:o,current_version:i,latest_version:a,status:v===void 0?"development-version":v===0?"up-to-date":v>0?"newer-installed":"available",registry:Qe,...l?{node_requirement:l}:{},node_compatible:$r(l,r.nodeVersion)};if(s||h.status!=="available")return h;if(h.node_compatible!==!0)throw new Error(h.node_compatible===!1?`${o}@${a} \u9700\u8981 Node.js ${l}\uFF0C\u5F53\u524D\u4E3A ${r.nodeVersion}\u3002\u8BF7\u5148\u5347\u7EA7 Node.js\uFF1B\u672A\u6267\u884C\u5B89\u88C5\u3002`:`\u65E0\u6CD5\u5B89\u5168\u68C0\u67E5 Node.js \u8981\u6C42 ${l}\uFF0C\u8BF7\u901A\u8FC7 npm \u624B\u52A8\u66F4\u65B0\uFF1B\u672A\u6267\u884C\u5B89\u88C5\u3002`);let d=Br(n.moduleUrl);if(d.manifest.name!==o)throw new Error("\u5F53\u524D\u4ECE\u6E90\u7801\u6216\u5176\u4ED6\u8F6F\u4EF6\u5305\u8FD0\u884C\uFF0C\u81EA\u5347\u7EA7\u4EC5\u652F\u6301 npm \u5168\u5C40\u5B89\u88C5\uFF1B\u8BF7\u901A\u8FC7\u539F\u5B89\u88C5\u65B9\u5F0F\u66F4\u65B0\u3002");if(d.manifest.version!==i)throw new Error("\u5F53\u524D\u8FDB\u7A0B\u7248\u672C\u4E0E\u5B89\u88C5\u76EE\u5F55\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C\u547D\u4EE4\uFF1B\u672A\u6267\u884C\u5B89\u88C5\u3002");let _=qr(r),u=Or(M(Pr(),"amb-self-update-")),y=Object.fromEntries(Object.entries(r.env).filter(([w])=>!w.startsWith("AMB_")&&!w.startsWith("AUT_"))),E=async(w,g=!1,b=3e4)=>{let N=await r.run(r.nodePath,[_,...w],{cwd:u,env:y,timeoutMs:b,progress:g});if(N.status!==0)throw new Error(`npm ${g?"\u5B89\u88C5\u672A\u5B8C\u6210\uFF0C\u53EF\u80FD\u5DF2\u90E8\u5206\u4FEE\u6539\u5B89\u88C5\u76EE\u5F55\uFF0C\u8BF7\u68C0\u67E5\u5F53\u524D\u7248\u672C":"\u547D\u4EE4\u5931\u8D25\uFF0C\u672A\u6267\u884C\u5B89\u88C5"}\uFF08${N.signal||N.status||"\u672A\u77E5\u72B6\u6001"}\uFF09\u3002`+(N.stderr.trim()?`
|
|
12
|
+
`+N.stderr.trim().slice(-2e3):""));return N.stdout};try{let w=Rt(await E(["prefix","--global"])),g=Rt(await E(["root","--global",`--prefix=${w}`])),b=M(g,o),N=()=>{let S=!1;try{let x=Ot(b);S=!x.isSymbolicLink()&&x.isDirectory()&&J(b)===J(d.directory)&&_e(b).name===o&&_e(b).version===i}catch{}if(!S)throw new Error(`\u5F53\u524D\u547D\u4EE4\u4E0D\u662F\u6B64 npm \u7684\u666E\u901A\u5168\u5C40\u5B89\u88C5\uFF08\u53EF\u80FD\u6765\u81EA\u6E90\u7801\u3001npm link\u3001npx\u3001\u672C\u5730\u4F9D\u8D56\u6216\u5176\u4ED6 prefix\uFF09\uFF0C\u672A\u6267\u884C\u5B89\u88C5\u3002
|
|
13
|
+
\u5F53\u524D\u5305\uFF1A${d.directory}
|
|
14
|
+
npm \u5168\u5C40\u5305\uFF1A${b}`)};N(),Ut(b,d.manifest);let j=J(b);N(),await n.beforeInstall?.(),N(),await E(["install","--global",`${o}@${a}`,`--prefix=${w}`,`--registry=${Qe}`,"--prefer-online","--offline=false","--engine-strict","--force=false","--dry-run=false","--bin-links=true","--ignore-scripts","--no-audit","--no-fund"],!0,3e5);let k;try{let S=Ot(b);if(S.isSymbolicLink()||!S.isDirectory()||J(b)!==j)throw new Error("\u5B89\u88C5\u4F4D\u7F6E\u5DF2\u6539\u53D8");if(k=_e(b),k.name!==o||k.version!==a)throw new Error("\u7248\u672C\u4E0D\u7B26");let x=Ut(b,k),T=await r.run(r.nodePath,[x,"--version"],{cwd:u,env:y,timeoutMs:3e4});if(T.status!==0||T.stdout.trim()!==a)throw new Error("\u65B0\u547D\u4EE4\u7248\u672C\u68C0\u67E5\u5931\u8D25")}catch(S){throw new Error("npm \u5DF2\u7ED3\u675F\uFF0C\u4F46\u672A\u80FD\u786E\u8BA4\u65B0\u7248\u672C\u53EF\u7528\u3002\u8BF7\u68C0\u67E5\u5B89\u88C5\uFF0C\u4E0D\u8981\u5047\u5B9A\u5347\u7EA7\u6210\u529F\uFF1A"+(S instanceof Error?S.message:String(S)))}return{...h,status:"updated",installed_version:a,installed_path:b,restart_required:!1}}finally{Ur(u,{recursive:!0,force:!0})}}}var Dt=zr();function jt(e){let r=`${e.package} ${e.current_version}`;return e.status==="up-to-date"?`${r} \u5DF2\u662F\u5B98\u65B9 npm \u6700\u65B0\u7A33\u5B9A\u7248\u672C\u3002`:e.status==="newer-installed"?`${r} \u9AD8\u4E8E\u5B98\u65B9 npm \u6700\u65B0\u7A33\u5B9A\u7248\u672C ${e.latest_version}\uFF0C\u672A\u6267\u884C\u964D\u7EA7\u3002`:e.status==="development-version"?`${r} \u662F\u5F00\u53D1\u6216\u9884\u53D1\u884C\u7248\u672C\uFF0C\u672A\u81EA\u52A8\u66FF\u6362\u3002\u5B98\u65B9 npm \u6700\u65B0\u7A33\u5B9A\u7248\u672C\uFF1A${e.latest_version}\u3002`:e.status==="updated"?`\u5DF2\u66F4\u65B0 ${e.package} \u7684\u5B89\u88C5\u7248\u672C\uFF1A${e.current_version} \u2192 ${e.installed_version}\u3002
|
|
15
|
+
\u4E0B\u6B21\u8FD0\u884C aut \u5373\u4F7F\u7528\u65B0\u7248\u672C\u3002`:`${r} \u53EF\u66F4\u65B0\u81F3 ${e.latest_version}\uFF08\u5B98\u65B9 npm\uFF09\u3002`+(e.node_compatible===!1?`
|
|
16
16
|
\u9700\u8981\u5148\u5347\u7EA7 Node.js\uFF1A${e.node_requirement}\u3002`:e.node_compatible===null?`
|
|
17
17
|
Node.js \u8981\u6C42\uFF1A${e.node_requirement}\uFF0C\u9700\u624B\u52A8\u68C0\u67E5\u540E\u901A\u8FC7 npm \u66F4\u65B0\u3002`:`
|
|
18
|
-
\u8FD0\u884C aut self update \u5B89\u88C5\u66F4\u65B0\u3002`)}import{parseArgs as yn}from"node:util";import{constants as Ze,closeSync as jr,fstatSync as $r,lstatSync as Cr,openSync as Br,readSync as qr}from"node:fs";import{resolve as Fr}from"node:path";var _e=1024*1024,Qe=_e,ae=2*_e,Re=4*_e,et=32*_e,Pt=1024,Y=class extends Error{constructor(r,n){super(`${r}: ${n}`);this.code=r}code};function Q(e,t,r="content_too_large"){throw new Y(r,`${e}\u4E0D\u80FD\u8D85\u8FC7 ${t} \u5B57\u8282\uFF08${t/_e} MiB\uFF09\uFF1B\u8BF7\u62C6\u5206\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u622A\u65AD`)}function Dt(e,t,r,n){let i=[],o=0;for(;;){let s=Buffer.allocUnsafe(Math.min(65536,t-o+1)),d;try{d=qr(e,s,0,s.length,null)}catch(a){if(a.code==="EINTR")continue;throw a}if(!d)return Buffer.concat(i,o);o+=d,o>t&&Q(r,t,n),i.push(s.subarray(0,d))}}function Mr(e,t,r="\u6587\u4EF6",n="content_too_large"){let i=Fr(e),o=Cr(i);if(!o.isFile()||o.isSymbolicLink())throw new Error(`${r}\u5FC5\u987B\u662F\u666E\u901A\u6587\u4EF6\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u7279\u6B8A\u6587\u4EF6`);o.size>t&&Q(r,t,n);let s=Br(i,Ze.O_RDONLY|(Ze.O_NOFOLLOW||0)|(Ze.O_NONBLOCK||0));try{let d=$r(s);if(!d.isFile()||d.dev!==o.dev||d.ino!==o.ino)throw new Error(`${r}\u8BFB\u53D6\u524D\u5DF2\u6539\u53D8\u6216\u4E0D\u662F\u666E\u901A\u6587\u4EF6`);return d.size>t&&Q(r,t,n),Dt(s,t,r,n)}finally{jr(s)}}function tt(e,t="\u6B63\u6587"){if(e.includes(0))throw new Y("invalid_content_encoding",`${t}\u4E0D\u80FD\u5305\u542B NUL \u5B57\u8282\uFF0C\u8BF7\u4F7F\u7528 Markdown/HTML \u6587\u672C`);try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(e)}catch{throw new Y("invalid_content_encoding",`${t}\u5FC5\u987B\u662F\u6709\u6548\u7684 UTF-8 \u6587\u672C`)}}function $(e,t=Qe,r="\u6B63\u6587",n="content_too_large"){let i=e==="-"?Dt(0,t,r,n):Mr(e,t,r,n);return tt(i,r)}function zr(e,t="\u6B63\u6587"){if(e.includes("\0"))throw new Y("invalid_content_encoding",`${t}\u4E0D\u80FD\u5305\u542B NUL \u5B57\u8282\uFF0C\u8BF7\u4F7F\u7528 Markdown/HTML \u6587\u672C`);let r=Buffer.from(e,"utf8");if(r.toString("utf8")!==e)throw new Y("invalid_content_encoding",`${t}\u5305\u542B\u65E0\u6548\u7684 Unicode \u5B57\u7B26`);r.length>Qe&&Q(t,Qe)}function Lt(e,t){if(!t||typeof t!="object")return;let r=e.split("?")[0],n=t;if(/\/tracks\/[^/]+\/(content-commits|background-versions|handoffs)$/.test(r)){if(Buffer.byteLength(JSON.stringify(t))>256*1024)throw new Y("manifest_too_large","\u5185\u5BB9\u6E05\u5355\u6700\u591A 256 KiB");let i=r.endsWith("/content-commits")?n.message?.text:n.body_text;if(i!==void 0){if(typeof i!="string")throw new Error("\u6B63\u6587\u5FC5\u987B\u662F\u6587\u672C");if(zr(i),Buffer.byteLength(i)>64*1024)throw new Y("content_too_large","\u77ED\u6B63\u6587\u6700\u591A 64 KiB\uFF1B\u8F83\u5927\u6B63\u6587\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\u518D\u5F15\u7528")}}}function jt(e){let t=JSON.stringify(e);if(t===void 0)throw new Error("\u8BF7\u6C42\u5FC5\u987B\u662F\u53EF\u7F16\u7801\u7684 JSON");return Buffer.byteLength(t,"utf8")>ae&&Q("\u7F16\u7801\u540E\u7684 JSON \u8BF7\u6C42",ae,"request_too_large"),t}async function $t(e,t){let r=e.body?.getReader();if(!r)return Buffer.alloc(0);let n=[],i=0;try{let o=e.headers.get("content-length");for(!e.headers.has("content-encoding")&&o&&/^\d+$/.test(o)&&Number(o)>t&&Q("HTTP \u54CD\u5E94",t,"response_too_large");;){let{done:s,value:d}=await r.read();if(s)return Buffer.concat(n,i);i+=d.byteLength,i>t&&Q("HTTP \u54CD\u5E94",t,"response_too_large"),n.push(d)}}catch(o){try{await r.cancel()}catch{}throw o}finally{r.releaseLock()}}function ce(e){if(e===void 0)return Re;let t=Number(e);if(!/^\d+$/.test(String(e))||!Number.isSafeInteger(t)||t<Pt||t>et)throw new Error(`--max-bytes \u5FC5\u987B\u4E3A ${Pt}\u2013${et} \u7684\u6574\u6570`);return t}function Ct(e,t=!1){let r=new URL(e,"https://utopia.invalid");return/^\/api\/v1\/(?:tracks\/[^/]+\/(?:updates|context|records)|records(?:\/[^/]+\/versions)?)$/.test(r.pathname)?ce(r.searchParams.get("max_bytes")??void 0):t||/\/body$/.test(r.pathname)||/\/background(?:-versions\/[^/]+)?$/.test(r.pathname)?et:Re}te();te();Te();import{randomUUID as je,createHash as Gr}from"node:crypto";import{chmodSync as Mt,existsSync as K,linkSync as qt,lstatSync as Le,mkdirSync as zt,renameSync as Kr,unlinkSync as ve,writeFileSync as Be}from"node:fs";import{homedir as Ft,hostname as Hr}from"node:os";import{dirname as M,join as V}from"node:path";import{spawn as Wr}from"node:child_process";import{setTimeout as Xr}from"node:timers/promises";var de=class extends Error{constructor(r,n,i=0,o,s={}){super(`Agent Utopia HTTP ${r}: ${n}${n==="response_too_large"?"\uFF1B\u51CF\u5C11\u5206\u9875\u6761\u6570\uFF0C\u6216\u5728 Track \u8BFB\u53D6\u65F6\u63D0\u9AD8 --max-bytes\uFF08\u6700\u591A 33554432\uFF09\uFF0C\u4E5F\u53EF\u5355\u72EC\u8BFB\u53D6\u5185\u5BB9":""}${i?`\uFF1BRetry-After: ${i} \u79D2`:""}${o!==void 0?`\uFF1Binbox_revision=${o}`:""}${Object.keys(s).length?"\uFF1B"+JSON.stringify(s):""}`);this.status=r;this.code=n;this.retryAfter=i;this.inboxRevision=o;this.recovery=s}status;code;retryAfter;inboxRevision;recovery};function fe(){let e=process.platform==="win32"?process.env.APPDATA||V(Ft(),"AppData","Roaming"):process.env.XDG_CONFIG_HOME||V(Ft(),".config"),t=V(e,"aut","connection.json"),r=V(e,"aut","team","connection.json");if(ue(t),!K(t)&&K(r)&&(ue(r),JSON.parse($(r,32*1024,"\u8D26\u53F7\u914D\u7F6E"))?.version===2)){le(r);try{qt(r,t)}catch(s){if(s.code==="EEXIST")return t;throw s}ve(r);let i=V(M(r),"device.json"),o=V(M(t),"device.json");if(!K(o)&&K(i)){ue(i);let s=JSON.parse($(i,1024,"\u8BBE\u5907\u6807\u8BC6"));if(s?.version===1&&typeof s.device_id=="string"&&/^[A-Za-z0-9_-]{16,128}$/.test(s.device_id))try{qt(i,o)}catch(d){if(d.code!=="EEXIST")throw d}}}return t}function ue(e){if(K(M(e))&&Le(M(e)).isSymbolicLink())throw new Error("\u62D2\u7EDD\u4F7F\u7528\u7B26\u53F7\u94FE\u63A5 Agent Utopia \u914D\u7F6E\u76EE\u5F55");if(K(e)&&(!Le(e).isFile()||Le(e).isSymbolicLink()))throw new Error("\u62D2\u7EDD\u4F7F\u7528\u975E\u666E\u901A Agent Utopia \u914D\u7F6E\u6587\u4EF6")}function be(e){if(!e||/[\\\s]/.test(e))throw new Error("Agent Utopia URL \u65E0\u6548");let t=e.match(/^https?:\/\/[^/]+(\/[^?#]*)?/i)?.[1]||"";if(/%(?:2e|2f|5c)/i.test(t)||t.split("/").some(i=>i==="."||i===".."))throw new Error("Agent Utopia URL \u4E0D\u5141\u8BB8\u8DEF\u5F84\u8DF3\u8F6C");let r;try{r=new URL(e)}catch{throw new Error("Agent Utopia URL \u65E0\u6548")}if(r.username||r.password||r.search||r.hash)throw new Error("Agent Utopia URL \u4E0D\u80FD\u5305\u542B\u51ED\u636E\u3001\u67E5\u8BE2\u53C2\u6570\u6216\u7247\u6BB5");let n=["127.0.0.1","localhost","[::1]"].includes(r.hostname);if(r.protocol!=="https:"&&!(r.protocol==="http:"&&n))throw new Error("Agent Utopia \u8FDE\u63A5\u5FC5\u987B\u4F7F\u7528 HTTPS\uFF1B\u4EC5\u672C\u673A\u5F00\u53D1\u5141\u8BB8 HTTP");return r.origin+r.pathname.replace(/\/+$/,"")}function Vr(e,t,r){if(!e&&(!t||!r))throw new Error("\u63D0\u4F9B\u7F51\u5173 URL\uFF0C\u6216\u540C\u65F6\u63D0\u4F9B --auth-url \u548C --platform-url");let n=e?be(e):"";return{auth_url:be(t||n+"/amb-auth"),platform_url:be(r||n+"/amb-platform")}}function qe(e,t=!0){if(!e.startsWith("/")||e.startsWith("//")||/[\\\s#]/.test(e))throw new Error("Agent Utopia API \u53EA\u63A5\u53D7\u5F53\u524D\u8FDE\u63A5\u7684\u76F8\u5BF9\u8DEF\u5F84");let r=e.split("?")[0];if(/%(?:2e|2f|5c|25)/i.test(r)||r.split("/").some(n=>n==="."||n===".."))throw new Error("Agent Utopia API \u8DEF\u5F84\u4E0D\u5141\u8BB8\u8DF3\u8F6C");if(t&&!r.startsWith("/api/v1/"))throw new Error("Agent Utopia API \u4EC5\u5141\u8BB8 /api/v1/ \u8DEF\u5F84");return e}function Ee(e){if(typeof e!="string"||!e||e.length>8192||!/^[\x21-\x7e]+$/.test(e))throw new Error("Agent Utopia \u51ED\u8BC1\u65E0\u6548");return e}function le(e=fe()){if(ue(e),!!K(e))try{let t=JSON.parse($(e,32768,"\u8D26\u53F7\u914D\u7F6E"));if(t.version!==2||!t.connection_id||!["token","browser"].includes(t.auth)||be(t.auth_url)!==t.auth_url||be(t.platform_url)!==t.platform_url)throw new Error("invalid");if(Ee(t.token),!Pe(t.token)||!U(t.account_id)||!U(t.credential_id)||"user_id"in t||"organization_id"in t||t.credential_kind!==(t.token.startsWith("aut_agent_")?"agent_pat":"account_session"))throw new Error("invalid");if(G(t),process.platform!=="win32"&&Le(e).mode&63)throw new Error("permissions");return t}catch{throw new Error("Agent Utopia \u8FDE\u63A5\u914D\u7F6E\u65E0\u6548\u6216\u6743\u9650\u8FC7\u5BBD\uFF1B\u8BF7\u68C0\u67E5\u79C1\u6709\u914D\u7F6E\u540E\u91CD\u65B0\u8FDE\u63A5")}}function $e(e){return Gr("sha256").update(JSON.stringify(e)||"").digest("hex")}function Jt(e,t){ue(e),zt(M(e),{recursive:!0,mode:448}),process.platform!=="win32"&&Mt(M(e),448);let r=e+".lock";try{Be(r,String(process.pid),{flag:"wx",mode:384})}catch{throw new Error("Agent Utopia \u8FDE\u63A5\u914D\u7F6E\u6B63\u5728\u4FEE\u6539\uFF1B\u82E5\u6B64\u524D\u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF0C\u8BF7\u6838\u5B9E\u6CA1\u6709\u8FDE\u63A5\u64CD\u4F5C\u540E\u79FB\u9664 connection.json.lock")}try{t()}finally{ve(r)}}function Zr(e,t,r=fe()){Jt(r,()=>{if($e(le(r))!==$e(t))throw new Error("Agent Utopia \u5F53\u524D\u8FDE\u63A5\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u8FDE\u63A5");let n=r+"."+je()+".tmp";try{Be(n,JSON.stringify(e,null,2)+`
|
|
19
|
-
`,{flag:"wx",mode:384}),
|
|
20
|
-
`,{flag:"wx",mode:384})}catch(n){if(n.code!=="EEXIST")throw n}let
|
|
21
|
-
`,{flag:"wx",mode:384})}catch{throw new Error("\u8BBE\u5907\u51ED\u636E\u5DF2\u9886\u53D6\u4F46\u65E0\u6CD5\u4FDD\u5B58\uFF1B\u8BF7\u7531\u6388\u6743\u8D26\u53F7\u5728\u51ED\u636E\u5217\u8868\u64A4\u9500\u8BE5\u8BBE\u5907\u6388\u6743\u540E\u91CD\u8BD5")}}}try{let
|
|
22
|
-
`)),
|
|
23
|
-
`)),
|
|
24
|
-
\u786E\u8BA4\u8BBE\u5907\u7801\uFF1A${
|
|
25
|
-
`),h?
|
|
26
|
-
`)return w();if(c==="\x7F"||c==="\b"?a=[...a].slice(0,-1).join(""):c>=" "&&(a+=c),Buffer.byteLength(a)>r)return w(new Error("\u51ED\u636E\u8FC7\u957F"))}};n.on("data",S),n.once("end",l),n.once("error",f)})}te();var nn=["account_recovery","moderation_appeal","delivery_dispute","billing","technical"];function Gt(e,t){if(typeof e!="string"||!e.trim()||Buffer.from(e,"utf8").toString("utf8")!==e||Buffer.byteLength(e,"utf8")>8192||/[\0\r]/.test(e))throw new Error(t+"\u5FC5\u987B\u4E3A\u975E\u7A7A UTF-8 \u6587\u672C\uFF0C\u6700\u591A 8192 \u5B57\u8282\uFF0C\u4E0D\u542B NUL \u6216 CR");return e}async function Kt(e,t,r,n){if(e.profile.version!==2)throw new Error("support \u547D\u4EE4\u9700\u8981\u8D26\u53F7\u8FDE\u63A5\uFF1B\u7EC4\u7EC7\u8FDE\u63A5\u4E0D\u4F1A\u8F6C\u6362\u4E3A\u8D26\u53F7\u6743\u9650");let i=c=>typeof r[c]=="string"?r[c]:void 0,o=c=>{let _=i(c);if(!_)throw new Error("\u7F3A\u5C11 --"+c);return _},s=(...c)=>{if(Object.keys(r).some(_=>!["help","json",...c].includes(_)))throw new Error("support \u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},d=c=>{if(t.length!==c)throw new Error("support \u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},a=()=>{if(!U(t[1]))throw new Error("\u5DE5\u5355 ID \u65E0\u6548");return"support/tickets/"+encodeURIComponent(t[1])},p=()=>{let c=o("expect-revision");if(c==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return ee(c,"--expect-revision")},w=()=>{let c=o("key");if(Buffer.byteLength(c)>128||c.trim()!==c||/[\0\r\n\t]/.test(c))throw new Error("--key \u5FC5\u987B\u662F\u6700\u591A 128 \u5B57\u8282\u7684\u7A33\u5B9A\u5E42\u7B49\u952E");return c},l=c=>Gt($(c,8192,"\u5DE5\u5355\u8BF4\u660E","support_text_too_large"),"\u5DE5\u5355\u8BF4\u660E"),f=c=>console.log(JSON.stringify(c,null,2)),S=(c,_="GET",u,y)=>e.request("platform","/api/v1/"+c,{method:_,body:u,key:y,signal:n}),h=t[0];if(h==="ls"||h==="messages"){d(h==="ls"?1:2),s("cursor","limit");let c=h==="ls"?"support/tickets":a()+"/messages",_=new URLSearchParams;if(i("cursor")){if(!U(i("cursor")))throw new Error("\u5DE5\u5355 cursor \u65E0\u6548");_.set("cursor",i("cursor"))}if(i("limit")){let u=i("limit");if(!/^\d+$/.test(u)||Number(u)<1||Number(u)>50)throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");_.set("limit",u)}f(await S(c+(_.size?"?"+_.toString():"")))}else if(h==="get")d(2),s(),f(await S(a()));else if(h==="create"){d(2),s("key");let c=w(),_=JSON.parse($(t[1],64*1024,"\u5DE5\u5355 JSON","support_request_too_large"));if(!_||typeof _!="object"||Array.isArray(_))throw new Error("\u5DE5\u5355 JSON \u5FC5\u987B\u662F\u5BF9\u8C61");let u=_;if(Object.keys(u).some(y=>!["kind","subject_id","reason","draft"].includes(y))||!nn.includes(String(u.kind)))throw new Error("\u5DE5\u5355\u53EA\u5141\u8BB8 kind\u3001subject_id\u3001reason\u3001draft\uFF1Bprocessing_delay \u7531\u670D\u52A1\u7AEF\u81EA\u52A8\u5EFA\u7ACB");if(Gt(u.reason,"reason"),"draft"in u&&typeof u.draft!="boolean")throw new Error("draft \u5FC5\u987B\u662F\u5E03\u5C14\u503C");if(u.kind==="delivery_dispute"?!U(u.subject_id):"subject_id"in u&&u.subject_id!=="")throw new Error("delivery_dispute \u5FC5\u987B\u63D0\u4F9B\u5408\u4F5C subject_id\uFF1B\u5176\u4ED6\u7C7B\u522B\u6682\u4E0D\u63A5\u53D7\u4E1A\u52A1\u5BF9\u8C61\u5F15\u7528");f(await S("support/tickets","POST",u,c))}else if(["submit","reopen","message"].includes(h)){d(h==="submit"?2:3),s("key","expect-revision");let c=a()+"/"+(h==="message"?"messages":h),_=p(),u=w(),y={expected_revision:_,...h==="submit"?{}:h==="message"?{body_text:l(t[2])}:{reason:l(t[2])}};f(await S(c,"POST",y,u))}else throw new Error("\u672A\u77E5 support \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help")}var on=["security","transaction","collaboration","track","system"];function it(e,t){let r=typeof e.scopes=="string"?e.scopes.split(","):t;if(!r)throw new Error("\u7F3A\u5C11 --scopes");let n=e["resource-mode"];if(n!=="all_visible"&&n!=="selected_tracks")throw new Error("--resource-mode \u5FC5\u987B\u4E3A all_visible \u6216 selected_tracks");return G({scopes:r,resource_mode:n,track_ids:typeof e["track-ids"]=="string"?e["track-ids"].split(","):void 0})}async function Ht(e,t,r,n,i){if(t==="support")return await Kt(e,r,n,i),!0;if(!["notifications","reauth","party"].includes(t)&&t!=="token")return!1;let o=u=>typeof n[u]=="string"?n[u]:void 0,s=u=>{let y=o(u);if(!y)throw new Error("\u7F3A\u5C11 --"+u);return y},d=(...u)=>{if(Object.keys(n).some(y=>!["help","json",...u].includes(y)))throw new Error("\u6B64\u8D26\u53F7\u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},a=u=>{if(r.length!==u)throw new Error("\u8D26\u53F7\u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},p=()=>{let u=s("expect-revision");if(u==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return ee(u,"--expect-revision")},w=()=>{let u=o("limit");if(u!==void 0&&(!/^\d+$/.test(u)||Number(u)<1||Number(u)>50))throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");return u},l=()=>{let u=s("category");if(!on.includes(u))throw new Error("--category \u4E0D\u652F\u6301\u8BE5\u5206\u7C7B");return u},f=(u,y="GET",E,g)=>e.request(["notifications","party"].includes(t)?"platform":"auth","/api/v1/"+u,{method:y,body:E,key:g,signal:i}),S=u=>console.log(JSON.stringify(u,null,2)),h=()=>{if(!U(r[1]))throw new Error("\u8D26\u53F7\u5BF9\u8C61 ID \u65E0\u6548");return encodeURIComponent(r[1])},c=(u,y)=>u+(y.size?"?"+y.toString():"");if(t==="reauth"){if(a(0),d("password-stdin"),e.profile.credential_kind!=="account_session")throw new Error("\u8FD1\u671F\u5BC6\u7801\u6838\u9A8C\u4EC5\u9002\u7528\u4E8E\u4EBA\u7684\u8D26\u53F7\u4F1A\u8BDD\uFF1BAgent \u9700\u91CD\u65B0\u83B7\u53D6\u4EBA\u7684\u8BBE\u5907\u6388\u6743");return S(await f("auth/reauthentication","POST",{purpose:"credential_management",password:await Fe(!!n["password-stdin"],"Password")})),!0}let _=r[0];if(t==="party"){if(_==="ls")a(1),d(),S(await f("parties"));else if(_==="get")a(2),d(),S(await f("parties/"+h()));else if(_==="delegations"){a(2),d("cursor","limit");let u=new URLSearchParams;o("cursor")&&u.set("cursor",o("cursor")),w()&&u.set("limit",w()),S(await f(c("parties/"+h()+"/delegations",u)))}else if(_==="delegate"){a(3),d("key","expect-revision");let u="parties/"+h()+"/delegations",y=s("key"),E=p(),g=JSON.parse($(r[2],ae,"\u59D4\u6258 JSON \u6587\u4EF6","request_too_large"));if(!g||typeof g!="object"||Array.isArray(g))throw new Error("\u59D4\u6258 JSON \u5FC5\u987B\u4E3A\u5BF9\u8C61");let m=g;if(Object.keys(m).some(b=>!["account_id","capabilities","track_ids","expires_at"].includes(b))||!U(m.account_id))throw new Error("\u59D4\u6258\u53EA\u5141\u8BB8 account_id\u3001capabilities\u3001track_ids\u3001expires_at\uFF1B\u7248\u672C\u548C\u5E42\u7B49\u952E\u4F7F\u7528\u547D\u4EE4\u9009\u9879");if(!Array.isArray(m.capabilities)||!m.capabilities.length||m.capabilities.length>2||m.capabilities.some(b=>b!=="publish"&&b!=="share")||new Set(m.capabilities).size!==m.capabilities.length)throw new Error("\u59D4\u6258\u80FD\u529B\u53EA\u80FD\u662F\u552F\u4E00\u7684 publish/share\uFF0C\u4E0D\u80FD\u6388\u4E88\u786E\u8BA4\u5408\u4F5C\u3001\u4ED8\u6B3E\u6216\u6240\u6709\u6743\u80FD\u529B");if(!Array.isArray(m.track_ids)||m.track_ids.length>100||m.track_ids.some(b=>!U(b))||new Set(m.track_ids).size!==m.track_ids.length)throw new Error("track_ids \u5FC5\u987B\u662F\u6700\u591A 100 \u4E2A\u552F\u4E00 Track ID \u7684\u6570\u7EC4\uFF0C\u7A7A\u6570\u7EC4\u8868\u793A\u4E0D\u9650 Track");if("expires_at"in m&&(typeof m.expires_at!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/.test(m.expires_at)||!Number.isFinite(Date.parse(m.expires_at))))throw new Error("expires_at \u5FC5\u987B\u662F\u5E26\u65F6\u533A\u7684 RFC3339 \u65F6\u95F4");S(await f(u,"POST",{...m,expected_revision:E},y))}else if(_==="revoke")a(2),d("key","expect-revision"),S(await f("party-delegations/"+h(),"DELETE",{expected_revision:p()},s("key")));else throw new Error("\u672A\u77E5 party \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help");return!0}if(t==="token"){if(_==="ls"){a(1),d("cursor","limit","include-inactive");let u=new URLSearchParams;o("cursor")&&u.set("cursor",o("cursor")),w()&&u.set("limit",w()),n["include-inactive"]&&u.set("include_inactive","true"),S(await f(c("auth/tokens",u)))}else if(_==="new"){a(1),d("name","scopes","resource-mode","track-ids","expires-in","replace-token-id","expect-revision","key");let u=s("name"),y=s("key"),E=it(n),g=o("expires-in");if(g!==void 0&&(!/^\d+$/.test(g)||Number(g)<1||Number(g)>90*86400))throw new Error("--expires-in \u5FC5\u987B\u4E3A 1\u20137776000 \u79D2");let m=o("replace-token-id");if(!!m!=!!o("expect-revision")||m&&!U(m))throw new Error("\u66FF\u6362\u9700\u540C\u65F6\u6307\u5B9A --replace-token-id \u4E0E --expect-revision");let b=m?p():void 0;S(await f("auth/tokens","POST",{name:u,...E,...g?{expires_in_seconds:Number(g)}:{},...m?{replace_token_id:m,expected_revision:b}:{}},y))}else if(_==="revoke")a(2),d("key","expect-revision"),S(await f("auth/tokens/"+h(),"DELETE",{expected_revision:p()},s("key")));else throw new Error("\u672A\u77E5 token \u547D\u4EE4");return!0}if(_==="ls"||_==="count"){a(1),d("category","min-revision","fresh",..._==="ls"?["cursor","limit","unread-only"]:[]);let u=new URLSearchParams;o("category")&&u.set("category",l()),o("min-revision")!==void 0&&u.set("min_revision",B(o("min-revision"),"--min-revision")),n.fresh&&u.set("fresh","true"),_==="ls"&&(o("cursor")&&u.set("cursor",o("cursor")),w()&&u.set("limit",w()),n["unread-only"]&&u.set("unread_only","true")),S(await f(c(_==="ls"?"notifications":"notifications/unread-count",u)))}else if(_==="read")a(2),d(),S(await f("notifications/"+h()+"/read","POST"));else if(_==="read-through")a(1),d("seen-cursor"),S(await f("notifications/read-through","POST",{seen_cursor:s("seen-cursor")}));else if(_==="preferences")a(1),d(),S(await f("notification-preferences"));else if(_==="preference"){a(1),d("category","email-enabled","sms-enabled","expect-revision","key");let u={category:l(),expected_revision:p()};if(o("email-enabled")===void 0||o("sms-enabled")===void 0)throw new Error("\u504F\u597D\u66F4\u65B0\u9700\u540C\u65F6\u6307\u5B9A --email-enabled \u548C --sms-enabled\uFF08\u5B8C\u6574\u7684\u5DF2\u8BFB\u504F\u597D\u72B6\u6001\uFF09");for(let y of["email-enabled","sms-enabled"])if(o(y)!==void 0){if(!["true","false"].includes(o(y)))throw new Error("--"+y+" \u5FC5\u987B\u4E3A true \u6216 false");u[y.replace("-","_")]=o(y)==="true"}S(await f("notification-preferences","PUT",u,s("key")))}else throw new Error("\u672A\u77E5 notifications \u547D\u4EE4");return!0}te();ct();te();import{setTimeout as dn}from"node:timers/promises";function un(e,t){let r=e;if(!r||r.track_id!==t||!Array.isArray(r.items)||typeof r.has_more!="boolean")throw new Error("\u66F4\u65B0\u5206\u9875\u54CD\u5E94\u65E0\u6548");let n=BigInt(B(String(r.through_seq),"through_seq"));if(r.has_more?typeof r.next_cursor!="string"||!r.next_cursor:typeof r.sync_cursor!="string"||!r.sync_cursor)throw new Error("\u66F4\u65B0\u5206\u9875\u7F3A\u5C11\u7EED\u8BFB\u6E38\u6807");let i=-1n;for(let o of r.items){let s=BigInt(B(String(o.seq),"seq"));if(typeof o.id!="string"||typeof o.kind!="string"||s<=i||s>n)throw new Error("\u66F4\u65B0\u987A\u5E8F\u65E0\u6548");i=s}return r}async function tr(e,t,r){if(r.after!==void 0&&r.cursor)throw new Error("--after-seq \u4E0E --cursor \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");let n=Date.now()+r.timeoutMS,i=r.cursor;for(;;){e.assertActive(),r.signal?.throwIfAborted();let o=new URLSearchParams({limit:String(r.limit),max_bytes:String(ce(r.maxBytes))});i?o.set("cursor",i):o.set("after_seq",B(r.after||"0","after_seq"));let s=un(await e.request("platform","/api/v1/tracks/"+encodeURIComponent(t)+"/updates?"+o,{signal:r.signal}),t);if(s.items.length)return{status:"updated",...s};let d=s.has_more?s.next_cursor:s.sync_cursor;if(s.has_more&&d===i)throw new Error("\u66F4\u65B0\u6E38\u6807\u672A\u63A8\u8FDB");if(i=d,Date.now()>=n)return{status:"timeout",...s};s.has_more||await dn(Math.min(r.intervalMS,n-Date.now()),void 0,{signal:r.signal})}}import{createHash as ut,randomUUID as ln}from"node:crypto";import{constants as nr,lstatSync as ir,readFileSync as fn,renameSync as pn,writeFileSync as or,unlinkSync as sr}from"node:fs";import{open as ar,link as mn,unlink as gn}from"node:fs/promises";import{resolve as dt}from"node:path";import{setTimeout as lt}from"node:timers/promises";var Z=class extends Error{};async function rr(e,t,r,n,i,o=fetch){e.assertActive(),i?.throwIfAborted();let s=await e.request("platform",t,{signal:i});if(!s||s.transport!=="cdn"||s.method!=="GET"||s.range_supported!==!0||s.size_bytes!==r.size_bytes||s.sha256!==r.sha256||!/^[A-Za-z0-9_-]{1,64}$/.test(s.delivery_id))throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u8BB8\u53EF\u4E0E\u6587\u4EF6\u8EAB\u4EFD\u4E0D\u4E00\u81F4");let d=Date.parse(s.expires_at);if(!Number.isFinite(d)||d<=Date.now()||d>Date.now()+3e5)throw new Error("\u4E0B\u8F7D\u8BB8\u53EF\u5DF2\u8FC7\u671F\u6216\u6709\u6548\u671F\u65E0\u6548");let a;try{a=new URL(s.download_url)}catch{throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u5730\u5740\u65E0\u6548")}let p=[...a.searchParams.keys()],w=[e.profile.auth_url,e.profile.platform_url].map(f=>new URL(f).hostname);if(a.protocol!=="https:"||a.username||a.password||a.port||a.hash||w.includes(a.hostname)||!a.pathname.includes("/released/")||/[%\\]/.test(a.pathname)||s.download_url!==a.href||p.length!==2||a.searchParams.getAll("token").length!==1||!a.searchParams.get("token")||a.searchParams.get("token").length>8192||a.searchParams.getAll("delivery_id").length!==1||a.searchParams.get("delivery_id")!==s.delivery_id)throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u5730\u5740\u4E0D\u7B26\u5408\u72EC\u7ACB CDN \u534F\u8BAE");if(!Number.isSafeInteger(n)||n<0||n>=r.size_bytes)throw new Error("\u4E0B\u8F7D\u7EED\u4F20\u4F4D\u7F6E\u65E0\u6548");e.assertActive(),i?.throwIfAborted();let l;try{l=await o(a,{method:"GET",headers:n?{Range:"bytes="+n+"-"}:{},redirect:"error",credentials:"omit",referrerPolicy:"no-referrer",signal:AbortSignal.any([...i?[i]:[],AbortSignal.timeout(6e5)])})}catch{throw i?.throwIfAborted(),new Z("CDN \u8FDE\u63A5\u4E2D\u65AD\uFF1B\u6B63\u5728\u91CD\u65B0\u6821\u9A8C\u4E0B\u8F7D\u6743\u9650")}try{if(e.assertActive(),i?.throwIfAborted(),[403,408,429,500,502,503,504].includes(l.status))throw new Z("CDN \u4E0B\u8F7D\u6682\u4E0D\u53EF\u7528\uFF08HTTP "+l.status+"\uFF09");let f=l.headers.get("content-range");if(l.status!==(n?206:200)||!l.body||l.headers.get("content-length")!==String(r.size_bytes-n)||(l.headers.get("content-encoding")||"identity")!=="identity"||(n?f!=="bytes "+n+"-"+(r.size_bytes-1)+"/"+r.size_bytes:f!==null))throw new Error("CDN \u54CD\u5E94\u72B6\u6001\u3001\u957F\u5EA6\u6216 Range \u4E0D\u7B26\u5408\u4E0B\u8F7D\u8BB8\u53EF");return l}catch(f){throw await l.body?.cancel().catch(()=>{}),f}}var cr=200*1024*1024,Se=8*1024*1024,re=e=>/^[A-Za-z0-9_-]{1,64}$/.test(e),wn=e=>ut("sha256").update(e).digest("hex");function dr(e){let t;try{t=ir(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(!t.isFile()||t.isSymbolicLink()||t.size>65536)throw new Error("\u4E0A\u4F20\u8FDB\u5EA6\u6587\u4EF6\u5FC5\u987B\u662F\u4E0D\u8D85\u8FC7 64 KiB \u7684\u666E\u901A\u6587\u4EF6");let r=JSON.parse(fn(e,"utf8"));if(r.version!==2||!re(r.upload_id)||!Array.isArray(r.parts)||r.parts.length>25||r.parts.some((n,i)=>n.part_number!==i+1||typeof n.etag!="string"||n.etag.length>128))throw new Error("\u4E0A\u4F20\u8FDB\u5EA6\u6587\u4EF6\u65E0\u6548");return r}function ze(e,t){dr(e);let r=e+"."+process.pid+".tmp";try{or(r,JSON.stringify(t,null,2)+`
|
|
27
|
-
`,{flag:"wx",mode:384}),
|
|
18
|
+
\u8FD0\u884C aut self update \u5B89\u88C5\u66F4\u65B0\u3002`)}import{parseArgs as Nn}from"node:util";import{constants as tt,closeSync as Fr,fstatSync as Mr,lstatSync as Jr,openSync as Gr,readSync as Yr}from"node:fs";import{resolve as Kr}from"node:path";var be=1024*1024,rt=be,ae=2*be,Ue=4*be,nt=32*be,Lt=1024,G=class extends Error{constructor(t,n){super(`${t}: ${n}`);this.code=t}code};function ee(e,r,t="content_too_large"){throw new G(t,`${e}\u4E0D\u80FD\u8D85\u8FC7 ${r} \u5B57\u8282\uFF08${r/be} MiB\uFF09\uFF1B\u8BF7\u62C6\u5206\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u622A\u65AD`)}function Ct(e,r,t,n){let o=[],i=0;for(;;){let s=Buffer.allocUnsafe(Math.min(65536,r-i+1)),c;try{c=Yr(e,s,0,s.length,null)}catch(a){if(a.code==="EINTR")continue;throw a}if(!c)return Buffer.concat(o,i);i+=c,i>r&&ee(t,r,n),o.push(s.subarray(0,c))}}function Hr(e,r,t="\u6587\u4EF6",n="content_too_large"){let o=Kr(e),i=Jr(o);if(!i.isFile()||i.isSymbolicLink())throw new Error(`${t}\u5FC5\u987B\u662F\u666E\u901A\u6587\u4EF6\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u7279\u6B8A\u6587\u4EF6`);i.size>r&&ee(t,r,n);let s=Gr(o,tt.O_RDONLY|(tt.O_NOFOLLOW||0)|(tt.O_NONBLOCK||0));try{let c=Mr(s);if(!c.isFile()||c.dev!==i.dev||c.ino!==i.ino)throw new Error(`${t}\u8BFB\u53D6\u524D\u5DF2\u6539\u53D8\u6216\u4E0D\u662F\u666E\u901A\u6587\u4EF6`);return c.size>r&&ee(t,r,n),Ct(s,r,t,n)}finally{Fr(s)}}function ke(e,r="\u6B63\u6587"){if(e.includes(0))throw new G("invalid_content_encoding",`${r}\u4E0D\u80FD\u5305\u542B NUL \u5B57\u8282\uFF0C\u8BF7\u4F7F\u7528 Markdown/HTML \u6587\u672C`);try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(e)}catch{throw new G("invalid_content_encoding",`${r}\u5FC5\u987B\u662F\u6709\u6548\u7684 UTF-8 \u6587\u672C`)}}function C(e,r=rt,t="\u6B63\u6587",n="content_too_large"){let o=e==="-"?Ct(0,r,t,n):Hr(e,r,t,n);return ke(o,t)}function Wr(e,r="\u6B63\u6587"){if(e.includes("\0"))throw new G("invalid_content_encoding",`${r}\u4E0D\u80FD\u5305\u542B NUL \u5B57\u8282\uFF0C\u8BF7\u4F7F\u7528 Markdown/HTML \u6587\u672C`);let t=Buffer.from(e,"utf8");if(t.toString("utf8")!==e)throw new G("invalid_content_encoding",`${r}\u5305\u542B\u65E0\u6548\u7684 Unicode \u5B57\u7B26`);t.length>rt&&ee(r,rt)}function $t(e,r){if(!r||typeof r!="object")return;let t=e.split("?")[0],n=r;if(/\/tracks\/[^/]+\/(content-commits|background-versions|handoffs)$/.test(t)){if(Buffer.byteLength(JSON.stringify(r))>256*1024)throw new G("manifest_too_large","\u5185\u5BB9\u6E05\u5355\u6700\u591A 256 KiB");let o=t.endsWith("/content-commits")?n.message?.text:n.body_text;if(o!==void 0){if(typeof o!="string")throw new Error("\u6B63\u6587\u5FC5\u987B\u662F\u6587\u672C");if(Wr(o),Buffer.byteLength(o)>64*1024)throw new G("content_too_large","\u77ED\u6B63\u6587\u6700\u591A 64 KiB\uFF1B\u8F83\u5927\u6B63\u6587\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\u518D\u5F15\u7528")}}}function Bt(e){let r=JSON.stringify(e);if(r===void 0)throw new Error("\u8BF7\u6C42\u5FC5\u987B\u662F\u53EF\u7F16\u7801\u7684 JSON");return Buffer.byteLength(r,"utf8")>ae&&ee("\u7F16\u7801\u540E\u7684 JSON \u8BF7\u6C42",ae,"request_too_large"),r}async function Pe(e,r){let t=e.body?.getReader();if(!t)return Buffer.alloc(0);let n=[],o=0;try{let i=e.headers.get("content-length");for(!e.headers.has("content-encoding")&&i&&/^\d+$/.test(i)&&Number(i)>r&&ee("HTTP \u54CD\u5E94",r,"response_too_large");;){let{done:s,value:c}=await t.read();if(s)return Buffer.concat(n,o);o+=c.byteLength,o>r&&ee("HTTP \u54CD\u5E94",r,"response_too_large"),n.push(c)}}catch(i){try{await t.cancel()}catch{}throw i}finally{t.releaseLock()}}function ce(e){if(e===void 0)return Ue;let r=Number(e);if(!/^\d+$/.test(String(e))||!Number.isSafeInteger(r)||r<Lt||r>nt)throw new Error(`--max-bytes \u5FC5\u987B\u4E3A ${Lt}\u2013${nt} \u7684\u6574\u6570`);return r}function qt(e,r=!1){let t=new URL(e,"https://utopia.invalid");return/^\/api\/v1\/(?:tracks\/[^/]+\/(?:updates|context|records)|records(?:\/[^/]+\/versions)?)$/.test(t.pathname)?ce(t.searchParams.get("max_bytes")??void 0):r||/\/body$/.test(t.pathname)||/\/background(?:-versions\/[^/]+)?$/.test(t.pathname)?nt:Ue}V();V();Oe();V();import{createHash as Zr}from"node:crypto";var Qr=new Set(["text","material","content_json","context_json","snapshot_json","evidence_json","body_text","body","goal","content","snapshot","handoff","background","reason","facts_text","evidence","brief","context_text","acceptance_criteria","inputs","outputs"]);function it(e){return!e||typeof e!="object"?!1:Object.entries(e).some(([r,t])=>!(/(?:_url|_cursor)$/.test(r)||["url","cursor","token","content_object"].includes(r))&&(t!==null&&t!==""&&Qr.has(r)&&(typeof t=="string"||typeof t=="object")||typeof t=="string"&&Buffer.byteLength(t)>1024||it(t)))}function zt(e){return/^\/(?:api|web|staff)\/v1\/(?:task-access-grants|task-record-offers|access-requests|collaboration-resources|collaboration-assignments|collaboration-party-changes|collaboration-terminations|moderation|me|search|utopia|tracks|records|entries|boards|board-posts|content-shares|tasks|solutions|solution-versions|collaborations|deliveries|task-selections|support|content-reports|workspace)(?:\/|\?|$)/.test(e)}function Ft(e,r,t){if(typeof e!="string")throw new Error("\u65E0\u6548\u6B63\u6587\u4F20\u8F93\u5730\u5740");let n=new URL(e);if(n.protocol!=="https:"||n.username||n.password||n.port||n.hash||n.hostname===new URL(r).hostname||!n.hostname.includes(".")||/^[0-9.]+$/.test(n.hostname)||/[%\\]/.test(n.pathname)||t&&!n.pathname.includes("/released/content/"))throw new Error("\u6B63\u6587\u5FC5\u987B\u901A\u8FC7\u72EC\u7ACB OSS/CDN \u57DF\u540D\u4F20\u8F93");return n.href}var Mt=e=>Zr("sha256").update(e).digest("hex");async function Jt(e,r,t,n,o,i,s){let c=Buffer.from(n);if(c.length>512*1024)throw new Error("\u6B63\u6587\u8BF7\u6C42\u8D85\u8FC7 512 KiB");let a=await i({path:r,method:t,idempotency_key:o||"",size_bytes:c.length,sha256:Mt(c)}),f=a.upload;if(!f||f.method!=="PUT"||f.size_bytes!==c.length||typeof a.content_object!="string")throw new Error("\u65E0\u6548\u6B63\u6587\u4E0A\u4F20\u8BB8\u53EF");for(let l of Object.keys(f.headers||{}))if(!/^(content-length|content-type|cache-control|content-md5|x-oss-[a-z0-9-]+)$/i.test(l))throw new Error("\u65E0\u6548 OSS \u4E0A\u4F20\u8BF7\u6C42\u5934");let m=await fetch(Ft(f.url,e,!1),{method:"PUT",body:c,headers:f.headers,credentials:"omit",redirect:"error",signal:s});if(await m.body?.cancel(),!m.ok)throw new Error("OSS \u6B63\u6587\u76F4\u4F20\u5931\u8D25");return JSON.stringify({content_object:a.content_object})}async function Gt(e,r,t){if(!e||typeof e!="object"||e.transport!=="content_refs_v1")return e;let n=e,o=n.content;if(!o||o.transport!=="cdn"||o.method!=="GET"||!Number.isSafeInteger(o.size_bytes)||o.size_bytes<=0||o.size_bytes>16*1024*1024||!/^[a-f0-9]{64}$/.test(o.sha256))throw new Error("\u65E0\u6548\u6B63\u6587\u4E0B\u8F7D\u8BB8\u53EF");let i=await fetch(Ft(o.download_url,r,!0),{method:"GET",credentials:"omit",redirect:"error",signal:t});if(!i.ok)throw await i.body?.cancel(),new Error("CDN \u6B63\u6587\u4E0D\u53EF\u7528\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u4EE5\u68C0\u67E5\u5F53\u524D\u6743\u9650");let s=await Pe(i,o.size_bytes);if(s.length!==o.size_bytes||Mt(s)!==o.sha256)throw new Error("\u6B63\u6587\u5927\u5C0F\u6216 SHA-256 \u6821\u9A8C\u5931\u8D25");let c=Ce(ke(s,"CDN \u6B63\u6587"));if(!Array.isArray(c))throw new Error("\u65E0\u6548\u6B63\u6587\u8868\u793A");let a=(f,m=0)=>{if(m>64)throw new Error("\u6B63\u6587\u5D4C\u5957\u8FC7\u6DF1");if(!f||typeof f!="object")return f;let l=f;if(!Array.isArray(f)&&Object.keys(f).length===1&&Object.hasOwn(f,"$content_index")){let p=l.$content_index;if(typeof p!="number"||!Number.isSafeInteger(p)||p<0||p>=c.length)throw new Error("\u65E0\u6548\u6B63\u6587\u5F15\u7528");return c[p]}for(let p of Object.keys(f))Object.defineProperty(f,p,{value:a(l[p],m+1),writable:!0,enumerable:!0,configurable:!0});return f};return a(n.metadata)}import{randomUUID as Be,createHash as en}from"node:crypto";import{chmodSync as Ht,existsSync as K,linkSync as Yt,lstatSync as $e,mkdirSync as Wt,renameSync as tn,unlinkSync as ve,writeFileSync as Fe}from"node:fs";import{homedir as Kt,hostname as rn}from"node:os";import{dirname as F,join as Z}from"node:path";import{spawn as nn}from"node:child_process";import{setTimeout as on}from"node:timers/promises";var de=class extends Error{constructor(t,n,o=0,i,s={}){super(`Agent Utopia HTTP ${t}: ${n}${n==="response_too_large"?"\uFF1B\u51CF\u5C11\u5206\u9875\u6761\u6570\uFF0C\u6216\u5728 Track \u8BFB\u53D6\u65F6\u63D0\u9AD8 --max-bytes\uFF08\u6700\u591A 33554432\uFF09\uFF0C\u4E5F\u53EF\u5355\u72EC\u8BFB\u53D6\u5185\u5BB9":""}${o?`\uFF1BRetry-After: ${o} \u79D2`:""}${i!==void 0?`\uFF1Binbox_revision=${i}`:""}${Object.keys(s).length?"\uFF1B"+JSON.stringify(s):""}`);this.status=t;this.code=n;this.retryAfter=o;this.inboxRevision=i;this.recovery=s}status;code;retryAfter;inboxRevision;recovery};function pe(){let e=process.platform==="win32"?process.env.APPDATA||Z(Kt(),"AppData","Roaming"):process.env.XDG_CONFIG_HOME||Z(Kt(),".config"),r=Z(e,"aut","connection.json"),t=Z(e,"aut","team","connection.json");if(ue(r),!K(r)&&K(t)&&(ue(t),JSON.parse(C(t,32*1024,"\u8D26\u53F7\u914D\u7F6E"))?.version===2)){fe(t);try{Yt(t,r)}catch(s){if(s.code==="EEXIST")return r;throw s}ve(t);let o=Z(F(t),"device.json"),i=Z(F(r),"device.json");if(!K(i)&&K(o)){ue(o);let s=JSON.parse(C(o,1024,"\u8BBE\u5907\u6807\u8BC6"));if(s?.version===1&&typeof s.device_id=="string"&&/^[A-Za-z0-9_-]{16,128}$/.test(s.device_id))try{Yt(o,i)}catch(c){if(c.code!=="EEXIST")throw c}}}return r}function ue(e){if(K(F(e))&&$e(F(e)).isSymbolicLink())throw new Error("\u62D2\u7EDD\u4F7F\u7528\u7B26\u53F7\u94FE\u63A5 Agent Utopia \u914D\u7F6E\u76EE\u5F55");if(K(e)&&(!$e(e).isFile()||$e(e).isSymbolicLink()))throw new Error("\u62D2\u7EDD\u4F7F\u7528\u975E\u666E\u901A Agent Utopia \u914D\u7F6E\u6587\u4EF6")}function Ee(e){if(!e||/[\\\s]/.test(e))throw new Error("Agent Utopia URL \u65E0\u6548");let r=e.match(/^https?:\/\/[^/]+(\/[^?#]*)?/i)?.[1]||"";if(/%(?:2e|2f|5c)/i.test(r)||r.split("/").some(o=>o==="."||o===".."))throw new Error("Agent Utopia URL \u4E0D\u5141\u8BB8\u8DEF\u5F84\u8DF3\u8F6C");let t;try{t=new URL(e)}catch{throw new Error("Agent Utopia URL \u65E0\u6548")}if(t.username||t.password||t.search||t.hash)throw new Error("Agent Utopia URL \u4E0D\u80FD\u5305\u542B\u51ED\u636E\u3001\u67E5\u8BE2\u53C2\u6570\u6216\u7247\u6BB5");let n=["127.0.0.1","localhost","[::1]"].includes(t.hostname);if(t.protocol!=="https:"&&!(t.protocol==="http:"&&n))throw new Error("Agent Utopia \u8FDE\u63A5\u5FC5\u987B\u4F7F\u7528 HTTPS\uFF1B\u4EC5\u672C\u673A\u5F00\u53D1\u5141\u8BB8 HTTP");return t.origin+t.pathname.replace(/\/+$/,"")}function sn(e,r,t){if(!e&&(!r||!t))throw new Error("\u63D0\u4F9B\u7F51\u5173 URL\uFF0C\u6216\u540C\u65F6\u63D0\u4F9B --auth-url \u548C --platform-url");let n=e?Ee(e):"";return{auth_url:Ee(r||n+"/amb-auth"),platform_url:Ee(t||n+"/amb-platform")}}function Me(e,r=!0){if(!e.startsWith("/")||e.startsWith("//")||/[\\\s#]/.test(e))throw new Error("Agent Utopia API \u53EA\u63A5\u53D7\u5F53\u524D\u8FDE\u63A5\u7684\u76F8\u5BF9\u8DEF\u5F84");let t=e.split("?")[0];if(/%(?:2e|2f|5c|25)/i.test(t)||t.split("/").some(n=>n==="."||n===".."))throw new Error("Agent Utopia API \u8DEF\u5F84\u4E0D\u5141\u8BB8\u8DF3\u8F6C");if(r&&!t.startsWith("/api/v1/"))throw new Error("Agent Utopia API \u4EC5\u5141\u8BB8 /api/v1/ \u8DEF\u5F84");return e}function Se(e){if(typeof e!="string"||!e||e.length>8192||!/^[\x21-\x7e]+$/.test(e))throw new Error("Agent Utopia \u51ED\u8BC1\u65E0\u6548");return e}function fe(e=pe()){if(ue(e),!!K(e))try{let r=JSON.parse(C(e,32768,"\u8D26\u53F7\u914D\u7F6E"));if(r.version!==2||!r.connection_id||!["token","browser"].includes(r.auth)||Ee(r.auth_url)!==r.auth_url||Ee(r.platform_url)!==r.platform_url)throw new Error("invalid");if(Se(r.token),!je(r.token)||!U(r.account_id)||!U(r.credential_id)||"user_id"in r||"organization_id"in r||r.credential_kind!==(r.token.startsWith("aut_agent_")?"agent_pat":"account_session"))throw new Error("invalid");if(Y(r),process.platform!=="win32"&&$e(e).mode&63)throw new Error("permissions");return r}catch{throw new Error("Agent Utopia \u8FDE\u63A5\u914D\u7F6E\u65E0\u6548\u6216\u6743\u9650\u8FC7\u5BBD\uFF1B\u8BF7\u68C0\u67E5\u79C1\u6709\u914D\u7F6E\u540E\u91CD\u65B0\u8FDE\u63A5")}}function qe(e){return en("sha256").update(JSON.stringify(e)||"").digest("hex")}function Xt(e,r){ue(e),Wt(F(e),{recursive:!0,mode:448}),process.platform!=="win32"&&Ht(F(e),448);let t=e+".lock";try{Fe(t,String(process.pid),{flag:"wx",mode:384})}catch{throw new Error("Agent Utopia \u8FDE\u63A5\u914D\u7F6E\u6B63\u5728\u4FEE\u6539\uFF1B\u82E5\u6B64\u524D\u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF0C\u8BF7\u6838\u5B9E\u6CA1\u6709\u8FDE\u63A5\u64CD\u4F5C\u540E\u79FB\u9664 connection.json.lock")}try{r()}finally{ve(t)}}function an(e,r,t=pe()){Xt(t,()=>{if(qe(fe(t))!==qe(r))throw new Error("Agent Utopia \u5F53\u524D\u8FDE\u63A5\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u8FDE\u63A5");let n=t+"."+Be()+".tmp";try{Fe(n,JSON.stringify(e,null,2)+`
|
|
19
|
+
`,{flag:"wx",mode:384}),tn(n,t)}finally{K(n)&&ve(n)}})}function st(e=pe()){let r=fe(e);return{configured:!!r,target_policy:"active-only",product:"agent-utopia",cli_version:X,...r?{auth_url:r.auth_url,platform_url:r.platform_url,auth:r.auth,identity:"account",account_id:r.account_id,credential_id:r.credential_id,credential_kind:r.credential_kind,scopes:r.scopes,resource_mode:r.resource_mode,track_ids:r.track_ids,permissions_source:"server",expires_at:r.expires_at}:{}}}function cn(e){if(!e||!/^\d+$/.test(e))return 0;let r=Number(e);return Number.isSafeInteger(r)?r:0}async function le(e,r,t={},n){let o={Accept:t.raw?"application/octet-stream":"application/json"};if(n&&(o.Authorization="Bearer "+Se(n)),t.body!==void 0&&(o["Content-Type"]="application/json"),t.key!==void 0){if(!t.key||t.key.trim()!==t.key||Buffer.byteLength(t.key)>128||/[\r\n]/.test(t.key))throw new Error("\u5E42\u7B49\u952E\u5FC5\u987B\u4E3A 1\u2013128 \u5B57\u8282\u4E14\u6CA1\u6709\u9996\u5C3E\u7A7A\u767D");o["Idempotency-Key"]=t.key}$t(r,t.body);let i=t.body===void 0?void 0:Bt(t.body),s=qt(r,t.raw),c=AbortSignal.any([AbortSignal.timeout(3e4),...t.signal?[t.signal]:[]]);c.throwIfAborted();let a;try{i!==void 0&&zt(r)&&(it(t.body)||Buffer.byteLength(i)>8192)&&(i=await Jt(e,r,t.method||"GET",i,t.key,l=>le(e,"/api/v1/content-transfers",{method:"POST",body:l,signal:t.signal},n),c)),a=await fetch(e+Me(r),{method:t.method||"GET",headers:o,redirect:"manual",signal:c,...t.body===void 0?{}:{body:i}})}catch{throw t.signal?.aborted?t.signal.reason||new Error("Agent Utopia \u8BF7\u6C42\u5DF2\u53D6\u6D88"):new Error("Agent Utopia \u8BF7\u6C42\u5931\u8D25\u6216\u8D85\u65F6\uFF1B\u5199\u64CD\u4F5C\u53EF\u80FD\u5DF2\u63D0\u4EA4\uFF0C\u8BF7\u4F7F\u7528\u539F\u5E42\u7B49\u952E\u6838\u5BF9")}if(a.status>=300&&a.status<400)throw await a.body?.cancel(),new Error("Agent Utopia \u62D2\u7EDD\u8DDF\u968F HTTP \u91CD\u5B9A\u5411\uFF1B\u8BF7\u901A\u8FC7 connect \u660E\u786E\u914D\u7F6E\u6B63\u786E\u5165\u53E3");let f=await Pe(a,a.ok?s:Ue),m;if(f.length&&!t.raw||!a.ok)try{m=Ce(ke(f,"Agent Utopia JSON \u54CD\u5E94"))}catch{if(a.ok)throw new Error("Agent Utopia \u8FD4\u56DE\u65E0\u6548 JSON")}if(!a.ok){let l=m?.error,p=typeof l=="string"?l:l?.code,v=String(m?.inbox_revision),h=m,d={};U(h?.operation_id)&&(d.operation_id=h.operation_id);let _=typeof l=="object"&&l?l.field:void 0;if(typeof _=="string"&&/^[A-Za-z0-9_.\[\]]{1,128}$/.test(_)&&(d.field=_),p==="context_changed")for(let u of["restart_url","updates_url"]){let y=h?.[u];typeof y=="string"&&/^\/api\/v1\/tracks\/[A-Za-z0-9_-]{1,64}\/(?:context|updates)(?:\?after_seq=0(?:&resource_id=[A-Za-z0-9_-]{1,64})?)?$/.test(y)&&(d[u]=y)}throw new de(a.status,p&&/^[a-z_]{1,64}$/.test(p)?p:"request_failed",cn(a.headers.get("retry-after")),p==="revision_not_available"&&/^(?:0|[1-9]\d{0,19})$/.test(v)?v:void 0,d)}return t.raw?f:Gt(m??null,e,c)}var ze=class{constructor(r=pe()){this.profilePath=r;let t=fe(r);if(!t)throw new Error("\u5C1A\u672A\u8FDE\u63A5 Agent Utopia\uFF1B\u8FD0\u884C aut connect\uFF08\u65E7\u7EC4\u7EC7\u51ED\u636E\u4E0D\u80FD\u7528\u4E8E\u8D26\u53F7 API\uFF09");this.profile=t}profilePath;profile;assertActive(){if(qe(fe(this.profilePath))!==qe(this.profile))throw new Error("Agent Utopia \u5F53\u524D\u8FDE\u63A5\u5DF2\u6539\u53D8\uFF1B\u672C\u6B21\u64CD\u4F5C\u505C\u6B62\uFF0C\u4E0D\u5207\u6362\u6216\u56DE\u9000\u5230\u5176\u4ED6\u76EE\u6807")}async request(r,t,n={}){this.assertActive();let o=await le(r==="auth"?this.profile.auth_url:this.profile.platform_url,t,n,this.profile.token);try{this.assertActive()}catch{throw new Error("Agent Utopia \u5F53\u524D\u8FDE\u63A5\u5DF2\u6539\u53D8\uFF0C\u672C\u6B21\u54CD\u5E94\u4E0D\u518D\u8F93\u51FA\uFF1B\u5DF2\u53D1\u51FA\u7684\u5199\u64CD\u4F5C\u53EF\u80FD\u5DF2\u63D0\u4EA4\uFF0C\u8BF7\u6838\u5B9E\u539F\u76EE\u6807")}if(r==="auth"&&t==="/api/v1/auth/me"){let i=ot(o,this.profile.token);if(i.account_id!==this.profile.account_id||i.credential_id!==this.profile.credential_id)throw new Error("Auth \u5F53\u524D\u8D26\u53F7\u4E0E\u8FDE\u63A5\u8EAB\u4EFD\u4E0D\u4E00\u81F4")}return o}async disconnect(r=!1){if(this.assertActive(),r){if(this.profile.credential_kind==="agent_pat")throw new Error("\u8D26\u53F7 Agent \u51ED\u636E\u8BF7\u7528 token revoke ID --expect-revision N --key KEY \u64A4\u9500\uFF0C\u518D\u8FD0\u884C disconnect\uFF1B\u65E0\u7BA1\u7406\u6743\u9650\u65F6\u7531\u6388\u6743\u8D26\u53F7\u64A4\u9500");await this.request("auth","/api/v1/accounts/logout",{method:"POST"})}return Xt(this.profilePath,()=>{this.assertActive(),ve(this.profilePath)}),{disconnected:!0,revoked:r,product:"agent-utopia"}}};function dn(e){let r=process.platform==="darwin"?"open":process.platform==="win32"?"rundll32":"xdg-open",t=process.platform==="win32"?["url.dll,FileProtocolHandler",e]:[e],n=nn(r,t,{stdio:"ignore",detached:!0,shell:!1});n.on("error",()=>{}),n.unref()}function un(e=pe()){let r=Z(F(e),"device.json");if(ue(r),Wt(F(r),{recursive:!0,mode:448}),process.platform!=="win32"&&Ht(F(r),448),!K(r))try{Fe(r,JSON.stringify({version:1,device_id:Be()})+`
|
|
20
|
+
`,{flag:"wx",mode:384})}catch(n){if(n.code!=="EEXIST")throw n}let t=JSON.parse(C(r,1024,"Agent Utopia \u8BBE\u5907\u6807\u8BC6"));if(t?.version!==1||typeof t.device_id!="string"||!/^[A-Za-z0-9_-]{16,128}$/.test(t.device_id))throw new Error("Agent Utopia \u8BBE\u5907\u6807\u8BC6\u65E0\u6548\uFF1B\u8BF7\u68C0\u67E5 device.json\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u66F4\u6362\u8BBE\u5907\u8EAB\u4EFD");return t.device_id}async function Vt(e,r=pe()){let t=e.auth==="browser"?Y({scopes:e.scopes||De,resource_mode:e.resourceMode||"all_visible",track_ids:e.trackIDs}):void 0;if(!t&&(e.scopes||e.resourceMode||e.trackIDs||e.expiresIn))throw new Error("\u8D26\u53F7\u6388\u6743\u9009\u9879\u4EC5\u7528\u4E8E\u6D4F\u89C8\u5668\u8FDE\u63A5");if(e.expiresIn!==void 0&&(!Number.isSafeInteger(e.expiresIn)||e.expiresIn<1||e.expiresIn>90*86400))throw new Error("--expires-in \u8D85\u51FA 1\u20137776000 \u79D2");let n=fe(r),o=sn(e.gateway,e.authURL,e.platformURL),i=e.auth==="token"?void 0:un(r),s,c,a,f;if(e.auth==="token"){if(s=Se(e.secret),!je(s))throw new Error("\u53EA\u63A5\u53D7 Agent Utopia \u8D26\u53F7\u51ED\u636E")}else{let m=await ln(o.auth_url,e,i,t);if(s=Se(m.token),c=m.expires_at,f=m.grant,t){a=Z(F(r),"credential-recovery."+Be()+".json");try{Fe(a,JSON.stringify({...o,secret:s,expires_at:c})+`
|
|
21
|
+
`,{flag:"wx",mode:384})}catch{throw new Error("\u8BBE\u5907\u51ED\u636E\u5DF2\u9886\u53D6\u4F46\u65E0\u6CD5\u4FDD\u5B58\uFF1B\u8BF7\u7531\u6388\u6743\u8D26\u53F7\u5728\u51ED\u636E\u5217\u8868\u64A4\u9500\u8BE5\u8BBE\u5907\u6388\u6743\u540E\u91CD\u8BD5")}}}try{let m=await le(o.auth_url,"/api/v1/auth/me",{signal:e.signal},s);if(!je(s))throw new Error("\u6388\u6743\u672A\u8FD4\u56DE\u8D26\u53F7\u51ED\u636E");{let l=ot(m,s);if(t&&(l.credential_kind!=="agent_pat"||!Le(l,t)||!f||!Number.isFinite(Date.parse(String(f.created_at)))||Date.parse(l.expires_at)-Date.parse(String(f.created_at))>(e.expiresIn||30*86400)*1e3))throw new Error("\u8BBE\u5907\u6388\u6743\u7ED3\u679C\u8D85\u51FA\u672C\u6B21\u8BF7\u6C42\u4E0A\u9650");if(t&&(!f||f.id!==l.credential_id||f.account_id!==l.account_id||f.expires_at!==l.expires_at||!Le(l,f)||!Le(f,l)))throw new Error("\u8BBE\u5907\u51ED\u636E\u4E0E\u5F53\u524D\u8D26\u53F7\u8EAB\u4EFD\u4E0D\u4E00\u81F4");an({version:2,connection_id:Be(),...o,auth:e.auth,token:s,account_id:l.account_id,credential_id:l.credential_id,credential_kind:l.credential_kind,expires_at:l.expires_at,...Y(l)},n,r)}}catch(m){throw a&&(e.notify?e.notify(`\u8BBE\u5907\u51ED\u636E\u5DF2\u9886\u53D6\uFF1B\u79C1\u6709\u6062\u590D\u6587\u4EF6\uFF1A${a}\u3002\u8FDE\u63A5\u672A\u5207\u6362\u3002\u8BF7\u6838\u9A8C\u6216\u64A4\u9500\u8BE5\u6388\u6743\u540E\u5220\u9664\u6B64\u6587\u4EF6\u3002`):process.stderr.write(`\u8BBE\u5907\u51ED\u636E\u5DF2\u9886\u53D6\uFF1B\u79C1\u6709\u6062\u590D\u6587\u4EF6\uFF1A${a}\u3002\u8FDE\u63A5\u672A\u5207\u6362\u3002\u8BF7\u6838\u9A8C\u6216\u64A4\u9500\u8BE5\u6388\u6743\u540E\u5220\u9664\u6B64\u6587\u4EF6\u3002
|
|
22
|
+
`)),m}return a&&ve(a),st(r)}async function ln(e,r,t,n){let o=r.notify||(c=>process.stderr.write(c+`
|
|
23
|
+
`)),i=await le(e,"/api/v1/auth/device/requests",{method:"POST",signal:r.signal,body:{device_id:t,name:r.device||rn(),...n,expires_in_seconds:r.expiresIn}});if(!i?.device_code||!/^[A-Z2-9-]{5,24}$/.test(i.user_code)||typeof i.verification_path!="string"||!Number.isFinite(i.expires_in)||i.expires_in<=0)throw new Error("Agent Utopia \u8BBE\u5907\u6388\u6743\u54CD\u5E94\u65E0\u6548");let s=!1;try{let c=Me(i.verification_path,!1);if(!/^\/device(?:\?|$)/.test(c))throw new Error("Agent Utopia \u6388\u6743\u9875\u9762\u8DEF\u5F84\u65E0\u6548");let a=e+c;o(`\u8BF7\u6253\u5F00 ${a}
|
|
24
|
+
\u786E\u8BA4\u8BBE\u5907\u7801\uFF1A${i.user_code}`),r.noOpen||dn(a);let f=AbortSignal.any([AbortSignal.timeout(Math.min(600,i.expires_in)*1e3),...r.signal?[r.signal]:[]]),m=Math.max(1,Math.min(60,i.interval||5));for(;;){await on(m*1e3,void 0,{signal:f});try{let l=await le(e,"/api/v1/auth/device/token",{method:"POST",signal:f,body:{device_code:i.device_code}}),p=Se(l.secret);return s=!0,{token:p,expires_at:l.expires_at,grant:l}}catch(l){if(l instanceof de&&l.code==="authorization_pending")continue;if(l instanceof de&&l.code==="slow_down"){m=Math.min(60,Math.max(m+5,l.retryAfter));continue}throw l instanceof de&&l.code==="invalid_grant"?new Error("Agent Utopia \u8BBE\u5907\u6388\u6743\u5DF2\u9886\u53D6\u6216\u5931\u6548\uFF1B\u8BF7\u91CD\u65B0\u8FD0\u884C connect\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u91CD\u65B0\u7533\u8BF7\u6388\u6743"):l}}}finally{s||await le(e,"/api/v1/auth/device/cancel",{method:"POST",signal:AbortSignal.timeout(3e3),body:{device_code:i.device_code}}).catch(()=>{})}}async function Je(e,r){let t=r==="Password"?1024:8192;if(e){if(process.stdin.isTTY)throw new Error("stdin \u51ED\u636E\u9009\u9879\u9700\u8981\u7BA1\u9053\u8F93\u5165");let s="";for await(let c of process.stdin)if(s+=c.toString(),Buffer.byteLength(s)>t+2)throw new Error("\u51ED\u636E\u8FC7\u957F");return s.replace(/\r?\n$/,"")}let n=process.stdin,o=process.stderr;if(!n.isTTY||!o.isTTY)throw new Error(`\u975E\u4EA4\u4E92\u8F93\u5165\u8BF7\u4F7F\u7528 --${r==="Password"?"password":"token"}-stdin`);let i=n.isRaw;return o.write(`${r}\uFF08\u9690\u85CF\u8F93\u5165\uFF09\uFF1A`),n.setRawMode(!0),n.resume(),new Promise((s,c)=>{let a="",f=!1,m=h=>{f||(f=!0,n.off("data",v),n.off("end",l),n.off("error",p),n.setRawMode(i),n.pause(),o.write(`
|
|
25
|
+
`),h?c(h):s(a))},l=()=>m(new Error("\u51ED\u636E\u8F93\u5165\u5DF2\u7ED3\u675F")),p=()=>m(new Error("\u51ED\u636E\u8F93\u5165\u5931\u8D25")),v=h=>{for(let d of h.toString()){if(d===""||d==="")return m(new Error("\u5DF2\u53D6\u6D88\u767B\u5F55"));if(d==="\r"||d===`
|
|
26
|
+
`)return m();if(d==="\x7F"||d==="\b"?a=[...a].slice(0,-1).join(""):d>=" "&&(a+=d),Buffer.byteLength(a)>t)return m(new Error("\u51ED\u636E\u8FC7\u957F"))}};n.on("data",v),n.once("end",l),n.once("error",p)})}V();var fn=["account_recovery","moderation_appeal","delivery_dispute","billing","technical"];function Zt(e,r){if(typeof e!="string"||!e.trim()||Buffer.from(e,"utf8").toString("utf8")!==e||Buffer.byteLength(e,"utf8")>8192||/[\0\r]/.test(e))throw new Error(r+"\u5FC5\u987B\u4E3A\u975E\u7A7A UTF-8 \u6587\u672C\uFF0C\u6700\u591A 8192 \u5B57\u8282\uFF0C\u4E0D\u542B NUL \u6216 CR");return e}async function Qt(e,r,t,n){if(e.profile.version!==2)throw new Error("support \u547D\u4EE4\u9700\u8981\u8D26\u53F7\u8FDE\u63A5\uFF1B\u7EC4\u7EC7\u8FDE\u63A5\u4E0D\u4F1A\u8F6C\u6362\u4E3A\u8D26\u53F7\u6743\u9650");let o=d=>typeof t[d]=="string"?t[d]:void 0,i=d=>{let _=o(d);if(!_)throw new Error("\u7F3A\u5C11 --"+d);return _},s=(...d)=>{if(Object.keys(t).some(_=>!["help","json",...d].includes(_)))throw new Error("support \u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},c=d=>{if(r.length!==d)throw new Error("support \u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},a=()=>{if(!U(r[1]))throw new Error("\u5DE5\u5355 ID \u65E0\u6548");return"support/tickets/"+encodeURIComponent(r[1])},f=()=>{let d=i("expect-revision");if(d==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return te(d,"--expect-revision")},m=()=>{let d=i("key");if(Buffer.byteLength(d)>128||d.trim()!==d||/[\0\r\n\t]/.test(d))throw new Error("--key \u5FC5\u987B\u662F\u6700\u591A 128 \u5B57\u8282\u7684\u7A33\u5B9A\u5E42\u7B49\u952E");return d},l=d=>Zt(C(d,8192,"\u5DE5\u5355\u8BF4\u660E","support_text_too_large"),"\u5DE5\u5355\u8BF4\u660E"),p=d=>console.log(JSON.stringify(d,null,2)),v=(d,_="GET",u,y)=>e.request("platform","/api/v1/"+d,{method:_,body:u,key:y,signal:n}),h=r[0];if(h==="ls"||h==="messages"){c(h==="ls"?1:2),s("cursor","limit");let d=h==="ls"?"support/tickets":a()+"/messages",_=new URLSearchParams;if(o("cursor")){if(!U(o("cursor")))throw new Error("\u5DE5\u5355 cursor \u65E0\u6548");_.set("cursor",o("cursor"))}if(o("limit")){let u=o("limit");if(!/^\d+$/.test(u)||Number(u)<1||Number(u)>50)throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");_.set("limit",u)}p(await v(d+(_.size?"?"+_.toString():"")))}else if(h==="get")c(2),s(),p(await v(a()));else if(h==="create"){c(2),s("key");let d=m(),_=JSON.parse(C(r[1],64*1024,"\u5DE5\u5355 JSON","support_request_too_large"));if(!_||typeof _!="object"||Array.isArray(_))throw new Error("\u5DE5\u5355 JSON \u5FC5\u987B\u662F\u5BF9\u8C61");let u=_;if(Object.keys(u).some(y=>!["kind","subject_id","reason","draft"].includes(y))||!fn.includes(String(u.kind)))throw new Error("\u5DE5\u5355\u53EA\u5141\u8BB8 kind\u3001subject_id\u3001reason\u3001draft\uFF1Bprocessing_delay \u7531\u670D\u52A1\u7AEF\u81EA\u52A8\u5EFA\u7ACB");if(Zt(u.reason,"reason"),"draft"in u&&typeof u.draft!="boolean")throw new Error("draft \u5FC5\u987B\u662F\u5E03\u5C14\u503C");if(u.kind==="delivery_dispute"?!U(u.subject_id):"subject_id"in u&&u.subject_id!=="")throw new Error("delivery_dispute \u5FC5\u987B\u63D0\u4F9B\u5408\u4F5C subject_id\uFF1B\u5176\u4ED6\u7C7B\u522B\u6682\u4E0D\u63A5\u53D7\u4E1A\u52A1\u5BF9\u8C61\u5F15\u7528");p(await v("support/tickets","POST",u,d))}else if(["submit","reopen","message"].includes(h)){c(h==="submit"?2:3),s("key","expect-revision");let d=a()+"/"+(h==="message"?"messages":h),_=f(),u=m(),y={expected_revision:_,...h==="submit"?{}:h==="message"?{body_text:l(r[2])}:{reason:l(r[2])}};p(await v(d,"POST",y,u))}else throw new Error("\u672A\u77E5 support \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help")}var pn=["security","transaction","collaboration","track","system"];function at(e,r){let t=typeof e.scopes=="string"?e.scopes.split(","):r;if(!t)throw new Error("\u7F3A\u5C11 --scopes");let n=e["resource-mode"];if(n!=="all_visible"&&n!=="selected_tracks")throw new Error("--resource-mode \u5FC5\u987B\u4E3A all_visible \u6216 selected_tracks");return Y({scopes:t,resource_mode:n,track_ids:typeof e["track-ids"]=="string"?e["track-ids"].split(","):void 0})}async function er(e,r,t,n,o){if(r==="support")return await Qt(e,t,n,o),!0;if(!["notifications","reauth","party"].includes(r)&&r!=="token")return!1;let i=u=>typeof n[u]=="string"?n[u]:void 0,s=u=>{let y=i(u);if(!y)throw new Error("\u7F3A\u5C11 --"+u);return y},c=(...u)=>{if(Object.keys(n).some(y=>!["help","json",...u].includes(y)))throw new Error("\u6B64\u8D26\u53F7\u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},a=u=>{if(t.length!==u)throw new Error("\u8D26\u53F7\u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},f=()=>{let u=s("expect-revision");if(u==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return te(u,"--expect-revision")},m=()=>{let u=i("limit");if(u!==void 0&&(!/^\d+$/.test(u)||Number(u)<1||Number(u)>50))throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");return u},l=()=>{let u=s("category");if(!pn.includes(u))throw new Error("--category \u4E0D\u652F\u6301\u8BE5\u5206\u7C7B");return u},p=(u,y="GET",E,w)=>e.request(["notifications","party"].includes(r)?"platform":"auth","/api/v1/"+u,{method:y,body:E,key:w,signal:o}),v=u=>console.log(JSON.stringify(u,null,2)),h=()=>{if(!U(t[1]))throw new Error("\u8D26\u53F7\u5BF9\u8C61 ID \u65E0\u6548");return encodeURIComponent(t[1])},d=(u,y)=>u+(y.size?"?"+y.toString():"");if(r==="reauth"){if(a(0),c("password-stdin"),e.profile.credential_kind!=="account_session")throw new Error("\u8FD1\u671F\u5BC6\u7801\u6838\u9A8C\u4EC5\u9002\u7528\u4E8E\u4EBA\u7684\u8D26\u53F7\u4F1A\u8BDD\uFF1BAgent \u9700\u91CD\u65B0\u83B7\u53D6\u4EBA\u7684\u8BBE\u5907\u6388\u6743");return v(await p("auth/reauthentication","POST",{purpose:"credential_management",password:await Je(!!n["password-stdin"],"Password")})),!0}let _=t[0];if(r==="party"){if(_==="ls")a(1),c(),v(await p("parties"));else if(_==="get")a(2),c(),v(await p("parties/"+h()));else if(_==="delegations"){a(2),c("cursor","limit");let u=new URLSearchParams;i("cursor")&&u.set("cursor",i("cursor")),m()&&u.set("limit",m()),v(await p(d("parties/"+h()+"/delegations",u)))}else if(_==="delegate"){a(3),c("key","expect-revision");let u="parties/"+h()+"/delegations",y=s("key"),E=f(),w=JSON.parse(C(t[2],ae,"\u59D4\u6258 JSON \u6587\u4EF6","request_too_large"));if(!w||typeof w!="object"||Array.isArray(w))throw new Error("\u59D4\u6258 JSON \u5FC5\u987B\u4E3A\u5BF9\u8C61");let g=w;if(Object.keys(g).some(b=>!["account_id","capabilities","track_ids","expires_at"].includes(b))||!U(g.account_id))throw new Error("\u59D4\u6258\u53EA\u5141\u8BB8 account_id\u3001capabilities\u3001track_ids\u3001expires_at\uFF1B\u7248\u672C\u548C\u5E42\u7B49\u952E\u4F7F\u7528\u547D\u4EE4\u9009\u9879");if(!Array.isArray(g.capabilities)||!g.capabilities.length||g.capabilities.length>2||g.capabilities.some(b=>b!=="publish"&&b!=="share")||new Set(g.capabilities).size!==g.capabilities.length)throw new Error("\u59D4\u6258\u80FD\u529B\u53EA\u80FD\u662F\u552F\u4E00\u7684 publish/share\uFF0C\u4E0D\u80FD\u6388\u4E88\u786E\u8BA4\u5408\u4F5C\u3001\u4ED8\u6B3E\u6216\u6240\u6709\u6743\u80FD\u529B");if(!Array.isArray(g.track_ids)||g.track_ids.length>100||g.track_ids.some(b=>!U(b))||new Set(g.track_ids).size!==g.track_ids.length)throw new Error("track_ids \u5FC5\u987B\u662F\u6700\u591A 100 \u4E2A\u552F\u4E00 Track ID \u7684\u6570\u7EC4\uFF0C\u7A7A\u6570\u7EC4\u8868\u793A\u4E0D\u9650 Track");if("expires_at"in g&&(typeof g.expires_at!="string"||!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/.test(g.expires_at)||!Number.isFinite(Date.parse(g.expires_at))))throw new Error("expires_at \u5FC5\u987B\u662F\u5E26\u65F6\u533A\u7684 RFC3339 \u65F6\u95F4");v(await p(u,"POST",{...g,expected_revision:E},y))}else if(_==="revoke")a(2),c("key","expect-revision"),v(await p("party-delegations/"+h(),"DELETE",{expected_revision:f()},s("key")));else throw new Error("\u672A\u77E5 party \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help");return!0}if(r==="token"){if(_==="ls"){a(1),c("cursor","limit","include-inactive");let u=new URLSearchParams;i("cursor")&&u.set("cursor",i("cursor")),m()&&u.set("limit",m()),n["include-inactive"]&&u.set("include_inactive","true"),v(await p(d("auth/tokens",u)))}else if(_==="new"){a(1),c("name","scopes","resource-mode","track-ids","expires-in","replace-token-id","expect-revision","key");let u=s("name"),y=s("key"),E=at(n),w=i("expires-in");if(w!==void 0&&(!/^\d+$/.test(w)||Number(w)<1||Number(w)>90*86400))throw new Error("--expires-in \u5FC5\u987B\u4E3A 1\u20137776000 \u79D2");let g=i("replace-token-id");if(!!g!=!!i("expect-revision")||g&&!U(g))throw new Error("\u66FF\u6362\u9700\u540C\u65F6\u6307\u5B9A --replace-token-id \u4E0E --expect-revision");let b=g?f():void 0;v(await p("auth/tokens","POST",{name:u,...E,...w?{expires_in_seconds:Number(w)}:{},...g?{replace_token_id:g,expected_revision:b}:{}},y))}else if(_==="revoke")a(2),c("key","expect-revision"),v(await p("auth/tokens/"+h(),"DELETE",{expected_revision:f()},s("key")));else throw new Error("\u672A\u77E5 token \u547D\u4EE4");return!0}if(_==="ls"||_==="count"){a(1),c("category","min-revision","fresh",..._==="ls"?["cursor","limit","unread-only"]:[]);let u=new URLSearchParams;i("category")&&u.set("category",l()),i("min-revision")!==void 0&&u.set("min_revision",B(i("min-revision"),"--min-revision")),n.fresh&&u.set("fresh","true"),_==="ls"&&(i("cursor")&&u.set("cursor",i("cursor")),m()&&u.set("limit",m()),n["unread-only"]&&u.set("unread_only","true")),v(await p(d(_==="ls"?"notifications":"notifications/unread-count",u)))}else if(_==="read")a(2),c(),v(await p("notifications/"+h()+"/read","POST"));else if(_==="read-through")a(1),c("seen-cursor"),v(await p("notifications/read-through","POST",{seen_cursor:s("seen-cursor")}));else if(_==="preferences")a(1),c(),v(await p("notification-preferences"));else if(_==="preference"){a(1),c("category","email-enabled","sms-enabled","expect-revision","key");let u={category:l(),expected_revision:f()};if(i("email-enabled")===void 0||i("sms-enabled")===void 0)throw new Error("\u504F\u597D\u66F4\u65B0\u9700\u540C\u65F6\u6307\u5B9A --email-enabled \u548C --sms-enabled\uFF08\u5B8C\u6574\u7684\u5DF2\u8BFB\u504F\u597D\u72B6\u6001\uFF09");for(let y of["email-enabled","sms-enabled"])if(i(y)!==void 0){if(!["true","false"].includes(i(y)))throw new Error("--"+y+" \u5FC5\u987B\u4E3A true \u6216 false");u[y.replace("-","_")]=i(y)==="true"}v(await p("notification-preferences","PUT",u,s("key")))}else throw new Error("\u672A\u77E5 notifications \u547D\u4EE4");return!0}V();lt();V();import{setTimeout as hn}from"node:timers/promises";function yn(e,r){let t=e;if(!t||t.track_id!==r||!Array.isArray(t.items)||typeof t.has_more!="boolean")throw new Error("\u66F4\u65B0\u5206\u9875\u54CD\u5E94\u65E0\u6548");let n=BigInt(B(String(t.through_seq),"through_seq"));if(t.has_more?typeof t.next_cursor!="string"||!t.next_cursor:typeof t.sync_cursor!="string"||!t.sync_cursor)throw new Error("\u66F4\u65B0\u5206\u9875\u7F3A\u5C11\u7EED\u8BFB\u6E38\u6807");let o=-1n;for(let i of t.items){let s=BigInt(B(String(i.seq),"seq"));if(typeof i.id!="string"||typeof i.kind!="string"||s<=o||s>n)throw new Error("\u66F4\u65B0\u987A\u5E8F\u65E0\u6548");o=s}return t}async function ar(e,r,t){if(t.after!==void 0&&t.cursor)throw new Error("--after-seq \u4E0E --cursor \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");let n=Date.now()+t.timeoutMS,o=t.cursor;for(;;){e.assertActive(),t.signal?.throwIfAborted();let i=new URLSearchParams({limit:String(t.limit),max_bytes:String(ce(t.maxBytes))});o?i.set("cursor",o):i.set("after_seq",B(t.after||"0","after_seq"));let s=yn(await e.request("platform","/api/v1/tracks/"+encodeURIComponent(r)+"/updates?"+i,{signal:t.signal}),r);if(s.items.length)return{status:"updated",...s};let c=s.has_more?s.next_cursor:s.sync_cursor;if(s.has_more&&c===o)throw new Error("\u66F4\u65B0\u6E38\u6807\u672A\u63A8\u8FDB");if(o=c,Date.now()>=n)return{status:"timeout",...s};s.has_more||await hn(Math.min(t.intervalMS,n-Date.now()),void 0,{signal:t.signal})}}import{createHash as pt,randomUUID as _n}from"node:crypto";import{constants as dr,lstatSync as ur,readFileSync as bn,renameSync as kn,writeFileSync as lr,unlinkSync as fr}from"node:fs";import{open as pr,link as En,unlink as Sn}from"node:fs/promises";import{resolve as ft}from"node:path";import{setTimeout as mt}from"node:timers/promises";var Q=class extends Error{};async function cr(e,r,t,n,o,i=fetch){e.assertActive(),o?.throwIfAborted();let s=await e.request("platform",r,{signal:o});if(!s||s.transport!=="cdn"||s.method!=="GET"||s.range_supported!==!0||s.size_bytes!==t.size_bytes||s.sha256!==t.sha256||!/^[A-Za-z0-9_-]{1,64}$/.test(s.delivery_id))throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u8BB8\u53EF\u4E0E\u6587\u4EF6\u8EAB\u4EFD\u4E0D\u4E00\u81F4");let c=Date.parse(s.expires_at);if(!Number.isFinite(c)||c<=Date.now()||c>Date.now()+3e5)throw new Error("\u4E0B\u8F7D\u8BB8\u53EF\u5DF2\u8FC7\u671F\u6216\u6709\u6548\u671F\u65E0\u6548");let a;try{a=new URL(s.download_url)}catch{throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u5730\u5740\u65E0\u6548")}let f=[...a.searchParams.keys()],m=[e.profile.auth_url,e.profile.platform_url].map(p=>new URL(p).hostname);if(a.protocol!=="https:"||a.username||a.password||a.port||a.hash||m.includes(a.hostname)||!a.pathname.includes("/released/")||/[%\\]/.test(a.pathname)||s.download_url!==a.href||f.length!==2||a.searchParams.getAll("token").length!==1||!a.searchParams.get("token")||a.searchParams.get("token").length>8192||a.searchParams.getAll("delivery_id").length!==1||a.searchParams.get("delivery_id")!==s.delivery_id)throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u5730\u5740\u4E0D\u7B26\u5408\u72EC\u7ACB CDN \u534F\u8BAE");if(!Number.isSafeInteger(n)||n<0||n>=t.size_bytes)throw new Error("\u4E0B\u8F7D\u7EED\u4F20\u4F4D\u7F6E\u65E0\u6548");e.assertActive(),o?.throwIfAborted();let l;try{l=await i(a,{method:"GET",headers:n?{Range:"bytes="+n+"-"}:{},redirect:"error",credentials:"omit",referrerPolicy:"no-referrer",signal:AbortSignal.any([...o?[o]:[],AbortSignal.timeout(6e5)])})}catch{throw o?.throwIfAborted(),new Q("CDN \u8FDE\u63A5\u4E2D\u65AD\uFF1B\u6B63\u5728\u91CD\u65B0\u6821\u9A8C\u4E0B\u8F7D\u6743\u9650")}try{if(e.assertActive(),o?.throwIfAborted(),[403,408,429,500,502,503,504].includes(l.status))throw new Q("CDN \u4E0B\u8F7D\u6682\u4E0D\u53EF\u7528\uFF08HTTP "+l.status+"\uFF09");let p=l.headers.get("content-range");if(l.status!==(n?206:200)||!l.body||l.headers.get("content-length")!==String(t.size_bytes-n)||(l.headers.get("content-encoding")||"identity")!=="identity"||(n?p!=="bytes "+n+"-"+(t.size_bytes-1)+"/"+t.size_bytes:p!==null))throw new Error("CDN \u54CD\u5E94\u72B6\u6001\u3001\u957F\u5EA6\u6216 Range \u4E0D\u7B26\u5408\u4E0B\u8F7D\u8BB8\u53EF");return l}catch(p){throw await l.body?.cancel().catch(()=>{}),p}}var mr=200*1024*1024,xe=8*1024*1024,re=e=>/^[A-Za-z0-9_-]{1,64}$/.test(e),vn=e=>pt("sha256").update(e).digest("hex");function gr(e){let r;try{r=ur(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(!r.isFile()||r.isSymbolicLink()||r.size>65536)throw new Error("\u4E0A\u4F20\u8FDB\u5EA6\u6587\u4EF6\u5FC5\u987B\u662F\u4E0D\u8D85\u8FC7 64 KiB \u7684\u666E\u901A\u6587\u4EF6");let t=JSON.parse(bn(e,"utf8"));if(t.version!==2||!re(t.upload_id)||!Array.isArray(t.parts)||t.parts.length>25||t.parts.some((n,o)=>n.part_number!==o+1||typeof n.etag!="string"||n.etag.length>128))throw new Error("\u4E0A\u4F20\u8FDB\u5EA6\u6587\u4EF6\u65E0\u6548");return t}function Ye(e,r){gr(e);let t=e+"."+process.pid+".tmp";try{lr(t,JSON.stringify(r,null,2)+`
|
|
27
|
+
`,{flag:"wx",mode:384}),kn(t,e)}finally{try{fr(t)}catch(n){if(n.code!=="ENOENT")throw n}}}function wr(e,r){if(!Number.isSafeInteger(e)||e<1e3||e>864e5||!Number.isSafeInteger(r)||r<1e3||r>6e4)throw new Error("\u8F6E\u8BE2 timeout \u4E3A 1\u201386400 \u79D2\uFF0Cinterval \u4E3A 1\u201360 \u79D2")}async function gt(e,r,t){if(!re(r))throw new Error("operation \u5FC5\u987B\u662F\u4E0D\u900F\u660E ID");wr(t.timeoutMS,t.intervalMS);let n=Date.now()+t.timeoutMS;for(;;){t.signal?.throwIfAborted();let o=await e.request("platform","/api/v1/operations/"+r,{signal:t.signal});if((o.id||o.operation_id)!==r)throw new Error("operation \u54CD\u5E94 ID \u4E0D\u5339\u914D");if(["succeeded","failed","cancelled","suspended","unknown"].includes(o.status))return o;if(!["pending","running","waiting","retry_pending"].includes(o.status))throw new Error("operation \u54CD\u5E94\u72B6\u6001\u65E0\u6548");if(Date.now()>=n)return{...o,status:"timeout"};await mt(Math.min(t.intervalMS,n-Date.now()),void 0,{signal:t.signal})}}async function xn(e,r,t,n=fetch){let o=new URL(e.url);if(o.protocol!=="https:"||o.username||o.password||o.hash||e.method!=="PUT"||e.size_bytes!==r.length)throw new Error("\u670D\u52A1\u7AEF\u8FD4\u56DE\u7684\u5206\u7247\u4E0A\u4F20\u76EE\u6807\u65E0\u6548");let i=e.required_headers??e.headers;if(!i||typeof i!="object")throw new Error("\u5206\u7247\u4E0A\u4F20\u7F3A\u5C11 required_headers");for(let c of Object.keys(i))if(!/^(content-length|content-type|content-md5|x-oss-[a-z0-9-]+)$/i.test(c))throw new Error("\u5206\u7247\u4E0A\u4F20\u5305\u542B\u4E0D\u5141\u8BB8\u7684\u8BF7\u6C42\u5934");let s;try{s=await n(o,{method:"PUT",body:new Uint8Array(r),headers:i,redirect:"error",credentials:"omit",signal:AbortSignal.any([...t?[t]:[],AbortSignal.timeout(6e4)])})}catch{throw new Error("OSS \u5206\u7247\u4E0A\u4F20\u4E2D\u65AD\uFF1B\u4FDD\u7559\u8FDB\u5EA6\u540E\u53EF\u7528\u540C\u4E00\u547D\u4EE4\u91CD\u8BD5")}try{if(!s.ok)throw new Error("OSS \u5206\u7247\u4E0A\u4F20\u5931\u8D25\uFF08HTTP "+s.status+"\uFF09\uFF1B\u5DF2\u4FDD\u7559\u8FDB\u5EA6");let c=s.headers.get("etag");if(!c||c.length>128||/[\r\n]/.test(c))throw new Error("OSS \u54CD\u5E94\u7F3A\u5C11\u6709\u6548 ETag\uFF1B\u5DF2\u4FDD\u7559\u8FDB\u5EA6");return c}finally{await s.body?.cancel()}}async function hr(e,r,t){if(wr(t.timeoutMS,t.intervalMS),(t.track?!re(t.track)||(t.subject||t.purpose||t.subjectType):!re(t.subject||"")||!["solution_attachment","collaboration_delivery"].includes(t.purpose||"")||!/^[a-z_]{1,32}$/.test(t.subjectType||""))||!t.key||Buffer.byteLength(t.key)>128)throw new Error("\u4E0A\u4F20 Track\u3001\u4E1A\u52A1\u76EE\u7684\u6216\u5E42\u7B49\u952E\u65E0\u6548");let n="/api/v1/"+(t.track?"content":"files")+"/uploads",o=ft(r),i=ft(t.state);if(o===i)throw new Error("\u8FDB\u5EA6\u6587\u4EF6\u4E0D\u80FD\u8986\u76D6\u4E0A\u4F20\u539F\u4EF6");let s=await pr(o,dr.O_RDONLY|(dr.O_NOFOLLOW||0)),c=i+".lock",a=!1;try{let f=await s.stat();if(!f.isFile()||f.size<=0||f.size>mr)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5FC5\u987B\u662F 1 \u5B57\u8282\u5230 200 MiB \u7684\u666E\u901A\u6587\u4EF6");let m=Buffer.allocUnsafe(Math.min(xe,f.size)),l=pt("sha256");for(let y=0;y<f.size;){t.signal?.throwIfAborted();let{bytesRead:E}=await s.read(m,0,Math.min(m.length,f.size-y),y);if(!E)throw new Error("\u8BA1\u7B97\u54C8\u5E0C\u65F6\u6587\u4EF6\u957F\u5EA6\u53D1\u751F\u53D8\u5316");l.update(m.subarray(0,E)),y+=E}let p=l.digest("hex"),v={...t.track?{track_id:t.track}:{purpose:t.purpose,subject_type:t.subjectType,subject_id:t.subject},media_type:t.mediaType,size_bytes:f.size,sha256:p},h=vn(JSON.stringify([n,t.key,v]));try{lr(c,String(process.pid),{flag:"wx",mode:384}),a=!0}catch{throw new Error("\u53E6\u4E00\u4E0A\u4F20\u8FDB\u7A0B\u6B63\u5728\u4F7F\u7528\u6B64\u8FDB\u5EA6\u6587\u4EF6\uFF1B\u8BF7\u5148\u6838\u5B9E\u8FDB\u7A0B\u72B6\u6001")}let d=gr(i);if(d&&(d.account_id!==e.profile.account_id||d.auth_url!==e.profile.auth_url||d.platform_url!==e.profile.platform_url||d.command_hash!==h||d.file!==o||d.sha256!==p||d.size_bytes!==f.size))throw new Error("\u4E0A\u4F20\u6587\u4EF6\u3001\u53C2\u6570\u6216\u8FDE\u63A5\u4E0E\u5DF2\u6709\u8FDB\u5EA6\u4E0D\u4E00\u81F4\uFF1B\u4E0D\u80FD\u590D\u7528\u6B64\u8FDB\u5EA6\u6587\u4EF6");if(!d){let y=await e.request("platform",n,{method:"POST",body:v,key:t.key,signal:t.signal});if(!re(y.id))throw new Error("\u521B\u5EFA\u4E0A\u4F20\u8FD4\u56DE\u65E0\u6548 ID");d={version:2,account_id:e.profile.account_id,auth_url:e.profile.auth_url,platform_url:e.profile.platform_url,file:o,sha256:p,size_bytes:f.size,command_hash:h,upload_id:y.id,parts:[]},Ye(i,d)}let _=Date.now()+t.timeoutMS,u;for(;;){if(u=await e.request("platform",n+"/"+d.upload_id,{signal:t.signal}),u.id!==d.upload_id)throw new Error("\u4E0A\u4F20\u54CD\u5E94 ID \u4E0D\u5339\u914D");if(u.upload_status!=="initializing")break;if(Date.now()>=_)return{status:"timeout",upload_id:d.upload_id,state_file:i};await mt(Math.min(t.intervalMS,_-Date.now()),void 0,{signal:t.signal})}if(u.upload_status==="awaiting_upload"){let y=Math.ceil(f.size/xe);for(let g=d.parts.length+1;g<=y;g++){e.assertActive(),t.signal?.throwIfAborted();let b=await s.stat();if(b.size!==f.size||b.mtimeMs!==f.mtimeMs||b.ino!==f.ino)throw new Error("\u539F\u6587\u4EF6\u5DF2\u6539\u53D8\uFF1B\u505C\u6B62\u4E0A\u4F20\uFF0C\u4E0D\u63D0\u4EA4\u5B8C\u6210\u6E05\u5355");let N=Math.min(xe,f.size-(g-1)*xe),j=0;for(;j<N;){let{bytesRead:x}=await s.read(m,j,N-j,(g-1)*xe+j);if(!x)throw new Error("\u4E0A\u4F20\u671F\u95F4\u6587\u4EF6\u957F\u5EA6\u53D1\u751F\u53D8\u5316");j+=x}let k=await e.request("platform",n+"/"+d.upload_id+"/part-urls",{method:"POST",body:{part_numbers:[g]},signal:t.signal});if(!Array.isArray(k.parts)||k.parts.length!==1||k.parts[0].part_number!==g)throw new Error("\u670D\u52A1\u7AEF\u5206\u7247\u7F16\u53F7\u4E0D\u5339\u914D");let S=await xn(k.parts[0],m.subarray(0,N),t.signal);e.assertActive(),d.parts.push({part_number:g,etag:S}),Ye(i,d)}let E=await s.stat();if(E.size!==f.size||E.mtimeMs!==f.mtimeMs)throw new Error("\u539F\u6587\u4EF6\u5728\u4E0A\u4F20\u671F\u95F4\u6539\u53D8\uFF1B\u672A\u63D0\u4EA4\u5B8C\u6210\u6E05\u5355");let w=await e.request("platform",n+"/"+d.upload_id+"/complete",{method:"POST",body:{parts:d.parts},signal:t.signal});if(!w.operation||!re(w.operation.id))throw new Error("\u5B8C\u6210\u63A5\u53E3\u672A\u8FD4\u56DE\u6709\u6548 operation");d.operation_id=w.operation.id,Ye(i,d)}else if(u.operation_id)d.operation_id=u.operation_id,Ye(i,d);else return{...u,status:u.upload_status,state_file:i};return t.wait&&d.operation_id?{...await gt(e,d.operation_id,t),upload_id:d.upload_id,state_file:i}:{status:"accepted",upload_id:d.upload_id,operation_id:d.operation_id,state_file:i}}finally{await s.close(),a&&fr(c)}}async function wt(e,r,t,n,o){if(!re(r)||!t)throw new Error("\u4E0B\u8F7D\u9700\u8981\u6587\u4EF6 ID \u548C --output \u8DEF\u5F84");let i="/api/v1/file-bundles/"+r+"/download",s;if(o){let p=o.query?"?"+o.query:"",h=(await e.request("platform","/api/v1/records/"+r+(o.version?"/versions/"+o.version:"")+p,{signal:n}))?.version;if(!h||h.record_id!==r||!/^[1-9][0-9]*$/.test(String(h.version))||o.version&&String(h.version)!==o.version)throw new Error("\u8D44\u6599\u7248\u672C\u4E0D\u53EF\u8BFB\u6216\u4E0D\u5339\u914D");s={id:r,file_status:"available",...h.asset},i="/api/v1/records/"+r+"/versions/"+h.version+"/download"+p}else s=await e.request("platform","/api/v1/file-bundles/"+r,{signal:n});if(s.id!==r||s.file_status!=="available"||!Number.isSafeInteger(s.size_bytes)||s.size_bytes<=0||s.size_bytes>mr||!/^[a-f0-9]{64}$/.test(s.sha256))throw new Error("\u6587\u4EF6\u672A\u5C31\u7EEA\u6216\u670D\u52A1\u7AEF\u6587\u4EF6\u5143\u6570\u636E\u65E0\u6548");let c=ft(t),a=c+"."+_n()+".part";try{throw ur(c),new Error("\u4E0B\u8F7D\u76EE\u6807\u5DF2\u5B58\u5728\uFF1B\u8BF7\u9009\u62E9\u65B0\u8DEF\u5F84")}catch(p){if(p.code!=="ENOENT")throw p}let f=await pr(a,"wx",384),m,l=0;try{let p=pt("sha256");for(let v=0;l<s.size_bytes;v++)try{m=await cr(e,i,s,l,n);let h=m.body.getReader();try{for(;;){n?.throwIfAborted(),e.assertActive();let d;try{d=await h.read()}catch{throw n?.throwIfAborted(),new Q("CDN \u6587\u4EF6\u6D41\u4E2D\u65AD")}if(d.done)break;let _=d.value;if(l+_.byteLength>s.size_bytes)throw new Error("\u4E0B\u8F7D\u8D85\u8FC7\u58F0\u660E\u5927\u5C0F");let u=0;for(;u<_.byteLength;){let y=await f.write(_,u,_.byteLength-u);if(!y.bytesWritten)throw new Error("\u65E0\u6CD5\u5199\u5165\u4E0B\u8F7D\u6587\u4EF6");u+=y.bytesWritten}p.update(_),l+=_.byteLength}}finally{await h.cancel().catch(()=>{}),h.releaseLock()}if(l!==s.size_bytes)throw new Q("\u4E0B\u8F7D\u4E0D\u5B8C\u6574")}catch(h){if(!(h instanceof Q)||v>=2)throw h;e.assertActive(),n?.throwIfAborted(),await mt(250*(v+1),void 0,{signal:n})}if(l!==s.size_bytes||p.digest("hex")!==s.sha256)throw new Error("\u4E0B\u8F7D\u4E0D\u5B8C\u6574\u6216 SHA256 \u6821\u9A8C\u5931\u8D25");return e.assertActive(),n?.throwIfAborted(),await f.sync(),await f.close(),await En(a,c),{id:r,status:"downloaded",output:c,size_bytes:l,sha256:s.sha256}}finally{await m?.body?.cancel().catch(()=>{}),await f.close(),await Sn(a)}}var An=`Agent Utopia CLI \u2014 \u8D26\u53F7\u3001\u4E3B\u4F53\u4E0E\u539F\u751F Track
|
|
28
28
|
|
|
29
29
|
\u8FDE\u63A5\uFF08\u540C\u4E00\u8D26\u53F7\u8BBF\u95EE\u4E0D\u540C\u4E3B\u4F53\u65E0\u9700\u91CD\u65B0\u767B\u5F55\uFF09
|
|
30
30
|
aut connect GATEWAY [--device NAME] [--scopes SCOPES] [--resource-mode all_visible|selected_tracks]
|
|
@@ -95,4 +95,4 @@ Record / Entry
|
|
|
95
95
|
\u7ED3\u679C\u9ED8\u8BA4 JSON\uFF1B\u6B63\u6587 read \u9ED8\u8BA4\u6587\u672C\u3002\u5206\u9875\u4FDD\u7559\u670D\u52A1\u7AEF cursor\uFF0C\u4E0D\u63A8\u65AD\u672A\u8BFB\u53D6\u5185\u5BB9\u3002
|
|
96
96
|
\u6240\u6709\u4FEE\u6539\u4E0D\u81EA\u52A8\u91CD\u8BD5\uFF1B\u540C\u4E00\u6B21\u64CD\u4F5C\u4FDD\u6301\u539F --key \u548C\u8F93\u5165\uFF0C\u7248\u672C\u51B2\u7A81\u540E\u5148\u91CD\u65B0\u8BFB\u53D6\u3002
|
|
97
97
|
\u4E0D\u63D0\u4F9B\u65E7\u7EC4\u7EC7\u767B\u5F55\u3001Focus\u3001Space\u3001\u65E7\u6807\u7B7E\u3001\u7EF4\u62A4\u6216\u7EC4\u7EC7 User \u547D\u4EE4\u3002
|
|
98
|
-
`,bn=["auth","auth-url","platform-url","device","scopes","resource-mode","track-ids","expires-in","name","title","goal","party","track","status","q","cursor","limit","max-bytes","after-seq","before-seq","version","expect-revision","expect-version","expect-content-revision","expect-grant-revision","key","dir","file","visibility","grant-id","resource-id","upload-id","filename","output","state","media-type","purpose","subject-type","subject","timeout","interval","service","body-file","replace-token-id","category","min-revision","seen-cursor","email-enabled","sms-enabled","before-id"],kn=["help","json","token-stdin","no-open","revoke","replace","include-archived","wait","content","fresh","unread-only","include-inactive","password-stdin","text"],A=e=>console.log(JSON.stringify(e,null,2));function me(e,t){if(e===void 0||e==="")throw new Error("\u7F3A\u5C11 "+t);return e}function j(e){if(!U(e))throw new Error("\u9700\u8981\u6709\u6548\u7684\u4E0D\u900F\u660E ID");return e}function xe(e,t,r,n){if(!e||!/^\d+$/.test(e)||!Number.isSafeInteger(Number(e))||Number(e)<r||Number(e)>n)throw new Error(t+" \u6570\u503C\u8303\u56F4\u65E0\u6548");return Number(e)}function Ne(e){let t=JSON.parse($(e,ae,"JSON \u6587\u4EF6"),(r,n,i)=>typeof n=="number"&&!Number.isSafeInteger(n)&&Number.isInteger(n)?ee(i?.source,"JSON integer"):n);if(!t||typeof t!="object"||Array.isArray(t))throw new Error("\u9700\u8981 JSON \u5BF9\u8C61");return t}function Je(e,t){if(Object.keys(e).some(r=>!t.includes(r)))throw new Error("JSON \u5305\u542B\u672A\u77E5\u5B57\u6BB5");return e}async function fr(e){let{values:t,positionals:r}=yn({args:e,allowPositionals:!0,strict:!0,options:Object.fromEntries([...bn.map(E=>[E,{type:"string"}]),...kn.map(E=>[E,{type:"boolean"}])])}),n=t,i=E=>typeof n[E]=="string"?n[E]:void 0,o=(...E)=>{if(Object.keys(n).some(g=>!["help","json",...E].includes(g)))throw new Error("\u6B64\u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879\uFF1B\u8FD0\u884C aut --help")},s=(E,g,m=g)=>{if(E.length<g||E.length>m)throw new Error("\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},d=(E="expect-revision",g=!1)=>{let m=B(i(E),"--"+E);if(!g&&m==="0")throw new Error("--"+E+" \u5FC5\u987B\u5927\u4E8E 0");return ee(m,E)},a=()=>me(i("key"),"--key"),p=(E,g={})=>{let m=new URLSearchParams;for(let b of E){let N=i(b);N!==void 0&&(b==="limit"&&xe(N,b,1,50),b==="max-bytes"&&ce(N),["after-seq","before-seq"].includes(b)&&B(N,b),m.set(g[b]||b.replaceAll("-","_"),N))}return E.includes("include-archived")&&n["include-archived"]&&m.set("include_archived","true"),m},w=(E,g,m={})=>{let b=p(g,m);return E+(b.size?"?"+b:"")},l=["cursor","limit","max-bytes"],f=["grant-id","resource-id"],S=()=>{if(i("grant-id")&&i("resource-id"))throw new Error("grant-id \u4E0E resource-id \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");return p(f)},[h="help",...c]=r;if(h==="team")throw new Error("\u65E7 team \u547D\u4EE4\u5DF2\u79FB\u9664\uFF1B\u76F4\u63A5\u4F7F\u7528 aut \u547D\u4EE4");if(n.help||h==="help"){console.log(_n);return}if(h==="status"){o(),s(c,0),A(nt());return}if(!["connect","disconnect","whoami","track","record","entry","wait","file","operation","party","token","reauth","notifications","support","share","rollout","api"].includes(h))throw new Error("\u672A\u77E5\u547D\u4EE4\uFF1B\u5F53\u524D\u4EC5\u63D0\u4F9B Agent Utopia \u8D26\u53F7\u63A5\u53E3\uFF0C\u8FD0\u884C aut --help");let u=new AbortController,y=()=>u.abort(new Error("\u5DF2\u53D6\u6D88\u64CD\u4F5C"));process.once("SIGINT",y),process.once("SIGTERM",y);try{if(h==="connect"){o("auth","auth-url","platform-url","device","scopes","resource-mode","track-ids","expires-in","no-open","token-stdin"),s(c,0,1);let x=i("auth")||"browser";if(!["browser","token"].includes(x))throw new Error("connect \u4EC5\u652F\u6301 browser \u6216 token \u8D26\u53F7\u6388\u6743");if(x==="browser"&&n["token-stdin"]||x==="token"&&["device","scopes","resource-mode","track-ids","expires-in","no-open"].some(O=>n[O]!==void 0))throw new Error("\u6388\u6743\u9009\u9879\u4E0D\u5339\u914D");let T=x==="browser"?it({...n,"resource-mode":i("resource-mode")||"all_visible"},Ue):void 0;A(await Yt({gateway:c[0],authURL:i("auth-url"),platformURL:i("platform-url"),auth:x,device:i("device"),scopes:T?.scopes,resourceMode:T?.resource_mode,trackIDs:T?.track_ids,expiresIn:i("expires-in")?xe(i("expires-in"),"expires-in",1,7776e3):void 0,noOpen:!!n["no-open"],secret:x==="token"?await Fe(!!n["token-stdin"],"Token"):void 0,signal:u.signal}));return}let E=new Ce;if(await Ht(E,h,c,n,u.signal))return;let g=(x,T="GET",O,q,ie="platform")=>E.request(ie,x,{method:T,body:O,key:q,signal:u.signal}),m=x=>j(x||Qt(E)),b=x=>"/api/v1/tracks/"+encodeURIComponent(m(x)),N=()=>({timeoutMS:xe(i("timeout")||"300","timeout",1,86400)*1e3,intervalMS:xe(i("interval")||"2","interval",1,60)*1e3,signal:u.signal}),L=x=>{A(x);let T=x?.status;T==="timeout"?process.exitCode=2:["failed","cancelled","suspended","unknown"].includes(T||"")&&(process.exitCode=1)};if(h==="whoami"){o(),s(c,0),A(await g("/api/v1/auth/me","GET",void 0,void 0,"auth"));return}if(h==="disconnect"){o("revoke"),s(c,0),A(await E.disconnect(!!n.revoke));return}if(h==="rollout"){o(),s(c,0),A(await g("/api/v1/utopia-rollout"));return}if(h==="wait"){o("after-seq","cursor","limit","max-bytes","timeout","interval"),s(c,0,1),L(await tr(E,m(c[0]),{...N(),after:i("after-seq"),cursor:i("cursor"),limit:xe(i("limit")||"20","limit",1,50),maxBytes:ce(i("max-bytes"))}));return}let[k,...v]=c;if(h==="track"){if(k==="ls"){o("party","status","q","cursor","limit"),s(v,0),A(await g(w("/api/v1/tracks",["party","status","q","cursor","limit"],{party:"owner_party_id"})));return}if(k==="new"){o("title","goal","party","key"),s(v,0),A(await g("/api/v1/tracks","POST",{title:me(i("title"),"--title"),...i("goal")!==void 0?{goal:i("goal")}:{},...i("party")?{owner_party_id:j(i("party"))}:{}},a()));return}if(k==="bind"){o("dir","replace"),s(v,1),A(await er(E,j(v[0]),i("dir"),!!n.replace));return}if(["add","commit","handoff","grant","revoke"].includes(k)){o("key",...k==="handoff"?["expect-content-revision"]:k==="grant"?["expect-revision"]:k==="revoke"?["expect-revision","expect-grant-revision"]:[]),s(v,1,2);let T=b(v.length===2?v[0]:void 0),O=v.at(-1);if(k==="add"){L(await g(T+"/content-commits","POST",{message:{text:$(O,64*1024)}},a()));return}if(k==="commit"){L(await g(T+"/content-commits","POST",Je(Ne(O),["message","attachments","record_changes","record_refs"]),a()));return}if(k==="handoff"){A(await g(T+"/handoffs","POST",{spec:Je(Ne(O),["goal","inputs","outputs","acceptance_criteria"]),...i("expect-content-revision")!==void 0?{expected_content_revision:d("expect-content-revision",!0)}:{}},a()));return}if(k==="grant"){A(await g(T+"/grants","POST",{...Je(Ne(O),["subject_kind","subject_id","role","expires_at"]),expected_revision:d()},a()));return}A(await g(T+"/grants/"+encodeURIComponent(j(O)),"DELETE",{expected_revision:d(),expected_grant_revision:d("expect-grant-revision")},a()));return}if(s(v,0,1),k==="get"||k==="access"){o(),A(await g(b(v[0])+(k==="access"?"/access":"")));return}if(k==="update"){if(o("title","goal","expect-revision","key"),i("title")===void 0&&i("goal")===void 0)throw new Error("\u81F3\u5C11\u63D0\u4F9B title \u6216 goal");A(await g(b(v[0]),"PATCH",{expected_revision:d(),...i("title")!==void 0?{title:i("title")}:{},...i("goal")!==void 0?{goal:i("goal")}:{}},a()));return}if(k==="archive"||k==="restore"){o("expect-revision","key"),A(await g(b(v[0])+"/state","POST",{status:k==="archive"?"archived":"active",expected_revision:d()},a()));return}if(k==="visibility"){if(o("visibility","expect-revision","key"),!["restricted","all_members"].includes(i("visibility")||""))throw new Error("visibility \u65E0\u6548");A(await g(b(v[0])+"/visibility","PUT",{organization_visibility:i("visibility"),expected_revision:d()},a()));return}if(k==="grants"){o("cursor","limit"),A(await g(w(b(v[0])+"/grants",["cursor","limit"])));return}if(k==="read"||k==="records"){o(...l,"include-archived"),A(await g(w(b(v[0])+(k==="read"?"/context":"/records"),[...l,"include-archived"])));return}if(k==="updates"){if(o(...l,"after-seq","before-seq",...f),["cursor","after-seq","before-seq"].filter(x=>i(x)!==void 0).length>1)throw new Error("cursor\u3001after-seq\u3001before-seq \u4E92\u65A5");S(),A(await g(w(b(v[0])+"/updates",[...l,"after-seq","before-seq",...f])));return}if(k==="background"){i("file")?(o("file","expect-version","key"),A(await g(b(v[0])+"/background-versions","POST",{body_text:$(i("file"),64*1024),expected_version:d("expect-version",!0)},a()))):(o("version"),A(await g(b(v[0])+(i("version")?"/background-versions/"+encodeURIComponent(j(i("version"))):"/background"))));return}throw new Error("\u672A\u77E5 track \u64CD\u4F5C")}if(h==="record"){if(k==="ls"){o(...l,"party","track","q","include-archived"),s(v,0),A(await g(w("/api/v1/records",[...l,"party","track","q","include-archived"],{party:"owner_party_id",track:"track_id"})));return}if(k==="new"){o("track","title","upload-id","filename","key","text"),s(v,0),L(await g(b(i("track"))+"/content-commits","POST",{...n.text?{message:{source:{upload_id:j(i("upload-id"))}}}:{},record_changes:[{action:"create",client_ref:"record",title:me(i("title"),"--title"),source:{upload_id:j(i("upload-id"))},...i("filename")?{filename:i("filename")}:{}}]},a()));return}s(v,1);let x=j(v[0]),T="/api/v1/records/"+encodeURIComponent(x);if(k==="get"){o("version",...f),S();let O=i("version")?"/versions/"+B(i("version"),"version"):"";A(await g(w(T+O,f)));return}if(k==="versions"){o(...l),A(await g(w(T+"/versions",l)));return}if(k==="read"){o("version");let O=await g(T+"/versions/"+B(i("version"),"version")+"/body");if(n.json)A(O);else{if(typeof O.body_text!="string")throw new Error("\u6B63\u6587\u672A\u63D0\u4F9B");process.stdout.write(O.body_text)}return}if(k==="download"){o("version","output",...f);let O=S();A(await pt(E,x,me(i("output"),"--output"),u.signal,{record:!0,version:i("version")?B(i("version"),"version"):void 0,query:O.toString()}));return}if(["update","rename","archive","restore"].includes(k)){o("expect-revision","expect-version","key",...k==="update"?["upload-id","text"]:k==="rename"?["title"]:[]);let O={action:k,record_id:x,expected_revision:d(),expected_version:d("expect-version"),...k==="update"?{source:{upload_id:j(i("upload-id"))}}:k==="rename"?{title:me(i("title"),"--title")}:{}},q=await g(T);L(await g(b(j(q.track_id))+"/content-commits","POST",{...n.text?{message:{source:{upload_id:j(i("upload-id"))}}}:{},record_changes:[O]},a()));return}throw new Error("\u672A\u77E5 record \u64CD\u4F5C")}if(h==="entry"){if(o(),s(v,1),!["get","read"].includes(k))throw new Error("\u672A\u77E5 entry \u64CD\u4F5C");let x=await g("/api/v1/entries/"+encodeURIComponent(j(v[0]))+(k==="read"?"/body":""));if(k==="read"&&!n.json){if(typeof x.body_text!="string")throw new Error("\u6B63\u6587\u672A\u63D0\u4F9B");process.stdout.write(x.body_text)}else A(x);return}if(h==="file"){if(k==="upload"){if(o("track","purpose","subject-type","subject","key","media-type","state","wait","timeout","interval"),s(v,1),i("track")&&["purpose","subject-type","subject"].some(T=>i(T)!==void 0))throw new Error("Track \u4E0A\u4F20\u4ECE Track \u63A8\u5BFC\u5F52\u5C5E\uFF0C\u4E0D\u63A5\u53D7\u5176\u4ED6\u4E3B\u4F53\u53C2\u6570");L(await lr(E,v[0],{track:i("track")?j(i("track")):void 0,purpose:i("purpose"),subjectType:i("subject-type"),subject:i("subject"),key:a(),mediaType:i("media-type")||(/\.md$/i.test(v[0])?"text/markdown":/\.txt$/i.test(v[0])?"text/plain":"application/zip"),state:i("state")||v[0]+".aut-upload.json",wait:!!n.wait,...N()}));return}s(v,1);let x=j(v[0]);if(k==="download"){o("output"),A(await pt(E,x,me(i("output"),"--output"),u.signal));return}if(k==="get"){o(),A(await g("/api/v1/file-bundles/"+encodeURIComponent(x)));return}if(k==="status"||k==="abort"){o("content"),A(await g("/api/v1/"+(n.content?"content":"files")+"/uploads/"+encodeURIComponent(x),k==="abort"?"DELETE":"GET"));return}throw new Error("\u672A\u77E5 file \u64CD\u4F5C")}if(h==="operation"){if(s(v,1),k==="get"){o(),A(await g("/api/v1/operations/"+encodeURIComponent(j(v[0]))));return}if(k==="wait"){o("timeout","interval"),L(await ft(E,j(v[0]),N()));return}throw new Error("\u672A\u77E5 operation \u64CD\u4F5C")}if(h==="share"){if(k==="ls"){o("track","before-id","limit"),s(v,0),A(await g(w("/api/v1/content-shares",["track","before-id","limit"],{track:"track_id"})));return}if(k==="new"){o("key"),s(v,1),A(await g("/api/v1/content-shares","POST",Je(Ne(v[0]),["object_type","object_id","expected_revision","version","through_seq","ttl_seconds","secret"]),a()));return}if(k==="revoke"){o("expect-revision","key"),s(v,1),A(await g("/api/v1/content-shares/"+encodeURIComponent(j(v[0])),"DELETE",{expected_revision:d()},a()));return}throw new Error("\u672A\u77E5 share \u64CD\u4F5C")}if(h==="api"){o("service","body-file","key"),s(c,2);let x=c[0].toUpperCase(),T=qe(c[1]),O=i("service")||"platform";if(!["GET","POST","PUT","PATCH","DELETE"].includes(x)||!["auth","platform"].includes(O))throw new Error("API \u65B9\u6CD5\u6216 service \u65E0\u6548");let q=T.split("?")[0];if(!(O==="auth"?/^\/api\/v1\/(?:auth\/(?:me|tokens|reauthentication)|accounts\/me|me)(?:\/|$)/:/^\/api\/v1\/(?:tracks|records|entries|content|content-shares|operations|parties|party-delegations|notifications|notification-preferences|files|file-bundles|utopia-rollout|me|tasks|solutions|collaborations|support|discover|reputation)(?:\/|$)/).test(q))throw new Error("\u6B64\u8DEF\u5F84\u4E0D\u5728 Agent Utopia \u8D26\u53F7\u4E1A\u52A1 API \u8303\u56F4");if(x==="GET"&&i("body-file"))throw new Error("GET \u4E0D\u63A5\u53D7\u8BF7\u6C42\u4F53");A(await g(T,x,i("body-file")?Ne(i("body-file")):void 0,i("key"),O));return}throw new Error("\u672A\u77E5\u64CD\u4F5C\uFF1B\u8FD0\u884C aut --help")}finally{process.off("SIGINT",y),process.off("SIGTERM",y)}}var Ke=e=>console.log(typeof e=="string"?e:JSON.stringify(e,null,2));async function Ln(){let e=process.argv.slice(2),t=e[0];if(e.length===1&&t==="--version"){Ke(X);return}if(e.includes("--check")&&t!=="self")throw new Error("--check \u4EC5\u7528\u4E8E aut self update --check\u3002");if(t==="self"){let r="\u7528\u6CD5\uFF1Aaut self update [--check] [--json]\uFF1B\u4E0D\u63A5\u53D7\u5176\u4ED6\u53C2\u6570\u6216\u9009\u9879\u3002",n;try{n=bt({args:e.slice(1),allowPositionals:!0,options:{check:{type:"boolean"},json:{type:"boolean"}}})}catch{throw new Error(r)}if(n.positionals.length!==1||n.positionals[0]!=="update")throw new Error(r);let i=await Rt({packageName:"aut-cli",currentVersion:X,moduleUrl:import.meta.url,check:!!n.values.check});Ke(n.values.json?i:Ut(i));return}if(t==="skill"){let{installSkill:r}=await Promise.resolve().then(()=>(ht(),_r)),{values:n,positionals:i}=bt({args:e.slice(1),allowPositionals:!0,options:{agent:{type:"string"},scope:{type:"string"},dir:{type:"string"},force:{type:"boolean"},json:{type:"boolean"}}});if(i.length!==1||i[0]!=="install"||!n.agent)throw new Error("\u7528\u6CD5\uFF1Aaut skill install --agent codex|claude-code|agents [--scope user|project] [--dir PROJECT]");Ke(r({agent:n.agent,scope:n.scope,directory:n.dir,force:!!n.force}));return}if(t==="integrate"){let{installIntegration:r}=await Promise.resolve().then(()=>(gt(),wr)),{values:n,positionals:i}=bt({args:e.slice(1),allowPositionals:!0,options:{dir:{type:"string"},json:{type:"boolean"}}});if(i.length!==1)throw new Error("\u7528\u6CD5\uFF1Aaut integrate codex|claude-code|agents [--dir PROJECT]");Ke(r(i[0],n.dir||"."));return}await fr(e)}Ln().catch(e=>{console.error("aut: "+e.message),process.exitCode=1});
|
|
98
|
+
`,In=["auth","auth-url","platform-url","device","scopes","resource-mode","track-ids","expires-in","name","title","goal","party","track","status","q","cursor","limit","max-bytes","after-seq","before-seq","version","expect-revision","expect-version","expect-content-revision","expect-grant-revision","key","dir","file","visibility","grant-id","resource-id","upload-id","filename","output","state","media-type","purpose","subject-type","subject","timeout","interval","service","body-file","replace-token-id","category","min-revision","seen-cursor","email-enabled","sms-enabled","before-id"],Tn=["help","json","token-stdin","no-open","revoke","replace","include-archived","wait","content","fresh","unread-only","include-inactive","password-stdin","text"],A=e=>console.log(JSON.stringify(e,null,2));function ge(e,r){if(e===void 0||e==="")throw new Error("\u7F3A\u5C11 "+r);return e}function L(e){if(!U(e))throw new Error("\u9700\u8981\u6709\u6548\u7684\u4E0D\u900F\u660E ID");return e}function Ne(e,r,t,n){if(!e||!/^\d+$/.test(e)||!Number.isSafeInteger(Number(e))||Number(e)<t||Number(e)>n)throw new Error(r+" \u6570\u503C\u8303\u56F4\u65E0\u6548");return Number(e)}function Ae(e){let r=JSON.parse(C(e,ae,"JSON \u6587\u4EF6"),(t,n,o)=>typeof n=="number"&&!Number.isSafeInteger(n)&&Number.isInteger(n)?te(o?.source,"JSON integer"):n);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("\u9700\u8981 JSON \u5BF9\u8C61");return r}function Ke(e,r){if(Object.keys(e).some(t=>!r.includes(t)))throw new Error("JSON \u5305\u542B\u672A\u77E5\u5B57\u6BB5");return e}async function yr(e){let{values:r,positionals:t}=Nn({args:e,allowPositionals:!0,strict:!0,options:Object.fromEntries([...In.map(E=>[E,{type:"string"}]),...Tn.map(E=>[E,{type:"boolean"}])])}),n=r,o=E=>typeof n[E]=="string"?n[E]:void 0,i=(...E)=>{if(Object.keys(n).some(w=>!["help","json",...E].includes(w)))throw new Error("\u6B64\u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879\uFF1B\u8FD0\u884C aut --help")},s=(E,w,g=w)=>{if(E.length<w||E.length>g)throw new Error("\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},c=(E="expect-revision",w=!1)=>{let g=B(o(E),"--"+E);if(!w&&g==="0")throw new Error("--"+E+" \u5FC5\u987B\u5927\u4E8E 0");return te(g,E)},a=()=>ge(o("key"),"--key"),f=(E,w={})=>{let g=new URLSearchParams;for(let b of E){let N=o(b);N!==void 0&&(b==="limit"&&Ne(N,b,1,50),b==="max-bytes"&&ce(N),["after-seq","before-seq"].includes(b)&&B(N,b),g.set(w[b]||b.replaceAll("-","_"),N))}return E.includes("include-archived")&&n["include-archived"]&&g.set("include_archived","true"),g},m=(E,w,g={})=>{let b=f(w,g);return E+(b.size?"?"+b:"")},l=["cursor","limit","max-bytes"],p=["grant-id","resource-id"],v=()=>{if(o("grant-id")&&o("resource-id"))throw new Error("grant-id \u4E0E resource-id \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");return f(p)},[h="help",...d]=t;if(h==="team")throw new Error("\u65E7 team \u547D\u4EE4\u5DF2\u79FB\u9664\uFF1B\u76F4\u63A5\u4F7F\u7528 aut \u547D\u4EE4");if(n.help||h==="help"){console.log(An);return}if(h==="status"){i(),s(d,0),A(st());return}if(!["connect","disconnect","whoami","track","record","entry","wait","file","operation","party","token","reauth","notifications","support","share","rollout","api"].includes(h))throw new Error("\u672A\u77E5\u547D\u4EE4\uFF1B\u5F53\u524D\u4EC5\u63D0\u4F9B Agent Utopia \u8D26\u53F7\u63A5\u53E3\uFF0C\u8FD0\u884C aut --help");let u=new AbortController,y=()=>u.abort(new Error("\u5DF2\u53D6\u6D88\u64CD\u4F5C"));process.once("SIGINT",y),process.once("SIGTERM",y);try{if(h==="connect"){i("auth","auth-url","platform-url","device","scopes","resource-mode","track-ids","expires-in","no-open","token-stdin"),s(d,0,1);let x=o("auth")||"browser";if(!["browser","token"].includes(x))throw new Error("connect \u4EC5\u652F\u6301 browser \u6216 token \u8D26\u53F7\u6388\u6743");if(x==="browser"&&n["token-stdin"]||x==="token"&&["device","scopes","resource-mode","track-ids","expires-in","no-open"].some(O=>n[O]!==void 0))throw new Error("\u6388\u6743\u9009\u9879\u4E0D\u5339\u914D");let T=x==="browser"?at({...n,"resource-mode":o("resource-mode")||"all_visible"},De):void 0;A(await Vt({gateway:d[0],authURL:o("auth-url"),platformURL:o("platform-url"),auth:x,device:o("device"),scopes:T?.scopes,resourceMode:T?.resource_mode,trackIDs:T?.track_ids,expiresIn:o("expires-in")?Ne(o("expires-in"),"expires-in",1,7776e3):void 0,noOpen:!!n["no-open"],secret:x==="token"?await Je(!!n["token-stdin"],"Token"):void 0,signal:u.signal}));return}let E=new ze;if(await er(E,h,d,n,u.signal))return;let w=(x,T="GET",O,q,oe="platform")=>E.request(oe,x,{method:T,body:O,key:q,signal:u.signal}),g=x=>L(x||ir(E)),b=x=>"/api/v1/tracks/"+encodeURIComponent(g(x)),N=()=>({timeoutMS:Ne(o("timeout")||"300","timeout",1,86400)*1e3,intervalMS:Ne(o("interval")||"2","interval",1,60)*1e3,signal:u.signal}),j=x=>{A(x);let T=x?.status;T==="timeout"?process.exitCode=2:["failed","cancelled","suspended","unknown"].includes(T||"")&&(process.exitCode=1)};if(h==="whoami"){i(),s(d,0),A(await w("/api/v1/auth/me","GET",void 0,void 0,"auth"));return}if(h==="disconnect"){i("revoke"),s(d,0),A(await E.disconnect(!!n.revoke));return}if(h==="rollout"){i(),s(d,0),A(await w("/api/v1/utopia-rollout"));return}if(h==="wait"){i("after-seq","cursor","limit","max-bytes","timeout","interval"),s(d,0,1),j(await ar(E,g(d[0]),{...N(),after:o("after-seq"),cursor:o("cursor"),limit:Ne(o("limit")||"20","limit",1,50),maxBytes:ce(o("max-bytes"))}));return}let[k,...S]=d;if(h==="track"){if(k==="ls"){i("party","status","q","cursor","limit"),s(S,0),A(await w(m("/api/v1/tracks",["party","status","q","cursor","limit"],{party:"owner_party_id"})));return}if(k==="new"){i("title","goal","party","key"),s(S,0),A(await w("/api/v1/tracks","POST",{title:ge(o("title"),"--title"),...o("goal")!==void 0?{goal:o("goal")}:{},...o("party")?{owner_party_id:L(o("party"))}:{}},a()));return}if(k==="bind"){i("dir","replace"),s(S,1),A(await sr(E,L(S[0]),o("dir"),!!n.replace));return}if(["add","commit","handoff","grant","revoke"].includes(k)){i("key",...k==="handoff"?["expect-content-revision"]:k==="grant"?["expect-revision"]:k==="revoke"?["expect-revision","expect-grant-revision"]:[]),s(S,1,2);let T=b(S.length===2?S[0]:void 0),O=S.at(-1);if(k==="add"){j(await w(T+"/content-commits","POST",{message:{text:C(O,64*1024)}},a()));return}if(k==="commit"){j(await w(T+"/content-commits","POST",Ke(Ae(O),["message","attachments","record_changes","record_refs"]),a()));return}if(k==="handoff"){A(await w(T+"/handoffs","POST",{spec:Ke(Ae(O),["goal","inputs","outputs","acceptance_criteria"]),...o("expect-content-revision")!==void 0?{expected_content_revision:c("expect-content-revision",!0)}:{}},a()));return}if(k==="grant"){A(await w(T+"/grants","POST",{...Ke(Ae(O),["subject_kind","subject_id","role","expires_at"]),expected_revision:c()},a()));return}A(await w(T+"/grants/"+encodeURIComponent(L(O)),"DELETE",{expected_revision:c(),expected_grant_revision:c("expect-grant-revision")},a()));return}if(s(S,0,1),k==="get"||k==="access"){i(),A(await w(b(S[0])+(k==="access"?"/access":"")));return}if(k==="update"){if(i("title","goal","expect-revision","key"),o("title")===void 0&&o("goal")===void 0)throw new Error("\u81F3\u5C11\u63D0\u4F9B title \u6216 goal");A(await w(b(S[0]),"PATCH",{expected_revision:c(),...o("title")!==void 0?{title:o("title")}:{},...o("goal")!==void 0?{goal:o("goal")}:{}},a()));return}if(k==="archive"||k==="restore"){i("expect-revision","key"),A(await w(b(S[0])+"/state","POST",{status:k==="archive"?"archived":"active",expected_revision:c()},a()));return}if(k==="visibility"){if(i("visibility","expect-revision","key"),!["restricted","all_members"].includes(o("visibility")||""))throw new Error("visibility \u65E0\u6548");A(await w(b(S[0])+"/visibility","PUT",{organization_visibility:o("visibility"),expected_revision:c()},a()));return}if(k==="grants"){i("cursor","limit"),A(await w(m(b(S[0])+"/grants",["cursor","limit"])));return}if(k==="read"||k==="records"){i(...l,"include-archived"),A(await w(m(b(S[0])+(k==="read"?"/context":"/records"),[...l,"include-archived"])));return}if(k==="updates"){if(i(...l,"after-seq","before-seq",...p),["cursor","after-seq","before-seq"].filter(x=>o(x)!==void 0).length>1)throw new Error("cursor\u3001after-seq\u3001before-seq \u4E92\u65A5");v(),A(await w(m(b(S[0])+"/updates",[...l,"after-seq","before-seq",...p])));return}if(k==="background"){o("file")?(i("file","expect-version","key"),A(await w(b(S[0])+"/background-versions","POST",{body_text:C(o("file"),64*1024),expected_version:c("expect-version",!0)},a()))):(i("version"),A(await w(b(S[0])+(o("version")?"/background-versions/"+encodeURIComponent(L(o("version"))):"/background"))));return}throw new Error("\u672A\u77E5 track \u64CD\u4F5C")}if(h==="record"){if(k==="ls"){i(...l,"party","track","q","include-archived"),s(S,0),A(await w(m("/api/v1/records",[...l,"party","track","q","include-archived"],{party:"owner_party_id",track:"track_id"})));return}if(k==="new"){i("track","title","upload-id","filename","key","text"),s(S,0),j(await w(b(o("track"))+"/content-commits","POST",{...n.text?{message:{source:{upload_id:L(o("upload-id"))}}}:{},record_changes:[{action:"create",client_ref:"record",title:ge(o("title"),"--title"),source:{upload_id:L(o("upload-id"))},...o("filename")?{filename:o("filename")}:{}}]},a()));return}s(S,1);let x=L(S[0]),T="/api/v1/records/"+encodeURIComponent(x);if(k==="get"){i("version",...p),v();let O=o("version")?"/versions/"+B(o("version"),"version"):"";A(await w(m(T+O,p)));return}if(k==="versions"){i(...l),A(await w(m(T+"/versions",l)));return}if(k==="read"){i("version");let O=await w(T+"/versions/"+B(o("version"),"version")+"/body");if(n.json)A(O);else{if(typeof O.body_text!="string")throw new Error("\u6B63\u6587\u672A\u63D0\u4F9B");process.stdout.write(O.body_text)}return}if(k==="download"){i("version","output",...p);let O=v();A(await wt(E,x,ge(o("output"),"--output"),u.signal,{record:!0,version:o("version")?B(o("version"),"version"):void 0,query:O.toString()}));return}if(["update","rename","archive","restore"].includes(k)){i("expect-revision","expect-version","key",...k==="update"?["upload-id","text"]:k==="rename"?["title"]:[]);let O={action:k,record_id:x,expected_revision:c(),expected_version:c("expect-version"),...k==="update"?{source:{upload_id:L(o("upload-id"))}}:k==="rename"?{title:ge(o("title"),"--title")}:{}},q=await w(T);j(await w(b(L(q.track_id))+"/content-commits","POST",{...n.text?{message:{source:{upload_id:L(o("upload-id"))}}}:{},record_changes:[O]},a()));return}throw new Error("\u672A\u77E5 record \u64CD\u4F5C")}if(h==="entry"){if(i(),s(S,1),!["get","read"].includes(k))throw new Error("\u672A\u77E5 entry \u64CD\u4F5C");let x=await w("/api/v1/entries/"+encodeURIComponent(L(S[0]))+(k==="read"?"/body":""));if(k==="read"&&!n.json){if(typeof x.body_text!="string")throw new Error("\u6B63\u6587\u672A\u63D0\u4F9B");process.stdout.write(x.body_text)}else A(x);return}if(h==="file"){if(k==="upload"){if(i("track","purpose","subject-type","subject","key","media-type","state","wait","timeout","interval"),s(S,1),o("track")&&["purpose","subject-type","subject"].some(T=>o(T)!==void 0))throw new Error("Track \u4E0A\u4F20\u4ECE Track \u63A8\u5BFC\u5F52\u5C5E\uFF0C\u4E0D\u63A5\u53D7\u5176\u4ED6\u4E3B\u4F53\u53C2\u6570");j(await hr(E,S[0],{track:o("track")?L(o("track")):void 0,purpose:o("purpose"),subjectType:o("subject-type"),subject:o("subject"),key:a(),mediaType:o("media-type")||(/\.md$/i.test(S[0])?"text/markdown":/\.txt$/i.test(S[0])?"text/plain":"application/zip"),state:o("state")||S[0]+".aut-upload.json",wait:!!n.wait,...N()}));return}s(S,1);let x=L(S[0]);if(k==="download"){i("output"),A(await wt(E,x,ge(o("output"),"--output"),u.signal));return}if(k==="get"){i(),A(await w("/api/v1/file-bundles/"+encodeURIComponent(x)));return}if(k==="status"||k==="abort"){i("content"),A(await w("/api/v1/"+(n.content?"content":"files")+"/uploads/"+encodeURIComponent(x),k==="abort"?"DELETE":"GET"));return}throw new Error("\u672A\u77E5 file \u64CD\u4F5C")}if(h==="operation"){if(s(S,1),k==="get"){i(),A(await w("/api/v1/operations/"+encodeURIComponent(L(S[0]))));return}if(k==="wait"){i("timeout","interval"),j(await gt(E,L(S[0]),N()));return}throw new Error("\u672A\u77E5 operation \u64CD\u4F5C")}if(h==="share"){if(k==="ls"){i("track","before-id","limit"),s(S,0),A(await w(m("/api/v1/content-shares",["track","before-id","limit"],{track:"track_id"})));return}if(k==="new"){i("key"),s(S,1),A(await w("/api/v1/content-shares","POST",Ke(Ae(S[0]),["object_type","object_id","expected_revision","version","through_seq","ttl_seconds","secret"]),a()));return}if(k==="revoke"){i("expect-revision","key"),s(S,1),A(await w("/api/v1/content-shares/"+encodeURIComponent(L(S[0])),"DELETE",{expected_revision:c()},a()));return}throw new Error("\u672A\u77E5 share \u64CD\u4F5C")}if(h==="api"){i("service","body-file","key"),s(d,2);let x=d[0].toUpperCase(),T=Me(d[1]),O=o("service")||"platform";if(!["GET","POST","PUT","PATCH","DELETE"].includes(x)||!["auth","platform"].includes(O))throw new Error("API \u65B9\u6CD5\u6216 service \u65E0\u6548");let q=T.split("?")[0];if(!(O==="auth"?/^\/api\/v1\/(?:auth\/(?:me|tokens|reauthentication)|accounts\/me|me)(?:\/|$)/:/^\/api\/v1\/(?:tracks|records|entries|content|content-shares|operations|parties|party-delegations|notifications|notification-preferences|files|file-bundles|utopia-rollout|me|tasks|solutions|collaborations|support|discover|reputation)(?:\/|$)/).test(q))throw new Error("\u6B64\u8DEF\u5F84\u4E0D\u5728 Agent Utopia \u8D26\u53F7\u4E1A\u52A1 API \u8303\u56F4");if(x==="GET"&&o("body-file"))throw new Error("GET \u4E0D\u63A5\u53D7\u8BF7\u6C42\u4F53");A(await w(T,x,o("body-file")?Ae(o("body-file")):void 0,o("key"),O));return}throw new Error("\u672A\u77E5\u64CD\u4F5C\uFF1B\u8FD0\u884C aut --help")}finally{process.off("SIGINT",y),process.off("SIGTERM",y)}}var Xe=e=>console.log(typeof e=="string"?e:JSON.stringify(e,null,2));async function Mn(){let e=process.argv.slice(2),r=e[0];if(e.length===1&&r==="--version"){Xe(X);return}if(e.includes("--check")&&r!=="self")throw new Error("--check \u4EC5\u7528\u4E8E aut self update --check\u3002");if(r==="self"){let t="\u7528\u6CD5\uFF1Aaut self update [--check] [--json]\uFF1B\u4E0D\u63A5\u53D7\u5176\u4ED6\u53C2\u6570\u6216\u9009\u9879\u3002",n;try{n=St({args:e.slice(1),allowPositionals:!0,options:{check:{type:"boolean"},json:{type:"boolean"}}})}catch{throw new Error(t)}if(n.positionals.length!==1||n.positionals[0]!=="update")throw new Error(t);let o=await Dt({packageName:"aut-cli",currentVersion:X,moduleUrl:import.meta.url,check:!!n.values.check});Xe(n.values.json?o:jt(o));return}if(r==="skill"){let{installSkill:t}=await Promise.resolve().then(()=>(bt(),xr)),{values:n,positionals:o}=St({args:e.slice(1),allowPositionals:!0,options:{agent:{type:"string"},scope:{type:"string"},dir:{type:"string"},force:{type:"boolean"},json:{type:"boolean"}}});if(o.length!==1||o[0]!=="install"||!n.agent)throw new Error("\u7528\u6CD5\uFF1Aaut skill install --agent codex|claude-code|agents [--scope user|project] [--dir PROJECT]");Xe(t({agent:n.agent,scope:n.scope,directory:n.dir,force:!!n.force}));return}if(r==="integrate"){let{installIntegration:t}=await Promise.resolve().then(()=>(yt(),Er)),{values:n,positionals:o}=St({args:e.slice(1),allowPositionals:!0,options:{dir:{type:"string"},json:{type:"boolean"}}});if(o.length!==1)throw new Error("\u7528\u6CD5\uFF1Aaut integrate codex|claude-code|agents [--dir PROJECT]");Xe(t(o[0],n.dir||"."));return}await yr(e)}Mn().catch(e=>{console.error("aut: "+e.message),process.exitCode=1});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Shared project context (Agent Utopia)
|
|
4
4
|
|
|
5
|
-
Use [the Agent Utopia Skill]({{skill_path}}) with `aut` 0.
|
|
5
|
+
Use [the Agent Utopia Skill]({{skill_path}}) with `aut` 0.9.0 or newer.
|
|
6
6
|
Check `aut status --json` and `aut whoami --json`, then verify the selected Track
|
|
7
7
|
and its access. The account remains logged in while personal and organization
|
|
8
8
|
Parties own separate Tracks. A version 2 `.aut.json` binds account, environment,
|
|
@@ -3,11 +3,11 @@ name: aut
|
|
|
3
3
|
description: Use aut-cli to read Agent Utopia Tracks and Records, resume project context, append authorized progress, manage account notifications, and wait for Track updates across personal and organization Parties. Use only the user's selected account, environment and Track.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- aut-skill-version: 0.
|
|
6
|
+
<!-- aut-skill-version: 0.9.0 -->
|
|
7
7
|
|
|
8
8
|
# Agent Utopia
|
|
9
9
|
|
|
10
|
-
Use the installed `aut` CLI, version 0.
|
|
10
|
+
Use the installed `aut` CLI, version 0.9.0 or newer. The account is the login
|
|
11
11
|
identity; a Party owns a Track. Personal and organization Parties use the same
|
|
12
12
|
account connection. Selecting another Track does not require another login.
|
|
13
13
|
Authority always comes from the server's current account grant and Track access.
|