@desplega.ai/agent-fs 0.5.4 → 0.5.5
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 +46 -46
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var
|
|
4
|
-
Install with: brew install sqlite`)}var oi=!1;var ii=g(()=>{
|
|
3
|
+
var Ll=Object.create;var{getPrototypeOf:vl,defineProperty:rn,getOwnPropertyNames:Ol}=Object;var Sl=Object.prototype.hasOwnProperty;function Ul(t){return this[t]}var hl,ml,k=(t,e,n)=>{var o=t!=null&&typeof t==="object";if(o){var i=e?hl??=new WeakMap:ml??=new WeakMap,r=i.get(t);if(r)return r}n=t!=null?Ll(vl(t)):{};let u=e||!t||!t.__esModule?rn(n,"default",{value:t,enumerable:!0}):n;for(let f of Ol(t))if(!Sl.call(u,f))rn(u,f,{get:Ul.bind(t,f),enumerable:!0});if(o)i.set(t,u);return u};var Q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var al=(t)=>t;function $l(t,e){this[t]=al.bind(null,e)}var Ft=(t,e)=>{for(var n in e)rn(t,n,{get:e[n],enumerable:!0,configurable:!0,set:$l.bind(e,n)})};var g=(t,e)=>()=>(t&&(e=t(t=0)),e);var de=import.meta.require;import{Database as Pl}from"bun:sqlite";import{platform as Cl}from"os";import{existsSync as Ml}from"fs";function cl(){if(oi)return;if(oi=!0,Cl()!=="darwin")return;let t=["/opt/homebrew/opt/sqlite/lib/libsqlite3.dylib","/usr/local/opt/sqlite3/lib/libsqlite3.dylib"];for(let e of t)if(Ml(e)){try{Pl.setCustomSQLite(e)}catch{}return}console.warn(`Warning: Could not find Homebrew SQLite. Extension loading may fail on macOS.
|
|
4
|
+
Install with: brew install sqlite`)}var oi=!1;var ii=g(()=>{cl()});import{mkdirSync as Xl,readFileSync as Fl,writeFileSync as En,existsSync as ui}from"fs";import{join as Re}from"path";function Hl(){let t=process.env.AGENT_FS_HOME??Re(process.env.HOME??"/tmp",".agent-fs");if(t.startsWith("~/"))return Re(process.env.HOME??"/tmp",t.slice(2));return t}function nt(){return Hl()}function ot(){return Re(nt(),"config.json")}function _t(){return Re(nt(),"agent-fs.db")}function Yl(){let t=nt();if(!ui(t))Xl(t,{recursive:!0})}function Gl(t,e){let n={...t};for(let o of Object.keys(e))if(e[o]&&typeof e[o]==="object"&&!Array.isArray(e[o]))n[o]={...t[o],...e[o]};else if(e[o]!==void 0)n[o]=e[o];return n}function ri(t){let e=process.env;if(e.AWS_ENDPOINT_URL_S3||e.S3_ENDPOINT)t.s3.endpoint=e.AWS_ENDPOINT_URL_S3||e.S3_ENDPOINT;if(e.AWS_ACCESS_KEY_ID||e.S3_ACCESS_KEY_ID)t.s3.accessKeyId=e.AWS_ACCESS_KEY_ID||e.S3_ACCESS_KEY_ID;if(e.AWS_SECRET_ACCESS_KEY||e.S3_SECRET_ACCESS_KEY)t.s3.secretAccessKey=e.AWS_SECRET_ACCESS_KEY||e.S3_SECRET_ACCESS_KEY;if(e.BUCKET_NAME||e.S3_BUCKET)t.s3.bucket=e.BUCKET_NAME||e.S3_BUCKET;if(e.AWS_REGION||e.S3_REGION)t.s3.region=e.AWS_REGION||e.S3_REGION;if(e.S3_PROVIDER)t.s3.provider=e.S3_PROVIDER;if(e.S3_PUBLIC_ENDPOINT)t.s3.publicEndpoint=e.S3_PUBLIC_ENDPOINT;if(e.SERVER_PORT||e.PORT)t.server.port=parseInt(e.SERVER_PORT||e.PORT,10);if(e.SERVER_HOST||e.HOST)t.server.host=e.SERVER_HOST||e.HOST;if(e.EMBEDDING_PROVIDER)t.embedding.provider=e.EMBEDDING_PROVIDER;if(e.EMBEDDING_MODEL)t.embedding.model=e.EMBEDDING_MODEL;if(e.EMBEDDING_API_KEY)t.embedding.apiKey=e.EMBEDDING_API_KEY;if(e.AGENT_FS_RATE_LIMIT){if(!t.server.rateLimit)t.server.rateLimit={requestsPerMinute:1200};t.server.rateLimit.requestsPerMinute=parseInt(e.AGENT_FS_RATE_LIMIT,10)}if(e.AGENT_FS_APP_URL)t.appUrl=e.AGENT_FS_APP_URL;return t}function v(){Yl();let t=ot();if(!ui(t))return En(t,JSON.stringify(un,null,2)),ri(structuredClone(un));let e=Fl(t,"utf-8"),n=JSON.parse(e);return ri(Gl(un,n))}function Ei(t,e){let n=v();n[t]=e,En(ot(),JSON.stringify(n,null,2))}function N(t,e){let n=v(),o=t.split("."),i=n;for(let r=0;r<o.length-1;r++)i=i[o[r]];i[o[o.length-1]]=e,En(ot(),JSON.stringify(n,null,2))}var un;var zt=g(()=>{un={s3:{provider:"minio",bucket:"agentfs",region:"us-east-1",endpoint:"http://localhost:9000",accessKeyId:"",secretAccessKey:""},embedding:{provider:"local",model:"",apiKey:""},server:{port:7433,host:"127.0.0.1",cors:{origins:["*"]},rateLimit:{requestsPerMinute:1200}},auth:{apiKey:""},minio:{containerId:"",managed:!0}}});var E={};Ft(E,{users:()=>qt,orgs:()=>xt,orgMembers:()=>Zl,files:()=>Ql,fileVersions:()=>Vl,events:()=>Wl,drives:()=>Ae,driveMembers:()=>Bl,contentChunks:()=>Kl,comments:()=>Jl});import{sqliteTable as it,text as A,integer as h,primaryKey as fn}from"drizzle-orm/sqlite-core";var qt,xt,Zl,Ae,Bl,Ql,Vl,Jl,Wl,Kl;var fi=g(()=>{qt=it("users",{id:A("id").primaryKey(),email:A("email").notNull().unique(),apiKeyHash:A("api_key_hash").notNull(),createdAt:h("created_at",{mode:"timestamp"}).notNull()}),xt=it("orgs",{id:A("id").primaryKey(),name:A("name").notNull(),isPersonal:h("is_personal",{mode:"boolean"}).notNull().default(!1),createdAt:h("created_at",{mode:"timestamp"}).notNull()}),Zl=it("org_members",{orgId:A("org_id").notNull().references(()=>xt.id),userId:A("user_id").notNull().references(()=>qt.id),role:A("role",{enum:["viewer","editor","admin"]}).notNull()},(t)=>({pk:fn({columns:[t.orgId,t.userId]})})),Ae=it("drives",{id:A("id").primaryKey(),orgId:A("org_id").notNull().references(()=>xt.id),name:A("name").notNull(),isDefault:h("is_default",{mode:"boolean"}).notNull().default(!1),createdAt:h("created_at",{mode:"timestamp"}).notNull()}),Bl=it("drive_members",{driveId:A("drive_id").notNull().references(()=>Ae.id),userId:A("user_id").notNull().references(()=>qt.id),role:A("role",{enum:["viewer","editor","admin"]}).notNull()},(t)=>({pk:fn({columns:[t.driveId,t.userId]})})),Ql=it("files",{path:A("path").notNull(),driveId:A("drive_id").notNull().references(()=>Ae.id),size:h("size").notNull(),contentType:A("content_type"),author:A("author").notNull(),currentVersionId:A("current_version_id"),createdAt:h("created_at",{mode:"timestamp"}).notNull(),modifiedAt:h("modified_at",{mode:"timestamp"}).notNull(),isDeleted:h("is_deleted",{mode:"boolean"}).notNull().default(!1),embeddingStatus:A("embedding_status",{enum:["pending","indexed","failed"]}).default("pending")},(t)=>({pk:fn({columns:[t.path,t.driveId]})})),Vl=it("file_versions",{id:h("id").primaryKey({autoIncrement:!0}),path:A("path").notNull(),driveId:A("drive_id").notNull(),version:h("version").notNull(),s3VersionId:A("s3_version_id").notNull(),author:A("author").notNull(),operation:A("operation",{enum:["write","edit","append","delete","revert"]}).notNull(),message:A("message"),diffSummary:A("diff_summary"),size:h("size"),etag:A("etag"),createdAt:h("created_at",{mode:"timestamp"}).notNull()}),Jl=it("comments",{id:A("id").primaryKey(),parentId:A("parent_id"),orgId:A("org_id").notNull().references(()=>xt.id),driveId:A("drive_id").notNull().references(()=>Ae.id),path:A("path").notNull(),lineStart:h("line_start"),lineEnd:h("line_end"),quotedContent:A("quoted_content"),fileVersionId:h("file_version_id"),body:A("body").notNull(),author:A("author").notNull().references(()=>qt.id),resolved:h("resolved",{mode:"boolean"}).notNull().default(!1),resolvedBy:A("resolved_by"),resolvedAt:h("resolved_at",{mode:"timestamp"}),createdAt:h("created_at",{mode:"timestamp"}).notNull(),updatedAt:h("updated_at",{mode:"timestamp"}).notNull(),isDeleted:h("is_deleted",{mode:"boolean"}).notNull().default(!1)}),Wl=it("events",{id:A("id").primaryKey(),orgId:A("org_id").notNull().references(()=>xt.id),type:A("type").notNull(),resourceType:A("resource_type").notNull(),resourceId:A("resource_id").notNull(),actor:A("actor").notNull().references(()=>qt.id),target:A("target"),status:A("status",{enum:["created","ack","deleted"]}).notNull().default("created"),metadata:A("metadata"),createdAt:h("created_at",{mode:"timestamp"}).notNull()}),Kl=it("content_chunks",{id:h("id").primaryKey({autoIncrement:!0}),filePath:A("file_path").notNull(),driveId:A("drive_id").notNull(),chunkIndex:h("chunk_index").notNull(),content:A("content").notNull(),charOffset:h("char_offset").notNull(),tokenCount:h("token_count").notNull()})});var li=`
|
|
5
5
|
CREATE TABLE IF NOT EXISTS users (
|
|
6
6
|
id TEXT PRIMARY KEY,
|
|
7
7
|
email TEXT NOT NULL UNIQUE,
|
|
@@ -127,7 +127,7 @@ CREATE VIRTUAL TABLE IF NOT EXISTS chunk_vectors USING vec0(
|
|
|
127
127
|
chunk_id INTEGER PRIMARY KEY,
|
|
128
128
|
embedding float[768]
|
|
129
129
|
);
|
|
130
|
-
`;import{Database as Kl}from"bun:sqlite";import{drizzle as bl}from"drizzle-orm/bun-sqlite";import*as si from"sqlite-vec";import{existsSync as kl,mkdirSync as jl}from"fs";import{dirname as zl}from"path";function ql(t){si.load(t)}function gt(t){let e=t??_t(),n=zl(e);if(!kl(n))jl(n,{recursive:!0});let o=new Kl(e);return ql(o),o.exec("PRAGMA journal_mode=WAL;"),o.exec("PRAGMA foreign_keys=ON;"),o.exec(li),o.exec(yi),bl(o,{schema:f})}var a=g(()=>{ii();zt();Ei()});var ln=Q((ey)=>{var gi=(t)=>encodeURIComponent(t).replace(/[!'()*]/g,xl),xl=(t)=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,ty=(t)=>t.split("/").map(gi).join("/");ey.escapeUri=gi;ey.escapeUriPath=ty});var di=Q((ry)=>{var yn=ln();function iy(t){let e=[];for(let n of Object.keys(t).sort()){let o=t[n];if(n=yn.escapeUri(n),Array.isArray(o))for(let i=0,r=o.length;i<r;i++)e.push(`${n}=${yn.escapeUri(o[i])}`);else{let i=n;if(o||typeof o==="string")i+=`=${yn.escapeUri(o)}`;e.push(i)}}return e.join("&")}ry.buildQueryString=iy});function Ri(t){let{port:e,query:n}=t,{protocol:o,path:i,hostname:r}=t;if(o&&o.slice(-1)!==":")o+=":";if(e)r+=`:${e}`;if(i&&i.charAt(0)!=="/")i=`/${i}`;let u=n?Ti.buildQueryString(n):"";if(u&&u[0]!=="?")u=`?${u}`;let E="";if(t.username!=null||t.password!=null){let y=t.username??"",s=t.password??"";E=`${y}:${s}@`}let l="";if(t.fragment)l=`#${t.fragment}`;return`${o}//${E}${r}${i}${u}${l}`}var Ti;var Ai=g(()=>{Ti=k(di(),1)});var wi=async(t)=>{let e=t?.Bucket||"";if(typeof t.Bucket==="string")t.Bucket=e.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?"));if(sy(e)){if(t.ForcePathStyle===!0)throw Error("Path-style addressing cannot be used with ARN buckets")}else if(!yy(e)||e.indexOf(".")!==-1&&!String(t.Endpoint).startsWith("http:")||e.toLowerCase()!==e||e.length<3)t.ForcePathStyle=!0;if(t.DisableMultiRegionAccessPoints)t.disableMultiRegionAccessPoints=!0,t.DisableMRAP=!0;return t},fy,Ey,ly,yy=(t)=>fy.test(t)&&!Ey.test(t)&&!ly.test(t),sy=(t)=>{let[e,n,o,,,i]=t.split(":"),r=e==="arn"&&t.split(":").length>=6,u=Boolean(r&&n&&o&&i);if(r&&!u)throw Error(`Invalid ARN: ${t} was an invalid ARN.`);return u};var Ni=g(()=>{fy=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/,Ey=/(\d+\.){3}\d+/,ly=/\.\./});var pi=g(()=>{Ni()});var Ii=(t,e,n,o=!1)=>{let i=async()=>{let r;if(o)r=n.clientContextParams?.[t]??n[t]??n[e];else r=n[t]??n[e];if(typeof r==="function")return r();return r};if(t==="credentialScope"||e==="CredentialScope")return async()=>{let r=typeof n.credentials==="function"?await n.credentials():n.credentials;return r?.credentialScope??r?.CredentialScope};if(t==="accountId"||e==="AccountId")return async()=>{let r=typeof n.credentials==="function"?await n.credentials():n.credentials;return r?.accountId??r?.AccountId};if(t==="endpoint"||e==="endpoint")return async()=>{if(n.isCustomEndpoint===!1)return;let r=await i();if(r&&typeof r==="object"){if("url"in r)return r.url.href;if("hostname"in r){let{protocol:u,hostname:E,port:l,path:y}=r;return`${u}//${E}${l?":"+l:""}${y}`}}return r};return i};var te=Q((Ry)=>{class Ht extends Error{name="ProviderError";tryNextLink;constructor(t,e=!0){let n,o=!0;if(typeof e==="boolean")n=void 0,o=e;else if(e!=null&&typeof e==="object")n=e.logger,o=e.tryNextLink??!0;super(t);this.tryNextLink=o,Object.setPrototypeOf(this,Ht.prototype),n?.debug?.(`@smithy/property-provider ${o?"->":"(!)"} ${t}`)}static from(t,e=!0){return Object.assign(new this(t.message,e),t)}}class sn extends Ht{name="CredentialsProviderError";constructor(t,e=!0){super(t,e);Object.setPrototypeOf(this,sn.prototype)}}class gn extends Ht{name="TokenProviderError";constructor(t,e=!0){super(t,e);Object.setPrototypeOf(this,gn.prototype)}}var gy=(...t)=>async()=>{if(t.length===0)throw new Ht("No providers in chain");let e;for(let n of t)try{return await n()}catch(o){if(e=o,o?.tryNextLink)continue;throw o}throw e},dy=(t)=>()=>Promise.resolve(t),Ty=(t,e,n)=>{let o,i,r,u=!1,E=async()=>{if(!i)i=t();try{o=await i,r=!0,u=!1}finally{i=void 0}return o};if(e===void 0)return async(l)=>{if(!r||l?.forceRefresh)o=await E();return o};return async(l)=>{if(!r||l?.forceRefresh)o=await E();if(u)return o;if(n&&!n(o))return u=!0,o;if(e(o))return await E(),o;return o}};Ry.CredentialsProviderError=sn;Ry.ProviderError=Ht;Ry.TokenProviderError=gn;Ry.chain=gy;Ry.fromStatic=dy;Ry.memoize=Ty});function we(t){try{let e=new Set(Array.from(t.match(/([A-Z_]){3,}/g)??[]));return e.delete("CONFIG"),e.delete("CONFIG_PREFIX_SEPARATOR"),e.delete("ENV"),[...e].join(", ")}catch(e){return t}}var _i,Di=(t,e)=>async()=>{try{let n=t(process.env,e);if(n===void 0)throw Error();return n}catch(n){throw new _i.CredentialsProviderError(n.message||`Not found in ENV: ${we(t.toString())}`,{logger:e?.logger})}};var vi=g(()=>{_i=k(te(),1)});import{homedir as Dy}from"os";import{sep as vy}from"path";var dn,Ly=()=>{if(process&&process.geteuid)return`${process.geteuid()}`;return"DEFAULT"},Yt=()=>{let{HOME:t,USERPROFILE:e,HOMEPATH:n,HOMEDRIVE:o=`C:${vy}`}=process.env;if(t)return t;if(e)return e;if(n)return`${o}${n}`;let i=Ly();if(!dn[i])dn[i]=Dy();return dn[i]};var ee=g(()=>{dn={}});var Li=(t)=>t.profile||process.env.AWS_PROFILE||"default";var Oi=()=>{};var oe=Q((ay)=>{ay.HttpAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})(ay.HttpAuthLocation||(ay.HttpAuthLocation={}));ay.HttpApiKeyAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})(ay.HttpApiKeyAuthLocation||(ay.HttpApiKeyAuthLocation={}));ay.EndpointURLScheme=void 0;(function(t){t.HTTP="http",t.HTTPS="https"})(ay.EndpointURLScheme||(ay.EndpointURLScheme={}));ay.AlgorithmId=void 0;(function(t){t.MD5="md5",t.CRC32="crc32",t.CRC32C="crc32c",t.SHA1="sha1",t.SHA256="sha256"})(ay.AlgorithmId||(ay.AlgorithmId={}));var Oy=(t)=>{let e=[];if(t.sha256!==void 0)e.push({algorithmId:()=>ay.AlgorithmId.SHA256,checksumConstructor:()=>t.sha256});if(t.md5!=null)e.push({algorithmId:()=>ay.AlgorithmId.MD5,checksumConstructor:()=>t.md5});return{addChecksumAlgorithm(n){e.push(n)},checksumAlgorithms(){return e}}},Sy=(t)=>{let e={};return t.checksumAlgorithms().forEach((n)=>{e[n.algorithmId()]=n.checksumConstructor()}),e},Uy=(t)=>{return Oy(t)},hy=(t)=>{return Sy(t)};ay.FieldPosition=void 0;(function(t){t[t.HEADER=0]="HEADER",t[t.TRAILER=1]="TRAILER"})(ay.FieldPosition||(ay.FieldPosition={}));var my="__smithy_context";ay.IniSectionType=void 0;(function(t){t.PROFILE="profile",t.SSO_SESSION="sso-session",t.SERVICES="services"})(ay.IniSectionType||(ay.IniSectionType={}));ay.RequestHandlerProtocol=void 0;(function(t){t.HTTP_0_9="http/0.9",t.HTTP_1_0="http/1.0",t.TDS_8_0="tds/8.0"})(ay.RequestHandlerProtocol||(ay.RequestHandlerProtocol={}));ay.SMITHY_CONTEXT_KEY=my;ay.getDefaultClientConfiguration=Uy;ay.resolveDefaultRuntimeConfig=hy});var rt=".";var In,Si=(t)=>Object.entries(t).filter(([e])=>{let n=e.indexOf(rt);if(n===-1)return!1;return Object.values(In.IniSectionType).includes(e.substring(0,n))}).reduce((e,[n,o])=>{let i=n.indexOf(rt),r=n.substring(0,i)===In.IniSectionType.PROFILE?n.substring(i+1):n;return e[r]=o,e},{...t.default&&{default:t.default}});var Ui=g(()=>{In=k(oe(),1)});import{join as My}from"path";var cy="AWS_CONFIG_FILE",hi=()=>process.env[cy]||My(Yt(),".aws","config");var mi=g(()=>{ee()});import{join as Xy}from"path";var Fy="AWS_SHARED_CREDENTIALS_FILE",ai=()=>process.env[Fy]||Xy(Yt(),".aws","credentials");var $i=g(()=>{ee()});var Pi,Hy,Yy,_n=(t)=>{let e={},n,o;for(let i of t.split(/\r?\n/)){let r=i.split(/(^|\s)[;#]/)[0].trim();if(r[0]==="["&&r[r.length-1]==="]"){n=void 0,o=void 0;let E=r.substring(1,r.length-1),l=Hy.exec(E);if(l){let[,y,,s]=l;if(Object.values(Pi.IniSectionType).includes(y))n=[y,s].join(rt)}else n=E;if(Yy.includes(E))throw Error(`Found invalid profile name "${E}"`)}else if(n){let E=r.indexOf("=");if(![0,-1].includes(E)){let[l,y]=[r.substring(0,E).trim(),r.substring(E+1).trim()];if(y==="")o=l;else{if(o&&i.trimStart()===i)o=void 0;e[n]=e[n]||{};let s=o?[o,l].join(rt):l;e[n][s]=y}}}}return e};var Ci=g(()=>{Pi=k(oe(),1),Hy=/^([\w-]+)\s(["'])?([\w-@\+\.%:/]+)\2$/,Yy=["__proto__","profile __proto__"]});import{readFile as Gy}from"fs/promises";var Dn,Mi,vn=(t,e)=>{if(Mi[t]!==void 0)return Mi[t];if(!Dn[t]||e?.ignoreCache)Dn[t]=Gy(t,"utf8");return Dn[t]};var ci=g(()=>{Dn={},Mi={}});import{join as Xi}from"path";var Fi=()=>({}),Hi=async(t={})=>{let{filepath:e=ai(),configFilepath:n=hi()}=t,o=Yt(),i="~/",r=e;if(e.startsWith("~/"))r=Xi(o,e.slice(2));let u=n;if(n.startsWith("~/"))u=Xi(o,n.slice(2));let E=await Promise.all([vn(u,{ignoreCache:t.ignoreCache}).then(_n).then(Si).catch(Fi),vn(r,{ignoreCache:t.ignoreCache}).then(_n).catch(Fi)]);return{configFile:E[0],credentialsFile:E[1]}};var Yi=g(()=>{Ui();mi();$i();ee();Ci();ci()});var Gi=()=>{};var Zi=()=>{};var Bi=()=>{};var Ln=g(()=>{ee();Oi();Yi();Gi();Zi();Bi()});var Qi,Vi=(t,{preferredFile:e="config",...n}={})=>async()=>{let o=Li(n),{configFile:i,credentialsFile:r}=await Hi(n),u=r[o]||{},E=i[o]||{},l=e==="config"?{...u,...E}:{...E,...u};try{let s=t(l,e==="config"?i:r);if(s===void 0)throw Error();return s}catch(y){throw new Qi.CredentialsProviderError(y.message||`Not found in config files w/ profile [${o}]: ${we(t.toString())}`,{logger:n.logger})}};var Ji=g(()=>{Ln();Qi=k(te(),1)});var Wi,Zy=(t)=>typeof t==="function",Ki=(t)=>Zy(t)?async()=>await t():Wi.fromStatic(t);var bi=g(()=>{Wi=k(te(),1)});var Ne,ki=({environmentVariableSelector:t,configFileSelector:e,default:n},o={})=>{let{signingName:i,logger:r}=o;return Ne.memoize(Ne.chain(Di(t,{signingName:i,logger:r}),Vi(e,o),Ki(n)))};var ji=g(()=>{vi();Ji();bi();Ne=k(te(),1)});var zi=g(()=>{ji()});var qi="AWS_ENDPOINT_URL",xi="endpoint_url",tr=(t)=>({environmentVariableSelector:(e)=>{let n=t.split(" ").map((r)=>r.toUpperCase()),o=e[[qi,...n].join("_")];if(o)return o;let i=e[qi];if(i)return i;return},configFileSelector:(e,n)=>{if(n&&e.services){let i=n[["services",e.services].join(rt)];if(i){let r=t.split(" ").map((E)=>E.toLowerCase()),u=i[[r.join("_"),xi].join(rt)];if(u)return u}}let o=e[xi];if(o)return o;return},default:void 0});var er=g(()=>{Ln()});var nr=async(t)=>ki(tr(t??""))();var or=g(()=>{zi();er()});var ir=Q((Qy)=>{function By(t){let e={};if(t=t.replace(/^\?/,""),t)for(let n of t.split("&")){let[o,i=null]=n.split("=");if(o=decodeURIComponent(o),i)i=decodeURIComponent(i);if(!(o in e))e[o]=i;else if(Array.isArray(e[o]))e[o].push(i);else e[o]=[e[o],i]}return e}Qy.parseQueryString=By});var ur=Q((Wy)=>{var Jy=ir(),rr=(t)=>{if(typeof t==="string")return rr(new URL(t));let{hostname:e,pathname:n,port:o,protocol:i,search:r}=t,u;if(r)u=Jy.parseQueryString(r);return{hostname:e,port:o?parseInt(o):void 0,protocol:i,path:n,query:u}};Wy.parseUrl=rr});var On,fr=(t)=>{if(typeof t==="object"){if("url"in t){let e=On.parseUrl(t.url);if(t.headers){e.headers={};for(let[n,o]of Object.entries(t.headers))e.headers[n.toLowerCase()]=o.join(", ")}return e}return t}return On.parseUrl(t)};var Sn=g(()=>{On=k(ur(),1)});var Er=async(t,e,n,o)=>{if(!n.isCustomEndpoint){let u;if(n.serviceConfiguredEndpoint)u=await n.serviceConfiguredEndpoint();else u=await nr(n.serviceId);if(u)n.endpoint=()=>Promise.resolve(fr(u)),n.isCustomEndpoint=!0}let i=await by(t,e,n);if(typeof n.endpointProvider!=="function")throw Error("config.endpointProvider is not set.");let r=n.endpointProvider(i,o);if(n.isCustomEndpoint&&n.endpoint){let u=await n.endpoint();if(u?.headers){r.headers??={};for(let[E,l]of Object.entries(u.headers))r.headers[E]=Array.isArray(l)?l:[l]}}return r},by=async(t,e,n)=>{let o={},i=e?.getEndpointParameterInstructions?.()||{};for(let[r,u]of Object.entries(i))switch(u.type){case"staticContextParams":o[r]=u.value;break;case"contextParams":o[r]=t[u.name];break;case"clientContextParams":case"builtInParams":o[r]=await Ii(u.name,r,n,u.type!=="builtInParams")();break;case"operationContextParams":o[r]=u.get(t);break;default:throw Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(u))}if(Object.keys(i).length===0)Object.assign(o,n);if(String(n.serviceId).toLowerCase()==="s3")await wi(o);return o};var lr=g(()=>{pi();or();Sn()});var yr=g(()=>{lr();Sn()});var gr=Q((zy)=>{var sr=oe(),ky=(t)=>t[sr.SMITHY_CONTEXT_KEY]||(t[sr.SMITHY_CONTEXT_KEY]={}),jy=(t)=>{if(typeof t==="function")return t;let e=Promise.resolve(t);return()=>e};zy.getSmithyContext=ky;zy.normalizeProvider=jy});var dr=()=>{};var Un=Q((rs)=>{var ts=oe(),es=(t)=>{return{setHttpHandler(e){t.httpHandler=e},httpHandler(){return t.httpHandler},updateHttpClientConfig(e,n){t.httpHandler?.updateHttpClientConfig(e,n)},httpHandlerConfigs(){return t.httpHandler.httpHandlerConfigs()}}},ns=(t)=>{return{httpHandler:t.httpHandler()}};class Tr{name;kind;values;constructor({name:t,kind:e=ts.FieldPosition.HEADER,values:n=[]}){this.name=t,this.kind=e,this.values=n}add(t){this.values.push(t)}set(t){this.values=t}remove(t){this.values=this.values.filter((e)=>e!==t)}toString(){return this.values.map((t)=>t.includes(",")||t.includes(" ")?`"${t}"`:t).join(", ")}get(){return this.values}}class Rr{entries={};encoding;constructor({fields:t=[],encoding:e="utf-8"}){t.forEach(this.setField.bind(this)),this.encoding=e}setField(t){this.entries[t.name.toLowerCase()]=t}getField(t){return this.entries[t.toLowerCase()]}removeField(t){delete this.entries[t.toLowerCase()]}getByType(t){return Object.values(this.entries).filter((e)=>e.kind===t)}}class pe{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(t){this.method=t.method||"GET",this.hostname=t.hostname||"localhost",this.port=t.port,this.query=t.query||{},this.headers=t.headers||{},this.body=t.body,this.protocol=t.protocol?t.protocol.slice(-1)!==":"?`${t.protocol}:`:t.protocol:"https:",this.path=t.path?t.path.charAt(0)!=="/"?`/${t.path}`:t.path:"/",this.username=t.username,this.password=t.password,this.fragment=t.fragment}static clone(t){let e=new pe({...t,headers:{...t.headers}});if(e.query)e.query=os(e.query);return e}static isInstance(t){if(!t)return!1;let e=t;return"method"in e&&"protocol"in e&&"hostname"in e&&"path"in e&&typeof e.query==="object"&&typeof e.headers==="object"}clone(){return pe.clone(this)}}function os(t){return Object.keys(t).reduce((e,n)=>{let o=t[n];return{...e,[n]:Array.isArray(o)?[...o]:o}},{})}class Ar{statusCode;reason;headers;body;constructor(t){this.statusCode=t.statusCode,this.reason=t.reason,this.headers=t.headers||{},this.body=t.body}static isInstance(t){if(!t)return!1;let e=t;return typeof e.statusCode==="number"&&typeof e.headers==="object"}}function is(t){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(t)}rs.Field=Tr;rs.Fields=Rr;rs.HttpRequest=pe;rs.HttpResponse=Ar;rs.getHttpHandlerExtensionConfiguration=es;rs.isValidHostname=is;rs.resolveHttpHandlerRuntimeConfig=ns});var wr=()=>{};var Nr=()=>{};var pr;var Ir=g(()=>{pr={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0}});var _r=g(()=>{wr();Ir();Nr()});var ew;var Dr=g(()=>{_r();ew={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:pr.name}});var vr=()=>{};var Lr=()=>{};var Or=g(()=>{yr();dr();Dr();vr();Lr()});var Sr=()=>{};var Ur=()=>{};var hr=()=>{};var mr=()=>{};var $r=Q((Rs)=>{var ar={},hn={};for(let t=0;t<256;t++){let e=t.toString(16).toLowerCase();if(e.length===1)e=`0${e}`;ar[t]=e,hn[e]=t}function ds(t){if(t.length%2!==0)throw Error("Hex encoded strings must have an even number length");let e=new Uint8Array(t.length/2);for(let n=0;n<t.length;n+=2){let o=t.slice(n,n+2).toLowerCase();if(o in hn)e[n/2]=hn[o];else throw Error(`Cannot decode unrecognized sequence ${o} as hexadecimal`)}return e}function Ts(t){let e="";for(let n=0;n<t.byteLength;n++)e+=ar[t[n]];return e}Rs.fromHex=ds;Rs.toHex=Ts});var mn=Q((ps)=>{var Ns=(t)=>typeof ArrayBuffer==="function"&&t instanceof ArrayBuffer||Object.prototype.toString.call(t)==="[object ArrayBuffer]";ps.isArrayBuffer=Ns});var Pr=Q((Ls)=>{var _s=mn(),an=Te("buffer"),Ds=(t,e=0,n=t.byteLength-e)=>{if(!_s.isArrayBuffer(t))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof t} (${t})`);return an.Buffer.from(t,e,n)},vs=(t,e)=>{if(typeof t!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof t} (${t})`);return e?an.Buffer.from(t,e):an.Buffer.from(t)};Ls.fromArrayBuffer=Ds;Ls.fromString=vs});var cr=Q((ms)=>{var Cr=Pr(),Mr=(t)=>{let e=Cr.fromString(t,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT)},Us=(t)=>{if(typeof t==="string")return Mr(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(t)},hs=(t)=>{if(typeof t==="string")return t;if(typeof t!=="object"||typeof t.byteOffset!=="number"||typeof t.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return Cr.fromArrayBuffer(t.buffer,t.byteOffset,t.byteLength).toString("utf8")};ms.fromUtf8=Mr;ms.toUint8Array=Us;ms.toUtf8=hs});var Zn=Q((Qs)=>{var dt=$r(),Dt=cr(),Cs=mn(),Yr=Un(),Xr=gr(),Ie=ln(),Gr="X-Amz-Algorithm",Zr="X-Amz-Credential",Cn="X-Amz-Date",Br="X-Amz-SignedHeaders",Qr="X-Amz-Expires",Mn="X-Amz-Signature",cn="X-Amz-Security-Token",Ms="X-Amz-Region-Set",Xn="authorization",Fn=Cn.toLowerCase(),Vr="date",Jr=[Xn,Fn,Vr],Wr=Mn.toLowerCase(),Oe="x-amz-content-sha256",Kr=cn.toLowerCase(),cs="host",br={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},kr=/^proxy-/,jr=/^sec-/,Xs=[/^proxy-/i,/^sec-/i],_e="AWS4-HMAC-SHA256",Fs="AWS4-ECDSA-P256-SHA256",zr="AWS4-HMAC-SHA256-PAYLOAD",qr="UNSIGNED-PAYLOAD",xr=50,Hn="aws4_request",tu=604800,Gt={},De=[],ve=(t,e,n)=>`${t}/${e}/${n}/${Hn}`,eu=async(t,e,n,o,i)=>{let r=await Fr(t,e.secretAccessKey,e.accessKeyId),u=`${n}:${o}:${i}:${dt.toHex(r)}:${e.sessionToken}`;if(u in Gt)return Gt[u];De.push(u);while(De.length>xr)delete Gt[De.shift()];let E=`AWS4${e.secretAccessKey}`;for(let l of[n,o,i,Hn])E=await Fr(t,E,l);return Gt[u]=E},Hs=()=>{De.length=0,Object.keys(Gt).forEach((t)=>{delete Gt[t]})},Fr=(t,e,n)=>{let o=new t(e);return o.update(Dt.toUint8Array(n)),o.digest()},$n=({headers:t},e,n)=>{let o={};for(let i of Object.keys(t).sort()){if(t[i]==null)continue;let r=i.toLowerCase();if(r in br||e?.has(r)||kr.test(r)||jr.test(r)){if(!n||n&&!n.has(r))continue}o[r]=t[i].trim().replace(/\s+/g," ")}return o},Le=async({headers:t,body:e},n)=>{for(let o of Object.keys(t))if(o.toLowerCase()===Oe)return t[o];if(e==null)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";else if(typeof e==="string"||ArrayBuffer.isView(e)||Cs.isArrayBuffer(e)){let o=new n;return o.update(Dt.toUint8Array(e)),dt.toHex(await o.digest())}return qr};class nu{format(t){let e=[];for(let i of Object.keys(t)){let r=Dt.fromUtf8(i);e.push(Uint8Array.from([r.byteLength]),r,this.formatHeaderValue(t[i]))}let n=new Uint8Array(e.reduce((i,r)=>i+r.byteLength,0)),o=0;for(let i of e)n.set(i,o),o+=i.byteLength;return n}formatHeaderValue(t){switch(t.type){case"boolean":return Uint8Array.from([t.value?0:1]);case"byte":return Uint8Array.from([2,t.value]);case"short":let e=new DataView(new ArrayBuffer(3));return e.setUint8(0,3),e.setInt16(1,t.value,!1),new Uint8Array(e.buffer);case"integer":let n=new DataView(new ArrayBuffer(5));return n.setUint8(0,4),n.setInt32(1,t.value,!1),new Uint8Array(n.buffer);case"long":let o=new Uint8Array(9);return o[0]=5,o.set(t.value.bytes,1),o;case"binary":let i=new DataView(new ArrayBuffer(3+t.value.byteLength));i.setUint8(0,6),i.setUint16(1,t.value.byteLength,!1);let r=new Uint8Array(i.buffer);return r.set(t.value,3),r;case"string":let u=Dt.fromUtf8(t.value),E=new DataView(new ArrayBuffer(3+u.byteLength));E.setUint8(0,7),E.setUint16(1,u.byteLength,!1);let l=new Uint8Array(E.buffer);return l.set(u,3),l;case"timestamp":let y=new Uint8Array(9);return y[0]=8,y.set(Yn.fromNumber(t.value.valueOf()).bytes,1),y;case"uuid":if(!Ys.test(t.value))throw Error(`Invalid UUID received: ${t.value}`);let s=new Uint8Array(17);return s[0]=9,s.set(dt.fromHex(t.value.replace(/\-/g,"")),1),s}}}var Ys=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;class Yn{bytes;constructor(t){if(this.bytes=t,t.byteLength!==8)throw Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(t){if(t>9223372036854776000||t<-9223372036854776000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let e=new Uint8Array(8);for(let n=7,o=Math.abs(Math.round(t));n>-1&&o>0;n--,o/=256)e[n]=o;if(t<0)Hr(e);return new Yn(e)}valueOf(){let t=this.bytes.slice(0),e=t[0]&128;if(e)Hr(t);return parseInt(dt.toHex(t),16)*(e?-1:1)}toString(){return String(this.valueOf())}}function Hr(t){for(let e=0;e<8;e++)t[e]^=255;for(let e=7;e>-1;e--)if(t[e]++,t[e]!==0)break}var ou=(t,e)=>{t=t.toLowerCase();for(let n of Object.keys(e))if(t===n.toLowerCase())return!0;return!1},iu=(t,e={})=>{let{headers:n,query:o={}}=Yr.HttpRequest.clone(t);for(let i of Object.keys(n)){let r=i.toLowerCase();if(r.slice(0,6)==="x-amz-"&&!e.unhoistableHeaders?.has(r)||e.hoistableHeaders?.has(r))o[i]=n[i],delete n[i]}return{...t,headers:n,query:o}},Pn=(t)=>{t=Yr.HttpRequest.clone(t);for(let e of Object.keys(t.headers))if(Jr.indexOf(e.toLowerCase())>-1)delete t.headers[e];return t},ru=({query:t={}})=>{let e=[],n={};for(let o of Object.keys(t)){if(o.toLowerCase()===Wr)continue;let i=Ie.escapeUri(o);e.push(i);let r=t[o];if(typeof r==="string")n[i]=`${i}=${Ie.escapeUri(r)}`;else if(Array.isArray(r))n[i]=r.slice(0).reduce((u,E)=>u.concat([`${i}=${Ie.escapeUri(E)}`]),[]).sort().join("&")}return e.sort().map((o)=>n[o]).filter((o)=>o).join("&")},Gs=(t)=>Zs(t).toISOString().replace(/\.\d{3}Z$/,"Z"),Zs=(t)=>{if(typeof t==="number")return new Date(t*1000);if(typeof t==="string"){if(Number(t))return new Date(Number(t)*1000);return new Date(t)}return t};class Gn{service;regionProvider;credentialProvider;sha256;uriEscapePath;applyChecksum;constructor({applyChecksum:t,credentials:e,region:n,service:o,sha256:i,uriEscapePath:r=!0}){this.service=o,this.sha256=i,this.uriEscapePath=r,this.applyChecksum=typeof t==="boolean"?t:!0,this.regionProvider=Xr.normalizeProvider(n),this.credentialProvider=Xr.normalizeProvider(e)}createCanonicalRequest(t,e,n){let o=Object.keys(e).sort();return`${t.method}
|
|
130
|
+
`;import{Database as bl}from"bun:sqlite";import{drizzle as kl}from"drizzle-orm/bun-sqlite";import*as si from"sqlite-vec";import{existsSync as jl,mkdirSync as zl}from"fs";import{dirname as ql}from"path";function xl(t){si.load(t)}function gt(t){let e=t??_t(),n=ql(e);if(!jl(n))zl(n,{recursive:!0});let o=new bl(e);return xl(o),o.exec("PRAGMA journal_mode=WAL;"),o.exec("PRAGMA foreign_keys=ON;"),o.exec(li),o.exec(yi),kl(o,{schema:E})}var a=g(()=>{ii();zt();fi()});var ln=Q((ny)=>{var gi=(t)=>encodeURIComponent(t).replace(/[!'()*]/g,ty),ty=(t)=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,ey=(t)=>t.split("/").map(gi).join("/");ny.escapeUri=gi;ny.escapeUriPath=ey});var Ti=Q((uy)=>{var yn=ln();function ry(t){let e=[];for(let n of Object.keys(t).sort()){let o=t[n];if(n=yn.escapeUri(n),Array.isArray(o))for(let i=0,r=o.length;i<r;i++)e.push(`${n}=${yn.escapeUri(o[i])}`);else{let i=n;if(o||typeof o==="string")i+=`=${yn.escapeUri(o)}`;e.push(i)}}return e.join("&")}uy.buildQueryString=ry});function Ri(t){let{port:e,query:n}=t,{protocol:o,path:i,hostname:r}=t;if(o&&o.slice(-1)!==":")o+=":";if(e)r+=`:${e}`;if(i&&i.charAt(0)!=="/")i=`/${i}`;let u=n?di.buildQueryString(n):"";if(u&&u[0]!=="?")u=`?${u}`;let f="";if(t.username!=null||t.password!=null){let y=t.username??"",s=t.password??"";f=`${y}:${s}@`}let l="";if(t.fragment)l=`#${t.fragment}`;return`${o}//${f}${r}${i}${u}${l}`}var di;var Ai=g(()=>{di=k(Ti(),1)});var wi=async(t)=>{let e=t?.Bucket||"";if(typeof t.Bucket==="string")t.Bucket=e.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?"));if(gy(e)){if(t.ForcePathStyle===!0)throw Error("Path-style addressing cannot be used with ARN buckets")}else if(!sy(e)||e.indexOf(".")!==-1&&!String(t.Endpoint).startsWith("http:")||e.toLowerCase()!==e||e.length<3)t.ForcePathStyle=!0;if(t.DisableMultiRegionAccessPoints)t.disableMultiRegionAccessPoints=!0,t.DisableMRAP=!0;return t},fy,ly,yy,sy=(t)=>fy.test(t)&&!ly.test(t)&&!yy.test(t),gy=(t)=>{let[e,n,o,,,i]=t.split(":"),r=e==="arn"&&t.split(":").length>=6,u=Boolean(r&&n&&o&&i);if(r&&!u)throw Error(`Invalid ARN: ${t} was an invalid ARN.`);return u};var Ni=g(()=>{fy=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/,ly=/(\d+\.){3}\d+/,yy=/\.\./});var pi=g(()=>{Ni()});var Ii=(t,e,n,o=!1)=>{let i=async()=>{let r;if(o)r=n.clientContextParams?.[t]??n[t]??n[e];else r=n[t]??n[e];if(typeof r==="function")return r();return r};if(t==="credentialScope"||e==="CredentialScope")return async()=>{let r=typeof n.credentials==="function"?await n.credentials():n.credentials;return r?.credentialScope??r?.CredentialScope};if(t==="accountId"||e==="AccountId")return async()=>{let r=typeof n.credentials==="function"?await n.credentials():n.credentials;return r?.accountId??r?.AccountId};if(t==="endpoint"||e==="endpoint")return async()=>{if(n.isCustomEndpoint===!1)return;let r=await i();if(r&&typeof r==="object"){if("url"in r)return r.url.href;if("hostname"in r){let{protocol:u,hostname:f,port:l,path:y}=r;return`${u}//${f}${l?":"+l:""}${y}`}}return r};return i};var te=Q((Ay)=>{class Ht extends Error{name="ProviderError";tryNextLink;constructor(t,e=!0){let n,o=!0;if(typeof e==="boolean")n=void 0,o=e;else if(e!=null&&typeof e==="object")n=e.logger,o=e.tryNextLink??!0;super(t);this.tryNextLink=o,Object.setPrototypeOf(this,Ht.prototype),n?.debug?.(`@smithy/property-provider ${o?"->":"(!)"} ${t}`)}static from(t,e=!0){return Object.assign(new this(t.message,e),t)}}class sn extends Ht{name="CredentialsProviderError";constructor(t,e=!0){super(t,e);Object.setPrototypeOf(this,sn.prototype)}}class gn extends Ht{name="TokenProviderError";constructor(t,e=!0){super(t,e);Object.setPrototypeOf(this,gn.prototype)}}var Ty=(...t)=>async()=>{if(t.length===0)throw new Ht("No providers in chain");let e;for(let n of t)try{return await n()}catch(o){if(e=o,o?.tryNextLink)continue;throw o}throw e},dy=(t)=>()=>Promise.resolve(t),Ry=(t,e,n)=>{let o,i,r,u=!1,f=async()=>{if(!i)i=t();try{o=await i,r=!0,u=!1}finally{i=void 0}return o};if(e===void 0)return async(l)=>{if(!r||l?.forceRefresh)o=await f();return o};return async(l)=>{if(!r||l?.forceRefresh)o=await f();if(u)return o;if(n&&!n(o))return u=!0,o;if(e(o))return await f(),o;return o}};Ay.CredentialsProviderError=sn;Ay.ProviderError=Ht;Ay.TokenProviderError=gn;Ay.chain=Ty;Ay.fromStatic=dy;Ay.memoize=Ry});function we(t){try{let e=new Set(Array.from(t.match(/([A-Z_]){3,}/g)??[]));return e.delete("CONFIG"),e.delete("CONFIG_PREFIX_SEPARATOR"),e.delete("ENV"),[...e].join(", ")}catch(e){return t}}var _i,Di=(t,e)=>async()=>{try{let n=t(process.env,e);if(n===void 0)throw Error();return n}catch(n){throw new _i.CredentialsProviderError(n.message||`Not found in ENV: ${we(t.toString())}`,{logger:e?.logger})}};var Li=g(()=>{_i=k(te(),1)});import{homedir as Ly}from"os";import{sep as vy}from"path";var Tn,Oy=()=>{if(process&&process.geteuid)return`${process.geteuid()}`;return"DEFAULT"},Yt=()=>{let{HOME:t,USERPROFILE:e,HOMEPATH:n,HOMEDRIVE:o=`C:${vy}`}=process.env;if(t)return t;if(e)return e;if(n)return`${o}${n}`;let i=Oy();if(!Tn[i])Tn[i]=Ly();return Tn[i]};var ee=g(()=>{Tn={}});var vi=(t)=>t.profile||process.env.AWS_PROFILE||"default";var Oi=()=>{};var oe=Q(($y)=>{$y.HttpAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})($y.HttpAuthLocation||($y.HttpAuthLocation={}));$y.HttpApiKeyAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})($y.HttpApiKeyAuthLocation||($y.HttpApiKeyAuthLocation={}));$y.EndpointURLScheme=void 0;(function(t){t.HTTP="http",t.HTTPS="https"})($y.EndpointURLScheme||($y.EndpointURLScheme={}));$y.AlgorithmId=void 0;(function(t){t.MD5="md5",t.CRC32="crc32",t.CRC32C="crc32c",t.SHA1="sha1",t.SHA256="sha256"})($y.AlgorithmId||($y.AlgorithmId={}));var Sy=(t)=>{let e=[];if(t.sha256!==void 0)e.push({algorithmId:()=>$y.AlgorithmId.SHA256,checksumConstructor:()=>t.sha256});if(t.md5!=null)e.push({algorithmId:()=>$y.AlgorithmId.MD5,checksumConstructor:()=>t.md5});return{addChecksumAlgorithm(n){e.push(n)},checksumAlgorithms(){return e}}},Uy=(t)=>{let e={};return t.checksumAlgorithms().forEach((n)=>{e[n.algorithmId()]=n.checksumConstructor()}),e},hy=(t)=>{return Sy(t)},my=(t)=>{return Uy(t)};$y.FieldPosition=void 0;(function(t){t[t.HEADER=0]="HEADER",t[t.TRAILER=1]="TRAILER"})($y.FieldPosition||($y.FieldPosition={}));var ay="__smithy_context";$y.IniSectionType=void 0;(function(t){t.PROFILE="profile",t.SSO_SESSION="sso-session",t.SERVICES="services"})($y.IniSectionType||($y.IniSectionType={}));$y.RequestHandlerProtocol=void 0;(function(t){t.HTTP_0_9="http/0.9",t.HTTP_1_0="http/1.0",t.TDS_8_0="tds/8.0"})($y.RequestHandlerProtocol||($y.RequestHandlerProtocol={}));$y.SMITHY_CONTEXT_KEY=ay;$y.getDefaultClientConfiguration=hy;$y.resolveDefaultRuntimeConfig=my});var rt=".";var In,Si=(t)=>Object.entries(t).filter(([e])=>{let n=e.indexOf(rt);if(n===-1)return!1;return Object.values(In.IniSectionType).includes(e.substring(0,n))}).reduce((e,[n,o])=>{let i=n.indexOf(rt),r=n.substring(0,i)===In.IniSectionType.PROFILE?n.substring(i+1):n;return e[r]=o,e},{...t.default&&{default:t.default}});var Ui=g(()=>{In=k(oe(),1)});import{join as cy}from"path";var Xy="AWS_CONFIG_FILE",hi=()=>process.env[Xy]||cy(Yt(),".aws","config");var mi=g(()=>{ee()});import{join as Fy}from"path";var Hy="AWS_SHARED_CREDENTIALS_FILE",ai=()=>process.env[Hy]||Fy(Yt(),".aws","credentials");var $i=g(()=>{ee()});var Pi,Yy,Gy,_n=(t)=>{let e={},n,o;for(let i of t.split(/\r?\n/)){let r=i.split(/(^|\s)[;#]/)[0].trim();if(r[0]==="["&&r[r.length-1]==="]"){n=void 0,o=void 0;let f=r.substring(1,r.length-1),l=Yy.exec(f);if(l){let[,y,,s]=l;if(Object.values(Pi.IniSectionType).includes(y))n=[y,s].join(rt)}else n=f;if(Gy.includes(f))throw Error(`Found invalid profile name "${f}"`)}else if(n){let f=r.indexOf("=");if(![0,-1].includes(f)){let[l,y]=[r.substring(0,f).trim(),r.substring(f+1).trim()];if(y==="")o=l;else{if(o&&i.trimStart()===i)o=void 0;e[n]=e[n]||{};let s=o?[o,l].join(rt):l;e[n][s]=y}}}}return e};var Ci=g(()=>{Pi=k(oe(),1),Yy=/^([\w-]+)\s(["'])?([\w-@\+\.%:/]+)\2$/,Gy=["__proto__","profile __proto__"]});import{readFile as Zy}from"fs/promises";var Dn,Mi,Ln=(t,e)=>{if(Mi[t]!==void 0)return Mi[t];if(!Dn[t]||e?.ignoreCache)Dn[t]=Zy(t,"utf8");return Dn[t]};var ci=g(()=>{Dn={},Mi={}});import{join as Xi}from"path";var Fi=()=>({}),Hi=async(t={})=>{let{filepath:e=ai(),configFilepath:n=hi()}=t,o=Yt(),i="~/",r=e;if(e.startsWith("~/"))r=Xi(o,e.slice(2));let u=n;if(n.startsWith("~/"))u=Xi(o,n.slice(2));let f=await Promise.all([Ln(u,{ignoreCache:t.ignoreCache}).then(_n).then(Si).catch(Fi),Ln(r,{ignoreCache:t.ignoreCache}).then(_n).catch(Fi)]);return{configFile:f[0],credentialsFile:f[1]}};var Yi=g(()=>{Ui();mi();$i();ee();Ci();ci()});var Gi=()=>{};var Zi=()=>{};var Bi=()=>{};var vn=g(()=>{ee();Oi();Yi();Gi();Zi();Bi()});var Qi,Vi=(t,{preferredFile:e="config",...n}={})=>async()=>{let o=vi(n),{configFile:i,credentialsFile:r}=await Hi(n),u=r[o]||{},f=i[o]||{},l=e==="config"?{...u,...f}:{...f,...u};try{let s=t(l,e==="config"?i:r);if(s===void 0)throw Error();return s}catch(y){throw new Qi.CredentialsProviderError(y.message||`Not found in config files w/ profile [${o}]: ${we(t.toString())}`,{logger:n.logger})}};var Ji=g(()=>{vn();Qi=k(te(),1)});var Wi,By=(t)=>typeof t==="function",Ki=(t)=>By(t)?async()=>await t():Wi.fromStatic(t);var bi=g(()=>{Wi=k(te(),1)});var Ne,ki=({environmentVariableSelector:t,configFileSelector:e,default:n},o={})=>{let{signingName:i,logger:r}=o;return Ne.memoize(Ne.chain(Di(t,{signingName:i,logger:r}),Vi(e,o),Ki(n)))};var ji=g(()=>{Li();Ji();bi();Ne=k(te(),1)});var zi=g(()=>{ji()});var qi="AWS_ENDPOINT_URL",xi="endpoint_url",tr=(t)=>({environmentVariableSelector:(e)=>{let n=t.split(" ").map((r)=>r.toUpperCase()),o=e[[qi,...n].join("_")];if(o)return o;let i=e[qi];if(i)return i;return},configFileSelector:(e,n)=>{if(n&&e.services){let i=n[["services",e.services].join(rt)];if(i){let r=t.split(" ").map((f)=>f.toLowerCase()),u=i[[r.join("_"),xi].join(rt)];if(u)return u}}let o=e[xi];if(o)return o;return},default:void 0});var er=g(()=>{vn()});var nr=async(t)=>ki(tr(t??""))();var or=g(()=>{zi();er()});var ir=Q((Vy)=>{function Qy(t){let e={};if(t=t.replace(/^\?/,""),t)for(let n of t.split("&")){let[o,i=null]=n.split("=");if(o=decodeURIComponent(o),i)i=decodeURIComponent(i);if(!(o in e))e[o]=i;else if(Array.isArray(e[o]))e[o].push(i);else e[o]=[e[o],i]}return e}Vy.parseQueryString=Qy});var ur=Q((Ky)=>{var Wy=ir(),rr=(t)=>{if(typeof t==="string")return rr(new URL(t));let{hostname:e,pathname:n,port:o,protocol:i,search:r}=t,u;if(r)u=Wy.parseQueryString(r);return{hostname:e,port:o?parseInt(o):void 0,protocol:i,path:n,query:u}};Ky.parseUrl=rr});var On,Er=(t)=>{if(typeof t==="object"){if("url"in t){let e=On.parseUrl(t.url);if(t.headers){e.headers={};for(let[n,o]of Object.entries(t.headers))e.headers[n.toLowerCase()]=o.join(", ")}return e}return t}return On.parseUrl(t)};var Sn=g(()=>{On=k(ur(),1)});var fr=async(t,e,n,o)=>{if(!n.isCustomEndpoint){let u;if(n.serviceConfiguredEndpoint)u=await n.serviceConfiguredEndpoint();else u=await nr(n.serviceId);if(u)n.endpoint=()=>Promise.resolve(Er(u)),n.isCustomEndpoint=!0}let i=await ky(t,e,n);if(typeof n.endpointProvider!=="function")throw Error("config.endpointProvider is not set.");let r=n.endpointProvider(i,o);if(n.isCustomEndpoint&&n.endpoint){let u=await n.endpoint();if(u?.headers){r.headers??={};for(let[f,l]of Object.entries(u.headers))r.headers[f]=Array.isArray(l)?l:[l]}}return r},ky=async(t,e,n)=>{let o={},i=e?.getEndpointParameterInstructions?.()||{};for(let[r,u]of Object.entries(i))switch(u.type){case"staticContextParams":o[r]=u.value;break;case"contextParams":o[r]=t[u.name];break;case"clientContextParams":case"builtInParams":o[r]=await Ii(u.name,r,n,u.type!=="builtInParams")();break;case"operationContextParams":o[r]=u.get(t);break;default:throw Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(u))}if(Object.keys(i).length===0)Object.assign(o,n);if(String(n.serviceId).toLowerCase()==="s3")await wi(o);return o};var lr=g(()=>{pi();or();Sn()});var yr=g(()=>{lr();Sn()});var gr=Q((qy)=>{var sr=oe(),jy=(t)=>t[sr.SMITHY_CONTEXT_KEY]||(t[sr.SMITHY_CONTEXT_KEY]={}),zy=(t)=>{if(typeof t==="function")return t;let e=Promise.resolve(t);return()=>e};qy.getSmithyContext=jy;qy.normalizeProvider=zy});var Tr=()=>{};var Un=Q((us)=>{var es=oe(),ns=(t)=>{return{setHttpHandler(e){t.httpHandler=e},httpHandler(){return t.httpHandler},updateHttpClientConfig(e,n){t.httpHandler?.updateHttpClientConfig(e,n)},httpHandlerConfigs(){return t.httpHandler.httpHandlerConfigs()}}},os=(t)=>{return{httpHandler:t.httpHandler()}};class dr{name;kind;values;constructor({name:t,kind:e=es.FieldPosition.HEADER,values:n=[]}){this.name=t,this.kind=e,this.values=n}add(t){this.values.push(t)}set(t){this.values=t}remove(t){this.values=this.values.filter((e)=>e!==t)}toString(){return this.values.map((t)=>t.includes(",")||t.includes(" ")?`"${t}"`:t).join(", ")}get(){return this.values}}class Rr{entries={};encoding;constructor({fields:t=[],encoding:e="utf-8"}){t.forEach(this.setField.bind(this)),this.encoding=e}setField(t){this.entries[t.name.toLowerCase()]=t}getField(t){return this.entries[t.toLowerCase()]}removeField(t){delete this.entries[t.toLowerCase()]}getByType(t){return Object.values(this.entries).filter((e)=>e.kind===t)}}class pe{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(t){this.method=t.method||"GET",this.hostname=t.hostname||"localhost",this.port=t.port,this.query=t.query||{},this.headers=t.headers||{},this.body=t.body,this.protocol=t.protocol?t.protocol.slice(-1)!==":"?`${t.protocol}:`:t.protocol:"https:",this.path=t.path?t.path.charAt(0)!=="/"?`/${t.path}`:t.path:"/",this.username=t.username,this.password=t.password,this.fragment=t.fragment}static clone(t){let e=new pe({...t,headers:{...t.headers}});if(e.query)e.query=is(e.query);return e}static isInstance(t){if(!t)return!1;let e=t;return"method"in e&&"protocol"in e&&"hostname"in e&&"path"in e&&typeof e.query==="object"&&typeof e.headers==="object"}clone(){return pe.clone(this)}}function is(t){return Object.keys(t).reduce((e,n)=>{let o=t[n];return{...e,[n]:Array.isArray(o)?[...o]:o}},{})}class Ar{statusCode;reason;headers;body;constructor(t){this.statusCode=t.statusCode,this.reason=t.reason,this.headers=t.headers||{},this.body=t.body}static isInstance(t){if(!t)return!1;let e=t;return typeof e.statusCode==="number"&&typeof e.headers==="object"}}function rs(t){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(t)}us.Field=dr;us.Fields=Rr;us.HttpRequest=pe;us.HttpResponse=Ar;us.getHttpHandlerExtensionConfiguration=ns;us.isValidHostname=rs;us.resolveHttpHandlerRuntimeConfig=os});var wr=()=>{};var Nr=()=>{};var pr;var Ir=g(()=>{pr={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0}});var _r=g(()=>{wr();Ir();Nr()});var ew;var Dr=g(()=>{_r();ew={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:pr.name}});var Lr=()=>{};var vr=()=>{};var Or=g(()=>{yr();Tr();Dr();Lr();vr()});var Sr=()=>{};var Ur=()=>{};var hr=()=>{};var mr=()=>{};var $r=Q((As)=>{var ar={},hn={};for(let t=0;t<256;t++){let e=t.toString(16).toLowerCase();if(e.length===1)e=`0${e}`;ar[t]=e,hn[e]=t}function ds(t){if(t.length%2!==0)throw Error("Hex encoded strings must have an even number length");let e=new Uint8Array(t.length/2);for(let n=0;n<t.length;n+=2){let o=t.slice(n,n+2).toLowerCase();if(o in hn)e[n/2]=hn[o];else throw Error(`Cannot decode unrecognized sequence ${o} as hexadecimal`)}return e}function Rs(t){let e="";for(let n=0;n<t.byteLength;n++)e+=ar[t[n]];return e}As.fromHex=ds;As.toHex=Rs});var mn=Q((Is)=>{var ps=(t)=>typeof ArrayBuffer==="function"&&t instanceof ArrayBuffer||Object.prototype.toString.call(t)==="[object ArrayBuffer]";Is.isArrayBuffer=ps});var Pr=Q((Os)=>{var Ds=mn(),an=de("buffer"),Ls=(t,e=0,n=t.byteLength-e)=>{if(!Ds.isArrayBuffer(t))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof t} (${t})`);return an.Buffer.from(t,e,n)},vs=(t,e)=>{if(typeof t!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof t} (${t})`);return e?an.Buffer.from(t,e):an.Buffer.from(t)};Os.fromArrayBuffer=Ls;Os.fromString=vs});var cr=Q((as)=>{var Cr=Pr(),Mr=(t)=>{let e=Cr.fromString(t,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT)},hs=(t)=>{if(typeof t==="string")return Mr(t);if(ArrayBuffer.isView(t))return new Uint8Array(t.buffer,t.byteOffset,t.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(t)},ms=(t)=>{if(typeof t==="string")return t;if(typeof t!=="object"||typeof t.byteOffset!=="number"||typeof t.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return Cr.fromArrayBuffer(t.buffer,t.byteOffset,t.byteLength).toString("utf8")};as.fromUtf8=Mr;as.toUint8Array=hs;as.toUtf8=ms});var Zn=Q((Vs)=>{var Tt=$r(),Dt=cr(),Ms=mn(),Yr=Un(),Xr=gr(),Ie=ln(),Gr="X-Amz-Algorithm",Zr="X-Amz-Credential",Cn="X-Amz-Date",Br="X-Amz-SignedHeaders",Qr="X-Amz-Expires",Mn="X-Amz-Signature",cn="X-Amz-Security-Token",cs="X-Amz-Region-Set",Xn="authorization",Fn=Cn.toLowerCase(),Vr="date",Jr=[Xn,Fn,Vr],Wr=Mn.toLowerCase(),Oe="x-amz-content-sha256",Kr=cn.toLowerCase(),Xs="host",br={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0},kr=/^proxy-/,jr=/^sec-/,Fs=[/^proxy-/i,/^sec-/i],_e="AWS4-HMAC-SHA256",Hs="AWS4-ECDSA-P256-SHA256",zr="AWS4-HMAC-SHA256-PAYLOAD",qr="UNSIGNED-PAYLOAD",xr=50,Hn="aws4_request",tu=604800,Gt={},De=[],Le=(t,e,n)=>`${t}/${e}/${n}/${Hn}`,eu=async(t,e,n,o,i)=>{let r=await Fr(t,e.secretAccessKey,e.accessKeyId),u=`${n}:${o}:${i}:${Tt.toHex(r)}:${e.sessionToken}`;if(u in Gt)return Gt[u];De.push(u);while(De.length>xr)delete Gt[De.shift()];let f=`AWS4${e.secretAccessKey}`;for(let l of[n,o,i,Hn])f=await Fr(t,f,l);return Gt[u]=f},Ys=()=>{De.length=0,Object.keys(Gt).forEach((t)=>{delete Gt[t]})},Fr=(t,e,n)=>{let o=new t(e);return o.update(Dt.toUint8Array(n)),o.digest()},$n=({headers:t},e,n)=>{let o={};for(let i of Object.keys(t).sort()){if(t[i]==null)continue;let r=i.toLowerCase();if(r in br||e?.has(r)||kr.test(r)||jr.test(r)){if(!n||n&&!n.has(r))continue}o[r]=t[i].trim().replace(/\s+/g," ")}return o},ve=async({headers:t,body:e},n)=>{for(let o of Object.keys(t))if(o.toLowerCase()===Oe)return t[o];if(e==null)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";else if(typeof e==="string"||ArrayBuffer.isView(e)||Ms.isArrayBuffer(e)){let o=new n;return o.update(Dt.toUint8Array(e)),Tt.toHex(await o.digest())}return qr};class nu{format(t){let e=[];for(let i of Object.keys(t)){let r=Dt.fromUtf8(i);e.push(Uint8Array.from([r.byteLength]),r,this.formatHeaderValue(t[i]))}let n=new Uint8Array(e.reduce((i,r)=>i+r.byteLength,0)),o=0;for(let i of e)n.set(i,o),o+=i.byteLength;return n}formatHeaderValue(t){switch(t.type){case"boolean":return Uint8Array.from([t.value?0:1]);case"byte":return Uint8Array.from([2,t.value]);case"short":let e=new DataView(new ArrayBuffer(3));return e.setUint8(0,3),e.setInt16(1,t.value,!1),new Uint8Array(e.buffer);case"integer":let n=new DataView(new ArrayBuffer(5));return n.setUint8(0,4),n.setInt32(1,t.value,!1),new Uint8Array(n.buffer);case"long":let o=new Uint8Array(9);return o[0]=5,o.set(t.value.bytes,1),o;case"binary":let i=new DataView(new ArrayBuffer(3+t.value.byteLength));i.setUint8(0,6),i.setUint16(1,t.value.byteLength,!1);let r=new Uint8Array(i.buffer);return r.set(t.value,3),r;case"string":let u=Dt.fromUtf8(t.value),f=new DataView(new ArrayBuffer(3+u.byteLength));f.setUint8(0,7),f.setUint16(1,u.byteLength,!1);let l=new Uint8Array(f.buffer);return l.set(u,3),l;case"timestamp":let y=new Uint8Array(9);return y[0]=8,y.set(Yn.fromNumber(t.value.valueOf()).bytes,1),y;case"uuid":if(!Gs.test(t.value))throw Error(`Invalid UUID received: ${t.value}`);let s=new Uint8Array(17);return s[0]=9,s.set(Tt.fromHex(t.value.replace(/\-/g,"")),1),s}}}var Gs=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;class Yn{bytes;constructor(t){if(this.bytes=t,t.byteLength!==8)throw Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(t){if(t>9223372036854776000||t<-9223372036854776000)throw Error(`${t} is too large (or, if negative, too small) to represent as an Int64`);let e=new Uint8Array(8);for(let n=7,o=Math.abs(Math.round(t));n>-1&&o>0;n--,o/=256)e[n]=o;if(t<0)Hr(e);return new Yn(e)}valueOf(){let t=this.bytes.slice(0),e=t[0]&128;if(e)Hr(t);return parseInt(Tt.toHex(t),16)*(e?-1:1)}toString(){return String(this.valueOf())}}function Hr(t){for(let e=0;e<8;e++)t[e]^=255;for(let e=7;e>-1;e--)if(t[e]++,t[e]!==0)break}var ou=(t,e)=>{t=t.toLowerCase();for(let n of Object.keys(e))if(t===n.toLowerCase())return!0;return!1},iu=(t,e={})=>{let{headers:n,query:o={}}=Yr.HttpRequest.clone(t);for(let i of Object.keys(n)){let r=i.toLowerCase();if(r.slice(0,6)==="x-amz-"&&!e.unhoistableHeaders?.has(r)||e.hoistableHeaders?.has(r))o[i]=n[i],delete n[i]}return{...t,headers:n,query:o}},Pn=(t)=>{t=Yr.HttpRequest.clone(t);for(let e of Object.keys(t.headers))if(Jr.indexOf(e.toLowerCase())>-1)delete t.headers[e];return t},ru=({query:t={}})=>{let e=[],n={};for(let o of Object.keys(t)){if(o.toLowerCase()===Wr)continue;let i=Ie.escapeUri(o);e.push(i);let r=t[o];if(typeof r==="string")n[i]=`${i}=${Ie.escapeUri(r)}`;else if(Array.isArray(r))n[i]=r.slice(0).reduce((u,f)=>u.concat([`${i}=${Ie.escapeUri(f)}`]),[]).sort().join("&")}return e.sort().map((o)=>n[o]).filter((o)=>o).join("&")},Zs=(t)=>Bs(t).toISOString().replace(/\.\d{3}Z$/,"Z"),Bs=(t)=>{if(typeof t==="number")return new Date(t*1000);if(typeof t==="string"){if(Number(t))return new Date(Number(t)*1000);return new Date(t)}return t};class Gn{service;regionProvider;credentialProvider;sha256;uriEscapePath;applyChecksum;constructor({applyChecksum:t,credentials:e,region:n,service:o,sha256:i,uriEscapePath:r=!0}){this.service=o,this.sha256=i,this.uriEscapePath=r,this.applyChecksum=typeof t==="boolean"?t:!0,this.regionProvider=Xr.normalizeProvider(n),this.credentialProvider=Xr.normalizeProvider(e)}createCanonicalRequest(t,e,n){let o=Object.keys(e).sort();return`${t.method}
|
|
131
131
|
${this.getCanonicalPath(t)}
|
|
132
132
|
${ru(t)}
|
|
133
133
|
${o.map((i)=>`${i}:${e[i]}`).join(`
|
|
@@ -137,8 +137,8 @@ ${o.join(";")}
|
|
|
137
137
|
${n}`}async createStringToSign(t,e,n,o){let i=new this.sha256;i.update(Dt.toUint8Array(n));let r=await i.digest();return`${o}
|
|
138
138
|
${t}
|
|
139
139
|
${e}
|
|
140
|
-
${
|
|
141
|
-
`);return this.signString(v,{signingDate:n,signingRegion:u,signingService:r})}async signMessage(t,{signingDate:e=new Date,signingRegion:n,signingService:o}){return this.signEvent({headers:this.headerFormatter.format(t.message.headers),payload:t.message.body},{signingDate:e,signingRegion:n,signingService:o,priorSignature:t.priorSignature}).then((r)=>{return{message:t.message,signature:r}})}async signString(t,{signingDate:e=new Date,signingRegion:n,signingService:o}={}){let i=await this.credentialProvider();this.validateResolvedCredentials(i);let r=n??await this.regionProvider(),{shortDate:u}=this.formatDate(e),E=new this.sha256(await this.getSigningKey(i,r,u,o));return E.update(Dt.toUint8Array(t)),dt.toHex(await E.digest())}async signRequest(t,{signingDate:e=new Date,signableHeaders:n,unsignableHeaders:o,signingRegion:i,signingService:r}={}){let u=await this.credentialProvider();this.validateResolvedCredentials(u);let E=i??await this.regionProvider(),l=Pn(t),{longDate:y,shortDate:s}=this.formatDate(e),T=ve(s,E,r??this.service);if(l.headers[Fn]=y,u.sessionToken)l.headers[Kr]=u.sessionToken;let R=await Le(l,this.sha256);if(!ou(Oe,l.headers)&&this.applyChecksum)l.headers[Oe]=R;let v=$n(l,o,n),O=await this.getSignature(y,T,this.getSigningKey(u,E,s,r),this.createCanonicalRequest(l,v,R));return l.headers[Xn]=`${_e} Credential=${u.accessKeyId}/${T}, SignedHeaders=${this.getCanonicalHeaderList(v)}, Signature=${O}`,l}async getSignature(t,e,n,o){let i=await this.createStringToSign(t,e,o,_e),r=new this.sha256(await n);return r.update(Dt.toUint8Array(i)),dt.toHex(await r.digest())}getSigningKey(t,e,n,o){return eu(this.sha256,t,n,e,o||this.service)}}var Bs={SignatureV4a:null};Qs.ALGORITHM_IDENTIFIER=_e;Qs.ALGORITHM_IDENTIFIER_V4A=Fs;Qs.ALGORITHM_QUERY_PARAM=Gr;Qs.ALWAYS_UNSIGNABLE_HEADERS=br;Qs.AMZ_DATE_HEADER=Fn;Qs.AMZ_DATE_QUERY_PARAM=Cn;Qs.AUTH_HEADER=Xn;Qs.CREDENTIAL_QUERY_PARAM=Zr;Qs.DATE_HEADER=Vr;Qs.EVENT_ALGORITHM_IDENTIFIER=zr;Qs.EXPIRES_QUERY_PARAM=Qr;Qs.GENERATED_HEADERS=Jr;Qs.HOST_HEADER=cs;Qs.KEY_TYPE_IDENTIFIER=Hn;Qs.MAX_CACHE_SIZE=xr;Qs.MAX_PRESIGNED_TTL=tu;Qs.PROXY_HEADER_PATTERN=kr;Qs.REGION_SET_PARAM=Ms;Qs.SEC_HEADER_PATTERN=jr;Qs.SHA256_HEADER=Oe;Qs.SIGNATURE_HEADER=Wr;Qs.SIGNATURE_QUERY_PARAM=Mn;Qs.SIGNED_HEADERS_QUERY_PARAM=Br;Qs.SignatureV4=uu;Qs.SignatureV4Base=Gn;Qs.TOKEN_HEADER=Kr;Qs.TOKEN_QUERY_PARAM=cn;Qs.UNSIGNABLE_PATTERNS=Xs;Qs.UNSIGNED_PAYLOAD=qr;Qs.clearCredentialCache=Hs;Qs.createScope=ve;Qs.getCanonicalHeaders=$n;Qs.getCanonicalQuery=ru;Qs.getPayloadHash=Le;Qs.getSigningKey=eu;Qs.hasHeader=ou;Qs.moveHeadersToQuery=iu;Qs.prepareRequest=Pn;Qs.signatureV4aContainer=Bs});var Se="X-Amz-S3session-Token",Bn;var fu=g(()=>{Bn=Se.toLowerCase()});function Eu(t){return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,expiration:t.expiration}}function lu(t,e){let n=setTimeout(()=>{throw Error("SignatureV4S3Express credential override was created but not called.")},10),o=t.credentialProvider,i=()=>{return clearTimeout(n),t.credentialProvider=o,Promise.resolve(e)};t.credentialProvider=i}var yu,Ue;var su=g(()=>{fu();yu=k(Zn(),1);Ue=class Ue extends yu.SignatureV4{async signWithCredentials(t,e,n){let o=Eu(e);t.headers[Bn]=e.sessionToken;let i=this;return lu(i,o),i.signRequest(t,n??{})}async presignWithCredentials(t,e,n){let o=Eu(e);return delete t.headers[Bn],t.headers[Se]=e.sessionToken,t.query=t.query??{},t.query[Se]=e.sessionToken,lu(this,o),this.presign(t,n)}}});var gu=g(()=>{su()});var du=()=>{};var Tu=()=>{};var Ru=()=>{};var Au=g(()=>{Sr();Ur();hr();mr();gu();du();Tu();Ru()});var ie;var Qn=g(()=>{ie={CrtSignerV4:null}});class Jn{sigv4aSigner;sigv4Signer;signerOptions;static sigv4aDependency(){if(typeof ie.CrtSignerV4==="function")return"crt";else if(typeof Vn.signatureV4aContainer.SignatureV4a==="function")return"js";return"none"}constructor(t){this.sigv4Signer=new Ue(t),this.signerOptions=t}async sign(t,e={}){if(e.signingRegion==="*")return this.getSigv4aSigner().sign(t,e);return this.sigv4Signer.sign(t,e)}async signWithCredentials(t,e,n={}){if(n.signingRegion==="*"){let o=this.getSigv4aSigner(),i=ie.CrtSignerV4;if(i&&o instanceof i)return o.signWithCredentials(t,e,n);else throw Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.signWithCredentials(t,e,n)}async presign(t,e={}){if(e.signingRegion==="*"){let n=this.getSigv4aSigner(),o=ie.CrtSignerV4;if(o&&n instanceof o)return n.presign(t,e);else throw Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.presign(t,e)}async presignWithCredentials(t,e,n={}){if(n.signingRegion==="*")throw Error("Method presignWithCredentials is not supported for [signingRegion=*].");return this.sigv4Signer.presignWithCredentials(t,e,n)}getSigv4aSigner(){if(!this.sigv4aSigner){let t=ie.CrtSignerV4,e=Vn.signatureV4aContainer.SignatureV4a;if(this.signerOptions.runtime==="node"){if(!t&&!e)throw Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");if(t&&typeof t==="function")this.sigv4aSigner=new t({...this.signerOptions,signingAlgorithm:1});else if(e&&typeof e==="function")this.sigv4aSigner=new e({...this.signerOptions});else throw Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt")}else{if(!e||typeof e!=="function")throw Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");this.sigv4aSigner=new e({...this.signerOptions})}}return this.sigv4aSigner}}var Vn;var wu=g(()=>{Au();Qn();Vn=k(Zn(),1)});var Nu=g(()=>{wu();Qn()});var pu="UNSIGNED-PAYLOAD",Iu="X-Amz-Content-Sha256";class he{signer;constructor(t){let e={service:t.signingName||t.service||"s3",uriEscapePath:t.uriEscapePath||!1,applyChecksum:t.applyChecksum||!1,...t};this.signer=new Jn(e)}presign(t,{unsignableHeaders:e=new Set,hoistableHeaders:n=new Set,unhoistableHeaders:o=new Set,...i}={}){return this.prepareRequest(t,{unsignableHeaders:e,unhoistableHeaders:o,hoistableHeaders:n}),this.signer.presign(t,{expiresIn:900,unsignableHeaders:e,unhoistableHeaders:o,...i})}presignWithCredentials(t,e,{unsignableHeaders:n=new Set,hoistableHeaders:o=new Set,unhoistableHeaders:i=new Set,...r}={}){return this.prepareRequest(t,{unsignableHeaders:n,unhoistableHeaders:i,hoistableHeaders:o}),this.signer.presignWithCredentials(t,e,{expiresIn:900,unsignableHeaders:n,unhoistableHeaders:i,...r})}prepareRequest(t,{unsignableHeaders:e=new Set,unhoistableHeaders:n=new Set,hoistableHeaders:o=new Set}={}){e.add("content-type"),Object.keys(t.headers).map((E)=>E.toLowerCase()).filter((E)=>E.startsWith("x-amz-server-side-encryption")).forEach((E)=>{if(!o.has(E))n.add(E)}),t.headers[Iu]=pu;let i=t.headers.host,r=t.port,u=`${t.hostname}${t.port!=null?":"+r:""}`;if(!i||i===t.hostname&&t.port!=null)t.headers.host=u}}var Wn=g(()=>{Nu()});var _u,Du=async(t,e,n={})=>{let o,i;if(typeof t.config.endpointProvider==="function"){let R=(await Er(e.input,e.constructor,t.config)).properties?.authSchemes?.[0];if(R?.name==="sigv4a")i=R?.signingRegionSet?.join(",");else i=R?.signingRegion;o=new he({...t.config,signingName:R?.signingName,region:async()=>i})}else o=new he(t.config);let r=(T,R)=>async(v)=>{let{request:O}=v;if(!_u.HttpRequest.isInstance(O))throw Error("Request to be presigned is not an valid HTTP request.");delete O.headers["amz-sdk-invocation-id"],delete O.headers["amz-sdk-request"],delete O.headers["x-amz-user-agent"];let C,M={...n,signingRegion:n.signingRegion??R.signing_region??i,signingService:n.signingService??R.signing_service};if(R.s3ExpressIdentity)C=await o.presignWithCredentials(O,R.s3ExpressIdentity,M);else C=await o.presign(O,M);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:C}}},u="presignInterceptMiddleware",E=t.middlewareStack.clone();E.addRelativeTo(r,{name:u,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let l=e.resolveMiddleware(E,t.config,{}),{output:y}=await l({input:e.input}),{presigned:s}=y;return Ri(s)};var vu=g(()=>{Ai();Or();Wn();_u=k(Un(),1)});var Lu=g(()=>{vu();Wn()});import{S3Client as mg,PutObjectCommand as ag,GetObjectCommand as Ou,DeleteObjectCommand as $g,CopyObjectCommand as Pg,ListObjectsV2Command as Cg,HeadObjectCommand as Mg,ListObjectVersionsCommand as cg,GetBucketVersioningCommand as Xg,PutBucketVersioningCommand as Fg}from"@aws-sdk/client-s3";class Tt{client;bucket;versioningEnabled=!1;constructor(t){this.bucket=t.bucket,this.client=new mg({region:t.region,endpoint:t.endpoint,credentials:{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey},forcePathStyle:!0}),this.versioningEnabled=t.versioningEnabled??!1}async putObject(t,e,n,o){let i=await this.client.send(new ag({Bucket:this.bucket,Key:t,Body:typeof e==="string"?Buffer.from(e):e,Metadata:n,...o&&{ContentType:o}}));return{etag:i.ETag,versionId:i.VersionId}}async getObject(t,e){let n=await this.client.send(new Ou({Bucket:this.bucket,Key:t,...e&&{VersionId:e}}));return{body:await n.Body.transformToByteArray(),contentType:n.ContentType,size:n.ContentLength,versionId:n.VersionId,etag:n.ETag}}async deleteObject(t){await this.client.send(new $g({Bucket:this.bucket,Key:t}))}async copyObject(t,e){let n=await this.client.send(new Pg({Bucket:this.bucket,CopySource:`${this.bucket}/${t}`,Key:e}));return{etag:n.CopyObjectResult?.ETag,versionId:n.VersionId}}async listObjects(t,e){let n=await this.client.send(new Cg({Bucket:this.bucket,Prefix:t,...e?.delimiter&&{Delimiter:e.delimiter}}));return{objects:(n.Contents??[]).map((o)=>({key:o.Key,size:o.Size??0,lastModified:o.LastModified??new Date,etag:o.ETag})),prefixes:(n.CommonPrefixes??[]).map((o)=>o.Prefix)}}async headObject(t){let e=await this.client.send(new Mg({Bucket:this.bucket,Key:t}));return{contentType:e.ContentType,size:e.ContentLength??0,lastModified:e.LastModified,etag:e.ETag,versionId:e.VersionId}}async listObjectVersions(t){return((await this.client.send(new cg({Bucket:this.bucket,Prefix:t}))).Versions??[]).filter((n)=>n.Key===t).map((n)=>({versionId:n.VersionId,lastModified:n.LastModified??new Date,size:n.Size??0,isLatest:n.IsLatest??!1}))}async checkVersioningEnabled(){try{return(await this.client.send(new Xg({Bucket:this.bucket}))).Status==="Enabled"}catch{return!1}}async enableVersioning(){try{return await this.client.send(new Fg({Bucket:this.bucket,VersioningConfiguration:{Status:"Enabled"}})),this.versioningEnabled=!0,!0}catch{return!1}}async getPresignedUrl(t,e=86400,n){let o=new Ou({Bucket:this.bucket,Key:t,...n&&{ResponseContentType:n}});return Du(this.client,o,{expiresIn:e})}}var Su=g(()=>{Lu()});var Uu=g(()=>{Su()});var ut,U,j,ft,re,z;var V=g(()=>{ut=class ut extends Error{code;suggestion;constructor(t,e,n){super(e);this.name=this.constructor.name,this.code=t,this.suggestion=n}toJSON(){return{error:this.code,message:this.message,...this.suggestion&&{suggestion:this.suggestion}}}};U=class U extends ut{path;constructor(t,e){super("NOT_FOUND",t,e?.suggestion);this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};j=class j extends ut{requiredRole;yourRole;constructor(t,e){super("PERMISSION_DENIED",t,e?.suggestion);this.requiredRole=e?.requiredRole,this.yourRole=e?.yourRole}toJSON(){return{...super.toJSON(),...this.requiredRole&&{required_role:this.requiredRole},...this.yourRole&&{your_role:this.yourRole}}}};ft=class ft extends ut{path;constructor(t,e){super("EDIT_CONFLICT",t,e?.suggestion);this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};re=class re extends ut{path;constructor(t,e){super("INDEXING_IN_PROGRESS",t,e?.suggestion??"Try again in a moment");this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};z=class z extends ut{field;constructor(t,e){super("VALIDATION_ERROR",t,e?.suggestion);this.field=e?.field}toJSON(){return{...super.toJSON(),...this.field&&{field:this.field}}}}});import{eq as hu,and as Hg}from"drizzle-orm";function ue(t){return Yg[t]??"admin"}function Et(t,e,n){return t.select().from(f.driveMembers).where(Hg(hu(f.driveMembers.driveId,n),hu(f.driveMembers.userId,e))).get()?.role??null}function fe(t,e){let n=Et(t,e.userId,e.driveId);if(!n)throw new j("You do not have access to this drive",{requiredRole:e.requiredRole,yourRole:"none",suggestion:"Request access from the drive admin"});if(mu[n]<mu[e.requiredRole])throw new j(`This operation requires '${e.requiredRole}' role, but you have '${n}'`,{requiredRole:e.requiredRole,yourRole:n,suggestion:e.requiredRole==="editor"?"Ask a drive admin to upgrade your role to editor":"Ask a drive admin to upgrade your role"})}var mu,Yg;var me=g(()=>{a();V();mu={viewer:0,editor:1,admin:2},Yg={ls:"viewer",cat:"viewer",tail:"viewer",stat:"viewer",grep:"viewer",fts:"viewer",search:"viewer","vec-search":"viewer",log:"viewer",diff:"viewer",recent:"viewer",tree:"viewer",glob:"viewer","signed-url":"viewer",write:"editor",edit:"editor",append:"editor",rm:"editor",mv:"editor",cp:"editor",revert:"editor",reindex:"admin","comment-add":"editor","comment-list":"viewer","comment-get":"viewer","comment-update":"editor","comment-delete":"editor","comment-resolve":"editor"}});function au(t){let e=t;if(!e.startsWith("/"))e="/"+e;if(e.length>1&&e.endsWith("/"))e=e.slice(0,-1);return e}function Rt(t){let e=t;if(!e.startsWith("/"))e="/"+e;if(!e.endsWith("/"))e+="/";return e}function $u(t){return t.startsWith("/")?t.slice(1):t}import{eq as Zt,and as Kn,sql as Gg}from"drizzle-orm";function I(t,e,n){let o=$u(n);return`${t}/drives/${e}/${o}`}async function bn(t,e){return(t.db.select({maxVersion:Gg`MAX(version)`}).from(f.fileVersions).where(Kn(Zt(f.fileVersions.path,e),Zt(f.fileVersions.driveId,t.driveId))).get()?.maxVersion??0)+1}async function Y(t,e){let n=await bn(t,e.path),o=new Date;t.db.insert(f.fileVersions).values({path:e.path,driveId:t.driveId,version:n,s3VersionId:e.s3VersionId,author:t.userId,operation:e.operation,message:e.message??null,diffSummary:e.diffSummary??null,size:e.size??null,etag:e.etag??null,createdAt:o}).run();let i=t.db.select().from(f.files).where(Kn(Zt(f.files.path,e.path),Zt(f.files.driveId,t.driveId))).get();if(i)t.db.update(f.files).set({size:e.size??i.size,contentType:e.contentType??i.contentType,author:t.userId,currentVersionId:String(n),modifiedAt:o,isDeleted:e.operation==="delete"}).where(Kn(Zt(f.files.path,e.path),Zt(f.files.driveId,t.driveId))).run();else t.db.insert(f.files).values({path:e.path,driveId:t.driveId,size:e.size??0,contentType:e.contentType??null,author:t.userId,currentVersionId:String(n),createdAt:o,modifiedAt:o,isDeleted:e.operation==="delete"}).run();return n}var X=g(()=>{a()});function lt(t){let e=t.split(".").pop()?.toLowerCase()??"";return Zg[e]??"application/octet-stream"}var Zg;var Bt=g(()=>{Zg={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",ico:"image/x-icon",pdf:"application/pdf",txt:"text/plain",md:"text/markdown",mdx:"text/markdown",html:"text/html",css:"text/css",csv:"text/csv",xml:"application/xml",json:"application/json",yaml:"application/x-yaml",yml:"application/x-yaml",toml:"application/toml",ts:"text/plain",tsx:"text/plain",js:"text/javascript",jsx:"text/javascript",py:"text/x-python",rb:"text/x-ruby",rs:"text/x-rust",go:"text/x-go",java:"text/x-java",c:"text/x-c",cpp:"text/x-c++",h:"text/x-c",hpp:"text/x-c++",sh:"text/x-shellscript",sql:"text/x-sql",graphql:"text/x-graphql",zip:"application/zip",tar:"application/x-tar",gz:"application/gzip"}});function kn(t){return t.$client}function J(t,e){let n=kn(t);n.prepare("DELETE FROM files_fts WHERE path = ? AND drive_id = ?").run(e.path,e.driveId),n.prepare("INSERT INTO files_fts(path, content, drive_id) VALUES (?, ?, ?)").run(e.path,e.content,e.driveId)}function ae(t,e){kn(t).prepare("DELETE FROM files_fts WHERE path = ? AND drive_id = ?").run(e.path,e.driveId)}function $e(t,e){let n=kn(t),o,i;if(e.pathPrefix)o=`
|
|
140
|
+
${Tt.toHex(r)}`}getCanonicalPath({path:t}){if(this.uriEscapePath){let e=[];for(let i of t.split("/")){if(i?.length===0)continue;if(i===".")continue;if(i==="..")e.pop();else e.push(i)}let n=`${t?.startsWith("/")?"/":""}${e.join("/")}${e.length>0&&t?.endsWith("/")?"/":""}`;return Ie.escapeUri(n).replace(/%2F/g,"/")}return t}validateResolvedCredentials(t){if(typeof t!=="object"||typeof t.accessKeyId!=="string"||typeof t.secretAccessKey!=="string")throw Error("Resolved credential object is not valid")}formatDate(t){let e=Zs(t).replace(/[\-:]/g,"");return{longDate:e,shortDate:e.slice(0,8)}}getCanonicalHeaderList(t){return Object.keys(t).sort().join(";")}}class uu extends Gn{headerFormatter=new nu;constructor({applyChecksum:t,credentials:e,region:n,service:o,sha256:i,uriEscapePath:r=!0}){super({applyChecksum:t,credentials:e,region:n,service:o,sha256:i,uriEscapePath:r})}async presign(t,e={}){let{signingDate:n=new Date,expiresIn:o=3600,unsignableHeaders:i,unhoistableHeaders:r,signableHeaders:u,hoistableHeaders:f,signingRegion:l,signingService:y}=e,s=await this.credentialProvider();this.validateResolvedCredentials(s);let d=l??await this.regionProvider(),{longDate:R,shortDate:L}=this.formatDate(n);if(o>tu)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");let O=Le(L,d,y??this.service),C=iu(Pn(t),{unhoistableHeaders:r,hoistableHeaders:f});if(s.sessionToken)C.query[cn]=s.sessionToken;C.query[Gr]=_e,C.query[Zr]=`${s.accessKeyId}/${O}`,C.query[Cn]=R,C.query[Qr]=o.toString(10);let M=$n(C,i,u);return C.query[Br]=this.getCanonicalHeaderList(M),C.query[Mn]=await this.getSignature(R,O,this.getSigningKey(s,d,L,y),this.createCanonicalRequest(C,M,await ve(t,this.sha256))),C}async sign(t,e){if(typeof t==="string")return this.signString(t,e);else if(t.headers&&t.payload)return this.signEvent(t,e);else if(t.message)return this.signMessage(t,e);else return this.signRequest(t,e)}async signEvent({headers:t,payload:e},{signingDate:n=new Date,priorSignature:o,signingRegion:i,signingService:r}){let u=i??await this.regionProvider(),{shortDate:f,longDate:l}=this.formatDate(n),y=Le(f,u,r??this.service),s=await ve({headers:{},body:e},this.sha256),d=new this.sha256;d.update(t);let R=Tt.toHex(await d.digest()),L=[zr,l,y,o,R,s].join(`
|
|
141
|
+
`);return this.signString(L,{signingDate:n,signingRegion:u,signingService:r})}async signMessage(t,{signingDate:e=new Date,signingRegion:n,signingService:o}){return this.signEvent({headers:this.headerFormatter.format(t.message.headers),payload:t.message.body},{signingDate:e,signingRegion:n,signingService:o,priorSignature:t.priorSignature}).then((r)=>{return{message:t.message,signature:r}})}async signString(t,{signingDate:e=new Date,signingRegion:n,signingService:o}={}){let i=await this.credentialProvider();this.validateResolvedCredentials(i);let r=n??await this.regionProvider(),{shortDate:u}=this.formatDate(e),f=new this.sha256(await this.getSigningKey(i,r,u,o));return f.update(Dt.toUint8Array(t)),Tt.toHex(await f.digest())}async signRequest(t,{signingDate:e=new Date,signableHeaders:n,unsignableHeaders:o,signingRegion:i,signingService:r}={}){let u=await this.credentialProvider();this.validateResolvedCredentials(u);let f=i??await this.regionProvider(),l=Pn(t),{longDate:y,shortDate:s}=this.formatDate(e),d=Le(s,f,r??this.service);if(l.headers[Fn]=y,u.sessionToken)l.headers[Kr]=u.sessionToken;let R=await ve(l,this.sha256);if(!ou(Oe,l.headers)&&this.applyChecksum)l.headers[Oe]=R;let L=$n(l,o,n),O=await this.getSignature(y,d,this.getSigningKey(u,f,s,r),this.createCanonicalRequest(l,L,R));return l.headers[Xn]=`${_e} Credential=${u.accessKeyId}/${d}, SignedHeaders=${this.getCanonicalHeaderList(L)}, Signature=${O}`,l}async getSignature(t,e,n,o){let i=await this.createStringToSign(t,e,o,_e),r=new this.sha256(await n);return r.update(Dt.toUint8Array(i)),Tt.toHex(await r.digest())}getSigningKey(t,e,n,o){return eu(this.sha256,t,n,e,o||this.service)}}var Qs={SignatureV4a:null};Vs.ALGORITHM_IDENTIFIER=_e;Vs.ALGORITHM_IDENTIFIER_V4A=Hs;Vs.ALGORITHM_QUERY_PARAM=Gr;Vs.ALWAYS_UNSIGNABLE_HEADERS=br;Vs.AMZ_DATE_HEADER=Fn;Vs.AMZ_DATE_QUERY_PARAM=Cn;Vs.AUTH_HEADER=Xn;Vs.CREDENTIAL_QUERY_PARAM=Zr;Vs.DATE_HEADER=Vr;Vs.EVENT_ALGORITHM_IDENTIFIER=zr;Vs.EXPIRES_QUERY_PARAM=Qr;Vs.GENERATED_HEADERS=Jr;Vs.HOST_HEADER=Xs;Vs.KEY_TYPE_IDENTIFIER=Hn;Vs.MAX_CACHE_SIZE=xr;Vs.MAX_PRESIGNED_TTL=tu;Vs.PROXY_HEADER_PATTERN=kr;Vs.REGION_SET_PARAM=cs;Vs.SEC_HEADER_PATTERN=jr;Vs.SHA256_HEADER=Oe;Vs.SIGNATURE_HEADER=Wr;Vs.SIGNATURE_QUERY_PARAM=Mn;Vs.SIGNED_HEADERS_QUERY_PARAM=Br;Vs.SignatureV4=uu;Vs.SignatureV4Base=Gn;Vs.TOKEN_HEADER=Kr;Vs.TOKEN_QUERY_PARAM=cn;Vs.UNSIGNABLE_PATTERNS=Fs;Vs.UNSIGNED_PAYLOAD=qr;Vs.clearCredentialCache=Ys;Vs.createScope=Le;Vs.getCanonicalHeaders=$n;Vs.getCanonicalQuery=ru;Vs.getPayloadHash=ve;Vs.getSigningKey=eu;Vs.hasHeader=ou;Vs.moveHeadersToQuery=iu;Vs.prepareRequest=Pn;Vs.signatureV4aContainer=Qs});var Se="X-Amz-S3session-Token",Bn;var Eu=g(()=>{Bn=Se.toLowerCase()});function fu(t){return{accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,expiration:t.expiration}}function lu(t,e){let n=setTimeout(()=>{throw Error("SignatureV4S3Express credential override was created but not called.")},10),o=t.credentialProvider,i=()=>{return clearTimeout(n),t.credentialProvider=o,Promise.resolve(e)};t.credentialProvider=i}var yu,Ue;var su=g(()=>{Eu();yu=k(Zn(),1);Ue=class Ue extends yu.SignatureV4{async signWithCredentials(t,e,n){let o=fu(e);t.headers[Bn]=e.sessionToken;let i=this;return lu(i,o),i.signRequest(t,n??{})}async presignWithCredentials(t,e,n){let o=fu(e);return delete t.headers[Bn],t.headers[Se]=e.sessionToken,t.query=t.query??{},t.query[Se]=e.sessionToken,lu(this,o),this.presign(t,n)}}});var gu=g(()=>{su()});var Tu=()=>{};var du=()=>{};var Ru=()=>{};var Au=g(()=>{Sr();Ur();hr();mr();gu();Tu();du();Ru()});var ie;var Qn=g(()=>{ie={CrtSignerV4:null}});class Jn{sigv4aSigner;sigv4Signer;signerOptions;static sigv4aDependency(){if(typeof ie.CrtSignerV4==="function")return"crt";else if(typeof Vn.signatureV4aContainer.SignatureV4a==="function")return"js";return"none"}constructor(t){this.sigv4Signer=new Ue(t),this.signerOptions=t}async sign(t,e={}){if(e.signingRegion==="*")return this.getSigv4aSigner().sign(t,e);return this.sigv4Signer.sign(t,e)}async signWithCredentials(t,e,n={}){if(n.signingRegion==="*"){let o=this.getSigv4aSigner(),i=ie.CrtSignerV4;if(i&&o instanceof i)return o.signWithCredentials(t,e,n);else throw Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.signWithCredentials(t,e,n)}async presign(t,e={}){if(e.signingRegion==="*"){let n=this.getSigv4aSigner(),o=ie.CrtSignerV4;if(o&&n instanceof o)return n.presign(t,e);else throw Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`)}return this.sigv4Signer.presign(t,e)}async presignWithCredentials(t,e,n={}){if(n.signingRegion==="*")throw Error("Method presignWithCredentials is not supported for [signingRegion=*].");return this.sigv4Signer.presignWithCredentials(t,e,n)}getSigv4aSigner(){if(!this.sigv4aSigner){let t=ie.CrtSignerV4,e=Vn.signatureV4aContainer.SignatureV4a;if(this.signerOptions.runtime==="node"){if(!t&&!e)throw Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");if(t&&typeof t==="function")this.sigv4aSigner=new t({...this.signerOptions,signingAlgorithm:1});else if(e&&typeof e==="function")this.sigv4aSigner=new e({...this.signerOptions});else throw Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt")}else{if(!e||typeof e!=="function")throw Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");this.sigv4aSigner=new e({...this.signerOptions})}}return this.sigv4aSigner}}var Vn;var wu=g(()=>{Au();Qn();Vn=k(Zn(),1)});var Nu=g(()=>{wu();Qn()});var pu="UNSIGNED-PAYLOAD",Iu="X-Amz-Content-Sha256";class he{signer;constructor(t){let e={service:t.signingName||t.service||"s3",uriEscapePath:t.uriEscapePath||!1,applyChecksum:t.applyChecksum||!1,...t};this.signer=new Jn(e)}presign(t,{unsignableHeaders:e=new Set,hoistableHeaders:n=new Set,unhoistableHeaders:o=new Set,...i}={}){return this.prepareRequest(t,{unsignableHeaders:e,unhoistableHeaders:o,hoistableHeaders:n}),this.signer.presign(t,{expiresIn:900,unsignableHeaders:e,unhoistableHeaders:o,...i})}presignWithCredentials(t,e,{unsignableHeaders:n=new Set,hoistableHeaders:o=new Set,unhoistableHeaders:i=new Set,...r}={}){return this.prepareRequest(t,{unsignableHeaders:n,unhoistableHeaders:i,hoistableHeaders:o}),this.signer.presignWithCredentials(t,e,{expiresIn:900,unsignableHeaders:n,unhoistableHeaders:i,...r})}prepareRequest(t,{unsignableHeaders:e=new Set,unhoistableHeaders:n=new Set,hoistableHeaders:o=new Set}={}){e.add("content-type"),Object.keys(t.headers).map((f)=>f.toLowerCase()).filter((f)=>f.startsWith("x-amz-server-side-encryption")).forEach((f)=>{if(!o.has(f))n.add(f)}),t.headers[Iu]=pu;let i=t.headers.host,r=t.port,u=`${t.hostname}${t.port!=null?":"+r:""}`;if(!i||i===t.hostname&&t.port!=null)t.headers.host=u}}var Wn=g(()=>{Nu()});var _u,Du=async(t,e,n={})=>{let o,i;if(typeof t.config.endpointProvider==="function"){let R=(await fr(e.input,e.constructor,t.config)).properties?.authSchemes?.[0];if(R?.name==="sigv4a")i=R?.signingRegionSet?.join(",");else i=R?.signingRegion;o=new he({...t.config,signingName:R?.signingName,region:async()=>i})}else o=new he(t.config);let r=(d,R)=>async(L)=>{let{request:O}=L;if(!_u.HttpRequest.isInstance(O))throw Error("Request to be presigned is not an valid HTTP request.");delete O.headers["amz-sdk-invocation-id"],delete O.headers["amz-sdk-request"],delete O.headers["x-amz-user-agent"];let C,M={...n,signingRegion:n.signingRegion??R.signing_region??i,signingService:n.signingService??R.signing_service};if(R.s3ExpressIdentity)C=await o.presignWithCredentials(O,R.s3ExpressIdentity,M);else C=await o.presign(O,M);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:C}}},u="presignInterceptMiddleware",f=t.middlewareStack.clone();f.addRelativeTo(r,{name:u,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let l=e.resolveMiddleware(f,t.config,{}),{output:y}=await l({input:e.input}),{presigned:s}=y;return Ri(s)};var Lu=g(()=>{Ai();Or();Wn();_u=k(Un(),1)});var vu=g(()=>{Lu();Wn()});import{S3Client as Ou,PutObjectCommand as ag,GetObjectCommand as Su,DeleteObjectCommand as $g,CopyObjectCommand as Pg,ListObjectsV2Command as Cg,HeadObjectCommand as Mg,ListObjectVersionsCommand as cg,GetBucketVersioningCommand as Xg,PutBucketVersioningCommand as Fg}from"@aws-sdk/client-s3";class dt{client;presignClient;bucket;versioningEnabled=!1;constructor(t){this.bucket=t.bucket;let e={accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey};this.client=new Ou({region:t.region,endpoint:t.endpoint,credentials:e,forcePathStyle:!0}),this.presignClient=new Ou({region:t.region,endpoint:t.publicEndpoint??t.endpoint,credentials:e,forcePathStyle:!0}),this.versioningEnabled=t.versioningEnabled??!1}async putObject(t,e,n,o){let i=await this.client.send(new ag({Bucket:this.bucket,Key:t,Body:typeof e==="string"?Buffer.from(e):e,Metadata:n,...o&&{ContentType:o}}));return{etag:i.ETag,versionId:i.VersionId}}async getObject(t,e){let n=await this.client.send(new Su({Bucket:this.bucket,Key:t,...e&&{VersionId:e}}));return{body:await n.Body.transformToByteArray(),contentType:n.ContentType,size:n.ContentLength,versionId:n.VersionId,etag:n.ETag}}async deleteObject(t){await this.client.send(new $g({Bucket:this.bucket,Key:t}))}async copyObject(t,e){let n=await this.client.send(new Pg({Bucket:this.bucket,CopySource:`${this.bucket}/${t}`,Key:e}));return{etag:n.CopyObjectResult?.ETag,versionId:n.VersionId}}async listObjects(t,e){let n=await this.client.send(new Cg({Bucket:this.bucket,Prefix:t,...e?.delimiter&&{Delimiter:e.delimiter}}));return{objects:(n.Contents??[]).map((o)=>({key:o.Key,size:o.Size??0,lastModified:o.LastModified??new Date,etag:o.ETag})),prefixes:(n.CommonPrefixes??[]).map((o)=>o.Prefix)}}async headObject(t){let e=await this.client.send(new Mg({Bucket:this.bucket,Key:t}));return{contentType:e.ContentType,size:e.ContentLength??0,lastModified:e.LastModified,etag:e.ETag,versionId:e.VersionId}}async listObjectVersions(t){return((await this.client.send(new cg({Bucket:this.bucket,Prefix:t}))).Versions??[]).filter((n)=>n.Key===t).map((n)=>({versionId:n.VersionId,lastModified:n.LastModified??new Date,size:n.Size??0,isLatest:n.IsLatest??!1}))}async checkVersioningEnabled(){try{return(await this.client.send(new Xg({Bucket:this.bucket}))).Status==="Enabled"}catch{return!1}}async enableVersioning(){try{return await this.client.send(new Fg({Bucket:this.bucket,VersioningConfiguration:{Status:"Enabled"}})),this.versioningEnabled=!0,!0}catch{return!1}}async getPresignedUrl(t,e=86400,n){let o=new Su({Bucket:this.bucket,Key:t,...n&&{ResponseContentType:n}});return Du(this.presignClient,o,{expiresIn:e})}}var Uu=g(()=>{vu()});var hu=g(()=>{Uu()});var ut,U,j,Et,re,z;var V=g(()=>{ut=class ut extends Error{code;suggestion;constructor(t,e,n){super(e);this.name=this.constructor.name,this.code=t,this.suggestion=n}toJSON(){return{error:this.code,message:this.message,...this.suggestion&&{suggestion:this.suggestion}}}};U=class U extends ut{path;constructor(t,e){super("NOT_FOUND",t,e?.suggestion);this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};j=class j extends ut{requiredRole;yourRole;constructor(t,e){super("PERMISSION_DENIED",t,e?.suggestion);this.requiredRole=e?.requiredRole,this.yourRole=e?.yourRole}toJSON(){return{...super.toJSON(),...this.requiredRole&&{required_role:this.requiredRole},...this.yourRole&&{your_role:this.yourRole}}}};Et=class Et extends ut{path;constructor(t,e){super("EDIT_CONFLICT",t,e?.suggestion);this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};re=class re extends ut{path;constructor(t,e){super("INDEXING_IN_PROGRESS",t,e?.suggestion??"Try again in a moment");this.path=e?.path}toJSON(){return{...super.toJSON(),...this.path&&{path:this.path}}}};z=class z extends ut{field;constructor(t,e){super("VALIDATION_ERROR",t,e?.suggestion);this.field=e?.field}toJSON(){return{...super.toJSON(),...this.field&&{field:this.field}}}}});import{eq as mu,and as Hg}from"drizzle-orm";function ue(t){return Yg[t]??"admin"}function ft(t,e,n){return t.select().from(E.driveMembers).where(Hg(mu(E.driveMembers.driveId,n),mu(E.driveMembers.userId,e))).get()?.role??null}function Ee(t,e){let n=ft(t,e.userId,e.driveId);if(!n)throw new j("You do not have access to this drive",{requiredRole:e.requiredRole,yourRole:"none",suggestion:"Request access from the drive admin"});if(au[n]<au[e.requiredRole])throw new j(`This operation requires '${e.requiredRole}' role, but you have '${n}'`,{requiredRole:e.requiredRole,yourRole:n,suggestion:e.requiredRole==="editor"?"Ask a drive admin to upgrade your role to editor":"Ask a drive admin to upgrade your role"})}var au,Yg;var me=g(()=>{a();V();au={viewer:0,editor:1,admin:2},Yg={ls:"viewer",cat:"viewer",tail:"viewer",stat:"viewer",grep:"viewer",fts:"viewer",search:"viewer","vec-search":"viewer",log:"viewer",diff:"viewer",recent:"viewer",tree:"viewer",glob:"viewer","signed-url":"viewer",write:"editor",edit:"editor",append:"editor",rm:"editor",mv:"editor",cp:"editor",revert:"editor",reindex:"admin","comment-add":"editor","comment-list":"viewer","comment-get":"viewer","comment-update":"editor","comment-delete":"editor","comment-resolve":"editor"}});function $u(t){let e=t;if(!e.startsWith("/"))e="/"+e;if(e.length>1&&e.endsWith("/"))e=e.slice(0,-1);return e}function Rt(t){let e=t;if(!e.startsWith("/"))e="/"+e;if(!e.endsWith("/"))e+="/";return e}function Pu(t){return t.startsWith("/")?t.slice(1):t}import{eq as Zt,and as Kn,sql as Gg}from"drizzle-orm";function I(t,e,n){let o=Pu(n);return`${t}/drives/${e}/${o}`}async function bn(t,e){return(t.db.select({maxVersion:Gg`MAX(version)`}).from(E.fileVersions).where(Kn(Zt(E.fileVersions.path,e),Zt(E.fileVersions.driveId,t.driveId))).get()?.maxVersion??0)+1}async function Y(t,e){let n=await bn(t,e.path),o=new Date;t.db.insert(E.fileVersions).values({path:e.path,driveId:t.driveId,version:n,s3VersionId:e.s3VersionId,author:t.userId,operation:e.operation,message:e.message??null,diffSummary:e.diffSummary??null,size:e.size??null,etag:e.etag??null,createdAt:o}).run();let i=t.db.select().from(E.files).where(Kn(Zt(E.files.path,e.path),Zt(E.files.driveId,t.driveId))).get();if(i)t.db.update(E.files).set({size:e.size??i.size,contentType:e.contentType??i.contentType,author:t.userId,currentVersionId:String(n),modifiedAt:o,isDeleted:e.operation==="delete"}).where(Kn(Zt(E.files.path,e.path),Zt(E.files.driveId,t.driveId))).run();else t.db.insert(E.files).values({path:e.path,driveId:t.driveId,size:e.size??0,contentType:e.contentType??null,author:t.userId,currentVersionId:String(n),createdAt:o,modifiedAt:o,isDeleted:e.operation==="delete"}).run();return n}var X=g(()=>{a()});function lt(t){let e=t.split(".").pop()?.toLowerCase()??"";return Zg[e]??"application/octet-stream"}var Zg;var Bt=g(()=>{Zg={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",ico:"image/x-icon",pdf:"application/pdf",txt:"text/plain",md:"text/markdown",mdx:"text/markdown",html:"text/html",css:"text/css",csv:"text/csv",xml:"application/xml",json:"application/json",yaml:"application/x-yaml",yml:"application/x-yaml",toml:"application/toml",ts:"text/plain",tsx:"text/plain",js:"text/javascript",jsx:"text/javascript",py:"text/x-python",rb:"text/x-ruby",rs:"text/x-rust",go:"text/x-go",java:"text/x-java",c:"text/x-c",cpp:"text/x-c++",h:"text/x-c",hpp:"text/x-c++",sh:"text/x-shellscript",sql:"text/x-sql",graphql:"text/x-graphql",zip:"application/zip",tar:"application/x-tar",gz:"application/gzip"}});function kn(t){return t.$client}function J(t,e){let n=kn(t);n.prepare("DELETE FROM files_fts WHERE path = ? AND drive_id = ?").run(e.path,e.driveId),n.prepare("INSERT INTO files_fts(path, content, drive_id) VALUES (?, ?, ?)").run(e.path,e.content,e.driveId)}function ae(t,e){kn(t).prepare("DELETE FROM files_fts WHERE path = ? AND drive_id = ?").run(e.path,e.driveId)}function $e(t,e){let n=kn(t),o,i;if(e.pathPrefix)o=`
|
|
142
142
|
SELECT path, snippet(files_fts, 1, '<b>', '</b>', '...', 32) as snippet, rank
|
|
143
143
|
FROM files_fts
|
|
144
144
|
WHERE content MATCH ? AND drive_id = ? AND path LIKE ?
|
|
@@ -150,74 +150,74 @@ ${dt.toHex(r)}`}getCanonicalPath({path:t}){if(this.uriEscapePath){let e=[];for(l
|
|
|
150
150
|
WHERE content MATCH ? AND drive_id = ?
|
|
151
151
|
ORDER BY rank
|
|
152
152
|
LIMIT 50
|
|
153
|
-
`,i=[e.pattern,e.driveId];return n.prepare(o).all(...i)}async function
|
|
154
|
-
|
|
155
|
-
`);if(
|
|
156
|
-
`),u=r.length,
|
|
157
|
-
`),totalLines:u,truncated:s}}var Wg=200;var
|
|
158
|
-
`),
|
|
159
|
-
`),totalLines:
|
|
160
|
-
`);for(let y=0;y<l.length;y++)if(n.test(l[y]))u.push({path:
|
|
153
|
+
`,i=[e.pattern,e.driveId];return n.prepare(o).all(...i)}async function Cu(t){try{let{RecursiveChunker:e}=await import("chonkie");return(await(await e.create({chunkSize:900})).chunk(t)).map((i)=>({content:i.text,charOffset:i.startIndex??0,tokenCount:i.tokenCount??Math.ceil(i.text.length/4)}))}catch{return Bg(t)}}function Bg(t){let o=[];if(t.length<=3600)return[{content:t,charOffset:0,tokenCount:Math.ceil(t.length/4)}];let i=0;while(i<t.length){let r=Math.min(i+3600,t.length),u=t.slice(i,r);if(r<t.length){let f=u.lastIndexOf(`
|
|
154
|
+
|
|
155
|
+
`);if(f>1800)u=u.slice(0,f)}if(o.push({content:u,charOffset:i,tokenCount:Math.ceil(u.length/4)}),i+=u.length-512,i<=o[o.length-1].charOffset)i=o[o.length-1].charOffset+u.length}return o}import{eq as W,and as Qt}from"drizzle-orm";function Qg(t){return t.$client}class Mu{permits;waiting=[];constructor(t){this.permits=t}async acquire(){if(this.permits>0)return this.permits--,()=>this.release();return new Promise((t)=>{this.waiting.push(()=>{this.permits--,t(()=>this.release())})})}release(){this.permits++;let t=this.waiting.shift();if(t)t()}}async function jn(t,e,n){let o=Qg(t),i=t.select({isDeleted:E.files.isDeleted}).from(E.files).where(Qt(W(E.files.path,n.path),W(E.files.driveId,n.driveId))).get();if(!i||i.isDeleted)return;try{let r=await Cu(n.content),u=r.map((s)=>s.content),f=await e.embedBatch(u),l=t.select({id:E.contentChunks.id}).from(E.contentChunks).where(Qt(W(E.contentChunks.filePath,n.path),W(E.contentChunks.driveId,n.driveId))).all();for(let s of l)o.prepare("DELETE FROM chunk_vectors WHERE chunk_id = ?").run(s.id);t.delete(E.contentChunks).where(Qt(W(E.contentChunks.filePath,n.path),W(E.contentChunks.driveId,n.driveId))).run();let y=o.prepare("INSERT INTO chunk_vectors(chunk_id, embedding) VALUES (?, ?)");for(let s=0;s<r.length;s++){let d=t.insert(E.contentChunks).values({filePath:n.path,driveId:n.driveId,chunkIndex:s,content:r[s].content,charOffset:r[s].charOffset,tokenCount:r[s].tokenCount}).returning({id:E.contentChunks.id}).get(),R=new Float32Array(f[s]);y.run(d.id,R)}t.update(E.files).set({embeddingStatus:"indexed"}).where(Qt(W(E.files.path,n.path),W(E.files.driveId,n.driveId))).run()}catch(r){throw t.update(E.files).set({embeddingStatus:"failed"}).where(Qt(W(E.files.path,n.path),W(E.files.driveId,n.driveId))).run(),r}}function At(t,e,n){if(!e)return;t.update(E.files).set({embeddingStatus:"pending"}).where(Qt(W(E.files.path,n.path),W(E.files.driveId,n.driveId))).run(),Vg.acquire().then(async(o)=>{try{await jn(t,e,n)}catch(i){console.error("Embedding failed",{path:n.path,error:i})}finally{o()}})}var Vg;var Vt=g(()=>{a();Vg=new Mu(2)});async function cu(t,e){let n=I(t.orgId,t.driveId,e.path),o=e.content,i=Buffer.byteLength(o);if(i>Jg)throw new z(`File size ${(i/1024/1024).toFixed(1)}MB exceeds the 10MB limit`,{field:"content",suggestion:"Split large files into smaller chunks"});if(e.expectedVersion!==void 0){let y=await bn(t,e.path)-1;if(y!==e.expectedVersion)throw new Et(`Expected version ${e.expectedVersion} but file is at version ${y}`,{path:e.path,suggestion:"Re-read the file to get the current version and retry"})}let r=lt(e.path),u=await t.s3.putObject(n,o,void 0,r),f=await Y(t,{path:e.path,s3VersionId:u.versionId??"",operation:"write",message:e.message,size:i,etag:u.etag,contentType:r});return J(t.db,{path:e.path,driveId:t.driveId,content:o}),At(t.db,t.embeddingProvider??null,{path:e.path,driveId:t.driveId,content:o}),{version:f,path:e.path,size:i}}var Jg=10485760;var Xu=g(()=>{X();X();Bt();Vt();V()});async function Fu(t,e){let n=I(t.orgId,t.driveId,e.path),o;try{o=(await t.s3.getObject(n)).body}catch(d){if(d?.name==="NoSuchKey"||d?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${e.path}`,{path:e.path});throw d}let r=new TextDecoder().decode(o).split(`
|
|
156
|
+
`),u=r.length,f=e.offset??0,l=e.limit??Wg,y=r.slice(f,f+l),s=f+l<u;return{content:y.join(`
|
|
157
|
+
`),totalLines:u,truncated:s}}var Wg=200;var Hu=g(()=>{X();V()});async function Yu(t,e){let n=I(t.orgId,t.driveId,e.path),o;try{o=(await t.s3.getObject(n)).body}catch(R){if(R?.name==="NoSuchKey"||R?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${e.path}`,{path:e.path});throw R}let i=new TextDecoder().decode(o),r=i.split(e.old_string).length-1;if(r===0)throw new Et(`old_string not found in ${e.path}`,{path:e.path,suggestion:"Verify the exact text you want to replace"});if(r>1)throw new Et(`old_string found ${r} times in ${e.path}, expected exactly 1`,{path:e.path,suggestion:"Provide more surrounding context to make the match unique"});let u=i.replace(e.old_string,e.new_string),f=Buffer.byteLength(u),l=lt(e.path),y=await t.s3.putObject(n,u,void 0,l),s=JSON.stringify({old:e.old_string,new:e.new_string}),d=await Y(t,{path:e.path,s3VersionId:y.versionId??"",operation:"edit",message:e.message,diffSummary:s,size:f,etag:y.etag,contentType:l});return J(t.db,{path:e.path,driveId:t.driveId,content:u}),At(t.db,t.embeddingProvider??null,{path:e.path,driveId:t.driveId,content:u}),{version:d,path:e.path,changes:1}}var Gu=g(()=>{X();V();Bt();Vt()});async function Zu(t,e){let n=I(t.orgId,t.driveId,e.path),o="";try{let y=await t.s3.getObject(n);o=new TextDecoder().decode(y.body)}catch(y){if(y?.name==="NoSuchKey"||y?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${e.path}`,{path:e.path});throw y}let i=o+e.content,r=Buffer.byteLength(i),u=lt(e.path),f=await t.s3.putObject(n,i,void 0,u),l=await Y(t,{path:e.path,s3VersionId:f.versionId??"",operation:"append",message:e.message,size:r,etag:f.etag,contentType:u});return J(t.db,{path:e.path,driveId:t.driveId,content:i}),At(t.db,t.embeddingProvider??null,{path:e.path,driveId:t.driveId,content:i}),{version:l,size:r}}var Bu=g(()=>{X();V();Bt();Vt()});import{eq as Qu,and as Kg,like as bg}from"drizzle-orm";async function Vu(t,e){let n=Rt(e.path??"/"),o=I(t.orgId,t.driveId,n),{objects:i,prefixes:r}=await t.s3.listObjects(o,{delimiter:"/"}),u=t.db.select().from(E.files).where(Kg(Qu(E.files.driveId,t.driveId),bg(E.files.path,n+"%"),Qu(E.files.isDeleted,!1))).all(),f=new Map(u.map((y)=>[y.path,y])),l=[];for(let y of r){let s=y.slice(o.length).replace(/\/$/,"");if(s)l.push({name:s,type:"directory",size:0})}for(let y of i){let s=y.key.slice(o.length);if(!s)continue;let d=s.endsWith("/"),R=d?s.slice(0,-1):s;if(d)l.push({name:R,type:"directory",size:0});else{let L=n+R,O=f.get(L);l.push({name:R,type:"file",size:O?.size??y.size,author:O?.author,modifiedAt:O?.modifiedAt??y.lastModified})}}return{entries:l}}var Ju=g(()=>{a();X()});import{eq as Wu,and as kg}from"drizzle-orm";async function Ku(t,e){let n=I(t.orgId,t.driveId,e.path),o;try{o=await t.s3.headObject(n)}catch(r){if(r?.name==="NotFound"||r?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${e.path}`,{path:e.path});throw r}let i=t.db.select().from(E.files).where(kg(Wu(E.files.path,e.path),Wu(E.files.driveId,t.driveId))).get();return{path:e.path,size:o.size,contentType:o.contentType,author:i?.author??"unknown",currentVersion:i?.currentVersionId?parseInt(i.currentVersionId):void 0,createdAt:i?.createdAt??new Date,modifiedAt:i?.modifiedAt??o.lastModified??new Date,isDeleted:i?.isDeleted??!1,embeddingStatus:i?.embeddingStatus??void 0}}var bu=g(()=>{a();X();V()});import{eq as Jt,and as zn}from"drizzle-orm";async function ku(t,e){let n=I(t.orgId,t.driveId,e.path);await t.s3.deleteObject(n),await Y(t,{path:e.path,s3VersionId:"",operation:"delete"}),ae(t.db,{path:e.path,driveId:t.driveId});let o=t.db.select({id:E.contentChunks.id}).from(E.contentChunks).where(zn(Jt(E.contentChunks.filePath,e.path),Jt(E.contentChunks.driveId,t.driveId))).all();if(o.length>0){let i=t.db.$client;for(let r of o)i.prepare("DELETE FROM chunk_vectors WHERE chunk_id = ?").run(r.id);t.db.delete(E.contentChunks).where(zn(Jt(E.contentChunks.filePath,e.path),Jt(E.contentChunks.driveId,t.driveId))).run()}return t.db.update(E.comments).set({isDeleted:!0,updatedAt:new Date}).where(zn(Jt(E.comments.path,e.path),Jt(E.comments.driveId,t.driveId))).run(),{path:e.path,deleted:!0}}var ju=g(()=>{a();X()});import{eq as zu,and as jg}from"drizzle-orm";async function qu(t,e){let n=I(t.orgId,t.driveId,e.from),o=I(t.orgId,t.driveId,e.to),i=await t.s3.copyObject(n,o),r=await t.s3.headObject(o),u=await Y(t,{path:e.to,s3VersionId:i.versionId??"",operation:"write",message:e.message??`Moved from ${e.from}`,size:r.size,etag:i.etag});await t.s3.deleteObject(n),await Y(t,{path:e.from,s3VersionId:"",operation:"delete",message:`Moved to ${e.to}`});let f=await t.s3.getObject(o),l=new TextDecoder().decode(f.body);return ae(t.db,{path:e.from,driveId:t.driveId}),J(t.db,{path:e.to,driveId:t.driveId,content:l}),t.db.update(E.contentChunks).set({filePath:e.to}).where(jg(zu(E.contentChunks.filePath,e.from),zu(E.contentChunks.driveId,t.driveId))).run(),{from:e.from,to:e.to,version:u}}var xu=g(()=>{X();a()});async function tE(t,e){let n=I(t.orgId,t.driveId,e.from),o=I(t.orgId,t.driveId,e.to),i=await t.s3.copyObject(n,o),r=await t.s3.headObject(o),u=await Y(t,{path:e.to,s3VersionId:i.versionId??"",operation:"write",message:`Copied from ${e.from}`,size:r.size,etag:i.etag}),f=await t.s3.getObject(o),l=new TextDecoder().decode(f.body);return J(t.db,{path:e.to,driveId:t.driveId,content:l}),At(t.db,t.embeddingProvider??null,{path:e.to,driveId:t.driveId,content:l}),{from:e.from,to:e.to,version:u}}var eE=g(()=>{X();Vt()});async function nE(t,e){let n=I(t.orgId,t.driveId,e.path),o=e.lines??zg,i;try{i=(await t.s3.getObject(n)).body}catch(d){if(d?.name==="NoSuchKey"||d?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${e.path}`,{path:e.path});throw d}let u=new TextDecoder().decode(i).split(`
|
|
158
|
+
`),f=u.length,l=Math.max(0,f-o),y=u.slice(l),s=l>0;return{content:y.join(`
|
|
159
|
+
`),totalLines:f,truncated:s}}var zg=20;var oE=g(()=>{X();V()});import{eq as iE,and as qg,desc as xg}from"drizzle-orm";async function rE(t,e){let n=e.limit??50;return{versions:t.db.select().from(E.fileVersions).where(qg(iE(E.fileVersions.path,e.path),iE(E.fileVersions.driveId,t.driveId))).orderBy(xg(E.fileVersions.version)).limit(n).all().map((i)=>({version:i.version,author:i.author,createdAt:i.createdAt,operation:i.operation,message:i.message??void 0,diffSummary:i.diffSummary??void 0,size:i.size??void 0}))}}var uE=g(()=>{a()});import{eq as Wt,and as EE}from"drizzle-orm";import{structuredPatch as tT}from"diff";async function fE(t,e){let n=t.db.select().from(E.fileVersions).where(EE(Wt(E.fileVersions.path,e.path),Wt(E.fileVersions.driveId,t.driveId),Wt(E.fileVersions.version,e.v1))).get(),o=t.db.select().from(E.fileVersions).where(EE(Wt(E.fileVersions.path,e.path),Wt(E.fileVersions.driveId,t.driveId),Wt(E.fileVersions.version,e.v2))).get();if(!n||!o)throw new U(`Version ${!n?e.v1:e.v2} not found for ${e.path}`,{path:e.path});if(n.s3VersionId&&o.s3VersionId){let r=I(t.orgId,t.driveId,e.path);try{let[u,f]=await Promise.all([t.s3.getObject(r,n.s3VersionId),t.s3.getObject(r,o.s3VersionId)]),l=new TextDecoder().decode(u.body),y=new TextDecoder().decode(f.body),s=tT(e.path,e.path,l,y),d=[];for(let R of s.hunks)for(let L of R.lines){let O=L.startsWith("+")?"add":L.startsWith("-")?"remove":"context";d.push({type:O,content:L.slice(1)})}return{changes:d}}catch(u){console.warn(`[diff] S3 content fetch failed for ${e.path}, falling back to diffSummary:`,u)}}let i=[];if(o.diffSummary)try{let r=JSON.parse(o.diffSummary);if(r.old)i.push({type:"remove",content:r.old});if(r.new)i.push({type:"add",content:r.new})}catch{i.push({type:"context",content:o.diffSummary})}return{changes:i}}var lE=g(()=>{a();X();V()});import{eq as qn,and as eT}from"drizzle-orm";async function yE(t,e){let n=t.db.select().from(E.fileVersions).where(eT(qn(E.fileVersions.path,e.path),qn(E.fileVersions.driveId,t.driveId),qn(E.fileVersions.version,e.version))).get();if(!n)throw new U(`Version ${e.version} not found for ${e.path}`,{path:e.path});if(!n.s3VersionId)throw new ut("VERSIONING_REQUIRED","S3 versioning required for revert","Enable S3 versioning on the bucket");let o=I(t.orgId,t.driveId,e.path),i=await t.s3.getObject(o,n.s3VersionId),r=lt(e.path),u=await t.s3.putObject(o,i.body,void 0,r),f=i.body.length;return{version:await Y(t,{path:e.path,s3VersionId:u.versionId??"",operation:"revert",message:`Reverted to version ${e.version}`,size:f,etag:u.etag,contentType:r}),revertedTo:e.version}}var sE=g(()=>{a();X();V();Bt()});import{eq as xn,and as gE,desc as nT,gte as oT,like as iT}from"drizzle-orm";async function TE(t,e){let n=e.limit??50,o=t.db.select().from(E.fileVersions).where(xn(E.fileVersions.driveId,t.driveId)).$dynamic();if(e.path)o=o.where(gE(xn(E.fileVersions.driveId,t.driveId),iT(E.fileVersions.path,e.path+"%")));if(e.since)o=o.where(gE(xn(E.fileVersions.driveId,t.driveId),oT(E.fileVersions.createdAt,e.since)));return{entries:o.orderBy(nT(E.fileVersions.createdAt)).limit(n).all().map((r)=>({path:r.path,version:r.version,author:r.author,createdAt:r.createdAt,operation:r.operation,message:r.message??void 0,diffSummary:r.diffSummary??void 0,size:r.size??void 0}))}}var dE=g(()=>{a()});async function RE(t,e){let n=new RegExp(e.pattern),o=Rt(e.path),r=t.db.$client.prepare("SELECT path, content FROM files_fts WHERE drive_id = ? AND path LIKE ?").all(t.driveId,o+"%"),u=[];for(let f of r){let l=f.content.split(`
|
|
160
|
+
`);for(let y=0;y<l.length;y++)if(n.test(l[y]))u.push({path:f.path,lineNumber:y+1,content:l[y]})}return{matches:u}}var AE=()=>{};async function wE(t,e){let o=$e(t.db,{pattern:e.pattern,driveId:t.driveId,pathPrefix:e.path}).map((i)=>({path:i.path,snippet:i.snippet,rank:i.rank}));if(o.length===0)return{matches:o,hint:`No exact token matches for "${e.pattern}". Try 'search' for semantic/fuzzy matching.`};return{matches:o}}var NE=()=>{};import{eq as to,and as rT}from"drizzle-orm";async function pE(t,e){let n=t.embeddingProvider;if(!n)return{results:[],hint:"No embedding provider configured. Set OPENAI_API_KEY or enable local embeddings to use semantic search."};let o=e.limit??10,i=await n.embed(e.query),r=new Float32Array(i),f=t.db.$client.prepare(`SELECT chunk_id, distance
|
|
161
161
|
FROM chunk_vectors
|
|
162
162
|
WHERE embedding MATCH ?
|
|
163
163
|
ORDER BY distance
|
|
164
|
-
LIMIT ?`).all(r,o*2);if(
|
|
164
|
+
LIMIT ?`).all(r,o*2);if(f.length===0)return{results:[]};let l=[],y=new Set;for(let s of f){let d=t.db.select().from(E.contentChunks).where(to(E.contentChunks.id,s.chunk_id)).get();if(!d)continue;if(d.driveId!==t.driveId)continue;if(y.has(d.filePath))continue;y.add(d.filePath);let R=t.db.select().from(E.files).where(rT(to(E.files.path,d.filePath),to(E.files.driveId,t.driveId))).get();if(l.push({path:d.filePath,score:1/(1+s.distance),snippet:d.content.slice(0,200),author:R?.author,modifiedAt:R?.modifiedAt}),l.length>=o)break}return{results:l}}var IE=g(()=>{a()});import{eq as eo,and as uT}from"drizzle-orm";async function _E(t,e){let n=e.limit??10,o=t.embeddingProvider,[i,r]=await Promise.all([o?ET(t,e.query,n*3):[],fT(t,e.query,n*3)]);if(i.length===0&&r.length===0)return{results:[],hint:o?`No results found for "${e.query}".`:"No embedding provider configured. Set OPENAI_API_KEY, GEMINI_API_KEY, or enable local embeddings for semantic search. Showing keyword results only."};let u=60,f=new Map;for(let y=0;y<i.length;y++){let s=i[y],d=1/(u+y+1),R=f.get(s.path);if(R)R.score+=d;else f.set(s.path,{score:d,snippet:s.snippet,author:s.author,modifiedAt:s.modifiedAt})}for(let y=0;y<r.length;y++){let s=r[y],d=1/(u+y+1),R=f.get(s.path);if(R){if(R.score+=d,s.snippet)R.snippet=s.snippet}else f.set(s.path,{score:d,snippet:s.snippet})}return{results:Array.from(f.entries()).sort(([,y],[,s])=>s.score-y.score).slice(0,n).map(([y,s])=>({path:y,score:s.score,snippet:s.snippet,author:s.author,modifiedAt:s.modifiedAt})),hint:!o?"Results are keyword-only. Enable embeddings for better semantic matching.":void 0}}async function ET(t,e,n){let i=await t.embeddingProvider.embed(e),r=new Float32Array(i),f=t.db.$client.prepare(`SELECT chunk_id, distance
|
|
165
165
|
FROM chunk_vectors
|
|
166
166
|
WHERE embedding MATCH ?
|
|
167
167
|
ORDER BY distance
|
|
168
|
-
LIMIT ?`).all(r,n),l=[],y=new Set;for(let s of E){let T=t.db.select().from(f.contentChunks).where(eo(f.contentChunks.id,s.chunk_id)).get();if(!T||T.driveId!==t.driveId)continue;if(y.has(T.filePath))continue;y.add(T.filePath);let R=t.db.select().from(f.files).where(ud(eo(f.files.path,T.filePath),eo(f.files.driveId,t.driveId))).get();l.push({path:T.filePath,snippet:T.content.slice(0,200),author:R?.author,modifiedAt:R?.modifiedAt})}return l}function Ed(t,e,n){let o=e.split(/\s+/).filter(Boolean).map((i)=>`"${i}"`).join(" OR ");if(!o)return[];try{return $e(t.db,{pattern:o,driveId:t.driveId}).slice(0,n).map((r)=>({path:r.path,snippet:r.snippet}))}catch{return[]}}var Df=g(()=>{a()});import{eq as Pe,and as ld,or as yd,isNull as sd}from"drizzle-orm";async function vf(t,e){let n=[Pe(f.files.driveId,t.driveId),Pe(f.files.isDeleted,!1),yd(Pe(f.files.embeddingStatus,"failed"),sd(f.files.embeddingStatus),Pe(f.files.embeddingStatus,"pending"))];if(e.path){let{like:l}=await import("drizzle-orm"),y=e.path.endsWith("/")?e.path:e.path+"/";n.push(l(f.files.path,y+"%"))}let o=t.db.select({path:f.files.path}).from(f.files).where(ld(...n)).all(),i=0,r=0,u=0,E=3;for(let l=0;l<o.length;l+=E){let y=o.slice(l,l+E),s=await Promise.allSettled(y.map(async(T)=>{let R=I(t.orgId,t.driveId,T.path),v=await t.s3.getObject(R),O=new TextDecoder().decode(v.body);if(J(t.db,{path:T.path,driveId:t.driveId,content:O}),t.embeddingProvider)return await jn(t.db,t.embeddingProvider,{path:T.path,driveId:t.driveId,content:O}),"reindexed";return"skipped"}));for(let T of s)if(T.status==="fulfilled")if(T.value==="reindexed")i++;else u++;else console.error("Reindex failed:",T.reason),r++}return{reindexed:i,failed:r,skipped:u}}var Lf=g(()=>{a();X();Vt()});import{eq as Of,and as gd,like as dd}from"drizzle-orm";async function Sf(t,e){let n=Rt(e.path??"/"),o=I(t.orgId,t.driveId,n),{objects:i}=await t.s3.listObjects(o),r=t.db.select().from(f.files).where(gd(Of(f.files.driveId,t.driveId),dd(f.files.path,n+"%"),Of(f.files.isDeleted,!1))).all(),u=new Map(r.map((l)=>[l.path,l])),E=[];for(let l of i){let y=l.key.slice(o.length);if(!y)continue;let s=y.split("/").filter(Boolean);if(s.length===0)continue;if(e.depth!==void 0&&s.length>e.depth)continue;let T=E;for(let R=0;R<s.length;R++){let v=s[R],O=R===s.length-1,C=!O||y.endsWith("/");if(C&&!O){let M=T.find((H)=>H.name===v&&H.type==="directory");if(!M)M={name:v,type:"directory",children:[]},T.push(M);if(!M.children)M.children=[];T=M.children}else if(C&&O){let M=T.find((H)=>H.name===v&&H.type==="directory");if(!M)M={name:v,type:"directory",children:[]},T.push(M)}else{let M=n+s.slice(0,R+1).join("/"),H=u.get(M),on={name:v,type:"file",size:H?.size??l.size};if(H?.author)on.author=H.author;if(H?.modifiedAt??l.lastModified)on.modifiedAt=H?.modifiedAt??l.lastModified;T.push(on)}}}return{tree:E}}var Uf=g(()=>{a();X()});import{eq as hf,and as Td,like as Rd}from"drizzle-orm";function Ad(t){let e="",n=0;while(n<t.length){let o=t[n];if(o==="*")if(t[n+1]==="*"){if(e+=".*",n+=2,t[n]==="/")n++}else e+="[^/]*",n++;else if(o==="?")e+="[^/]",n++;else if(".+^${}()|[]\\".includes(o))e+="\\"+o,n++;else e+=o,n++}return new RegExp("^"+e+"$")}async function mf(t,e){let n=e.path?Rt(e.path):"/",o=I(t.orgId,t.driveId,n),{objects:i}=await t.s3.listObjects(o),r=t.db.select().from(f.files).where(Td(hf(f.files.driveId,t.driveId),Rd(f.files.path,n+"%"),hf(f.files.isDeleted,!1))).all(),u=new Map(r.map((y)=>[y.path,y])),E=Ad(e.pattern),l=[];for(let y of i){let s=y.key.slice(o.length);if(!s||s.endsWith("/"))continue;if(E.test(s)){let T=n+s,R=u.get(T);l.push({path:T,size:R?.size??y.size,modifiedAt:R?.modifiedAt??y.lastModified})}}return{matches:l}}var af=g(()=>{a();X()});async function $f(t,e){let n=au(e.path),o=I(t.orgId,t.driveId,n),i=e.expiresIn??86400;try{await t.s3.headObject(o)}catch(E){if(E?.name==="NotFound"||E?.name==="NoSuchKey"||E?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${n}`,{path:n});throw E}let r=lt(n);return{url:await t.s3.getPresignedUrl(o,i,r!=="application/octet-stream"?r:void 0),path:n,expiresIn:i,expiresAt:new Date(Date.now()+i*1000).toISOString()}}var Pf=g(()=>{X();V();Bt()});function no(t,e,n,o){let i=o.startsWith("/")?o.slice(1):o;return`${t}/file/~/${e}/${n}/${i}`}import{eq as S,and as yt,sql as oo,desc as Cf}from"drizzle-orm";function io(t,e){t.db.insert(f.events).values({id:crypto.randomUUID(),orgId:t.orgId,type:e.type,resourceType:e.resourceType,resourceId:e.resourceId,actor:t.userId,target:e.target??null,status:"created",metadata:e.metadata?JSON.stringify(e.metadata):null,createdAt:new Date}).run()}function Ce(t){return{id:t.id,parentId:t.parentId??void 0,path:t.path,lineStart:t.lineStart??void 0,lineEnd:t.lineEnd??void 0,quotedContent:t.quotedContent??void 0,body:t.body,author:t.author,resolved:t.resolved??!1,resolvedBy:t.resolvedBy??void 0,resolvedAt:t.resolvedAt??void 0,fileVersionId:t.fileVersionId??void 0,replyCount:t.replyCount??0,createdAt:t.createdAt,updatedAt:t.updatedAt}}async function Me(t,e){let n=new Date,o=crypto.randomUUID(),i=e.path;if(e.parentId){let u=t.db.select().from(f.comments).where(yt(S(f.comments.id,e.parentId),S(f.comments.isDeleted,!1))).get();if(!u)throw new U("Parent comment not found",{suggestion:"Check that the parent comment ID is correct and not deleted"});if(u.parentId)throw new z("Cannot reply to a reply \u2014 only root comments accept replies",{suggestion:"Reply to the root comment instead"});if(!i)i=u.path}if(!i)throw new z("path is required for root comments",{field:"path"});let r=t.db.select({id:f.fileVersions.id}).from(f.fileVersions).where(yt(S(f.fileVersions.path,i),S(f.fileVersions.driveId,t.driveId))).orderBy(Cf(f.fileVersions.id)).limit(1).get();return t.db.insert(f.comments).values({id:o,parentId:e.parentId??null,orgId:t.orgId,driveId:t.driveId,path:i,lineStart:e.lineStart??null,lineEnd:e.lineEnd??null,quotedContent:e.quotedContent??null,fileVersionId:r?.id??null,body:e.body,author:t.userId,resolved:!1,createdAt:n,updatedAt:n,isDeleted:!1}).run(),io(t,{type:"comment_created",resourceType:"comment",resourceId:o,metadata:{path:i,parentId:e.parentId}}),{id:o,path:i,body:e.body,parentId:e.parentId,lineStart:e.lineStart,lineEnd:e.lineEnd,author:t.userId,createdAt:n}}async function ce(t,e){let n=[S(f.comments.driveId,t.driveId),S(f.comments.isDeleted,!1)];if(e.path)n.push(S(f.comments.path,e.path));if(e.parentId)n.push(S(f.comments.parentId,e.parentId));else if(e.parentId===void 0&&!e.resolved)n.push(oo`${f.comments.parentId} IS NULL`),n.push(S(f.comments.resolved,!1));else if(e.parentId===void 0&&e.resolved)n.push(oo`${f.comments.parentId} IS NULL`);if(e.orgId)n.push(S(f.comments.orgId,e.orgId));let o=e.limit??50,i=e.offset??0;return{comments:t.db.select().from(f.comments).where(yt(...n)).orderBy(Cf(f.comments.createdAt)).limit(o).offset(i).all().map((E)=>{let y=t.db.select().from(f.comments).where(yt(S(f.comments.parentId,E.id),S(f.comments.isDeleted,!1))).orderBy(f.comments.createdAt).all().map((s)=>Ce({...s,replyCount:0}));return{...Ce({...E,replyCount:y.length}),replies:y}})}}async function Xe(t,e){let n=t.db.select().from(f.comments).where(yt(S(f.comments.id,e.id),S(f.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});let o=t.db.select({count:oo`count(*)`}).from(f.comments).where(yt(S(f.comments.parentId,n.id),S(f.comments.isDeleted,!1))).get(),i=Ce({...n,replyCount:o?.count??0}),u=t.db.select().from(f.comments).where(yt(S(f.comments.parentId,e.id),S(f.comments.isDeleted,!1))).orderBy(f.comments.createdAt).all().map((E)=>Ce({...E,replyCount:0}));return{comment:i,replies:u}}async function Fe(t,e){let n=t.db.select().from(f.comments).where(yt(S(f.comments.id,e.id),S(f.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.author!==t.userId)throw new j("You can only edit your own comments",{suggestion:"Only the comment author can update it"});let o=new Date;return t.db.update(f.comments).set({body:e.body,updatedAt:o}).where(S(f.comments.id,e.id)).run(),{id:e.id,body:e.body,updatedAt:o}}async function He(t,e){let n=t.db.select().from(f.comments).where(yt(S(f.comments.id,e.id),S(f.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.author!==t.userId)throw new j("You can only delete your own comments",{suggestion:"Only the comment author can delete it"});let o=new Date;if(t.db.update(f.comments).set({isDeleted:!0,updatedAt:o}).where(S(f.comments.id,e.id)).run(),!n.parentId)t.db.update(f.comments).set({isDeleted:!0,updatedAt:o}).where(S(f.comments.parentId,e.id)).run();return io(t,{type:"comment_deleted",resourceType:"comment",resourceId:e.id}),{deleted:!0}}async function Ye(t,e){let n=t.db.select().from(f.comments).where(yt(S(f.comments.id,e.id),S(f.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.parentId)throw new z("Cannot resolve a reply \u2014 only root comments can be resolved",{suggestion:"Resolve the parent comment instead"});let o=new Date,i=e.resolved?o:null,r=e.resolved?t.userId:null;return t.db.update(f.comments).set({resolved:e.resolved,resolvedBy:r,resolvedAt:i,updatedAt:o}).where(S(f.comments.id,e.id)).run(),io(t,{type:e.resolved?"comment_resolved":"comment_reopened",resourceType:"comment",resourceId:e.id}),{id:e.id,resolved:e.resolved,resolvedBy:r??void 0,resolvedAt:i??void 0}}var Mf=g(()=>{a();V()});import{z as d}from"zod";async function wt(t,e,n,o){let i=ro[e];if(!i)throw Error(`Unknown operation: ${e}`);if(!o?.skipAuth){let E=ue(e);fe(t.db,{userId:t.userId,driveId:t.driveId,requiredRole:E})}let r=i.schema.parse(n),u=await i.handler(t,r);if(t.appUrl&&u&&typeof u==="object"){if("path"in u)u.appUrl=no(t.appUrl,t.orgId,t.driveId,u.path);else if("to"in u)u.appUrl=no(t.appUrl,t.orgId,t.driveId,u.to)}return u}function Kt(){return Object.keys(ro)}function Nt(t){return ro[t]}var ro;var uo=g(()=>{me();cu();Fu();Yu();Zu();Vu();Ku();ku();qu();tf();nf();uf();lf();sf();Tf();Af();Nf();If();Df();Lf();Uf();af();Pf();Mf();ro={write:{description:"Write or overwrite a file. Creates the file if it doesn't exist, or creates a new version. Use expectedVersion for optimistic concurrency. Returns { version, path, size }.",handler:Mu,schema:d.object({path:d.string(),content:d.string(),message:d.string().optional(),expectedVersion:d.number().int().optional()})},cat:{description:"Read file content with optional pagination via offset/limit. Returns { content, totalLines, truncated }.",handler:Xu,schema:d.object({path:d.string(),offset:d.number().int().min(0).optional(),limit:d.number().int().min(1).optional()})},edit:{description:"Replace a specific string in a file (surgical find-and-replace). Captures the edit intent as a diff summary in version history. Returns { version, path, changes }.",handler:Hu,schema:d.object({path:d.string(),old_string:d.string(),new_string:d.string(),message:d.string().optional()})},append:{description:"Append content to the end of an existing file. Creates a new version. Returns { version, size }.",handler:Gu,schema:d.object({path:d.string(),content:d.string(),message:d.string().optional()})},ls:{description:"List immediate children of a directory. Returns { entries } where each entry has name, type (file/directory), size, author, modifiedAt.",handler:Qu,schema:d.object({path:d.string().optional()})},stat:{description:"Get file metadata without reading content. Returns path, size, contentType, author, currentVersion, createdAt, modifiedAt, isDeleted, embeddingStatus.",handler:Wu,schema:d.object({path:d.string()})},rm:{description:"Delete a file. Removes from S3, cleans up FTS5 index and vector embeddings. Returns { path, deleted }.",handler:bu,schema:d.object({path:d.string()})},mv:{description:"Move or rename a file. Preserves version history at the new path. Returns { from, to, version }.",handler:zu,schema:d.object({from:d.string(),to:d.string(),message:d.string().optional()})},cp:{description:"Copy a file using server-side S3 copy. Creates a new version at the destination. Returns { from, to, version }.",handler:xu,schema:d.object({from:d.string(),to:d.string()})},tail:{description:"Read the last N lines of a file (default 20). Returns { content, totalLines, truncated }.",handler:ef,schema:d.object({path:d.string(),lines:d.number().int().min(1).optional()})},log:{description:"Show version history for a file. Returns { versions } with version number, author, timestamp, operation type, message, and diff summary.",handler:rf,schema:d.object({path:d.string(),limit:d.number().int().min(1).optional()})},diff:{description:"Show the diff between two versions of a file. Specify v1 and v2 version numbers. Returns { changes } as add/remove/context hunks.",handler:Ef,schema:d.object({path:d.string(),v1:d.number().int(),v2:d.number().int()})},revert:{description:"Revert a file to a previous version. Creates a new version with the old content. Returns { version, revertedTo }.",handler:yf,schema:d.object({path:d.string(),version:d.number().int()})},recent:{description:"Show recent activity across the drive. Optionally filter by path prefix and time window (since). Returns { entries } with path and version details.",handler:df,schema:d.object({path:d.string().optional(),since:d.coerce.date().optional(),limit:d.number().int().min(1).optional()})},grep:{description:"Search file content using regex pattern within a specific path. Returns matching lines with line numbers. Searches the FTS5 index, not S3 directly.",handler:Rf,schema:d.object({pattern:d.string(),path:d.string()})},fts:{description:"Full-text search across all file content using FTS5 tokens. Different from grep (regex) and search (semantic). Returns { matches } with path, snippet, and rank.",handler:wf,schema:d.object({pattern:d.string(),path:d.string().optional()})},search:{description:"Hybrid search combining semantic (vector) and keyword (FTS5) matching. Best for natural language queries. Degrades to keyword-only without an embedding provider.",handler:_f,schema:d.object({query:d.string(),limit:d.number().int().min(1).optional()})},"vec-search":{description:"Vector-only semantic search using embeddings. Returns results ranked by cosine similarity. Requires an embedding provider (OPENAI_API_KEY, GEMINI_API_KEY, or local).",handler:pf,schema:d.object({query:d.string(),limit:d.number().int().min(1).optional()})},reindex:{description:"Re-index files with failed or missing FTS5/embedding entries. Optionally scope to a path prefix. Use after bulk writes or provider changes.",handler:vf,schema:d.object({path:d.string().optional()})},tree:{description:"Recursively list all files and directories. Use depth to limit recursion. Returns a nested tree structure with name, type, size, and children.",handler:Sf,schema:d.object({path:d.string().optional(),depth:d.number().int().min(1).optional()})},glob:{description:"Find files by name pattern. Use `*.md` for root-level files only, `**/*.md` for recursive matching across all subdirectories. Supports `*` (any chars except /), `?` (single char), `**` (any path depth). Optionally scope to a path prefix. Returns { matches } with path, size, and modifiedAt.",handler:mf,schema:d.object({pattern:d.string(),path:d.string().optional()})},"signed-url":{description:"Generate a temporary presigned URL for direct file download. Default expiry is 24 hours (86400 seconds). The URL requires no authentication. Returns { url, path, expiresIn, expiresAt }.",handler:$f,schema:d.object({path:d.string(),expiresIn:d.number().int().min(60).max(604800).optional()})},"comment-add":{description:"Add a comment to a file. Supports line ranges and threading via parentId. Replies auto-resolve path from parent. Returns { id, path, body, author, createdAt }.",handler:Me,schema:d.object({path:d.string().optional(),body:d.string(),parentId:d.string().optional(),lineStart:d.number().int().optional(),lineEnd:d.number().int().optional(),quotedContent:d.string().optional()})},"comment-list":{description:"List comments on a file. Filter by path, resolved state, or parentId. Defaults to unresolved root comments. Returns { comments } with inline replies.",handler:ce,schema:d.object({path:d.string().optional(),parentId:d.string().optional(),resolved:d.boolean().optional(),orgId:d.string().optional(),limit:d.number().int().min(1).optional(),offset:d.number().int().min(0).optional()})},"comment-get":{description:"Get a single comment by ID with all its replies. Returns { comment, replies }.",handler:Xe,schema:d.object({id:d.string()})},"comment-update":{description:"Update a comment's body. Only the original author can update. Returns { id, body, updatedAt }.",handler:Fe,schema:d.object({id:d.string(),body:d.string()})},"comment-delete":{description:"Soft-delete a comment. Only the original author can delete. Deleting a root comment also soft-deletes its replies. Returns { deleted }.",handler:He,schema:d.object({id:d.string()})},"comment-resolve":{description:"Resolve or reopen a root comment. Set resolved=true to resolve, resolved=false to reopen. Only root comments can be resolved. Returns { id, resolved, resolvedBy, resolvedAt }.",handler:Ye,schema:d.object({id:d.string(),resolved:d.boolean()})}}});import{eq as K,and as Ge}from"drizzle-orm";function vt(t,e){let n=crypto.randomUUID(),o=new Date;return t.insert(f.drives).values({id:n,orgId:e.orgId,name:e.name,isDefault:e.isDefault??!1,createdAt:o}).run(),{id:n,name:e.name}}function Lt(t,e){return t.select().from(f.drives).where(K(f.drives.orgId,e)).all().map((n)=>({id:n.id,name:n.name,isDefault:n.isDefault}))}function fo(t,e){let n=t.select().from(f.drives).where(K(f.drives.id,e)).get();if(!n)return null;return{id:n.id,name:n.name,orgId:n.orgId,isDefault:n.isDefault}}function Ot(t,e){return t.select({userId:f.driveMembers.userId,email:f.users.email,role:f.driveMembers.role}).from(f.driveMembers).innerJoin(f.users,K(f.driveMembers.userId,f.users.id)).where(K(f.driveMembers.driveId,e)).all()}function St(t,e){if(!t.select({role:f.driveMembers.role}).from(f.driveMembers).where(Ge(K(f.driveMembers.driveId,e.driveId),K(f.driveMembers.userId,e.userId))).get())throw Error("Member not found in drive");t.update(f.driveMembers).set({role:e.role}).where(Ge(K(f.driveMembers.driveId,e.driveId),K(f.driveMembers.userId,e.userId))).run()}function Ut(t,e){if(!t.select({role:f.driveMembers.role}).from(f.driveMembers).where(Ge(K(f.driveMembers.driveId,e.driveId),K(f.driveMembers.userId,e.userId))).get())throw Error("Member not found in drive");t.delete(f.driveMembers).where(Ge(K(f.driveMembers.driveId,e.driveId),K(f.driveMembers.userId,e.userId))).run()}function Eo(t,e){t.insert(f.driveMembers).values({driveId:e.driveId,userId:e.userId,role:e.role}).onConflictDoUpdate({target:[f.driveMembers.driveId,f.driveMembers.userId],set:{role:e.role}}).run()}var lo=g(()=>{a()});import{eq as $,and as ht,sql as cf}from"drizzle-orm";function mt(t,e){let n=crypto.randomUUID(),o=new Date;t.insert(f.orgs).values({id:n,name:e.name,isPersonal:e.isPersonal??!1,createdAt:o}).run(),t.insert(f.orgMembers).values({orgId:n,userId:e.userId,role:"admin"}).run();let i=vt(t,{orgId:n,name:"default",isDefault:!0});return t.insert(f.driveMembers).values({driveId:i.id,userId:e.userId,role:"admin"}).run(),{id:n,name:e.name}}function Z(t,e){return t.select({orgId:f.orgMembers.orgId,role:f.orgMembers.role,name:f.orgs.name,isPersonal:f.orgs.isPersonal}).from(f.orgMembers).innerJoin(f.orgs,$(f.orgMembers.orgId,f.orgs.id)).where($(f.orgMembers.userId,e)).all().map((o)=>({id:o.orgId,name:o.name,role:o.role,isPersonal:o.isPersonal}))}function Ee(t,e){let n=t.select().from(f.orgs).where($(f.orgs.id,e)).get();if(!n)return null;return{id:n.id,name:n.name,isPersonal:n.isPersonal}}function at(t,e){return t.select({userId:f.orgMembers.userId,email:f.users.email,role:f.orgMembers.role}).from(f.orgMembers).innerJoin(f.users,$(f.orgMembers.userId,f.users.id)).where($(f.orgMembers.orgId,e)).all()}function $t(t,e){let n=t.select({role:f.orgMembers.role}).from(f.orgMembers).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.userId,e.userId))).get();if(!n)throw Error("Member not found in org");if(n.role==="admin"&&e.role!=="admin"){if(t.select({count:cf`count(*)`}).from(f.orgMembers).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.role,"admin"))).get().count<=1)throw Error("Cannot remove the last admin from the org")}t.update(f.orgMembers).set({role:e.role}).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.userId,e.userId))).run()}function Pt(t,e){if(t.select({isPersonal:f.orgs.isPersonal}).from(f.orgs).where($(f.orgs.id,e.orgId)).get()?.isPersonal)throw Error("Cannot remove members from a personal org");let o=t.select({role:f.orgMembers.role}).from(f.orgMembers).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.userId,e.userId))).get();if(!o)throw Error("Member not found in org");if(o.role==="admin"){if(t.select({count:cf`count(*)`}).from(f.orgMembers).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.role,"admin"))).get().count<=1)throw Error("Cannot remove the last admin from the org")}let i=t.select({id:f.drives.id}).from(f.drives).where($(f.drives.orgId,e.orgId)).all();for(let r of i)t.delete(f.driveMembers).where(ht($(f.driveMembers.driveId,r.id),$(f.driveMembers.userId,e.userId))).run();t.delete(f.orgMembers).where(ht($(f.orgMembers.orgId,e.orgId),$(f.orgMembers.userId,e.userId))).run()}function Ct(t,e){let n=t.select().from(f.users).where($(f.users.email,e.email)).get();if(!n)throw Error(`User with email ${e.email} not found`);t.insert(f.orgMembers).values({orgId:e.orgId,userId:n.id,role:e.role}).onConflictDoUpdate({target:[f.orgMembers.orgId,f.orgMembers.userId],set:{role:e.role}}).run();let o=t.select().from(f.drives).where($(f.drives.orgId,e.orgId)).get();if(o)t.insert(f.driveMembers).values({driveId:o.id,userId:n.id,role:e.role}).onConflictDoUpdate({target:[f.driveMembers.driveId,f.driveMembers.userId],set:{role:e.role}}).run()}var yo=g(()=>{a();lo()});import{eq as Xf}from"drizzle-orm";function Ff(t){let e=new Bun.CryptoHasher("sha256");return e.update(t),e.digest("hex")}function wd(){let t=new Uint8Array(32);return crypto.getRandomValues(t),`af_${Array.from(t,(n)=>n.toString(16).padStart(2,"0")).join("")}`}function Nd(){return crypto.randomUUID()}function q(t,e){let n=Nd(),o=wd(),i=Ff(o),r=new Date;return t.insert(f.users).values({id:n,email:e.email,apiKeyHash:i,createdAt:r}).run(),mt(t,{name:e.email.split("@")[0],userId:n,isPersonal:!0}),{user:{id:n,email:e.email},apiKey:o}}function st(t,e){let n=Ff(e),o=t.select().from(f.users).where(Xf(f.users.apiKeyHash,n)).get();if(!o)return null;return{id:o.id,email:o.email}}function bt(t,e){let n=t.select().from(f.users).where(Xf(f.users.email,e)).get();if(!n)return null;return{id:n.id,email:n.email}}var so=g(()=>{a();yo()});import{eq as pt,and as go}from"drizzle-orm";function x(t,e){if(e.driveId){let r=t.select().from(f.drives).where(pt(f.drives.id,e.driveId)).get();if(!r)throw Error(`Drive not found: ${e.driveId}`);let u=Et(t,e.userId,e.driveId);if(!u)throw Error("You do not have access to this drive");return{orgId:r.orgId,driveId:e.driveId,role:u}}if(e.orgId){let r=t.select().from(f.drives).where(go(pt(f.drives.orgId,e.orgId),pt(f.drives.isDefault,!0))).get();if(!r)throw Error(`No default drive for org: ${e.orgId}`);let u=Et(t,e.userId,r.id);if(!u)throw Error("You do not have access to this drive");return{orgId:e.orgId,driveId:r.id,role:u}}let n=t.select({orgId:f.orgMembers.orgId}).from(f.orgMembers).innerJoin(f.orgs,pt(f.orgMembers.orgId,f.orgs.id)).where(go(pt(f.orgMembers.userId,e.userId),pt(f.orgs.isPersonal,!0))).get();if(!n)throw Error("No personal org found for user");let o=t.select().from(f.drives).where(go(pt(f.drives.orgId,n.orgId),pt(f.drives.isDefault,!0))).get();if(!o)throw Error("No default drive found");let i=Et(t,e.userId,o.id);if(!i)throw Error("You do not have access to your default drive");return{orgId:n.orgId,driveId:o.id,role:i}}var Hf=g(()=>{a();me()});function le(t){let e=L();if(e.auth.apiKey){if(st(t,e.auth.apiKey))return{apiKey:e.auth.apiKey}}console.error("[agent-fs] No local user found, creating one...");let n=q(t,{email:"local@agent-fs.local"});return N("auth.apiKey",n.apiKey),console.error("[agent-fs] Local user created automatically."),{apiKey:n.apiKey}}var Yf=g(()=>{zt();so()});var Gf=g(()=>{so();yo();lo();me();Hf();Yf()});var Bf;var Zf=g(()=>{Bf={name:"agent-fs",version:"0.5.4",private:!0,workspaces:["packages/*"],scripts:{typecheck:"tsc --build",test:"bun test packages/*/src/","test:coverage":"bun test --coverage packages/*/src/",build:"cd packages/cli && bun run build:npm","install-local":"bun run build && cd packages/cli && bun link","uninstall-local":"bun remove -g @desplega.ai/agent-fs && rm -f ~/.bun/bin/agent-fs","deploy:fly":"fly deploy -a agent-fs-taras"},devDependencies:{"bun-types":"^1.2.0",typescript:"^5.7.0",yaml:"^2.8.2","zod-to-json-schema":"^3.25.1"},overrides:{chromadb:"npm:empty-npm-package@1.0.0","chromadb-default-embed":"npm:empty-npm-package@1.0.0","@xenova/transformers":"npm:empty-npm-package@1.0.0","tree-sitter-wasms":"npm:empty-npm-package@1.0.0","web-tree-sitter":"npm:empty-npm-package@1.0.0","cohere-ai":"npm:empty-npm-package@1.0.0",voyageai:"npm:empty-npm-package@1.0.0",ollama:"npm:empty-npm-package@1.0.0"}}});var B;var To=g(()=>{Zf();B=Bf.version});var Vf={};Ft(Vf,{LocalEmbeddingProvider:()=>Qf});import{join as Id}from"path";import{mkdirSync as _d,existsSync as Dd}from"fs";class Qf{name="local";dimensions=768;llama=null;model=null;embeddingContext=null;initPromise=null;async init(){if(this.embeddingContext)return;if(this.initPromise)return this.initPromise;return this.initPromise=this._doInit(),this.initPromise}async _doInit(){let{getLlama:t,resolveModelFile:e}=await import("node-llama-cpp");this.llama=await t();let n=Id(nt(),"models");if(!Dd(n))_d(n,{recursive:!0});console.error("[agent-fs] Resolving local embedding model...");let o=await e(vd,n);console.error("[agent-fs] Model ready:",o),this.model=await this.llama.loadModel({modelPath:o}),this.embeddingContext=await this.model.createEmbeddingContext()}async embed(t){await this.init();let e=await this.embeddingContext.getEmbeddingFor(t);return Array.from(e.vector)}async embedBatch(t){await this.init();let e=[];for(let n of t){let o=await this.embeddingContext.getEmbeddingFor(n);e.push(Array.from(o.vector))}return e}async dispose(){if(this.embeddingContext)await this.embeddingContext.dispose(),this.embeddingContext=null;if(this.model)await this.model.dispose(),this.model=null;this.initPromise=null}}var vd="hf:nomic-ai/nomic-embed-text-v1.5-GGUF:Q8_0";var Jf=g(()=>{zt()});var Ro={};Ft(Ro,{OpenAIEmbeddingProvider:()=>Wf});import Ld from"openai";class Wf{name="openai";dimensions=768;client;constructor(t){this.client=new Ld({apiKey:t})}async embed(t){return(await this.client.embeddings.create({model:"text-embedding-3-small",input:t,dimensions:768})).data[0].embedding}async embedBatch(t){return(await this.client.embeddings.create({model:"text-embedding-3-small",input:t,dimensions:768})).data.sort((n,o)=>n.index-o.index).map((n)=>n.embedding)}}var Ao=()=>{};var wo={};Ft(wo,{GeminiEmbeddingProvider:()=>Kf});import{GoogleGenAI as Od}from"@google/genai";class Kf{name="gemini";dimensions=768;client;constructor(t){this.client=new Od({apiKey:t})}async embed(t){return(await this.client.models.embedContent({model:"gemini-embedding-001",contents:t,config:{outputDimensionality:768}})).embeddings[0].values}async embedBatch(t){let e=[];for(let n of t){let o=await this.client.models.embedContent({model:"gemini-embedding-001",contents:n,config:{outputDimensionality:768}});e.push(o.embeddings[0].values)}return e}}var No=()=>{};async function bf(t){switch(t.provider){case"local":{let{LocalEmbeddingProvider:e}=await Promise.resolve().then(() => (Jf(),Vf));return new e}case"openai":{if(!t.apiKey)throw Error("OpenAI API key required. Set embedding.apiKey in config.");let{OpenAIEmbeddingProvider:e}=await Promise.resolve().then(() => (Ao(),Ro));return new e(t.apiKey)}case"gemini":{if(!t.apiKey)throw Error("Gemini API key required. Set embedding.apiKey in config.");let{GeminiEmbeddingProvider:e}=await Promise.resolve().then(() => (No(),wo));return new e(t.apiKey)}default:throw Error(`Unknown embedding provider: ${t.provider}`)}}async function kt(t){if(process.env.OPENAI_API_KEY)try{let{OpenAIEmbeddingProvider:e}=await Promise.resolve().then(() => (Ao(),Ro));return new e(process.env.OPENAI_API_KEY)}catch(e){console.error("[agent-fs] Failed to load OpenAI provider:",e)}if(process.env.GEMINI_API_KEY)try{let{GeminiEmbeddingProvider:e}=await Promise.resolve().then(() => (No(),wo));return new e(process.env.GEMINI_API_KEY)}catch(e){console.error("[agent-fs] Failed to load Gemini provider:",e)}if(t?.provider&&t.provider!=="local"&&t.apiKey)try{return await bf(t)}catch(e){console.error("[agent-fs] Failed to create embedding provider from config:",e)}if(t?.provider==="local")try{return await bf(t)}catch(e){console.error("[agent-fs] Failed to load local embedding provider:",e)}return null}var jf,kf,zf=(t)=>typeof t==="string"?{...kf,name:t}:{...kf,...t};var Ze=g(()=>{jf=Symbol("Let zodToJsonSchema decide on which parser to use"),kf={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"}});var qf=(t)=>{let e=zf(t),n=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:n,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([o,i])=>[i._def,{def:i._def,path:[...e.basePath,e.definitionPath,o],jsonSchema:void 0}]))}};var po=g(()=>{Ze()});function Io(t,e,n,o){if(!o?.errorMessages)return;if(n)t.errorMessage={...t.errorMessage,[e]:n}}function D(t,e,n,o,i){t[e]=n,Io(t,e,o,i)}var Be=(t,e)=>{let n=0;for(;n<t.length&&n<e.length;n++)if(t[n]!==e[n])break;return[(t.length-n).toString(),...e.slice(n)].join("/")};function m(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?Be(e,t.currentPath):e.join("/")}}var b=()=>{};import{ZodFirstPartyTypeKind as Sd}from"zod/v3";function xf(t,e){let n={type:"array"};if(t.type?._def&&t.type?._def?.typeName!==Sd.ZodAny)n.items=w(t.type._def,{...e,currentPath:[...e.currentPath,"items"]});if(t.minLength)D(n,"minItems",t.minLength.value,t.minLength.message,e);if(t.maxLength)D(n,"maxItems",t.maxLength.value,t.maxLength.message,e);if(t.exactLength)D(n,"minItems",t.exactLength.value,t.exactLength.message,e),D(n,"maxItems",t.exactLength.value,t.exactLength.message,e);return n}var _o=g(()=>{c()});function tE(t,e){let n={type:"integer",format:"int64"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"min":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"minimum",o.value,o.message,e);else D(n,"exclusiveMinimum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMinimum=!0;D(n,"minimum",o.value,o.message,e)}break;case"max":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"maximum",o.value,o.message,e);else D(n,"exclusiveMaximum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMaximum=!0;D(n,"maximum",o.value,o.message,e)}break;case"multipleOf":D(n,"multipleOf",o.value,o.message,e);break}return n}var Do=()=>{};function eE(){return{type:"boolean"}}function Qe(t,e){return w(t.type._def,e)}var Ve=g(()=>{c()});var nE=(t,e)=>{return w(t.innerType._def,e)};var vo=g(()=>{c()});function Lo(t,e,n){let o=n??e.dateStrategy;if(Array.isArray(o))return{anyOf:o.map((i,r)=>Lo(t,e,i))};switch(o){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return Ud(t,e)}}var Ud=(t,e)=>{let n={type:"integer",format:"unix-time"};if(e.target==="openApi3")return n;for(let o of t.checks)switch(o.kind){case"min":D(n,"minimum",o.value,o.message,e);break;case"max":D(n,"maximum",o.value,o.message,e);break}return n};var Oo=()=>{};function oE(t,e){return{...w(t.innerType._def,e),default:t.defaultValue()}}var So=g(()=>{c()});function iE(t,e){return e.effectStrategy==="input"?w(t.schema._def,e):m(e)}var Uo=g(()=>{c();b()});function rE(t){return{type:"string",enum:Array.from(t.values)}}function uE(t,e){let n=[w(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),w(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter((r)=>!!r),o=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,i=[];return n.forEach((r)=>{if(hd(r)){if(i.push(...r.allOf),r.unevaluatedProperties===void 0)o=void 0}else{let u=r;if("additionalProperties"in r&&r.additionalProperties===!1){let{additionalProperties:E,...l}=r;u=l}else o=void 0;i.push(u)}}),i.length?{allOf:i,...o}:void 0}var hd=(t)=>{if("type"in t&&t.type==="string")return!1;return"allOf"in t};var ho=g(()=>{c()});function fE(t,e){let n=typeof t.value;if(n!=="bigint"&&n!=="number"&&n!=="boolean"&&n!=="string")return{type:Array.isArray(t.value)?"array":"object"};if(e.target==="openApi3")return{type:n==="bigint"?"integer":n,enum:[t.value]};return{type:n==="bigint"?"integer":n,const:t.value}}function Je(t,e){let n={type:"string"};if(t.checks)for(let o of t.checks)switch(o.kind){case"min":D(n,"minLength",typeof n.minLength==="number"?Math.max(n.minLength,o.value):o.value,o.message,e);break;case"max":D(n,"maxLength",typeof n.maxLength==="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"email":switch(e.emailStrategy){case"format:email":et(n,"email",o.message,e);break;case"format:idn-email":et(n,"idn-email",o.message,e);break;case"pattern:zod":G(n,tt.email,o.message,e);break}break;case"url":et(n,"uri",o.message,e);break;case"uuid":et(n,"uuid",o.message,e);break;case"regex":G(n,o.regex,o.message,e);break;case"cuid":G(n,tt.cuid,o.message,e);break;case"cuid2":G(n,tt.cuid2,o.message,e);break;case"startsWith":G(n,RegExp(`^${ao(o.value,e)}`),o.message,e);break;case"endsWith":G(n,RegExp(`${ao(o.value,e)}$`),o.message,e);break;case"datetime":et(n,"date-time",o.message,e);break;case"date":et(n,"date",o.message,e);break;case"time":et(n,"time",o.message,e);break;case"duration":et(n,"duration",o.message,e);break;case"length":D(n,"minLength",typeof n.minLength==="number"?Math.max(n.minLength,o.value):o.value,o.message,e),D(n,"maxLength",typeof n.maxLength==="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"includes":{G(n,RegExp(ao(o.value,e)),o.message,e);break}case"ip":{if(o.version!=="v6")et(n,"ipv4",o.message,e);if(o.version!=="v4")et(n,"ipv6",o.message,e);break}case"base64url":G(n,tt.base64url,o.message,e);break;case"jwt":G(n,tt.jwt,o.message,e);break;case"cidr":{if(o.version!=="v6")G(n,tt.ipv4Cidr,o.message,e);if(o.version!=="v4")G(n,tt.ipv6Cidr,o.message,e);break}case"emoji":G(n,tt.emoji(),o.message,e);break;case"ulid":{G(n,tt.ulid,o.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{et(n,"binary",o.message,e);break}case"contentEncoding:base64":{D(n,"contentEncoding","base64",o.message,e);break}case"pattern:zod":{G(n,tt.base64,o.message,e);break}}break}case"nanoid":G(n,tt.nanoid,o.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:((i)=>{})(o)}return n}function ao(t,e){return e.patternStrategy==="escape"?ad(t):t}function ad(t){let e="";for(let n=0;n<t.length;n++){if(!md.has(t[n]))e+="\\";e+=t[n]}return e}function et(t,e,n,o){if(t.format||t.anyOf?.some((i)=>i.format)){if(!t.anyOf)t.anyOf=[];if(t.format){if(t.anyOf.push({format:t.format,...t.errorMessage&&o.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage){if(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0)delete t.errorMessage}}t.anyOf.push({format:e,...n&&o.errorMessages&&{errorMessage:{format:n}}})}else D(t,"format",e,n,o)}function G(t,e,n,o){if(t.pattern||t.allOf?.some((i)=>i.pattern)){if(!t.allOf)t.allOf=[];if(t.pattern){if(t.allOf.push({pattern:t.pattern,...t.errorMessage&&o.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage){if(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0)delete t.errorMessage}}t.allOf.push({pattern:EE(e,o),...n&&o.errorMessages&&{errorMessage:{pattern:n}}})}else D(t,"pattern",EE(e,o),n,o)}function EE(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,i="",r=!1,u=!1,E=!1;for(let l=0;l<o.length;l++){if(r){i+=o[l],r=!1;continue}if(n.i){if(u){if(o[l].match(/[a-z]/)){if(E)i+=o[l],i+=`${o[l-2]}-${o[l]}`.toUpperCase(),E=!1;else if(o[l+1]==="-"&&o[l+2]?.match(/[a-z]/))i+=o[l],E=!0;else i+=`${o[l]}${o[l].toUpperCase()}`;continue}}else if(o[l].match(/[a-z]/)){i+=`[${o[l]}${o[l].toUpperCase()}]`;continue}}if(n.m){if(o[l]==="^"){i+=`(^|(?<=[\r
|
|
168
|
+
LIMIT ?`).all(r,n),l=[],y=new Set;for(let s of f){let d=t.db.select().from(E.contentChunks).where(eo(E.contentChunks.id,s.chunk_id)).get();if(!d||d.driveId!==t.driveId)continue;if(y.has(d.filePath))continue;y.add(d.filePath);let R=t.db.select().from(E.files).where(uT(eo(E.files.path,d.filePath),eo(E.files.driveId,t.driveId))).get();l.push({path:d.filePath,snippet:d.content.slice(0,200),author:R?.author,modifiedAt:R?.modifiedAt})}return l}function fT(t,e,n){let o=e.split(/\s+/).filter(Boolean).map((i)=>`"${i}"`).join(" OR ");if(!o)return[];try{return $e(t.db,{pattern:o,driveId:t.driveId}).slice(0,n).map((r)=>({path:r.path,snippet:r.snippet}))}catch{return[]}}var DE=g(()=>{a()});import{eq as Pe,and as lT,or as yT,isNull as sT}from"drizzle-orm";async function LE(t,e){let n=[Pe(E.files.driveId,t.driveId),Pe(E.files.isDeleted,!1),yT(Pe(E.files.embeddingStatus,"failed"),sT(E.files.embeddingStatus),Pe(E.files.embeddingStatus,"pending"))];if(e.path){let{like:l}=await import("drizzle-orm"),y=e.path.endsWith("/")?e.path:e.path+"/";n.push(l(E.files.path,y+"%"))}let o=t.db.select({path:E.files.path}).from(E.files).where(lT(...n)).all(),i=0,r=0,u=0,f=3;for(let l=0;l<o.length;l+=f){let y=o.slice(l,l+f),s=await Promise.allSettled(y.map(async(d)=>{let R=I(t.orgId,t.driveId,d.path),L=await t.s3.getObject(R),O=new TextDecoder().decode(L.body);if(J(t.db,{path:d.path,driveId:t.driveId,content:O}),t.embeddingProvider)return await jn(t.db,t.embeddingProvider,{path:d.path,driveId:t.driveId,content:O}),"reindexed";return"skipped"}));for(let d of s)if(d.status==="fulfilled")if(d.value==="reindexed")i++;else u++;else console.error("Reindex failed:",d.reason),r++}return{reindexed:i,failed:r,skipped:u}}var vE=g(()=>{a();X();Vt()});import{eq as OE,and as gT,like as TT}from"drizzle-orm";async function SE(t,e){let n=Rt(e.path??"/"),o=I(t.orgId,t.driveId,n),{objects:i}=await t.s3.listObjects(o),r=t.db.select().from(E.files).where(gT(OE(E.files.driveId,t.driveId),TT(E.files.path,n+"%"),OE(E.files.isDeleted,!1))).all(),u=new Map(r.map((l)=>[l.path,l])),f=[];for(let l of i){let y=l.key.slice(o.length);if(!y)continue;let s=y.split("/").filter(Boolean);if(s.length===0)continue;if(e.depth!==void 0&&s.length>e.depth)continue;let d=f;for(let R=0;R<s.length;R++){let L=s[R],O=R===s.length-1,C=!O||y.endsWith("/");if(C&&!O){let M=d.find((H)=>H.name===L&&H.type==="directory");if(!M)M={name:L,type:"directory",children:[]},d.push(M);if(!M.children)M.children=[];d=M.children}else if(C&&O){let M=d.find((H)=>H.name===L&&H.type==="directory");if(!M)M={name:L,type:"directory",children:[]},d.push(M)}else{let M=n+s.slice(0,R+1).join("/"),H=u.get(M),on={name:L,type:"file",size:H?.size??l.size};if(H?.author)on.author=H.author;if(H?.modifiedAt??l.lastModified)on.modifiedAt=H?.modifiedAt??l.lastModified;d.push(on)}}}return{tree:f}}var UE=g(()=>{a();X()});import{eq as hE,and as dT,like as RT}from"drizzle-orm";function AT(t){let e="",n=0;while(n<t.length){let o=t[n];if(o==="*")if(t[n+1]==="*"){if(e+=".*",n+=2,t[n]==="/")n++}else e+="[^/]*",n++;else if(o==="?")e+="[^/]",n++;else if(".+^${}()|[]\\".includes(o))e+="\\"+o,n++;else e+=o,n++}return new RegExp("^"+e+"$")}async function mE(t,e){let n=e.path?Rt(e.path):"/",o=I(t.orgId,t.driveId,n),{objects:i}=await t.s3.listObjects(o),r=t.db.select().from(E.files).where(dT(hE(E.files.driveId,t.driveId),RT(E.files.path,n+"%"),hE(E.files.isDeleted,!1))).all(),u=new Map(r.map((y)=>[y.path,y])),f=AT(e.pattern),l=[];for(let y of i){let s=y.key.slice(o.length);if(!s||s.endsWith("/"))continue;if(f.test(s)){let d=n+s,R=u.get(d);l.push({path:d,size:R?.size??y.size,modifiedAt:R?.modifiedAt??y.lastModified})}}return{matches:l}}var aE=g(()=>{a();X()});async function $E(t,e){let n=$u(e.path),o=I(t.orgId,t.driveId,n),i=e.expiresIn??86400;try{await t.s3.headObject(o)}catch(f){if(f?.name==="NotFound"||f?.name==="NoSuchKey"||f?.$metadata?.httpStatusCode===404)throw new U(`File not found: ${n}`,{path:n});throw f}let r=lt(n);return{url:await t.s3.getPresignedUrl(o,i,r!=="application/octet-stream"?r:void 0),path:n,expiresIn:i,expiresAt:new Date(Date.now()+i*1000).toISOString()}}var PE=g(()=>{X();V();Bt()});function no(t,e,n,o){let i=o.startsWith("/")?o.slice(1):o;return`${t}/file/~/${e}/${n}/${i}`}import{eq as S,and as yt,sql as oo,desc as CE}from"drizzle-orm";function io(t,e){t.db.insert(E.events).values({id:crypto.randomUUID(),orgId:t.orgId,type:e.type,resourceType:e.resourceType,resourceId:e.resourceId,actor:t.userId,target:e.target??null,status:"created",metadata:e.metadata?JSON.stringify(e.metadata):null,createdAt:new Date}).run()}function Ce(t){return{id:t.id,parentId:t.parentId??void 0,path:t.path,lineStart:t.lineStart??void 0,lineEnd:t.lineEnd??void 0,quotedContent:t.quotedContent??void 0,body:t.body,author:t.author,resolved:t.resolved??!1,resolvedBy:t.resolvedBy??void 0,resolvedAt:t.resolvedAt??void 0,fileVersionId:t.fileVersionId??void 0,replyCount:t.replyCount??0,createdAt:t.createdAt,updatedAt:t.updatedAt}}async function Me(t,e){let n=new Date,o=crypto.randomUUID(),i=e.path;if(e.parentId){let u=t.db.select().from(E.comments).where(yt(S(E.comments.id,e.parentId),S(E.comments.isDeleted,!1))).get();if(!u)throw new U("Parent comment not found",{suggestion:"Check that the parent comment ID is correct and not deleted"});if(u.parentId)throw new z("Cannot reply to a reply \u2014 only root comments accept replies",{suggestion:"Reply to the root comment instead"});if(!i)i=u.path}if(!i)throw new z("path is required for root comments",{field:"path"});let r=t.db.select({id:E.fileVersions.id}).from(E.fileVersions).where(yt(S(E.fileVersions.path,i),S(E.fileVersions.driveId,t.driveId))).orderBy(CE(E.fileVersions.id)).limit(1).get();return t.db.insert(E.comments).values({id:o,parentId:e.parentId??null,orgId:t.orgId,driveId:t.driveId,path:i,lineStart:e.lineStart??null,lineEnd:e.lineEnd??null,quotedContent:e.quotedContent??null,fileVersionId:r?.id??null,body:e.body,author:t.userId,resolved:!1,createdAt:n,updatedAt:n,isDeleted:!1}).run(),io(t,{type:"comment_created",resourceType:"comment",resourceId:o,metadata:{path:i,parentId:e.parentId}}),{id:o,path:i,body:e.body,parentId:e.parentId,lineStart:e.lineStart,lineEnd:e.lineEnd,author:t.userId,createdAt:n}}async function ce(t,e){let n=[S(E.comments.driveId,t.driveId),S(E.comments.isDeleted,!1)];if(e.path)n.push(S(E.comments.path,e.path));if(e.parentId)n.push(S(E.comments.parentId,e.parentId));else if(e.parentId===void 0&&!e.resolved)n.push(oo`${E.comments.parentId} IS NULL`),n.push(S(E.comments.resolved,!1));else if(e.parentId===void 0&&e.resolved)n.push(oo`${E.comments.parentId} IS NULL`);if(e.orgId)n.push(S(E.comments.orgId,e.orgId));let o=e.limit??50,i=e.offset??0;return{comments:t.db.select().from(E.comments).where(yt(...n)).orderBy(CE(E.comments.createdAt)).limit(o).offset(i).all().map((f)=>{let y=t.db.select().from(E.comments).where(yt(S(E.comments.parentId,f.id),S(E.comments.isDeleted,!1))).orderBy(E.comments.createdAt).all().map((s)=>Ce({...s,replyCount:0}));return{...Ce({...f,replyCount:y.length}),replies:y}})}}async function Xe(t,e){let n=t.db.select().from(E.comments).where(yt(S(E.comments.id,e.id),S(E.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});let o=t.db.select({count:oo`count(*)`}).from(E.comments).where(yt(S(E.comments.parentId,n.id),S(E.comments.isDeleted,!1))).get(),i=Ce({...n,replyCount:o?.count??0}),u=t.db.select().from(E.comments).where(yt(S(E.comments.parentId,e.id),S(E.comments.isDeleted,!1))).orderBy(E.comments.createdAt).all().map((f)=>Ce({...f,replyCount:0}));return{comment:i,replies:u}}async function Fe(t,e){let n=t.db.select().from(E.comments).where(yt(S(E.comments.id,e.id),S(E.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.author!==t.userId)throw new j("You can only edit your own comments",{suggestion:"Only the comment author can update it"});let o=new Date;return t.db.update(E.comments).set({body:e.body,updatedAt:o}).where(S(E.comments.id,e.id)).run(),{id:e.id,body:e.body,updatedAt:o}}async function He(t,e){let n=t.db.select().from(E.comments).where(yt(S(E.comments.id,e.id),S(E.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.author!==t.userId)throw new j("You can only delete your own comments",{suggestion:"Only the comment author can delete it"});let o=new Date;if(t.db.update(E.comments).set({isDeleted:!0,updatedAt:o}).where(S(E.comments.id,e.id)).run(),!n.parentId)t.db.update(E.comments).set({isDeleted:!0,updatedAt:o}).where(S(E.comments.parentId,e.id)).run();return io(t,{type:"comment_deleted",resourceType:"comment",resourceId:e.id}),{deleted:!0}}async function Ye(t,e){let n=t.db.select().from(E.comments).where(yt(S(E.comments.id,e.id),S(E.comments.isDeleted,!1))).get();if(!n)throw new U("Comment not found",{suggestion:"Check that the comment ID is correct"});if(n.parentId)throw new z("Cannot resolve a reply \u2014 only root comments can be resolved",{suggestion:"Resolve the parent comment instead"});let o=new Date,i=e.resolved?o:null,r=e.resolved?t.userId:null;return t.db.update(E.comments).set({resolved:e.resolved,resolvedBy:r,resolvedAt:i,updatedAt:o}).where(S(E.comments.id,e.id)).run(),io(t,{type:e.resolved?"comment_resolved":"comment_reopened",resourceType:"comment",resourceId:e.id}),{id:e.id,resolved:e.resolved,resolvedBy:r??void 0,resolvedAt:i??void 0}}var ME=g(()=>{a();V()});import{z as T}from"zod";async function wt(t,e,n,o){let i=ro[e];if(!i)throw Error(`Unknown operation: ${e}`);if(!o?.skipAuth){let f=ue(e);Ee(t.db,{userId:t.userId,driveId:t.driveId,requiredRole:f})}let r=i.schema.parse(n),u=await i.handler(t,r);if(t.appUrl&&u&&typeof u==="object"){if("path"in u)u.appUrl=no(t.appUrl,t.orgId,t.driveId,u.path);else if("to"in u)u.appUrl=no(t.appUrl,t.orgId,t.driveId,u.to)}return u}function Kt(){return Object.keys(ro)}function Nt(t){return ro[t]}var ro;var uo=g(()=>{me();Xu();Hu();Gu();Bu();Ju();bu();ju();xu();eE();oE();uE();lE();sE();dE();AE();NE();IE();DE();vE();UE();aE();PE();ME();ro={write:{description:"Write or overwrite a file. Creates the file if it doesn't exist, or creates a new version. Use expectedVersion for optimistic concurrency. Returns { version, path, size }.",handler:cu,schema:T.object({path:T.string(),content:T.string(),message:T.string().optional(),expectedVersion:T.number().int().optional()})},cat:{description:"Read file content with optional pagination via offset/limit. Returns { content, totalLines, truncated }.",handler:Fu,schema:T.object({path:T.string(),offset:T.number().int().min(0).optional(),limit:T.number().int().min(1).optional()})},edit:{description:"Replace a specific string in a file (surgical find-and-replace). Captures the edit intent as a diff summary in version history. Returns { version, path, changes }.",handler:Yu,schema:T.object({path:T.string(),old_string:T.string(),new_string:T.string(),message:T.string().optional()})},append:{description:"Append content to the end of an existing file. Creates a new version. Returns { version, size }.",handler:Zu,schema:T.object({path:T.string(),content:T.string(),message:T.string().optional()})},ls:{description:"List immediate children of a directory. Returns { entries } where each entry has name, type (file/directory), size, author, modifiedAt.",handler:Vu,schema:T.object({path:T.string().optional()})},stat:{description:"Get file metadata without reading content. Returns path, size, contentType, author, currentVersion, createdAt, modifiedAt, isDeleted, embeddingStatus.",handler:Ku,schema:T.object({path:T.string()})},rm:{description:"Delete a file. Removes from S3, cleans up FTS5 index and vector embeddings. Returns { path, deleted }.",handler:ku,schema:T.object({path:T.string()})},mv:{description:"Move or rename a file. Preserves version history at the new path. Returns { from, to, version }.",handler:qu,schema:T.object({from:T.string(),to:T.string(),message:T.string().optional()})},cp:{description:"Copy a file using server-side S3 copy. Creates a new version at the destination. Returns { from, to, version }.",handler:tE,schema:T.object({from:T.string(),to:T.string()})},tail:{description:"Read the last N lines of a file (default 20). Returns { content, totalLines, truncated }.",handler:nE,schema:T.object({path:T.string(),lines:T.number().int().min(1).optional()})},log:{description:"Show version history for a file. Returns { versions } with version number, author, timestamp, operation type, message, and diff summary.",handler:rE,schema:T.object({path:T.string(),limit:T.number().int().min(1).optional()})},diff:{description:"Show the diff between two versions of a file. Specify v1 and v2 version numbers. Returns { changes } as add/remove/context hunks.",handler:fE,schema:T.object({path:T.string(),v1:T.number().int(),v2:T.number().int()})},revert:{description:"Revert a file to a previous version. Creates a new version with the old content. Returns { version, revertedTo }.",handler:yE,schema:T.object({path:T.string(),version:T.number().int()})},recent:{description:"Show recent activity across the drive. Optionally filter by path prefix and time window (since). Returns { entries } with path and version details.",handler:TE,schema:T.object({path:T.string().optional(),since:T.coerce.date().optional(),limit:T.number().int().min(1).optional()})},grep:{description:"Search file content using regex pattern within a specific path. Returns matching lines with line numbers. Searches the FTS5 index, not S3 directly.",handler:RE,schema:T.object({pattern:T.string(),path:T.string()})},fts:{description:"Full-text search across all file content using FTS5 tokens. Different from grep (regex) and search (semantic). Returns { matches } with path, snippet, and rank.",handler:wE,schema:T.object({pattern:T.string(),path:T.string().optional()})},search:{description:"Hybrid search combining semantic (vector) and keyword (FTS5) matching. Best for natural language queries. Degrades to keyword-only without an embedding provider.",handler:_E,schema:T.object({query:T.string(),limit:T.number().int().min(1).optional()})},"vec-search":{description:"Vector-only semantic search using embeddings. Returns results ranked by cosine similarity. Requires an embedding provider (OPENAI_API_KEY, GEMINI_API_KEY, or local).",handler:pE,schema:T.object({query:T.string(),limit:T.number().int().min(1).optional()})},reindex:{description:"Re-index files with failed or missing FTS5/embedding entries. Optionally scope to a path prefix. Use after bulk writes or provider changes.",handler:LE,schema:T.object({path:T.string().optional()})},tree:{description:"Recursively list all files and directories. Use depth to limit recursion. Returns a nested tree structure with name, type, size, and children.",handler:SE,schema:T.object({path:T.string().optional(),depth:T.number().int().min(1).optional()})},glob:{description:"Find files by name pattern. Use `*.md` for root-level files only, `**/*.md` for recursive matching across all subdirectories. Supports `*` (any chars except /), `?` (single char), `**` (any path depth). Optionally scope to a path prefix. Returns { matches } with path, size, and modifiedAt.",handler:mE,schema:T.object({pattern:T.string(),path:T.string().optional()})},"signed-url":{description:"Generate a temporary presigned URL for direct file download. Default expiry is 24 hours (86400 seconds). The URL requires no authentication. Returns { url, path, expiresIn, expiresAt }.",handler:$E,schema:T.object({path:T.string(),expiresIn:T.number().int().min(60).max(604800).optional()})},"comment-add":{description:"Add a comment to a file. Supports line ranges and threading via parentId. Replies auto-resolve path from parent. Returns { id, path, body, author, createdAt }.",handler:Me,schema:T.object({path:T.string().optional(),body:T.string(),parentId:T.string().optional(),lineStart:T.number().int().optional(),lineEnd:T.number().int().optional(),quotedContent:T.string().optional()})},"comment-list":{description:"List comments on a file. Filter by path, resolved state, or parentId. Defaults to unresolved root comments. Returns { comments } with inline replies.",handler:ce,schema:T.object({path:T.string().optional(),parentId:T.string().optional(),resolved:T.boolean().optional(),orgId:T.string().optional(),limit:T.number().int().min(1).optional(),offset:T.number().int().min(0).optional()})},"comment-get":{description:"Get a single comment by ID with all its replies. Returns { comment, replies }.",handler:Xe,schema:T.object({id:T.string()})},"comment-update":{description:"Update a comment's body. Only the original author can update. Returns { id, body, updatedAt }.",handler:Fe,schema:T.object({id:T.string(),body:T.string()})},"comment-delete":{description:"Soft-delete a comment. Only the original author can delete. Deleting a root comment also soft-deletes its replies. Returns { deleted }.",handler:He,schema:T.object({id:T.string()})},"comment-resolve":{description:"Resolve or reopen a root comment. Set resolved=true to resolve, resolved=false to reopen. Only root comments can be resolved. Returns { id, resolved, resolvedBy, resolvedAt }.",handler:Ye,schema:T.object({id:T.string(),resolved:T.boolean()})}}});import{eq as K,and as Ge}from"drizzle-orm";function Lt(t,e){let n=crypto.randomUUID(),o=new Date;return t.insert(E.drives).values({id:n,orgId:e.orgId,name:e.name,isDefault:e.isDefault??!1,createdAt:o}).run(),{id:n,name:e.name}}function vt(t,e){return t.select().from(E.drives).where(K(E.drives.orgId,e)).all().map((n)=>({id:n.id,name:n.name,isDefault:n.isDefault}))}function Eo(t,e){let n=t.select().from(E.drives).where(K(E.drives.id,e)).get();if(!n)return null;return{id:n.id,name:n.name,orgId:n.orgId,isDefault:n.isDefault}}function Ot(t,e){return t.select({userId:E.driveMembers.userId,email:E.users.email,role:E.driveMembers.role}).from(E.driveMembers).innerJoin(E.users,K(E.driveMembers.userId,E.users.id)).where(K(E.driveMembers.driveId,e)).all()}function St(t,e){if(!t.select({role:E.driveMembers.role}).from(E.driveMembers).where(Ge(K(E.driveMembers.driveId,e.driveId),K(E.driveMembers.userId,e.userId))).get())throw Error("Member not found in drive");t.update(E.driveMembers).set({role:e.role}).where(Ge(K(E.driveMembers.driveId,e.driveId),K(E.driveMembers.userId,e.userId))).run()}function Ut(t,e){if(!t.select({role:E.driveMembers.role}).from(E.driveMembers).where(Ge(K(E.driveMembers.driveId,e.driveId),K(E.driveMembers.userId,e.userId))).get())throw Error("Member not found in drive");t.delete(E.driveMembers).where(Ge(K(E.driveMembers.driveId,e.driveId),K(E.driveMembers.userId,e.userId))).run()}function fo(t,e){t.insert(E.driveMembers).values({driveId:e.driveId,userId:e.userId,role:e.role}).onConflictDoUpdate({target:[E.driveMembers.driveId,E.driveMembers.userId],set:{role:e.role}}).run()}var lo=g(()=>{a()});import{eq as $,and as ht,sql as cE}from"drizzle-orm";function mt(t,e){let n=crypto.randomUUID(),o=new Date;t.insert(E.orgs).values({id:n,name:e.name,isPersonal:e.isPersonal??!1,createdAt:o}).run(),t.insert(E.orgMembers).values({orgId:n,userId:e.userId,role:"admin"}).run();let i=Lt(t,{orgId:n,name:"default",isDefault:!0});return t.insert(E.driveMembers).values({driveId:i.id,userId:e.userId,role:"admin"}).run(),{id:n,name:e.name}}function Z(t,e){return t.select({orgId:E.orgMembers.orgId,role:E.orgMembers.role,name:E.orgs.name,isPersonal:E.orgs.isPersonal}).from(E.orgMembers).innerJoin(E.orgs,$(E.orgMembers.orgId,E.orgs.id)).where($(E.orgMembers.userId,e)).all().map((o)=>({id:o.orgId,name:o.name,role:o.role,isPersonal:o.isPersonal}))}function fe(t,e){let n=t.select().from(E.orgs).where($(E.orgs.id,e)).get();if(!n)return null;return{id:n.id,name:n.name,isPersonal:n.isPersonal}}function at(t,e){return t.select({userId:E.orgMembers.userId,email:E.users.email,role:E.orgMembers.role}).from(E.orgMembers).innerJoin(E.users,$(E.orgMembers.userId,E.users.id)).where($(E.orgMembers.orgId,e)).all()}function $t(t,e){let n=t.select({role:E.orgMembers.role}).from(E.orgMembers).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.userId,e.userId))).get();if(!n)throw Error("Member not found in org");if(n.role==="admin"&&e.role!=="admin"){if(t.select({count:cE`count(*)`}).from(E.orgMembers).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.role,"admin"))).get().count<=1)throw Error("Cannot remove the last admin from the org")}t.update(E.orgMembers).set({role:e.role}).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.userId,e.userId))).run()}function Pt(t,e){if(t.select({isPersonal:E.orgs.isPersonal}).from(E.orgs).where($(E.orgs.id,e.orgId)).get()?.isPersonal)throw Error("Cannot remove members from a personal org");let o=t.select({role:E.orgMembers.role}).from(E.orgMembers).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.userId,e.userId))).get();if(!o)throw Error("Member not found in org");if(o.role==="admin"){if(t.select({count:cE`count(*)`}).from(E.orgMembers).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.role,"admin"))).get().count<=1)throw Error("Cannot remove the last admin from the org")}let i=t.select({id:E.drives.id}).from(E.drives).where($(E.drives.orgId,e.orgId)).all();for(let r of i)t.delete(E.driveMembers).where(ht($(E.driveMembers.driveId,r.id),$(E.driveMembers.userId,e.userId))).run();t.delete(E.orgMembers).where(ht($(E.orgMembers.orgId,e.orgId),$(E.orgMembers.userId,e.userId))).run()}function Ct(t,e){let n=t.select().from(E.users).where($(E.users.email,e.email)).get();if(!n)throw Error(`User with email ${e.email} not found`);t.insert(E.orgMembers).values({orgId:e.orgId,userId:n.id,role:e.role}).onConflictDoUpdate({target:[E.orgMembers.orgId,E.orgMembers.userId],set:{role:e.role}}).run();let o=t.select().from(E.drives).where($(E.drives.orgId,e.orgId)).get();if(o)t.insert(E.driveMembers).values({driveId:o.id,userId:n.id,role:e.role}).onConflictDoUpdate({target:[E.driveMembers.driveId,E.driveMembers.userId],set:{role:e.role}}).run()}var yo=g(()=>{a();lo()});import{eq as XE}from"drizzle-orm";function FE(t){let e=new Bun.CryptoHasher("sha256");return e.update(t),e.digest("hex")}function wT(){let t=new Uint8Array(32);return crypto.getRandomValues(t),`af_${Array.from(t,(n)=>n.toString(16).padStart(2,"0")).join("")}`}function NT(){return crypto.randomUUID()}function q(t,e){let n=NT(),o=wT(),i=FE(o),r=new Date;return t.insert(E.users).values({id:n,email:e.email,apiKeyHash:i,createdAt:r}).run(),mt(t,{name:e.email.split("@")[0],userId:n,isPersonal:!0}),{user:{id:n,email:e.email},apiKey:o}}function st(t,e){let n=FE(e),o=t.select().from(E.users).where(XE(E.users.apiKeyHash,n)).get();if(!o)return null;return{id:o.id,email:o.email}}function bt(t,e){let n=t.select().from(E.users).where(XE(E.users.email,e)).get();if(!n)return null;return{id:n.id,email:n.email}}var so=g(()=>{a();yo()});import{eq as pt,and as go}from"drizzle-orm";function x(t,e){if(e.driveId){let r=t.select().from(E.drives).where(pt(E.drives.id,e.driveId)).get();if(!r)throw Error(`Drive not found: ${e.driveId}`);let u=ft(t,e.userId,e.driveId);if(!u)throw Error("You do not have access to this drive");return{orgId:r.orgId,driveId:e.driveId,role:u}}if(e.orgId){let r=t.select().from(E.drives).where(go(pt(E.drives.orgId,e.orgId),pt(E.drives.isDefault,!0))).get();if(!r)throw Error(`No default drive for org: ${e.orgId}`);let u=ft(t,e.userId,r.id);if(!u)throw Error("You do not have access to this drive");return{orgId:e.orgId,driveId:r.id,role:u}}let n=t.select({orgId:E.orgMembers.orgId}).from(E.orgMembers).innerJoin(E.orgs,pt(E.orgMembers.orgId,E.orgs.id)).where(go(pt(E.orgMembers.userId,e.userId),pt(E.orgs.isPersonal,!0))).get();if(!n)throw Error("No personal org found for user");let o=t.select().from(E.drives).where(go(pt(E.drives.orgId,n.orgId),pt(E.drives.isDefault,!0))).get();if(!o)throw Error("No default drive found");let i=ft(t,e.userId,o.id);if(!i)throw Error("You do not have access to your default drive");return{orgId:n.orgId,driveId:o.id,role:i}}var HE=g(()=>{a();me()});function le(t){let e=v();if(e.auth.apiKey){if(st(t,e.auth.apiKey))return{apiKey:e.auth.apiKey}}console.error("[agent-fs] No local user found, creating one...");let n=q(t,{email:"local@agent-fs.local"});return N("auth.apiKey",n.apiKey),console.error("[agent-fs] Local user created automatically."),{apiKey:n.apiKey}}var YE=g(()=>{zt();so()});var GE=g(()=>{so();yo();lo();me();HE();YE()});var BE;var ZE=g(()=>{BE={name:"agent-fs",version:"0.5.5",private:!0,workspaces:["packages/*"],scripts:{typecheck:"tsc --build",test:"bun test packages/*/src/","test:coverage":"bun test --coverage packages/*/src/",build:"cd packages/cli && bun run build:npm","install-local":"bun run build && cd packages/cli && bun link","uninstall-local":"bun remove -g @desplega.ai/agent-fs && rm -f ~/.bun/bin/agent-fs","deploy:fly":"fly deploy -a agent-fs-taras"},devDependencies:{"bun-types":"^1.2.0",typescript:"^5.7.0",yaml:"^2.8.2","zod-to-json-schema":"^3.25.1"},overrides:{chromadb:"npm:empty-npm-package@1.0.0","chromadb-default-embed":"npm:empty-npm-package@1.0.0","@xenova/transformers":"npm:empty-npm-package@1.0.0","tree-sitter-wasms":"npm:empty-npm-package@1.0.0","web-tree-sitter":"npm:empty-npm-package@1.0.0","cohere-ai":"npm:empty-npm-package@1.0.0",voyageai:"npm:empty-npm-package@1.0.0",ollama:"npm:empty-npm-package@1.0.0"}}});var B;var To=g(()=>{ZE();B=BE.version});var VE={};Ft(VE,{LocalEmbeddingProvider:()=>QE});import{join as IT}from"path";import{mkdirSync as _T,existsSync as DT}from"fs";class QE{name="local";dimensions=768;llama=null;model=null;embeddingContext=null;initPromise=null;async init(){if(this.embeddingContext)return;if(this.initPromise)return this.initPromise;return this.initPromise=this._doInit(),this.initPromise}async _doInit(){let{getLlama:t,resolveModelFile:e}=await import("node-llama-cpp");this.llama=await t();let n=IT(nt(),"models");if(!DT(n))_T(n,{recursive:!0});console.error("[agent-fs] Resolving local embedding model...");let o=await e(LT,n);console.error("[agent-fs] Model ready:",o),this.model=await this.llama.loadModel({modelPath:o}),this.embeddingContext=await this.model.createEmbeddingContext()}async embed(t){await this.init();let e=await this.embeddingContext.getEmbeddingFor(t);return Array.from(e.vector)}async embedBatch(t){await this.init();let e=[];for(let n of t){let o=await this.embeddingContext.getEmbeddingFor(n);e.push(Array.from(o.vector))}return e}async dispose(){if(this.embeddingContext)await this.embeddingContext.dispose(),this.embeddingContext=null;if(this.model)await this.model.dispose(),this.model=null;this.initPromise=null}}var LT="hf:nomic-ai/nomic-embed-text-v1.5-GGUF:Q8_0";var JE=g(()=>{zt()});var Ro={};Ft(Ro,{OpenAIEmbeddingProvider:()=>WE});import vT from"openai";class WE{name="openai";dimensions=768;client;constructor(t){this.client=new vT({apiKey:t})}async embed(t){return(await this.client.embeddings.create({model:"text-embedding-3-small",input:t,dimensions:768})).data[0].embedding}async embedBatch(t){return(await this.client.embeddings.create({model:"text-embedding-3-small",input:t,dimensions:768})).data.sort((n,o)=>n.index-o.index).map((n)=>n.embedding)}}var Ao=()=>{};var wo={};Ft(wo,{GeminiEmbeddingProvider:()=>KE});import{GoogleGenAI as OT}from"@google/genai";class KE{name="gemini";dimensions=768;client;constructor(t){this.client=new OT({apiKey:t})}async embed(t){return(await this.client.models.embedContent({model:"gemini-embedding-001",contents:t,config:{outputDimensionality:768}})).embeddings[0].values}async embedBatch(t){let e=[];for(let n of t){let o=await this.client.models.embedContent({model:"gemini-embedding-001",contents:n,config:{outputDimensionality:768}});e.push(o.embeddings[0].values)}return e}}var No=()=>{};async function bE(t){switch(t.provider){case"local":{let{LocalEmbeddingProvider:e}=await Promise.resolve().then(() => (JE(),VE));return new e}case"openai":{if(!t.apiKey)throw Error("OpenAI API key required. Set embedding.apiKey in config.");let{OpenAIEmbeddingProvider:e}=await Promise.resolve().then(() => (Ao(),Ro));return new e(t.apiKey)}case"gemini":{if(!t.apiKey)throw Error("Gemini API key required. Set embedding.apiKey in config.");let{GeminiEmbeddingProvider:e}=await Promise.resolve().then(() => (No(),wo));return new e(t.apiKey)}default:throw Error(`Unknown embedding provider: ${t.provider}`)}}async function kt(t){if(process.env.OPENAI_API_KEY)try{let{OpenAIEmbeddingProvider:e}=await Promise.resolve().then(() => (Ao(),Ro));return new e(process.env.OPENAI_API_KEY)}catch(e){console.error("[agent-fs] Failed to load OpenAI provider:",e)}if(process.env.GEMINI_API_KEY)try{let{GeminiEmbeddingProvider:e}=await Promise.resolve().then(() => (No(),wo));return new e(process.env.GEMINI_API_KEY)}catch(e){console.error("[agent-fs] Failed to load Gemini provider:",e)}if(t?.provider&&t.provider!=="local"&&t.apiKey)try{return await bE(t)}catch(e){console.error("[agent-fs] Failed to create embedding provider from config:",e)}if(t?.provider==="local")try{return await bE(t)}catch(e){console.error("[agent-fs] Failed to load local embedding provider:",e)}return null}var jE,kE,zE=(t)=>typeof t==="string"?{...kE,name:t}:{...kE,...t};var Ze=g(()=>{jE=Symbol("Let zodToJsonSchema decide on which parser to use"),kE={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"}});var qE=(t)=>{let e=zE(t),n=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:n,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([o,i])=>[i._def,{def:i._def,path:[...e.basePath,e.definitionPath,o],jsonSchema:void 0}]))}};var po=g(()=>{Ze()});function Io(t,e,n,o){if(!o?.errorMessages)return;if(n)t.errorMessage={...t.errorMessage,[e]:n}}function D(t,e,n,o,i){t[e]=n,Io(t,e,o,i)}var Be=(t,e)=>{let n=0;for(;n<t.length&&n<e.length;n++)if(t[n]!==e[n])break;return[(t.length-n).toString(),...e.slice(n)].join("/")};function m(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?Be(e,t.currentPath):e.join("/")}}var b=()=>{};import{ZodFirstPartyTypeKind as ST}from"zod/v3";function xE(t,e){let n={type:"array"};if(t.type?._def&&t.type?._def?.typeName!==ST.ZodAny)n.items=w(t.type._def,{...e,currentPath:[...e.currentPath,"items"]});if(t.minLength)D(n,"minItems",t.minLength.value,t.minLength.message,e);if(t.maxLength)D(n,"maxItems",t.maxLength.value,t.maxLength.message,e);if(t.exactLength)D(n,"minItems",t.exactLength.value,t.exactLength.message,e),D(n,"maxItems",t.exactLength.value,t.exactLength.message,e);return n}var _o=g(()=>{c()});function tf(t,e){let n={type:"integer",format:"int64"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"min":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"minimum",o.value,o.message,e);else D(n,"exclusiveMinimum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMinimum=!0;D(n,"minimum",o.value,o.message,e)}break;case"max":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"maximum",o.value,o.message,e);else D(n,"exclusiveMaximum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMaximum=!0;D(n,"maximum",o.value,o.message,e)}break;case"multipleOf":D(n,"multipleOf",o.value,o.message,e);break}return n}var Do=()=>{};function ef(){return{type:"boolean"}}function Qe(t,e){return w(t.type._def,e)}var Ve=g(()=>{c()});var nf=(t,e)=>{return w(t.innerType._def,e)};var Lo=g(()=>{c()});function vo(t,e,n){let o=n??e.dateStrategy;if(Array.isArray(o))return{anyOf:o.map((i,r)=>vo(t,e,i))};switch(o){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return UT(t,e)}}var UT=(t,e)=>{let n={type:"integer",format:"unix-time"};if(e.target==="openApi3")return n;for(let o of t.checks)switch(o.kind){case"min":D(n,"minimum",o.value,o.message,e);break;case"max":D(n,"maximum",o.value,o.message,e);break}return n};var Oo=()=>{};function of(t,e){return{...w(t.innerType._def,e),default:t.defaultValue()}}var So=g(()=>{c()});function rf(t,e){return e.effectStrategy==="input"?w(t.schema._def,e):m(e)}var Uo=g(()=>{c();b()});function uf(t){return{type:"string",enum:Array.from(t.values)}}function Ef(t,e){let n=[w(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),w(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter((r)=>!!r),o=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,i=[];return n.forEach((r)=>{if(hT(r)){if(i.push(...r.allOf),r.unevaluatedProperties===void 0)o=void 0}else{let u=r;if("additionalProperties"in r&&r.additionalProperties===!1){let{additionalProperties:f,...l}=r;u=l}else o=void 0;i.push(u)}}),i.length?{allOf:i,...o}:void 0}var hT=(t)=>{if("type"in t&&t.type==="string")return!1;return"allOf"in t};var ho=g(()=>{c()});function ff(t,e){let n=typeof t.value;if(n!=="bigint"&&n!=="number"&&n!=="boolean"&&n!=="string")return{type:Array.isArray(t.value)?"array":"object"};if(e.target==="openApi3")return{type:n==="bigint"?"integer":n,enum:[t.value]};return{type:n==="bigint"?"integer":n,const:t.value}}function Je(t,e){let n={type:"string"};if(t.checks)for(let o of t.checks)switch(o.kind){case"min":D(n,"minLength",typeof n.minLength==="number"?Math.max(n.minLength,o.value):o.value,o.message,e);break;case"max":D(n,"maxLength",typeof n.maxLength==="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"email":switch(e.emailStrategy){case"format:email":et(n,"email",o.message,e);break;case"format:idn-email":et(n,"idn-email",o.message,e);break;case"pattern:zod":G(n,tt.email,o.message,e);break}break;case"url":et(n,"uri",o.message,e);break;case"uuid":et(n,"uuid",o.message,e);break;case"regex":G(n,o.regex,o.message,e);break;case"cuid":G(n,tt.cuid,o.message,e);break;case"cuid2":G(n,tt.cuid2,o.message,e);break;case"startsWith":G(n,RegExp(`^${ao(o.value,e)}`),o.message,e);break;case"endsWith":G(n,RegExp(`${ao(o.value,e)}$`),o.message,e);break;case"datetime":et(n,"date-time",o.message,e);break;case"date":et(n,"date",o.message,e);break;case"time":et(n,"time",o.message,e);break;case"duration":et(n,"duration",o.message,e);break;case"length":D(n,"minLength",typeof n.minLength==="number"?Math.max(n.minLength,o.value):o.value,o.message,e),D(n,"maxLength",typeof n.maxLength==="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"includes":{G(n,RegExp(ao(o.value,e)),o.message,e);break}case"ip":{if(o.version!=="v6")et(n,"ipv4",o.message,e);if(o.version!=="v4")et(n,"ipv6",o.message,e);break}case"base64url":G(n,tt.base64url,o.message,e);break;case"jwt":G(n,tt.jwt,o.message,e);break;case"cidr":{if(o.version!=="v6")G(n,tt.ipv4Cidr,o.message,e);if(o.version!=="v4")G(n,tt.ipv6Cidr,o.message,e);break}case"emoji":G(n,tt.emoji(),o.message,e);break;case"ulid":{G(n,tt.ulid,o.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{et(n,"binary",o.message,e);break}case"contentEncoding:base64":{D(n,"contentEncoding","base64",o.message,e);break}case"pattern:zod":{G(n,tt.base64,o.message,e);break}}break}case"nanoid":G(n,tt.nanoid,o.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:((i)=>{})(o)}return n}function ao(t,e){return e.patternStrategy==="escape"?aT(t):t}function aT(t){let e="";for(let n=0;n<t.length;n++){if(!mT.has(t[n]))e+="\\";e+=t[n]}return e}function et(t,e,n,o){if(t.format||t.anyOf?.some((i)=>i.format)){if(!t.anyOf)t.anyOf=[];if(t.format){if(t.anyOf.push({format:t.format,...t.errorMessage&&o.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage){if(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0)delete t.errorMessage}}t.anyOf.push({format:e,...n&&o.errorMessages&&{errorMessage:{format:n}}})}else D(t,"format",e,n,o)}function G(t,e,n,o){if(t.pattern||t.allOf?.some((i)=>i.pattern)){if(!t.allOf)t.allOf=[];if(t.pattern){if(t.allOf.push({pattern:t.pattern,...t.errorMessage&&o.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage){if(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0)delete t.errorMessage}}t.allOf.push({pattern:lf(e,o),...n&&o.errorMessages&&{errorMessage:{pattern:n}}})}else D(t,"pattern",lf(e,o),n,o)}function lf(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,i="",r=!1,u=!1,f=!1;for(let l=0;l<o.length;l++){if(r){i+=o[l],r=!1;continue}if(n.i){if(u){if(o[l].match(/[a-z]/)){if(f)i+=o[l],i+=`${o[l-2]}-${o[l]}`.toUpperCase(),f=!1;else if(o[l+1]==="-"&&o[l+2]?.match(/[a-z]/))i+=o[l],f=!0;else i+=`${o[l]}${o[l].toUpperCase()}`;continue}}else if(o[l].match(/[a-z]/)){i+=`[${o[l]}${o[l].toUpperCase()}]`;continue}}if(n.m){if(o[l]==="^"){i+=`(^|(?<=[\r
|
|
169
169
|
]))`;continue}else if(o[l]==="$"){i+=`($|(?=[\r
|
|
170
170
|
]))`;continue}}if(n.s&&o[l]==="."){i+=u?`${o[l]}\r
|
|
171
171
|
`:`[${o[l]}\r
|
|
172
|
-
]`;continue}if(i+=o[l],o[l]==="\\")r=!0;else if(u&&o[l]==="]")u=!1;else if(!u&&o[l]==="[")u=!0}try{new RegExp(i)}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return i}var mo=void 0,tt,md;var We=g(()=>{tt={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(mo===void 0)mo=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return mo},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};md=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789")});import{ZodFirstPartyTypeKind as ye}from"zod/v3";function Ke(t,e){if(e.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(e.target==="openApi3"&&t.keyType?._def.typeName===ye.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((o,i)=>({...o,[i]:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",i]})??m(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let n={type:"object",additionalProperties:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return n;if(t.keyType?._def.typeName===ye.ZodString&&t.keyType._def.checks?.length){let{type:o,...i}=Je(t.keyType._def,e);return{...n,propertyNames:i}}else if(t.keyType?._def.typeName===ye.ZodEnum)return{...n,propertyNames:{enum:t.keyType._def.values}};else if(t.keyType?._def.typeName===ye.ZodBranded&&t.keyType._def.type._def.typeName===ye.ZodString&&t.keyType._def.type._def.checks?.length){let{type:o,...i}=Qe(t.keyType._def,e);return{...n,propertyNames:i}}return n}var be=g(()=>{c();We();Ve();b()});function lE(t,e){if(e.mapStrategy==="record")return Ke(t,e);let n=w(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||m(e),o=w(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||m(e);return{type:"array",maxItems:125,items:{type:"array",items:[n,o],minItems:2,maxItems:2}}}var $o=g(()=>{c();be();b()});function yE(t){let e=t.values,o=Object.keys(t.values).filter((r)=>{return typeof e[e[r]]!=="number"}).map((r)=>e[r]),i=Array.from(new Set(o.map((r)=>typeof r)));return{type:i.length===1?i[0]==="string"?"string":"number":["string","number"],enum:o}}function sE(t){return t.target==="openAi"?void 0:{not:m({...t,currentPath:[...t.currentPath,"not"]})}}var Po=g(()=>{b()});function gE(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}function TE(t,e){if(e.target==="openApi3")return dE(t,e);let n=t.options instanceof Map?Array.from(t.options.values()):t.options;if(n.every((o)=>(o._def.typeName in se)&&(!o._def.checks||!o._def.checks.length))){let o=n.reduce((i,r)=>{let u=se[r._def.typeName];return u&&!i.includes(u)?[...i,u]:i},[]);return{type:o.length>1?o:o[0]}}else if(n.every((o)=>o._def.typeName==="ZodLiteral"&&!o.description)){let o=n.reduce((i,r)=>{let u=typeof r._def.value;switch(u){case"string":case"number":case"boolean":return[...i,u];case"bigint":return[...i,"integer"];case"object":if(r._def.value===null)return[...i,"null"];case"symbol":case"undefined":case"function":default:return i}},[]);if(o.length===n.length){let i=o.filter((r,u,E)=>E.indexOf(r)===u);return{type:i.length>1?i:i[0],enum:n.reduce((r,u)=>{return r.includes(u._def.value)?r:[...r,u._def.value]},[])}}}else if(n.every((o)=>o._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((o,i)=>[...o,...i._def.values.filter((r)=>!o.includes(r))],[])};return dE(t,e)}var se,dE=(t,e)=>{let n=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((o,i)=>w(o._def,{...e,currentPath:[...e.currentPath,"anyOf",`${i}`]})).filter((o)=>!!o&&(!e.strictUnions||typeof o==="object"&&Object.keys(o).length>0));return n.length?{anyOf:n}:void 0};var ke=g(()=>{c();se={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"}});function RE(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length)){if(e.target==="openApi3")return{type:se[t.innerType._def.typeName],nullable:!0};return{type:[se[t.innerType._def.typeName],"null"]}}if(e.target==="openApi3"){let o=w(t.innerType._def,{...e,currentPath:[...e.currentPath]});if(o&&"$ref"in o)return{allOf:[o],nullable:!0};return o&&{...o,nullable:!0}}let n=w(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}var Co=g(()=>{c();ke()});function AE(t,e){let n={type:"number"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"int":n.type="integer",Io(n,"type",o.message,e);break;case"min":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"minimum",o.value,o.message,e);else D(n,"exclusiveMinimum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMinimum=!0;D(n,"minimum",o.value,o.message,e)}break;case"max":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"maximum",o.value,o.message,e);else D(n,"exclusiveMaximum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMaximum=!0;D(n,"maximum",o.value,o.message,e)}break;case"multipleOf":D(n,"multipleOf",o.value,o.message,e);break}return n}var Mo=()=>{};function wE(t,e){let n=e.target==="openAi",o={type:"object",properties:{}},i=[],r=t.shape();for(let E in r){let l=r[E];if(l===void 0||l._def===void 0)continue;let y=Pd(l);if(y&&n){if(l._def.typeName==="ZodOptional")l=l._def.innerType;if(!l.isNullable())l=l.nullable();y=!1}let s=w(l._def,{...e,currentPath:[...e.currentPath,"properties",E],propertyPath:[...e.currentPath,"properties",E]});if(s===void 0)continue;if(o.properties[E]=s,!y)i.push(E)}if(i.length)o.required=i;let u=$d(t,e);if(u!==void 0)o.additionalProperties=u;return o}function $d(t,e){if(t.catchall._def.typeName!=="ZodNever")return w(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function Pd(t){try{return t.isOptional()}catch{return!0}}var co=g(()=>{c()});var NE=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return w(t.innerType._def,e);let n=w(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:m(e)},n]}:m(e)};var Xo=g(()=>{c();b()});var pE=(t,e)=>{if(e.pipeStrategy==="input")return w(t.in._def,e);else if(e.pipeStrategy==="output")return w(t.out._def,e);let n=w(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),o=w(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,o].filter((i)=>i!==void 0)}};var Fo=g(()=>{c()});function IE(t,e){return w(t.type._def,e)}var Ho=g(()=>{c()});function _E(t,e){let o={type:"array",uniqueItems:!0,items:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};if(t.minSize)D(o,"minItems",t.minSize.value,t.minSize.message,e);if(t.maxSize)D(o,"maxItems",t.maxSize.value,t.maxSize.message,e);return o}var Yo=g(()=>{c()});function DE(t,e){if(t.rest)return{type:"array",minItems:t.items.length,items:t.items.map((n,o)=>w(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[]),additionalItems:w(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})};else return{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((n,o)=>w(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[])}}var Go=g(()=>{c()});function vE(t){return{not:m(t)}}var Zo=g(()=>{b()});function LE(t){return m(t)}var Bo=g(()=>{b()});var OE=(t,e)=>{return w(t.innerType._def,e)};var Qo=g(()=>{c()});import{ZodFirstPartyTypeKind as _}from"zod/v3";var SE=(t,e,n)=>{switch(e){case _.ZodString:return Je(t,n);case _.ZodNumber:return AE(t,n);case _.ZodObject:return wE(t,n);case _.ZodBigInt:return tE(t,n);case _.ZodBoolean:return eE();case _.ZodDate:return Lo(t,n);case _.ZodUndefined:return vE(n);case _.ZodNull:return gE(n);case _.ZodArray:return xf(t,n);case _.ZodUnion:case _.ZodDiscriminatedUnion:return TE(t,n);case _.ZodIntersection:return uE(t,n);case _.ZodTuple:return DE(t,n);case _.ZodRecord:return Ke(t,n);case _.ZodLiteral:return fE(t,n);case _.ZodEnum:return rE(t);case _.ZodNativeEnum:return yE(t);case _.ZodNullable:return RE(t,n);case _.ZodOptional:return NE(t,n);case _.ZodMap:return lE(t,n);case _.ZodSet:return _E(t,n);case _.ZodLazy:return()=>t.getter()._def;case _.ZodPromise:return IE(t,n);case _.ZodNaN:case _.ZodNever:return sE(n);case _.ZodEffects:return iE(t,n);case _.ZodAny:return m(n);case _.ZodUnknown:return LE(n);case _.ZodDefault:return oE(t,n);case _.ZodBranded:return Qe(t,n);case _.ZodReadonly:return OE(t,n);case _.ZodCatch:return nE(t,n);case _.ZodPipeline:return pE(t,n);case _.ZodFunction:case _.ZodVoid:case _.ZodSymbol:return;default:return((o)=>{return})(e)}};var Vo=g(()=>{b();_o();Do();Ve();vo();Oo();So();Uo();ho();$o();Po();Co();Mo();co();Xo();Fo();Ho();be();Yo();We();Go();Zo();ke();Bo();Qo()});function w(t,e,n=!1){let o=e.seen.get(t);if(e.override){let E=e.override?.(t,e,o,n);if(E!==jf)return E}if(o&&!n){let E=Cd(o,e);if(E!==void 0)return E}let i={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,i);let r=SE(t,t.typeName,e),u=typeof r==="function"?w(r(),e):r;if(u)Md(t,e,u);if(e.postProcess){let E=e.postProcess(u,t,e);return i.jsonSchema=u,E}return i.jsonSchema=u,u}var Cd=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:Be(e.currentPath,t.path)};case"none":case"seen":{if(t.path.length<e.currentPath.length&&t.path.every((n,o)=>e.currentPath[o]===n))return console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),m(e);return e.$refStrategy==="seen"?m(e):void 0}}},Md=(t,e,n)=>{if(t.description){if(n.description=t.description,e.markdownDescription)n.markdownDescription=t.description}return n};var c=g(()=>{Ze();Vo();b()});var UE=()=>{};var Jo=(t,e)=>{let n=qf(e),o=typeof e==="object"&&e.definitions?Object.entries(e.definitions).reduce((l,[y,s])=>({...l,[y]:w(s._def,{...n,currentPath:[...n.basePath,n.definitionPath,y]},!0)??m(n)}),{}):void 0,i=typeof e==="string"?e:e?.nameStrategy==="title"?void 0:e?.name,r=w(t._def,i===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,i]},!1)??m(n),u=typeof e==="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;if(u!==void 0)r.title=u;if(n.flags.hasReferencedOpenAiAnyType){if(!o)o={};if(!o[n.openAiAnyTypeName])o[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}}let E=i===void 0?o?{...r,[n.definitionPath]:o}:r:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,i].join("/"),[n.definitionPath]:{...o,[i]:r}};if(n.target==="jsonSchema7")E.$schema="http://json-schema.org/draft-07/schema#";else if(n.target==="jsonSchema2019-09"||n.target==="openAi")E.$schema="https://json-schema.org/draft/2019-09/schema#";if(n.target==="openAi"&&(("anyOf"in E)||("oneOf"in E)||("allOf"in E)||("type"in E)&&Array.isArray(E.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return E};var Wo=g(()=>{c();po();b()});var hE=g(()=>{Wo();Ze();po();c();UE();b();_o();Do();Ve();vo();Oo();So();Uo();ho();$o();Po();Co();Mo();co();Xo();Fo();Ho();Qo();be();Yo();We();Go();Zo();ke();Bo();Vo();Wo()});function je(){let t=Kt(),e={},n={};for(let i of t){let r=Nt(i),u=Jo(r.schema,{target:"openApi3"}),{$schema:E,...l}=u;e[i]=l,n[i]=r.description}let o=t.map((i)=>({type:"object",title:i,description:n[i],required:["op",...e[i].required||[]],properties:{op:{type:"string",const:i},driveId:{type:"string",description:"Target drive ID (optional, uses default drive)"},...e[i].properties||{}},additionalProperties:!1}));return{openapi:"3.1.0",info:{title:"agent-fs API",version:B,description:"A persistent, searchable filesystem for AI agents. agent-fs is to files what agentmail is to email.",license:{name:"MIT",url:"https://github.com/desplega-ai/agent-fs/blob/main/LICENSE"}},servers:[{url:"http://localhost:7433",description:"Local development server"}],paths:{"/health":{get:{summary:"Health check",operationId:"health",tags:["System"],security:[],responses:{"200":{description:"Server is healthy",content:{"application/json":{schema:{type:"object",properties:{ok:{type:"boolean",const:!0},version:{type:"string"}},required:["ok","version"]}}}}}}},"/auth/register":{post:{summary:"Register a new user",operationId:"register",tags:["Auth"],security:[],requestBody:{required:!0,content:{"application/json":{schema:{type:"object",properties:{email:{type:"string",format:"email"}},required:["email"]}}}},responses:{"200":{description:"User registered",content:{"application/json":{schema:{type:"object",properties:{userId:{type:"string"},orgId:{type:"string"},driveId:{type:"string"},apiKey:{type:"string"}},required:["userId","orgId","driveId","apiKey"]}}}}}}},"/auth/me":{get:{summary:"Get current user info",operationId:"me",tags:["Auth"],responses:{"200":{description:"Current user",content:{"application/json":{schema:{type:"object",properties:{id:{type:"string"},email:{type:"string"},createdAt:{type:"string",format:"date-time"}},required:["id","email","createdAt"]}}}}}}},"/orgs/{orgId}/ops":{post:{summary:"Dispatch a file operation",operationId:"dispatchOp",tags:["Operations"],description:"All file operations go through this single endpoint. The `op` field determines which operation to execute.",parameters:[{name:"orgId",in:"path",required:!0,schema:{type:"string"},description:"Organization ID"}],requestBody:{required:!0,content:{"application/json":{schema:{oneOf:o,discriminator:{propertyName:"op"}}}}},responses:{"200":{description:"Operation result (varies by op)",content:{"application/json":{schema:{type:"object",description:"Response shape depends on the operation. See each op's description for details."}}}},"400":{description:"Validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"401":{description:"Unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"403":{description:"Permission denied (RBAC)",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"404":{description:"File or resource not found",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}}}}}},components:{securitySchemes:{bearerAuth:{type:"http",scheme:"bearer",description:"API key obtained from /auth/register"}},schemas:{Error:{type:"object",properties:{error:{type:"string"},message:{type:"string"}},required:["error","message"]}}},security:[{bearerAuth:[]}]}}var mE=g(()=>{hE();uo();To()});var aE={};Ft(aE,{updateOrgMemberRole:()=>$t,updateDriveMemberRole:()=>St,setDriveMember:()=>Eo,setConfigValue:()=>N,setConfig:()=>fi,schema:()=>f,resolveContext:()=>x,removeOrgMember:()=>Pt,removeDriveMember:()=>Ut,listUserOrgs:()=>Z,listOrgMembers:()=>at,listDrives:()=>Lt,listDriveMembers:()=>Ot,inviteToOrg:()=>Ct,getUserDriveRole:()=>Et,getUserByEmail:()=>bt,getUserByApiKey:()=>st,getRequiredRole:()=>ue,getRegisteredOps:()=>Kt,getOrg:()=>Ee,getOpDefinition:()=>Nt,getHome:()=>nt,getDrive:()=>fo,getDbPath:()=>_t,getConfigPath:()=>ot,getConfig:()=>L,generateOpenAPISpec:()=>je,ensureLocalUser:()=>le,dispatchOp:()=>wt,createUser:()=>q,createOrg:()=>mt,createEmbeddingProviderFromEnv:()=>kt,createDrive:()=>vt,createDatabase:()=>gt,commentUpdate:()=>Fe,commentResolve:()=>Ye,commentList:()=>ce,commentGet:()=>Xe,commentDelete:()=>He,commentAdd:()=>Me,checkPermission:()=>fe,ValidationError:()=>z,VERSION:()=>B,PermissionDeniedError:()=>j,NotFoundError:()=>U,IndexingInProgressError:()=>re,EditConflictError:()=>ft,AgentS3Client:()=>Tt,AgentFSError:()=>ut});var P=g(()=>{a();zt();Uu();V();uo();Gf();To();mE()});var ze={};Ft(ze,{stopDaemon:()=>yT,startDaemon:()=>lT,daemonStatus:()=>sT});import{spawn as rT}from"child_process";import{readFileSync as ko,writeFileSync as uT,unlinkSync as FE,existsSync as jo,openSync as fT}from"fs";import{join as zo}from"path";function qo(){return zo(nt(),"agent-fs.pid")}function ET(){return zo(nt(),"agent-fs.log")}function lT(){let t=qo();if(jo(t)){let E=parseInt(ko(t,"utf-8").trim());try{process.kill(E,0),console.log(`Daemon already running (PID: ${E})`);return}catch{FE(t)}}let e=ET(),n=fT(e,"a"),o=!import.meta.dir.startsWith("/")||import.meta.dir.startsWith("/$bunfs"),i=o?process.execPath:"bun",r=o?["server"]:["run",zo(import.meta.dir,"index.ts")],u=rT(i,r,{detached:!0,stdio:["ignore",n,n]});if(u.unref(),u.pid)uT(t,String(u.pid)),console.log(`Daemon started (PID: ${u.pid})`),console.log(`Logs: ${e}`)}function yT(){let t=qo();if(!jo(t)){console.log("Daemon is not running");return}let e=parseInt(ko(t,"utf-8").trim());try{process.kill(e,"SIGTERM"),console.log(`Daemon stopped (PID: ${e})`)}catch{console.log(`Process ${e} not found (already stopped)`)}FE(t)}function sT(){let t=qo();if(!jo(t))return{running:!1};let e=parseInt(ko(t,"utf-8").trim());try{return process.kill(e,0),{running:!0,pid:e}}catch{return{running:!1}}}var qe=g(()=>{P()});var cT={};import{Server as UT}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as hT}from"@modelcontextprotocol/sdk/server/stdio.js";import{Client as mT}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as aT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{ListToolsRequestSchema as $T,CallToolRequestSchema as PT}from"@modelcontextprotocol/sdk/types.js";var de,xo,kE,CT,ti,ei,MT;var jE=g(async()=>{P();de=L(),xo=process.env.AGENT_FS_API_URL??de.apiUrl??`http://${de.server.host}:${de.server.port}`,kE=process.env.AGENT_FS_API_KEY??de.apiKey??de.auth?.apiKey;if(!kE)console.error("Error: No API key. Register with `agent-fs auth register` or set AGENT_FS_API_KEY."),process.exit(1);CT=new aT(new URL(`${xo}/mcp`),{requestInit:{headers:{Authorization:`Bearer ${kE}`}}}),ti=new mT({name:"agent-fs-proxy",version:B});try{await ti.connect(CT)}catch(t){console.error(`Cannot connect to agent-fs at ${xo}.
|
|
173
|
-
Start a daemon with \`agent-fs daemon start\` or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1)}ei=new UT({name:"agent-fs",version:B},{capabilities:{tools:{}}});ei.setRequestHandler($T,async()=>{return await ti.listTools()});ei.setRequestHandler(PT,async(t)=>{return await ti.callTool(t.params)});MT=new hT;await ei.connect(MT);console.error("[agent-fs] MCP proxy connected to "+xo)});import{z as zE}from"zod";function qE(t,e){let n=Kt();for(let o of n){let i=Nt(o);if(!i)continue;t.tool(o,i.description,i.schema instanceof zE.ZodObject?i.schema.shape:{params:zE.any()},async(r,u)=>{let E=e(u),l=await wt(E,o,r);return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}})}}var xE=g(()=>{P()});import{McpServer as XT}from"@modelcontextprotocol/sdk/server/mcp.js";import{z as It}from"zod";function tl(t){let{db:e,s3:n,embeddingProvider:o,appUrl:i}=t,r=new XT({name:"agent-fs",version:B}),u=(E)=>{let l=E.authInfo;if(!l?.extra?.user)throw Error("No auth context \u2014 MCP must be accessed through the HTTP server");let y=l.extra.user,s=x(e,{userId:y.id});return{db:e,s3:n,orgId:s.orgId,driveId:s.driveId,userId:y.id,embeddingProvider:o,appUrl:i}};return qE(r,u),r.tool("health","Check agent-fs system health: database, S3, embeddings, version.",{},async(E,l)=>{let y={version:B};try{let s=u(l),T=await wt(s,"ls",{path:"/"},{skipAuth:!0});y.database={ok:!0,rootEntries:T.entries?.length??0}}catch(s){y.database={ok:!1,error:s.message}}try{await n.listObjects("",{delimiter:"/"}),y.s3={ok:!0}}catch(s){y.s3={ok:!1,error:s.message}}return y.embeddings={configured:!!o},{content:[{type:"text",text:JSON.stringify(y,null,2)}]}}),r.tool("whoami","Get current user identity, org memberships, and drive roles.",{},async(E,l)=>{let y=u(l),s=y.userId,R=Z(e,s).map((C)=>{let M=Lt(e,C.id);return{orgId:C.id,orgName:C.name,drives:M.map((H)=>({driveId:H.id,driveName:H.name,role:Et(e,s,H.id)}))}}),v=l.authInfo?.extra?.user?.email,O={userId:s,...v?{email:v}:{},activeOrg:y.orgId,activeDrive:y.driveId,memberships:R};return{content:[{type:"text",text:JSON.stringify(O,null,2)}]}}),r.tool("member-list","List members of the current org, or a specific drive if driveId is provided.",{driveId:It.string().optional().describe("Drive ID to list members for. Omit for org members.")},async(E,l)=>{let y=u(l),s=E.driveId?Ot(e,E.driveId):at(e,y.orgId);return{content:[{type:"text",text:JSON.stringify({members:s},null,2)}]}}),r.tool("member-invite","Invite a user to the current org by email. The user must already have an agent-fs account.",{email:It.string().describe("Email of the user to invite"),role:It.enum(["viewer","editor","admin"]).describe("Role to assign")},async(E,l)=>{let y=u(l);try{return Ct(e,{orgId:y.orgId,email:E.email,role:E.role}),{content:[{type:"text",text:JSON.stringify({ok:!0,invited:E.email,role:E.role},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r.tool("member-update-role","Update a member's role in the current org or a specific drive.",{email:It.string().describe("Email of the member"),role:It.enum(["viewer","editor","admin"]).describe("New role"),driveId:It.string().optional().describe("Drive ID to update role for. Omit for org role.")},async(E,l)=>{let y=u(l);try{let s=bt(e,E.email);if(!s)throw Error(`User with email ${E.email} not found`);if(E.driveId)St(e,{driveId:E.driveId,userId:s.id,role:E.role});else $t(e,{orgId:y.orgId,userId:s.id,role:E.role});return{content:[{type:"text",text:JSON.stringify({ok:!0,email:E.email,role:E.role},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r.tool("member-remove","Remove a member from the current org (cascades to all drives) or from a specific drive only.",{email:It.string().describe("Email of the member to remove"),driveId:It.string().optional().describe("Drive ID to remove from. Omit to remove from org.")},async(E,l)=>{let y=u(l);try{let s=bt(e,E.email);if(!s)throw Error(`User with email ${E.email} not found`);if(E.driveId)Ut(e,{driveId:E.driveId,userId:s.id});else Pt(e,{orgId:y.orgId,userId:s.id});return{content:[{type:"text",text:JSON.stringify({ok:!0,removed:E.email},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r}var el=g(()=>{P();xE()});function nl(t){return async(e,n)=>{let o=new URL(e.req.url).pathname;if(FT.some((E)=>o===E||o.startsWith(E)))return n();let i=e.req.header("Authorization");if(!i?.startsWith("Bearer "))return e.json({error:"UNAUTHORIZED",message:"Missing or invalid Authorization header",suggestion:"Include 'Authorization: Bearer <api_key>' header"},401);let r=i.slice(7),u=st(t,r);if(!u)return e.json({error:"UNAUTHORIZED",message:"Invalid API key",suggestion:"Register with POST /auth/register"},401);return e.set("user",u),n()}}var FT;var ol=g(()=>{P();FT=["/auth/register","/health"]});function HT(t){if(t instanceof U)return 404;if(t instanceof j)return 403;if(t instanceof ft)return 409;if(t instanceof re)return 503;if(t instanceof z)return 400;if("code"in t)return 400;return 500}function il(t,e){let n=HT(t);if("toJSON"in t&&typeof t.toJSON==="function")return e.json(t.toJSON(),n);return e.json({error:"INTERNAL_ERROR",message:t.message},n)}var rl=g(()=>{P()});function tn(t){let e=new Map;return setInterval(()=>{let n=Date.now()-60000;for(let[o,i]of e){let r=i.filter((u)=>u>n);if(r.length===0)e.delete(o);else e.set(o,r)}},300000).unref(),async(n,o)=>{let i=n.req.header("authorization")??"",r=i.startsWith("Bearer ")?i.slice(7):n.req.header("x-forwarded-for")??"unknown",u=Date.now(),E=u-60000,l=(e.get(r)??[]).filter((y)=>y>E);if(l.length>=t){let y=l[0],s=Math.ceil((y+60000-u)/1000);return n.header("Retry-After",String(s)),n.json({error:"RATE_LIMITED",message:"Too many requests"},429)}l.push(u),e.set(r,l),await o()}}import{Hono as YT}from"hono";function ul(t){let e=new YT;return e.post("/register",async(n)=>{let{email:o}=await n.req.json();if(!o||typeof o!=="string")return n.json({error:"VALIDATION_ERROR",message:"email is required"},400);try{let i=q(t,{email:o}),r=Z(t,i.user.id);return n.json({apiKey:i.apiKey,userId:i.user.id,orgId:r[0]?.id})}catch(i){if(i instanceof Error&&i.message.includes("UNIQUE"))return n.json({error:"CONFLICT",message:"User with this email already exists"},409);throw i}}),e.get("/me",(n)=>{let o=n.get("user");try{let i=x(t,{userId:o.id});return n.json({userId:o.id,email:o.email,defaultOrgId:i.orgId,defaultDriveId:i.driveId})}catch{return n.json({userId:o.id,email:o.email,defaultOrgId:null,defaultDriveId:null})}}),e}var fl=g(()=>{P()});import{Hono as GT}from"hono";function El(t,e,n=null,o){let i=new GT;return i.post("/:orgId/ops",async(r)=>{let u=r.get("user"),E=r.req.param("orgId"),l=await r.req.json(),{op:y,...s}=l;if(!y)return r.json({error:"VALIDATION_ERROR",message:"op is required in request body"},400);let T=s.driveId||s.drive_id;delete s.driveId,delete s.drive_id;let R=x(t,{userId:u.id,orgId:E,driveId:T}),v={db:t,s3:e,orgId:R.orgId,driveId:R.driveId,userId:u.id,embeddingProvider:n,appUrl:o},O=await wt(v,y,s);return r.json(O)}),i}var ll=g(()=>{P()});import{Hono as ZT}from"hono";function yl(t){let e=new ZT;return e.get("/",(n)=>{let o=n.get("user"),i=Z(t,o.id);return n.json({orgs:i})}),e.post("/",async(n)=>{let o=n.get("user"),{name:i}=await n.req.json(),r=mt(t,{name:i,userId:o.id});return n.json(r,201)}),e.get("/:orgId",(n)=>{let o=n.req.param("orgId"),i=Ee(t,o);if(!i)return n.json({error:"NOT_FOUND",message:"Org not found"},404);return n.json(i)}),e.get("/:orgId/drives",(n)=>{let o=n.req.param("orgId"),i=Lt(t,o);return n.json({drives:i})}),e.post("/:orgId/drives",async(n)=>{let o=n.req.param("orgId"),{name:i}=await n.req.json(),r=vt(t,{orgId:o,name:i});return n.json(r,201)}),e.post("/:orgId/members/invite",async(n)=>{let o=n.req.param("orgId"),{email:i,role:r}=await n.req.json();return Ct(t,{orgId:o,email:i,role:r}),n.json({ok:!0})}),e.get("/:orgId/members",(n)=>{let o=n.req.param("orgId"),i=at(t,o);return n.json({members:i})}),e.patch("/:orgId/members/:userId",async(n)=>{let o=n.req.param("orgId"),i=n.req.param("userId"),{role:r}=await n.req.json();try{return $t(t,{orgId:o,userId:i,role:r}),n.json({ok:!0})}catch(u){return n.json({error:"BAD_REQUEST",message:u.message},400)}}),e.delete("/:orgId/members/:userId",(n)=>{let o=n.req.param("orgId"),i=n.req.param("userId");try{return Pt(t,{orgId:o,userId:i}),n.json({ok:!0})}catch(r){return n.json({error:"BAD_REQUEST",message:r.message},400)}}),e.get("/:orgId/drives/:driveId/members",(n)=>{let o=n.req.param("driveId"),i=Ot(t,o);return n.json({members:i})}),e.patch("/:orgId/drives/:driveId/members/:userId",async(n)=>{let o=n.req.param("driveId"),i=n.req.param("userId"),{role:r}=await n.req.json();try{return St(t,{driveId:o,userId:i,role:r}),n.json({ok:!0})}catch(u){return n.json({error:"BAD_REQUEST",message:u.message},400)}}),e.delete("/:orgId/drives/:driveId/members/:userId",(n)=>{let o=n.req.param("driveId"),i=n.req.param("userId");try{return Ut(t,{driveId:o,userId:i}),n.json({ok:!0})}catch(r){return n.json({error:"BAD_REQUEST",message:r.message},400)}}),e}var sl=g(()=>{P()});import{Hono as BT}from"hono";function gl(){let t=new BT;return t.get("/openapi.json",(e)=>{return e.json(je())}),t}var dl=g(()=>{P()});import{Hono as QT}from"hono";function Tl(t,e){let n=new QT;return n.get("/:orgId/drives/:driveId/files/*/raw",async(o)=>{let i=o.get("user"),r=o.req.param("orgId"),u=o.req.param("driveId"),E=x(t,{userId:i.id,orgId:r,driveId:u}),y=new URL(o.req.url).pathname.match(/\/files\/(.+)\/raw$/);if(!y)return o.json({error:"VALIDATION_ERROR",message:"Invalid file path"},400);let s=decodeURIComponent(y[1]),T=I(E.orgId,E.driveId,s);try{let R=await e.getObject(T),v=R.contentType||"application/octet-stream";return new Response(R.body.buffer,{status:200,headers:{"Content-Type":v,"Content-Length":String(R.body.length),"Cache-Control":"private, max-age=60"}})}catch(R){if(R?.name==="NoSuchKey"||R?.$metadata?.httpStatusCode===404)return o.json({error:"NOT_FOUND",message:`File not found: ${s}`},404);throw R}}),n}var Rl=g(()=>{P();X()});import{Hono as VT}from"hono";import{cors as Al}from"hono/cors";import{bodyLimit as JT}from"hono/body-limit";import{WebStandardStreamableHTTPServerTransport as WT}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";function wl(t,e,n=null){let o=new VT,i=L(),r=i.server?.cors?.origins??["*"];if(r.length===1&&r[0]==="*")o.use("*",Al());else o.use("*",Al({origin:r}));o.use("*",JT({maxSize:52428800})),o.use("*",nl(t));let u=i.server?.rateLimit?.requestsPerMinute??1200;if(u>0)o.use("/orgs/*",tn(u)),o.use("/auth/*",tn(u)),o.use("/mcp",tn(u));return o.onError((E,l)=>il(E,l)),o.get("/health",(E)=>E.json({ok:!0,version:B})),o.all("/mcp",async(E)=>{let l=E.get("user"),y=new WT({sessionIdGenerator:void 0,enableJsonResponse:!0});return await tl({db:t,s3:e,embeddingProvider:n,appUrl:i.appUrl}).connect(y),y.handleRequest(E.req.raw,{authInfo:{token:E.req.header("Authorization")?.slice(7)??"",clientId:l.id,scopes:[],extra:{user:{id:l.id,email:l.email}}}})}),o.route("/auth",ul(t)),o.route("/orgs",yl(t)),o.route("/orgs",El(t,e,n,i.appUrl)),o.route("/docs",gl()),o.route("/orgs",Tl(t,e)),o}var Nl=g(()=>{P();el();ol();rl();fl();ll();sl();dl();Rl()});var jT={};function Il(){console.log("Shutting down..."),ni.stop(),process.exit(0)}var en,KT,bT,pl=null,kT,ni;var _l=g(async()=>{P();Nl();en=L(),KT=gt(),bT=new Tt(en.s3);try{pl=await kt(en.embedding)}catch(t){console.warn("Embedding provider unavailable, semantic search disabled:",t)}kT=wl(KT,bT,pl),ni=Bun.serve({fetch:kT.fetch,port:en.server.port,hostname:en.server.host});console.log(`agent-fs daemon running on http://${ni.hostname}:${ni.port}`);process.on("SIGTERM",Il);process.on("SIGINT",Il)});P();import{Command as zT}from"commander";P();class Ko{baseUrl;apiKey;constructor(){let t=L();this.baseUrl=process.env.AGENT_FS_API_URL??t.apiUrl??`http://${t.server.host}:${t.server.port}`,this.apiKey=process.env.AGENT_FS_API_KEY??t.apiKey??t.auth.apiKey}async request(t,e){let n=new Headers(e?.headers);if(this.apiKey)n.set("Authorization",`Bearer ${this.apiKey}`);n.set("Content-Type","application/json");let o;try{o=await fetch(`${this.baseUrl}${t}`,{...e,headers:n})}catch(r){throw Error(`Cannot connect to agent-fs daemon at ${this.baseUrl}. Is it running? Start with: agent-fs daemon start`)}let i;try{i=await o.json()}catch{let r=await o.text().catch(()=>"");throw Error(`Unexpected response from daemon (${o.status}): ${r||"empty"}`)}if(!o.ok){let r=i.message??i.error??"Request failed",u=i.suggestion?`
|
|
174
|
-
Suggestion: ${i.suggestion}`:"";throw Error(`${r}${u}`)}return i}async get(t){return this.request(t)}async post(t,e){return this.request(t,{method:"POST",body:JSON.stringify(e)})}async patch(t,e){return this.request(t,{method:"PATCH",body:JSON.stringify(e)})}async del(t){return this.request(t,{method:"DELETE"})}async callOp(t,e,n){return this.post(`/orgs/${t}/ops`,{op:e,...n})}async getMe(){return this.get("/auth/me")}setApiKey(t){this.apiKey=t}}P();import{Command as
|
|
175
|
-
`)}function
|
|
172
|
+
]`;continue}if(i+=o[l],o[l]==="\\")r=!0;else if(u&&o[l]==="]")u=!1;else if(!u&&o[l]==="[")u=!0}try{new RegExp(i)}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return i}var mo=void 0,tt,mT;var We=g(()=>{tt={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(mo===void 0)mo=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return mo},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};mT=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789")});import{ZodFirstPartyTypeKind as ye}from"zod/v3";function Ke(t,e){if(e.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(e.target==="openApi3"&&t.keyType?._def.typeName===ye.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((o,i)=>({...o,[i]:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",i]})??m(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let n={type:"object",additionalProperties:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return n;if(t.keyType?._def.typeName===ye.ZodString&&t.keyType._def.checks?.length){let{type:o,...i}=Je(t.keyType._def,e);return{...n,propertyNames:i}}else if(t.keyType?._def.typeName===ye.ZodEnum)return{...n,propertyNames:{enum:t.keyType._def.values}};else if(t.keyType?._def.typeName===ye.ZodBranded&&t.keyType._def.type._def.typeName===ye.ZodString&&t.keyType._def.type._def.checks?.length){let{type:o,...i}=Qe(t.keyType._def,e);return{...n,propertyNames:i}}return n}var be=g(()=>{c();We();Ve();b()});function yf(t,e){if(e.mapStrategy==="record")return Ke(t,e);let n=w(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||m(e),o=w(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||m(e);return{type:"array",maxItems:125,items:{type:"array",items:[n,o],minItems:2,maxItems:2}}}var $o=g(()=>{c();be();b()});function sf(t){let e=t.values,o=Object.keys(t.values).filter((r)=>{return typeof e[e[r]]!=="number"}).map((r)=>e[r]),i=Array.from(new Set(o.map((r)=>typeof r)));return{type:i.length===1?i[0]==="string"?"string":"number":["string","number"],enum:o}}function gf(t){return t.target==="openAi"?void 0:{not:m({...t,currentPath:[...t.currentPath,"not"]})}}var Po=g(()=>{b()});function Tf(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}function Rf(t,e){if(e.target==="openApi3")return df(t,e);let n=t.options instanceof Map?Array.from(t.options.values()):t.options;if(n.every((o)=>(o._def.typeName in se)&&(!o._def.checks||!o._def.checks.length))){let o=n.reduce((i,r)=>{let u=se[r._def.typeName];return u&&!i.includes(u)?[...i,u]:i},[]);return{type:o.length>1?o:o[0]}}else if(n.every((o)=>o._def.typeName==="ZodLiteral"&&!o.description)){let o=n.reduce((i,r)=>{let u=typeof r._def.value;switch(u){case"string":case"number":case"boolean":return[...i,u];case"bigint":return[...i,"integer"];case"object":if(r._def.value===null)return[...i,"null"];case"symbol":case"undefined":case"function":default:return i}},[]);if(o.length===n.length){let i=o.filter((r,u,f)=>f.indexOf(r)===u);return{type:i.length>1?i:i[0],enum:n.reduce((r,u)=>{return r.includes(u._def.value)?r:[...r,u._def.value]},[])}}}else if(n.every((o)=>o._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((o,i)=>[...o,...i._def.values.filter((r)=>!o.includes(r))],[])};return df(t,e)}var se,df=(t,e)=>{let n=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((o,i)=>w(o._def,{...e,currentPath:[...e.currentPath,"anyOf",`${i}`]})).filter((o)=>!!o&&(!e.strictUnions||typeof o==="object"&&Object.keys(o).length>0));return n.length?{anyOf:n}:void 0};var ke=g(()=>{c();se={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"}});function Af(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length)){if(e.target==="openApi3")return{type:se[t.innerType._def.typeName],nullable:!0};return{type:[se[t.innerType._def.typeName],"null"]}}if(e.target==="openApi3"){let o=w(t.innerType._def,{...e,currentPath:[...e.currentPath]});if(o&&"$ref"in o)return{allOf:[o],nullable:!0};return o&&{...o,nullable:!0}}let n=w(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}var Co=g(()=>{c();ke()});function wf(t,e){let n={type:"number"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"int":n.type="integer",Io(n,"type",o.message,e);break;case"min":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"minimum",o.value,o.message,e);else D(n,"exclusiveMinimum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMinimum=!0;D(n,"minimum",o.value,o.message,e)}break;case"max":if(e.target==="jsonSchema7")if(o.inclusive)D(n,"maximum",o.value,o.message,e);else D(n,"exclusiveMaximum",o.value,o.message,e);else{if(!o.inclusive)n.exclusiveMaximum=!0;D(n,"maximum",o.value,o.message,e)}break;case"multipleOf":D(n,"multipleOf",o.value,o.message,e);break}return n}var Mo=()=>{};function Nf(t,e){let n=e.target==="openAi",o={type:"object",properties:{}},i=[],r=t.shape();for(let f in r){let l=r[f];if(l===void 0||l._def===void 0)continue;let y=PT(l);if(y&&n){if(l._def.typeName==="ZodOptional")l=l._def.innerType;if(!l.isNullable())l=l.nullable();y=!1}let s=w(l._def,{...e,currentPath:[...e.currentPath,"properties",f],propertyPath:[...e.currentPath,"properties",f]});if(s===void 0)continue;if(o.properties[f]=s,!y)i.push(f)}if(i.length)o.required=i;let u=$T(t,e);if(u!==void 0)o.additionalProperties=u;return o}function $T(t,e){if(t.catchall._def.typeName!=="ZodNever")return w(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function PT(t){try{return t.isOptional()}catch{return!0}}var co=g(()=>{c()});var pf=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return w(t.innerType._def,e);let n=w(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:m(e)},n]}:m(e)};var Xo=g(()=>{c();b()});var If=(t,e)=>{if(e.pipeStrategy==="input")return w(t.in._def,e);else if(e.pipeStrategy==="output")return w(t.out._def,e);let n=w(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),o=w(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,o].filter((i)=>i!==void 0)}};var Fo=g(()=>{c()});function _f(t,e){return w(t.type._def,e)}var Ho=g(()=>{c()});function Df(t,e){let o={type:"array",uniqueItems:!0,items:w(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};if(t.minSize)D(o,"minItems",t.minSize.value,t.minSize.message,e);if(t.maxSize)D(o,"maxItems",t.maxSize.value,t.maxSize.message,e);return o}var Yo=g(()=>{c()});function Lf(t,e){if(t.rest)return{type:"array",minItems:t.items.length,items:t.items.map((n,o)=>w(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[]),additionalItems:w(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})};else return{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((n,o)=>w(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[])}}var Go=g(()=>{c()});function vf(t){return{not:m(t)}}var Zo=g(()=>{b()});function Of(t){return m(t)}var Bo=g(()=>{b()});var Sf=(t,e)=>{return w(t.innerType._def,e)};var Qo=g(()=>{c()});import{ZodFirstPartyTypeKind as _}from"zod/v3";var Uf=(t,e,n)=>{switch(e){case _.ZodString:return Je(t,n);case _.ZodNumber:return wf(t,n);case _.ZodObject:return Nf(t,n);case _.ZodBigInt:return tf(t,n);case _.ZodBoolean:return ef();case _.ZodDate:return vo(t,n);case _.ZodUndefined:return vf(n);case _.ZodNull:return Tf(n);case _.ZodArray:return xE(t,n);case _.ZodUnion:case _.ZodDiscriminatedUnion:return Rf(t,n);case _.ZodIntersection:return Ef(t,n);case _.ZodTuple:return Lf(t,n);case _.ZodRecord:return Ke(t,n);case _.ZodLiteral:return ff(t,n);case _.ZodEnum:return uf(t);case _.ZodNativeEnum:return sf(t);case _.ZodNullable:return Af(t,n);case _.ZodOptional:return pf(t,n);case _.ZodMap:return yf(t,n);case _.ZodSet:return Df(t,n);case _.ZodLazy:return()=>t.getter()._def;case _.ZodPromise:return _f(t,n);case _.ZodNaN:case _.ZodNever:return gf(n);case _.ZodEffects:return rf(t,n);case _.ZodAny:return m(n);case _.ZodUnknown:return Of(n);case _.ZodDefault:return of(t,n);case _.ZodBranded:return Qe(t,n);case _.ZodReadonly:return Sf(t,n);case _.ZodCatch:return nf(t,n);case _.ZodPipeline:return If(t,n);case _.ZodFunction:case _.ZodVoid:case _.ZodSymbol:return;default:return((o)=>{return})(e)}};var Vo=g(()=>{b();_o();Do();Ve();Lo();Oo();So();Uo();ho();$o();Po();Co();Mo();co();Xo();Fo();Ho();be();Yo();We();Go();Zo();ke();Bo();Qo()});function w(t,e,n=!1){let o=e.seen.get(t);if(e.override){let f=e.override?.(t,e,o,n);if(f!==jE)return f}if(o&&!n){let f=CT(o,e);if(f!==void 0)return f}let i={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,i);let r=Uf(t,t.typeName,e),u=typeof r==="function"?w(r(),e):r;if(u)MT(t,e,u);if(e.postProcess){let f=e.postProcess(u,t,e);return i.jsonSchema=u,f}return i.jsonSchema=u,u}var CT=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:Be(e.currentPath,t.path)};case"none":case"seen":{if(t.path.length<e.currentPath.length&&t.path.every((n,o)=>e.currentPath[o]===n))return console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),m(e);return e.$refStrategy==="seen"?m(e):void 0}}},MT=(t,e,n)=>{if(t.description){if(n.description=t.description,e.markdownDescription)n.markdownDescription=t.description}return n};var c=g(()=>{Ze();Vo();b()});var hf=()=>{};var Jo=(t,e)=>{let n=qE(e),o=typeof e==="object"&&e.definitions?Object.entries(e.definitions).reduce((l,[y,s])=>({...l,[y]:w(s._def,{...n,currentPath:[...n.basePath,n.definitionPath,y]},!0)??m(n)}),{}):void 0,i=typeof e==="string"?e:e?.nameStrategy==="title"?void 0:e?.name,r=w(t._def,i===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,i]},!1)??m(n),u=typeof e==="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;if(u!==void 0)r.title=u;if(n.flags.hasReferencedOpenAiAnyType){if(!o)o={};if(!o[n.openAiAnyTypeName])o[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}}let f=i===void 0?o?{...r,[n.definitionPath]:o}:r:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,i].join("/"),[n.definitionPath]:{...o,[i]:r}};if(n.target==="jsonSchema7")f.$schema="http://json-schema.org/draft-07/schema#";else if(n.target==="jsonSchema2019-09"||n.target==="openAi")f.$schema="https://json-schema.org/draft/2019-09/schema#";if(n.target==="openAi"&&(("anyOf"in f)||("oneOf"in f)||("allOf"in f)||("type"in f)&&Array.isArray(f.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return f};var Wo=g(()=>{c();po();b()});var mf=g(()=>{Wo();Ze();po();c();hf();b();_o();Do();Ve();Lo();Oo();So();Uo();ho();$o();Po();Co();Mo();co();Xo();Fo();Ho();Qo();be();Yo();We();Go();Zo();ke();Bo();Vo();Wo()});function je(){let t=Kt(),e={},n={};for(let i of t){let r=Nt(i),u=Jo(r.schema,{target:"openApi3"}),{$schema:f,...l}=u;e[i]=l,n[i]=r.description}let o=t.map((i)=>({type:"object",title:i,description:n[i],required:["op",...e[i].required||[]],properties:{op:{type:"string",const:i},driveId:{type:"string",description:"Target drive ID (optional, uses default drive)"},...e[i].properties||{}},additionalProperties:!1}));return{openapi:"3.1.0",info:{title:"agent-fs API",version:B,description:"A persistent, searchable filesystem for AI agents. agent-fs is to files what agentmail is to email.",license:{name:"MIT",url:"https://github.com/desplega-ai/agent-fs/blob/main/LICENSE"}},servers:[{url:"http://localhost:7433",description:"Local development server"}],paths:{"/health":{get:{summary:"Health check",operationId:"health",tags:["System"],security:[],responses:{"200":{description:"Server is healthy",content:{"application/json":{schema:{type:"object",properties:{ok:{type:"boolean",const:!0},version:{type:"string"}},required:["ok","version"]}}}}}}},"/auth/register":{post:{summary:"Register a new user",operationId:"register",tags:["Auth"],security:[],requestBody:{required:!0,content:{"application/json":{schema:{type:"object",properties:{email:{type:"string",format:"email"}},required:["email"]}}}},responses:{"200":{description:"User registered",content:{"application/json":{schema:{type:"object",properties:{userId:{type:"string"},orgId:{type:"string"},driveId:{type:"string"},apiKey:{type:"string"}},required:["userId","orgId","driveId","apiKey"]}}}}}}},"/auth/me":{get:{summary:"Get current user info",operationId:"me",tags:["Auth"],responses:{"200":{description:"Current user",content:{"application/json":{schema:{type:"object",properties:{id:{type:"string"},email:{type:"string"},createdAt:{type:"string",format:"date-time"}},required:["id","email","createdAt"]}}}}}}},"/orgs/{orgId}/ops":{post:{summary:"Dispatch a file operation",operationId:"dispatchOp",tags:["Operations"],description:"All file operations go through this single endpoint. The `op` field determines which operation to execute.",parameters:[{name:"orgId",in:"path",required:!0,schema:{type:"string"},description:"Organization ID"}],requestBody:{required:!0,content:{"application/json":{schema:{oneOf:o,discriminator:{propertyName:"op"}}}}},responses:{"200":{description:"Operation result (varies by op)",content:{"application/json":{schema:{type:"object",description:"Response shape depends on the operation. See each op's description for details."}}}},"400":{description:"Validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"401":{description:"Unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"403":{description:"Permission denied (RBAC)",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}},"404":{description:"File or resource not found",content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}}}}}},components:{securitySchemes:{bearerAuth:{type:"http",scheme:"bearer",description:"API key obtained from /auth/register"}},schemas:{Error:{type:"object",properties:{error:{type:"string"},message:{type:"string"}},required:["error","message"]}}},security:[{bearerAuth:[]}]}}var af=g(()=>{mf();uo();To()});var $f={};Ft($f,{updateOrgMemberRole:()=>$t,updateDriveMemberRole:()=>St,setDriveMember:()=>fo,setConfigValue:()=>N,setConfig:()=>Ei,schema:()=>E,resolveContext:()=>x,removeOrgMember:()=>Pt,removeDriveMember:()=>Ut,listUserOrgs:()=>Z,listOrgMembers:()=>at,listDrives:()=>vt,listDriveMembers:()=>Ot,inviteToOrg:()=>Ct,getUserDriveRole:()=>ft,getUserByEmail:()=>bt,getUserByApiKey:()=>st,getRequiredRole:()=>ue,getRegisteredOps:()=>Kt,getOrg:()=>fe,getOpDefinition:()=>Nt,getHome:()=>nt,getDrive:()=>Eo,getDbPath:()=>_t,getConfigPath:()=>ot,getConfig:()=>v,generateOpenAPISpec:()=>je,ensureLocalUser:()=>le,dispatchOp:()=>wt,createUser:()=>q,createOrg:()=>mt,createEmbeddingProviderFromEnv:()=>kt,createDrive:()=>Lt,createDatabase:()=>gt,commentUpdate:()=>Fe,commentResolve:()=>Ye,commentList:()=>ce,commentGet:()=>Xe,commentDelete:()=>He,commentAdd:()=>Me,checkPermission:()=>Ee,ValidationError:()=>z,VERSION:()=>B,PermissionDeniedError:()=>j,NotFoundError:()=>U,IndexingInProgressError:()=>re,EditConflictError:()=>Et,AgentS3Client:()=>dt,AgentFSError:()=>ut});var P=g(()=>{a();zt();hu();V();uo();GE();To();af()});var ze={};Ft(ze,{stopDaemon:()=>yd,startDaemon:()=>ld,daemonStatus:()=>sd});import{spawn as rd}from"child_process";import{readFileSync as ko,writeFileSync as ud,unlinkSync as Hf,existsSync as jo,openSync as Ed}from"fs";import{join as zo}from"path";function qo(){return zo(nt(),"agent-fs.pid")}function fd(){return zo(nt(),"agent-fs.log")}function ld(){let t=qo();if(jo(t)){let f=parseInt(ko(t,"utf-8").trim());try{process.kill(f,0),console.log(`Daemon already running (PID: ${f})`);return}catch{Hf(t)}}let e=fd(),n=Ed(e,"a"),o=!import.meta.dir.startsWith("/")||import.meta.dir.startsWith("/$bunfs"),i=o?process.execPath:"bun",r=o?["server"]:["run",zo(import.meta.dir,"index.ts")],u=rd(i,r,{detached:!0,stdio:["ignore",n,n]});if(u.unref(),u.pid)ud(t,String(u.pid)),console.log(`Daemon started (PID: ${u.pid})`),console.log(`Logs: ${e}`)}function yd(){let t=qo();if(!jo(t)){console.log("Daemon is not running");return}let e=parseInt(ko(t,"utf-8").trim());try{process.kill(e,"SIGTERM"),console.log(`Daemon stopped (PID: ${e})`)}catch{console.log(`Process ${e} not found (already stopped)`)}Hf(t)}function sd(){let t=qo();if(!jo(t))return{running:!1};let e=parseInt(ko(t,"utf-8").trim());try{return process.kill(e,0),{running:!0,pid:e}}catch{return{running:!1}}}var qe=g(()=>{P()});var cd={};import{Server as Ud}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as hd}from"@modelcontextprotocol/sdk/server/stdio.js";import{Client as md}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as ad}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{ListToolsRequestSchema as $d,CallToolRequestSchema as Pd}from"@modelcontextprotocol/sdk/types.js";var Te,xo,jf,Cd,ti,ei,Md;var zf=g(async()=>{P();Te=v(),xo=process.env.AGENT_FS_API_URL??Te.apiUrl??`http://${Te.server.host}:${Te.server.port}`,jf=process.env.AGENT_FS_API_KEY??Te.apiKey??Te.auth?.apiKey;if(!jf)console.error("Error: No API key. Register with `agent-fs auth register` or set AGENT_FS_API_KEY."),process.exit(1);Cd=new ad(new URL(`${xo}/mcp`),{requestInit:{headers:{Authorization:`Bearer ${jf}`}}}),ti=new md({name:"agent-fs-proxy",version:B});try{await ti.connect(Cd)}catch(t){console.error(`Cannot connect to agent-fs at ${xo}.
|
|
173
|
+
Start a daemon with \`agent-fs daemon start\` or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1)}ei=new Ud({name:"agent-fs",version:B},{capabilities:{tools:{}}});ei.setRequestHandler($d,async()=>{return await ti.listTools()});ei.setRequestHandler(Pd,async(t)=>{return await ti.callTool(t.params)});Md=new hd;await ei.connect(Md);console.error("[agent-fs] MCP proxy connected to "+xo)});import{z as qf}from"zod";function xf(t,e){let n=Kt();for(let o of n){let i=Nt(o);if(!i)continue;t.tool(o,i.description,i.schema instanceof qf.ZodObject?i.schema.shape:{params:qf.any()},async(r,u)=>{let f=e(u),l=await wt(f,o,r);return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}})}}var tl=g(()=>{P()});import{McpServer as Xd}from"@modelcontextprotocol/sdk/server/mcp.js";import{z as It}from"zod";function el(t){let{db:e,s3:n,embeddingProvider:o,appUrl:i}=t,r=new Xd({name:"agent-fs",version:B}),u=(f)=>{let l=f.authInfo;if(!l?.extra?.user)throw Error("No auth context \u2014 MCP must be accessed through the HTTP server");let y=l.extra.user,s=x(e,{userId:y.id});return{db:e,s3:n,orgId:s.orgId,driveId:s.driveId,userId:y.id,embeddingProvider:o,appUrl:i}};return xf(r,u),r.tool("health","Check agent-fs system health: database, S3, embeddings, version.",{},async(f,l)=>{let y={version:B};try{let s=u(l),d=await wt(s,"ls",{path:"/"},{skipAuth:!0});y.database={ok:!0,rootEntries:d.entries?.length??0}}catch(s){y.database={ok:!1,error:s.message}}try{await n.listObjects("",{delimiter:"/"}),y.s3={ok:!0}}catch(s){y.s3={ok:!1,error:s.message}}return y.embeddings={configured:!!o},{content:[{type:"text",text:JSON.stringify(y,null,2)}]}}),r.tool("whoami","Get current user identity, org memberships, and drive roles.",{},async(f,l)=>{let y=u(l),s=y.userId,R=Z(e,s).map((C)=>{let M=vt(e,C.id);return{orgId:C.id,orgName:C.name,drives:M.map((H)=>({driveId:H.id,driveName:H.name,role:ft(e,s,H.id)}))}}),L=l.authInfo?.extra?.user?.email,O={userId:s,...L?{email:L}:{},activeOrg:y.orgId,activeDrive:y.driveId,memberships:R};return{content:[{type:"text",text:JSON.stringify(O,null,2)}]}}),r.tool("member-list","List members of the current org, or a specific drive if driveId is provided.",{driveId:It.string().optional().describe("Drive ID to list members for. Omit for org members.")},async(f,l)=>{let y=u(l),s=f.driveId?Ot(e,f.driveId):at(e,y.orgId);return{content:[{type:"text",text:JSON.stringify({members:s},null,2)}]}}),r.tool("member-invite","Invite a user to the current org by email. The user must already have an agent-fs account.",{email:It.string().describe("Email of the user to invite"),role:It.enum(["viewer","editor","admin"]).describe("Role to assign")},async(f,l)=>{let y=u(l);try{return Ct(e,{orgId:y.orgId,email:f.email,role:f.role}),{content:[{type:"text",text:JSON.stringify({ok:!0,invited:f.email,role:f.role},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r.tool("member-update-role","Update a member's role in the current org or a specific drive.",{email:It.string().describe("Email of the member"),role:It.enum(["viewer","editor","admin"]).describe("New role"),driveId:It.string().optional().describe("Drive ID to update role for. Omit for org role.")},async(f,l)=>{let y=u(l);try{let s=bt(e,f.email);if(!s)throw Error(`User with email ${f.email} not found`);if(f.driveId)St(e,{driveId:f.driveId,userId:s.id,role:f.role});else $t(e,{orgId:y.orgId,userId:s.id,role:f.role});return{content:[{type:"text",text:JSON.stringify({ok:!0,email:f.email,role:f.role},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r.tool("member-remove","Remove a member from the current org (cascades to all drives) or from a specific drive only.",{email:It.string().describe("Email of the member to remove"),driveId:It.string().optional().describe("Drive ID to remove from. Omit to remove from org.")},async(f,l)=>{let y=u(l);try{let s=bt(e,f.email);if(!s)throw Error(`User with email ${f.email} not found`);if(f.driveId)Ut(e,{driveId:f.driveId,userId:s.id});else Pt(e,{orgId:y.orgId,userId:s.id});return{content:[{type:"text",text:JSON.stringify({ok:!0,removed:f.email},null,2)}]}}catch(s){return{content:[{type:"text",text:JSON.stringify({error:s.message},null,2)}],isError:!0}}}),r}var nl=g(()=>{P();tl()});function ol(t){return async(e,n)=>{let o=new URL(e.req.url).pathname;if(Fd.some((f)=>o===f||o.startsWith(f)))return n();let i=e.req.header("Authorization");if(!i?.startsWith("Bearer "))return e.json({error:"UNAUTHORIZED",message:"Missing or invalid Authorization header",suggestion:"Include 'Authorization: Bearer <api_key>' header"},401);let r=i.slice(7),u=st(t,r);if(!u)return e.json({error:"UNAUTHORIZED",message:"Invalid API key",suggestion:"Register with POST /auth/register"},401);return e.set("user",u),n()}}var Fd;var il=g(()=>{P();Fd=["/auth/register","/health"]});function Hd(t){if(t instanceof U)return 404;if(t instanceof j)return 403;if(t instanceof Et)return 409;if(t instanceof re)return 503;if(t instanceof z)return 400;if("code"in t)return 400;return 500}function rl(t,e){let n=Hd(t);if("toJSON"in t&&typeof t.toJSON==="function")return e.json(t.toJSON(),n);return e.json({error:"INTERNAL_ERROR",message:t.message},n)}var ul=g(()=>{P()});function tn(t){let e=new Map;return setInterval(()=>{let n=Date.now()-60000;for(let[o,i]of e){let r=i.filter((u)=>u>n);if(r.length===0)e.delete(o);else e.set(o,r)}},300000).unref(),async(n,o)=>{let i=n.req.header("authorization")??"",r=i.startsWith("Bearer ")?i.slice(7):n.req.header("x-forwarded-for")??"unknown",u=Date.now(),f=u-60000,l=(e.get(r)??[]).filter((y)=>y>f);if(l.length>=t){let y=l[0],s=Math.ceil((y+60000-u)/1000);return n.header("Retry-After",String(s)),n.json({error:"RATE_LIMITED",message:"Too many requests"},429)}l.push(u),e.set(r,l),await o()}}import{Hono as Yd}from"hono";function El(t){let e=new Yd;return e.post("/register",async(n)=>{let{email:o}=await n.req.json();if(!o||typeof o!=="string")return n.json({error:"VALIDATION_ERROR",message:"email is required"},400);try{let i=q(t,{email:o}),r=Z(t,i.user.id);return n.json({apiKey:i.apiKey,userId:i.user.id,orgId:r[0]?.id})}catch(i){if(i instanceof Error&&i.message.includes("UNIQUE"))return n.json({error:"CONFLICT",message:"User with this email already exists"},409);throw i}}),e.get("/me",(n)=>{let o=n.get("user");try{let i=x(t,{userId:o.id});return n.json({userId:o.id,email:o.email,defaultOrgId:i.orgId,defaultDriveId:i.driveId})}catch{return n.json({userId:o.id,email:o.email,defaultOrgId:null,defaultDriveId:null})}}),e}var fl=g(()=>{P()});import{Hono as Gd}from"hono";function ll(t,e,n=null,o){let i=new Gd;return i.post("/:orgId/ops",async(r)=>{let u=r.get("user"),f=r.req.param("orgId"),l=await r.req.json(),{op:y,...s}=l;if(!y)return r.json({error:"VALIDATION_ERROR",message:"op is required in request body"},400);let d=s.driveId||s.drive_id;delete s.driveId,delete s.drive_id;let R=x(t,{userId:u.id,orgId:f,driveId:d}),L={db:t,s3:e,orgId:R.orgId,driveId:R.driveId,userId:u.id,embeddingProvider:n,appUrl:o},O=await wt(L,y,s);return r.json(O)}),i}var yl=g(()=>{P()});import{Hono as Zd}from"hono";function sl(t){let e=new Zd;return e.get("/",(n)=>{let o=n.get("user"),i=Z(t,o.id);return n.json({orgs:i})}),e.post("/",async(n)=>{let o=n.get("user"),{name:i}=await n.req.json(),r=mt(t,{name:i,userId:o.id});return n.json(r,201)}),e.get("/:orgId",(n)=>{let o=n.req.param("orgId"),i=fe(t,o);if(!i)return n.json({error:"NOT_FOUND",message:"Org not found"},404);return n.json(i)}),e.get("/:orgId/drives",(n)=>{let o=n.req.param("orgId"),i=vt(t,o);return n.json({drives:i})}),e.post("/:orgId/drives",async(n)=>{let o=n.req.param("orgId"),{name:i}=await n.req.json(),r=Lt(t,{orgId:o,name:i});return n.json(r,201)}),e.post("/:orgId/members/invite",async(n)=>{let o=n.req.param("orgId"),{email:i,role:r}=await n.req.json();return Ct(t,{orgId:o,email:i,role:r}),n.json({ok:!0})}),e.get("/:orgId/members",(n)=>{let o=n.req.param("orgId"),i=at(t,o);return n.json({members:i})}),e.patch("/:orgId/members/:userId",async(n)=>{let o=n.req.param("orgId"),i=n.req.param("userId"),{role:r}=await n.req.json();try{return $t(t,{orgId:o,userId:i,role:r}),n.json({ok:!0})}catch(u){return n.json({error:"BAD_REQUEST",message:u.message},400)}}),e.delete("/:orgId/members/:userId",(n)=>{let o=n.req.param("orgId"),i=n.req.param("userId");try{return Pt(t,{orgId:o,userId:i}),n.json({ok:!0})}catch(r){return n.json({error:"BAD_REQUEST",message:r.message},400)}}),e.get("/:orgId/drives/:driveId/members",(n)=>{let o=n.req.param("driveId"),i=Ot(t,o);return n.json({members:i})}),e.patch("/:orgId/drives/:driveId/members/:userId",async(n)=>{let o=n.req.param("driveId"),i=n.req.param("userId"),{role:r}=await n.req.json();try{return St(t,{driveId:o,userId:i,role:r}),n.json({ok:!0})}catch(u){return n.json({error:"BAD_REQUEST",message:u.message},400)}}),e.delete("/:orgId/drives/:driveId/members/:userId",(n)=>{let o=n.req.param("driveId"),i=n.req.param("userId");try{return Ut(t,{driveId:o,userId:i}),n.json({ok:!0})}catch(r){return n.json({error:"BAD_REQUEST",message:r.message},400)}}),e}var gl=g(()=>{P()});import{Hono as Bd}from"hono";function Tl(){let t=new Bd;return t.get("/openapi.json",(e)=>{return e.json(je())}),t}var dl=g(()=>{P()});import{Hono as Qd}from"hono";function Rl(t,e){let n=new Qd;return n.get("/:orgId/drives/:driveId/files/*/raw",async(o)=>{let i=o.get("user"),r=o.req.param("orgId"),u=o.req.param("driveId"),f=x(t,{userId:i.id,orgId:r,driveId:u}),y=new URL(o.req.url).pathname.match(/\/files\/(.+)\/raw$/);if(!y)return o.json({error:"VALIDATION_ERROR",message:"Invalid file path"},400);let s=decodeURIComponent(y[1]),d=I(f.orgId,f.driveId,s);try{let R=await e.getObject(d),L=R.contentType||"application/octet-stream";return new Response(R.body.buffer,{status:200,headers:{"Content-Type":L,"Content-Length":String(R.body.length),"Cache-Control":"private, max-age=60"}})}catch(R){if(R?.name==="NoSuchKey"||R?.$metadata?.httpStatusCode===404)return o.json({error:"NOT_FOUND",message:`File not found: ${s}`},404);throw R}}),n}var Al=g(()=>{P();X()});import{Hono as Vd}from"hono";import{cors as wl}from"hono/cors";import{bodyLimit as Jd}from"hono/body-limit";import{WebStandardStreamableHTTPServerTransport as Wd}from"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";function Nl(t,e,n=null){let o=new Vd,i=v(),r=i.server?.cors?.origins??["*"];if(r.length===1&&r[0]==="*")o.use("*",wl());else o.use("*",wl({origin:r}));o.use("*",Jd({maxSize:52428800})),o.use("*",ol(t));let u=i.server?.rateLimit?.requestsPerMinute??1200;if(u>0)o.use("/orgs/*",tn(u)),o.use("/auth/*",tn(u)),o.use("/mcp",tn(u));return o.onError((f,l)=>rl(f,l)),o.get("/health",(f)=>f.json({ok:!0,version:B})),o.all("/mcp",async(f)=>{let l=f.get("user"),y=new Wd({sessionIdGenerator:void 0,enableJsonResponse:!0});return await el({db:t,s3:e,embeddingProvider:n,appUrl:i.appUrl}).connect(y),y.handleRequest(f.req.raw,{authInfo:{token:f.req.header("Authorization")?.slice(7)??"",clientId:l.id,scopes:[],extra:{user:{id:l.id,email:l.email}}}})}),o.route("/auth",El(t)),o.route("/orgs",sl(t)),o.route("/orgs",ll(t,e,n,i.appUrl)),o.route("/docs",Tl()),o.route("/orgs",Rl(t,e)),o}var pl=g(()=>{P();nl();il();ul();fl();yl();gl();dl();Al()});var jd={};function _l(){console.log("Shutting down..."),ni.stop(),process.exit(0)}var en,Kd,bd,Il=null,kd,ni;var Dl=g(async()=>{P();pl();en=v(),Kd=gt(),bd=new dt(en.s3);try{Il=await kt(en.embedding)}catch(t){console.warn("Embedding provider unavailable, semantic search disabled:",t)}kd=Nl(Kd,bd,Il),ni=Bun.serve({fetch:kd.fetch,port:en.server.port,hostname:en.server.host});console.log(`agent-fs daemon running on http://${ni.hostname}:${ni.port}`);process.on("SIGTERM",_l);process.on("SIGINT",_l)});P();import{Command as zd}from"commander";P();class Ko{baseUrl;apiKey;constructor(){let t=v();this.baseUrl=process.env.AGENT_FS_API_URL??t.apiUrl??`http://${t.server.host}:${t.server.port}`,this.apiKey=process.env.AGENT_FS_API_KEY??t.apiKey??t.auth.apiKey}async request(t,e){let n=new Headers(e?.headers);if(this.apiKey)n.set("Authorization",`Bearer ${this.apiKey}`);n.set("Content-Type","application/json");let o;try{o=await fetch(`${this.baseUrl}${t}`,{...e,headers:n})}catch(r){throw Error(`Cannot connect to agent-fs daemon at ${this.baseUrl}. Is it running? Start with: agent-fs daemon start`)}let i;try{i=await o.json()}catch{let r=await o.text().catch(()=>"");throw Error(`Unexpected response from daemon (${o.status}): ${r||"empty"}`)}if(!o.ok){let r=i.message??i.error??"Request failed",u=i.suggestion?`
|
|
174
|
+
Suggestion: ${i.suggestion}`:"";throw Error(`${r}${u}`)}return i}async get(t){return this.request(t)}async post(t,e){return this.request(t,{method:"POST",body:JSON.stringify(e)})}async patch(t,e){return this.request(t,{method:"PATCH",body:JSON.stringify(e)})}async del(t){return this.request(t,{method:"DELETE"})}async callOp(t,e,n){return this.post(`/orgs/${t}/ops`,{op:e,...n})}async getMe(){return this.get("/auth/me")}setApiKey(t){this.apiKey=t}}P();import{Command as nd}from"commander";function jt(t){if(t<1024)return`${t} B`;if(t<1048576)return`${(t/1024).toFixed(1)} KB`;if(t<1073741824)return`${(t/1048576).toFixed(1)} MB`;return`${(t/1073741824).toFixed(1)} GB`}function Mt(t){if(!t)return"-";let e=typeof t==="string"?new Date(t):t;if(isNaN(e.getTime()))return String(t);return e.toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"Z")}function ge(t,e){return t.length>=e?t:t+" ".repeat(e-t.length)}function bo(t,e){return t.length>=e?t:" ".repeat(e-t.length)+t}function cT(t){let e=t.entries??[];if(e.length===0)return"(empty directory)";let n=Math.max(4,...e.map((f)=>String(f.name).length)),o=Math.max(4,...e.map((f)=>String(f.type).length)),i=Math.max(4,...e.map((f)=>jt(f.size??0).length)),r=ge("NAME",n)+" "+ge("TYPE",o)+" "+bo("SIZE",i)+" MODIFIED",u=e.map((f)=>ge(f.name,n)+" "+ge(f.type,o)+" "+bo(jt(f.size??0),i)+" "+Mt(f.modifiedAt));return[r,...u].join(`
|
|
175
|
+
`)}function Cf(t){let n=(t.content??"").split(`
|
|
176
176
|
`);if(n.length>0&&n[n.length-1]==="")n.pop();let o=t.offset??1,i=String(o+n.length-1).length;return n.map((r,u)=>`${bo(String(o+u),i)} ${r}`).join(`
|
|
177
|
-
`)}function
|
|
178
|
-
`)}function
|
|
177
|
+
`)}function XT(t){let e=[["Path",t.path??"-"],["Size",jt(t.size??0)],["Content-Type",t.contentType??"-"],["Author",t.author??"-"],["Version",t.currentVersion!=null?String(t.currentVersion):"-"],["Created",Mt(t.createdAt)],["Modified",Mt(t.modifiedAt)],["Deleted",t.isDeleted?"yes":"no"]];if(t.embeddingStatus)e.push(["Embedding",t.embeddingStatus]);if(t.appUrl)e.push(["App URL",t.appUrl]);let n=Math.max(...e.map(([o])=>o.length));return e.map(([o,i])=>`${ge(o+":",n+1)} ${i}`).join(`
|
|
178
|
+
`)}function FT(t){let e=t.versions??[];if(e.length===0)return"(no version history)";return e.map((n)=>{let o=[`v${n.version} ${Mt(n.createdAt)} ${n.author??"-"} [${n.operation}]`];if(n.message)o.push(` ${n.message}`);if(n.diffSummary)o.push(` ${n.diffSummary}`);return o.join(`
|
|
179
179
|
`)}).join(`
|
|
180
180
|
|
|
181
|
-
`)}function
|
|
182
|
-
`)}function
|
|
183
|
-
`)}function
|
|
181
|
+
`)}function HT(t){return`\u2713 wrote ${t.path} (v${t.version}, ${jt(t.size??0)})`}function YT(t){return`\u2713 edited ${t.path} (v${t.version}, ${t.changes} change${t.changes!==1?"s":""})`}function GT(t){return`\u2713 appended (v${t.version}, ${jt(t.size??0)})`}function ZT(t){return t.deleted?`\u2713 deleted ${t.path}`:`(not found: ${t.path})`}function BT(t){return`\u2713 moved ${t.from} -> ${t.to} (v${t.version})`}function QT(t){return`\u2713 copied ${t.from} -> ${t.to} (v${t.version})`}function VT(t){let e=t.tree??[];if(e.length===0)return"(empty)";let n=[];function o(i,r){for(let u=0;u<i.length;u++){let f=i[u],l=u===i.length-1,y=l?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",s=f.type==="directory"?"/":"";if(n.push(`${r}${y}${f.name}${s}`),f.children&&f.children.length>0){let d=r+(l?" ":"\u2502 ");o(f.children,d)}}}return o(e,""),n.join(`
|
|
182
|
+
`)}function JT(t){let e=t.matches??[];if(e.length===0)return"(no matches)";return e.map((n)=>`${n.path}:${n.lineNumber}: ${n.content}`).join(`
|
|
183
|
+
`)}function WT(t){let e=t.matches??[];if(e.length===0)return t.hint?`(no matches) ${t.hint}`:"(no matches)";let n=e.map((o)=>`${o.path} (rank: ${typeof o.rank==="number"?o.rank.toFixed(2):o.rank})
|
|
184
184
|
${o.snippet}`);if(t.hint)n.push(`
|
|
185
185
|
hint: ${t.hint}`);return n.join(`
|
|
186
186
|
|
|
187
|
-
`)}function
|
|
187
|
+
`)}function Pf(t){let e=t.results??[];if(e.length===0)return"(no results)";return e.map((n)=>`${n.path} (score: ${typeof n.score==="number"?n.score.toFixed(3):n.score})`+(n.author?` by ${n.author}`:"")+`
|
|
188
188
|
${n.snippet}`).join(`
|
|
189
189
|
|
|
190
|
-
`)}function
|
|
191
|
-
`)}function
|
|
192
|
-
`)}function
|
|
190
|
+
`)}function KT(t){let e=t.matches??[];if(e.length===0)return"(no matches)";return e.map((n)=>`${n.path} ${jt(n.size??0)} ${Mt(n.modifiedAt)}`).join(`
|
|
191
|
+
`)}function bT(t){let e=t.changes??[];if(e.length===0)return"(no changes)";return e.map((n)=>{let o=n.type==="add"?"+":n.type==="remove"?"-":" ",i=n.lineNumber!=null?`${n.lineNumber}: `:"";return`${o} ${i}${n.content}`}).join(`
|
|
192
|
+
`)}function kT(t){return Cf(t)}function jT(t){return`\u2713 reverted to v${t.revertedTo} (new version: v${t.version})`}function zT(t){let e=t.entries??[];if(e.length===0)return"(no recent activity)";return e.map((n)=>`${n.path} v${n.version} ${Mt(n.createdAt)} ${n.author??"-"} [${n.operation}]`+(n.message?`
|
|
193
193
|
${n.message}`:"")).join(`
|
|
194
194
|
|
|
195
|
-
`)}function
|
|
195
|
+
`)}function qT(t){let e=[];if(e.push(`reindexed: ${t.reindexed??0}`),t.failed)e.push(`failed: ${t.failed}`);if(t.skipped)e.push(`skipped: ${t.skipped}`);return e.join(", ")}function xT(t){let e=`${t.url}
|
|
196
196
|
|
|
197
197
|
Expires: ${Mt(t.expiresAt)} (${t.expiresIn}s)`;if(t.appUrl)e+=`
|
|
198
|
-
App: ${t.appUrl}`;return e}var
|
|
198
|
+
App: ${t.appUrl}`;return e}var td={ls:cT,cat:Cf,stat:XT,log:FT,write:HT,edit:YT,append:GT,rm:ZT,mv:BT,cp:QT,tree:VT,grep:JT,fts:WT,search:Pf,"vec-search":Pf,glob:KT,diff:bT,tail:kT,revert:jT,recent:zT,reindex:qT,"signed-url":xT};function ed(t,e){let n=td[t];if(n)return n(e);return JSON.stringify(e,null,2)}function Mf(t,e,n){if(n)console.log(JSON.stringify(e,null,2));else console.log(ed(t,e))}var od=[{name:"write",args:[{name:"path",required:!0}],options:[{flag:"--content <text>",description:"File content (reads stdin if omitted)"},{flag:"-m, --message <msg>",description:"Version message"},{flag:"--expected-version <n>",description:"Fail if file is not at this version (optimistic concurrency)"}]},{name:"cat",args:[{name:"path",required:!0}],options:[{flag:"--offset <n>",description:"Line offset"},{flag:"--limit <n>",description:"Max lines"}]},{name:"edit",args:[{name:"path",required:!0}],options:[{flag:"--old <string>",description:"Text to replace"},{flag:"--new <string>",description:"Replacement text"},{flag:"-m, --message <msg>",description:"Version message"}]},{name:"append",args:[{name:"path",required:!0}],options:[{flag:"--content <text>",description:"Content to append"},{flag:"-m, --message <msg>",description:"Version message"}]},{name:"ls",args:[{name:"path",required:!1}],options:[]},{name:"stat",args:[{name:"path",required:!0}],options:[]},{name:"rm",args:[{name:"path",required:!0}],options:[]},{name:"mv",args:[{name:"from",required:!0},{name:"to",required:!0}],options:[{flag:"-m, --message <msg>",description:"Version message"}]},{name:"cp",args:[{name:"from",required:!0},{name:"to",required:!0}],options:[]},{name:"tail",args:[{name:"path",required:!0}],options:[{flag:"-n, --lines <n>",description:"Number of lines (default: 20)"}]},{name:"log",args:[{name:"path",required:!0}],options:[{flag:"--limit <n>",description:"Max entries"}]},{name:"diff",args:[{name:"path",required:!0}],options:[{flag:"--v1 <n>",description:"First version"},{flag:"--v2 <n>",description:"Second version"}]},{name:"revert",args:[{name:"path",required:!0}],options:[{flag:"--to <n>",description:"Version to revert to"}]},{name:"recent",args:[{name:"path",required:!1}],options:[{flag:"--since <duration>",description:"Time filter (e.g., 1h, 24h)"},{flag:"--limit <n>",description:"Max entries"}]},{name:"grep",args:[{name:"pattern",required:!0},{name:"path",required:!0}],options:[]},{name:"fts",args:[{name:"pattern",required:!0}],options:[{flag:"--path <prefix>",description:"Path prefix filter"}]},{name:"search",args:[{name:"query",required:!0}],options:[{flag:"--limit <n>",description:"Max results"}]},{name:"vec-search",args:[{name:"query",required:!0}],options:[{flag:"--limit <n>",description:"Max results"}]},{name:"reindex",args:[],options:[{flag:"--path <prefix>",description:"Path prefix filter"}]},{name:"tree",args:[{name:"path",required:!1}],options:[{flag:"--depth <n>",description:"Max recursion depth"}]},{name:"glob",args:[{name:"pattern",required:!0}],options:[{flag:"--path <prefix>",description:"Path prefix filter"}]},{name:"signed-url",args:[{name:"path",required:!0}],options:[{flag:"--expires-in <seconds>",description:"Expiry in seconds (default: 86400 = 24h)"}]}];function cf(t,e,n){for(let o of od){let i=Nt(o.name),r=new nd(o.name).description(i?.description??o.name);for(let u of o.args)if(u.required)r.argument(`<${u.name}>`);else r.argument(`[${u.name}]`);for(let u of o.options)r.option(u.flag,u.description);r.action(async(...u)=>{let l={...u[u.length-2]};for(let y=0;y<o.args.length;y++)if(u[y]!==void 0)l[o.args[y].name]=u[y];if((o.name==="write"||o.name==="append")&&!l.content)if(!process.stdin.isTTY)l.content=await Bun.stdin.text();else console.error("Error: --content required (or pipe content via stdin)"),process.exit(1);if(l["expected-version"]!==void 0)l.expectedVersion=l["expected-version"],delete l["expected-version"];if(l.old!==void 0)l.old_string=l.old,delete l.old;if(l.new!==void 0)l.new_string=l.new,delete l.new;if(o.name==="revert"&&l.to!==void 0)l.version=l.to,delete l.to;if(l["expires-in"]!==void 0)l.expiresIn=l["expires-in"],delete l["expires-in"];for(let y of["offset","limit","lines","v1","v2","version","expectedVersion","depth","expiresIn"])if(l[y]!==void 0)l[y]=parseInt(l[y]);try{let y=await e.callOp(await n(),o.name,l);Mf(o.name,y,t.opts().json)}catch(y){if(y?.cause?.code==="ECONNREFUSED"||y?.message?.includes("fetch failed"))console.error(`Cannot connect to agent-fs daemon.
|
|
199
199
|
Start with: agent-fs daemon start
|
|
200
|
-
Or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1);console.error(`Error: ${y.message}`),process.exit(1)}}),t.addCommand(r)}}P();import{Command as
|
|
201
|
-
API key saved to config.`)}import{Command as
|
|
200
|
+
Or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1);console.error(`Error: ${y.message}`),process.exit(1)}}),t.addCommand(r)}}P();import{Command as id}from"commander";function Ff(t){let e=new id("auth").description("Authentication commands");return e.command("register").argument("<email>","Email address").description("Register a new user").action(async(n)=>{try{let o=await t.post("/auth/register",{email:n});Xf(o,t)}catch{try{let o=gt(),i=q(o,{email:n}),r=Z(o,i.user.id);Xf({apiKey:i.apiKey,userId:i.user.id,orgId:r[0]?.id},t)}catch(o){if(o.message?.includes("UNIQUE"))console.error("Error: User with this email already exists.");else console.error(`Error: ${o.message}`);process.exit(1)}}}),e.command("whoami").description("Show current user info").action(async()=>{try{let n=await t.get("/auth/me");console.log(JSON.stringify(n,null,2))}catch{try{let{getConfig:n,getUserByApiKey:o,createDatabase:i,listUserOrgs:r}=await Promise.resolve().then(() => (P(),$f)),u=n();if(!u.auth.apiKey)console.error("Not logged in. Run: agent-fs auth register <email>"),process.exit(1);let f=i(),l=o(f,u.auth.apiKey);if(!l)console.error("Invalid API key in config."),process.exit(1);let y=r(f,l.id);console.log(JSON.stringify({...l,orgs:y},null,2))}catch(n){console.error(`Error: ${n.message}`),process.exit(1)}}}),e}function Xf(t,e){console.log("Registered successfully!"),console.log(`API Key: ${t.apiKey}`),console.log(`User ID: ${t.userId}`),console.log(`Org ID: ${t.orgId}`),N("auth.apiKey",t.apiKey),e.setApiKey(t.apiKey),console.log(`
|
|
201
|
+
API key saved to config.`)}import{Command as gd}from"commander";function Yf(){let t=new gd("daemon").description("Daemon lifecycle management");return t.command("start").description("Start the agent-fs daemon").action(async()=>{let{startDaemon:e}=await Promise.resolve().then(() => (qe(),ze));e()}),t.command("stop").description("Stop the agent-fs daemon").action(async()=>{let{stopDaemon:e}=await Promise.resolve().then(() => (qe(),ze));e()}),t.command("status").description("Check daemon status").action(async()=>{let{daemonStatus:e}=await Promise.resolve().then(() => (qe(),ze)),n=e();if(n.running)console.log(`Daemon running (PID: ${n.pid})`);else console.log("Daemon is not running")}),t}P();import{Command as Td}from"commander";import{existsSync as Gf}from"fs";function Zf(){let t=new Td("config").description("Configuration management");return t.command("get").argument("<key>","Config key (dot notation, e.g., s3.bucket)").description("Get a config value").action((e)=>{let n=v(),o=e.split("."),i=n;for(let r of o)i=i?.[r];if(i===void 0)console.error(`Key not found: ${e}`),process.exit(1);console.log(typeof i==="object"?JSON.stringify(i,null,2):String(i))}),t.command("set").argument("<key>","Config key").argument("<value>","Config value").description("Set a config value").action((e,n)=>{let o=n;try{o=JSON.parse(n)}catch{}N(e,o),console.log(`Set ${e} = ${JSON.stringify(o)}`)}),t.command("list").description("Show all config").action(()=>{console.log(JSON.stringify(v(),null,2))}),t.command("validate").description("Check that config, database, S3, and embeddings are healthy").action(async()=>{let e=[],n=v(),o=Gf(ot());e.push({name:"Config file",ok:o,message:o?ot():"Not found \u2014 run `agent-fs onboard`"});let r=["endpoint","bucket","accessKeyId","secretAccessKey"].filter((s)=>!n.s3[s]);if(e.push({name:"S3 config",ok:r.length===0,message:r.length===0?`${n.s3.provider} \u2192 ${n.s3.endpoint}/${n.s3.bucket}`:`Missing: ${r.join(", ")}`}),r.length===0)try{await new dt(n.s3).listObjects(""),e.push({name:"S3 connectivity",ok:!0,message:"Connected"})}catch(s){e.push({name:"S3 connectivity",ok:!1,message:s.message||"Connection failed"})}let u=Gf(_t());e.push({name:"Database",ok:u,message:u?_t():"Not found \u2014 run `agent-fs onboard`"}),e.push({name:"Auth",ok:!!n.auth.apiKey,message:n.auth.apiKey?"API key configured":"No API key \u2014 run `agent-fs onboard`"});let f=n.embedding.provider,l=!!n.embedding.apiKey||!!process.env.OPENAI_API_KEY||!!process.env.GEMINI_API_KEY;if(f==="openai"||f==="gemini")if(l)try{let s=await kt(n.embedding);e.push({name:"Embeddings",ok:!!s,message:s?`${f} ready`:`${f} configured but failed to init`})}catch(s){e.push({name:"Embeddings",ok:!1,message:s.message})}else e.push({name:"Embeddings",ok:!1,message:`${f} selected but no API key`});else e.push({name:"Embeddings",ok:!0,message:"local/disabled (semantic search may be unavailable)"});console.log(`
|
|
202
202
|
agent-fs health check
|
|
203
|
-
`);let y=!0;for(let s of e){let
|
|
204
|
-
${
|
|
205
|
-
This invites the user to the organization that owns the current drive. The user will have access to all drives in the org based on their role.`).action(async(o,i)=>{try{let r=await e();await t.post(`/orgs/${r}/members/invite`,{email:o,role:i.role}),console.log(`Invited ${o} as ${i.role}`)}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n}P();import{Command as
|
|
203
|
+
`);let y=!0;for(let s of e){let d=s.ok?"\u2713":"\u2717";if(console.log(` ${d} ${s.name}: ${s.message}`),!s.ok)y=!1}if(console.log(),y)console.log("All checks passed.");else console.log("Some checks failed. Fix the issues above and re-run."),process.exit(1)}),t}P();import{Command as dd}from"commander";function Bf(t,e){let n=new dd("drive").description("Drive management");return n.command("list").description("List drives (all orgs unless --org is set)").action(async()=>{let o=n.parent?.opts().json;try{let i=n.parent?.opts().org;if(i){let f=await t.get(`/orgs/${i}/drives`);if(o){console.log(JSON.stringify(f,null,2));return}for(let l of f.drives){let y=l.isDefault?" (default)":"";console.log(`${l.id} ${l.name}${y}`)}return}let{orgs:r}=await t.get("/orgs");if(o){let f=[];for(let l of r){let{drives:y}=await t.get(`/orgs/${l.id}/drives`);f.push({orgId:l.id,orgName:l.name,drives:y})}console.log(JSON.stringify(f,null,2));return}if(!r||r.length===0){console.log("(no orgs)");return}let u=v();for(let f of r){let l=[];if(f.isPersonal)l.push("personal");if(u.defaultOrg===f.id)l.push("active");let y=l.length>0?` (${l.join(", ")})`:"";console.log(`
|
|
204
|
+
${f.name} [${f.role}]${y}`);let{drives:s}=await t.get(`/orgs/${f.id}/drives`);for(let d of s){let R=[];if(d.isDefault)R.push("default");if(u.defaultDrive===d.id)R.push("active");let L=R.length>0?` (${R.join(", ")})`:"";console.log(` ${d.id} ${d.name}${L}`)}}}catch(i){console.error(`Error: ${i.message}`),process.exit(1)}}),n.command("create").argument("<name>","Drive name").description("Create a new drive").action(async(o)=>{try{let i=await e(),r=await t.post(`/orgs/${i}/drives`,{name:o});console.log(JSON.stringify(r,null,2))}catch(i){console.error(`Error: ${i.message}`),process.exit(1)}}),n.command("current").description("Show current drive context").action(async()=>{let o=n.parent?.opts().json;try{let i=v(),r=await t.getMe(),u=i.defaultOrg??r.defaultOrgId;if(!u)console.error("Error: No org context. Run 'agent-fs auth register' first."),process.exit(1);let{drives:f}=await t.get(`/orgs/${u}/drives`),l;if(i.defaultDrive)l=f.find((s)=>s.id===i.defaultDrive);if(!l)l=f.find((s)=>s.isDefault)??f[0]??null;let y=i.defaultOrg?"config (org switch)":"server default";if(o)console.log(JSON.stringify({orgId:u,drive:l,source:y},null,2));else console.log(`org: ${u}`),console.log(`drive: ${l?.id??"(none)"} ${l?.name??""}`),console.log(`source: ${y}`)}catch(i){console.error(`Error: ${i.message}`),process.exit(1)}}),n.command("switch").argument("<driveId>","Drive ID to switch to").description("Set default drive context").action(async(o)=>{try{let{orgs:i}=await t.get("/orgs"),r=null,u=null;for(let f of i){let{drives:l}=await t.get(`/orgs/${f.id}/drives`),y=l.find((s)=>s.id===o);if(y){r=y,u=f;break}}if(!r)console.error(`Error: Drive ${o} not found in any of your orgs.`),process.exit(1);N("defaultOrg",u.id),N("defaultDrive",o),console.log(`Switched to drive: ${r.name} (org: ${u.name})`)}catch(i){console.error(`Error: ${i.message}`),process.exit(1)}}),n.command("invite").argument("<email>","User email to invite").requiredOption("--role <role>","Role: viewer, editor, or admin").description("Invite a user to the current org").addHelpText("after",`
|
|
205
|
+
This invites the user to the organization that owns the current drive. The user will have access to all drives in the org based on their role.`).action(async(o,i)=>{try{let r=await e();await t.post(`/orgs/${r}/members/invite`,{email:o,role:i.role}),console.log(`Invited ${o} as ${i.role}`)}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n}P();import{Command as Rd}from"commander";function Qf(t){let e=new Rd("org").description("Org management");return e.command("list").description("List orgs you belong to").action(async()=>{let n=e.parent?.opts().json;try{let{orgs:o}=await t.get("/orgs");if(n){console.log(JSON.stringify(o,null,2));return}if(!o||o.length===0){console.log("(no orgs)");return}let i=v();for(let r of o){let u=[];if(r.isPersonal)u.push("personal");if(i.defaultOrg===r.id)u.push("active");let f=u.length>0?` (${u.join(", ")})`:"";console.log(`${r.id} ${r.name} [${r.role}]${f}`)}}catch(o){console.error(`Error: ${o.message}`),process.exit(1)}}),e.command("current").description("Show current org context").action(async()=>{let n=e.parent?.opts().json;try{let o=v(),i=await t.getMe(),r=o.defaultOrg??i.defaultOrgId;if(!r)console.error("Error: No org context. Run 'agent-fs auth register' first."),process.exit(1);let u=await t.get(`/orgs/${r}`),f=o.defaultOrg?"config (org switch)":"server default";if(n)console.log(JSON.stringify({...u,source:f},null,2));else console.log(`${u.id} ${u.name}${u.isPersonal?" (personal)":""}`),console.log(`source: ${f}`)}catch(o){console.error(`Error: ${o.message}`),process.exit(1)}}),e.command("switch").argument("<orgId>","Org ID to switch to").description("Set default org context").action(async(n)=>{try{let o=await t.get(`/orgs/${n}`);N("defaultOrg",n),N("defaultDrive",void 0),console.log(`Switched to org: ${o.name} (${n})`)}catch(o){console.error(`Error: ${o.message}`),process.exit(1)}}),e}import{Command as Dd}from"commander";P();import{Command as Ad}from"commander";import{execSync as ct}from"child_process";import{existsSync as wd}from"fs";function xe(){return new Ad("onboard").description("Set up agent-fs (storage, embeddings, database, first user)").option("--local","Use local MinIO Docker container for S3").option("--remote <url>","Connect to a remote agent-fs server").option("-y, --yes","Accept all defaults without prompts").option("--s3-endpoint <url>","S3 endpoint URL").option("--s3-bucket <name>","S3 bucket name").option("--s3-access-key <key>","S3 access key ID").option("--s3-secret-key <key>","S3 secret access key").option("--s3-region <region>","S3 region").option("--embeddings <provider>","Embedding provider: openai, gemini, local, none").option("--openai-key <key>","OpenAI API key for embeddings").option("--gemini-key <key>","Gemini API key for embeddings").option("--no-daemon","Skip starting the daemon").action(async(e)=>{if(e.remote)console.error(`Remote mode is not yet supported in the onboard wizard.
|
|
206
206
|
To connect to a remote server, configure manually:
|
|
207
207
|
agent-fs config set api.url "`+e.remote+`"
|
|
208
|
-
agent-fs config set api.key "<your-api-key>"`),process.exit(1);let n=ot();if(
|
|
208
|
+
agent-fs config set api.key "<your-api-key>"`),process.exit(1);let n=ot();if(wd(n)){if(v().auth.apiKey&&!e.yes)console.log("Existing configuration found at "+n),console.log(`Re-running onboard will update settings. Use -y to accept defaults.
|
|
209
209
|
`)}console.log(`Setting up agent-fs...
|
|
210
|
-
`);let i=!(e.s3Endpoint||e.s3Bucket||e.s3AccessKey||e.s3SecretKey);if(e.s3Endpoint){if(N("s3.endpoint",e.s3Endpoint),e.s3Bucket)N("s3.bucket",e.s3Bucket);if(e.s3AccessKey)N("s3.accessKeyId",e.s3AccessKey);if(e.s3SecretKey)N("s3.secretAccessKey",e.s3SecretKey);if(e.s3Region)N("s3.region",e.s3Region);N("s3.provider","s3"),console.log("S3 configured from flags.")}else if(i)await
|
|
210
|
+
`);let i=!(e.s3Endpoint||e.s3Bucket||e.s3AccessKey||e.s3SecretKey);if(e.s3Endpoint){if(N("s3.endpoint",e.s3Endpoint),e.s3Bucket)N("s3.bucket",e.s3Bucket);if(e.s3AccessKey)N("s3.accessKeyId",e.s3AccessKey);if(e.s3SecretKey)N("s3.secretAccessKey",e.s3SecretKey);if(e.s3Region)N("s3.region",e.s3Region);N("s3.provider","s3"),console.log("S3 configured from flags.")}else if(i)await pd(!!e.yes);else await Id();let r=e.embeddings??(e.yes?"none":void 0);if(r)Nd(r,e);else if(!e.yes)console.log(`
|
|
211
211
|
Embedding provider not specified. Skipping (semantic search disabled).`),console.log("Configure later: agent-fs config set embedding.provider openai");console.log(`
|
|
212
|
-
Initializing database...`);let u=gt();if(console.log("Database ready."),i||e.yes){let{apiKey:
|
|
213
|
-
User registered: ${l.email}`),console.log(`API Key: ${
|
|
214
|
-
User registered: ${
|
|
212
|
+
Initializing database...`);let u=gt();if(console.log("Database ready."),i||e.yes){let{apiKey:f}=le(u),l=st(u,f),y=Z(u,l.id);console.log(`
|
|
213
|
+
User registered: ${l.email}`),console.log(`API Key: ${f}`),console.log(`Org ID: ${y[0]?.id}`)}else{let f=await _d();try{let l=q(u,{email:f}),y=Z(u,l.user.id);N("auth.apiKey",l.apiKey),console.log(`
|
|
214
|
+
User registered: ${f}`),console.log(`API Key: ${l.apiKey}`),console.log(`Org ID: ${y[0]?.id}`)}catch(l){if(l.message?.includes("UNIQUE"))console.log(`User ${f} already exists.`);else throw l}}console.log("\nSetup complete! Run `agent-fs daemon start` to begin."),console.log("Or use MCP directly: agent-fs mcp")})}function Nd(t,e){switch(t){case"openai":if(N("embedding.provider","openai"),N("embedding.model","text-embedding-3-small"),e.openaiKey)N("embedding.apiKey",e.openaiKey);console.log("Embeddings: OpenAI (text-embedding-3-small)");break;case"gemini":if(N("embedding.provider","gemini"),N("embedding.model","text-embedding-004"),e.geminiKey)N("embedding.apiKey",e.geminiKey);console.log("Embeddings: Google Gemini (text-embedding-004)");break;case"local":N("embedding.provider","local"),console.log("Embeddings: local llama.cpp");break;case"none":N("embedding.provider","local"),N("embedding.model",""),N("embedding.apiKey",""),console.log("Embeddings: disabled (semantic search unavailable)");break;default:console.error(`Unknown embedding provider: ${t}`),console.error("Valid options: openai, gemini, local, none"),process.exit(1)}}async function pd(t){try{ct("which docker",{stdio:"ignore"}),ct("docker info",{stdio:"ignore"})}catch{console.error(`Docker is required for local mode (MinIO).
|
|
215
215
|
Install Docker: https://docs.docker.com/get-docker/
|
|
216
|
-
Or use 'agent-fs onboard --s3-endpoint <url>' to configure your own S3 bucket.`),process.exit(1)}let e=ct("docker ps -a --filter name=agent-fs-minio --format '{{.Names}}'",{encoding:"utf-8"}).trim();if(e==="agent-fs-minio")console.log("Found existing MinIO container (agent-fs-minio).");if(!t){let n=e==="agent-fs-minio"?"start the existing":"create a new";process.stdout.write(`This will ${n} MinIO Docker container. Continue? [Y/n] `);let o=Bun.stdin.stream().getReader(),{value:i}=await o.read();o.releaseLock();let r=new TextDecoder().decode(i).trim().toLowerCase();if(r==="n"||r==="no"){console.log("Skipped MinIO setup. Configure S3 manually:"),console.log(" agent-fs config set s3.endpoint <url>");return}}console.log("Setting up MinIO (local S3)...");try{if(e==="agent-fs-minio")ct("docker start agent-fs-minio",{stdio:"inherit"}),console.log("MinIO container started.");else ct('docker run -d --name agent-fs-minio -p 9000:9000 -p 9001:9001 -v agent-fs-minio-data:/data -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin minio/minio server /data --console-address ":9001"',{stdio:"inherit"}),console.log("MinIO container created.");console.log("Waiting for MinIO to be ready..."),await new Promise((o)=>setTimeout(o,2000));try{ct("docker exec agent-fs-minio mc alias set local http://localhost:9000 minioadmin minioadmin && docker exec agent-fs-minio mc mb --ignore-existing local/agentfs",{stdio:"inherit"})}catch{}let n=ct("docker inspect --format='{{.Id}}' agent-fs-minio",{encoding:"utf-8"}).trim();N("minio.containerId",n),N("minio.managed",!0)}catch(n){console.error(`Failed to set up MinIO: ${n.message}`),process.exit(1)}N("s3.provider","minio"),N("s3.endpoint","http://localhost:9000"),N("s3.bucket","agentfs"),N("s3.region","us-east-1"),N("s3.accessKeyId","minioadmin"),N("s3.secretAccessKey","minioadmin"),console.log("MinIO configured.")}async function
|
|
217
|
-
Edit with: agent-fs config set s3.endpoint <url>`)}async function
|
|
218
|
-
`),await t.parseAsync(o.args,{from:"user"})});for(let n of t.options)e.addOption(n);return e}import{Command as
|
|
216
|
+
Or use 'agent-fs onboard --s3-endpoint <url>' to configure your own S3 bucket.`),process.exit(1)}let e=ct("docker ps -a --filter name=agent-fs-minio --format '{{.Names}}'",{encoding:"utf-8"}).trim();if(e==="agent-fs-minio")console.log("Found existing MinIO container (agent-fs-minio).");if(!t){let n=e==="agent-fs-minio"?"start the existing":"create a new";process.stdout.write(`This will ${n} MinIO Docker container. Continue? [Y/n] `);let o=Bun.stdin.stream().getReader(),{value:i}=await o.read();o.releaseLock();let r=new TextDecoder().decode(i).trim().toLowerCase();if(r==="n"||r==="no"){console.log("Skipped MinIO setup. Configure S3 manually:"),console.log(" agent-fs config set s3.endpoint <url>");return}}console.log("Setting up MinIO (local S3)...");try{if(e==="agent-fs-minio")ct("docker start agent-fs-minio",{stdio:"inherit"}),console.log("MinIO container started.");else ct('docker run -d --name agent-fs-minio -p 9000:9000 -p 9001:9001 -v agent-fs-minio-data:/data -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin minio/minio server /data --console-address ":9001"',{stdio:"inherit"}),console.log("MinIO container created.");console.log("Waiting for MinIO to be ready..."),await new Promise((o)=>setTimeout(o,2000));try{ct("docker exec agent-fs-minio mc alias set local http://localhost:9000 minioadmin minioadmin && docker exec agent-fs-minio mc mb --ignore-existing local/agentfs",{stdio:"inherit"})}catch{}let n=ct("docker inspect --format='{{.Id}}' agent-fs-minio",{encoding:"utf-8"}).trim();N("minio.containerId",n),N("minio.managed",!0)}catch(n){console.error(`Failed to set up MinIO: ${n.message}`),process.exit(1)}N("s3.provider","minio"),N("s3.endpoint","http://localhost:9000"),N("s3.bucket","agentfs"),N("s3.region","us-east-1"),N("s3.accessKeyId","minioadmin"),N("s3.secretAccessKey","minioadmin"),console.log("MinIO configured.")}async function Id(){let t=v();console.log("Using S3 configuration from ~/.agent-fs/config.json"),console.log(` Provider: ${t.s3.provider}`),console.log(` Endpoint: ${t.s3.endpoint}`),console.log(` Bucket: ${t.s3.bucket}`),console.log(`
|
|
217
|
+
Edit with: agent-fs config set s3.endpoint <url>`)}async function _d(){process.stdout.write("Email for first user: ");let t=Bun.stdin.stream().getReader(),{value:e}=await t.read();return t.releaseLock(),new TextDecoder().decode(e).trim()||"local@agent-fs.local"}function Vf(){let t=xe(),e=new Dd("init").description("Set up agent-fs (alias for 'onboard')").allowUnknownOption(!0).action(async(n,o)=>{console.log(`Note: 'agent-fs init' is now 'agent-fs onboard'.
|
|
218
|
+
`),await t.parseAsync(o.args,{from:"user"})});for(let n of t.options)e.addOption(n);return e}import{Command as Ld}from"commander";function Jf(t,e){let n=new Ld("comment").description("Document comments");async function o(i,r){try{return await t.callOp(await e(),i,r)}catch(u){if(u?.cause?.code==="ECONNREFUSED"||u?.message?.includes("fetch failed"))console.error(`Cannot connect to agent-fs daemon.
|
|
219
219
|
Start with: agent-fs daemon start
|
|
220
|
-
Or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1);throw u}}return n.command("add").argument("<path>","File path to comment on").requiredOption("--body <text>","Comment body").option("--line <n>","Line number (sets both line-start and line-end)").option("--line-start <n>","Start line").option("--line-end <n>","End line").option("--quoted-content <text>","Quoted content from the file").description("Add a comment to a file").action(async(i,r)=>{try{let u={path:i,body:r.body};if(r.quotedContent)u.quotedContent=r.quotedContent;if(r.line)u.lineStart=parseInt(r.line),u.lineEnd=parseInt(r.line);if(r.lineStart)u.lineStart=parseInt(r.lineStart);if(r.lineEnd)u.lineEnd=parseInt(r.lineEnd);let
|
|
220
|
+
Or set AGENT_FS_API_URL to connect to a remote server.`),process.exit(1);throw u}}return n.command("add").argument("<path>","File path to comment on").requiredOption("--body <text>","Comment body").option("--line <n>","Line number (sets both line-start and line-end)").option("--line-start <n>","Start line").option("--line-end <n>","End line").option("--quoted-content <text>","Quoted content from the file").description("Add a comment to a file").action(async(i,r)=>{try{let u={path:i,body:r.body};if(r.quotedContent)u.quotedContent=r.quotedContent;if(r.line)u.lineStart=parseInt(r.line),u.lineEnd=parseInt(r.line);if(r.lineStart)u.lineStart=parseInt(r.lineStart);if(r.lineEnd)u.lineEnd=parseInt(r.lineEnd);let f=await o("comment-add",u);console.log(JSON.stringify(f,null,2))}catch(u){console.error(`Error: ${u.message}`),process.exit(1)}}),n.command("reply").argument("<comment-id>","Parent comment ID to reply to").requiredOption("--body <text>","Reply body").description("Reply to a comment").action(async(i,r)=>{try{let u=await o("comment-add",{parentId:i,body:r.body});console.log(JSON.stringify(u,null,2))}catch(u){console.error(`Error: ${u.message}`),process.exit(1)}}),n.command("list").argument("[path]","File path to list comments for").option("--resolved","Show resolved comments").option("--limit <n>","Max results").option("--offset <n>","Skip N results").description("List comments").action(async(i,r)=>{try{let u={};if(i)u.path=i;if(r.resolved)u.resolved=!0;if(r.limit)u.limit=parseInt(r.limit);if(r.offset)u.offset=parseInt(r.offset);let f=await o("comment-list",u);console.log(JSON.stringify(f,null,2))}catch(u){console.error(`Error: ${u.message}`),process.exit(1)}}),n.command("get").argument("<id>","Comment ID").description("Get a comment with its replies").action(async(i)=>{try{let r=await o("comment-get",{id:i});console.log(JSON.stringify(r,null,2))}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n.command("update").argument("<id>","Comment ID").requiredOption("--body <text>","New comment body").description("Update a comment").action(async(i,r)=>{try{let u=await o("comment-update",{id:i,body:r.body});console.log(JSON.stringify(u,null,2))}catch(u){console.error(`Error: ${u.message}`),process.exit(1)}}),n.command("delete").argument("<id>","Comment ID").description("Delete a comment (soft delete)").action(async(i)=>{try{let r=await o("comment-delete",{id:i});console.log(JSON.stringify(r,null,2))}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n.command("resolve").argument("<id>","Comment ID").description("Resolve a comment").action(async(i)=>{try{let r=await o("comment-resolve",{id:i,resolved:!0});console.log(JSON.stringify(r,null,2))}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n.command("reopen").argument("<id>","Comment ID").description("Reopen a resolved comment").action(async(i)=>{try{let r=await o("comment-resolve",{id:i,resolved:!1});console.log(JSON.stringify(r,null,2))}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n}import{Command as vd}from"commander";function Kf(t,e){let n=new vd("member").description("Member management (use global --drive to scope to a drive)");return n.command("list").description("List members of an org (or drive if --drive is set)").action(async()=>{let o=n.parent?.opts().json,i=n.parent?.opts().drive;try{let r=await e(),u=i?`/orgs/${r}/drives/${i}/members`:`/orgs/${r}/members`,{members:f}=await t.get(u);if(o){console.log(JSON.stringify(f,null,2));return}if(!f||f.length===0){console.log("(no members)");return}for(let l of f)console.log(`${l.email} [${l.role}]`)}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n.command("invite").argument("<email>","User email to invite").requiredOption("--role <role>","Role: viewer, editor, or admin").description("Invite a user to the current org").action(async(o,i)=>{try{let r=await e();await t.post(`/orgs/${r}/members/invite`,{email:o,role:i.role}),console.log(`Invited ${o} as ${i.role}`)}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n.command("update-role").argument("<email>","User email").requiredOption("--role <role>","New role: viewer, editor, or admin").description("Update a member's role (use global --drive for drive scope)").action(async(o,i)=>{let r=n.parent?.opts().drive;try{let u=await e(),f=await Wf(t,u,o,r);if(r)await t.patch(`/orgs/${u}/drives/${r}/members/${f}`,{role:i.role});else await t.patch(`/orgs/${u}/members/${f}`,{role:i.role});let l=r?`drive ${r}`:"org";console.log(`Updated ${o} to ${i.role} (${l})`)}catch(u){console.error(`Error: ${u.message}`),process.exit(1)}}),n.command("remove").argument("<email>","User email to remove").description("Remove a member from org (or drive only if --drive is set)").action(async(o)=>{let i=n.parent?.opts().drive;try{let r=await e(),u=await Wf(t,r,o,i);if(i)await t.del(`/orgs/${r}/drives/${i}/members/${u}`),console.log(`Removed ${o} from drive ${i}`);else await t.del(`/orgs/${r}/members/${u}`),console.log(`Removed ${o} from org`)}catch(r){console.error(`Error: ${r.message}`),process.exit(1)}}),n}async function Wf(t,e,n,o){let i=o?`/orgs/${e}/drives/${o}/members`:`/orgs/${e}/members`,{members:r}=await t.get(i),u=r.find((f)=>f.email===n);if(!u)throw Error(`Member with email ${n} not found`);return u.userId}import{Command as Sd}from"commander";var bf=`---
|
|
221
221
|
name: agent-fs
|
|
222
222
|
description: >-
|
|
223
223
|
Use when the user wants to store, retrieve, search, or manage files in agent-fs \u2014
|
|
@@ -520,9 +520,9 @@ This applies to any op that returns a \`path\` or \`to\` field (write, stat, edi
|
|
|
520
520
|
\`\`\`bash
|
|
521
521
|
agent-fs config validate
|
|
522
522
|
\`\`\`
|
|
523
|
-
`;function
|
|
523
|
+
`;function kf(){return new Sd("docs").description("Show agent-fs documentation and command reference").action(()=>{let t=bf.replace(/^---[\s\S]*?---\n*/,"");console.log(t)})}var F=new zd;F.name("agent-fs").description("Agent-first filesystem backed by S3").version(B).option("--org <orgId>","Override org context").option("--drive <driveId>","Override drive context").option("--json","Output raw JSON");var Xt=new Ko;async function nn(){let t=F.opts().org;if(t)return t;let e=v();if(e.defaultOrg)return e.defaultOrg;try{let n=await Xt.getMe();if(n.defaultOrgId)return n.defaultOrgId}catch(n){if(n?.message?.includes("Cannot connect"))console.error(n.message),process.exit(1)}console.error("Error: No org context. Use --org or run 'agent-fs auth register'"),process.exit(1)}F.addCommand(kf());cf(F,Xt,nn);F.addCommand(Ff(Xt));F.addCommand(Yf());F.addCommand(Zf());F.addCommand(Bf(Xt,nn));F.addCommand(Qf(Xt));F.addCommand(Vf());F.addCommand(xe());F.addCommand(Jf(Xt,nn));F.addCommand(Kf(Xt,nn));F.command("mcp").description("Start MCP server (stdio)").action(async()=>{await zf().then(() => cd)});F.command("server").description("Run server in foreground (dev mode)").action(async()=>{await Dl().then(() => jd)});var qd=`
|
|
524
524
|
Global Options:
|
|
525
525
|
--org <orgId> Override org context
|
|
526
526
|
--drive <driveId> Override drive context
|
|
527
527
|
--json Output raw JSON
|
|
528
|
-
`;for(let t of F.commands)t.addHelpText("after",
|
|
528
|
+
`;for(let t of F.commands)t.addHelpText("after",qd);F.parse();
|