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.
Files changed (102) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +2 -2
  3. package/.next/standalone/.next/server/app/(chat)/ai-providers/page_client-reference-manifest.js +1 -1
  4. package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page.js +2 -2
  5. package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page.js.nft.json +1 -1
  6. package/.next/standalone/.next/server/app/(chat)/chat/[threadId]/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(chat)/connections/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(chat)/knowledge-base/page.js +1 -1
  9. package/.next/standalone/.next/server/app/(chat)/knowledge-base/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(chat)/knowledge-base/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(chat)/page.js +1 -1
  12. package/.next/standalone/.next/server/app/(chat)/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/(chat)/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  15. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  22. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/.next/standalone/.next/server/app/ai-providers.html +1 -1
  28. package/.next/standalone/.next/server/app/ai-providers.rsc +3 -3
  29. package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp/ai-providers/__PAGE__.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp/ai-providers.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/ai-providers.segments/!KGNoYXQp.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/ai-providers.segments/_full.segment.rsc +3 -3
  33. package/.next/standalone/.next/server/app/ai-providers.segments/_index.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/ai-providers.segments/_tree.segment.rsc +2 -2
  35. package/.next/standalone/.next/server/app/api/chat/route.js +1 -1
  36. package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  38. package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/knowledge/auto-generate/route.js +1 -1
  40. package/.next/standalone/.next/server/app/api/knowledge/auto-generate/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/knowledge/generate/route.js +1 -1
  42. package/.next/standalone/.next/server/app/api/knowledge/generate/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/trpc/[trpc]/route.js +3 -3
  44. package/.next/standalone/.next/server/app/api/trpc/[trpc]/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/connections.html +1 -1
  46. package/.next/standalone/.next/server/app/connections.rsc +3 -3
  47. package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp/connections/__PAGE__.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp/connections.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/connections.segments/!KGNoYXQp.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/connections.segments/_full.segment.rsc +3 -3
  51. package/.next/standalone/.next/server/app/connections.segments/_index.segment.rsc +1 -1
  52. package/.next/standalone/.next/server/app/connections.segments/_tree.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f49434f._.js +3 -0
  54. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__51b79d66._.js → [root-of-the-server]__3a1fb665._.js} +6 -6
  55. package/.next/standalone/.next/server/chunks/[root-of-the-server]__73947e32._.js +3 -0
  56. package/.next/standalone/.next/server/chunks/[root-of-the-server]__747722f0._.js +85 -0
  57. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ca89cb1f._.js +85 -0
  58. package/.next/standalone/.next/server/chunks/_26ec1867._.js +13 -13
  59. package/.next/standalone/.next/server/chunks/_430c5305._.js +13 -13
  60. package/.next/standalone/.next/server/chunks/_44fa1f03._.js +1 -1
  61. package/.next/standalone/.next/server/chunks/_75b542e9._.js +1 -1
  62. package/.next/standalone/.next/server/chunks/_82e2d86b._.js +11 -11
  63. package/.next/standalone/.next/server/chunks/_c49f2a1f._.js +13 -13
  64. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d8a3f2e3._.js → [root-of-the-server]__1ad22765._.js} +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2534236b._.js +1 -1
  66. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__77c3448a._.js +1 -1
  67. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__85abb029._.js +3 -0
  68. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__d2e81be0._.js +3 -0
  69. package/.next/standalone/.next/server/chunks/ssr/_119ae296._.js +12 -12
  70. package/.next/standalone/.next/server/chunks/ssr/_37f7f89d._.js +1 -1
  71. package/.next/standalone/.next/server/chunks/ssr/src_components_connections_connections-page_tsx_a8fa3df0._.js +1 -1
  72. package/.next/standalone/.next/server/chunks/ssr/src_components_knowledge-base_knowledge-base-page_tsx_10bf7f9a._.js +1 -1
  73. package/.next/standalone/.next/server/pages/404.html +1 -1
  74. package/.next/standalone/.next/server/pages/500.html +2 -2
  75. package/.next/{static/chunks/b90a78e2d36034ff.js → standalone/.next/static/chunks/00f68930e8af39f1.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/3bd88f74116ecf0b.js +1 -0
  77. package/.next/standalone/.next/static/chunks/89e492a83a4b53e3.js +1 -0
  78. package/.next/standalone/.next/static/chunks/{842e82429bd01d96.js → a3a8f6ede99c1c63.js} +1 -1
  79. package/.next/standalone/README.md +1 -1
  80. package/.next/standalone/package.json +1 -1
  81. package/.next/{standalone/.next/static/chunks/b90a78e2d36034ff.js → static/chunks/00f68930e8af39f1.js} +1 -1
  82. package/.next/static/chunks/3bd88f74116ecf0b.js +1 -0
  83. package/.next/static/chunks/89e492a83a4b53e3.js +1 -0
  84. package/.next/static/chunks/{842e82429bd01d96.js → a3a8f6ede99c1c63.js} +1 -1
  85. package/README.md +1 -1
  86. package/package.json +1 -1
  87. package/.next/standalone/.next/server/chunks/[root-of-the-server]__26852352._.js +0 -85
  88. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5dc46bc4._.js +0 -3
  89. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8992d6da._.js +0 -3
  90. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e474c328._.js +0 -85
  91. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e727499._.js +0 -3
  92. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4451526a._.js +0 -3
  93. package/.next/standalone/.next/static/chunks/000ce5d236847e14.js +0 -1
  94. package/.next/standalone/.next/static/chunks/7c8dab1a077d98e9.js +0 -1
  95. package/.next/static/chunks/000ce5d236847e14.js +0 -1
  96. package/.next/static/chunks/7c8dab1a077d98e9.js +0 -1
  97. /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_buildManifest.js +0 -0
  98. /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_clientMiddlewareManifest.json +0 -0
  99. /package/.next/standalone/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_ssgManifest.js +0 -0
  100. /package/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_buildManifest.js +0 -0
  101. /package/.next/static/{H1e0tcZUy-dcOaNBJh3iW → MtWdFBWYBrNNpdc-evjbH}/_clientMiddlewareManifest.json +0 -0
  102. /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