aut-cli 0.7.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/dist/cli.js CHANGED
@@ -1,162 +1,98 @@
1
1
  #!/usr/bin/env node
2
- var Xr=Object.defineProperty;var ge=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(i){throw r=[i],i}};var Bt=(e,t)=>{for(var r in t)Xr(e,r,{get:t[r],enumerable:!0})};var Mt,$t=ge(()=>{Mt={name:"aut-cli",version:"0.7.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 $,he=ge(()=>{"use strict";$t();$=Mt.version});import{existsSync as Er,lstatSync as _t,readFileSync as Cn,renameSync as qn,unlinkSync as Sr,writeFileSync as vr}from"node:fs";import{dirname as Tr,join as Ge,resolve as bt}from"node:path";import{randomUUID as Fn}from"node:crypto";function Q(e=process.cwd()){let t=bt(e);for(;;){for(let i of[".amb.json",".amb-solo.json",".amb-track",".amb-team.json"]){let n=!1;try{_t(Ge(t,i)),n=!0}catch(a){if(a.code!=="ENOENT")throw a}if(n)throw new Error(`\u68C0\u6D4B\u5230\u65E7\u7248\u9879\u76EE\u7ED1\u5B9A ${Ge(t,i)}\uFF1B\u8BF7\u6838\u9A8C\u6765\u6E90\u5E76\u5907\u4EFD\u79FB\u8D70\u65E7\u7ED1\u5B9A\uFF0C\u518D\u7528 aut status / aut whoami \u6838\u9A8C\u8FDE\u63A5\u540E\u663E\u5F0F aut track bind ID\u3002\u4E0D\u4F1A\u590D\u7528\u65E7 ID\u3001\u8986\u76D6\u6216\u81EA\u52A8\u8FC1\u79FB\u3002`)}let r=Tr(t);if(r===t)return;t=r}}function Ke(e){let t;try{t=_t(e)}catch(r){if(r.code==="ENOENT")return;throw r}if(!t.isFile()||t.isSymbolicLink())throw new Error("\u62D2\u7EDD\u8BFB\u53D6\u7B26\u53F7\u94FE\u63A5\u6216\u975E\u666E\u901A .aut.json");try{let r=JSON.parse(Cn(e,"utf8"));if(r.version!==1||r.edition!=="team"||typeof r.auth_url!="string"||typeof r.platform_url!="string"||typeof r.organization_id!="string"||typeof r.track_id!="string"||!/^[A-Za-z0-9_-]{1,200}$/.test(r.track_id)||Object.keys(r).some(i=>!["version","edition","auth_url","platform_url","organization_id","track_id"].includes(i)))throw new Error("invalid");return r}catch{throw new Error(".aut.json \u65E0\u6548\uFF1B\u7ED1\u5B9A\u53EA\u4FDD\u5B58 Team \u6765\u6E90\u4E0E Track ID\uFF0C\u4E0D\u4FDD\u5B58\u51ED\u636E")}}function kt(e,t=process.cwd()){if(e.assertActive(),e.profile.version!==1)throw new Error("\u8D26\u53F7\u7EA7 Track \u9879\u76EE\u7ED1\u5B9A\u5C1A\u672A\u63A5\u5165\uFF1B\u4E0D\u4F1A\u590D\u7528\u65E7\u7EC4\u7EC7\u7ED1\u5B9A");Q(t);let r=bt(t);for(;;){let i=Ke(Ge(r,".aut.json"));if(i){if(i.auth_url!==e.profile.auth_url||i.platform_url!==e.profile.platform_url||i.organization_id!==e.profile.organization_id)throw new Error("\u9879\u76EE Team \u7ED1\u5B9A\u4E0E\u5F53\u524D\u8FDE\u63A5\u7684 Auth/Platform/\u7EC4\u7EC7\u4E0D\u4E00\u81F4\uFF1B\u4E0D\u4F1A\u5207\u6362\u76EE\u6807\uFF0C\u8BF7\u660E\u786E\u91CD\u65B0\u7ED1\u5B9A");return i.track_id}let n=Tr(r);if(n===r)break;r=n}throw new Error("\u7F3A\u5C11 Track ID\uFF1B\u53EF\u5148\u8FD0\u884C aut track bind ID")}async function xr(e,t,r=process.cwd(),i=!1){if(e.profile.version!==1)throw new Error("\u8D26\u53F7\u7EA7 Track \u9879\u76EE\u7ED1\u5B9A\u5C1A\u672A\u63A5\u5165\uFF1B\u4E0D\u4F1A\u5199\u5165\u65E7\u7EC4\u7EC7\u7ED1\u5B9A");if(!/^[A-Za-z0-9_-]{1,200}$/.test(t))throw new Error("Track \u5FC5\u987B\u4E3A ID");let n=bt(r);if(Q(n),!Er(n)||!_t(n).isDirectory())throw new Error("\u7ED1\u5B9A\u76EE\u5F55\u5FC5\u987B\u662F\u5DF2\u7ECF\u5B58\u5728\u7684\u9879\u76EE\u76EE\u5F55");let a=Ge(n,".aut.json"),s=Ke(a),o={version:1,edition:"team",auth_url:e.profile.auth_url,platform_url:e.profile.platform_url,organization_id:e.profile.organization_id,track_id:t},u=s&&JSON.stringify(s)===JSON.stringify(o);if(s&&!u&&!i)throw new Error("\u5DF2\u6709\u4E0D\u540C\u7684 Team \u7ED1\u5B9A\uFF1B\u786E\u8BA4\u540E\u4F7F\u7528 --replace");if((await e.request("platform","/api/v1/tracks/"+t))?.id!==t)throw new Error("\u670D\u52A1\u7AEF\u8FD4\u56DE\u7684 Track ID \u4E0D\u5339\u914D\uFF0C\u672A\u5199\u5165\u7ED1\u5B9A");if(e.assertActive(),Q(n),JSON.stringify(Ke(a))!==JSON.stringify(s))throw new Error("\u9879\u76EE\u7ED1\u5B9A\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u5185\u5BB9");if(!u){let h=a+".lock";try{vr(h,String(process.pid),{flag:"wx",mode:384})}catch{throw new Error("Team \u9879\u76EE\u7ED1\u5B9A\u6B63\u5728\u4FEE\u6539\uFF1B\u8BF7\u6838\u5B9E\u6CA1\u6709\u5176\u4ED6 bind \u64CD\u4F5C")}let l=a+"."+Fn()+".tmp";try{if(e.assertActive(),Q(n),JSON.stringify(Ke(a))!==JSON.stringify(s))throw new Error("\u9879\u76EE\u7ED1\u5B9A\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u5185\u5BB9");vr(l,JSON.stringify(o,null,2)+`
3
- `,{flag:"wx",mode:384}),qn(l,a)}finally{Er(l)&&Sr(l),Sr(h)}}return{status:u?"up-to-date":"bound",path:a,...o}}var Et=ge(()=>{"use strict"});var Fr={};Bt(Fr,{ambSkill:()=>Ze,installIntegration:()=>ai,projectBundle:()=>si,projectFiles:()=>It});import P from"node:fs";import{randomBytes as ei,createHash as ti}from"node:crypto";import{join as fe,resolve as ri}from"node:path";import{fileURLToPath as Cr}from"node:url";function Ze(e="team"){if(e!=="team")throw new Error("\u4EC5\u652F\u6301 Team\uFF1B\u65E7 Solo Skill \u4E0D\u518D\u63D0\u4F9B");return P.readFileSync(fe(qr(),"skills/aut/SKILL.md"),"utf8")}function It(e){if(!["claude-code","codex","agents"].includes(e))throw new Error("\u96C6\u6210\u652F\u6301 claude-code\u3001codex \u6216 agents");let t=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(fe(qr(),"AGENTS.snippet.md"),"utf8").replace("{{skill_path}}",t)},{path:t,merge:"managed-skill",content:Ze()}]}function si(e="agents"){return{protocol:"amb-project",version:2,edition:"team",files:It(e)}}function Xe(e){let t=P.lstatSync(e,{throwIfNoEntry:!1});if(!t)return;if(!t.isFile()||t.isSymbolicLink()||t.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 r=P.openSync(e,P.constants.O_RDONLY|(P.constants.O_NOFOLLOW||0));try{return new TextDecoder("utf-8",{fatal:!0}).decode(P.readFileSync(r))}finally{P.closeSync(r)}}function ai(e,t){let r=It(e),i=ri(t);Q(i);let n=P.lstatSync(i,{throwIfNoEntry:!1});if(n&&(!n.isDirectory()||n.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(i,{recursive:!0});let a=P.realpathSync(i);Q(a);for(let S of[".agents",".claude"]){let c=P.lstatSync(fe(a,S),{throwIfNoEntry:!1});if(c&&(!c.isDirectory()||c.isSymbolicLink()))throw new Error("\u5BBF\u4E3B\u76EE\u5F55\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6")}let s=fe(a,".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 S of[".claude/settings.json",".claude/settings.local.json"])if(Xe(fe(a,S))?.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 o=r[0],u=fe(a,o.path),_=Xe(u),h=_||"",l=o.content.trim(),d=[...h.matchAll(/<!-- ((?:aut|amb)(?:-solo)?):(begin|end) -->/g)],k;if(!d.length)k=h+(h?`
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
- `:"")+o.content;else{if(d.length!==2||d[0][1]!==d[1][1]||d[0][2]!=="begin"||d[1][2]!=="end")throw new Error(`${o.path} \u4E2D AMB \u6807\u8BB0\u51B2\u7A81\u6216\u4E0D\u5B8C\u6574\uFF0C\u8BF7\u624B\u52A8\u5408\u5E76`);let S=d[0].index,c=d[1].index+d[1][0].length,p=h.slice(S,c).trim();if(p!==l&&!oi.has(ii(p)))throw new Error(`${o.path} \u7684 AMB \u8BF4\u660E\u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u624B\u52A8\u5408\u5E76`);k=h.slice(0,S)+l+h.slice(c)}let b=ei(9).toString("base64url"),g=u+"."+b+".tmp",f,w=At({agent:e,scope:"project",directory:a});if(k!==_)try{if(P.writeFileSync(g,k,{flag:"wx",mode:420}),Xe(u)!==_)throw new Error("\u9879\u76EE\u8BF4\u660E\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u672A\u8986\u76D6");if(_!==void 0&&(f=u+".bak-"+b,P.writeFileSync(f,_,{flag:"wx",mode:384})),Xe(u)!==_)throw new Error("\u9879\u76EE\u8BF4\u660E\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u672A\u8986\u76D6");_===void 0?P.linkSync(g,u):P.renameSync(g,u)}finally{P.rmSync(g,{force:!0})}return{installed:r.map(S=>S.path),directory:a,skill:w,...f?{backup:f}:{},next:"\u9879\u76EE\u8BF4\u660E\u548C\u552F\u4E00 AMB 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 Mr,ni,ii,oi,qr,Nt=ge(()=>{"use strict";Ot();Et();Mr=Cr(new URL("./integrations/",import.meta.url)),ni=Cr(new URL("../integrations/",import.meta.url)),ii=e=>ti("sha256").update(e).digest("hex"),oi=new Set(["57bed13cbd2e32a8565f2eb77c022cd31446c55f6ed2cd10e24060a6267a9128","2d99e2648f2e7631dcffb07290c7dc46a49eb8d08f24e6ad6ac74fc240a8f88c"]),qr=()=>P.existsSync(Mr)?Mr:ni});var Gr={};Bt(Gr,{installSkill:()=>At});import I from"node:fs";import{createHash as ci,randomBytes as di}from"node:crypto";import{homedir as ui}from"node:os";import{join as B,resolve as li,basename as fi}from"node:path";function Oe(e){let t=I.lstatSync(e,{throwIfNoEntry:!1});if(!t)return;if(t.isSymbolicLink()||!t.isFile()||t.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 r=I.openSync(e,I.constants.O_RDONLY|(I.constants.O_NOFOLLOW||0));try{let i=I.fstatSync(r),n=I.readFileSync(r),a=I.lstatSync(e,{throwIfNoEntry:!1});if(!i.isFile()||!a?.isFile()||t.dev!==i.dev||t.ino!==i.ino||i.dev!==a.dev||i.ino!==a.ino||t.mtimeMs!==a.mtimeMs||t.size!==n.length)throw new Error(`\u6587\u4EF6\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${e}`);return{content:n,device:i.dev,inode:i.ino,modified:a.mtimeMs}}finally{I.closeSync(r)}}function ee(e,t){let r=Oe(e);if(!!r!=!!t||r&&t&&(r.device!==t.device||r.inode!==t.inode||r.modified!==t.modified||!r.content.equals(t.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 At(e){let{agent:t}=e,r=e.scope??"user",i=e.edition??"team";if(i!=="team")throw new Error("--edition \u4EC5\u652F\u6301 team\uFF1BSolo \u5DF2\u79FB\u9664\uFF0C\u9ED8\u8BA4\u5B89\u88C5\u552F\u4E00 aut Skill");if(!["codex","claude-code","agents"].includes(t))throw new Error("Skill \u5B89\u88C5\u9700\u8981 --agent codex\u3001claude-code \u6216 agents");if(!["user","project"].includes(r))throw new Error("--scope \u53EA\u652F\u6301 user \u6216 project");if(e.directory!==void 0&&r!=="project")throw new Error("--dir \u53EA\u9002\u7528\u4E8E --scope project\uFF0C\u8868\u793A\u9879\u76EE\u6839\u76EE\u5F55");let n=r==="user"?ui():li(e.directory??"."),a=I.lstatSync(n,{throwIfNoEntry:!1});if(!a?.isDirectory()||a.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 s=I.realpathSync(n),o=t==="claude-code"?".claude":".agents",u=[o,"skills","aut"],_=[],h=s;for(let y of["",...u]){y&&(h=B(h,y)),I.lstatSync(h,{throwIfNoEntry:!1})||I.mkdirSync(h);let v=I.lstatSync(h);if(v.isSymbolicLink()||!v.isDirectory())throw new Error(`Skill \u8DEF\u5F84\u5FC5\u987B\u662F\u666E\u901A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\uFF1A${h}`);_.push({path:h,device:v.dev,inode:v.ino})}function l(){for(let y of _){let T=I.lstatSync(y.path,{throwIfNoEntry:!1});if(!T?.isDirectory()||T.isSymbolicLink()||T.dev!==y.device||T.ino!==y.inode)throw new Error(`Skill \u76EE\u5F55\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${y.path}`)}}let d=B(h,"SKILL.md"),k=B(h,Jr),b=B(h,".aut-install.lock");l();let g;try{g=I.openSync(b,"wx",384)}catch(y){throw y.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${b}`):y}I.closeSync(g);let f=[],w,S=!1,c=[];try{let Qe=function(A,R){let U=A+"."+Dt(9)+".tmp";f.push(U);try{I.writeFileSync(U,R,{flag:"wx",mode:420})}catch(G){throw G.code==="EEXIST"&&f.pop(),G}return U},et=function(A,R,U){U?I.renameSync(A,R):I.linkSync(A,R)};var p=Qe,m=et;let y=Oe(d),T=Oe(k),v=Ze(i),O=Pt(v),N=/<!-- aut-skill-version: ([A-Za-z0-9.+-]+) -->/.exec(v)?.[1];if(!N)throw new Error("\u968F CLI \u5206\u53D1\u7684 AMB Skill \u7F3A\u5C11\u7248\u672C\u4FE1\u606F");let q=y?.content.equals(Buffer.from(v))??!1,pe=y?Pt(y.content):void 0,Yr=pe&&Kr.has(pe);if(y&&!q&&!Yr)throw new Error(`\u5DF2\u6709\u81EA\u5B9A\u4E49\u6216\u65E0\u6CD5\u9A8C\u8BC1\u7684 Skill\uFF0C\u5DF2\u4FDD\u7559\u539F\u6587\u4EF6\uFF1A${d}
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 Lt=[];for(let A of["amb","amb-team","amb-solo"]){let R=B(s,o,"skills",A),U=I.lstatSync(R,{throwIfNoEntry:!1});if(!U)continue;if(!U.isDirectory()||U.isSymbolicLink())throw new Error(`\u65E7 Skill \u8DEF\u5F84\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6\uFF1A${R}`);let G=B(R,"SKILL.md"),te=Oe(G);if(!te||!Kr.has(Pt(te.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${R}`);let we=new Map;for(let Y of I.readdirSync(R)){if(Y!=="SKILL.md"&&Y!==Jr&&Y!==".amb-install.json"&&!/^SKILL\.md\.bak-[A-Za-z0-9._-]+$/.test(Y))throw new Error(`\u65E7 Skill \u76EE\u5F55\u6709\u989D\u5916\u6587\u4EF6\u6216\u5B89\u88C5\u9501\uFF0C\u8BF7\u5148\u4EBA\u5DE5\u6838\u5BF9\uFF1A${R}`);let De=Oe(B(R,Y));if(!De)throw new Error("\u65E7 Skill \u6587\u4EF6\u5728\u68C0\u67E5\u65F6\u6D88\u5931\uFF0C\u8BF7\u91CD\u8BD5");we.set(Y,De)}Lt.push({directory:R,file:G,snapshot:te,device:U.dev,inode:U.ino,files:we})}let me=B(s,o,"amb-skill-backups"),Ve=I.lstatSync(me,{throwIfNoEntry:!1});if(Ve&&(!Ve.isDirectory()||Ve.isSymbolicLink()))throw new Error("Skill \u5907\u4EFD\u76EE\u5F55\u4E0D\u80FD\u662F\u7B26\u53F7\u94FE\u63A5\u6216\u6587\u4EF6");let jt=JSON.stringify({version:1,sha256:O,skill_version:N,cli_version:$},null,2)+`
7
- `,Hr=T?.content.toString("utf8")!==jt,Ut=q?void 0:Qe(d,v),zt=Hr?Qe(k,jt):void 0;if(l(),ee(d,y),ee(k,T),y&&!q){let A=d+".bak-"+new Date().toISOString().replaceAll(/[:.]/g,"-")+"-"+Dt(6);if(I.writeFileSync(A,y.content,{flag:"wx",mode:384}),!I.readFileSync(A).equals(y.content))throw new Error(`Skill \u5907\u4EFD\u9A8C\u8BC1\u5931\u8D25\uFF1A${A}`);w=A}l(),ee(d,y),ee(k,T);for(let A of Lt){l();let R=I.lstatSync(A.directory,{throwIfNoEntry:!1});if(!R?.isDirectory()||R.isSymbolicLink()||R.dev!==A.device||R.ino!==A.inode)throw new Error("\u65E7 Skill \u76EE\u5F55\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316");ee(A.file,A.snapshot);let U=I.readdirSync(A.directory).sort();if(JSON.stringify(U)!==JSON.stringify([...A.files.keys()].sort()))throw new Error("\u65E7 Skill \u76EE\u5F55\u5185\u5BB9\u5728\u5B89\u88C5\u671F\u95F4\u53D1\u751F\u53D8\u5316");for(let[Y,De]of A.files)ee(B(A.directory,Y),De);I.existsSync(me)||I.mkdirSync(me);let G=I.lstatSync(me);if(!G.isDirectory()||G.isSymbolicLink())throw new Error("Skill \u5907\u4EFD\u76EE\u5F55\u53D1\u751F\u53D8\u5316");let te=B(me,Dt(12));I.mkdirSync(te,{mode:448});let we=B(te,fi(A.directory));I.renameSync(A.directory,we),c.push({from:A.directory,backup:we})}return l(),ee(d,y),Ut&&(et(Ut,d,y),S=!0),zt&&et(zt,k,T),{status:y?q?"up-to-date":"updated":"installed",agent:t,edition:i,scope:r,directory:h,file:d,skill_version:N,cli_version:$,...w?{backup:w}:{},...c.length?{migrated:c}:{},next:"\u65B0\u5F00\u4F1A\u8BDD\u540E\u52A0\u8F7D AMB 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(y){if(!S)for(let v of[...c].reverse())I.lstatSync(v.from,{throwIfNoEntry:!1})||I.renameSync(v.backup,v.from);if(!w&&!S&&!c.length)throw y;let T=y instanceof Error?y.message:String(y);throw new Error(T+(w?`
8
- \u539F Skill \u7684\u5B8C\u6574\u5907\u4EFD\uFF1A${w}`:"")+(c.length&&S?`
9
- \u65E7 Skill \u76EE\u5F55\u5907\u4EFD\uFF1A${c.map(v=>v.backup).join(", ")}`:"")+(S?`
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
+ \u539F Skill \u7684\u5B8C\u6574\u5907\u4EFD\uFF1A${_}`:"")+(y.length&&u?`
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:y})}finally{l();for(let y of f)I.rmSync(y,{force:!0});I.unlinkSync(b)}}var Dt,Jr,Kr,Pt,Ot=ge(()=>{"use strict";Nt();he();Dt=(e=32)=>di(e).toString("base64url"),Jr=".aut-install.json",Kr=new Set(["028045d7db1fa9923e15480eebf897e3817b9bfb3b3532b9f080815340f22e16","a1ae7cb2e0abb898a53edcbbb447371c02078f64bb10a68cc106207be26216b8","d1fff3ba6231a0650949a25908feb1027e3ecb505ff56336ddbe1f0604950072","2a11c37973d4bf0316446fb34eff7efa0b612711dac63e846884b089f4da5d54","cd0d9742c70afbc0a114595a577a265185e330f6ba55b9d850429dedf42f26b1","f1a71e248a80699f61f80335e234e3a4c71aba2532a79f078f965bdcdd0aea56","c88a8c86efad9d8a955fd10b96b1ca9701711fe2f5a082577586bac6e8c98d54","d1c0b6ab80cab8b84f2755032c8c0358c939c67b2d7b9875094e89d6bf774ff9","19047c4453610aaa295c2e13b1624be3816bd96fe971ff405d3a7c7d66bbc2a7"]),Pt=e=>ci("sha256").update(e).digest("hex")});he();import{parseArgs as Rt}from"node:util";import{spawn as Wr}from"node:child_process";import{lstatSync as Ct,mkdtempSync as Vr,readFileSync as Qr,realpathSync as J,rmSync as en}from"node:fs";import{tmpdir as tn}from"node:os";import{delimiter as rn,dirname as ye,isAbsolute as Pe,join as F,resolve as nn}from"node:path";import{fileURLToPath as on}from"node:url";var tt="https://registry.npmjs.org/";function sn(e,t,r){return new Promise((i,n)=>{let a=Wr(e,t,{cwd:r.cwd,env:r.env,shell:!1,stdio:["ignore","pipe","pipe"],windowsHide:!0}),s="",o="",u,_,h=d=>{u??=d,a.kill(),_??=setTimeout(()=>a.kill("SIGKILL"),2e3),_.unref()},l=setTimeout(()=>h(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")),r.timeoutMs);a.stdout.setEncoding("utf8"),a.stderr.setEncoding("utf8"),a.stdout.on("data",d=>{r.progress&&process.stderr.write(d),s+=d,s.length>2e6&&h(new Error("npm \u8F93\u51FA\u8FC7\u5927\uFF0C\u5DF2\u505C\u6B62\u5347\u7EA7\u3002"))}),a.stderr.on("data",d=>{r.progress&&process.stderr.write(d),o=(o+d).slice(-8e3)}),a.on("error",d=>{u=d}),a.on("close",(d,k)=>{clearTimeout(l),_&&clearTimeout(_),u?n(u):i({stdout:s,stderr:o,status:d,signal:k})})})}function rt(e){if(!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e))return;let t=e.split(".").map(Number);if(t.every(Number.isSafeInteger))return t}function Jt(e,t){for(let r=0;r<3;r++)if(e[r]!==t[r])return e[r]-t[r];return 0}function an(e,t){if(!e||e==="*")return!0;let r=/^>=\s*(\d+)(?:\.(\d+))?(?:\.(\d+))?$/.exec(e.trim()),i=rt(t);if(!r||!i)return null;let n=[Number(r[1]),Number(r[2]||0),Number(r[3]||0)];return n.every(Number.isSafeInteger)?Jt(i,n)>=0:null}function _e(e){return JSON.parse(Qr(F(e,"package.json"),"utf8"))}function cn(e){let t=ye(J(on(e)));for(;;){try{return{directory:t,manifest:_e(t)}}catch(i){if(i.code!=="ENOENT")throw i}let r=ye(t);if(r===t)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");t=r}}function dn(e){let t=ye(e.nodePath),r=[e.env.npm_execpath,F(t,"node_modules/npm/bin/npm-cli.js"),F(t,"../lib/node_modules/npm/bin/npm-cli.js"),...String(e.env.PATH||e.env.Path||"").split(rn).filter(i=>i&&Pe(i)).flatMap(i=>[F(i,"npm"),F(i,"node_modules/npm/bin/npm-cli.js"),F(i,"../lib/node_modules/npm/bin/npm-cli.js")])];for(let i of r)if(!(!i||!Pe(i)))try{let n=J(i),a=ye(ye(n)),s=_e(a),o=s.bin;if(s.name==="npm"&&o?.npm==="bin/npm-cli.js"&&n===J(F(a,"bin/npm-cli.js")))return n}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 qt(e){let t=e.trim();if(!Pe(t)||/[\r\n\0]/.test(t))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 t}function Ft(e,t){let i=t.bin,n=typeof i=="string"?i:i?.["aut"];if(typeof n!="string"||Pe(n))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 a=J(nn(e,n)),s=J(e);if(!a.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 a}function un(e={}){let t={fetch:globalThis.fetch.bind(globalThis),run:sn,nodePath:process.execPath,nodeVersion:process.versions.node,env:process.env,...e};return async function(i){let{packageName:n,currentVersion:a,check:s}=i;if(n!=="aut-cli")throw new Error("\u4E0D\u652F\u6301\u66F4\u65B0\u6B64\u8F6F\u4EF6\u5305\u3002");let o;try{let p=await t.fetch(tt+n+"/latest",{headers:{Accept:"application/json","Cache-Control":"no-cache"},cache:"no-store",redirect:"error",signal:AbortSignal.timeout(2e4)});if(!p.ok)throw new Error(`HTTP ${p.status}`);o=await p.json()}catch(p){throw new Error("\u65E0\u6CD5\u4ECE\u5B98\u65B9 npm \u67E5\u8BE2\u6700\u65B0\u7248\u672C\uFF0C\u672A\u6267\u884C\u5B89\u88C5\uFF1A"+(p instanceof Error?p.message:String(p)))}let u=o?.version,_=typeof u=="string"?rt(u):void 0;if(o?.name!==n||!_||typeof u!="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 h=o.engines,l=typeof h?.node=="string"?h.node:void 0;if(h?.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 d=rt(a),k=d?Jt(d,_):void 0,b={package:n,current_version:a,latest_version:u,status:k===void 0?"development-version":k===0?"up-to-date":k>0?"newer-installed":"available",registry:tt,...l?{node_requirement:l}:{},node_compatible:an(l,t.nodeVersion)};if(s||b.status!=="available")return b;if(b.node_compatible!==!0)throw new Error(b.node_compatible===!1?`${n}@${u} \u9700\u8981 Node.js ${l}\uFF0C\u5F53\u524D\u4E3A ${t.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 g=cn(i.moduleUrl);if(g.manifest.name!==n)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(g.manifest.version!==a)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 f=dn(t),w=Vr(F(tn(),"amb-self-update-")),S=Object.fromEntries(Object.entries(t.env).filter(([p])=>!p.startsWith("AMB_")&&!p.startsWith("AUT_"))),c=async(p,m=!1,y=3e4)=>{let T=await t.run(t.nodePath,[f,...p],{cwd:w,env:S,timeoutMs:y,progress:m});if(T.status!==0)throw new Error(`npm ${m?"\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${T.signal||T.status||"\u672A\u77E5\u72B6\u6001"}\uFF09\u3002`+(T.stderr.trim()?`
12
- `+T.stderr.trim().slice(-2e3):""));return T.stdout};try{let p=qt(await c(["prefix","--global"])),m=qt(await c(["root","--global",`--prefix=${p}`])),y=F(m,n),T=()=>{let N=!1;try{let q=Ct(y);N=!q.isSymbolicLink()&&q.isDirectory()&&J(y)===J(g.directory)&&_e(y).name===n&&_e(y).version===a}catch{}if(!N)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${g.directory}
14
- npm \u5168\u5C40\u5305\uFF1A${y}`)};T(),Ft(y,g.manifest);let v=J(y);T(),await i.beforeInstall?.(),T(),await c(["install","--global",`${n}@${u}`,`--prefix=${p}`,`--registry=${tt}`,"--prefer-online","--offline=false","--engine-strict","--force=false","--dry-run=false","--bin-links=true","--ignore-scripts","--no-audit","--no-fund"],!0,3e5);let O;try{let N=Ct(y);if(N.isSymbolicLink()||!N.isDirectory()||J(y)!==v)throw new Error("\u5B89\u88C5\u4F4D\u7F6E\u5DF2\u6539\u53D8");if(O=_e(y),O.name!==n||O.version!==u)throw new Error("\u7248\u672C\u4E0D\u7B26");let q=Ft(y,O),pe=await t.run(t.nodePath,[q,"--version"],{cwd:w,env:S,timeoutMs:3e4});if(pe.status!==0||pe.stdout.trim()!==u)throw new Error("\u65B0\u547D\u4EE4\u7248\u672C\u68C0\u67E5\u5931\u8D25")}catch(N){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"+(N instanceof Error?N.message:String(N)))}return{...b,status:"updated",installed_version:u,installed_path:y,restart_required:!1}}finally{en(w,{recursive:!0,force:!0})}}}var Kt=un();function Gt(e){let t=`${e.package} ${e.current_version}`;return e.status==="up-to-date"?`${t} \u5DF2\u662F\u5B98\u65B9 npm \u6700\u65B0\u7A33\u5B9A\u7248\u672C\u3002`:e.status==="newer-installed"?`${t} \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"?`${t} \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`:`${t} \u53EF\u66F4\u65B0\u81F3 ${e.latest_version}\uFF08\u5B98\u65B9 npm\uFF09\u3002`+(e.node_compatible===!1?`
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{constants as nt,closeSync as ln,fstatSync as fn,lstatSync as pn,openSync as mn,readSync as wn}from"node:fs";import{resolve as gn}from"node:path";var be=1024*1024,it=be,re=2*be,Re=4*be,ot=32*be,Yt=1024,hn=5,M=class extends Error{constructor(r,i){super(`${r}: ${i}`);this.code=r}code};function Z(e,t,r="content_too_large"){throw new M(r,`${e}\u4E0D\u80FD\u8D85\u8FC7 ${t} \u5B57\u8282\uFF08${t/be} MiB\uFF09\uFF1B\u8BF7\u62C6\u5206\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u622A\u65AD`)}function Ht(e,t,r,i){let n=[],a=0;for(;;){let s=Buffer.allocUnsafe(Math.min(65536,t-a+1)),o;try{o=wn(e,s,0,s.length,null)}catch(u){if(u.code==="EINTR")continue;throw u}if(!o)return Buffer.concat(n,a);a+=o,a>t&&Z(r,t,i),n.push(s.subarray(0,o))}}function st(e,t,r="\u6587\u4EF6",i="content_too_large"){let n=gn(e),a=pn(n);if(!a.isFile()||a.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`);a.size>t&&Z(r,t,i);let s=mn(n,nt.O_RDONLY|(nt.O_NOFOLLOW||0)|(nt.O_NONBLOCK||0));try{let o=fn(s);if(!o.isFile()||o.dev!==a.dev||o.ino!==a.ino)throw new Error(`${r}\u8BFB\u53D6\u524D\u5DF2\u6539\u53D8\u6216\u4E0D\u662F\u666E\u901A\u6587\u4EF6`);return o.size>t&&Z(r,t,i),Ht(s,t,r,i)}finally{ln(s)}}function ne(e,t="\u6B63\u6587"){if(e.includes(0))throw new M("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 M("invalid_content_encoding",`${t}\u5FC5\u987B\u662F\u6709\u6548\u7684 UTF-8 \u6587\u672C`)}}function C(e,t=it,r="\u6B63\u6587",i="content_too_large"){let n=e==="-"?Ht(0,t,r,i):st(e,t,r,i);return ne(n,r)}function Xt(e,t="\u6B63\u6587"){if(e.includes("\0"))throw new M("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 M("invalid_content_encoding",`${t}\u5305\u542B\u65E0\u6548\u7684 Unicode \u5B57\u7B26`);r.length>it&&Z(t,it)}function at(e){if(!Array.isArray(e))throw new Error("--documents \u9700\u8981 {title,format,content} JSON \u6570\u7EC4");if(e.length>hn)throw new M("too_many_documents","\u9644\u4EF6\u6700\u591A 5 \u4EFD");for(let t of e){if(!t||typeof t.title!="string"||typeof t.content!="string"||Object.keys(t).some(r=>!["title","format","content"].includes(r)))throw new Error("--documents \u9700\u8981 {title,format,content} JSON \u6570\u7EC4");if(!["md","html"].includes(t.format))throw new M("unsupported_content_format","\u9644\u4EF6 format \u53EA\u652F\u6301 md \u6216 html");Xt(t.content,"\u6BCF\u4EFD\u9644\u4EF6\u6B63\u6587")}}function Zt(e,t){if(!t||typeof t!="object")return;let r=e.split("?")[0];if(!/^\/api\/v1\/(?:records(?:\/[A-Za-z0-9_-]+\/versions)?|tracks\/[A-Za-z0-9_-]+\/(?:entries|background)|(?:public\/)?render)$/.test(r))return;let i=t;for(let n of["content","content_markdown"])if(i[n]!==void 0){if(typeof i[n]!="string")throw new Error(`${n} \u5FC5\u987B\u662F\u6587\u672C`);Xt(i[n])}if(i.format!==void 0&&!["md","html"].includes(String(i.format)))throw new M("unsupported_content_format","\u6B63\u6587 format \u53EA\u652F\u6301 md \u6216 html");i.documents!==void 0&&at(i.documents)}function Wt(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")>re&&Z("\u7F16\u7801\u540E\u7684 JSON \u8BF7\u6C42",re,"request_too_large"),t}async function Vt(e,t){let r=e.body?.getReader();if(!r)return Buffer.alloc(0);let i=[],n=0;try{let a=e.headers.get("content-length");for(!e.headers.has("content-encoding")&&a&&/^\d+$/.test(a)&&Number(a)>t&&Z("HTTP \u54CD\u5E94",t,"response_too_large");;){let{done:s,value:o}=await r.read();if(s)return Buffer.concat(i,n);n+=o.byteLength,n>t&&Z("HTTP \u54CD\u5E94",t,"response_too_large"),i.push(o)}}catch(a){try{await r.cancel()}catch{}throw a}finally{r.releaseLock()}}function ie(e){if(e===void 0)return Re;let t=Number(e);if(!/^\d+$/.test(String(e))||!Number.isSafeInteger(t)||t<Yt||t>ot)throw new Error(`--max-bytes \u5FC5\u987B\u4E3A ${Yt}\u2013${ot} \u7684\u6574\u6570`);return t}function Qt(e,t=!1){let r=new URL(e,"https://team.invalid"),i=r.pathname,n="[A-Za-z0-9_-]+";return new RegExp(`^/api/v1/tracks/${n}/(?:entries|context)$`).test(i)?ie(r.searchParams.get("max_bytes")??void 0):t||new RegExp(`^/api/v1/(?:(?:public/)?render|public/shares/${n}|records/${n}/(?:content|reading|versions/[0-9]+)|tracks/${n}/background|entries/${n}(?:/documents/${n}(?:/reading)?)?)$`).test(i)?ot:Re}var yn=["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"],_n=["account:read","credentials:manage","track:read","track:write","track:share","track:admin","contract:read","contract:work","contract:manage","collaboration:manage","utopia.board.write"],Le=["account:read","track:read","notifications:read"];function L(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 K(e){let t=e?.track_ids||[];if(!Array.isArray(e?.scopes)||!e.scopes.length||e.scopes.some(r=>!yn.includes(r))||new Set(e.scopes).size!==e.scopes.length||!Array.isArray(t)||new Set(t).size!==t.length||t.some(r=>!L(r))||!(e.resource_mode==="all_visible"&&t.length===0||e.resource_mode==="selected_tracks"&&t.length>0&&t.length<=100&&e.scopes.every(r=>_n.includes(r))))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,...t.length?{track_ids:[...t]}:{}}}function Ue(e,t){return K(e),K(t),e.scopes.every(r=>t.scopes.includes(r))&&(t.resource_mode==="all_visible"||e.resource_mode==="selected_tracks"&&e.track_ids.every(r=>t.track_ids.includes(r)))}function ct(e,t,r=Date.now()){let i=e;if(!i||!L(i.account_id)||!L(i.credential_id)||i.credential_kind!==(t.startsWith("aut_agent_")?"agent_pat":"account_session")||!Number.isSafeInteger(i.credential_epoch)||i.credential_epoch<1||!Number.isSafeInteger(i.authorization_epoch)||i.authorization_epoch<1||"organization_id"in i||"user_id"in i||"id"in i)throw new Error("Auth \u8FD4\u56DE\u7684\u8D26\u53F7\u8EAB\u4EFD\u65E0\u6548\u6216\u6DF7\u5165\u7EC4\u7EC7\u8EAB\u4EFD");K(i);let n=Date.parse(i.checked_at),a=Date.parse(i.valid_until),s=Date.parse(i.expires_at);if(![n,a,s].every(Number.isFinite)||n>r+1e3||a<=r||a<=n||a-n>5e3||a>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 i}function er(e){return JSON.parse(e,(t,r,i)=>{if(typeof r=="number"&&(!Number.isFinite(r)||Number.isInteger(r)&&!Number.isSafeInteger(r))){if(!i?.source||!/^-?(?:0|[1-9]\d*)$/.test(i.source))throw new Error("JSON \u6570\u503C\u8D85\u51FA\u53EF\u7CBE\u786E\u8868\u793A\u8303\u56F4");return i.source}return r})}function dt(e,t){if(!e||!/^(?:0|[1-9]\d*)$/.test(e)||e.length>20||BigInt(e)>18446744073709551615n)throw new Error(`${t} \u5FC5\u987B\u4E3A uint64 \u5341\u8FDB\u5236\u6574\u6570`);return e}function ze(e,t){let r=dt(e,t);return JSON.rawJSON(r)}he();import{randomUUID as ke,createHash as bn}from"node:crypto";import{chmodSync as nr,existsSync as Se,lstatSync as Be,mkdirSync as ir,readFileSync as kn,renameSync as En,unlinkSync as Ce,writeFileSync as qe}from"node:fs";import{homedir as tr,hostname as Sn}from"node:os";import{dirname as H,join as Ee}from"node:path";import{spawn as vn}from"node:child_process";import{setTimeout as Tn}from"node:timers/promises";var oe=class extends Error{constructor(r,i,n=0,a){super(`Team HTTP ${r}: ${i}${i==="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":""}${n?`\uFF1BRetry-After: ${n} \u79D2`:""}${a!==void 0?`\uFF1Binbox_revision=${a}`:""}`);this.status=r;this.code=i;this.retryAfter=n;this.inboxRevision=a}status;code;retryAfter;inboxRevision};function ce(){let e=process.platform==="win32"?process.env.APPDATA||Ee(tr(),"AppData","Roaming"):process.env.XDG_CONFIG_HOME||Ee(tr(),".config");return Ee(e,"aut","team","connection.json")}function ut(e){if(Se(H(e))&&Be(H(e)).isSymbolicLink())throw new Error("\u62D2\u7EDD\u4F7F\u7528\u7B26\u53F7\u94FE\u63A5 Team \u914D\u7F6E\u76EE\u5F55");if(Se(e)&&(!Be(e).isFile()||Be(e).isSymbolicLink()))throw new Error("\u62D2\u7EDD\u4F7F\u7528\u975E\u666E\u901A Team \u914D\u7F6E\u6587\u4EF6")}function W(e){if(!e||/[\\\s]/.test(e))throw new Error("Team URL \u65E0\u6548");let t=e.match(/^https?:\/\/[^/]+(\/[^?#]*)?/i)?.[1]||"";if(/%(?:2e|2f|5c)/i.test(t)||t.split("/").some(n=>n==="."||n===".."))throw new Error("Team URL \u4E0D\u5141\u8BB8\u8DEF\u5F84\u8DF3\u8F6C");let r;try{r=new URL(e)}catch{throw new Error("Team URL \u65E0\u6548")}if(r.username||r.password||r.search||r.hash)throw new Error("Team URL \u4E0D\u80FD\u5305\u542B\u51ED\u636E\u3001\u67E5\u8BE2\u53C2\u6570\u6216\u7247\u6BB5");let i=["127.0.0.1","localhost","[::1]"].includes(r.hostname);if(r.protocol!=="https:"&&!(r.protocol==="http:"&&i))throw new Error("Team \u8FDE\u63A5\u5FC5\u987B\u4F7F\u7528 HTTPS\uFF1B\u4EC5\u672C\u673A\u5F00\u53D1\u5141\u8BB8 HTTP");return r.origin+r.pathname.replace(/\/+$/,"")}function xn(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 i=e?W(e):"";return{auth_url:W(t||i+"/amb-auth"),platform_url:W(r||i+"/amb-platform")}}function Fe(e,t=!0){if(!e.startsWith("/")||e.startsWith("//")||/[\\\s#]/.test(e))throw new Error("Team 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(i=>i==="."||i===".."))throw new Error("Team API \u8DEF\u5F84\u4E0D\u5141\u8BB8\u8DF3\u8F6C");if(t&&!r.startsWith("/api/v1/"))throw new Error("Team 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("Team \u51ED\u8BC1\u65E0\u6548");return e}function ve(e=ce()){if(ut(e),!!Se(e))try{let t=JSON.parse(kn(e,"utf8"));if(![1,2].includes(t.version)||!t.connection_id||!["password","token","browser"].includes(t.auth)||W(t.auth_url)!==t.auth_url||W(t.platform_url)!==t.platform_url)throw new Error("invalid");if(se(t.token),t.version===1){if(!t.user_id||!t.organization_id||je(t.token)||"account_id"in t)throw new Error("invalid")}else{if(!je(t.token)||!L(t.account_id)||!L(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");K(t)}if(process.platform!=="win32"&&Be(e).mode&63)throw new Error("permissions");return t}catch{throw new Error("Team \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 bn("sha256").update(JSON.stringify(e)||"").digest("hex")}function or(e,t){ut(e),ir(H(e),{recursive:!0,mode:448}),process.platform!=="win32"&&nr(H(e),448);let r=e+".lock";try{qe(r,String(process.pid),{flag:"wx",mode:384})}catch{throw new Error("Team \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{Ce(r)}}function rr(e,t,r=ce()){or(r,()=>{if($e(ve(r))!==$e(t))throw new Error("Team \u5F53\u524D\u8FDE\u63A5\u5DF2\u6539\u53D8\uFF0C\u672A\u8986\u76D6\u65B0\u8FDE\u63A5");let i=r+"."+ke()+".tmp";try{qe(i,JSON.stringify(e,null,2)+`
19
- `,{flag:"wx",mode:384}),En(i,r)}finally{Se(i)&&Ce(i)}})}function lt(e=ce()){let t=ve(e);return{configured:!!t,target_policy:"active-only",edition:"team",cli_version:$,...t?{auth_url:t.auth_url,platform_url:t.platform_url,auth:t.auth,...t.version===1?{user_id:t.user_id,organization_id:t.organization_id}:{identity:"account",account_id:t.account_id,credential_id:t.credential_id,credential_kind:t.credential_kind,scopes:t.scopes,resource_mode:t.resource_mode,track_ids:t.track_ids,permissions_source:"server"},expires_at:t.expires_at}:{}}}function In(e){if(!e||!/^\d+$/.test(e))return 0;let t=Number(e);return Number.isSafeInteger(t)?t:0}async function ae(e,t,r={},i){let n={Accept:r.raw?"application/octet-stream":"application/json"};if(i&&(n.Authorization="Bearer "+se(i)),r.binary!==void 0){if(r.body!==void 0||r.method!=="POST"||t!=="/api/v1/maintenance/backups/import"||r.binary.length>16*1024*1024)throw new Error("\u4E8C\u8FDB\u5236\u4E0A\u4F20\u53EA\u652F\u6301 16 MiB \u4EE5\u5185\u7684\u7EF4\u62A4\u5F52\u6863");n["Content-Type"]="application/zip"}else r.body!==void 0&&(n["Content-Type"]="application/json");if(r.key!==void 0){if(!r.key||r.key.trim()!==r.key||Buffer.byteLength(r.key)>128||/[\r\n]/.test(r.key))throw new Error("\u5E42\u7B49\u952E\u5FC5\u987B\u4E3A 1\u2013128 \u5B57\u8282\u4E14\u6CA1\u6709\u9996\u5C3E\u7A7A\u767D");n["Idempotency-Key"]=r.key}Zt(t,r.body);let a=r.body===void 0?void 0:Wt(r.body),s=Qt(t,r.raw),o=AbortSignal.any([AbortSignal.timeout(3e4),...r.signal?[r.signal]:[]]);o.throwIfAborted();let u;try{u=await fetch(e+Fe(t),{method:r.method||"GET",headers:n,redirect:"manual",signal:o,...r.binary!==void 0?{body:new Uint8Array(r.binary)}:r.body===void 0?{}:{body:a}})}catch{throw r.signal?.aborted?r.signal.reason||new Error("Team \u8BF7\u6C42\u5DF2\u53D6\u6D88"):new Error("Team \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(u.status>=300&&u.status<400)throw await u.body?.cancel(),new Error("Team \u62D2\u7EDD\u8DDF\u968F HTTP \u91CD\u5B9A\u5411\uFF1B\u8BF7\u901A\u8FC7 connect \u660E\u786E\u914D\u7F6E\u6B63\u786E\u5165\u53E3");let _=await Vt(u,u.ok?s:Re),h;if(_.length&&!r.raw||!u.ok)try{h=er(ne(_,"Team JSON \u54CD\u5E94"))}catch{if(u.ok)throw new Error("Team \u8FD4\u56DE\u65E0\u6548 JSON")}if(!u.ok){let l=h?.error,d=typeof l=="string"?l:l?.code,k=String(h?.inbox_revision);throw new oe(u.status,d&&/^[a-z_]{1,64}$/.test(d)?d:"request_failed",In(u.headers.get("retry-after")),d==="revision_not_available"&&/^(?:0|[1-9]\d{0,19})$/.test(k)?k:void 0)}return r.raw?_:h??null}var Me=class{constructor(t=ce()){this.profilePath=t;let r=ve(t);if(!r)throw new Error("\u5C1A\u672A\u8FDE\u63A5 Team\uFF1B\u8FD0\u884C aut connect\uFF08\u4E0D\u4F1A\u8BFB\u53D6\u6216\u8FC1\u79FB\u65E7\u7248\u51ED\u636E\uFF09");this.profile=r}profilePath;profile;assertActive(){if($e(ve(this.profilePath))!==$e(this.profile))throw new Error("Team \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(t,r,i={}){this.assertActive();let n=await ae(t==="auth"?this.profile.auth_url:this.profile.platform_url,r,i,this.profile.token);try{this.assertActive()}catch{throw new Error("Team \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(this.profile.version===2&&t==="auth"&&r==="/api/v1/auth/me"){let a=ct(n,this.profile.token);if(a.account_id!==this.profile.account_id||a.credential_id!==this.profile.credential_id)throw new Error("Auth \u5F53\u524D\u8D26\u53F7\u4E0E\u8FDE\u63A5\u8EAB\u4EFD\u4E0D\u4E00\u81F4")}return n}async disconnect(t=!1){if(this.assertActive(),t){if(this.profile.version===2&&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",this.profile.version===2?"/api/v1/accounts/logout":"/api/v1/auth/logout",{method:"POST"})}return or(this.profilePath,()=>{this.assertActive(),Ce(this.profilePath)}),{disconnected:!0,revoked:t,edition:"team"}}};function Nn(e){let t=process.platform==="darwin"?"open":process.platform==="win32"?"rundll32":"xdg-open",r=process.platform==="win32"?["url.dll,FileProtocolHandler",e]:[e],i=vn(t,r,{stdio:"ignore",detached:!0,shell:!1});i.on("error",()=>{}),i.unref()}function An(e=ce()){let t=Ee(H(e),"device.json");if(ut(t),ir(H(t),{recursive:!0,mode:448}),process.platform!=="win32"&&nr(H(t),448),!Se(t))try{qe(t,JSON.stringify({version:1,device_id:ke()})+`
20
- `,{flag:"wx",mode:384})}catch(i){if(i.code!=="EEXIST")throw i}let r=JSON.parse(C(t,1024,"Team \u8BBE\u5907\u6807\u8BC6"));if(r?.version!==1||typeof r.device_id!="string"||!/^[A-Za-z0-9_-]{16,128}$/.test(r.device_id))throw new Error("Team \u8BBE\u5907\u6807\u8BC6\u65E0\u6548\uFF1B\u8BF7\u68C0\u67E5 device.json\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u66F4\u6362\u8BBE\u5907\u8EAB\u4EFD");return r.device_id}async function sr(e,t=ce()){if(e.name&&e.device)throw new Error("--device \u4E0E\u517C\u5BB9\u9009\u9879 --name \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");let r=e.auth==="browser"&&!e.organization?K({scopes:e.scopes||Le,resource_mode:e.resourceMode||"all_visible",track_ids:e.trackIDs}):void 0;if(!r&&(e.scopes||e.resourceMode||e.trackIDs||e.expiresIn))throw new Error("\u8D26\u53F7\u6388\u6743\u9009\u9879\u4EC5\u7528\u4E8E\u4E0D\u6307\u5B9A --organization \u7684\u6D4F\u89C8\u5668\u8FDE\u63A5");if(r&&e.readonly&&r.scopes.some(h=>!h.endsWith(":read")))throw new Error("--readonly \u4E0D\u80FD\u8BF7\u6C42\u5199\u5165\u6216\u7BA1\u7406\u6743\u9650");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 i=ve(t),n=xn(e.gateway,e.authURL,e.platformURL),a=e.auth==="token"?void 0:An(t),s,o,u,_;if(e.auth==="token")s=se(e.secret);else if(e.auth==="password"){if(!e.email||!e.secret)throw new Error("\u5BC6\u7801\u767B\u5F55\u9700\u8981\u90AE\u7BB1\u548C\u5BC6\u7801\uFF1B\u65E7\u7EC4\u7EC7\u8D26\u53F7\u9700\u6307\u5B9A\u7EC4\u7EC7");let h=await ae(n.auth_url,"/api/v1/auth/login",{method:"POST",signal:e.signal,body:{organization_id:e.organization,email:e.email,password:e.secret,device_id:a}});s=se(h.token),o=h.expires_at}else{let h=await On(n.auth_url,e,a,r);if(s=se(h.token),o=h.expires_at,_=h.grant,r){u=Ee(H(t),"credential-recovery."+ke()+".json");try{qe(u,JSON.stringify({...n,secret:s,expires_at:o})+`
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 h=await ae(n.auth_url,"/api/v1/auth/me",{signal:e.signal},s);if(je(s)){if(e.organization)throw new Error("\u8D26\u53F7\u51ED\u636E\u4E0D\u80FD\u4F5C\u4E3A\u7EC4\u7EC7\u8FDE\u63A5\u4F7F\u7528");let l=ct(h,s);if(r&&(l.credential_kind!=="agent_pat"||!Ue(l,r)||!_||!Number.isFinite(Date.parse(String(_.created_at)))||Date.parse(l.expires_at)-Date.parse(String(_.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(r&&(!_||_.id!==l.credential_id||_.account_id!==l.account_id||_.expires_at!==l.expires_at||!Ue(l,_)||!Ue(_,l)))throw new Error("\u8BBE\u5907\u51ED\u636E\u4E0E\u5F53\u524D\u8D26\u53F7\u8EAB\u4EFD\u4E0D\u4E00\u81F4");rr({version:2,connection_id:ke(),...n,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,...K(l)},i,t)}else{let l=h;if(r||!l?.id||!l.organization_id||e.organization&&l.organization_id!==e.organization)throw new Error("Team \u8FD4\u56DE\u7684\u7EC4\u7EC7\u8EAB\u4EFD\u4E0D\u5339\u914D\uFF0C\u8FDE\u63A5\u672A\u4FDD\u5B58");rr({version:1,connection_id:ke(),...n,auth:e.auth,token:s,user_id:l.id,organization_id:l.organization_id,expires_at:o},i,t)}}catch(h){throw u&&(e.notify?e.notify(`\u8BBE\u5907\u51ED\u636E\u5DF2\u9886\u53D6\uFF1B\u79C1\u6709\u6062\u590D\u6587\u4EF6\uFF1A${u}\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${u}\u3002\u8FDE\u63A5\u672A\u5207\u6362\u3002\u8BF7\u6838\u9A8C\u6216\u64A4\u9500\u8BE5\u6388\u6743\u540E\u5220\u9664\u6B64\u6587\u4EF6\u3002
22
- `)),h}return u&&Ce(u),lt(t)}async function On(e,t,r,i){let n=t.notify||(o=>process.stderr.write(o+`
23
- `)),a=await ae(e,"/api/v1/auth/device/requests",{method:"POST",signal:t.signal,body:{organization_id:t.organization,device_id:r,name:t.device||t.name||Sn(),...i?{...i,expires_in_seconds:t.expiresIn}:{scopes:t.readonly?["read"]:["read","write"]}}});if(!a?.device_code||!/^[A-Z2-9-]{5,24}$/.test(a.user_code)||typeof a.verification_path!="string"||!Number.isFinite(a.expires_in)||a.expires_in<=0)throw new Error("Team \u8BBE\u5907\u6388\u6743\u54CD\u5E94\u65E0\u6548");let s=!1;try{let o=Fe(a.verification_path,!1);if(!/^\/device(?:\?|$)/.test(o))throw new Error("Team \u6388\u6743\u9875\u9762\u8DEF\u5F84\u65E0\u6548");let u=e+o;n(`\u8BF7\u6253\u5F00 ${u}
24
- \u786E\u8BA4\u8BBE\u5907\u7801\uFF1A${a.user_code}`),t.noOpen||Nn(u);let _=AbortSignal.any([AbortSignal.timeout(Math.min(600,a.expires_in)*1e3),...t.signal?[t.signal]:[]]),h=Math.max(1,Math.min(60,a.interval||5));for(;;){await Tn(h*1e3,void 0,{signal:_});try{let l=await ae(e,"/api/v1/auth/device/token",{method:"POST",signal:_,body:{device_code:a.device_code}}),d=se(i?l.secret:l.token);return s=!0,{token:d,expires_at:l.expires_at,grant:i?l:void 0}}catch(l){if(l instanceof oe&&l.code==="authorization_pending")continue;if(l instanceof oe&&l.code==="slow_down"){h=Math.min(60,Math.max(h+5,l.retryAfter));continue}throw l instanceof oe&&l.code==="invalid_grant"?new Error("Team \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 ae(e,"/api/v1/auth/device/cancel",{method:"POST",signal:AbortSignal.timeout(3e3),body:{device_code:a.device_code}}).catch(()=>{})}}async function de(e,t){let r=t==="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 o of process.stdin)if(s+=o.toString(),Buffer.byteLength(s)>r+2)throw new Error("\u51ED\u636E\u8FC7\u957F");return s.replace(/\r?\n$/,"")}let i=process.stdin,n=process.stderr;if(!i.isTTY||!n.isTTY)throw new Error(`\u975E\u4EA4\u4E92\u8F93\u5165\u8BF7\u4F7F\u7528 --${t==="Password"?"password":"token"}-stdin`);let a=i.isRaw;return n.write(`${t}\uFF08\u9690\u85CF\u8F93\u5165\uFF09\uFF1A`),i.setRawMode(!0),i.resume(),new Promise((s,o)=>{let u="",_=!1,h=b=>{_||(_=!0,i.off("data",k),i.off("end",l),i.off("error",d),i.setRawMode(a),i.pause(),n.write(`
25
- `),b?o(b):s(u))},l=()=>h(new Error("\u51ED\u636E\u8F93\u5165\u5DF2\u7ED3\u675F")),d=()=>h(new Error("\u51ED\u636E\u8F93\u5165\u5931\u8D25")),k=b=>{for(let g of b.toString()){if(g===""||g==="")return h(new Error("\u5DF2\u53D6\u6D88\u767B\u5F55"));if(g==="\r"||g===`
26
- `)return h();if(g==="\x7F"||g==="\b"?u=[...u].slice(0,-1).join(""):g>=" "&&(u+=g),Buffer.byteLength(u)>r)return h(new Error("\u51ED\u636E\u8FC7\u957F"))}};i.on("data",k),i.once("end",l),i.once("error",d)})}var Dn=["account_recovery","moderation_appeal","delivery_dispute","billing","technical"];function ar(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 cr(e,t,r,i){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 n=g=>typeof r[g]=="string"?r[g]:void 0,a=g=>{let f=n(g);if(!f)throw new Error("\u7F3A\u5C11 --"+g);return f},s=(...g)=>{if(Object.keys(r).some(f=>!["help","json",...g].includes(f)))throw new Error("support \u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},o=g=>{if(t.length!==g)throw new Error("support \u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},u=()=>{if(!L(t[1]))throw new Error("\u5DE5\u5355 ID \u65E0\u6548");return"support/tickets/"+encodeURIComponent(t[1])},_=()=>{let g=a("expect-revision");if(g==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return ze(g,"--expect-revision")},h=()=>{let g=a("key");if(Buffer.byteLength(g)>128||g.trim()!==g||/[\0\r\n\t]/.test(g))throw new Error("--key \u5FC5\u987B\u662F\u6700\u591A 128 \u5B57\u8282\u7684\u7A33\u5B9A\u5E42\u7B49\u952E");return g},l=g=>ar(C(g,8192,"\u5DE5\u5355\u8BF4\u660E","support_text_too_large"),"\u5DE5\u5355\u8BF4\u660E"),d=g=>console.log(JSON.stringify(g,null,2)),k=(g,f="GET",w,S)=>e.request("platform","/api/v1/"+g,{method:f,body:w,key:S,signal:i}),b=t[0];if(b==="ls"||b==="messages"){o(b==="ls"?1:2),s("cursor","limit");let g=b==="ls"?"support/tickets":u()+"/messages",f=new URLSearchParams;if(n("cursor")){if(!L(n("cursor")))throw new Error("\u5DE5\u5355 cursor \u65E0\u6548");f.set("cursor",n("cursor"))}if(n("limit")){let w=n("limit");if(!/^\d+$/.test(w)||Number(w)<1||Number(w)>50)throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");f.set("limit",w)}d(await k(g+(f.size?"?"+f.toString():"")))}else if(b==="get")o(2),s(),d(await k(u()));else if(b==="create"){o(2),s("key");let g=h(),f=JSON.parse(C(t[1],64*1024,"\u5DE5\u5355 JSON","support_request_too_large"));if(!f||typeof f!="object"||Array.isArray(f))throw new Error("\u5DE5\u5355 JSON \u5FC5\u987B\u662F\u5BF9\u8C61");let w=f;if(Object.keys(w).some(S=>!["kind","subject_id","reason","draft"].includes(S))||!Dn.includes(String(w.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(ar(w.reason,"reason"),"draft"in w&&typeof w.draft!="boolean")throw new Error("draft \u5FC5\u987B\u662F\u5E03\u5C14\u503C");if(w.kind==="delivery_dispute"?!L(w.subject_id):"subject_id"in w&&w.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");d(await k("support/tickets","POST",w,g))}else if(["submit","reopen","message"].includes(b)){o(b==="submit"?2:3),s("key","expect-revision");let g=u()+"/"+(b==="message"?"messages":b),f=_(),w=h(),S={expected_revision:f,...b==="submit"?{}:b==="message"?{body_text:l(t[2])}:{reason:l(t[2])}};d(await k(g,"POST",S,w))}else throw new Error("\u672A\u77E5 support \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help")}var Pn=["security","transaction","collaboration","track","system"];function ft(e,t){let r=typeof e.scopes=="string"?e.scopes.split(","):t;if(!r)throw new Error("\u7F3A\u5C11 --scopes");let i=e["resource-mode"];if(i!=="all_visible"&&i!=="selected_tracks")throw new Error("--resource-mode \u5FC5\u987B\u4E3A all_visible \u6216 selected_tracks");return K({scopes:r,resource_mode:i,track_ids:typeof e["track-ids"]=="string"?e["track-ids"].split(","):void 0})}async function dr(e,t,r,i,n){if(t==="support")return await cr(e,r,i,n),!0;if(!["notifications","reauth","party"].includes(t)&&!(t==="token"&&e.profile.version===2))return!1;if(e.profile.version!==2)throw new Error("\u6B64\u547D\u4EE4\u9700\u8981\u8D26\u53F7\u8FDE\u63A5\uFF1B\u8BF7\u663E\u5F0F connect\uFF0C\u7EC4\u7EC7\u8FDE\u63A5\u4E0D\u4F1A\u8F6C\u6362\u4E3A\u8D26\u53F7\u6743\u9650");let a=w=>typeof i[w]=="string"?i[w]:void 0,s=w=>{let S=a(w);if(!S)throw new Error("\u7F3A\u5C11 --"+w);return S},o=(...w)=>{if(Object.keys(i).some(S=>!["help","json",...w].includes(S)))throw new Error("\u6B64\u8D26\u53F7\u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879")},u=w=>{if(r.length!==w)throw new Error("\u8D26\u53F7\u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},_=()=>{let w=s("expect-revision");if(w==="0")throw new Error("--expect-revision \u5FC5\u987B\u5927\u4E8E 0");return ze(w,"--expect-revision")},h=()=>{let w=a("limit");if(w!==void 0&&(!/^\d+$/.test(w)||Number(w)<1||Number(w)>50))throw new Error("--limit \u5FC5\u987B\u4E3A 1\u201350");return w},l=()=>{let w=s("category");if(!Pn.includes(w))throw new Error("--category \u4E0D\u652F\u6301\u8BE5\u5206\u7C7B");return w},d=(w,S="GET",c,p)=>e.request(["notifications","party"].includes(t)?"platform":"auth","/api/v1/"+w,{method:S,body:c,key:p,signal:n}),k=w=>console.log(JSON.stringify(w,null,2)),b=()=>{if(!L(r[1]))throw new Error("\u8D26\u53F7\u5BF9\u8C61 ID \u65E0\u6548");return encodeURIComponent(r[1])},g=(w,S)=>w+(S.size?"?"+S.toString():"");if(t==="reauth"){if(u(0),o("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 k(await d("auth/reauthentication","POST",{purpose:"credential_management",password:await de(!!i["password-stdin"],"Password")})),!0}let f=r[0];if(t==="party"){if(f==="ls")u(1),o(),k(await d("parties"));else if(f==="get")u(2),o(),k(await d("parties/"+b()));else if(f==="delegations"){u(2),o("cursor","limit");let w=new URLSearchParams;a("cursor")&&w.set("cursor",a("cursor")),h()&&w.set("limit",h()),k(await d(g("parties/"+b()+"/delegations",w)))}else if(f==="delegate"){u(3),o("key","expect-revision");let w="parties/"+b()+"/delegations",S=s("key"),c=_(),p=JSON.parse(C(r[2],re,"\u59D4\u6258 JSON \u6587\u4EF6","request_too_large"));if(!p||typeof p!="object"||Array.isArray(p))throw new Error("\u59D4\u6258 JSON \u5FC5\u987B\u4E3A\u5BF9\u8C61");let m=p;if(Object.keys(m).some(y=>!["account_id","capabilities","track_ids","expires_at"].includes(y))||!L(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(y=>y!=="publish"&&y!=="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(y=>!L(y))||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");k(await d(w,"POST",{...m,expected_revision:c},S))}else if(f==="revoke")u(2),o("key","expect-revision"),k(await d("party-delegations/"+b(),"DELETE",{expected_revision:_()},s("key")));else throw new Error("\u672A\u77E5 party \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help");return!0}if(t==="token"){if(f==="ls"){u(1),o("cursor","limit","include-inactive");let w=new URLSearchParams;a("cursor")&&w.set("cursor",a("cursor")),h()&&w.set("limit",h()),i["include-inactive"]&&w.set("include_inactive","true"),k(await d(g("auth/tokens",w)))}else if(f==="new"){u(1),o("name","scopes","resource-mode","track-ids","expires-in","replace-token-id","expect-revision","key");let w=s("name"),S=s("key"),c=ft(i),p=a("expires-in");if(p!==void 0&&(!/^\d+$/.test(p)||Number(p)<1||Number(p)>90*86400))throw new Error("--expires-in \u5FC5\u987B\u4E3A 1\u20137776000 \u79D2");let m=a("replace-token-id");if(!!m!=!!a("expect-revision")||m&&!L(m))throw new Error("\u66FF\u6362\u9700\u540C\u65F6\u6307\u5B9A --replace-token-id \u4E0E --expect-revision");let y=m?_():void 0;k(await d("auth/tokens","POST",{name:w,...c,...p?{expires_in_seconds:Number(p)}:{},...m?{replace_token_id:m,expected_revision:y}:{}},S))}else if(f==="revoke")u(2),o("key","expect-revision"),k(await d("auth/tokens/"+b(),"DELETE",{expected_revision:_()},s("key")));else throw new Error("\u672A\u77E5 token \u547D\u4EE4");return!0}if(f==="ls"||f==="count"){u(1),o("category","min-revision","fresh",...f==="ls"?["cursor","limit","unread-only"]:[]);let w=new URLSearchParams;a("category")&&w.set("category",l()),a("min-revision")!==void 0&&w.set("min_revision",dt(a("min-revision"),"--min-revision")),i.fresh&&w.set("fresh","true"),f==="ls"&&(a("cursor")&&w.set("cursor",a("cursor")),h()&&w.set("limit",h()),i["unread-only"]&&w.set("unread_only","true")),k(await d(g(f==="ls"?"notifications":"notifications/unread-count",w)))}else if(f==="read")u(2),o(),k(await d("notifications/"+b()+"/read","POST"));else if(f==="read-through")u(1),o("seen-cursor"),k(await d("notifications/read-through","POST",{seen_cursor:s("seen-cursor")}));else if(f==="preferences")u(1),o(),k(await d("notification-preferences"));else if(f==="preference"){u(1),o("category","email-enabled","sms-enabled","expect-revision","key");let w={category:l(),expected_revision:_()};if(a("email-enabled")===void 0||a("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 S of["email-enabled","sms-enabled"])if(a(S)!==void 0){if(!["true","false"].includes(a(S)))throw new Error("--"+S+" \u5FC5\u987B\u4E3A true \u6216 false");w[S.replace("-","_")]=a(S)==="true"}k(await d("notification-preferences","PUT",w,s("key")))}else throw new Error("\u672A\u77E5 notifications \u547D\u4EE4");return!0}import{createHash as mt,randomUUID as Rn}from"node:crypto";import{constants as lr,lstatSync as fr,readFileSync as Ln,renameSync as jn,writeFileSync as pr,unlinkSync as mr}from"node:fs";import{open as wr,link as Un,unlink as zn}from"node:fs/promises";import{resolve as pt}from"node:path";import{setTimeout as wt}from"node:timers/promises";var X=class extends Error{};async function ur(e,t,r,i,n,a=fetch){e.assertActive(),n?.throwIfAborted();let s=await e.request("platform",t,{signal:n});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 o=Date.parse(s.expires_at);if(!Number.isFinite(o)||o<=Date.now()||o>Date.now()+3e5)throw new Error("\u4E0B\u8F7D\u8BB8\u53EF\u5DF2\u8FC7\u671F\u6216\u6709\u6548\u671F\u65E0\u6548");let u;try{u=new URL(s.download_url)}catch{throw new Error("\u670D\u52A1\u7AEF\u4E0B\u8F7D\u5730\u5740\u65E0\u6548")}let _=[...u.searchParams.keys()],h=[e.profile.auth_url,e.profile.platform_url].map(d=>new URL(d).hostname);if(u.protocol!=="https:"||u.username||u.password||u.port||u.hash||h.includes(u.hostname)||!u.pathname.includes("/released/")||/[%\\]/.test(u.pathname)||s.download_url!==u.href||_.length!==2||u.searchParams.getAll("token").length!==1||!u.searchParams.get("token")||u.searchParams.get("token").length>8192||u.searchParams.getAll("delivery_id").length!==1||u.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(i)||i<0||i>=r.size_bytes)throw new Error("\u4E0B\u8F7D\u7EED\u4F20\u4F4D\u7F6E\u65E0\u6548");e.assertActive(),n?.throwIfAborted();let l;try{l=await a(u,{method:"GET",headers:i?{Range:"bytes="+i+"-"}:{},redirect:"error",credentials:"omit",referrerPolicy:"no-referrer",signal:AbortSignal.any([...n?[n]:[],AbortSignal.timeout(6e5)])})}catch{throw n?.throwIfAborted(),new X("CDN \u8FDE\u63A5\u4E2D\u65AD\uFF1B\u6B63\u5728\u91CD\u65B0\u6821\u9A8C\u4E0B\u8F7D\u6743\u9650")}try{if(e.assertActive(),n?.throwIfAborted(),[403,408,429,500,502,503,504].includes(l.status))throw new X("CDN \u4E0B\u8F7D\u6682\u4E0D\u53EF\u7528\uFF08HTTP "+l.status+"\uFF09");let d=l.headers.get("content-range");if(l.status!==(i?206:200)||!l.body||l.headers.get("content-length")!==String(r.size_bytes-i)||(l.headers.get("content-encoding")||"identity")!=="identity"||(i?d!=="bytes "+i+"-"+(r.size_bytes-1)+"/"+r.size_bytes:d!==null))throw new Error("CDN \u54CD\u5E94\u72B6\u6001\u3001\u957F\u5EA6\u6216 Range \u4E0D\u7B26\u5408\u4E0B\u8F7D\u8BB8\u53EF");return l}catch(d){throw await l.body?.cancel().catch(()=>{}),d}}var gr=200*1024*1024,Te=8*1024*1024,V=e=>/^[A-Za-z0-9_-]{1,64}$/.test(e),Bn=e=>mt("sha256").update(e).digest("hex");function hr(e){let t;try{t=fr(e)}catch(i){if(i.code==="ENOENT")return;throw i}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(Ln(e,"utf8"));if(r.version!==1||!V(r.upload_id)||!Array.isArray(r.parts)||r.parts.length>25||r.parts.some((i,n)=>i.part_number!==n+1||typeof i.etag!="string"||i.etag.length>128))throw new Error("\u4E0A\u4F20\u8FDB\u5EA6\u6587\u4EF6\u65E0\u6548");return r}function Je(e,t){hr(e);let r=e+"."+process.pid+".tmp";try{pr(r,JSON.stringify(t,null,2)+`
27
- `,{flag:"wx",mode:384}),jn(r,e)}finally{try{mr(r)}catch(i){if(i.code!=="ENOENT")throw i}}}function yr(e,t){if(!Number.isSafeInteger(e)||e<1e3||e>864e5||!Number.isSafeInteger(t)||t<1e3||t>6e4)throw new Error("\u8F6E\u8BE2 timeout \u4E3A 1\u201386400 \u79D2\uFF0Cinterval \u4E3A 1\u201360 \u79D2")}async function gt(e,t,r){if(!V(t))throw new Error("operation \u5FC5\u987B\u662F\u4E0D\u900F\u660E ID");yr(r.timeoutMS,r.intervalMS);let i=Date.now()+r.timeoutMS;for(;;){r.signal?.throwIfAborted();let n=await e.request("platform","/api/v1/operations/"+t,{signal:r.signal});if(n.id!==t)throw new Error("operation \u54CD\u5E94 ID \u4E0D\u5339\u914D");if(["succeeded","failed","cancelled","suspended","unknown"].includes(n.status))return n;if(!["pending","running","waiting","retry_pending"].includes(n.status))throw new Error("operation \u54CD\u5E94\u72B6\u6001\u65E0\u6548");if(Date.now()>=i)return{...n,status:"timeout"};await wt(Math.min(r.intervalMS,i-Date.now()),void 0,{signal:r.signal})}}async function $n(e,t,r,i=fetch){let n=new URL(e.url);if(n.protocol!=="https:"||n.username||n.password||n.hash||e.method!=="PUT"||e.size_bytes!==t.length)throw new Error("\u670D\u52A1\u7AEF\u8FD4\u56DE\u7684\u5206\u7247\u4E0A\u4F20\u76EE\u6807\u65E0\u6548");let a=e.required_headers??e.headers;if(!a||typeof a!="object")throw new Error("\u5206\u7247\u4E0A\u4F20\u7F3A\u5C11 required_headers");for(let o of Object.keys(a))if(!/^(content-length|content-type|content-md5|x-oss-[a-z0-9-]+)$/i.test(o))throw new Error("\u5206\u7247\u4E0A\u4F20\u5305\u542B\u4E0D\u5141\u8BB8\u7684\u8BF7\u6C42\u5934");let s;try{s=await i(n,{method:"PUT",body:new Uint8Array(t),headers:a,redirect:"error",credentials:"omit",signal:AbortSignal.any([...r?[r]:[],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 o=s.headers.get("etag");if(!o||o.length>128||/[\r\n]/.test(o))throw new Error("OSS \u54CD\u5E94\u7F3A\u5C11\u6709\u6548 ETag\uFF1B\u5DF2\u4FDD\u7559\u8FDB\u5EA6");return o}finally{await s.body?.cancel()}}async function _r(e,t,r){if(yr(r.timeoutMS,r.intervalMS),!V(r.party)||!V(r.subject)||!/^[a-z_]{1,32}$/.test(r.purpose)||!/^[a-z_]{1,32}$/.test(r.subjectType)||!r.key||r.key.length>128)throw new Error("\u4E0A\u4F20\u76EE\u7684\u3001\u4E3B\u4F53\u6216\u5E42\u7B49\u952E\u65E0\u6548");let i=pt(t),n=pt(r.state);if(i===n)throw new Error("\u8FDB\u5EA6\u6587\u4EF6\u4E0D\u80FD\u8986\u76D6\u4E0A\u4F20\u539F\u4EF6");let a=await wr(i,lr.O_RDONLY|(lr.O_NOFOLLOW||0)),s=n+".lock",o=!1;try{let u=await a.stat();if(!u.isFile()||u.size<=0||u.size>gr)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5FC5\u987B\u662F 1 \u5B57\u8282\u5230 200 MiB \u7684\u666E\u901A\u6587\u4EF6");let _=Buffer.allocUnsafe(Math.min(Te,u.size)),h=mt("sha256");for(let w=0;w<u.size;){r.signal?.throwIfAborted();let{bytesRead:S}=await a.read(_,0,Math.min(_.length,u.size-w),w);if(!S)throw new Error("\u8BA1\u7B97\u54C8\u5E0C\u65F6\u6587\u4EF6\u957F\u5EA6\u53D1\u751F\u53D8\u5316");h.update(_.subarray(0,S)),w+=S}let l=h.digest("hex"),d={owner_party_id:r.party,purpose:r.purpose,subject_type:r.subjectType,subject_id:r.subject,request_key:r.key,media_type:r.mediaType,size_bytes:u.size,sha256:l},k=Bn(JSON.stringify(d));try{pr(s,String(process.pid),{flag:"wx",mode:384}),o=!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 b=hr(n);if(b&&(b.connection_id!==e.profile.connection_id||b.command_hash!==k||b.file!==i||b.sha256!==l||b.size_bytes!==u.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(!b){let w=await e.request("platform","/api/v1/files/uploads",{method:"POST",body:d,signal:r.signal});if(!V(w.id))throw new Error("\u521B\u5EFA\u4E0A\u4F20\u8FD4\u56DE\u65E0\u6548 ID");b={version:1,connection_id:e.profile.connection_id,file:i,sha256:l,size_bytes:u.size,command_hash:k,upload_id:w.id,parts:[]},Je(n,b)}let g=Date.now()+r.timeoutMS,f;for(;;){if(f=await e.request("platform","/api/v1/files/uploads/"+b.upload_id,{signal:r.signal}),f.id!==b.upload_id)throw new Error("\u4E0A\u4F20\u54CD\u5E94 ID \u4E0D\u5339\u914D");if(f.upload_status!=="initializing")break;if(Date.now()>=g)return{status:"timeout",upload_id:b.upload_id,state_file:n};await wt(Math.min(r.intervalMS,g-Date.now()),void 0,{signal:r.signal})}if(f.upload_status==="awaiting_upload"){let w=Math.ceil(u.size/Te);for(let p=b.parts.length+1;p<=w;p++){e.assertActive(),r.signal?.throwIfAborted();let m=await a.stat();if(m.size!==u.size||m.mtimeMs!==u.mtimeMs||m.ino!==u.ino)throw new Error("\u539F\u6587\u4EF6\u5DF2\u6539\u53D8\uFF1B\u505C\u6B62\u4E0A\u4F20\uFF0C\u4E0D\u63D0\u4EA4\u5B8C\u6210\u6E05\u5355");let y=Math.min(Te,u.size-(p-1)*Te),T=0;for(;T<y;){let{bytesRead:N}=await a.read(_,T,y-T,(p-1)*Te+T);if(!N)throw new Error("\u4E0A\u4F20\u671F\u95F4\u6587\u4EF6\u957F\u5EA6\u53D1\u751F\u53D8\u5316");T+=N}let v=await e.request("platform","/api/v1/files/uploads/"+b.upload_id+"/part-urls",{method:"POST",body:{part_numbers:[p]},signal:r.signal});if(!Array.isArray(v.parts)||v.parts.length!==1||v.parts[0].part_number!==p)throw new Error("\u670D\u52A1\u7AEF\u5206\u7247\u7F16\u53F7\u4E0D\u5339\u914D");let O=await $n(v.parts[0],_.subarray(0,y),r.signal);e.assertActive(),b.parts.push({part_number:p,etag:O}),Je(n,b)}let S=await a.stat();if(S.size!==u.size||S.mtimeMs!==u.mtimeMs)throw new Error("\u539F\u6587\u4EF6\u5728\u4E0A\u4F20\u671F\u95F4\u6539\u53D8\uFF1B\u672A\u63D0\u4EA4\u5B8C\u6210\u6E05\u5355");let c=await e.request("platform","/api/v1/files/uploads/"+b.upload_id+"/complete",{method:"POST",body:{parts:b.parts},signal:r.signal});if(!c.operation||!V(c.operation.id))throw new Error("\u5B8C\u6210\u63A5\u53E3\u672A\u8FD4\u56DE\u6709\u6548 operation");b.operation_id=c.operation.id,Je(n,b)}else if(f.operation_id)b.operation_id=f.operation_id,Je(n,b);else return{...f,status:f.upload_status,state_file:n};return r.wait&&b.operation_id?await gt(e,b.operation_id,r):{status:"accepted",upload_id:b.upload_id,operation_id:b.operation_id,state_file:n}}finally{await a.close(),o&&mr(s)}}async function br(e,t,r,i){if(!V(t)||!r)throw new Error("\u4E0B\u8F7D\u9700\u8981\u6587\u4EF6 ID \u548C --output \u8DEF\u5F84");let n=await e.request("platform","/api/v1/file-bundles/"+t,{signal:i});if(n.id!==t||n.file_status!=="available"||!Number.isSafeInteger(n.size_bytes)||n.size_bytes<=0||n.size_bytes>gr||!/^[a-f0-9]{64}$/.test(n.sha256))throw new Error("\u6587\u4EF6\u672A\u5C31\u7EEA\u6216\u670D\u52A1\u7AEF\u6587\u4EF6\u5143\u6570\u636E\u65E0\u6548");let a=pt(r),s=a+"."+Rn()+".part";try{throw fr(a),new Error("\u4E0B\u8F7D\u76EE\u6807\u5DF2\u5B58\u5728\uFF1B\u8BF7\u9009\u62E9\u65B0\u8DEF\u5F84")}catch(h){if(h.code!=="ENOENT")throw h}let o=await wr(s,"wx",384),u,_=0;try{let h=mt("sha256");for(let l=0;_<n.size_bytes;l++)try{u=await ur(e,"/api/v1/file-bundles/"+t+"/download",n,_,i);let d=u.body.getReader();try{for(;;){i?.throwIfAborted(),e.assertActive();let k;try{k=await d.read()}catch{throw i?.throwIfAborted(),new X("CDN \u6587\u4EF6\u6D41\u4E2D\u65AD")}if(k.done)break;let b=k.value;if(_+b.byteLength>n.size_bytes)throw new Error("\u4E0B\u8F7D\u8D85\u8FC7\u58F0\u660E\u5927\u5C0F");let g=0;for(;g<b.byteLength;){let f=await o.write(b,g,b.byteLength-g);if(!f.bytesWritten)throw new Error("\u65E0\u6CD5\u5199\u5165\u4E0B\u8F7D\u6587\u4EF6");g+=f.bytesWritten}h.update(b),_+=b.byteLength}}finally{await d.cancel().catch(()=>{}),d.releaseLock()}if(_!==n.size_bytes)throw new X("\u4E0B\u8F7D\u4E0D\u5B8C\u6574")}catch(d){if(!(d instanceof X)||l>=2)throw d;e.assertActive(),i?.throwIfAborted(),await wt(250*(l+1),void 0,{signal:i})}if(_!==n.size_bytes||h.digest("hex")!==n.sha256)throw new Error("\u4E0B\u8F7D\u4E0D\u5B8C\u6574\u6216 SHA256 \u6821\u9A8C\u5931\u8D25");return e.assertActive(),i?.throwIfAborted(),await o.sync(),await o.close(),await Un(s,a),{id:t,status:"downloaded",output:a,size_bytes:_,sha256:n.sha256}}finally{await u?.body?.cancel().catch(()=>{}),await o.close(),await zn(s)}}he();import{parseArgs as Zn}from"node:util";import{writeFileSync as jr}from"node:fs";import{resolve as Ur}from"node:path";import{setTimeout as Mn}from"node:timers/promises";var ht=["context","progress","decision","blocker","summary","handoff","checkpoint"];function yt(e,t){let r=e;if(!r||!Array.isArray(r.items)||r.after_seq!==t||!Number.isSafeInteger(r.next_seq)||!Number.isSafeInteger(r.last_seq)||r.next_seq<t||r.last_seq<r.next_seq||typeof r.has_more!="boolean")throw new Error("Team \u8FD4\u56DE\u65E0\u6548 Entry \u6E38\u6807");let i=t;for(let n of r.items){if(!n||typeof n.id!="string"||!Number.isSafeInteger(n.seq)||n.seq<=i||n.seq>r.next_seq||typeof n.type!="string")throw new Error("Team \u8FD4\u56DE\u65E0\u6548 Entry \u987A\u5E8F");i=n.seq}if(r.has_more&&r.next_seq<=t)throw new Error("Team Entry \u5206\u9875\u6CA1\u6709\u63A8\u8FDB\u6E38\u6807");if(r.next_seq!==i)throw new Error("Team Entry \u6E38\u6807\u8DF3\u8FC7\u4E86\u672A\u8FD4\u56DE\u7684\u5185\u5BB9");return r}async function kr(e,t,r){if(r.type&&!ht.includes(r.type))throw new Error("\u4E0D\u652F\u6301\u7684 Entry \u7C7B\u578B");let i=r.limit??50;if(!Number.isSafeInteger(i)||i<1||i>200)throw new Error("--limit \u5FC5\u987B\u4E3A 1\u2013200 \u7684\u6574\u6570");let n=ie(r.maxBytes),a=AbortSignal.timeout(r.timeoutMS),s=AbortSignal.any([a,...r.signal?[r.signal]:[]]),o=r.after;try{for(;;){s.throwIfAborted();let u=yt(await e.request("platform",`/api/v1/tracks/${encodeURIComponent(t)}/entries?after_seq=${o}&limit=${i}&max_bytes=${n}`,{signal:s}),o),_=u.items.filter(h=>!h.redacted_at&&(!r.type||h.type===r.type));if(o=u.next_seq,_.length)return{status:"matched",track_id:t,after_seq:r.after,next_seq:o,last_seq:u.last_seq,items:_};u.has_more||await Mn(r.intervalMS,void 0,{signal:s})}}catch(u){if(r.signal?.aborted)return{status:"cancelled",track_id:t,next_seq:o,items:[]};if(a.aborted)return{status:"timeout",track_id:t,next_seq:o,items:[]};throw u}}Et();import{createHash as Jn,randomUUID as Ir}from"node:crypto";import{existsSync as Nr,mkdirSync as Kn,openSync as Gn,closeSync as Yn,renameSync as Hn,unlinkSync as Ar,writeFileSync as Or}from"node:fs";import{dirname as St,join as xe,resolve as Ye}from"node:path";var Ie=16*1024*1024,Dr=8*1024*1024,vt=1e4,Ne=e=>Jn("sha256").update(e).digest("hex"),ue=e=>typeof e=="string"&&/^[A-Za-z0-9_-]{1,200}$/.test(e);function Tt(e,t){return st(e,t,t===Ie?"ZIP \u5F52\u6863":"manifest/\u6062\u590D\u8FDB\u5EA6",t===Ie?"archive_too_large":"request_too_large")}function xt(e){let t=Tt(Ye(e),Ie);if(t.length<4||t[0]!==80||t[1]!==75)throw new Error("\u5BFC\u5165\u6587\u4EF6\u5FC5\u987B\u662F ZIP \u5F52\u6863");return t}function le(e,t){let r=e+"."+Ir()+".tmp";try{Or(r,JSON.stringify(t,null,2)+`
28
- `,{flag:"wx",mode:384}),Hn(r,e)}finally{Nr(r)&&Ar(r)}}async function Pr(e,t,r){let i=await e.request("platform","/api/v1/maintenance/backups/import",{method:"POST",binary:xt(t),signal:r});if(!ue(i?.backup_id))throw new Error("\u5F52\u6863\u53EF\u80FD\u5DF2\u5BFC\u5165\uFF0C\u4F46\u8FD4\u56DE\u7684 backup_id \u65E0\u6548\uFF1B\u672A\u7EE7\u7EED\u6062\u590D");return i}async function Rr(e,t,r,i){let n=Ye(t);Kn(n,{mode:448});let a=xe(n,"manifest.json"),s={version:1,kind:"amb-team-backup",complete:!1,chunks:[]};le(a,s);let o="",u=new Set;for(let _=0;_<vt+1;_++){i?.throwIfAborted();let h=await e.request("platform","/api/v1/maintenance/backup",{method:"POST",body:{...r?{object_type:r}:{},...o?{cursor:o}:{}},signal:i});if(!h||typeof h.has_more!="boolean")throw new Error("\u5907\u4EFD\u5206\u9875\u54CD\u5E94\u65E0\u6548\uFF0C\u76EE\u5F55\u4FDD\u7559\u4E3A\u672A\u5B8C\u6210");if(h.backup_id!==void 0){if(s.chunks.length>=vt)throw new Error("\u5355\u6B21\u5907\u4EFD\u6700\u591A 10000 \u6BB5\uFF1B\u8BF7\u6309\u5BF9\u8C61\u7C7B\u578B\u5206\u6279\u5907\u4EFD");if(!ue(h.backup_id)||!Number.isSafeInteger(h.content_size)||h.content_size<1||h.content_size>Ie||!/^[a-f0-9]{64}$/.test(h.content_sha256||""))throw new Error("\u5907\u4EFD\u6587\u4EF6\u5143\u4FE1\u606F\u65E0\u6548\uFF0C\u672A\u4E0B\u8F7D");let l=await e.request("platform","/api/v1/maintenance/backups/"+h.backup_id+"/archive",{raw:!0,signal:i});if(l.length!==h.content_size||Ne(l)!==h.content_sha256)throw new Error("\u4E0B\u8F7D\u5F52\u6863\u6821\u9A8C\u5931\u8D25\uFF0C\u672A\u4FDD\u5B58");let d="chunk-"+String(s.chunks.length+1).padStart(6,"0")+".zip";Or(xe(n,d),l,{flag:"wx",mode:384}),s.chunks.push({file:d,size:l.length,sha256:Ne(l)}),le(a,s)}if(!h.has_more)return s.complete=!0,le(a,s),{manifest:a,chunks:s.chunks.length,complete:!0};if(typeof h.next_cursor!="string"||!h.next_cursor||h.next_cursor.length>2048||u.has(h.next_cursor))throw new Error("\u5907\u4EFD\u6E38\u6807\u65E0\u6548\u6216\u91CD\u590D\uFF0C\u5DF2\u505C\u6B62\uFF1B\u76EE\u5F55\u4FDD\u7559\u4E3A\u672A\u5B8C\u6210");u.add(h.next_cursor),o=h.next_cursor}throw new Error("\u5907\u4EFD\u5206\u6BB5\u8FC7\u591A\uFF0C\u76EE\u5F55\u4FDD\u7559\u4E3A\u672A\u5B8C\u6210")}function Xn(e){let t=Tt(e,Dr),r=JSON.parse(ne(t,"manifest"));if(r?.version!==1||r.kind!=="amb-team-backup"||r.complete!==!0||!Array.isArray(r.chunks)||r.chunks.length>vt)throw new Error("\u5907\u4EFD manifest \u65E0\u6548\u6216\u5C1A\u672A\u5B8C\u6210");let i=new Set;for(let n of r.chunks){if(!n||!/^chunk-\d{6}\.zip$/.test(n.file)||i.has(n.file)||!Number.isSafeInteger(n.size)||n.size<1||n.size>Ie||!/^[a-f0-9]{64}$/.test(n.sha256))throw new Error("\u5907\u4EFD manifest \u5305\u542B\u65E0\u6548\u6587\u4EF6\u540D\u6216\u6821\u9A8C\u503C");i.add(n.file);let a=xt(xe(St(e),n.file));if(a.length!==n.size||Ne(a)!==n.sha256)throw new Error("\u672C\u5730\u5F52\u6863\u6821\u9A8C\u5931\u8D25\uFF1B\u672A\u5411\u670D\u52A1\u5668\u63D0\u4EA4\u6062\u590D")}return{manifest:r,hash:Ne(t)}}async function Lr(e,t,r,i){if(e.profile.version!==1)throw new Error("\u8D26\u53F7\u7EA7\u6279\u91CF\u6062\u590D\u5C1A\u672A\u63A5\u5165");let n=Ye(t),{manifest:a,hash:s}=Xn(n),o=r?Ye(r):n+".restore.json";if(o===n||a.chunks.some(d=>xe(St(n),d.file)===o))throw new Error("\u6062\u590D\u8FDB\u5EA6\u4E0D\u80FD\u8986\u76D6\u5907\u4EFD\u6587\u4EF6");let u=await e.request("auth","/api/v1/auth/me",{signal:i});if(u?.id!==e.profile.user_id||u.organization_id!==e.profile.organization_id||!Number.isSafeInteger(u.authorization_epoch)||u.authorization_epoch<1)throw new Error("\u6062\u590D\u8EAB\u4EFD\u4E0E\u5F53\u524D\u8FDE\u63A5\u76EE\u6807\u4E0D\u5339\u914D\u6216\u8D26\u53F7\u4EE3\u6B21\u65E0\u6548");let _=JSON.stringify([e.profile.auth_url,e.profile.platform_url,u.organization_id,u.id,u.authorization_epoch]),h=o+".lock",l;try{l=Gn(h,"wx",384)}catch{throw new Error("\u6062\u590D\u8FDB\u5EA6\u6B63\u5728\u4F7F\u7528\uFF1B\u82E5\u4E0A\u6B21\u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF0C\u8BF7\u6838\u5B9E\u540E\u79FB\u9664 .lock \u6587\u4EF6")}try{let d;if(Nr(o)){if(d=JSON.parse(ne(Tt(o,Dr),"\u6062\u590D\u8FDB\u5EA6")),d?.version!==1||d.manifest_sha256!==s||d.target!==_||!ue(d.session_id)||!Array.isArray(d.chunks)||d.chunks.length!==a.chunks.length||d.chunks.some(k=>!k||k.backup_id!==void 0&&!ue(k.backup_id)||k.done!==void 0&&typeof k.done!="boolean"||k.done&&!k.backup_id))throw new Error("\u6062\u590D\u8FDB\u5EA6\u4E0E\u5F53\u524D\u76EE\u6807\u6216 manifest \u4E0D\u5339\u914D\uFF1B\u4F7F\u7528 --state FILE \u660E\u786E\u521B\u5EFA\u53E6\u4E00\u6279\u6062\u590D")}else d={version:1,manifest_sha256:s,target:_,session_id:Ir(),chunks:a.chunks.map(()=>({}))},le(o,d);for(let k=0;k<a.chunks.length;k++){i?.throwIfAborted(),e.assertActive();let b=d.chunks[k];if(b.done)continue;let g=a.chunks[k],f=xe(St(n),g.file),w=xt(f);if(w.length!==g.size||Ne(w)!==g.sha256)throw new Error("\u672C\u5730\u5F52\u6863\u5DF2\u6539\u53D8\uFF0C\u6062\u590D\u505C\u6B62");if(!b.backup_id){let c=await e.request("platform","/api/v1/maintenance/backups/import",{method:"POST",binary:w,signal:i});if(!ue(c?.backup_id))throw new Error("\u5F52\u6863\u53EF\u80FD\u5DF2\u5BFC\u5165\uFF0C\u4F46\u8FD4\u56DE\u7684 backup_id \u65E0\u6548\uFF1B\u672A\u7EE7\u7EED\u6062\u590D");b.backup_id=c.backup_id,le(o,d)}let S=await e.request("platform","/api/v1/maintenance/restore",{method:"POST",body:{backup_id:b.backup_id,session_id:d.session_id},key:"cli-restore-"+d.session_id+"-"+k,signal:i});if(S?.restored!==!0||!ue(S.target_id))throw new Error("\u6062\u590D\u53EF\u80FD\u5DF2\u63D0\u4EA4\uFF0C\u4F46\u8FD4\u56DE\u7ED3\u679C\u65E0\u6548\uFF1B\u4FDD\u7559\u8FDB\u5EA6\u4EE5\u539F\u5E42\u7B49\u952E\u6838\u5BF9");b.done=!0,le(o,d)}return{restored:!0,chunks:d.chunks.length,state:o,session_id:d.session_id}}finally{Yn(l),Ar(h)}}var Wn=`aut \xB7 Agent Utopia CLI ${$}
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
29
28
 
30
- \u6240\u6709\u6839\u547D\u4EE4\u53EA\u8BBF\u95EE\u5F53\u524D Team \u8FDE\u63A5\uFF1Baut team \u662F\u540C\u4E00\u5B9E\u73B0/\u8FDE\u63A5\u7684\u517C\u5BB9\u522B\u540D\u3002
29
+ \u8FDE\u63A5\uFF08\u540C\u4E00\u8D26\u53F7\u8BBF\u95EE\u4E0D\u540C\u4E3B\u4F53\u65E0\u9700\u91CD\u65B0\u767B\u5F55\uFF09
30
+ aut connect GATEWAY [--device NAME] [--scopes SCOPES] [--resource-mode all_visible|selected_tracks]
31
+ [--track-ids IDS] [--expires-in SECONDS] [--no-open]
32
+ aut connect GATEWAY --auth token [--token-stdin]
33
+ aut status | whoami | disconnect [--revoke]
34
+ \u9ED8\u8BA4\u53EA\u8BFB account:read,track:read,notifications:read\uFF1B\u5199\u5165\u9700\u663E\u5F0F\u6388\u6743 track:write\u3002
31
35
 
32
- \u767B\u5F55\u4E0E\u8FDE\u63A5
33
- aut connect <\u7F51\u5173 URL> [--device NAME] [--scopes SCOPES] [--resource-mode all_visible|selected_tracks] [--track-ids IDS] [--expires-in SECONDS] [--no-open]
34
- \u9ED8\u8BA4\u8D26\u53F7\u6D4F\u89C8\u5668\u6388\u6743\uFF1B\u9ED8\u8BA4\u53EA\u8BFB account:read,track:read,notifications:read\uFF0C\u9ED8\u8BA4 30 \u5929\u3002
35
- \u6307\u5B9A --organization ORG \u4F7F\u7528\u65E7\u7EC4\u7EC7\u534F\u8BAE\uFF1B\u65E7 profile \u4E0D\u4F1A\u81EA\u52A8\u8FC1\u79FB\u3002
36
- aut connect <\u7F51\u5173 URL> --auth password --email EMAIL [--organization ORG] [--password-stdin]
37
- aut connect <\u7F51\u5173 URL> --auth token [--token-stdin] [--organization ORG]
38
- \u53EF\u7528 --auth-url URL --platform-url URL \u660E\u786E\u8986\u76D6\u5165\u53E3\uFF1B\u4FDD\u7559 URL \u8DEF\u5F84\u524D\u7F00\u3002
39
- \u9ED8\u8BA4 auth=browser\uFF0C\u4EBA\u5728\u7F51\u9875\u786E\u8BA4\u8D26\u53F7\u53CA\u6743\u9650\uFF0C\u53EF\u7F29\u5C0F\u6388\u6743\u8303\u56F4\uFF1BCLI \u4E0D\u4F1A\u81EA\u52A8\u6269\u5927\u6743\u9650\u3002
40
- \u5BC6\u7801/PAT \u5FC5\u987B\u663E\u5F0F --auth password|token\uFF1B\u65E0 stdin \u6807\u5FD7\u65F6\u4ECE\u7EC8\u7AEF\u9690\u85CF\u8F93\u5165\u3002
41
- --auth password \u7684\u90AE\u7BB1\u6CE8\u518C\u8D26\u53F7\u53EF\u7701\u7565\u7EC4\u7EC7\u8FDB\u5165\u4E2A\u4EBA\u7A7A\u95F4\uFF1B\u4F01\u4E1A\u4E0E\u65E7\u7EC4\u7EC7\u8D26\u53F7\u6307\u5B9A --organization\u3002
42
- aut disconnect [--revoke] \u5220\u9664\u672C\u5730\u8FDE\u63A5\uFF1B\u8D26\u53F7 Agent \u9700\u5148\u7528 token revoke \u64A4\u9500\uFF0C--revoke \u7528\u4E8E\u8D26\u53F7/\u7EC4\u7EC7\u4F1A\u8BDD
43
- aut status | whoami status \u53EA\u8BFB\u672C\u5730\u914D\u7F6E\uFF0Cwhoami \u9A8C\u8BC1\u670D\u52A1\u7AEF\u8EAB\u4EFD
36
+ Track\uFF08ID \u53EF\u7701\u7565\u65F6\u4F7F\u7528\u5F53\u524D\u9879\u76EE\u7ED1\u5B9A\uFF09
37
+ aut track ls [--party PARTY_ID] [--status active|archived] [--q TEXT] [--cursor CURSOR] [--limit N]
38
+ aut track new --title TITLE [--party PARTY_ID] [--goal TEXT] --key KEY
39
+ aut track bind ID [--dir DIR] [--replace]
40
+ aut track get|access [ID]
41
+ aut track update [ID] [--title TITLE] [--goal TEXT] --expect-revision N --key KEY
42
+ aut track archive|restore [ID] --expect-revision N --key KEY
43
+ aut track read [ID] [--cursor CURSOR] [--limit N] [--max-bytes N] [--include-archived]
44
+ aut track updates [ID] [--after-seq N|--before-seq N|--cursor CURSOR] [--limit N] [--max-bytes N]
45
+ aut track records [ID] [--cursor CURSOR] [--limit N] [--max-bytes N] [--include-archived]
46
+ aut track add [ID] FILE --key KEY \u8FFD\u52A0\u6587\u5B57\u8FDB\u5C55\uFF08\u6700\u591A 64 KiB\uFF09
47
+ aut track commit [ID] MANIFEST_JSON --key KEY \u539F\u5B50\u63D0\u4EA4\u8FDB\u5C55\u3001\u9644\u4EF6\u3001\u8D44\u6599\u53D8\u66F4
48
+ aut track background [ID] [--version VERSION_ID]
49
+ aut track background [ID] --file FILE --expect-version N --key KEY
50
+ aut track handoff [ID] SPEC_JSON [--expect-content-revision N] --key KEY
51
+ aut track visibility [ID] --visibility restricted|all_members --expect-revision N --key KEY
52
+ aut track grants [ID] [--cursor CURSOR] [--limit N]
53
+ aut track grant [ID] GRANT_JSON --expect-revision N --key KEY
54
+ aut track revoke [ID] GRANT_ID --expect-revision N --expect-grant-revision N --key KEY
55
+ aut wait [ID] [--cursor CURSOR|--after-seq N] [--interval 5] [--timeout 300] [--limit N] [--max-bytes N]
44
56
 
45
- \u8D26\u53F7\u51ED\u636E\u4E0E\u901A\u77E5\uFF08\u8D26\u53F7\u8FDE\u63A5\uFF1B\u65E7\u7EC4\u7EC7 token \u547D\u4EE4\u4FDD\u6301\u539F\u534F\u8BAE\uFF09
46
- aut token ls [--cursor CURSOR] [--limit 50] [--include-inactive]
47
- aut token new --name NAME --scopes SCOPES --resource-mode all_visible|selected_tracks --key KEY [--track-ids IDS] [--expires-in SECONDS]
48
- \u66FF\u6362\u9700\u540C\u65F6\u7ED9 --replace-token-id ID --expect-revision N\uFF1Bsecret \u4EC5\u9996\u6B21\u8FD4\u56DE\uFF0C\u91CD\u653E\u53EA\u6709\u5143\u6570\u636E\u3002
49
- aut token revoke ID --expect-revision N --key KEY
50
- aut reauth [--password-stdin] \u4EC5\u4EBA\u7684\u8D26\u53F7\u4F1A\u8BDD\u53EF\u6838\u9A8C\u51ED\u636E\u7BA1\u7406\uFF1BAgent \u91CD\u65B0\u83B7\u53D6\u4EBA\u6388\u6743
51
- aut notifications ls [--category CATEGORY] [--cursor CURSOR] [--limit 50] [--unread-only] [--min-revision N] [--fresh]
52
- aut notifications count [--category CATEGORY] [--min-revision N] [--fresh]
53
- aut notifications read ID | read-through --seen-cursor CURSOR | preferences
54
- aut notifications preference --category CATEGORY --expect-revision N --key KEY --email-enabled true|false --sms-enabled true|false
55
- CATEGORY: security,transaction,collaboration,track,system\uFF1BSMS \u5C1A\u672A\u5F00\u901A\uFF0C\u670D\u52A1\u7AEF\u62D2\u7EDD\u542F\u7528\u3002
56
- read-through \u53EA\u63D0\u4EA4\u4E0A\u6B21\u5217\u8868\u7684 seen_cursor\uFF1B\u5927\u4E8E JS \u5B89\u5168\u6574\u6570\u7684\u7248\u672C\u53F7\u4EE5\u5341\u8FDB\u5236\u5B57\u7B26\u4E32\u8F93\u51FA\u3002
57
- selected_tracks \u4E0D\u652F\u6301\u8D26\u53F7\u5168\u5C40\u901A\u77E5 scope\u3002\u5F53\u524D\u8D26\u53F7 Track ACL/\u7ED1\u5B9A\u5C1A\u672A\u63A5\u5165\u3002
58
-
59
- \u6838\u5FC3\u5BF9\u8C61\uFF08KIND \u4E3A focus\u3001track\u3001space\u3001record\uFF09
60
- aut KIND ls [--q TEXT] [--status STATUS] [--tag-ids IDS] [--tag-mode any|all]
61
- [--owner-ids IDS] [--participant-ids IDS] [--user-ids IDS] [--offset N] [--limit N]
62
- Track \u652F\u6301 --focus ID / --ungrouped\uFF1BRecord \u652F\u6301 --space ID\u3002
63
- aut KIND get ID
64
- aut focus|space|track new --title TITLE [--description TEXT] [--focus ID]
65
- aut KIND update ID --expect-revision N [--title TITLE] [--description TEXT] [--focus ID|--space ID]
66
- aut KIND status ID STATUS --expect-revision N
67
- aut KIND delete|restore ID --expect-revision N
68
- aut KIND purge ID --expect-revision N --yes \u6C38\u4E45\u5220\u9664\u5DF2 soft-delete \u4E14\u672C\u4EBA\u62E5\u6709\u7684\u5BF9\u8C61
69
- aut KIND owner ID USER --previous-owner-role none|viewer|editor|admin --expect-revision N
70
-
71
- Record \u6B63\u6587\uFF08FILE \u4E3A\u672C\u5730\u6587\u4EF6\u6216 -\uFF1B\u5199\u5165\u5FC5\u987B\u63D0\u4F9B\u7A33\u5B9A --key\uFF09
72
- aut record new FILE --space ID --title TITLE --key KEY [--html|--md]
73
- aut record read ID [--version N] [--md|--json] \u9ED8\u8BA4\u8F93\u51FA\u539F\u59CB\u6B63\u6587\uFF1B--md \u83B7\u53D6 AI \u9605\u8BFB Markdown
74
- aut record save ID FILE --title TITLE --expect-version N --key KEY [--html|--md]
75
- aut record versions ID [--offset N] [--limit N]
76
- aut record references ID [--version N] | backlinks ID
77
-
78
- Track / Entry
79
- aut track bind ID [--dir PROJECT] [--replace] \u9A8C\u8BC1 Track \u540E\u5199 .aut.json\uFF0C\u65E0\u51ED\u636E
80
- \u65E7 .amb.json/.amb-solo.json/.amb-track \u987B\u5148\u6838\u9A8C\u5E76\u5907\u4EFD\u79FB\u8D70\uFF1B\u4E0D\u81EA\u52A8\u8FC1\u79FB\u3002
81
- \u4E0B\u8FF0 Track \u64CD\u4F5C\u7701\u7565 ID \u65F6\u4F7F\u7528\u5F53\u524D\u9879\u76EE\u7ED1\u5B9A\uFF0C\u5E76\u6838\u5BF9 Auth/Platform/\u7EC4\u7EC7\u3002
82
- aut track entries ID [--after-seq N] [--limit N] [--max-bytes N]
83
- aut track read ID [--mode default|full|incremental|tail] [--after-seq N] [--limit N] [--type TYPE] [--max-bytes N]
84
- aut track add ID FILE --expect-seq N --key KEY [--type progress] [--agent NAME] [--device NAME] [--documents JSONFILE]
85
- JSONFILE \u4E3A [{title,format:"md"|"html",content}]\uFF0C\u6700\u591A\u4E94\u4EFD\u6587\u6863\uFF1B\u6B63\u6587\u4FDD\u5B58\u5728\u670D\u52A1\u7AEF OSS\u3002
86
- aut track background [ID] [--file FILE --expect-revision N --key KEY]
87
- aut track references ID
88
- aut entry get|references ID | redact ID --expect-revision N --reason TEXT
89
- aut entry document ID DOCUMENT_ID [--md|--json] \u9ED8\u8BA4\u8F93\u51FA\u9644\u4EF6\u539F\u6587
90
- aut wait [TRACK] --after-seq N [--type TYPE] [--interval 60] [--timeout 300] [--limit 50] [--max-bytes N]
91
- \u666E\u901A HTTP \u8F6E\u8BE2\uFF1B\u5339\u914D\u9000\u51FA 0\u3001\u8D85\u65F6\u9000\u51FA 2\u3001\u53D6\u6D88\u9000\u51FA 130\uFF1B\u4E0D\u6267\u884C shell\u3002
92
-
93
- \u534F\u4F5C\u3001\u6807\u7B7E\u3001\u6743\u9650\u3001\u641C\u7D22
94
- aut user ls [--offset N] [--limit N] | get ID
95
- aut user add --email EMAIL --registered [--role member] \u6DFB\u52A0\u5DF2\u6CE8\u518C\u8D26\u53F7\uFF0C\u65E0\u9700\u5BC6\u7801
96
- aut user add --email EMAIL --display-name NAME [--role member] [--password-stdin] \u65E7\u7EC4\u7EC7\u672C\u5730\u8D26\u53F7
97
- aut user update ID [--display-name NAME] [--role ROLE] [--status active|disabled] [--set-password|--password-stdin]
98
- aut user disable ID
99
- aut token ls [--offset N] [--limit N] [--include-inactive] | new --name NAME --scopes read,write [--expires-in SECONDS] [--replace-token-id ID] | revoke ID
100
- aut tag ls | new NAME | rename ID NAME | delete ID
101
- aut tag ls KIND ID | attach|detach KIND ID TAG
102
- aut participant ls KIND ID | set KIND ID USER --role ROLE | remove KIND ID USER
103
- aut access request KIND ID --key KEY [--role viewer|editor] [--reason TEXT]
104
- aut access ls [--view mine|pending] [--status STATUS] | approve|reject ID [--comment TEXT] | cancel ID
105
- aut search TEXT [--offset N] [--limit N] [--types record,track,entry] [--agent NAME] [--device NAME] [--track ID]
106
- aut share new record|track ID [--version N|--max-seq N] [--ttl 86400]
107
- aut share ls | revoke ID \u521B\u5EFA\u8FD4\u56DE\u72EC\u7ACB\u524D\u7AEF\u79C1\u5BC6 fragment \u5206\u4EAB\u94FE\u63A5\uFF1B\u4EC5\u6301\u6709\u94FE\u63A5\u8005\u53EF\u8BBF\u95EE
108
-
109
- \u8EAB\u4EFD\u4E0E\u4EE3\u8868\u59D4\u6258
110
- aut party ls | get PARTY_ID
111
- aut party delegations PARTY_ID [--cursor CURSOR] [--limit 50]
112
- aut party delegate PARTY_ID JSON_FILE --key KEY --expect-revision N
113
- JSON_FILE: {account_id, capabilities:["publish","share"], track_ids:[], expires_at?}
114
- \u7A7A track_ids \u8868\u793A\u4E0D\u9650 Track\uFF1B\u521B\u5EFA\u9700\u4F7F\u7528 Party \u5F53\u524D revision\u3002
115
- aut party revoke DELEGATION_ID --key KEY --expect-revision N
116
-
117
- aut support ls [--cursor CURSOR] [--limit 50] | get TICKET_ID
118
- aut support create JSON_FILE --key KEY
119
- aut support submit TICKET_ID --expect-revision N --key KEY
120
- aut support messages TICKET_ID [--cursor CURSOR] [--limit 50]
121
- aut support message TICKET_ID TEXT_FILE --expect-revision N --key KEY
122
- aut support reopen TICKET_ID REASON_FILE --expect-revision N --key KEY
123
- \u9700\u8981 support:read\uFF1B\u5199\u64CD\u4F5C\u53E6\u9700 support:write\uFF0Call_visible \u8D26\u53F7\u6388\u6743\u3002
124
- \u53EA\u5411\u5BA2\u670D\u8865\u5145\u8BF4\u660E\uFF0C\u4E0D\u80FD\u4E0A\u4F20\u65B0\u4EA4\u4ED8\u6216\u5411\u53E6\u4E00\u5408\u4F5C\u65B9\u53D1\u9001\u79C1\u4FE1\u3002
125
- \u64A4\u9500\u9700\u4F7F\u7528\u59D4\u6258\u81EA\u8EAB revision\uFF1B\u53EA\u6709\u5F53\u524D\u7EC4\u7EC7 owner/admin \u53EF\u7BA1\u7406\u59D4\u6258\u3002
126
- \u9700\u8D26\u53F7\u7EA7\u8FDE\u63A5\uFF1Bls \u8FD4\u56DE\u4E2A\u4EBA\u53CA\u5F53\u524D\u7EC4\u7EC7 Party\uFF0C\u59D4\u6258\u7ED1\u5B9A\u6210\u5458\u4EE3\u6B21\uFF0C\u4E0D\u5207\u6362\u5168\u5C40\u7EC4\u7EC7\u4F1A\u8BDD\u3002
57
+ Record / Entry
58
+ aut record ls [--party PARTY_ID] [--track TRACK_ID] [--q TEXT] [--cursor CURSOR] [--limit N] [--include-archived]
59
+ aut record get ID [--version N] [--grant-id ID|--resource-id ID]
60
+ aut record read ID --version N [--json]
61
+ aut record versions ID [--cursor CURSOR] [--limit N] [--max-bytes N]
62
+ aut record new --title TITLE --upload-id ID [--track TRACK_ID] [--filename NAME] [--text] --key KEY
63
+ aut record update ID --upload-id ID [--text] --expect-version N --expect-revision N --key KEY
64
+ aut record rename ID --title TITLE --expect-version N --expect-revision N --key KEY
65
+ aut record archive|restore ID --expect-version N --expect-revision N --key KEY
66
+ aut record download ID [--version N] [--grant-id ID|--resource-id ID] --output FILE
67
+ aut entry get|read ID
127
68
 
128
69
  \u6587\u4EF6\u4E0E\u5F02\u6B65\u64CD\u4F5C
129
- aut file upload FILE --party ID --purpose record|solution|delivery|board|support_evidence --subject-type TYPE --subject ID --key KEY [--state FILE] [--wait]
130
- ZIP \u81F3\u591A 200 MiB\uFF1B\u5206\u7247\u76F4\u4F20 OSS\uFF0C\u672C\u5730\u8FDB\u5EA6\u4E0D\u4FDD\u5B58\u4EE4\u724C\u6216\u7B7E\u540D URL\u3002\u91CD\u590D\u6267\u884C\u540C\u4E00\u547D\u4EE4\u53EF\u7EED\u4F20\u3002
131
- aut file status UPLOAD_ID | abort UPLOAD_ID
132
- aut file get FILE_ID | download FILE_ID --output NEW_FILE
133
- aut operation get OPERATION_ID | wait OPERATION_ID [--timeout 300] [--interval 2]
134
- accepted \u4EC5\u8868\u793A\u5DF2\u53D7\u7406\uFF1B\u4EE5 operation succeeded \u548C upload stored \u4E3A\u51C6\u3002
70
+ aut file upload FILE --track TRACK_ID --key KEY [--media-type MIME] [--state FILE] [--wait]
71
+ aut file upload FILE --purpose solution_attachment|collaboration_delivery --subject-type TYPE --subject ID --key KEY [--wait]
72
+ aut file status|abort UPLOAD_ID [--content] --content \u9009\u62E9\u539F\u751F Track \u4E0A\u4F20
73
+ aut file get FILE_ID | download FILE_ID --output FILE
74
+ aut operation get|wait OPERATION_ID [--timeout 300] [--interval 2]
135
75
 
136
- \u5BFC\u51FA\u4E0E\u6269\u5C55
137
- aut export RECORD --version N --key KEY [--format original|pdf]
138
- aut job get|cancel ID | download ID --output FILE
139
- aut maintenance backup|check|reindex [--object-type KIND] [--cursor CURSOR] [--limit N]
140
- aut maintenance backup --all --output-dir DIRECTORY [--object-type KIND]
141
- aut maintenance import FILE
142
- aut maintenance restore --manifest FILE [--state FILE]
143
- aut maintenance download BACKUP_ID --output FILE
144
- aut maintenance restore BACKUP_ID --key KEY [--session-id SESSION] [--target ID] [--space ID] [--focus ID]
145
- --all \u81EA\u52A8\u6309\u5E8F\u4E0B\u8F7D ZIP+manifest\uFF1B\u6279\u91CF\u6062\u590D\u4FDD\u5B58\u65E0\u51ED\u636E\u8FDB\u5EA6\uFF0C\u5931\u8D25\u540E\u539F\u547D\u4EE4\u53EF\u7EED\u4F5C\u3002
146
- --state \u6307\u5B9A\u53E6\u4E00\u8FDB\u5EA6\u6587\u4EF6\u4F1A\u65B0\u5EFA\u4E00\u6279\u526F\u672C\uFF1B\u5355\u9875 restore \u56FA\u5B9A session-id \u81EA\u52A8\u5173\u8054\u7236\u5BF9\u8C61\u3002
147
- aut api GET|POST|PUT|PATCH|DELETE /api/v1/PATH [--service platform|auth] [--body-file FILE] [--key KEY]
148
- \u4EC5\u5F53\u524D\u8FDE\u63A5\u3001\u76F8\u5BF9 /api/v1 \u8DEF\u5F84\uFF1B\u4E0D\u5141\u8BB8\u8BA4\u8BC1\u51ED\u8BC1\u7B7E\u53D1\u3001\u5185\u90E8\u63A5\u53E3\u6216\u91CD\u5B9A\u5411\u3002
149
-
150
- \u672C\u5730\u5B89\u88C5\u4E0E\u5347\u7EA7
151
- aut skill install --agent codex|claude-code|agents [--scope user|project] [--dir PROJECT]
152
- aut integrate codex|claude-code|agents [--dir PROJECT]
76
+ \u8D26\u53F7\u80FD\u529B
77
+ aut party ls | get PARTY_ID | delegations PARTY_ID [--cursor CURSOR] [--limit N]
78
+ aut party delegate PARTY_ID JSON_FILE --expect-revision N --key KEY
79
+ aut party revoke DELEGATION_ID --expect-revision N --key KEY
80
+ aut token ls [--cursor CURSOR] [--limit N] [--include-inactive]
81
+ aut token new --name NAME --scopes SCOPES --resource-mode MODE --expires-in SECONDS --key KEY [--track-ids IDS]
82
+ aut token revoke ID --expect-revision N --key KEY
83
+ aut reauth
84
+ aut notifications ls|count|read|read-through|preferences|preference [\u9009\u9879]
85
+ aut support ls|get|create|messages|submit|message|reopen [\u9009\u9879]
86
+ aut share ls [--track ID] [--before-id ID] [--limit N]
87
+ aut share new JSON_FILE --key KEY \u4F7F\u7528\u539F\u751F content-shares \u5408\u540C
88
+ aut share revoke ID --expect-revision N --key KEY
89
+ aut rollout \u67E5\u770B\u5F00\u653E\u80FD\u529B\u4E0E\u5C55\u793A\u5012\u8BA1\u65F6
90
+ aut api METHOD /api/v1/PATH [--service auth|platform] [--body-file FILE] [--key KEY]
91
+ aut skill install --agent codex|claude-code|agents [--scope user|project] [--dir DIR]
92
+ aut integrate codex|claude-code|agents [--dir DIR]
153
93
  aut self update [--check] [--json]
154
- aut --version
155
- \u65E7 Solo \u547D\u4EE4\u3001URL\u3001AMB_URL/AMB_TOKEN/AMB_SOLO_* \u4E0D\u4F5C\u4E3A Team \u7684\u8FDE\u63A5\u6216\u8BA4\u8BC1\u6765\u6E90\u3002
156
94
 
157
- \u6B63\u6587/\u6BCF\u4EFD\u9644\u4EF6\u81F3\u591A 1 MiB\uFF0C\u9644\u4EF6\u81F3\u591A 5 \u4EFD\uFF0C\u5B8C\u6574 JSON \u8BF7\u6C42\u81F3\u591A 2 MiB\uFF1B\u6587\u4EF6\u4E0E stdin \u5FC5\u987B\u4E3A\u6709\u6548 UTF-8\u3002
158
- Track \u5206\u9875 --max-bytes \u9ED8\u8BA4 4194304\u3001\u8303\u56F4 1024\u201333554432\uFF08\u5B8C\u6574\u54CD\u5E94\u5B57\u8282\uFF09\uFF1B\u6309 next_seq/has_more \u7EE7\u7EED\u3002
159
- \u666E\u901A\u54CD\u5E94\u81F3\u591A 4 MiB\uFF0C\u5185\u5BB9\u5355\u8BFB\u53CA raw \u4E0B\u8F7D\u81F3\u591A 32 MiB\uFF1B\u8D85\u9650\u62A5\u9519\uFF0C\u4E0D\u622A\u65AD\u6216\u8DF3\u9875\u3002
160
- \u7ED3\u679C\u9ED8\u8BA4 JSON\uFF1B\u6B63\u6587 read \u9ED8\u8BA4\u539F\u59CB\u6587\u672C\u3002\u6240\u6709\u4FEE\u6539\u5747\u4E0D\u81EA\u52A8\u91CD\u8BD5\uFF1B\u51B2\u7A81\u9700\u8981\u91CD\u65B0\u8BFB\u53D6\u540E\u660E\u786E\u5904\u7406\u3002
161
- --key \u5BF9\u540C\u4E00\u6B21\u903B\u8F91\u5199\u5165\u4FDD\u6301\u4E0D\u53D8\uFF1B\u91CD\u8BD5\u4E0D\u5F97\u6539\u53D8\u6B63\u6587\u548C expect_*\u3002\u4E1A\u52A1\u547D\u4EE4\u4E0D\u63A5\u53D7 URL\u3002
162
- `,Vn=["auth","auth-url","platform-url","organization","email","name","title","description","focus","space","status","q","offset","limit","tag-ids","tag-mode","owner-ids","participant-ids","user-ids","expect-revision","expect-version","expect-seq","after-seq","version","key","type","agent","device","role","previous-owner-role","reason","comment","view","output","service","body-file","interval","timeout","mode","documents","types","track","max-seq","ttl","format","display-name","scopes","expires-in","dir","file","object-type","cursor","target","session-id","output-dir","manifest","state","max-bytes","replace-token-id","party","purpose","subject-type","subject","media-type","after","resource-mode","track-ids","category","min-revision","seen-cursor","email-enabled","sms-enabled"],Qn=["help","json","password-stdin","token-stdin","no-open","readonly","revoke","html","md","ungrouped","set-password","replace","yes","all","registered","include-inactive","wait","fresh","unread-only"],Ae={focus:"focuses",track:"tracks",space:"spaces",record:"records"},zr=["q","status","offset","limit","tag-ids","tag-mode","owner-ids","participant-ids","user-ids"],z=["offset","limit"],E=e=>console.log(JSON.stringify(e,null,2));function D(e,t){if(!e)throw new Error(`\u7F3A\u5C11 ${t}\uFF1B\u8FD0\u884C aut --help`);return e}function x(e){let t=D(e,"ID");if(!/^[A-Za-z0-9_-]{1,200}$/.test(t))throw new Error("Team ID \u5FC5\u987B\u4E3A\u4E0D\u900F\u660E ID\uFF0C\u4E0D\u80FD\u662F URL \u6216\u8DEF\u5F84");return t}function j(e,t,r=0,i=Number.MAX_SAFE_INTEGER){if(!e||!/^\d+$/.test(e)||!Number.isSafeInteger(Number(e))||Number(e)<r||Number(e)>i)throw new Error(`${t} \u5FC5\u987B\u4E3A ${r}\u2013${i} \u7684\u6574\u6570`);return Number(e)}function He(e){let t=D(e,"FILE");return C(t)}function Br(e){return JSON.parse(C(e,re,"JSON \u6587\u4EF6","request_too_large"))}async function $r(e){let{values:t,positionals:r}=Zn({args:e,allowPositionals:!0,strict:!0,options:Object.fromEntries([...Vn.map(g=>[g,{type:"string"}]),...Qn.map(g=>[g,{type:"boolean"}])])}),i=t,n=g=>typeof i[g]=="string"?i[g]:void 0,a=(g,f=0)=>j(n(g),"--"+g,f),s=(...g)=>{if(Object.keys(i).some(f=>!["json","help",...g].includes(f)))throw new Error("\u6B64 Team \u547D\u4EE4\u5305\u542B\u4E0D\u652F\u6301\u7684\u9009\u9879\uFF1B\u8FD0\u884C aut --help")},o=(g,f,w=f)=>{if(g.length<f||g.length>w)throw new Error("Team \u547D\u4EE4\u53C2\u6570\u6570\u91CF\u4E0D\u6B63\u786E\uFF1B\u8FD0\u884C aut --help")},u=g=>{let f=new URLSearchParams;for(let w of g){let S=n(w);S!==void 0&&(["offset","after-seq"].includes(w)&&j(S,"--"+w),w==="limit"&&j(S,"--limit",1,200),f.set(w.replaceAll("-","_"),S))}return g.includes("max-bytes")&&f.set("max_bytes",String(ie(n("max-bytes")))),f},_=(g,f)=>g+(f.size?"?"+f.toString():""),h=g=>{if(i.html&&i.md)throw new Error("--html \u4E0E --md \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528");return i.html?"html":i.md?"md":/\.html?$/i.test(g)?"html":"md"},[l="help",...d]=r;if(i.help||l==="help"){console.log(Wn);return}if(l==="status"){s(),o(d,0),E(lt());return}if(!["connect","login","disconnect","whoami","wait","focus","track","space","record","entry","user","token","tag","participant","access","search","share","export","job","maintenance","api","file","operation","party","notifications","reauth","support"].includes(l))throw new Error("\u672A\u77E5\u6216\u5DF2\u79FB\u9664\u7684\u65E7\u7248\u547D\u4EE4\uFF1B\u73B0\u5728\u53EA\u652F\u6301 AMB Team\uFF0C\u8FD0\u884C aut --help\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u5206\u6D41\u6216\u8FC1\u79FB\u65E7\u6570\u636E");if(["AMB_URL","AMB_TOKEN","AMB_SOLO_URL","AMB_SOLO_TOKEN","AMB_SOLO_AGENT"].some(g=>process.env[g]))throw new Error("\u65E7 AMB_URL/AMB_TOKEN/AMB_SOLO_* \u4E0D\u518D\u7528\u4E8E\u8FDE\u63A5\u6216\u8BA4\u8BC1\uFF1B\u8BF7\u79FB\u9664\u8FD9\u4E9B\u73AF\u5883\u53D8\u91CF\uFF0C\u518D\u7528 aut status \u6838\u9A8C\u5E76\u663E\u5F0F aut connect\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u4F7F\u7528\u65E7\u51ED\u636E");let k=new AbortController,b=()=>k.abort(new Error("\u5DF2\u53D6\u6D88 Team \u64CD\u4F5C"));process.once("SIGINT",b),process.once("SIGTERM",b);try{if(l==="connect"||l==="login"){s("auth","auth-url","platform-url","organization","email","name","device","readonly","no-open","password-stdin","token-stdin","scopes","resource-mode","track-ids","expires-in"),o(d,0,1);let c=n("auth")||"browser";if(!["password","token","browser"].includes(c))throw new Error("--auth \u652F\u6301 password\u3001token\u3001browser");if(c!=="password"&&(i["password-stdin"]||i.email)||c!=="token"&&i["token-stdin"]||c!=="browser"&&(i.readonly||i["no-open"]||i.name||i.device))throw new Error("\u51ED\u636E\u9009\u9879\u4E0E --auth \u4E0D\u5339\u914D");let p=c==="browser"&&!n("organization")?ft({...i,"resource-mode":n("resource-mode")||"all_visible"},Le):void 0;if(!p&&["scopes","resource-mode","track-ids","expires-in"].some(m=>i[m]!==void 0))throw new Error("\u8D26\u53F7\u6388\u6743\u9009\u9879\u53EA\u9002\u7528\u4E8E\u4E0D\u6307\u5B9A\u7EC4\u7EC7\u7684\u6D4F\u89C8\u5668\u6388\u6743");c==="password"&&D(n("email"),"--email"),E(await sr({gateway:d[0],authURL:n("auth-url"),platformURL:n("platform-url"),auth:c,organization:n("organization"),email:n("email"),name:n("name"),device:n("device"),scopes:p?.scopes,resourceMode:p?.resource_mode,trackIDs:p?.track_ids,expiresIn:n("expires-in")===void 0?void 0:j(n("expires-in"),"--expires-in",1,90*86400),readonly:!!i.readonly,noOpen:!!i["no-open"],signal:k.signal,secret:c==="browser"?void 0:await de(!!i[c==="password"?"password-stdin":"token-stdin"],c==="password"?"Password":"Token")}));return}let g=new Me;if(await dr(g,l,d,i,k.signal))return;let f=(c,p="GET",m,y,T="platform")=>g.request(T,c,{method:p,body:m,key:y,signal:k.signal}),w=()=>D(n("key"),"--key\uFF08\u540C\u4E00\u6B21\u903B\u8F91\u5199\u5165\u7684\u7A33\u5B9A\u5E42\u7B49\u952E\uFF09");if(l==="file"){let[c,...p]=d;if(c==="upload"){s("party","purpose","subject-type","subject","key","media-type","state","wait","timeout","interval"),o(p,1);let m=await _r(g,p[0],{party:x(n("party")),purpose:D(n("purpose"),"--purpose"),subjectType:D(n("subject-type"),"--subject-type"),subject:x(n("subject")),key:w(),mediaType:n("media-type")||"application/zip",state:n("state")||p[0]+".aut-upload.json",wait:!!i.wait,timeoutMS:j(n("timeout")||"300","--timeout",1,86400)*1e3,intervalMS:j(n("interval")||"2","--interval",1,60)*1e3,signal:k.signal});E(m),"status"in m&&m.status==="timeout"?process.exitCode=2:"status"in m&&["failed","cancelled","suspended","unknown"].includes(String(m.status))&&(process.exitCode=1);return}if(c==="download"){s("output"),o(p,1),E(await br(g,x(p[0]),D(n("output"),"--output"),k.signal));return}if(s(),o(p,1),c==="get"){E(await f("/api/v1/file-bundles/"+x(p[0])));return}if(c==="status"){E(await f("/api/v1/files/uploads/"+x(p[0])));return}if(c==="abort"){E(await f("/api/v1/files/uploads/"+x(p[0]),"DELETE"));return}throw new Error("\u7528\u6CD5\uFF1Aaut file upload FILE | status UPLOAD_ID | abort UPLOAD_ID | get FILE_ID | download FILE_ID --output FILE")}if(l==="operation"){let[c,...p]=d;if(o(p,1),c==="get"){s(),E(await f("/api/v1/operations/"+x(p[0])));return}if(c==="wait"){s("timeout","interval");let m=await gt(g,x(p[0]),{timeoutMS:j(n("timeout")||"300","--timeout",1,86400)*1e3,intervalMS:j(n("interval")||"2","--interval",1,60)*1e3,signal:k.signal});E(m),process.exitCode=m.status==="succeeded"?0:m.status==="timeout"?2:1;return}throw new Error("\u7528\u6CD5\uFF1Aaut operation get|wait OPERATION_ID")}if(l==="disconnect"){s("revoke"),o(d,0),E(await g.disconnect(!!i.revoke));return}if(l==="whoami"){s(),o(d,0),E(await f("/api/v1/auth/me","GET",void 0,void 0,"auth"));return}if(l==="wait"){s("after-seq","type","interval","timeout","limit","max-bytes"),o(d,0,1);let c=await kr(g,d[0]?x(d[0]):kt(g),{after:a("after-seq"),type:n("type"),limit:j(n("limit")||"50","--limit",1,200),maxBytes:ie(n("max-bytes")),intervalMS:j(n("interval")||"60","--interval",1,3600)*1e3,timeoutMS:j(n("timeout")||"300","--timeout",1,86400)*1e3,signal:k.signal});E(c),process.exitCode=c.status==="timeout"?2:c.status==="cancelled"?130:0;return}if(Object.hasOwn(Ae,l)){let[c,...p]=d,m=p,y="/api/v1/"+Ae[l];if(l==="track"&&c==="bind"){s("dir","replace"),o(m,1),E(await xr(g,x(m[0]),n("dir"),!!i.replace));return}if(l==="track"&&c&&!["new","ls"].includes(c)){let v=["add","status","owner"].includes(c)?2:1;m.length===v-1&&(m=[kt(g),...m])}let T=()=>y+"/"+x(m[0]);if(c==="ls"){s(...zr,...l==="track"?["focus","ungrouped"]:l==="record"?["space"]:[]),o(m,0);let v=u(zr);n("focus")!==void 0&&v.set("focus_id",x(n("focus"))),n("space")!==void 0&&v.set("space_id",x(n("space"))),i.ungrouped&&v.set("ungrouped","true"),E(await f(_(y,v)));return}if(c==="new"){s("title","description",...l==="track"?["focus"]:l==="record"?["space","html","md","key"]:[]),o(m,l==="record"?1:0);let v={title:D(n("title"),"--title")};n("description")!==void 0&&(v.description=n("description")),l==="track"&&n("focus")&&(v.focus_id=x(n("focus"))),l==="record"&&Object.assign(v,{space_id:x(n("space")),format:h(m[0]),content:He(m[0])}),E(await f(y,"POST",v,l==="record"?w():void 0));return}if(c==="get"){s(),o(m,1),E(await f(T()));return}if(c==="update"){let v=["title","description",...l==="track"?["focus"]:l==="record"?["space"]:[]];s("expect-revision",...v),o(m,1);let O={expect_revision:a("expect-revision",1)};for(let N of v)n(N)!==void 0&&(O[N==="focus"?"focus_id":N==="space"?"space_id":N]=n(N));if(Object.keys(O).length===1)throw new Error("\u81F3\u5C11\u63D0\u4F9B\u4E00\u4E2A\u5F85\u4FEE\u6539\u5B57\u6BB5");E(await f(T(),"PUT",O));return}if(c==="status"||c==="delete"||c==="restore"){s("expect-revision"),o(m,c==="status"?2:1);let v={expect_revision:a("expect-revision",1),...c==="status"?{status:m[1]}:{}};E(await f(T()+(c==="delete"?"":"/"+c),c==="delete"?"DELETE":c==="restore"?"POST":"PUT",v));return}if(c==="purge"){if(s("expect-revision","yes"),o(m,1),!i.yes)throw new Error("\u6C38\u4E45\u5220\u9664\u5FC5\u987B\u660E\u786E\u63D0\u4F9B --yes");E(await f(T()+"/purge","POST",{expect_revision:a("expect-revision",1)}));return}if(c==="owner"){s("expect-revision","previous-owner-role"),o(m,2),E(await f(T()+"/owner","PUT",{owner_user_id:x(m[1]),previous_owner_role:D(n("previous-owner-role"),"--previous-owner-role"),expect_revision:a("expect-revision",1)}));return}if(l==="record"){if(c==="read"){s("version","md"),o(m,1);let v=n("version")?a("version",1):void 0,O=T()+(i.md?"/reading"+(v?"?version_no="+v:""):v?"/versions/"+v:"/content"),N=await f(O);if(i.json)E(N);else{if(typeof N?.content!="string")throw new Error("Record \u6B63\u6587\u54CD\u5E94\u65E0\u6548");process.stdout.write(N.content)}return}if(c==="save"){s("title","expect-version","key","html","md"),o(m,2),E(await f(T()+"/versions","POST",{title:D(n("title"),"--title"),format:h(m[1]),content:He(m[1]),expect_version:a("expect-version",1)},w()));return}if(c==="versions"){s(...z),o(m,1),E(await f(_(T()+"/versions",u(z))));return}if(c==="references"){s("version"),o(m,1),E(await f(T()+"/references"+(n("version")?"?version_no="+a("version",1):"")));return}if(c==="backlinks"){s(),o(m,1),E(await f(T()+"/backlinks"));return}}if(l==="track"){if(c==="entries"){s("after-seq","limit","max-bytes"),o(m,1);let v=n("after-seq")?a("after-seq"):0,O=u(["after-seq","limit","max-bytes"]);O.set("after_seq",String(v)),E(yt(await f(_(T()+"/entries",O)),v));return}if(c==="read"){s("mode","after-seq","limit","type","agent","device","max-bytes"),o(m,1),E(await f(_(T()+"/context",u(["mode","after-seq","limit","type","agent","device","max-bytes"]))));return}if(c==="add"){s("expect-seq","key","type","agent","device","documents"),o(m,2);let v=n("type")||"progress";if(!ht.includes(v))throw new Error("\u4E0D\u652F\u6301\u7684 Entry \u7C7B\u578B");let O=n("documents")?Br(n("documents")):void 0;O!==void 0&&at(O),E(await f(T()+"/entries","POST",{type:v,content_markdown:He(m[1]),expect_seq:a("expect-seq"),...n("agent")?{agent:n("agent")}:{},...n("device")?{device:n("device")}:{},...O?{documents:O}:{}},w()));return}if(c==="background"){o(m,1,2);let v=n("file")||m[1];if(s(...v?["file","expect-revision","key"]:[]),n("file")&&m[1])throw new Error("\u80CC\u666F\u6587\u4EF6\u53EA\u80FD\u63D0\u4F9B\u4E00\u6B21");E(await f(T()+"/background",v?"PUT":"GET",v?{content_markdown:He(v),expect_revision:a("expect-revision")}:void 0,v?w():void 0));return}if(c==="references"){s(),o(m,1),E(await f(T()+"/references"));return}}throw new Error("\u672A\u77E5 Team \u5BF9\u8C61\u64CD\u4F5C\uFF1B\u8FD0\u884C aut --help")}if(l==="entry"){let[c,p]=d;if(o(d,c==="document"?3:2),c==="document"){s("md");let m=await f("/api/v1/entries/"+x(p)+"/documents/"+x(d[2])+"?representation="+(i.md?"markdown":"original"));if(i.json)E(m);else{if(typeof m?.content!="string")throw new Error("Entry \u6587\u6863\u54CD\u5E94\u65E0\u6548");process.stdout.write(m.content)}return}if(c==="get"||c==="references"){s(),E(await f("/api/v1/entries/"+x(p)+(c==="references"?"/references":"")));return}if(c==="redact"){s("expect-revision","reason"),E(await f("/api/v1/entries/"+x(p)+"/redact","POST",{expect_revision:a("expect-revision",1),reason:D(n("reason"),"--reason")}));return}}if(l==="user"){let[c,p]=d;if(c==="ls"){s(...z),o(d,1),E(await f(_("/api/v1/users",u(z)),"GET",void 0,void 0,"auth"));return}if(c==="get"){s(),o(d,2),E(await f("/api/v1/users/"+x(p),"GET",void 0,void 0,"auth"));return}if(c==="add"){if(s("email","display-name","role","password-stdin","registered"),o(d,1),i.registered&&(i["password-stdin"]||i["display-name"]))throw new Error("--registered \u4E0D\u8BBE\u7F6E\u8D26\u53F7\u5BC6\u7801\u6216\u59D3\u540D");let m={email:D(n("email"),"--email"),organization_role:n("role")||"member",...i.registered?{}:{display_name:D(n("display-name"),"--display-name"),password:await de(!!i["password-stdin"],"Password")}};E(await f("/api/v1/users","POST",m,void 0,"auth"));return}if(c==="update"){s("display-name","role","status","password-stdin","set-password"),o(d,2);let m={};for(let[y,T]of[["display-name","display_name"],["role","organization_role"],["status","status"]])n(y)!==void 0&&(m[T]=n(y));if((i["set-password"]||i["password-stdin"])&&(m.password=await de(!!i["password-stdin"],"Password")),!Object.keys(m).length)throw new Error("\u81F3\u5C11\u63D0\u4F9B\u4E00\u4E2A\u5F85\u4FEE\u6539\u7528\u6237\u5B57\u6BB5");E(await f("/api/v1/users/"+x(p),"PATCH",m,void 0,"auth"));return}if(c==="disable"){s(),o(d,2),E(await f("/api/v1/users/"+x(p),"DELETE",void 0,void 0,"auth"));return}}if(l==="token"){let[c,p]=d;if(c==="ls"){s(...z,"include-inactive"),o(d,1);let m=u(z);i["include-inactive"]&&m.set("include_inactive","true"),E(await f(_("/api/v1/auth/tokens",m),"GET",void 0,void 0,"auth"));return}if(c==="revoke"){s(),o(d,2),E(await f("/api/v1/auth/tokens/"+x(p),"DELETE",void 0,void 0,"auth"));return}if(c==="new"){s("name","scopes","expires-in","replace-token-id"),o(d,1);let m=D(n("scopes"),"--scopes").split(",");if(!m.length||m.some(y=>!["read","write"].includes(y))||new Set(m).size!==m.length)throw new Error("--scopes \u53EA\u652F\u6301 read\u3001write");E(await f("/api/v1/auth/tokens","POST",{name:D(n("name"),"--name"),scopes:m,purpose:"manual",...n("replace-token-id")?{replace_token_id:x(n("replace-token-id"))}:{},...n("expires-in")?{expires_in_seconds:j(n("expires-in"),"--expires-in",1,90*86400)}:{}},void 0,"auth"));return}}let S=(c,p)=>{if(!c||!Object.hasOwn(Ae,c))throw new Error("\u5BF9\u8C61\u7C7B\u578B\u652F\u6301 focus\u3001track\u3001space\u3001record");return"/api/v1/"+Ae[c]+"/"+x(p)};if(l==="tag"){let[c,...p]=d;if(c==="ls"){if(s(...z),o(p,0,2),p.length===1)throw new Error("\u5BF9\u8C61\u6807\u7B7E\u9700\u8981 KIND \u548C ID");E(await f(_(p.length?S(p[0],p[1])+"/tags":"/api/v1/tags",u(z))));return}if(s(),c==="new"){o(p,1),E(await f("/api/v1/tags","POST",{name:p[0]}));return}if(c==="rename"){o(p,2),E(await f("/api/v1/tags/"+x(p[0]),"PUT",{name:p[1]}));return}if(c==="delete"){o(p,1),E(await f("/api/v1/tags/"+x(p[0]),"DELETE"));return}if(c==="attach"||c==="detach"){o(p,3),E(await f(S(p[0],p[1])+"/tags/"+x(p[2]),c==="attach"?"PUT":"DELETE"));return}}if(l==="participant"){let[c,p,m,y]=d;s(...c==="set"?["role"]:[]),o(d,c==="ls"?3:4);let T=S(p,m)+"/participants";if(c==="ls"){E(await f(T));return}if(c==="set"||c==="remove"){E(await f(T+"/"+x(y),c==="set"?"PUT":"DELETE",c==="set"?{role:D(n("role"),"--role")}:void 0));return}}if(l==="access"){let[c,...p]=d;if(c==="request"){s("role","reason","key"),o(p,2),E(await f(S(p[0],p[1])+"/access-requests","POST",{role:n("role")||"viewer",reason:n("reason")||""},w()));return}if(c==="ls"){s("view","status",...z),o(p,0),E(await f(_("/api/v1/access-requests",u(["view","status",...z]))));return}if(c==="approve"||c==="reject"){s("comment"),o(p,1),E(await f("/api/v1/access-requests/"+x(p[0])+"/decision","POST",{decision:c==="approve"?"approved":"rejected",comment:n("comment")||""}));return}if(c==="cancel"){s(),o(p,1),E(await f("/api/v1/access-requests/"+x(p[0])+"/cancel","POST"));return}}if(l==="search"){s(...z,"types","agent","device","track"),o(d,1);let c=u([...z,"types","agent","device"]);c.set("q",d[0]),n("track")&&c.set("track_id",x(n("track"))),E(await f(_("/api/v1/search",c)));return}if(l==="share"){let[c,p,m]=d;if(c==="new"){if(o(d,3),!["record","track"].includes(p))throw new Error("\u5206\u4EAB\u652F\u6301 record \u6216 track");s("ttl",p==="record"?"version":"max-seq");let y=await f("/api/v1/shares","POST",{object_type:p,object_id:x(m),ttl_seconds:j(n("ttl")||"86400","--ttl",60,2592e3),...p==="record"?{version_no:n("version")?a("version"):0}:{max_seq:n("max-seq")?a("max-seq"):0}});if(typeof y?.fragment!="string"||!/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(y.fragment))throw new Error("\u5206\u4EAB\u5DF2\u521B\u5EFA\u4F46\u8FD4\u56DE\u94FE\u63A5\u65E0\u6548\uFF1B\u8BF7\u901A\u8FC7 share ls \u6838\u5BF9");let T="#share="+encodeURIComponent(y.fragment),v=y.url===void 0?new URL(g.profile.platform_url).origin+"/amb-web/"+T:y.url;try{if(typeof v!="string"||new URL(v).hash!==T)throw new Error("invalid");W(v.split("#")[0])}catch{throw new Error("\u5206\u4EAB\u5DF2\u521B\u5EFA\u4F46\u8FD4\u56DE\u94FE\u63A5\u65E0\u6548\uFF1B\u8BF7\u901A\u8FC7 share ls \u6838\u5BF9")}E({...y,url:v});return}if(c==="ls"){s(),o(d,1),E(await f("/api/v1/shares"));return}if(c==="revoke"){s(),o(d,2),E(await f("/api/v1/shares/"+x(p),"DELETE"));return}}if(l==="export"){s("version","key","format"),o(d,1);let c=n("format")||"original";if(!["original","pdf"].includes(c))throw new Error("--format \u652F\u6301 original \u6216 pdf");E(await f("/api/v1/jobs","POST",{kind:c==="pdf"?"export_pdf":"export_record",record_id:x(d[0]),version_no:a("version",1)},w()));return}if(l==="maintenance"){let[c,p]=d;if(c==="import"){s(),o(d,2),E(await Pr(g,p,k.signal));return}if(["backup","check","reindex"].includes(c)){if(s("object-type","cursor","limit",...c==="backup"?["all","output-dir"]:[]),o(d,1),n("object-type")&&!Object.hasOwn(Ae,n("object-type")))throw new Error("--object-type \u652F\u6301 focus\u3001track\u3001space\u3001record");if(i.all){if(n("cursor")||n("limit"))throw new Error("--all \u4E0D\u63A5\u53D7\u5206\u9875 cursor/limit");E(await Rr(g,D(n("output-dir"),"--output-dir"),n("object-type"),k.signal));return}if(n("output-dir"))throw new Error("--output-dir \u9700\u4E0E --all \u540C\u65F6\u4F7F\u7528");E(await f("/api/v1/maintenance/"+c,"POST",{...n("object-type")?{object_type:n("object-type")}:{},...n("cursor")?{cursor:n("cursor")}:{},...n("limit")?{limit:j(n("limit"),"--limit",1,20)}:{}}));return}if(c==="download"){s("output"),o(d,2);let m=Ur(D(n("output"),"--output")),y=await g.request("platform","/api/v1/maintenance/backups/"+x(p)+"/archive",{raw:!0,signal:k.signal});jr(m,y,{flag:"wx",mode:384}),E({saved:m,bytes:y.length});return}if(c==="restore"){if(n("manifest")){s("manifest","state"),o(d,1),E(await Lr(g,n("manifest"),n("state"),k.signal));return}s("key","target","space","focus","session-id"),o(d,2),E(await f("/api/v1/maintenance/restore","POST",{backup_id:x(p),...n("target")?{target_id:x(n("target"))}:{},...n("space")?{space_id:x(n("space"))}:{},...n("focus")?{focus_id:x(n("focus"))}:{},...n("session-id")?{session_id:n("session-id")}:{}},w()));return}}if(l==="job"){let[c,p]=d;if(o(d,2),c==="get"||c==="cancel"){s(),E(await f("/api/v1/jobs/"+x(p)+(c==="cancel"?"/cancel":""),c==="cancel"?"POST":"GET"));return}if(c==="download"){s("output");let m=Ur(D(n("output"),"--output")),y=await g.request("platform","/api/v1/jobs/"+x(p)+"/download",{raw:!0,signal:k.signal});jr(m,y,{flag:"wx",mode:384}),E({saved:m,bytes:y.length});return}}if(l==="api"){s("service","body-file","key"),o(d,2);let c=d[0].toUpperCase(),p=Fe(d[1]),m=n("service")||"platform";if(!["GET","POST","PUT","PATCH","DELETE"].includes(c)||!["auth","platform"].includes(m))throw new Error("\u4E0D\u652F\u6301\u7684 API \u65B9\u6CD5\u6216 service");let y=p.split("?")[0];if(m==="auth"?!/^\/api\/v1\/(?:users(?:\/|$)|organizations\/current$)/.test(y):!/^\/api\/v1\/(?:focuses|tracks|spaces|records|entries|tags|access-requests|jobs|search)(?:\/|$)/.test(y))throw new Error("\u6B64 API \u8DEF\u5F84\u4E0D\u5728 Team \u4E1A\u52A1\u63A5\u53E3\u8303\u56F4\u5185");if(c==="GET"&&n("body-file"))throw new Error("GET \u4E0D\u63A5\u53D7\u8BF7\u6C42\u4F53");E(await f(p,c,n("body-file")?Br(n("body-file")):void 0,n("key"),m));return}throw new Error("\u672A\u77E5 Team \u547D\u4EE4\uFF1B\u8FD0\u884C aut --help")}finally{process.off("SIGINT",b),process.off("SIGTERM",b)}}var We=e=>console.log(typeof e=="string"?e:JSON.stringify(e,null,2));async function pi(){let e=process.argv.slice(process.argv[2]==="team"?3:2),t=e[0];if(e.length===1&&t==="--version"){We($);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",i;try{i=Rt({args:e.slice(1),allowPositionals:!0,options:{check:{type:"boolean"},json:{type:"boolean"}}})}catch{throw new Error(r)}if(i.positionals.length!==1||i.positionals[0]!=="update")throw new Error(r);let n=await Kt({packageName:"aut-cli",currentVersion:$,moduleUrl:import.meta.url,check:!!i.values.check});We(i.values.json?n:Gt(n));return}if(t==="skill"){let{installSkill:r}=await Promise.resolve().then(()=>(Ot(),Gr)),{values:i,positionals:n}=Rt({args:e.slice(1),allowPositionals:!0,options:{agent:{type:"string"},scope:{type:"string"},dir:{type:"string"},edition:{type:"string"},force:{type:"boolean"},json:{type:"boolean"}}});if(n.length!==1||n[0]!=="install"||!i.agent)throw new Error("\u7528\u6CD5\uFF1Aaut skill install --agent codex|claude-code|agents [--scope user|project] [--dir PROJECT]");We(r({agent:i.agent,scope:i.scope,directory:i.dir,force:!!i.force,edition:i.edition}));return}if(t==="integrate"){let{installIntegration:r}=await Promise.resolve().then(()=>(Nt(),Fr)),{values:i,positionals:n}=Rt({args:e.slice(1),allowPositionals:!0,options:{dir:{type:"string"},json:{type:"boolean"}}});if(n.length!==1)throw new Error("\u7528\u6CD5\uFF1Aaut integrate codex|claude-code|agents [--dir PROJECT]");We(r(n[0],i.dir||"."));return}await $r(e)}pi().catch(e=>{console.error("aut: "+e.message),process.exitCode=1});
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
+ \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
+ \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
+ `,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});