sqlbot 0.0.1 → 0.0.11
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/(chat)/ai-providers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page.js +2 -2
- package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/connections/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/knowledge-base/page.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/knowledge-base/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(chat)/knowledge-base/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/page.js +1 -1
- package/.next/standalone/.next/server/app/(chat)/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(chat)/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/ai-providers.html +1 -1
- package/.next/standalone/.next/server/app/ai-providers.rsc +3 -3
- package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp/ai-providers/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp/ai-providers.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/ai-providers.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/ai-providers.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/ai-providers.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/chat/route.js +1 -1
- package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/health/route.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/knowledge/auto-generate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/knowledge/auto-generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/knowledge/generate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/knowledge/generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/trpc/[trpc]/route.js +3 -3
- package/.next/standalone/.next/server/app/api/trpc/[trpc]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/connections.html +1 -1
- package/.next/standalone/.next/server/app/connections.rsc +3 -3
- package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp/connections/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp/connections.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/connections.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/connections.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f49434f._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__51b79d66._.js → [root-of-the-server]__3a1fb665._.js} +6 -6
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__73947e32._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__747722f0._.js +85 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__ca89cb1f._.js +85 -0
- package/.next/standalone/.next/server/chunks/_26ec1867._.js +13 -13
- package/.next/standalone/.next/server/chunks/_430c5305._.js +13 -13
- package/.next/standalone/.next/server/chunks/_44fa1f03._.js +1 -1
- package/.next/standalone/.next/server/chunks/_75b542e9._.js +1 -1
- package/.next/standalone/.next/server/chunks/_82e2d86b._.js +11 -11
- package/.next/standalone/.next/server/chunks/_c49f2a1f._.js +13 -13
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d8a3f2e3._.js → [root-of-the-server]__1ad22765._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2534236b._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__77c3448a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__85abb029._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__d2e81be0._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_119ae296._.js +12 -12
- package/.next/standalone/.next/server/chunks/ssr/_37f7f89d._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_connections_connections-page_tsx_a8fa3df0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_knowledge-base_knowledge-base-page_tsx_10bf7f9a._.js +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +2 -2
- package/.next/{static/chunks/b90a78e2d36034ff.js → standalone/.next/static/chunks/00f68930e8af39f1.js} +1 -1
- package/.next/standalone/.next/static/chunks/3bd88f74116ecf0b.js +1 -0
- package/.next/standalone/.next/static/chunks/89e492a83a4b53e3.js +1 -0
- package/.next/standalone/.next/static/chunks/{842e82429bd01d96.js → a3a8f6ede99c1c63.js} +1 -1
- package/.next/standalone/README.md +1 -1
- package/.next/standalone/package.json +1 -1
- package/.next/{standalone/.next/static/chunks/b90a78e2d36034ff.js → static/chunks/00f68930e8af39f1.js} +1 -1
- package/.next/static/chunks/3bd88f74116ecf0b.js +1 -0
- package/.next/static/chunks/89e492a83a4b53e3.js +1 -0
- package/.next/static/chunks/{842e82429bd01d96.js → a3a8f6ede99c1c63.js} +1 -1
- package/README.md +1 -1
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__26852352._.js +0 -85
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__5dc46bc4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__8992d6da._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__e474c328._.js +0 -85
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e727499._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4451526a._.js +0 -3
- package/.next/standalone/.next/static/chunks/000ce5d236847e14.js +0 -1
- package/.next/standalone/.next/static/chunks/7c8dab1a077d98e9.js +0 -1
- package/.next/static/chunks/000ce5d236847e14.js +0 -1
- package/.next/static/chunks/7c8dab1a077d98e9.js +0 -1
- /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_ssgManifest.js +0 -0
- /package/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_buildManifest.js +0 -0
- /package/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module.exports=[484199,(e,t,n)=>{"use strict";var a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i={},c={VercelOidcTokenError:()=>u};for(var l in c)a(i,l,{get:c[l],enumerable:!0});t.exports=((e,t,n,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of s(t))r.call(e,n)||void 0===n||a(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e})(a({},"__esModule",{value:!0}),i);class u extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},814747,(e,t,n)=>{t.exports=e.x("path",()=>require("path"))},522734,(e,t,n)=>{t.exports=e.x("fs",()=>require("fs"))},446786,(e,t,n)=>{t.exports=e.x("os",()=>require("os"))},666680,(e,t,n)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},875398,e=>{"use strict";var t=e.i(666680);let n=new Uint8Array(256),a=n.length;function o(){return a>n.length-16&&((0,t.randomFillSync)(n),a=0),n.slice(a,a+=16)}let s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));let r={};function i(e,t,n,a,o=0){if(e.length<16)throw Error("Random bytes length must be >= 16");if(a){if(o<0||o+16>a.length)throw RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`)}else a=new Uint8Array(16),o=0;return t??=Date.now(),n??=127*e[6]<<24|e[7]<<16|e[8]<<8|e[9],a[o++]=t/0x10000000000&255,a[o++]=t/0x100000000&255,a[o++]=t/0x1000000&255,a[o++]=t/65536&255,a[o++]=t/256&255,a[o++]=255&t,a[o++]=112|n>>>28&15,a[o++]=n>>>20&255,a[o++]=128|n>>>14&63,a[o++]=n>>>6&255,a[o++]=n<<2&255|3&e[10],a[o++]=e[11],a[o++]=e[12],a[o++]=e[13],a[o++]=e[14],a[o++]=e[15],a}e.s(["v7",0,function(e,t,n){let a;if(e)a=i(e.random??e.rng?.()??o(),e.msecs,e.seq,t,n);else{var c,l,u;let e=Date.now(),s=o();c=r,l=e,u=s,c.msecs??=-1/0,c.seq??=0,l>c.msecs?(c.seq=u[6]<<23|u[7]<<16|u[8]<<8|u[9],c.msecs=l):(c.seq=c.seq+1|0,0===c.seq&&c.msecs++),a=i(s,r.msecs,r.seq,t,n)}return t??function(e,t=0){return(s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]).toLowerCase()}(a)}],875398)},316733,e=>{"use strict";var t=e.i(814747),n=e.i(446786);function a(){let e=(0,n.homedir)();return(0,t.join)(e,".sqlbot")}function o(){return(0,t.join)(a(),"sqlbot.db")}function s(){return(0,t.join)(a(),"ai-providers.json")}function r(){return(0,t.join)(a(),"config.json")}function i(){return(0,t.join)(a(),"csv-dbs")}function c(e){let t=(0,n.homedir)();return e.startsWith(t)?e.replace(t,"~"):e}e.s(["getConfigDir",()=>a,"getConfigFilePath",()=>r,"getCsvDbsDir",()=>i,"getDbPath",()=>o,"getDisplayPath",()=>c,"getProvidersFilePath",()=>s])},230056,e=>e.a(async(t,n)=>{try{let t=await e.y("pg");e.n(t),n()}catch(e){n(e)}},!0),600177,e=>{"use strict";var t=e.i(522734),n=e.i(814747),a=e.i(875398),o=e.i(316733);let s=(0,o.getConfigDir)(),r=(0,o.getConfigFilePath)();function i(){(0,t.mkdirSync)(s,{recursive:!0})}function c(){if(i(),!(0,t.existsSync)(r)){let e={connections:[],activeConnectionId:null};return(0,t.writeFileSync)(r,JSON.stringify(e,null,2)),e}try{let e=(0,t.readFileSync)(r,"utf-8");return JSON.parse(e)}catch{let e={connections:[],activeConnectionId:null};return(0,t.writeFileSync)(r,JSON.stringify(e,null,2)),e}}function l(e){i(),(0,t.writeFileSync)(r,JSON.stringify(e,null,2))}function u(){return c().connections}function m(e){return c().connections.find(t=>t.id===e)}function h(){let e=c();return e.activeConnectionId?e.connections.find(t=>t.id===e.activeConnectionId)??null:null}function d(){return c().activeConnectionId}function f(e){let t=c(),n=new Date().toISOString(),o={...e,id:(0,a.v7)(),createdAt:n,updatedAt:n};return t.connections.push(o),1===t.connections.length&&(t.activeConnectionId=o.id),l(t),o}function p(e,t){let n=c(),a=n.connections.findIndex(t=>t.id===e);return -1===a?null:(n.connections[a]={...n.connections[a],...t,updatedAt:new Date().toISOString()},l(n),n.connections[a])}function g(e){let t=c(),n=t.connections.findIndex(t=>t.id===e);return -1!==n&&(t.connections.splice(n,1),t.activeConnectionId===e&&(t.activeConnectionId=t.connections.length>0?t.connections[0].id:null),l(t),!0)}function b(e){let t=c();return!!t.connections.find(t=>t.id===e)&&(t.activeConnectionId=e,l(t),!0)}function y(e){return(0,n.join)((0,o.getCsvDbsDir)(),`${e}.db`)}function w(e,t){let n=c(),a=n.connections.findIndex(t=>t.id===e);return -1===a?null:(n.connections[a]={...n.connections[a],csvFiles:t,updatedAt:new Date().toISOString()},l(n),n.connections[a])}e.s(["addConnection",()=>f,"deleteConnection",()=>g,"getActiveConnection",()=>h,"getActiveConnectionId",()=>d,"getConnection",()=>m,"getConnections",()=>u,"getCsvDbPath",()=>y,"setActiveConnection",()=>b,"updateConnection",()=>p,"updateCsvFiles",()=>w])},393207,(e,t,n)=>{t.exports=e.x("@libsql/client",()=>require("@libsql/client"))},381165,e=>e.a(async(t,n)=>{try{var a=e.i(230056),o=e.i(600177),s=e.i(522734),r=t([a]);[a]=r.then?(await r)():r;let f=new Map;async function i(t){let n=(await e.A(959021)).createPool({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,connectionLimit:5,waitForConnections:!0});return{warehouse:{async execute(e){let[t,a]=await n.execute(e);return{rows:t,fields:(a||[]).map(e=>({name:e.name,dataTypeID:e.columnType}))}}},cleanup:async()=>{await n.end()}}}async function c(t){let n,s;if(!(n=t?(0,o.getConnection)(t):(0,o.getActiveConnection)()))throw Error("No database connection configured. Please add a connection in the Connections page.");let r="sqlite"===n.type||"csv"===n.type?`${n.type}:${n.filePath||n.database||n.id}`:`${n.type}:${n.host}:${n.port}:${n.user}:${n.database}:${n.ssl}:${n.password}`,c=f.get(n.id);if(c&&c.connectionHash===r)return c.lastUsed=Date.now(),{db:c.warehouse,connection:n};if(c){try{await c.cleanup()}catch{}f.delete(n.id)}if("mysql"===n.type)s=await i(n);else if("sqlite"===n.type||"csv"===n.type)s=function(t){let n="csv"===t.type?(0,o.getCsvDbPath)(t.id):t.filePath||t.database;if(!n)throw Error("No database file path specified for SQLite connection.");let a=null;return{warehouse:{async execute(t){let o=(()=>{if(!a){let{createClient:t}=e.r(393207);a=t({url:`file:${n}`})}return a})(),s=await o.execute(t);return{rows:s.rows.map(e=>{let t={};for(let n of s.columns)t[n]=e[n];return t}),fields:s.columns.map(e=>({name:e}))}}},cleanup:async()=>{a&&(a.close?.(),a=null)}}}(n);else{let e;e=new a.Pool({host:n.host,port:n.port,user:n.user,password:n.password,database:n.database,ssl:n.ssl?{rejectUnauthorized:!1}:void 0,max:5,idleTimeoutMillis:3e5}),s={warehouse:{async execute(t){let n=await e.query(t);return{rows:n.rows,fields:n.fields.map(e=>({name:e.name,dataTypeID:e.dataTypeID}))}}},cleanup:async()=>{await e.end()}}}return f.set(n.id,{warehouse:s.warehouse,cleanup:s.cleanup,connectionHash:r,lastUsed:Date.now()}),{db:s.warehouse,connection:n}}async function l(t){let n=Date.now();try{if("sqlite"===t.type){let n=t.filePath||t.database;if(!n)throw Error("No file path specified");if(!(0,s.existsSync)(n))throw Error(`File not found: ${n}`);let{createClient:a}=e.r(393207),o=a({url:`file:${n}`});await o.execute("SELECT 1"),o.close()}else if("csv"===t.type){let n=t.id?(0,o.getCsvDbPath)(t.id):null;if(n&&(0,s.existsSync)(n)){let{createClient:t}=e.r(393207),a=t({url:`file:${n}`});await a.execute("SELECT 1"),a.close()}}else if("mysql"===t.type){let n=await e.A(959021),a=await n.createConnection({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,connectTimeout:1e4});await a.execute("SELECT 1"),await a.end()}else{let e=new a.Pool({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,max:1,connectionTimeoutMillis:1e4}),n=await e.connect();await n.query("SELECT 1"),n.release(),await e.end()}return{success:!0,latencyMs:Date.now()-n}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e),latencyMs:Date.now()-n}}}function u(e){switch(e){case"redshift":return"Amazon Redshift SQL";case"postgresql":return"PostgreSQL";case"mysql":return"MySQL";case"sqlite":case"csv":return"SQLite"}}async function m(t,n,a){let s=(0,o.getCsvDbPath)(t),{mkdirSync:r}=e.r(522734),{dirname:i}=e.r(814747);r(i(s),{recursive:!0});let{createClient:c}=e.r(393207),l=c({url:`file:${s}`});try{let e=function(e){let t=[],n=[],a="",o=!1,s=0;for(;s<e.length;){let r=e[s];o?'"'===r?s+1<e.length&&'"'===e[s+1]?(a+='"',s+=2):(o=!1,s++):(a+=r,s++):'"'===r?(o=!0,s++):","===r?(n.push(a.trim()),a="",s++):"\r"===r||"\n"===r?(n.push(a.trim()),a="",n.some(e=>""!==e)&&t.push(n),n=[],"\r"===r&&s+1<e.length&&"\n"===e[s+1]?s+=2:s++):(a+=r,s++)}return(a||n.length>0)&&(n.push(a.trim()),n.some(e=>""!==e)&&t.push(n)),t}(n);if(e.length<2)throw Error("CSV must have a header row and at least one data row");let t=e[0],o=e.slice(1),s=d(a),r=t.map(d);await l.execute(`DROP TABLE IF EXISTS "${s}"`);let i=r.map((e,t)=>{var n;let a=(n=o.slice(0,20).map(e=>e[t]).filter(Boolean),0===n.length?"TEXT":n.every(e=>/^-?\d+$/.test(e))?"INTEGER":n.every(e=>/^-?\d+(\.\d+)?$/.test(e))?"REAL":"TEXT");return`"${e}" ${a}`});await l.execute(`CREATE TABLE "${s}" (${i.join(", ")})`);let c=0;for(let e=0;e<o.length;e+=500){let t=o.slice(e,e+500),n=t.map(()=>`(${r.map(()=>"?").join(", ")})`).join(", "),a=t.flatMap(e=>r.map((t,n)=>{let a=e[n];return null==a||""===a?null:a}));await l.execute({sql:`INSERT INTO "${s}" (${r.map(e=>`"${e}"`).join(", ")}) VALUES ${n}`,args:a}),c+=t.length}return l.close(),{rowCount:c,columns:r}}catch(e){throw l.close(),e}}async function h(t,n){let a=(0,o.getCsvDbPath)(t);if(!(0,s.existsSync)(a))return;let{createClient:r}=e.r(393207),i=r({url:`file:${a}`});await i.execute(`DROP TABLE IF EXISTS "${d(n)}"`),i.close()}function d(e){return e.replace(/[^\w\s]/g,"").replace(/\s+/g,"_").replace(/^(\d)/,"_$1").toLowerCase().slice(0,64)||"column"}e.s(["getDbDialect",()=>u,"getWarehouseDB",()=>c,"importCsvToSqlite",()=>m,"removeCsvTable",()=>h,"testConnection",()=>l]),n()}catch(e){n(e)}},!1),452886,e=>e.a(async(t,n)=>{try{var a=e.i(712075),o=e.i(469719),s=e.i(608056),r=e.i(381165),i=t([r]);async function c(e,t,n){let i=n||(()=>{}),{db:c,connection:u}=await (0,r.getWarehouseDB)(e),m=u.type,h=(0,r.getDbDialect)(m);i({type:"connecting",connectionName:u.name});let d=(await c.execute(function(e){switch(e){case"postgresql":case"redshift":return`
|
|
2
|
+
SELECT table_schema, table_name
|
|
3
|
+
FROM information_schema.tables
|
|
4
|
+
WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
|
|
5
|
+
AND table_type = 'BASE TABLE'
|
|
6
|
+
ORDER BY table_schema, table_name
|
|
7
|
+
LIMIT 50
|
|
8
|
+
`;case"mysql":return`
|
|
9
|
+
SELECT table_schema, table_name
|
|
10
|
+
FROM information_schema.tables
|
|
11
|
+
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
|
|
12
|
+
AND table_type = 'BASE TABLE'
|
|
13
|
+
ORDER BY table_schema, table_name
|
|
14
|
+
LIMIT 50
|
|
15
|
+
`;case"sqlite":case"csv":return`
|
|
16
|
+
SELECT name AS table_name
|
|
17
|
+
FROM sqlite_master
|
|
18
|
+
WHERE type = 'table'
|
|
19
|
+
AND name NOT LIKE 'sqlite_%'
|
|
20
|
+
ORDER BY name
|
|
21
|
+
LIMIT 50
|
|
22
|
+
`;default:return"SELECT 1"}}(m))).rows.map(e=>({name:e.table_name||e.name,schema:e.table_schema}));if(0===d.length)return i({type:"no_tables"}),{entries:[],tablesExplored:0,connectionName:u.name};i({type:"tables_found",totalTables:d.length});let f=[];for(let e=0;e<d.length;e++){let t=d[e],n=t.schema?`${t.schema}.${t.name}`:t.name;i({type:"exploring_table",table:n,current:e+1,total:d.length});try{let a=await c.execute(function(e,t,n){switch(e){case"postgresql":case"redshift":return`
|
|
23
|
+
SELECT column_name, data_type, is_nullable, column_default,
|
|
24
|
+
character_maximum_length, numeric_precision
|
|
25
|
+
FROM information_schema.columns
|
|
26
|
+
WHERE table_name = '${t}'
|
|
27
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
28
|
+
ORDER BY ordinal_position
|
|
29
|
+
`;case"mysql":return`
|
|
30
|
+
SELECT column_name, data_type, is_nullable, column_default,
|
|
31
|
+
character_maximum_length, numeric_precision, column_key, extra
|
|
32
|
+
FROM information_schema.columns
|
|
33
|
+
WHERE table_name = '${t}'
|
|
34
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
35
|
+
ORDER BY ordinal_position
|
|
36
|
+
`;case"sqlite":case"csv":return`PRAGMA table_info("${t}")`;default:return"SELECT 1"}}(m,t.name,t.schema)),o=[],s=function(e,t,n){switch(e){case"postgresql":case"redshift":return`
|
|
37
|
+
SELECT
|
|
38
|
+
kcu.column_name,
|
|
39
|
+
ccu.table_schema AS foreign_table_schema,
|
|
40
|
+
ccu.table_name AS foreign_table_name,
|
|
41
|
+
ccu.column_name AS foreign_column_name
|
|
42
|
+
FROM information_schema.table_constraints tc
|
|
43
|
+
JOIN information_schema.key_column_usage kcu
|
|
44
|
+
ON tc.constraint_name = kcu.constraint_name
|
|
45
|
+
JOIN information_schema.constraint_column_usage ccu
|
|
46
|
+
ON ccu.constraint_name = tc.constraint_name
|
|
47
|
+
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
48
|
+
AND tc.table_name = '${t}'
|
|
49
|
+
${n?`AND tc.table_schema = '${n}'`:""}
|
|
50
|
+
`;case"mysql":return`
|
|
51
|
+
SELECT
|
|
52
|
+
column_name,
|
|
53
|
+
referenced_table_schema AS foreign_table_schema,
|
|
54
|
+
referenced_table_name AS foreign_table_name,
|
|
55
|
+
referenced_column_name AS foreign_column_name
|
|
56
|
+
FROM information_schema.key_column_usage
|
|
57
|
+
WHERE table_name = '${t}'
|
|
58
|
+
AND referenced_table_name IS NOT NULL
|
|
59
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
60
|
+
`;case"sqlite":case"csv":return`PRAGMA foreign_key_list("${t}")`;default:return null}}(m,t.name,t.schema);if(s)try{o=(await c.execute(s)).rows}catch{}let r=[];try{r=(await c.execute(function(e,t,n){let a=n&&"sqlite"!==e&&"csv"!==e?`"${n}"."${t}"`:`"${t}"`;return`SELECT * FROM ${a} LIMIT 3`}(m,t.name,t.schema))).rows.slice(0,3)}catch{}let l=0;try{let e=await c.execute(function(e,t,n){let a=n&&"sqlite"!==e&&"csv"!==e?`"${n}"."${t}"`:`"${t}"`;return`SELECT COUNT(*) AS row_count FROM ${a}`}(m,t.name,t.schema));l=Number(e.rows[0]?.row_count||0)}catch{}f.push({name:t.name,schema:t.schema,fullName:n,columns:a.rows,foreignKeys:o,sampleRows:r,rowCount:l}),i({type:"table_done",table:n,current:e+1,total:d.length,columnCount:a.rows.length,rowCount:l})}catch(t){console.error(`Failed to explore table ${n}:`,t),i({type:"table_error",table:n,current:e+1,total:d.length})}}if(0===f.length)return{entries:[],tablesExplored:0,connectionName:u.name};let p=f.map(e=>{let t=e.columns.map(e=>{let t=e.column_name||e.name||"unknown",n=e.data_type||e.type||"unknown",a="YES"===e.is_nullable||0===e.notnull?"nullable":"not null",o=1===e.pk?" PRIMARY KEY":"",s=e.column_key?` (${e.column_key})`:"";return` ${t} ${n} ${a}${o}${s}`}).join("\n"),n=e.foreignKeys.length>0?` Foreign Keys:
|
|
61
|
+
${e.foreignKeys.map(e=>` ${e.column_name||e.from} → ${e.foreign_table_name||e.table}.${e.foreign_column_name||e.to}`).join("\n")}`:"",a=e.sampleRows.length>0?` Sample Data (${e.rowCount} total rows):
|
|
62
|
+
${JSON.stringify(e.sampleRows,null,2).split("\n").map(e=>` ${e}`).join("\n")}`:` (${e.rowCount} rows, no sample available)`;return`TABLE: ${e.fullName}
|
|
63
|
+
Columns:
|
|
64
|
+
${t}
|
|
65
|
+
${n}
|
|
66
|
+
${a}`}).join("\n\n---\n\n");i({type:"generating",tablesExplored:f.length});let g=(0,s.getModel)(t||"google-gemini-2.0-flash-001"),b=o.z.object({entries:o.z.array(o.z.object({title:o.z.string().describe("A concise title"),content:o.z.string().describe("Detailed knowledge for AI SQL queries")}))}),y=[];if(p.length<=15e3)i({type:"generating_batch",batch:1,totalBatches:1}),y=(await (0,a.generateObject)({model:g,schema:b,prompt:l(h,u.name,p)})).object.entries,i({type:"batch_done",batch:1,totalBatches:1,entriesFound:y.length});else{let e=[],t="";for(let n of f){let a=p.split("---").find(e=>e.includes(`TABLE: ${n.fullName}`))?.trim()||"";t.length+a.length>15e3?(t&&e.push(t),t=a):t+=(t?"\n\n---\n\n":"")+a}t&&e.push(t);for(let t=0;t<e.length;t++){i({type:"generating_batch",batch:t+1,totalBatches:e.length});let n=await (0,a.generateObject)({model:g,schema:b,prompt:l(h,u.name,e[t])});y.push(...n.object.entries),i({type:"batch_done",batch:t+1,totalBatches:e.length,entriesFound:n.object.entries.length,totalEntries:y.length})}}return{entries:y,tablesExplored:f.length,connectionName:u.name}}function l(e,t,n){return`You are a database knowledge extraction agent. Analyze the following ${e} database schema for connection "${t}" and generate comprehensive knowledge base entries.
|
|
67
|
+
|
|
68
|
+
Your goal: create knowledge entries that would help an AI assistant write better SQL queries against this database.
|
|
69
|
+
|
|
70
|
+
For each entry, focus on:
|
|
71
|
+
1. **Table purposes** — What each table is for, what entity it represents
|
|
72
|
+
2. **Column meanings** — Non-obvious column names, what values mean
|
|
73
|
+
3. **Relationships** — How tables relate to each other (foreign keys, join patterns)
|
|
74
|
+
4. **Data patterns** — Enum values observed in sample data, status codes, date formats
|
|
75
|
+
5. **Business rules** — Any business logic implied by the schema (e.g. soft deletes, computed fields)
|
|
76
|
+
6. **Naming conventions** — Schema-wide patterns in naming
|
|
77
|
+
7. **Important notes** — Anything an AI should know to avoid common mistakes
|
|
78
|
+
|
|
79
|
+
Create at least one entry per table and additional entries for cross-cutting concerns.
|
|
80
|
+
Each entry should be self-contained and useful on its own.
|
|
81
|
+
|
|
82
|
+
Database Schema:
|
|
83
|
+
${n}`}[r]=i.then?(await i)():i,e.s(["exploreDatabase",()=>c]),n()}catch(e){n(e)}},!1)];
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__747722f0._.js.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module.exports=[484199,(e,t,n)=>{"use strict";var a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i={},c={VercelOidcTokenError:()=>u};for(var l in c)a(i,l,{get:c[l],enumerable:!0});t.exports=((e,t,n,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of s(t))r.call(e,n)||void 0===n||a(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e})(a({},"__esModule",{value:!0}),i);class u extends Error{constructor(e,t){super(e),this.name="VercelOidcTokenError",this.cause=t}toString(){return this.cause?`${this.name}: ${this.message}: ${this.cause}`:`${this.name}: ${this.message}`}}},316733,e=>{"use strict";var t=e.i(814747),n=e.i(446786);function a(){let e=(0,n.homedir)();return(0,t.join)(e,".sqlbot")}function o(){return(0,t.join)(a(),"sqlbot.db")}function s(){return(0,t.join)(a(),"ai-providers.json")}function r(){return(0,t.join)(a(),"config.json")}function i(){return(0,t.join)(a(),"csv-dbs")}function c(e){let t=(0,n.homedir)();return e.startsWith(t)?e.replace(t,"~"):e}e.s(["getConfigDir",()=>a,"getConfigFilePath",()=>r,"getCsvDbsDir",()=>i,"getDbPath",()=>o,"getDisplayPath",()=>c,"getProvidersFilePath",()=>s])},875398,e=>{"use strict";var t=e.i(666680);let n=new Uint8Array(256),a=n.length;function o(){return a>n.length-16&&((0,t.randomFillSync)(n),a=0),n.slice(a,a+=16)}let s=[];for(let e=0;e<256;++e)s.push((e+256).toString(16).slice(1));let r={};function i(e,t,n,a,o=0){if(e.length<16)throw Error("Random bytes length must be >= 16");if(a){if(o<0||o+16>a.length)throw RangeError(`UUID byte range ${o}:${o+15} is out of buffer bounds`)}else a=new Uint8Array(16),o=0;return t??=Date.now(),n??=127*e[6]<<24|e[7]<<16|e[8]<<8|e[9],a[o++]=t/0x10000000000&255,a[o++]=t/0x100000000&255,a[o++]=t/0x1000000&255,a[o++]=t/65536&255,a[o++]=t/256&255,a[o++]=255&t,a[o++]=112|n>>>28&15,a[o++]=n>>>20&255,a[o++]=128|n>>>14&63,a[o++]=n>>>6&255,a[o++]=n<<2&255|3&e[10],a[o++]=e[11],a[o++]=e[12],a[o++]=e[13],a[o++]=e[14],a[o++]=e[15],a}e.s(["v7",0,function(e,t,n){let a;if(e)a=i(e.random??e.rng?.()??o(),e.msecs,e.seq,t,n);else{var c,l,u;let e=Date.now(),s=o();c=r,l=e,u=s,c.msecs??=-1/0,c.seq??=0,l>c.msecs?(c.seq=u[6]<<23|u[7]<<16|u[8]<<8|u[9],c.msecs=l):(c.seq=c.seq+1|0,0===c.seq&&c.msecs++),a=i(s,r.msecs,r.seq,t,n)}return t??function(e,t=0){return(s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]).toLowerCase()}(a)}],875398)},230056,e=>e.a(async(t,n)=>{try{let t=await e.y("pg");e.n(t),n()}catch(e){n(e)}},!0),600177,e=>{"use strict";var t=e.i(522734),n=e.i(814747),a=e.i(875398),o=e.i(316733);let s=(0,o.getConfigDir)(),r=(0,o.getConfigFilePath)();function i(){(0,t.mkdirSync)(s,{recursive:!0})}function c(){if(i(),!(0,t.existsSync)(r)){let e={connections:[],activeConnectionId:null};return(0,t.writeFileSync)(r,JSON.stringify(e,null,2)),e}try{let e=(0,t.readFileSync)(r,"utf-8");return JSON.parse(e)}catch{let e={connections:[],activeConnectionId:null};return(0,t.writeFileSync)(r,JSON.stringify(e,null,2)),e}}function l(e){i(),(0,t.writeFileSync)(r,JSON.stringify(e,null,2))}function u(){return c().connections}function m(e){return c().connections.find(t=>t.id===e)}function h(){let e=c();return e.activeConnectionId?e.connections.find(t=>t.id===e.activeConnectionId)??null:null}function d(){return c().activeConnectionId}function f(e){let t=c(),n=new Date().toISOString(),o={...e,id:(0,a.v7)(),createdAt:n,updatedAt:n};return t.connections.push(o),1===t.connections.length&&(t.activeConnectionId=o.id),l(t),o}function p(e,t){let n=c(),a=n.connections.findIndex(t=>t.id===e);return -1===a?null:(n.connections[a]={...n.connections[a],...t,updatedAt:new Date().toISOString()},l(n),n.connections[a])}function g(e){let t=c(),n=t.connections.findIndex(t=>t.id===e);return -1!==n&&(t.connections.splice(n,1),t.activeConnectionId===e&&(t.activeConnectionId=t.connections.length>0?t.connections[0].id:null),l(t),!0)}function b(e){let t=c();return!!t.connections.find(t=>t.id===e)&&(t.activeConnectionId=e,l(t),!0)}function w(e){return(0,n.join)((0,o.getCsvDbsDir)(),`${e}.db`)}function y(e,t){let n=c(),a=n.connections.findIndex(t=>t.id===e);return -1===a?null:(n.connections[a]={...n.connections[a],csvFiles:t,updatedAt:new Date().toISOString()},l(n),n.connections[a])}e.s(["addConnection",()=>f,"deleteConnection",()=>g,"getActiveConnection",()=>h,"getActiveConnectionId",()=>d,"getConnection",()=>m,"getConnections",()=>u,"getCsvDbPath",()=>w,"setActiveConnection",()=>b,"updateConnection",()=>p,"updateCsvFiles",()=>y])},393207,(e,t,n)=>{t.exports=e.x("@libsql/client",()=>require("@libsql/client"))},381165,e=>e.a(async(t,n)=>{try{var a=e.i(230056),o=e.i(600177),s=e.i(522734),r=t([a]);[a]=r.then?(await r)():r;let f=new Map;async function i(t){let n=(await e.A(959021)).createPool({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,connectionLimit:5,waitForConnections:!0});return{warehouse:{async execute(e){let[t,a]=await n.execute(e);return{rows:t,fields:(a||[]).map(e=>({name:e.name,dataTypeID:e.columnType}))}}},cleanup:async()=>{await n.end()}}}async function c(t){let n,s;if(!(n=t?(0,o.getConnection)(t):(0,o.getActiveConnection)()))throw Error("No database connection configured. Please add a connection in the Connections page.");let r="sqlite"===n.type||"csv"===n.type?`${n.type}:${n.filePath||n.database||n.id}`:`${n.type}:${n.host}:${n.port}:${n.user}:${n.database}:${n.ssl}:${n.password}`,c=f.get(n.id);if(c&&c.connectionHash===r)return c.lastUsed=Date.now(),{db:c.warehouse,connection:n};if(c){try{await c.cleanup()}catch{}f.delete(n.id)}if("mysql"===n.type)s=await i(n);else if("sqlite"===n.type||"csv"===n.type)s=function(t){let n="csv"===t.type?(0,o.getCsvDbPath)(t.id):t.filePath||t.database;if(!n)throw Error("No database file path specified for SQLite connection.");let a=null;return{warehouse:{async execute(t){let o=(()=>{if(!a){let{createClient:t}=e.r(393207);a=t({url:`file:${n}`})}return a})(),s=await o.execute(t);return{rows:s.rows.map(e=>{let t={};for(let n of s.columns)t[n]=e[n];return t}),fields:s.columns.map(e=>({name:e}))}}},cleanup:async()=>{a&&(a.close?.(),a=null)}}}(n);else{let e;e=new a.Pool({host:n.host,port:n.port,user:n.user,password:n.password,database:n.database,ssl:n.ssl?{rejectUnauthorized:!1}:void 0,max:5,idleTimeoutMillis:3e5}),s={warehouse:{async execute(t){let n=await e.query(t);return{rows:n.rows,fields:n.fields.map(e=>({name:e.name,dataTypeID:e.dataTypeID}))}}},cleanup:async()=>{await e.end()}}}return f.set(n.id,{warehouse:s.warehouse,cleanup:s.cleanup,connectionHash:r,lastUsed:Date.now()}),{db:s.warehouse,connection:n}}async function l(t){let n=Date.now();try{if("sqlite"===t.type){let n=t.filePath||t.database;if(!n)throw Error("No file path specified");if(!(0,s.existsSync)(n))throw Error(`File not found: ${n}`);let{createClient:a}=e.r(393207),o=a({url:`file:${n}`});await o.execute("SELECT 1"),o.close()}else if("csv"===t.type){let n=t.id?(0,o.getCsvDbPath)(t.id):null;if(n&&(0,s.existsSync)(n)){let{createClient:t}=e.r(393207),a=t({url:`file:${n}`});await a.execute("SELECT 1"),a.close()}}else if("mysql"===t.type){let n=await e.A(959021),a=await n.createConnection({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,connectTimeout:1e4});await a.execute("SELECT 1"),await a.end()}else{let e=new a.Pool({host:t.host,port:t.port,user:t.user,password:t.password,database:t.database,ssl:t.ssl?{rejectUnauthorized:!1}:void 0,max:1,connectionTimeoutMillis:1e4}),n=await e.connect();await n.query("SELECT 1"),n.release(),await e.end()}return{success:!0,latencyMs:Date.now()-n}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e),latencyMs:Date.now()-n}}}function u(e){switch(e){case"redshift":return"Amazon Redshift SQL";case"postgresql":return"PostgreSQL";case"mysql":return"MySQL";case"sqlite":case"csv":return"SQLite"}}async function m(t,n,a){let s=(0,o.getCsvDbPath)(t),{mkdirSync:r}=e.r(522734),{dirname:i}=e.r(814747);r(i(s),{recursive:!0});let{createClient:c}=e.r(393207),l=c({url:`file:${s}`});try{let e=function(e){let t=[],n=[],a="",o=!1,s=0;for(;s<e.length;){let r=e[s];o?'"'===r?s+1<e.length&&'"'===e[s+1]?(a+='"',s+=2):(o=!1,s++):(a+=r,s++):'"'===r?(o=!0,s++):","===r?(n.push(a.trim()),a="",s++):"\r"===r||"\n"===r?(n.push(a.trim()),a="",n.some(e=>""!==e)&&t.push(n),n=[],"\r"===r&&s+1<e.length&&"\n"===e[s+1]?s+=2:s++):(a+=r,s++)}return(a||n.length>0)&&(n.push(a.trim()),n.some(e=>""!==e)&&t.push(n)),t}(n);if(e.length<2)throw Error("CSV must have a header row and at least one data row");let t=e[0],o=e.slice(1),s=d(a),r=t.map(d);await l.execute(`DROP TABLE IF EXISTS "${s}"`);let i=r.map((e,t)=>{var n;let a=(n=o.slice(0,20).map(e=>e[t]).filter(Boolean),0===n.length?"TEXT":n.every(e=>/^-?\d+$/.test(e))?"INTEGER":n.every(e=>/^-?\d+(\.\d+)?$/.test(e))?"REAL":"TEXT");return`"${e}" ${a}`});await l.execute(`CREATE TABLE "${s}" (${i.join(", ")})`);let c=0;for(let e=0;e<o.length;e+=500){let t=o.slice(e,e+500),n=t.map(()=>`(${r.map(()=>"?").join(", ")})`).join(", "),a=t.flatMap(e=>r.map((t,n)=>{let a=e[n];return null==a||""===a?null:a}));await l.execute({sql:`INSERT INTO "${s}" (${r.map(e=>`"${e}"`).join(", ")}) VALUES ${n}`,args:a}),c+=t.length}return l.close(),{rowCount:c,columns:r}}catch(e){throw l.close(),e}}async function h(t,n){let a=(0,o.getCsvDbPath)(t);if(!(0,s.existsSync)(a))return;let{createClient:r}=e.r(393207),i=r({url:`file:${a}`});await i.execute(`DROP TABLE IF EXISTS "${d(n)}"`),i.close()}function d(e){return e.replace(/[^\w\s]/g,"").replace(/\s+/g,"_").replace(/^(\d)/,"_$1").toLowerCase().slice(0,64)||"column"}e.s(["getDbDialect",()=>u,"getWarehouseDB",()=>c,"importCsvToSqlite",()=>m,"removeCsvTable",()=>h,"testConnection",()=>l]),n()}catch(e){n(e)}},!1),452886,e=>e.a(async(t,n)=>{try{var a=e.i(712075),o=e.i(469719),s=e.i(608056),r=e.i(381165),i=t([r]);async function c(e,t,n){let i=n||(()=>{}),{db:c,connection:u}=await (0,r.getWarehouseDB)(e),m=u.type,h=(0,r.getDbDialect)(m);i({type:"connecting",connectionName:u.name});let d=(await c.execute(function(e){switch(e){case"postgresql":case"redshift":return`
|
|
2
|
+
SELECT table_schema, table_name
|
|
3
|
+
FROM information_schema.tables
|
|
4
|
+
WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
|
|
5
|
+
AND table_type = 'BASE TABLE'
|
|
6
|
+
ORDER BY table_schema, table_name
|
|
7
|
+
LIMIT 50
|
|
8
|
+
`;case"mysql":return`
|
|
9
|
+
SELECT table_schema, table_name
|
|
10
|
+
FROM information_schema.tables
|
|
11
|
+
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
|
|
12
|
+
AND table_type = 'BASE TABLE'
|
|
13
|
+
ORDER BY table_schema, table_name
|
|
14
|
+
LIMIT 50
|
|
15
|
+
`;case"sqlite":case"csv":return`
|
|
16
|
+
SELECT name AS table_name
|
|
17
|
+
FROM sqlite_master
|
|
18
|
+
WHERE type = 'table'
|
|
19
|
+
AND name NOT LIKE 'sqlite_%'
|
|
20
|
+
ORDER BY name
|
|
21
|
+
LIMIT 50
|
|
22
|
+
`;default:return"SELECT 1"}}(m))).rows.map(e=>({name:e.table_name||e.name,schema:e.table_schema}));if(0===d.length)return i({type:"no_tables"}),{entries:[],tablesExplored:0,connectionName:u.name};i({type:"tables_found",totalTables:d.length});let f=[];for(let e=0;e<d.length;e++){let t=d[e],n=t.schema?`${t.schema}.${t.name}`:t.name;i({type:"exploring_table",table:n,current:e+1,total:d.length});try{let a=await c.execute(function(e,t,n){switch(e){case"postgresql":case"redshift":return`
|
|
23
|
+
SELECT column_name, data_type, is_nullable, column_default,
|
|
24
|
+
character_maximum_length, numeric_precision
|
|
25
|
+
FROM information_schema.columns
|
|
26
|
+
WHERE table_name = '${t}'
|
|
27
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
28
|
+
ORDER BY ordinal_position
|
|
29
|
+
`;case"mysql":return`
|
|
30
|
+
SELECT column_name, data_type, is_nullable, column_default,
|
|
31
|
+
character_maximum_length, numeric_precision, column_key, extra
|
|
32
|
+
FROM information_schema.columns
|
|
33
|
+
WHERE table_name = '${t}'
|
|
34
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
35
|
+
ORDER BY ordinal_position
|
|
36
|
+
`;case"sqlite":case"csv":return`PRAGMA table_info("${t}")`;default:return"SELECT 1"}}(m,t.name,t.schema)),o=[],s=function(e,t,n){switch(e){case"postgresql":case"redshift":return`
|
|
37
|
+
SELECT
|
|
38
|
+
kcu.column_name,
|
|
39
|
+
ccu.table_schema AS foreign_table_schema,
|
|
40
|
+
ccu.table_name AS foreign_table_name,
|
|
41
|
+
ccu.column_name AS foreign_column_name
|
|
42
|
+
FROM information_schema.table_constraints tc
|
|
43
|
+
JOIN information_schema.key_column_usage kcu
|
|
44
|
+
ON tc.constraint_name = kcu.constraint_name
|
|
45
|
+
JOIN information_schema.constraint_column_usage ccu
|
|
46
|
+
ON ccu.constraint_name = tc.constraint_name
|
|
47
|
+
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
48
|
+
AND tc.table_name = '${t}'
|
|
49
|
+
${n?`AND tc.table_schema = '${n}'`:""}
|
|
50
|
+
`;case"mysql":return`
|
|
51
|
+
SELECT
|
|
52
|
+
column_name,
|
|
53
|
+
referenced_table_schema AS foreign_table_schema,
|
|
54
|
+
referenced_table_name AS foreign_table_name,
|
|
55
|
+
referenced_column_name AS foreign_column_name
|
|
56
|
+
FROM information_schema.key_column_usage
|
|
57
|
+
WHERE table_name = '${t}'
|
|
58
|
+
AND referenced_table_name IS NOT NULL
|
|
59
|
+
${n?`AND table_schema = '${n}'`:""}
|
|
60
|
+
`;case"sqlite":case"csv":return`PRAGMA foreign_key_list("${t}")`;default:return null}}(m,t.name,t.schema);if(s)try{o=(await c.execute(s)).rows}catch{}let r=[];try{r=(await c.execute(function(e,t,n){let a=n&&"sqlite"!==e&&"csv"!==e?`"${n}"."${t}"`:`"${t}"`;return`SELECT * FROM ${a} LIMIT 3`}(m,t.name,t.schema))).rows.slice(0,3)}catch{}let l=0;try{let e=await c.execute(function(e,t,n){let a=n&&"sqlite"!==e&&"csv"!==e?`"${n}"."${t}"`:`"${t}"`;return`SELECT COUNT(*) AS row_count FROM ${a}`}(m,t.name,t.schema));l=Number(e.rows[0]?.row_count||0)}catch{}f.push({name:t.name,schema:t.schema,fullName:n,columns:a.rows,foreignKeys:o,sampleRows:r,rowCount:l}),i({type:"table_done",table:n,current:e+1,total:d.length,columnCount:a.rows.length,rowCount:l})}catch(t){console.error(`Failed to explore table ${n}:`,t),i({type:"table_error",table:n,current:e+1,total:d.length})}}if(0===f.length)return{entries:[],tablesExplored:0,connectionName:u.name};let p=f.map(e=>{let t=e.columns.map(e=>{let t=e.column_name||e.name||"unknown",n=e.data_type||e.type||"unknown",a="YES"===e.is_nullable||0===e.notnull?"nullable":"not null",o=1===e.pk?" PRIMARY KEY":"",s=e.column_key?` (${e.column_key})`:"";return` ${t} ${n} ${a}${o}${s}`}).join("\n"),n=e.foreignKeys.length>0?` Foreign Keys:
|
|
61
|
+
${e.foreignKeys.map(e=>` ${e.column_name||e.from} → ${e.foreign_table_name||e.table}.${e.foreign_column_name||e.to}`).join("\n")}`:"",a=e.sampleRows.length>0?` Sample Data (${e.rowCount} total rows):
|
|
62
|
+
${JSON.stringify(e.sampleRows,null,2).split("\n").map(e=>` ${e}`).join("\n")}`:` (${e.rowCount} rows, no sample available)`;return`TABLE: ${e.fullName}
|
|
63
|
+
Columns:
|
|
64
|
+
${t}
|
|
65
|
+
${n}
|
|
66
|
+
${a}`}).join("\n\n---\n\n");i({type:"generating",tablesExplored:f.length});let g=(0,s.getModel)(t||"google-gemini-2.0-flash-001"),b=o.z.object({entries:o.z.array(o.z.object({title:o.z.string().describe("A concise title"),content:o.z.string().describe("Detailed knowledge for AI SQL queries")}))}),w=[];if(p.length<=15e3)i({type:"generating_batch",batch:1,totalBatches:1}),w=(await (0,a.generateObject)({model:g,schema:b,prompt:l(h,u.name,p)})).object.entries,i({type:"batch_done",batch:1,totalBatches:1,entriesFound:w.length});else{let e=[],t="";for(let n of f){let a=p.split("---").find(e=>e.includes(`TABLE: ${n.fullName}`))?.trim()||"";t.length+a.length>15e3?(t&&e.push(t),t=a):t+=(t?"\n\n---\n\n":"")+a}t&&e.push(t);for(let t=0;t<e.length;t++){i({type:"generating_batch",batch:t+1,totalBatches:e.length});let n=await (0,a.generateObject)({model:g,schema:b,prompt:l(h,u.name,e[t])});w.push(...n.object.entries),i({type:"batch_done",batch:t+1,totalBatches:e.length,entriesFound:n.object.entries.length,totalEntries:w.length})}}return{entries:w,tablesExplored:f.length,connectionName:u.name}}function l(e,t,n){return`You are a database knowledge extraction agent. Analyze the following ${e} database schema for connection "${t}" and generate comprehensive knowledge base entries.
|
|
67
|
+
|
|
68
|
+
Your goal: create knowledge entries that would help an AI assistant write better SQL queries against this database.
|
|
69
|
+
|
|
70
|
+
For each entry, focus on:
|
|
71
|
+
1. **Table purposes** — What each table is for, what entity it represents
|
|
72
|
+
2. **Column meanings** — Non-obvious column names, what values mean
|
|
73
|
+
3. **Relationships** — How tables relate to each other (foreign keys, join patterns)
|
|
74
|
+
4. **Data patterns** — Enum values observed in sample data, status codes, date formats
|
|
75
|
+
5. **Business rules** — Any business logic implied by the schema (e.g. soft deletes, computed fields)
|
|
76
|
+
6. **Naming conventions** — Schema-wide patterns in naming
|
|
77
|
+
7. **Important notes** — Anything an AI should know to avoid common mistakes
|
|
78
|
+
|
|
79
|
+
Create at least one entry per table and additional entries for cross-cutting concerns.
|
|
80
|
+
Each entry should be self-contained and useful on its own.
|
|
81
|
+
|
|
82
|
+
Database Schema:
|
|
83
|
+
${n}`}[r]=i.then?(await i)():i,e.s(["exploreDatabase",()=>c]),n()}catch(e){n(e)}},!1)];
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=%5Broot-of-the-server%5D__ca89cb1f._.js.map
|