@qwickapps/qwickbrain-proxy 1.0.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 (90) hide show
  1. package/.github/workflows/publish.yml +92 -0
  2. package/CHANGELOG.md +47 -0
  3. package/LICENSE +45 -0
  4. package/README.md +165 -0
  5. package/dist/bin/cli.d.ts +3 -0
  6. package/dist/bin/cli.d.ts.map +1 -0
  7. package/dist/bin/cli.js +142 -0
  8. package/dist/bin/cli.js.map +1 -0
  9. package/dist/db/client.d.ts +10 -0
  10. package/dist/db/client.d.ts.map +1 -0
  11. package/dist/db/client.js +23 -0
  12. package/dist/db/client.js.map +1 -0
  13. package/dist/db/schema.d.ts +551 -0
  14. package/dist/db/schema.d.ts.map +1 -0
  15. package/dist/db/schema.js +65 -0
  16. package/dist/db/schema.js.map +1 -0
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +5 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/lib/__tests__/cache-manager.test.d.ts +2 -0
  22. package/dist/lib/__tests__/cache-manager.test.d.ts.map +1 -0
  23. package/dist/lib/__tests__/cache-manager.test.js +202 -0
  24. package/dist/lib/__tests__/cache-manager.test.js.map +1 -0
  25. package/dist/lib/__tests__/connection-manager.test.d.ts +2 -0
  26. package/dist/lib/__tests__/connection-manager.test.d.ts.map +1 -0
  27. package/dist/lib/__tests__/connection-manager.test.js +188 -0
  28. package/dist/lib/__tests__/connection-manager.test.js.map +1 -0
  29. package/dist/lib/__tests__/proxy-server.test.d.ts +2 -0
  30. package/dist/lib/__tests__/proxy-server.test.d.ts.map +1 -0
  31. package/dist/lib/__tests__/proxy-server.test.js +205 -0
  32. package/dist/lib/__tests__/proxy-server.test.js.map +1 -0
  33. package/dist/lib/__tests__/qwickbrain-client.test.d.ts +2 -0
  34. package/dist/lib/__tests__/qwickbrain-client.test.d.ts.map +1 -0
  35. package/dist/lib/__tests__/qwickbrain-client.test.js +233 -0
  36. package/dist/lib/__tests__/qwickbrain-client.test.js.map +1 -0
  37. package/dist/lib/cache-manager.d.ts +25 -0
  38. package/dist/lib/cache-manager.d.ts.map +1 -0
  39. package/dist/lib/cache-manager.js +149 -0
  40. package/dist/lib/cache-manager.js.map +1 -0
  41. package/dist/lib/connection-manager.d.ts +26 -0
  42. package/dist/lib/connection-manager.d.ts.map +1 -0
  43. package/dist/lib/connection-manager.js +130 -0
  44. package/dist/lib/connection-manager.js.map +1 -0
  45. package/dist/lib/proxy-server.d.ts +19 -0
  46. package/dist/lib/proxy-server.d.ts.map +1 -0
  47. package/dist/lib/proxy-server.js +258 -0
  48. package/dist/lib/proxy-server.js.map +1 -0
  49. package/dist/lib/qwickbrain-client.d.ts +24 -0
  50. package/dist/lib/qwickbrain-client.d.ts.map +1 -0
  51. package/dist/lib/qwickbrain-client.js +197 -0
  52. package/dist/lib/qwickbrain-client.js.map +1 -0
  53. package/dist/types/config.d.ts +186 -0
  54. package/dist/types/config.d.ts.map +1 -0
  55. package/dist/types/config.js +42 -0
  56. package/dist/types/config.js.map +1 -0
  57. package/dist/types/mcp.d.ts +223 -0
  58. package/dist/types/mcp.d.ts.map +1 -0
  59. package/dist/types/mcp.js +78 -0
  60. package/dist/types/mcp.js.map +1 -0
  61. package/dist/version.d.ts +2 -0
  62. package/dist/version.d.ts.map +1 -0
  63. package/dist/version.js +9 -0
  64. package/dist/version.js.map +1 -0
  65. package/drizzle/0000_fat_rafael_vega.sql +41 -0
  66. package/drizzle/0001_goofy_invisible_woman.sql +2 -0
  67. package/drizzle/meta/0000_snapshot.json +276 -0
  68. package/drizzle/meta/0001_snapshot.json +295 -0
  69. package/drizzle/meta/_journal.json +20 -0
  70. package/drizzle.config.ts +12 -0
  71. package/package.json +65 -0
  72. package/src/bin/cli.ts +158 -0
  73. package/src/db/client.ts +34 -0
  74. package/src/db/schema.ts +68 -0
  75. package/src/index.ts +6 -0
  76. package/src/lib/__tests__/cache-manager.test.ts +264 -0
  77. package/src/lib/__tests__/connection-manager.test.ts +255 -0
  78. package/src/lib/__tests__/proxy-server.test.ts +261 -0
  79. package/src/lib/__tests__/qwickbrain-client.test.ts +310 -0
  80. package/src/lib/cache-manager.ts +201 -0
  81. package/src/lib/connection-manager.ts +156 -0
  82. package/src/lib/proxy-server.ts +320 -0
  83. package/src/lib/qwickbrain-client.ts +260 -0
  84. package/src/types/config.ts +47 -0
  85. package/src/types/mcp.ts +97 -0
  86. package/src/version.ts +11 -0
  87. package/test/fixtures/test-mcp.json +5 -0
  88. package/test-mcp-client.js +67 -0
  89. package/test-proxy.sh +25 -0
  90. package/tsconfig.json +22 -0
@@ -0,0 +1,276 @@
1
+ {
2
+ "version": "6",
3
+ "dialect": "sqlite",
4
+ "id": "a7e5247d-4cf6-4d2e-9bf3-08510d62dd3a",
5
+ "prevId": "00000000-0000-0000-0000-000000000000",
6
+ "tables": {
7
+ "connection_log": {
8
+ "name": "connection_log",
9
+ "columns": {
10
+ "id": {
11
+ "name": "id",
12
+ "type": "integer",
13
+ "primaryKey": true,
14
+ "notNull": true,
15
+ "autoincrement": true
16
+ },
17
+ "timestamp": {
18
+ "name": "timestamp",
19
+ "type": "integer",
20
+ "primaryKey": false,
21
+ "notNull": true,
22
+ "autoincrement": false,
23
+ "default": "(unixepoch())"
24
+ },
25
+ "state": {
26
+ "name": "state",
27
+ "type": "text",
28
+ "primaryKey": false,
29
+ "notNull": true,
30
+ "autoincrement": false
31
+ },
32
+ "latency_ms": {
33
+ "name": "latency_ms",
34
+ "type": "integer",
35
+ "primaryKey": false,
36
+ "notNull": false,
37
+ "autoincrement": false
38
+ },
39
+ "error": {
40
+ "name": "error",
41
+ "type": "text",
42
+ "primaryKey": false,
43
+ "notNull": false,
44
+ "autoincrement": false
45
+ }
46
+ },
47
+ "indexes": {},
48
+ "foreignKeys": {},
49
+ "compositePrimaryKeys": {},
50
+ "uniqueConstraints": {},
51
+ "checkConstraints": {}
52
+ },
53
+ "documents": {
54
+ "name": "documents",
55
+ "columns": {
56
+ "id": {
57
+ "name": "id",
58
+ "type": "integer",
59
+ "primaryKey": true,
60
+ "notNull": true,
61
+ "autoincrement": true
62
+ },
63
+ "doc_type": {
64
+ "name": "doc_type",
65
+ "type": "text",
66
+ "primaryKey": false,
67
+ "notNull": true,
68
+ "autoincrement": false
69
+ },
70
+ "name": {
71
+ "name": "name",
72
+ "type": "text",
73
+ "primaryKey": false,
74
+ "notNull": true,
75
+ "autoincrement": false
76
+ },
77
+ "project": {
78
+ "name": "project",
79
+ "type": "text",
80
+ "primaryKey": false,
81
+ "notNull": false,
82
+ "autoincrement": false
83
+ },
84
+ "content": {
85
+ "name": "content",
86
+ "type": "text",
87
+ "primaryKey": false,
88
+ "notNull": true,
89
+ "autoincrement": false
90
+ },
91
+ "metadata": {
92
+ "name": "metadata",
93
+ "type": "text",
94
+ "primaryKey": false,
95
+ "notNull": false,
96
+ "autoincrement": false
97
+ },
98
+ "cached_at": {
99
+ "name": "cached_at",
100
+ "type": "integer",
101
+ "primaryKey": false,
102
+ "notNull": true,
103
+ "autoincrement": false,
104
+ "default": "(unixepoch())"
105
+ },
106
+ "expires_at": {
107
+ "name": "expires_at",
108
+ "type": "integer",
109
+ "primaryKey": false,
110
+ "notNull": true,
111
+ "autoincrement": false
112
+ },
113
+ "synced": {
114
+ "name": "synced",
115
+ "type": "integer",
116
+ "primaryKey": false,
117
+ "notNull": true,
118
+ "autoincrement": false,
119
+ "default": true
120
+ }
121
+ },
122
+ "indexes": {},
123
+ "foreignKeys": {},
124
+ "compositePrimaryKeys": {},
125
+ "uniqueConstraints": {},
126
+ "checkConstraints": {}
127
+ },
128
+ "memories": {
129
+ "name": "memories",
130
+ "columns": {
131
+ "id": {
132
+ "name": "id",
133
+ "type": "integer",
134
+ "primaryKey": true,
135
+ "notNull": true,
136
+ "autoincrement": true
137
+ },
138
+ "name": {
139
+ "name": "name",
140
+ "type": "text",
141
+ "primaryKey": false,
142
+ "notNull": true,
143
+ "autoincrement": false
144
+ },
145
+ "project": {
146
+ "name": "project",
147
+ "type": "text",
148
+ "primaryKey": false,
149
+ "notNull": false,
150
+ "autoincrement": false
151
+ },
152
+ "content": {
153
+ "name": "content",
154
+ "type": "text",
155
+ "primaryKey": false,
156
+ "notNull": true,
157
+ "autoincrement": false
158
+ },
159
+ "metadata": {
160
+ "name": "metadata",
161
+ "type": "text",
162
+ "primaryKey": false,
163
+ "notNull": false,
164
+ "autoincrement": false
165
+ },
166
+ "cached_at": {
167
+ "name": "cached_at",
168
+ "type": "integer",
169
+ "primaryKey": false,
170
+ "notNull": true,
171
+ "autoincrement": false,
172
+ "default": "(unixepoch())"
173
+ },
174
+ "expires_at": {
175
+ "name": "expires_at",
176
+ "type": "integer",
177
+ "primaryKey": false,
178
+ "notNull": true,
179
+ "autoincrement": false
180
+ },
181
+ "synced": {
182
+ "name": "synced",
183
+ "type": "integer",
184
+ "primaryKey": false,
185
+ "notNull": true,
186
+ "autoincrement": false,
187
+ "default": true
188
+ }
189
+ },
190
+ "indexes": {},
191
+ "foreignKeys": {},
192
+ "compositePrimaryKeys": {},
193
+ "uniqueConstraints": {},
194
+ "checkConstraints": {}
195
+ },
196
+ "sync_queue": {
197
+ "name": "sync_queue",
198
+ "columns": {
199
+ "id": {
200
+ "name": "id",
201
+ "type": "integer",
202
+ "primaryKey": true,
203
+ "notNull": true,
204
+ "autoincrement": true
205
+ },
206
+ "operation": {
207
+ "name": "operation",
208
+ "type": "text",
209
+ "primaryKey": false,
210
+ "notNull": true,
211
+ "autoincrement": false
212
+ },
213
+ "payload": {
214
+ "name": "payload",
215
+ "type": "text",
216
+ "primaryKey": false,
217
+ "notNull": true,
218
+ "autoincrement": false
219
+ },
220
+ "created_at": {
221
+ "name": "created_at",
222
+ "type": "integer",
223
+ "primaryKey": false,
224
+ "notNull": true,
225
+ "autoincrement": false,
226
+ "default": "(unixepoch())"
227
+ },
228
+ "status": {
229
+ "name": "status",
230
+ "type": "text",
231
+ "primaryKey": false,
232
+ "notNull": true,
233
+ "autoincrement": false,
234
+ "default": "'pending'"
235
+ },
236
+ "error": {
237
+ "name": "error",
238
+ "type": "text",
239
+ "primaryKey": false,
240
+ "notNull": false,
241
+ "autoincrement": false
242
+ },
243
+ "attempts": {
244
+ "name": "attempts",
245
+ "type": "integer",
246
+ "primaryKey": false,
247
+ "notNull": true,
248
+ "autoincrement": false,
249
+ "default": 0
250
+ },
251
+ "last_attempt_at": {
252
+ "name": "last_attempt_at",
253
+ "type": "integer",
254
+ "primaryKey": false,
255
+ "notNull": false,
256
+ "autoincrement": false
257
+ }
258
+ },
259
+ "indexes": {},
260
+ "foreignKeys": {},
261
+ "compositePrimaryKeys": {},
262
+ "uniqueConstraints": {},
263
+ "checkConstraints": {}
264
+ }
265
+ },
266
+ "views": {},
267
+ "enums": {},
268
+ "_meta": {
269
+ "schemas": {},
270
+ "tables": {},
271
+ "columns": {}
272
+ },
273
+ "internal": {
274
+ "indexes": {}
275
+ }
276
+ }
@@ -0,0 +1,295 @@
1
+ {
2
+ "version": "6",
3
+ "dialect": "sqlite",
4
+ "id": "bf3d4ed9-5623-4d26-a480-199527c3cf59",
5
+ "prevId": "a7e5247d-4cf6-4d2e-9bf3-08510d62dd3a",
6
+ "tables": {
7
+ "connection_log": {
8
+ "name": "connection_log",
9
+ "columns": {
10
+ "id": {
11
+ "name": "id",
12
+ "type": "integer",
13
+ "primaryKey": true,
14
+ "notNull": true,
15
+ "autoincrement": true
16
+ },
17
+ "timestamp": {
18
+ "name": "timestamp",
19
+ "type": "integer",
20
+ "primaryKey": false,
21
+ "notNull": true,
22
+ "autoincrement": false,
23
+ "default": "(unixepoch())"
24
+ },
25
+ "state": {
26
+ "name": "state",
27
+ "type": "text",
28
+ "primaryKey": false,
29
+ "notNull": true,
30
+ "autoincrement": false
31
+ },
32
+ "latency_ms": {
33
+ "name": "latency_ms",
34
+ "type": "integer",
35
+ "primaryKey": false,
36
+ "notNull": false,
37
+ "autoincrement": false
38
+ },
39
+ "error": {
40
+ "name": "error",
41
+ "type": "text",
42
+ "primaryKey": false,
43
+ "notNull": false,
44
+ "autoincrement": false
45
+ }
46
+ },
47
+ "indexes": {},
48
+ "foreignKeys": {},
49
+ "compositePrimaryKeys": {},
50
+ "uniqueConstraints": {},
51
+ "checkConstraints": {}
52
+ },
53
+ "documents": {
54
+ "name": "documents",
55
+ "columns": {
56
+ "id": {
57
+ "name": "id",
58
+ "type": "integer",
59
+ "primaryKey": true,
60
+ "notNull": true,
61
+ "autoincrement": true
62
+ },
63
+ "doc_type": {
64
+ "name": "doc_type",
65
+ "type": "text",
66
+ "primaryKey": false,
67
+ "notNull": true,
68
+ "autoincrement": false
69
+ },
70
+ "name": {
71
+ "name": "name",
72
+ "type": "text",
73
+ "primaryKey": false,
74
+ "notNull": true,
75
+ "autoincrement": false
76
+ },
77
+ "project": {
78
+ "name": "project",
79
+ "type": "text",
80
+ "primaryKey": false,
81
+ "notNull": false,
82
+ "autoincrement": false
83
+ },
84
+ "content": {
85
+ "name": "content",
86
+ "type": "text",
87
+ "primaryKey": false,
88
+ "notNull": true,
89
+ "autoincrement": false
90
+ },
91
+ "metadata": {
92
+ "name": "metadata",
93
+ "type": "text",
94
+ "primaryKey": false,
95
+ "notNull": false,
96
+ "autoincrement": false
97
+ },
98
+ "cached_at": {
99
+ "name": "cached_at",
100
+ "type": "integer",
101
+ "primaryKey": false,
102
+ "notNull": true,
103
+ "autoincrement": false,
104
+ "default": "(unixepoch())"
105
+ },
106
+ "expires_at": {
107
+ "name": "expires_at",
108
+ "type": "integer",
109
+ "primaryKey": false,
110
+ "notNull": true,
111
+ "autoincrement": false
112
+ },
113
+ "synced": {
114
+ "name": "synced",
115
+ "type": "integer",
116
+ "primaryKey": false,
117
+ "notNull": true,
118
+ "autoincrement": false,
119
+ "default": true
120
+ }
121
+ },
122
+ "indexes": {
123
+ "documents_doc_type_name_project_unique": {
124
+ "name": "documents_doc_type_name_project_unique",
125
+ "columns": [
126
+ "doc_type",
127
+ "name",
128
+ "project"
129
+ ],
130
+ "isUnique": true
131
+ }
132
+ },
133
+ "foreignKeys": {},
134
+ "compositePrimaryKeys": {},
135
+ "uniqueConstraints": {},
136
+ "checkConstraints": {}
137
+ },
138
+ "memories": {
139
+ "name": "memories",
140
+ "columns": {
141
+ "id": {
142
+ "name": "id",
143
+ "type": "integer",
144
+ "primaryKey": true,
145
+ "notNull": true,
146
+ "autoincrement": true
147
+ },
148
+ "name": {
149
+ "name": "name",
150
+ "type": "text",
151
+ "primaryKey": false,
152
+ "notNull": true,
153
+ "autoincrement": false
154
+ },
155
+ "project": {
156
+ "name": "project",
157
+ "type": "text",
158
+ "primaryKey": false,
159
+ "notNull": false,
160
+ "autoincrement": false
161
+ },
162
+ "content": {
163
+ "name": "content",
164
+ "type": "text",
165
+ "primaryKey": false,
166
+ "notNull": true,
167
+ "autoincrement": false
168
+ },
169
+ "metadata": {
170
+ "name": "metadata",
171
+ "type": "text",
172
+ "primaryKey": false,
173
+ "notNull": false,
174
+ "autoincrement": false
175
+ },
176
+ "cached_at": {
177
+ "name": "cached_at",
178
+ "type": "integer",
179
+ "primaryKey": false,
180
+ "notNull": true,
181
+ "autoincrement": false,
182
+ "default": "(unixepoch())"
183
+ },
184
+ "expires_at": {
185
+ "name": "expires_at",
186
+ "type": "integer",
187
+ "primaryKey": false,
188
+ "notNull": true,
189
+ "autoincrement": false
190
+ },
191
+ "synced": {
192
+ "name": "synced",
193
+ "type": "integer",
194
+ "primaryKey": false,
195
+ "notNull": true,
196
+ "autoincrement": false,
197
+ "default": true
198
+ }
199
+ },
200
+ "indexes": {
201
+ "memories_name_project_unique": {
202
+ "name": "memories_name_project_unique",
203
+ "columns": [
204
+ "name",
205
+ "project"
206
+ ],
207
+ "isUnique": true
208
+ }
209
+ },
210
+ "foreignKeys": {},
211
+ "compositePrimaryKeys": {},
212
+ "uniqueConstraints": {},
213
+ "checkConstraints": {}
214
+ },
215
+ "sync_queue": {
216
+ "name": "sync_queue",
217
+ "columns": {
218
+ "id": {
219
+ "name": "id",
220
+ "type": "integer",
221
+ "primaryKey": true,
222
+ "notNull": true,
223
+ "autoincrement": true
224
+ },
225
+ "operation": {
226
+ "name": "operation",
227
+ "type": "text",
228
+ "primaryKey": false,
229
+ "notNull": true,
230
+ "autoincrement": false
231
+ },
232
+ "payload": {
233
+ "name": "payload",
234
+ "type": "text",
235
+ "primaryKey": false,
236
+ "notNull": true,
237
+ "autoincrement": false
238
+ },
239
+ "created_at": {
240
+ "name": "created_at",
241
+ "type": "integer",
242
+ "primaryKey": false,
243
+ "notNull": true,
244
+ "autoincrement": false,
245
+ "default": "(unixepoch())"
246
+ },
247
+ "status": {
248
+ "name": "status",
249
+ "type": "text",
250
+ "primaryKey": false,
251
+ "notNull": true,
252
+ "autoincrement": false,
253
+ "default": "'pending'"
254
+ },
255
+ "error": {
256
+ "name": "error",
257
+ "type": "text",
258
+ "primaryKey": false,
259
+ "notNull": false,
260
+ "autoincrement": false
261
+ },
262
+ "attempts": {
263
+ "name": "attempts",
264
+ "type": "integer",
265
+ "primaryKey": false,
266
+ "notNull": true,
267
+ "autoincrement": false,
268
+ "default": 0
269
+ },
270
+ "last_attempt_at": {
271
+ "name": "last_attempt_at",
272
+ "type": "integer",
273
+ "primaryKey": false,
274
+ "notNull": false,
275
+ "autoincrement": false
276
+ }
277
+ },
278
+ "indexes": {},
279
+ "foreignKeys": {},
280
+ "compositePrimaryKeys": {},
281
+ "uniqueConstraints": {},
282
+ "checkConstraints": {}
283
+ }
284
+ },
285
+ "views": {},
286
+ "enums": {},
287
+ "_meta": {
288
+ "schemas": {},
289
+ "tables": {},
290
+ "columns": {}
291
+ },
292
+ "internal": {
293
+ "indexes": {}
294
+ }
295
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "sqlite",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "6",
8
+ "when": 1767839740745,
9
+ "tag": "0000_fat_rafael_vega",
10
+ "breakpoints": true
11
+ },
12
+ {
13
+ "idx": 1,
14
+ "version": "6",
15
+ "when": 1767846667620,
16
+ "tag": "0001_goofy_invisible_woman",
17
+ "breakpoints": true
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,12 @@
1
+ import type { Config } from 'drizzle-kit';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+
5
+ export default {
6
+ schema: './src/db/schema.ts',
7
+ out: './drizzle',
8
+ dialect: 'sqlite',
9
+ dbCredentials: {
10
+ url: join(homedir(), '.qwickbrain', 'cache', 'qwickbrain.db'),
11
+ },
12
+ } satisfies Config;
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@qwickapps/qwickbrain-proxy",
3
+ "version": "1.0.0",
4
+ "description": "Local MCP proxy for QwickBrain with caching and resilience",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "qwickbrain-proxy": "dist/bin/cli.js"
9
+ },
10
+ "type": "module",
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx watch src/bin/cli.ts serve",
14
+ "start": "node dist/bin/cli.js serve",
15
+ "test": "vitest",
16
+ "lint": "eslint src",
17
+ "format": "prettier --write 'src/**/*.ts'",
18
+ "typecheck": "tsc --noEmit",
19
+ "db:generate": "drizzle-kit generate",
20
+ "db:migrate": "drizzle-kit migrate",
21
+ "db:studio": "drizzle-kit studio"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "qwickbrain",
27
+ "proxy",
28
+ "cache",
29
+ "ai",
30
+ "code-analysis"
31
+ ],
32
+ "author": "QwickApps <legal@qwickapps.com>",
33
+ "license": "PolyForm-Shield-1.0.0",
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/qwickapps/qwickbrain-proxy.git"
40
+ },
41
+ "homepage": "https://github.com/qwickapps/qwickbrain-proxy#readme",
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.0.0",
47
+ "better-sqlite3": "^11.0.0",
48
+ "commander": "^12.0.0",
49
+ "drizzle-orm": "^0.36.0",
50
+ "node-fetch": "^3.3.2",
51
+ "zod": "^3.23.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/better-sqlite3": "^7.6.0",
55
+ "@types/node": "^20.0.0",
56
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
57
+ "@typescript-eslint/parser": "^7.0.0",
58
+ "drizzle-kit": "^0.31.8",
59
+ "eslint": "^8.57.0",
60
+ "prettier": "^3.0.0",
61
+ "tsx": "^4.0.0",
62
+ "typescript": "^5.3.0",
63
+ "vitest": "^2.0.0"
64
+ }
65
+ }