db-mcp 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/.gitattributes +2 -0
  2. package/LICENSE +1 -1
  3. package/README.md +244 -518
  4. package/dist/chunk-4IA3DB5C.js +135 -0
  5. package/dist/chunk-AOUL5SHS.js +930 -0
  6. package/dist/chunk-DWJXQEFA.js +13759 -0
  7. package/dist/chunk-DZQLDEQS.js +879 -0
  8. package/dist/chunk-S5IDDSSB.js +74 -0
  9. package/dist/chunk-Z2GFQU3G.js +363 -0
  10. package/dist/cli.d.ts +0 -7
  11. package/dist/cli.js +227 -183
  12. package/dist/http-VSB7DBJR.js +1541 -0
  13. package/dist/index.d.ts +842 -10
  14. package/dist/index.js +5 -17
  15. package/dist/sqlite-VHBA4ABV.js +600 -0
  16. package/dist/sqlite-native-D2LH5ZT7.js +2498 -0
  17. package/dist/worker-script.d.ts +2 -0
  18. package/dist/worker-script.js +126 -0
  19. package/package.json +26 -16
  20. package/playwright.config.ts +101 -0
  21. package/scripts/generate-server-instructions.ts +111 -0
  22. package/server.json +5 -6
  23. package/test-server/README.md +118 -0
  24. package/test-server/code-map.md +409 -0
  25. package/test-server/fixtures/sample.csv +6 -0
  26. package/test-server/reset-database.ps1 +373 -0
  27. package/test-server/sample.csv +11 -0
  28. package/test-server/test-agent-experience.md +243 -0
  29. package/test-server/test-database.sql +388 -0
  30. package/test-server/test-group-tools.md +861 -0
  31. package/test-server/test-help-resources.mjs +238 -0
  32. package/test-server/test-preflight.md +53 -0
  33. package/test-server/test-prompts.md +354 -0
  34. package/test-server/test-resources.md +245 -0
  35. package/test-server/test-tool-annotations.mjs +157 -0
  36. package/test-server/test-tools-advanced-1.md +517 -0
  37. package/test-server/test-tools-advanced-2.md +487 -0
  38. package/test-server/test-tools-codemode.md +629 -0
  39. package/test-server/test-tools.md +176 -0
  40. package/test-server/tool-reference.md +236 -0
  41. package/tsconfig.test.json +9 -0
  42. package/dist/adapters/DatabaseAdapter.d.ts +0 -141
  43. package/dist/adapters/DatabaseAdapter.d.ts.map +0 -1
  44. package/dist/adapters/DatabaseAdapter.js +0 -131
  45. package/dist/adapters/DatabaseAdapter.js.map +0 -1
  46. package/dist/adapters/sqlite/SchemaManager.d.ts +0 -58
  47. package/dist/adapters/sqlite/SchemaManager.d.ts.map +0 -1
  48. package/dist/adapters/sqlite/SchemaManager.js +0 -187
  49. package/dist/adapters/sqlite/SchemaManager.js.map +0 -1
  50. package/dist/adapters/sqlite/SqliteAdapter.d.ts +0 -161
  51. package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +0 -1
  52. package/dist/adapters/sqlite/SqliteAdapter.js +0 -741
  53. package/dist/adapters/sqlite/SqliteAdapter.js.map +0 -1
  54. package/dist/adapters/sqlite/index.d.ts +0 -9
  55. package/dist/adapters/sqlite/index.d.ts.map +0 -1
  56. package/dist/adapters/sqlite/index.js +0 -8
  57. package/dist/adapters/sqlite/index.js.map +0 -1
  58. package/dist/adapters/sqlite/json-utils.d.ts +0 -100
  59. package/dist/adapters/sqlite/json-utils.d.ts.map +0 -1
  60. package/dist/adapters/sqlite/json-utils.js +0 -274
  61. package/dist/adapters/sqlite/json-utils.js.map +0 -1
  62. package/dist/adapters/sqlite/output-schemas.d.ts +0 -1187
  63. package/dist/adapters/sqlite/output-schemas.d.ts.map +0 -1
  64. package/dist/adapters/sqlite/output-schemas.js +0 -1337
  65. package/dist/adapters/sqlite/output-schemas.js.map +0 -1
  66. package/dist/adapters/sqlite/prompts.d.ts +0 -13
  67. package/dist/adapters/sqlite/prompts.d.ts.map +0 -1
  68. package/dist/adapters/sqlite/prompts.js +0 -605
  69. package/dist/adapters/sqlite/prompts.js.map +0 -1
  70. package/dist/adapters/sqlite/resources.d.ts +0 -13
  71. package/dist/adapters/sqlite/resources.d.ts.map +0 -1
  72. package/dist/adapters/sqlite/resources.js +0 -251
  73. package/dist/adapters/sqlite/resources.js.map +0 -1
  74. package/dist/adapters/sqlite/tools/admin.d.ts +0 -14
  75. package/dist/adapters/sqlite/tools/admin.d.ts.map +0 -1
  76. package/dist/adapters/sqlite/tools/admin.js +0 -788
  77. package/dist/adapters/sqlite/tools/admin.js.map +0 -1
  78. package/dist/adapters/sqlite/tools/core.d.ts +0 -25
  79. package/dist/adapters/sqlite/tools/core.d.ts.map +0 -1
  80. package/dist/adapters/sqlite/tools/core.js +0 -359
  81. package/dist/adapters/sqlite/tools/core.js.map +0 -1
  82. package/dist/adapters/sqlite/tools/fts.d.ts +0 -13
  83. package/dist/adapters/sqlite/tools/fts.d.ts.map +0 -1
  84. package/dist/adapters/sqlite/tools/fts.js +0 -347
  85. package/dist/adapters/sqlite/tools/fts.js.map +0 -1
  86. package/dist/adapters/sqlite/tools/geo.d.ts +0 -14
  87. package/dist/adapters/sqlite/tools/geo.d.ts.map +0 -1
  88. package/dist/adapters/sqlite/tools/geo.js +0 -252
  89. package/dist/adapters/sqlite/tools/geo.js.map +0 -1
  90. package/dist/adapters/sqlite/tools/index.d.ts +0 -30
  91. package/dist/adapters/sqlite/tools/index.d.ts.map +0 -1
  92. package/dist/adapters/sqlite/tools/index.js +0 -61
  93. package/dist/adapters/sqlite/tools/index.js.map +0 -1
  94. package/dist/adapters/sqlite/tools/json-helpers.d.ts +0 -14
  95. package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +0 -1
  96. package/dist/adapters/sqlite/tools/json-helpers.js +0 -477
  97. package/dist/adapters/sqlite/tools/json-helpers.js.map +0 -1
  98. package/dist/adapters/sqlite/tools/json-operations.d.ts +0 -14
  99. package/dist/adapters/sqlite/tools/json-operations.d.ts.map +0 -1
  100. package/dist/adapters/sqlite/tools/json-operations.js +0 -839
  101. package/dist/adapters/sqlite/tools/json-operations.js.map +0 -1
  102. package/dist/adapters/sqlite/tools/stats.d.ts +0 -15
  103. package/dist/adapters/sqlite/tools/stats.d.ts.map +0 -1
  104. package/dist/adapters/sqlite/tools/stats.js +0 -1219
  105. package/dist/adapters/sqlite/tools/stats.js.map +0 -1
  106. package/dist/adapters/sqlite/tools/text.d.ts +0 -14
  107. package/dist/adapters/sqlite/tools/text.d.ts.map +0 -1
  108. package/dist/adapters/sqlite/tools/text.js +0 -1141
  109. package/dist/adapters/sqlite/tools/text.js.map +0 -1
  110. package/dist/adapters/sqlite/tools/vector.d.ts +0 -14
  111. package/dist/adapters/sqlite/tools/vector.d.ts.map +0 -1
  112. package/dist/adapters/sqlite/tools/vector.js +0 -613
  113. package/dist/adapters/sqlite/tools/vector.js.map +0 -1
  114. package/dist/adapters/sqlite/tools/virtual.d.ts +0 -13
  115. package/dist/adapters/sqlite/tools/virtual.d.ts.map +0 -1
  116. package/dist/adapters/sqlite/tools/virtual.js +0 -930
  117. package/dist/adapters/sqlite/tools/virtual.js.map +0 -1
  118. package/dist/adapters/sqlite/types.d.ts +0 -207
  119. package/dist/adapters/sqlite/types.d.ts.map +0 -1
  120. package/dist/adapters/sqlite/types.js +0 -186
  121. package/dist/adapters/sqlite/types.js.map +0 -1
  122. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +0 -163
  123. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +0 -1
  124. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +0 -748
  125. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +0 -1
  126. package/dist/adapters/sqlite-native/index.d.ts +0 -11
  127. package/dist/adapters/sqlite-native/index.d.ts.map +0 -1
  128. package/dist/adapters/sqlite-native/index.js +0 -11
  129. package/dist/adapters/sqlite-native/index.js.map +0 -1
  130. package/dist/adapters/sqlite-native/tools/spatialite.d.ts +0 -19
  131. package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +0 -1
  132. package/dist/adapters/sqlite-native/tools/spatialite.js +0 -628
  133. package/dist/adapters/sqlite-native/tools/spatialite.js.map +0 -1
  134. package/dist/adapters/sqlite-native/tools/transactions.d.ts +0 -12
  135. package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +0 -1
  136. package/dist/adapters/sqlite-native/tools/transactions.js +0 -255
  137. package/dist/adapters/sqlite-native/tools/transactions.js.map +0 -1
  138. package/dist/adapters/sqlite-native/tools/window.d.ts +0 -12
  139. package/dist/adapters/sqlite-native/tools/window.d.ts.map +0 -1
  140. package/dist/adapters/sqlite-native/tools/window.js +0 -370
  141. package/dist/adapters/sqlite-native/tools/window.js.map +0 -1
  142. package/dist/auth/AuthorizationServerDiscovery.d.ts +0 -90
  143. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +0 -1
  144. package/dist/auth/AuthorizationServerDiscovery.js +0 -204
  145. package/dist/auth/AuthorizationServerDiscovery.js.map +0 -1
  146. package/dist/auth/OAuthResourceServer.d.ts +0 -65
  147. package/dist/auth/OAuthResourceServer.d.ts.map +0 -1
  148. package/dist/auth/OAuthResourceServer.js +0 -121
  149. package/dist/auth/OAuthResourceServer.js.map +0 -1
  150. package/dist/auth/TokenValidator.d.ts +0 -60
  151. package/dist/auth/TokenValidator.d.ts.map +0 -1
  152. package/dist/auth/TokenValidator.js +0 -235
  153. package/dist/auth/TokenValidator.js.map +0 -1
  154. package/dist/auth/errors.d.ts +0 -74
  155. package/dist/auth/errors.d.ts.map +0 -1
  156. package/dist/auth/errors.js +0 -133
  157. package/dist/auth/errors.js.map +0 -1
  158. package/dist/auth/index.d.ts +0 -13
  159. package/dist/auth/index.d.ts.map +0 -1
  160. package/dist/auth/index.js +0 -15
  161. package/dist/auth/index.js.map +0 -1
  162. package/dist/auth/middleware.d.ts +0 -81
  163. package/dist/auth/middleware.d.ts.map +0 -1
  164. package/dist/auth/middleware.js +0 -291
  165. package/dist/auth/middleware.js.map +0 -1
  166. package/dist/auth/scopes.d.ts +0 -136
  167. package/dist/auth/scopes.d.ts.map +0 -1
  168. package/dist/auth/scopes.js +0 -349
  169. package/dist/auth/scopes.js.map +0 -1
  170. package/dist/auth/types.d.ts +0 -257
  171. package/dist/auth/types.d.ts.map +0 -1
  172. package/dist/auth/types.js +0 -8
  173. package/dist/auth/types.js.map +0 -1
  174. package/dist/cli.d.ts.map +0 -1
  175. package/dist/cli.js.map +0 -1
  176. package/dist/constants/ServerInstructions.d.ts +0 -45
  177. package/dist/constants/ServerInstructions.d.ts.map +0 -1
  178. package/dist/constants/ServerInstructions.js +0 -356
  179. package/dist/constants/ServerInstructions.js.map +0 -1
  180. package/dist/filtering/ToolConstants.d.ts +0 -34
  181. package/dist/filtering/ToolConstants.d.ts.map +0 -1
  182. package/dist/filtering/ToolConstants.js +0 -174
  183. package/dist/filtering/ToolConstants.js.map +0 -1
  184. package/dist/filtering/ToolFilter.d.ts +0 -82
  185. package/dist/filtering/ToolFilter.d.ts.map +0 -1
  186. package/dist/filtering/ToolFilter.js +0 -296
  187. package/dist/filtering/ToolFilter.js.map +0 -1
  188. package/dist/index.d.ts.map +0 -1
  189. package/dist/index.js.map +0 -1
  190. package/dist/server/McpServer.d.ts +0 -61
  191. package/dist/server/McpServer.d.ts.map +0 -1
  192. package/dist/server/McpServer.js +0 -270
  193. package/dist/server/McpServer.js.map +0 -1
  194. package/dist/transports/http.d.ts +0 -134
  195. package/dist/transports/http.d.ts.map +0 -1
  196. package/dist/transports/http.js +0 -516
  197. package/dist/transports/http.js.map +0 -1
  198. package/dist/transports/index.d.ts +0 -5
  199. package/dist/transports/index.d.ts.map +0 -1
  200. package/dist/transports/index.js +0 -5
  201. package/dist/transports/index.js.map +0 -1
  202. package/dist/types/index.d.ts +0 -380
  203. package/dist/types/index.d.ts.map +0 -1
  204. package/dist/types/index.js +0 -68
  205. package/dist/types/index.js.map +0 -1
  206. package/dist/utils/annotations.d.ts +0 -44
  207. package/dist/utils/annotations.d.ts.map +0 -1
  208. package/dist/utils/annotations.js +0 -77
  209. package/dist/utils/annotations.js.map +0 -1
  210. package/dist/utils/errors.d.ts +0 -155
  211. package/dist/utils/errors.d.ts.map +0 -1
  212. package/dist/utils/errors.js +0 -329
  213. package/dist/utils/errors.js.map +0 -1
  214. package/dist/utils/identifiers.d.ts +0 -121
  215. package/dist/utils/identifiers.d.ts.map +0 -1
  216. package/dist/utils/identifiers.js +0 -319
  217. package/dist/utils/identifiers.js.map +0 -1
  218. package/dist/utils/index.d.ts +0 -7
  219. package/dist/utils/index.d.ts.map +0 -1
  220. package/dist/utils/index.js +0 -7
  221. package/dist/utils/index.js.map +0 -1
  222. package/dist/utils/insightsManager.d.ts +0 -39
  223. package/dist/utils/insightsManager.d.ts.map +0 -1
  224. package/dist/utils/insightsManager.js +0 -63
  225. package/dist/utils/insightsManager.js.map +0 -1
  226. package/dist/utils/logger.d.ts +0 -189
  227. package/dist/utils/logger.d.ts.map +0 -1
  228. package/dist/utils/logger.js +0 -394
  229. package/dist/utils/logger.js.map +0 -1
  230. package/dist/utils/progress-utils.d.ts +0 -54
  231. package/dist/utils/progress-utils.d.ts.map +0 -1
  232. package/dist/utils/progress-utils.js +0 -74
  233. package/dist/utils/progress-utils.js.map +0 -1
  234. package/dist/utils/resourceAnnotations.d.ts +0 -36
  235. package/dist/utils/resourceAnnotations.d.ts.map +0 -1
  236. package/dist/utils/resourceAnnotations.js +0 -57
  237. package/dist/utils/resourceAnnotations.js.map +0 -1
  238. package/dist/utils/where-clause.d.ts +0 -41
  239. package/dist/utils/where-clause.d.ts.map +0 -1
  240. package/dist/utils/where-clause.js +0 -116
  241. package/dist/utils/where-clause.js.map +0 -1
@@ -1,347 +0,0 @@
1
- /**
2
- * SQLite Full-Text Search (FTS5) Tools
3
- *
4
- * Create and query FTS5 virtual tables for full-text search.
5
- * 4 tools total.
6
- */
7
- import { z } from "zod";
8
- import { readOnly, idempotent, admin } from "../../../utils/annotations.js";
9
- import { sanitizeIdentifier } from "../../../utils/index.js";
10
- import { FtsCreateOutputSchema, FtsSearchOutputSchema, FtsRebuildOutputSchema, } from "../output-schemas.js";
11
- /**
12
- * Build error response for FTS5 unavailability in WASM mode
13
- * Includes required schema fields to pass output validation
14
- */
15
- function buildFts5UnavailableError(tableName) {
16
- return {
17
- success: false,
18
- message: "FTS5 module unavailable",
19
- tableName: tableName ?? "",
20
- error: "FTS5 module unavailable",
21
- hint: "FTS5 requires native SQLite backend (--sqlite-native). WASM mode (sql.js) does not include this module.",
22
- };
23
- }
24
- /**
25
- * Check if an error is due to FTS5 module being unavailable
26
- */
27
- function isFts5UnavailableError(error) {
28
- return (error instanceof Error &&
29
- error.message.toLowerCase().includes("no such module: fts5"));
30
- }
31
- /**
32
- * Check if FTS5 is available (native backend only)
33
- * FTS5 is not bundled with sql.js (WASM)
34
- */
35
- function isFts5Available(adapter) {
36
- return adapter.isNativeBackend();
37
- }
38
- /**
39
- * Build error response for FTS5 search unavailability in WASM mode
40
- * Includes required schema fields for FtsSearchOutputSchema
41
- */
42
- function buildFts5SearchUnavailableError() {
43
- return {
44
- success: false,
45
- rowCount: 0,
46
- results: [],
47
- error: "FTS5 module unavailable",
48
- hint: "FTS5 requires native SQLite backend (--sqlite-native). WASM mode (sql.js) does not include this module.",
49
- };
50
- }
51
- // FTS schemas
52
- const FtsCreateSchema = z.object({
53
- tableName: z.string().describe("Name of the FTS table to create"),
54
- sourceTable: z.string().describe("Source table to index"),
55
- columns: z.array(z.string()).describe("Columns to include in the index"),
56
- contentTable: z
57
- .string()
58
- .optional()
59
- .describe("Content table for external content FTS"),
60
- tokenizer: z
61
- .enum(["unicode61", "ascii", "porter"])
62
- .optional()
63
- .default("unicode61"),
64
- createTriggers: z
65
- .boolean()
66
- .optional()
67
- .default(true)
68
- .describe("Create INSERT/UPDATE/DELETE triggers for auto-sync (only for external content tables)"),
69
- });
70
- const FtsSearchSchema = z.object({
71
- table: z.string().describe("FTS table name"),
72
- query: z.string().describe("Full-text search query"),
73
- columns: z
74
- .array(z.string())
75
- .optional()
76
- .describe("Specific columns to search"),
77
- limit: z.number().optional().default(100),
78
- highlight: z
79
- .boolean()
80
- .optional()
81
- .default(false)
82
- .describe("Include highlighted snippets"),
83
- });
84
- const FtsRebuildSchema = z.object({
85
- table: z.string().describe("FTS table name to rebuild"),
86
- });
87
- const FtsMatchInfoSchema = z.object({
88
- table: z.string().describe("FTS table name"),
89
- query: z.string().describe("Full-text search query"),
90
- format: z.enum(["bm25", "rank"]).optional().default("bm25"),
91
- });
92
- /**
93
- * Get all FTS tools
94
- */
95
- export function getFtsTools(adapter) {
96
- return [
97
- createFtsCreateTool(adapter),
98
- createFtsSearchTool(adapter),
99
- createFtsRebuildTool(adapter),
100
- createFtsMatchInfoTool(adapter),
101
- ];
102
- }
103
- /**
104
- * Create an FTS5 table
105
- */
106
- function createFtsCreateTool(adapter) {
107
- return {
108
- name: "sqlite_fts_create",
109
- description: "Create an FTS5 full-text search virtual table.",
110
- group: "text",
111
- inputSchema: FtsCreateSchema,
112
- outputSchema: FtsCreateOutputSchema,
113
- requiredScopes: ["write"],
114
- annotations: idempotent("FTS Create"),
115
- handler: async (params, _context) => {
116
- const input = FtsCreateSchema.parse(params);
117
- // Validate identifiers (FTS5 uses raw column names, not quoted)
118
- sanitizeIdentifier(input.tableName);
119
- sanitizeIdentifier(input.sourceTable);
120
- for (const col of input.columns) {
121
- sanitizeIdentifier(col);
122
- }
123
- const columnList = input.columns.join(", ");
124
- let options = `tokenize="${input.tokenizer}"`;
125
- // Use contentTable if specified, otherwise use sourceTable
126
- const effectiveContentTable = input.contentTable ?? input.sourceTable;
127
- sanitizeIdentifier(effectiveContentTable);
128
- options += `, content="${effectiveContentTable}"`;
129
- const sql = `CREATE VIRTUAL TABLE IF NOT EXISTS "${input.tableName}" USING fts5(${columnList}, ${options})`;
130
- try {
131
- await adapter.executeQuery(sql);
132
- // Create sync triggers for external content FTS tables
133
- let triggersCreated = [];
134
- if (input.createTriggers) {
135
- triggersCreated = await createSyncTriggers(adapter, input.tableName, effectiveContentTable, input.columns);
136
- }
137
- // Populate the FTS index with existing data
138
- await adapter.executeQuery(`INSERT INTO "${input.tableName}"("${input.tableName}") VALUES('rebuild')`);
139
- const message = triggersCreated.length
140
- ? `FTS5 table '${input.tableName}' created with ${triggersCreated.length} sync triggers`
141
- : `FTS5 table '${input.tableName}' created`;
142
- return {
143
- success: true,
144
- message,
145
- tableName: input.tableName,
146
- triggersCreated: triggersCreated.length ? triggersCreated : undefined,
147
- };
148
- }
149
- catch (error) {
150
- if (isFts5UnavailableError(error)) {
151
- return buildFts5UnavailableError(input.tableName);
152
- }
153
- throw error;
154
- }
155
- },
156
- };
157
- }
158
- /**
159
- * Create INSERT/UPDATE/DELETE triggers to keep FTS5 index in sync with content table
160
- */
161
- async function createSyncTriggers(adapter, ftsTable, contentTable, columns) {
162
- const triggersCreated = [];
163
- const colList = columns.map((c) => `"${c}"`).join(", ");
164
- const newColList = columns.map((c) => `NEW."${c}"`).join(", ");
165
- const oldColList = columns.map((c) => `OLD."${c}"`).join(", ");
166
- // INSERT trigger - add new row to FTS index
167
- const insertTriggerName = `${ftsTable}_ai`;
168
- const insertTrigger = `
169
- CREATE TRIGGER IF NOT EXISTS "${insertTriggerName}" AFTER INSERT ON "${contentTable}" BEGIN
170
- INSERT INTO "${ftsTable}"(rowid, ${colList}) VALUES (NEW.rowid, ${newColList});
171
- END;
172
- `;
173
- await adapter.executeQuery(insertTrigger);
174
- triggersCreated.push(insertTriggerName);
175
- // DELETE trigger - remove row from FTS index
176
- const deleteTriggerName = `${ftsTable}_ad`;
177
- const deleteTrigger = `
178
- CREATE TRIGGER IF NOT EXISTS "${deleteTriggerName}" AFTER DELETE ON "${contentTable}" BEGIN
179
- INSERT INTO "${ftsTable}"("${ftsTable}", rowid, ${colList}) VALUES('delete', OLD.rowid, ${oldColList});
180
- END;
181
- `;
182
- await adapter.executeQuery(deleteTrigger);
183
- triggersCreated.push(deleteTriggerName);
184
- // UPDATE trigger - delete old entry and insert new one
185
- const updateTriggerName = `${ftsTable}_au`;
186
- const updateTrigger = `
187
- CREATE TRIGGER IF NOT EXISTS "${updateTriggerName}" AFTER UPDATE ON "${contentTable}" BEGIN
188
- INSERT INTO "${ftsTable}"("${ftsTable}", rowid, ${colList}) VALUES('delete', OLD.rowid, ${oldColList});
189
- INSERT INTO "${ftsTable}"(rowid, ${colList}) VALUES (NEW.rowid, ${newColList});
190
- END;
191
- `;
192
- await adapter.executeQuery(updateTrigger);
193
- triggersCreated.push(updateTriggerName);
194
- return triggersCreated;
195
- }
196
- /**
197
- * Search FTS table
198
- */
199
- function createFtsSearchTool(adapter) {
200
- return {
201
- name: "sqlite_fts_search",
202
- description: "Search an FTS5 table using full-text query syntax.",
203
- group: "text",
204
- inputSchema: FtsSearchSchema,
205
- outputSchema: FtsSearchOutputSchema,
206
- requiredScopes: ["read"],
207
- annotations: readOnly("FTS Search"),
208
- handler: async (params, _context) => {
209
- const input = FtsSearchSchema.parse(params);
210
- // Upfront FTS5 availability check
211
- if (!isFts5Available(adapter)) {
212
- return buildFts5SearchUnavailableError();
213
- }
214
- // Validate FTS table name
215
- sanitizeIdentifier(input.table);
216
- let selectClause = "*";
217
- if (input.highlight) {
218
- selectClause = `*, highlight("${input.table}", 0, '<b>', '</b>') as snippet`;
219
- }
220
- try {
221
- // Handle wildcard/list-all query - skip MATCH and return all rows
222
- if (input.query === "*" || input.query.trim() === "") {
223
- const sql = `SELECT ${selectClause}, NULL as rank FROM "${input.table}" ORDER BY rowid LIMIT ${input.limit}`;
224
- const result = await adapter.executeReadQuery(sql);
225
- return {
226
- success: true,
227
- rowCount: result.rows?.length ?? 0,
228
- results: result.rows,
229
- };
230
- }
231
- // Build query - use single quotes for FTS5 MATCH strings (not double quotes which are identifiers)
232
- const queryEscaped = input.query.replace(/'/g, "''");
233
- let matchExpr = `"${input.table}" MATCH '${queryEscaped}'`;
234
- // If specific columns, use column filters
235
- if (input.columns && input.columns.length > 0) {
236
- for (const col of input.columns) {
237
- sanitizeIdentifier(col);
238
- }
239
- const colFilter = input.columns
240
- .map((c) => `${c}:${queryEscaped}`)
241
- .join(" OR ");
242
- matchExpr = `"${input.table}" MATCH '${colFilter}'`;
243
- }
244
- const sql = `SELECT ${selectClause}, rank FROM "${input.table}" WHERE ${matchExpr} ORDER BY rank LIMIT ${input.limit}`;
245
- const result = await adapter.executeReadQuery(sql);
246
- return {
247
- success: true,
248
- rowCount: result.rows?.length ?? 0,
249
- results: result.rows,
250
- };
251
- }
252
- catch (error) {
253
- if (isFts5UnavailableError(error)) {
254
- return buildFts5SearchUnavailableError();
255
- }
256
- throw error;
257
- }
258
- },
259
- };
260
- }
261
- /**
262
- * Rebuild FTS index
263
- */
264
- function createFtsRebuildTool(adapter) {
265
- return {
266
- name: "sqlite_fts_rebuild",
267
- description: "Rebuild an FTS5 index to optimize search performance.",
268
- group: "text",
269
- inputSchema: FtsRebuildSchema,
270
- outputSchema: FtsRebuildOutputSchema,
271
- requiredScopes: ["admin"],
272
- annotations: admin("FTS Rebuild"),
273
- handler: async (params, _context) => {
274
- const input = FtsRebuildSchema.parse(params);
275
- // Upfront FTS5 availability check
276
- if (!isFts5Available(adapter)) {
277
- return buildFts5UnavailableError(input.table);
278
- }
279
- // Validate FTS table name
280
- sanitizeIdentifier(input.table);
281
- // Rebuild = drop shadow tables and recreate
282
- const sql = `INSERT INTO "${input.table}"("${input.table}") VALUES('rebuild')`;
283
- try {
284
- await adapter.executeQuery(sql);
285
- return {
286
- success: true,
287
- message: `FTS5 index '${input.table}' rebuilt`,
288
- tableName: input.table,
289
- };
290
- }
291
- catch (error) {
292
- if (isFts5UnavailableError(error)) {
293
- return buildFts5UnavailableError(input.table);
294
- }
295
- throw error;
296
- }
297
- },
298
- };
299
- }
300
- /**
301
- * Get FTS match info/ranking
302
- */
303
- function createFtsMatchInfoTool(adapter) {
304
- return {
305
- name: "sqlite_fts_match_info",
306
- description: "Get FTS5 match ranking information using bm25.",
307
- group: "text",
308
- inputSchema: FtsMatchInfoSchema,
309
- outputSchema: FtsSearchOutputSchema,
310
- requiredScopes: ["read"],
311
- annotations: readOnly("FTS Match Info"),
312
- handler: async (params, _context) => {
313
- const input = FtsMatchInfoSchema.parse(params);
314
- // Upfront FTS5 availability check
315
- if (!isFts5Available(adapter)) {
316
- return buildFts5SearchUnavailableError();
317
- }
318
- // Validate FTS table name
319
- sanitizeIdentifier(input.table);
320
- // Use single quotes for FTS5 MATCH strings
321
- const queryEscaped = input.query.replace(/'/g, "''");
322
- let rankExpr;
323
- if (input.format === "bm25") {
324
- rankExpr = `bm25("${input.table}")`;
325
- }
326
- else {
327
- rankExpr = "rank";
328
- }
329
- const sql = `SELECT *, ${rankExpr} as score FROM "${input.table}" WHERE "${input.table}" MATCH '${queryEscaped}' ORDER BY score`;
330
- try {
331
- const result = await adapter.executeReadQuery(sql);
332
- return {
333
- success: true,
334
- rowCount: result.rows?.length ?? 0,
335
- results: result.rows,
336
- };
337
- }
338
- catch (error) {
339
- if (isFts5UnavailableError(error)) {
340
- return buildFts5SearchUnavailableError();
341
- }
342
- throw error;
343
- }
344
- },
345
- };
346
- }
347
- //# sourceMappingURL=fts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fts.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite/tools/fts.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * SQLite Geospatial Tools
3
- *
4
- * Basic geospatial operations using Haversine formula.
5
- * Works without SpatiaLite extension.
6
- * 4 tools total.
7
- */
8
- import type { SqliteAdapter } from "../SqliteAdapter.js";
9
- import type { ToolDefinition } from "../../../types/index.js";
10
- /**
11
- * Get all geo tools
12
- */
13
- export declare function getGeoTools(adapter: SqliteAdapter): ToolDefinition[];
14
- //# sourceMappingURL=geo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../../../src/adapters/sqlite/tools/geo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAuD9E;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,EAAE,CAOpE"}
@@ -1,252 +0,0 @@
1
- /**
2
- * SQLite Geospatial Tools
3
- *
4
- * Basic geospatial operations using Haversine formula.
5
- * Works without SpatiaLite extension.
6
- * 4 tools total.
7
- */
8
- import { z } from "zod";
9
- import { readOnly } from "../../../utils/annotations.js";
10
- import { validateWhereClause, sanitizeIdentifier, createColumnList, } from "../../../utils/index.js";
11
- import { GeoDistanceOutputSchema, GeoWithinRadiusOutputSchema, GeoBoundingBoxOutputSchema, GeoClusterOutputSchema, } from "../output-schemas.js";
12
- // Geo schemas
13
- const GeoDistanceSchema = z.object({
14
- lat1: z.number().min(-90).max(90).describe("Latitude of point 1"),
15
- lon1: z.number().min(-180).max(180).describe("Longitude of point 1"),
16
- lat2: z.number().min(-90).max(90).describe("Latitude of point 2"),
17
- lon2: z.number().min(-180).max(180).describe("Longitude of point 2"),
18
- unit: z.enum(["km", "miles", "meters"]).optional().default("km"),
19
- });
20
- const GeoNearbySchema = z.object({
21
- table: z.string().describe("Table name"),
22
- latColumn: z.string().describe("Latitude column"),
23
- lonColumn: z.string().describe("Longitude column"),
24
- centerLat: z.number().min(-90).max(90).describe("Center latitude"),
25
- centerLon: z.number().min(-180).max(180).describe("Center longitude"),
26
- radius: z.number().describe("Radius"),
27
- unit: z.enum(["km", "miles", "meters"]).optional().default("km"),
28
- limit: z.number().optional().default(100),
29
- returnColumns: z.array(z.string()).optional(),
30
- });
31
- const GeoBoundingBoxSchema = z.object({
32
- table: z.string().describe("Table name"),
33
- latColumn: z.string().describe("Latitude column"),
34
- lonColumn: z.string().describe("Longitude column"),
35
- minLat: z.number().min(-90).max(90),
36
- maxLat: z.number().min(-90).max(90),
37
- minLon: z.number().min(-180).max(180),
38
- maxLon: z.number().min(-180).max(180),
39
- limit: z.number().optional().default(100),
40
- returnColumns: z.array(z.string()).optional(),
41
- });
42
- const GeoClusterSchema = z.object({
43
- table: z.string().describe("Table name"),
44
- latColumn: z.string().describe("Latitude column"),
45
- lonColumn: z.string().describe("Longitude column"),
46
- gridSize: z.number().optional().default(0.1).describe("Grid size in degrees"),
47
- whereClause: z.string().optional(),
48
- });
49
- /**
50
- * Get all geo tools
51
- */
52
- export function getGeoTools(adapter) {
53
- return [
54
- createGeoDistanceTool(),
55
- createGeoNearbyTool(adapter),
56
- createGeoBoundingBoxTool(adapter),
57
- createGeoClusterTool(adapter),
58
- ];
59
- }
60
- // Earth radius in different units
61
- const EARTH_RADIUS = {
62
- km: 6371,
63
- miles: 3959,
64
- meters: 6371000,
65
- };
66
- /**
67
- * Haversine formula for distance calculation
68
- */
69
- function haversineDistance(lat1, lon1, lat2, lon2, unit) {
70
- const R = EARTH_RADIUS[unit];
71
- const dLat = ((lat2 - lat1) * Math.PI) / 180;
72
- const dLon = ((lon2 - lon1) * Math.PI) / 180;
73
- const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
74
- Math.cos((lat1 * Math.PI) / 180) *
75
- Math.cos((lat2 * Math.PI) / 180) *
76
- Math.sin(dLon / 2) *
77
- Math.sin(dLon / 2);
78
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
79
- return R * c;
80
- }
81
- /**
82
- * Calculate distance between two points
83
- */
84
- function createGeoDistanceTool() {
85
- return {
86
- name: "sqlite_geo_distance",
87
- description: "Calculate the distance between two geographic points using Haversine formula.",
88
- group: "geo",
89
- inputSchema: GeoDistanceSchema,
90
- outputSchema: GeoDistanceOutputSchema,
91
- requiredScopes: ["read"],
92
- annotations: readOnly("Geo Distance"),
93
- handler: (params, _context) => {
94
- const input = GeoDistanceSchema.parse(params);
95
- const distance = haversineDistance(input.lat1, input.lon1, input.lat2, input.lon2, input.unit);
96
- return Promise.resolve({
97
- success: true,
98
- distance: Math.round(distance * 1000) / 1000,
99
- unit: input.unit,
100
- from: { lat: input.lat1, lon: input.lon1 },
101
- to: { lat: input.lat2, lon: input.lon2 },
102
- });
103
- },
104
- };
105
- }
106
- /**
107
- * Find points within radius
108
- */
109
- function createGeoNearbyTool(adapter) {
110
- return {
111
- name: "sqlite_geo_nearby",
112
- description: "Find points within a radius of a center point.",
113
- group: "geo",
114
- inputSchema: GeoNearbySchema,
115
- outputSchema: GeoWithinRadiusOutputSchema,
116
- requiredScopes: ["read"],
117
- annotations: readOnly("Geo Nearby"),
118
- handler: async (params, _context) => {
119
- const input = GeoNearbySchema.parse(params);
120
- // Validate and quote identifiers
121
- const table = sanitizeIdentifier(input.table);
122
- const latColumn = sanitizeIdentifier(input.latColumn);
123
- const lonColumn = sanitizeIdentifier(input.lonColumn);
124
- // Build select
125
- let selectCols = "*";
126
- if (input.returnColumns && input.returnColumns.length > 0) {
127
- const allCols = [
128
- ...input.returnColumns,
129
- input.latColumn,
130
- input.lonColumn,
131
- ];
132
- selectCols = createColumnList(allCols);
133
- }
134
- // Calculate rough bounding box for pre-filtering
135
- const radiusKm = input.unit === "miles"
136
- ? input.radius * 1.60934
137
- : input.unit === "meters"
138
- ? input.radius / 1000
139
- : input.radius;
140
- const latDelta = radiusKm / 111; // ~111km per degree latitude
141
- const lonDelta = radiusKm / (111 * Math.cos((input.centerLat * Math.PI) / 180));
142
- const sql = `SELECT ${selectCols} FROM ${table}
143
- WHERE ${latColumn} BETWEEN ${input.centerLat - latDelta} AND ${input.centerLat + latDelta}
144
- AND ${lonColumn} BETWEEN ${input.centerLon - lonDelta} AND ${input.centerLon + lonDelta}`;
145
- const result = await adapter.executeReadQuery(sql);
146
- // Filter by exact distance
147
- const nearby = (result.rows ?? [])
148
- .map((row) => {
149
- const lat = Number(row[input.latColumn]);
150
- const lon = Number(row[input.lonColumn]);
151
- const distance = haversineDistance(input.centerLat, input.centerLon, lat, lon, input.unit);
152
- return { ...row, _distance: Math.round(distance * 1000) / 1000 };
153
- })
154
- .filter((r) => r._distance <= input.radius)
155
- .sort((a, b) => a._distance - b._distance)
156
- .slice(0, input.limit);
157
- return {
158
- success: true,
159
- rowCount: nearby.length,
160
- results: nearby,
161
- };
162
- },
163
- };
164
- }
165
- /**
166
- * Find points within bounding box
167
- */
168
- function createGeoBoundingBoxTool(adapter) {
169
- return {
170
- name: "sqlite_geo_bounding_box",
171
- description: "Find points within a rectangular bounding box.",
172
- group: "geo",
173
- inputSchema: GeoBoundingBoxSchema,
174
- outputSchema: GeoBoundingBoxOutputSchema,
175
- requiredScopes: ["read"],
176
- annotations: readOnly("Geo Bounding Box"),
177
- handler: async (params, _context) => {
178
- const input = GeoBoundingBoxSchema.parse(params);
179
- // Validate and quote identifiers
180
- const table = sanitizeIdentifier(input.table);
181
- const latColumn = sanitizeIdentifier(input.latColumn);
182
- const lonColumn = sanitizeIdentifier(input.lonColumn);
183
- // Build select
184
- let selectCols = "*";
185
- if (input.returnColumns && input.returnColumns.length > 0) {
186
- selectCols = createColumnList(input.returnColumns);
187
- }
188
- const sql = `SELECT ${selectCols} FROM ${table}
189
- WHERE ${latColumn} BETWEEN ${input.minLat} AND ${input.maxLat}
190
- AND ${lonColumn} BETWEEN ${input.minLon} AND ${input.maxLon}
191
- LIMIT ${input.limit}`;
192
- const result = await adapter.executeReadQuery(sql);
193
- return {
194
- success: true,
195
- rowCount: result.rows?.length ?? 0,
196
- results: result.rows ?? [],
197
- };
198
- },
199
- };
200
- }
201
- /**
202
- * Cluster points by grid
203
- */
204
- function createGeoClusterTool(adapter) {
205
- return {
206
- name: "sqlite_geo_cluster",
207
- description: "Cluster geographic points into grid cells.",
208
- group: "geo",
209
- inputSchema: GeoClusterSchema,
210
- outputSchema: GeoClusterOutputSchema,
211
- requiredScopes: ["read"],
212
- annotations: readOnly("Geo Cluster"),
213
- handler: async (params, _context) => {
214
- const input = GeoClusterSchema.parse(params);
215
- // Validate and quote identifiers
216
- const table = sanitizeIdentifier(input.table);
217
- const latColumn = sanitizeIdentifier(input.latColumn);
218
- const lonColumn = sanitizeIdentifier(input.lonColumn);
219
- // Security: Validate WHERE clause if provided
220
- if (input.whereClause) {
221
- validateWhereClause(input.whereClause);
222
- }
223
- // Use ROUND to create grid cells
224
- const gridSize = input.gridSize;
225
- const sql = `SELECT
226
- ROUND(${latColumn} / ${gridSize}) * ${gridSize} as grid_lat,
227
- ROUND(${lonColumn} / ${gridSize}) * ${gridSize} as grid_lon,
228
- COUNT(*) as point_count,
229
- AVG(${latColumn}) as center_lat,
230
- AVG(${lonColumn}) as center_lon
231
- FROM ${table}
232
- ${input.whereClause ? `WHERE ${input.whereClause}` : ""}
233
- GROUP BY grid_lat, grid_lon
234
- ORDER BY point_count DESC`;
235
- const result = await adapter.executeReadQuery(sql);
236
- // Transform raw SQL results to match output schema
237
- const clusters = (result.rows ?? []).map((row, index) => ({
238
- clusterId: index + 1,
239
- center: {
240
- latitude: Number(row["center_lat"]) || 0,
241
- longitude: Number(row["center_lon"]) || 0,
242
- },
243
- pointCount: Number(row["point_count"]) || 0,
244
- }));
245
- return {
246
- success: true,
247
- clusters,
248
- };
249
- },
250
- };
251
- }
252
- //# sourceMappingURL=geo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../../../src/adapters/sqlite/tools/geo.ts"],"names":[],"mappings":"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"}