@neverinfamous/postgres-mcp 1.2.0 → 2.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 (293) hide show
  1. package/README.md +202 -148
  2. package/dist/__tests__/benchmarks/codemode.bench.d.ts +10 -0
  3. package/dist/__tests__/benchmarks/codemode.bench.d.ts.map +1 -0
  4. package/dist/__tests__/benchmarks/codemode.bench.js +159 -0
  5. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -0
  6. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts +10 -0
  7. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts.map +1 -0
  8. package/dist/__tests__/benchmarks/connection-pool.bench.js +123 -0
  9. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -0
  10. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts +11 -0
  11. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts.map +1 -0
  12. package/dist/__tests__/benchmarks/handler-dispatch.bench.js +199 -0
  13. package/dist/__tests__/benchmarks/handler-dispatch.bench.js.map +1 -0
  14. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts +15 -0
  15. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts.map +1 -0
  16. package/dist/__tests__/benchmarks/logger-sanitization.bench.js +155 -0
  17. package/dist/__tests__/benchmarks/logger-sanitization.bench.js.map +1 -0
  18. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts +10 -0
  19. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts.map +1 -0
  20. package/dist/__tests__/benchmarks/resource-prompts.bench.js +181 -0
  21. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -0
  22. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts +11 -0
  23. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts.map +1 -0
  24. package/dist/__tests__/benchmarks/schema-parsing.bench.js +209 -0
  25. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -0
  26. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts +9 -0
  27. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts.map +1 -0
  28. package/dist/__tests__/benchmarks/tool-filtering.bench.js +83 -0
  29. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -0
  30. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts +10 -0
  31. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts.map +1 -0
  32. package/dist/__tests__/benchmarks/transport-auth.bench.js +128 -0
  33. package/dist/__tests__/benchmarks/transport-auth.bench.js.map +1 -0
  34. package/dist/__tests__/benchmarks/utilities.bench.d.ts +10 -0
  35. package/dist/__tests__/benchmarks/utilities.bench.d.ts.map +1 -0
  36. package/dist/__tests__/benchmarks/utilities.bench.js +164 -0
  37. package/dist/__tests__/benchmarks/utilities.bench.js.map +1 -0
  38. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  39. package/dist/adapters/DatabaseAdapter.js +12 -0
  40. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  41. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/PostgresAdapter.js +56 -3
  43. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  44. package/dist/adapters/postgresql/prompts/ltree.js +2 -2
  45. package/dist/adapters/postgresql/prompts/ltree.js.map +1 -1
  46. package/dist/adapters/postgresql/schemas/admin.d.ts +10 -5
  47. package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -1
  48. package/dist/adapters/postgresql/schemas/admin.js +10 -5
  49. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  50. package/dist/adapters/postgresql/schemas/backup.d.ts +45 -27
  51. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  52. package/dist/adapters/postgresql/schemas/backup.js +64 -26
  53. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  54. package/dist/adapters/postgresql/schemas/core.d.ts +53 -19
  55. package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -1
  56. package/dist/adapters/postgresql/schemas/core.js +61 -17
  57. package/dist/adapters/postgresql/schemas/core.js.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.d.ts +51 -32
  59. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  60. package/dist/adapters/postgresql/schemas/cron.js +64 -44
  61. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  62. package/dist/adapters/postgresql/schemas/extensions.d.ts +224 -110
  63. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
  64. package/dist/adapters/postgresql/schemas/extensions.js +245 -96
  65. package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
  66. package/dist/adapters/postgresql/schemas/index.d.ts +7 -6
  67. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  68. package/dist/adapters/postgresql/schemas/index.js +16 -8
  69. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  70. package/dist/adapters/postgresql/schemas/introspection.d.ts +445 -0
  71. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -0
  72. package/dist/adapters/postgresql/schemas/introspection.js +478 -0
  73. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -0
  74. package/dist/adapters/postgresql/schemas/jsonb.d.ts +102 -42
  75. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
  76. package/dist/adapters/postgresql/schemas/jsonb.js +125 -30
  77. package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
  78. package/dist/adapters/postgresql/schemas/monitoring.d.ts +69 -36
  79. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  80. package/dist/adapters/postgresql/schemas/monitoring.js +98 -40
  81. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  82. package/dist/adapters/postgresql/schemas/partitioning.d.ts +21 -24
  83. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  84. package/dist/adapters/postgresql/schemas/partitioning.js +26 -14
  85. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  86. package/dist/adapters/postgresql/schemas/partman.d.ts +69 -0
  87. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  88. package/dist/adapters/postgresql/schemas/partman.js +46 -33
  89. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  90. package/dist/adapters/postgresql/schemas/performance.d.ts +97 -49
  91. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  92. package/dist/adapters/postgresql/schemas/performance.js +139 -34
  93. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  94. package/dist/adapters/postgresql/schemas/postgis.d.ts +20 -0
  95. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
  96. package/dist/adapters/postgresql/schemas/postgis.js +40 -0
  97. package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
  98. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +50 -30
  99. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  100. package/dist/adapters/postgresql/schemas/schema-mgmt.js +105 -33
  101. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  102. package/dist/adapters/postgresql/schemas/stats.d.ts +33 -20
  103. package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -1
  104. package/dist/adapters/postgresql/schemas/stats.js +36 -20
  105. package/dist/adapters/postgresql/schemas/stats.js.map +1 -1
  106. package/dist/adapters/postgresql/schemas/text-search.d.ts +34 -19
  107. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  108. package/dist/adapters/postgresql/schemas/text-search.js +52 -13
  109. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  110. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  111. package/dist/adapters/postgresql/tools/admin.js +272 -186
  112. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  113. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  114. package/dist/adapters/postgresql/tools/backup/dump.js +376 -350
  115. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  116. package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -1
  117. package/dist/adapters/postgresql/tools/citext.js +333 -243
  118. package/dist/adapters/postgresql/tools/citext.js.map +1 -1
  119. package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -1
  120. package/dist/adapters/postgresql/tools/codemode/index.js +2 -11
  121. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  122. package/dist/adapters/postgresql/tools/core/convenience.d.ts +9 -1
  123. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  124. package/dist/adapters/postgresql/tools/core/convenience.js +101 -19
  125. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  126. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +48 -0
  127. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -0
  128. package/dist/adapters/postgresql/tools/core/error-helpers.js +256 -0
  129. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -0
  130. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  131. package/dist/adapters/postgresql/tools/core/health.js +18 -4
  132. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  133. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  134. package/dist/adapters/postgresql/tools/core/indexes.js +48 -6
  135. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  136. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  137. package/dist/adapters/postgresql/tools/core/objects.js +104 -85
  138. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  139. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  140. package/dist/adapters/postgresql/tools/core/query.js +100 -42
  141. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  142. package/dist/adapters/postgresql/tools/core/schemas.d.ts +51 -25
  143. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  144. package/dist/adapters/postgresql/tools/core/schemas.js +51 -25
  145. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  146. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  147. package/dist/adapters/postgresql/tools/core/tables.js +72 -32
  148. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  149. package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -1
  150. package/dist/adapters/postgresql/tools/cron.js +333 -206
  151. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  152. package/dist/adapters/postgresql/tools/introspection.d.ts +15 -0
  153. package/dist/adapters/postgresql/tools/introspection.d.ts.map +1 -0
  154. package/dist/adapters/postgresql/tools/introspection.js +1682 -0
  155. package/dist/adapters/postgresql/tools/introspection.js.map +1 -0
  156. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
  157. package/dist/adapters/postgresql/tools/jsonb/advanced.js +394 -297
  158. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
  159. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
  160. package/dist/adapters/postgresql/tools/jsonb/basic.js +686 -398
  161. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
  162. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  163. package/dist/adapters/postgresql/tools/kcache.js +278 -246
  164. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  165. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  166. package/dist/adapters/postgresql/tools/ltree.js +137 -38
  167. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  168. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -1
  169. package/dist/adapters/postgresql/tools/monitoring.js +86 -55
  170. package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -1
  172. package/dist/adapters/postgresql/tools/partitioning.js +79 -15
  173. package/dist/adapters/postgresql/tools/partitioning.js.map +1 -1
  174. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  175. package/dist/adapters/postgresql/tools/partman/management.js +43 -56
  176. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  177. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  178. package/dist/adapters/postgresql/tools/partman/operations.js +137 -24
  179. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  180. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  181. package/dist/adapters/postgresql/tools/performance/analysis.js +276 -165
  182. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  183. package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/performance/explain.js +61 -21
  185. package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/performance/monitoring.js +52 -12
  188. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/performance/optimization.js +92 -81
  191. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/performance/stats.js +182 -60
  194. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  196. package/dist/adapters/postgresql/tools/pgcrypto.js +277 -102
  197. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  198. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  199. package/dist/adapters/postgresql/tools/postgis/advanced.js +298 -230
  200. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  201. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  202. package/dist/adapters/postgresql/tools/postgis/basic.js +370 -251
  203. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  204. package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -1
  205. package/dist/adapters/postgresql/tools/postgis/standalone.js +135 -51
  206. package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -1
  207. package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -1
  208. package/dist/adapters/postgresql/tools/schema.js +580 -233
  209. package/dist/adapters/postgresql/tools/schema.js.map +1 -1
  210. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  211. package/dist/adapters/postgresql/tools/stats/advanced.js +567 -506
  212. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  213. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  214. package/dist/adapters/postgresql/tools/stats/basic.js +340 -316
  215. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  216. package/dist/adapters/postgresql/tools/text.d.ts.map +1 -1
  217. package/dist/adapters/postgresql/tools/text.js +690 -337
  218. package/dist/adapters/postgresql/tools/text.js.map +1 -1
  219. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  220. package/dist/adapters/postgresql/tools/transactions.js +157 -50
  221. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  222. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -1
  223. package/dist/adapters/postgresql/tools/vector/advanced.js +18 -0
  224. package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -1
  225. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -1
  226. package/dist/adapters/postgresql/tools/vector/basic.js +100 -53
  227. package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -1
  228. package/dist/auth/auth-context.d.ts +28 -0
  229. package/dist/auth/auth-context.d.ts.map +1 -0
  230. package/dist/auth/auth-context.js +37 -0
  231. package/dist/auth/auth-context.js.map +1 -0
  232. package/dist/auth/scope-map.d.ts +20 -0
  233. package/dist/auth/scope-map.d.ts.map +1 -0
  234. package/dist/auth/scope-map.js +40 -0
  235. package/dist/auth/scope-map.js.map +1 -0
  236. package/dist/auth/scopes.d.ts.map +1 -1
  237. package/dist/auth/scopes.js +2 -0
  238. package/dist/auth/scopes.js.map +1 -1
  239. package/dist/cli.js +1 -1
  240. package/dist/cli.js.map +1 -1
  241. package/dist/codemode/api.d.ts +1 -0
  242. package/dist/codemode/api.d.ts.map +1 -1
  243. package/dist/codemode/api.js +35 -1
  244. package/dist/codemode/api.js.map +1 -1
  245. package/dist/codemode/index.d.ts +0 -2
  246. package/dist/codemode/index.d.ts.map +1 -1
  247. package/dist/codemode/index.js +0 -4
  248. package/dist/codemode/index.js.map +1 -1
  249. package/dist/codemode/sandbox.d.ts +14 -1
  250. package/dist/codemode/sandbox.d.ts.map +1 -1
  251. package/dist/codemode/sandbox.js +58 -19
  252. package/dist/codemode/sandbox.js.map +1 -1
  253. package/dist/codemode/types.d.ts.map +1 -1
  254. package/dist/codemode/types.js +3 -0
  255. package/dist/codemode/types.js.map +1 -1
  256. package/dist/constants/ServerInstructions.d.ts +5 -1
  257. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  258. package/dist/constants/ServerInstructions.js +117 -31
  259. package/dist/constants/ServerInstructions.js.map +1 -1
  260. package/dist/filtering/ToolConstants.d.ts +22 -19
  261. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  262. package/dist/filtering/ToolConstants.js +48 -37
  263. package/dist/filtering/ToolConstants.js.map +1 -1
  264. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  265. package/dist/filtering/ToolFilter.js +10 -13
  266. package/dist/filtering/ToolFilter.js.map +1 -1
  267. package/dist/pool/ConnectionPool.js +1 -1
  268. package/dist/pool/ConnectionPool.js.map +1 -1
  269. package/dist/transports/http.d.ts +1 -0
  270. package/dist/transports/http.d.ts.map +1 -1
  271. package/dist/transports/http.js +75 -21
  272. package/dist/transports/http.js.map +1 -1
  273. package/dist/types/filtering.d.ts +2 -2
  274. package/dist/types/filtering.d.ts.map +1 -1
  275. package/dist/utils/icons.d.ts.map +1 -1
  276. package/dist/utils/icons.js +5 -0
  277. package/dist/utils/icons.js.map +1 -1
  278. package/dist/utils/where-clause.d.ts.map +1 -1
  279. package/dist/utils/where-clause.js +24 -0
  280. package/dist/utils/where-clause.js.map +1 -1
  281. package/package.json +20 -13
  282. package/dist/codemode/sandbox-factory.d.ts +0 -72
  283. package/dist/codemode/sandbox-factory.d.ts.map +0 -1
  284. package/dist/codemode/sandbox-factory.js +0 -88
  285. package/dist/codemode/sandbox-factory.js.map +0 -1
  286. package/dist/codemode/worker-sandbox.d.ts +0 -82
  287. package/dist/codemode/worker-sandbox.d.ts.map +0 -1
  288. package/dist/codemode/worker-sandbox.js +0 -244
  289. package/dist/codemode/worker-sandbox.js.map +0 -1
  290. package/dist/codemode/worker-script.d.ts +0 -8
  291. package/dist/codemode/worker-script.d.ts.map +0 -1
  292. package/dist/codemode/worker-script.js +0 -113
  293. package/dist/codemode/worker-script.js.map +0 -1
@@ -1,72 +0,0 @@
1
- /**
2
- * postgres-mcp - Sandbox Factory
3
- *
4
- * Factory functions for creating sandbox instances with configurable isolation modes.
5
- * Allows runtime selection between vm-based and worker-based sandboxes.
6
- */
7
- import type { SandboxOptions, PoolOptions, SandboxResult } from "./types.js";
8
- /**
9
- * Sandbox isolation mode
10
- */
11
- export type SandboxMode = "vm" | "worker";
12
- /**
13
- * Unified sandbox interface
14
- */
15
- export interface ISandbox {
16
- execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
17
- isHealthy(): boolean;
18
- dispose(): void;
19
- }
20
- /**
21
- * Unified sandbox pool interface
22
- */
23
- export interface ISandboxPool {
24
- initialize(): void;
25
- execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
26
- getStats(): {
27
- available: number;
28
- inUse: number;
29
- max: number;
30
- };
31
- dispose(): void;
32
- }
33
- /**
34
- * Mode info for documentation/selection
35
- */
36
- export interface SandboxModeInfo {
37
- name: string;
38
- isolation: string;
39
- performance: string;
40
- security: string;
41
- requirements: string;
42
- }
43
- /**
44
- * Set the default sandbox mode
45
- */
46
- export declare function setDefaultSandboxMode(mode: SandboxMode): void;
47
- /**
48
- * Get the current default mode
49
- */
50
- export declare function getDefaultSandboxMode(): SandboxMode;
51
- /**
52
- * Get available sandbox modes
53
- */
54
- export declare function getAvailableSandboxModes(): SandboxMode[];
55
- /**
56
- * Create a sandbox instance
57
- * @param mode - Isolation mode ('vm' or 'worker')
58
- * @param options - Sandbox options
59
- */
60
- export declare function createSandbox(mode?: SandboxMode, options?: SandboxOptions): ISandbox;
61
- /**
62
- * Create a sandbox pool
63
- * @param mode - Isolation mode ('vm' or 'worker')
64
- * @param poolOptions - Pool configuration
65
- * @param sandboxOptions - Sandbox configuration
66
- */
67
- export declare function createSandboxPool(mode?: SandboxMode, poolOptions?: PoolOptions, sandboxOptions?: SandboxOptions): ISandboxPool;
68
- /**
69
- * Get mode characteristics for documentation/selection
70
- */
71
- export declare function getSandboxModeInfo(mode: SandboxMode): SandboxModeInfo;
72
- //# sourceMappingURL=sandbox-factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox-factory.d.ts","sourceRoot":"","sources":["../../src/codemode/sandbox-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,EAAE,CAExD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,QAAQ,CAUV;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,CAAC,EAAE,WAAW,EAClB,WAAW,CAAC,EAAE,WAAW,EACzB,cAAc,CAAC,EAAE,cAAc,GAC9B,YAAY,CAUd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAoBrE"}
@@ -1,88 +0,0 @@
1
- /**
2
- * postgres-mcp - Sandbox Factory
3
- *
4
- * Factory functions for creating sandbox instances with configurable isolation modes.
5
- * Allows runtime selection between vm-based and worker-based sandboxes.
6
- */
7
- import { CodeModeSandbox, SandboxPool } from "./sandbox.js";
8
- import { WorkerSandbox, WorkerSandboxPool } from "./worker-sandbox.js";
9
- import { logger } from "../utils/logger.js";
10
- // Default mode (module-level state)
11
- let defaultMode = "vm";
12
- /**
13
- * Set the default sandbox mode
14
- */
15
- export function setDefaultSandboxMode(mode) {
16
- defaultMode = mode;
17
- logger.info(`Sandbox default mode set to: ${mode}`, {
18
- module: "CODEMODE",
19
- });
20
- }
21
- /**
22
- * Get the current default mode
23
- */
24
- export function getDefaultSandboxMode() {
25
- return defaultMode;
26
- }
27
- /**
28
- * Get available sandbox modes
29
- */
30
- export function getAvailableSandboxModes() {
31
- return ["vm", "worker"];
32
- }
33
- /**
34
- * Create a sandbox instance
35
- * @param mode - Isolation mode ('vm' or 'worker')
36
- * @param options - Sandbox options
37
- */
38
- export function createSandbox(mode, options) {
39
- const selectedMode = mode ?? defaultMode;
40
- switch (selectedMode) {
41
- case "worker":
42
- return WorkerSandbox.create(options);
43
- case "vm":
44
- default:
45
- return CodeModeSandbox.create(options);
46
- }
47
- }
48
- /**
49
- * Create a sandbox pool
50
- * @param mode - Isolation mode ('vm' or 'worker')
51
- * @param poolOptions - Pool configuration
52
- * @param sandboxOptions - Sandbox configuration
53
- */
54
- export function createSandboxPool(mode, poolOptions, sandboxOptions) {
55
- const selectedMode = mode ?? defaultMode;
56
- switch (selectedMode) {
57
- case "worker":
58
- return new WorkerSandboxPool(poolOptions, sandboxOptions);
59
- case "vm":
60
- default:
61
- return new SandboxPool(poolOptions, sandboxOptions);
62
- }
63
- }
64
- /**
65
- * Get mode characteristics for documentation/selection
66
- */
67
- export function getSandboxModeInfo(mode) {
68
- switch (mode) {
69
- case "worker":
70
- return {
71
- name: "Worker Thread",
72
- isolation: "Separate V8 instance per worker",
73
- performance: "Higher overhead (thread spawn per execution)",
74
- security: "Enhanced - isolated memory, hard timeouts",
75
- requirements: "Node.js worker_threads (built-in)",
76
- };
77
- case "vm":
78
- default:
79
- return {
80
- name: "VM Context",
81
- isolation: "Script isolation within same process",
82
- performance: "Low overhead (reusable contexts)",
83
- security: "Standard - script isolation, blocked globals",
84
- requirements: "Node.js vm module (built-in)",
85
- };
86
- }
87
- }
88
- //# sourceMappingURL=sandbox-factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox-factory.js","sourceRoot":"","sources":["../../src/codemode/sandbox-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4C5C,oCAAoC;AACpC,IAAI,WAAW,GAAgB,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,WAAW,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,EAAE;QAClD,MAAM,EAAE,UAAmB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAkB,EAClB,OAAwB;IAExB,MAAM,YAAY,GAAG,IAAI,IAAI,WAAW,CAAC;IAEzC,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC;QACV;YACE,OAAO,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,WAAyB,EACzB,cAA+B;IAE/B,MAAM,YAAY,GAAG,IAAI,IAAI,WAAW,CAAC;IAEzC,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,IAAI,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC;QACV;YACE,OAAO,IAAI,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,iCAAiC;gBAC5C,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE,2CAA2C;gBACrD,YAAY,EAAE,mCAAmC;aAClD,CAAC;QACJ,KAAK,IAAI,CAAC;QACV;YACE,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,sCAAsC;gBACjD,WAAW,EAAE,kCAAkC;gBAC/C,QAAQ,EAAE,8CAA8C;gBACxD,YAAY,EAAE,8BAA8B;aAC7C,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -1,82 +0,0 @@
1
- /**
2
- * postgres-mcp - Code Mode Worker Sandbox
3
- *
4
- * Enhanced sandboxed execution using worker_threads for process-level isolation.
5
- * Provides stronger isolation than vm module by running code in a separate thread
6
- * with isolated memory space.
7
- *
8
- * Features:
9
- * - Separate V8 instance per worker thread
10
- * - Hard timeout enforcement (worker termination)
11
- * - Isolated memory space
12
- * - Clean process state on each execution
13
- */
14
- import { type SandboxOptions, type PoolOptions, type SandboxResult } from "./types.js";
15
- /**
16
- * A sandboxed execution context using worker_threads
17
- * Provides stronger isolation than vm module with separate V8 instance
18
- */
19
- export declare class WorkerSandbox {
20
- private readonly options;
21
- private disposed;
22
- private constructor();
23
- /**
24
- * Create a new worker sandbox instance
25
- */
26
- static create(options?: SandboxOptions): WorkerSandbox;
27
- /**
28
- * Execute code in a worker thread
29
- * Each execution spawns a fresh worker for maximum isolation
30
- */
31
- execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
32
- /**
33
- * Serialize API bindings for worker transfer
34
- * We can't transfer functions directly, so we send method names
35
- */
36
- private serializeBindings;
37
- /**
38
- * Calculate execution metrics
39
- */
40
- private calculateMetrics;
41
- /**
42
- * Check if sandbox is healthy
43
- */
44
- isHealthy(): boolean;
45
- /**
46
- * Dispose of the sandbox
47
- */
48
- dispose(): void;
49
- }
50
- /**
51
- * Pool of worker sandboxes
52
- * Unlike VM pool, worker sandboxes are created fresh for each execution
53
- * so this pool is simpler (mainly for statistics and control)
54
- */
55
- export declare class WorkerSandboxPool {
56
- private readonly options;
57
- private readonly sandboxOptions;
58
- private activeCount;
59
- private disposed;
60
- constructor(poolOptions?: PoolOptions, sandboxOptions?: SandboxOptions);
61
- /**
62
- * Initialize the pool
63
- */
64
- initialize(): void;
65
- /**
66
- * Execute code using a worker sandbox
67
- */
68
- execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
69
- /**
70
- * Get pool statistics
71
- */
72
- getStats(): {
73
- available: number;
74
- inUse: number;
75
- max: number;
76
- };
77
- /**
78
- * Dispose of the pool
79
- */
80
- dispose(): void;
81
- }
82
- //# sourceMappingURL=worker-sandbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-sandbox.d.ts","sourceRoot":"","sources":["../../src/codemode/worker-sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa;IAKtD;;;OAGG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC;IAyIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,WAAW,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,cAAc;IAKtE;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC;IA0BzB;;OAEG;IACH,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAQ7D;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
@@ -1,244 +0,0 @@
1
- /**
2
- * postgres-mcp - Code Mode Worker Sandbox
3
- *
4
- * Enhanced sandboxed execution using worker_threads for process-level isolation.
5
- * Provides stronger isolation than vm module by running code in a separate thread
6
- * with isolated memory space.
7
- *
8
- * Features:
9
- * - Separate V8 instance per worker thread
10
- * - Hard timeout enforcement (worker termination)
11
- * - Isolated memory space
12
- * - Clean process state on each execution
13
- */
14
- import { Worker } from "node:worker_threads";
15
- import { fileURLToPath } from "node:url";
16
- import { dirname, join } from "node:path";
17
- import { logger } from "../utils/logger.js";
18
- import { DEFAULT_SANDBOX_OPTIONS, DEFAULT_POOL_OPTIONS, } from "./types.js";
19
- // Get directory for worker script
20
- const __dirname = dirname(fileURLToPath(import.meta.url));
21
- const WORKER_SCRIPT_PATH = join(__dirname, "worker-script.js");
22
- /**
23
- * A sandboxed execution context using worker_threads
24
- * Provides stronger isolation than vm module with separate V8 instance
25
- */
26
- export class WorkerSandbox {
27
- options;
28
- disposed = false;
29
- constructor(options) {
30
- this.options = options;
31
- }
32
- /**
33
- * Create a new worker sandbox instance
34
- */
35
- static create(options) {
36
- const opts = { ...DEFAULT_SANDBOX_OPTIONS, ...options };
37
- return new WorkerSandbox(opts);
38
- }
39
- /**
40
- * Execute code in a worker thread
41
- * Each execution spawns a fresh worker for maximum isolation
42
- */
43
- async execute(code, apiBindings) {
44
- if (this.disposed) {
45
- return {
46
- success: false,
47
- error: "Sandbox has been disposed",
48
- metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
49
- };
50
- }
51
- const startTime = performance.now();
52
- const startMemory = process.memoryUsage().heapUsed;
53
- return new Promise((resolve) => {
54
- let worker = null;
55
- let timeoutId = null;
56
- let resolved = false;
57
- const cleanup = () => {
58
- if (timeoutId) {
59
- clearTimeout(timeoutId);
60
- timeoutId = null;
61
- }
62
- if (worker) {
63
- worker.terminate().catch(() => {
64
- /* intentionally empty */
65
- });
66
- worker = null;
67
- }
68
- };
69
- const respond = (result) => {
70
- if (resolved)
71
- return;
72
- resolved = true;
73
- cleanup();
74
- resolve(result);
75
- };
76
- try {
77
- worker = new Worker(WORKER_SCRIPT_PATH, {
78
- workerData: {
79
- code,
80
- apiBindings: this.serializeBindings(apiBindings),
81
- timeout: this.options.timeoutMs,
82
- },
83
- });
84
- // Set hard timeout (will kill worker)
85
- timeoutId = setTimeout(() => {
86
- const endTime = performance.now();
87
- const endMemory = process.memoryUsage().heapUsed;
88
- respond({
89
- success: false,
90
- error: `Execution timeout: exceeded ${String(this.options.timeoutMs)}ms limit`,
91
- metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
92
- });
93
- }, this.options.timeoutMs + 1000); // Extra buffer for cleanup
94
- worker.on("message", (result) => {
95
- const endTime = performance.now();
96
- const endMemory = process.memoryUsage().heapUsed;
97
- respond({
98
- success: result.success,
99
- result: result.result,
100
- error: result.error,
101
- stack: result.stack,
102
- metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
103
- });
104
- });
105
- worker.on("error", (error) => {
106
- const endTime = performance.now();
107
- const endMemory = process.memoryUsage().heapUsed;
108
- respond({
109
- success: false,
110
- error: error.message,
111
- stack: error.stack,
112
- metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
113
- });
114
- });
115
- worker.on("exit", (exitCode) => {
116
- if (!resolved && exitCode !== 0) {
117
- const endTime = performance.now();
118
- const endMemory = process.memoryUsage().heapUsed;
119
- respond({
120
- success: false,
121
- error: `Worker exited with code ${String(exitCode)}`,
122
- metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
123
- });
124
- }
125
- });
126
- }
127
- catch (error) {
128
- const endTime = performance.now();
129
- const endMemory = process.memoryUsage().heapUsed;
130
- respond({
131
- success: false,
132
- error: error instanceof Error ? error.message : String(error),
133
- stack: error instanceof Error ? error.stack : undefined,
134
- metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
135
- });
136
- }
137
- });
138
- }
139
- /**
140
- * Serialize API bindings for worker transfer
141
- * We can't transfer functions directly, so we send method names
142
- */
143
- serializeBindings(bindings) {
144
- const serialized = {};
145
- for (const [group, methods] of Object.entries(bindings)) {
146
- if (typeof methods === "object" && methods !== null) {
147
- serialized[group] = Object.keys(methods);
148
- }
149
- }
150
- return serialized;
151
- }
152
- /**
153
- * Calculate execution metrics
154
- */
155
- calculateMetrics(startTime, endTime, startMemory, endMemory) {
156
- return {
157
- wallTimeMs: Math.round(endTime - startTime),
158
- cpuTimeMs: Math.round(endTime - startTime), // Approximation
159
- memoryUsedMb: Math.round(((endMemory - startMemory) / (1024 * 1024)) * 100) / 100,
160
- };
161
- }
162
- /**
163
- * Check if sandbox is healthy
164
- */
165
- isHealthy() {
166
- return !this.disposed;
167
- }
168
- /**
169
- * Dispose of the sandbox
170
- */
171
- dispose() {
172
- this.disposed = true;
173
- }
174
- }
175
- /**
176
- * Pool of worker sandboxes
177
- * Unlike VM pool, worker sandboxes are created fresh for each execution
178
- * so this pool is simpler (mainly for statistics and control)
179
- */
180
- export class WorkerSandboxPool {
181
- options;
182
- sandboxOptions;
183
- activeCount = 0;
184
- disposed = false;
185
- constructor(poolOptions, sandboxOptions) {
186
- this.options = { ...DEFAULT_POOL_OPTIONS, ...poolOptions };
187
- this.sandboxOptions = { ...DEFAULT_SANDBOX_OPTIONS, ...sandboxOptions };
188
- }
189
- /**
190
- * Initialize the pool
191
- */
192
- initialize() {
193
- logger.info(`Worker sandbox pool initialized (max: ${String(this.options.maxInstances)} concurrent)`, {
194
- module: "CODEMODE",
195
- });
196
- }
197
- /**
198
- * Execute code using a worker sandbox
199
- */
200
- async execute(code, apiBindings) {
201
- if (this.disposed) {
202
- return {
203
- success: false,
204
- error: "Pool has been disposed",
205
- metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
206
- };
207
- }
208
- if (this.activeCount >= this.options.maxInstances) {
209
- return {
210
- success: false,
211
- error: `Worker pool exhausted (max: ${String(this.options.maxInstances)} concurrent)`,
212
- metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
213
- };
214
- }
215
- this.activeCount++;
216
- try {
217
- const sandbox = WorkerSandbox.create(this.sandboxOptions);
218
- return await sandbox.execute(code, apiBindings);
219
- }
220
- finally {
221
- this.activeCount--;
222
- }
223
- }
224
- /**
225
- * Get pool statistics
226
- */
227
- getStats() {
228
- return {
229
- available: this.options.maxInstances - this.activeCount,
230
- inUse: this.activeCount,
231
- max: this.options.maxInstances,
232
- };
233
- }
234
- /**
235
- * Dispose of the pool
236
- */
237
- dispose() {
238
- this.disposed = true;
239
- logger.info("Worker sandbox pool disposed", {
240
- module: "CODEMODE",
241
- });
242
- }
243
- }
244
- //# sourceMappingURL=worker-sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-sandbox.js","sourceRoot":"","sources":["../../src/codemode/worker-sandbox.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * postgres-mcp - Code Mode Worker Script
3
- *
4
- * This script runs in a worker thread to execute user code in isolation.
5
- * It uses Node.js vm module within the worker for additional sandboxing.
6
- */
7
- export {};
8
- //# sourceMappingURL=worker-script.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-script.d.ts","sourceRoot":"","sources":["../../src/codemode/worker-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,113 +0,0 @@
1
- /**
2
- * postgres-mcp - Code Mode Worker Script
3
- *
4
- * This script runs in a worker thread to execute user code in isolation.
5
- * It uses Node.js vm module within the worker for additional sandboxing.
6
- */
7
- import { parentPort, workerData } from "node:worker_threads";
8
- import vm from "node:vm";
9
- /**
10
- * Execute code in a sandboxed vm context within the worker
11
- */
12
- async function executeCode() {
13
- const { code, timeout } = workerData;
14
- try {
15
- // Create minimal sandbox context
16
- const logBuffer = [];
17
- const sandbox = {
18
- console: {
19
- log: (...args) => {
20
- logBuffer.push(args
21
- .map((a) => typeof a === "object" && a !== null
22
- ? JSON.stringify(a)
23
- : String(a))
24
- .join(" "));
25
- },
26
- warn: (...args) => logBuffer.push("[WARN] " + args.map((a) => String(a)).join(" ")),
27
- error: (...args) => logBuffer.push("[ERROR] " + args.map((a) => String(a)).join(" ")),
28
- info: (...args) => logBuffer.push("[INFO] " + args.map((a) => String(a)).join(" ")),
29
- },
30
- // Block dangerous globals
31
- require: undefined,
32
- process: undefined,
33
- global: undefined,
34
- globalThis: undefined,
35
- __dirname: undefined,
36
- __filename: undefined,
37
- module: undefined,
38
- exports: undefined,
39
- // Safe built-ins
40
- JSON,
41
- Math,
42
- Date,
43
- Array,
44
- Object,
45
- String,
46
- Number,
47
- Boolean,
48
- Map,
49
- Set,
50
- Promise,
51
- Error,
52
- TypeError,
53
- RangeError,
54
- SyntaxError,
55
- // Disabled for security
56
- setTimeout: undefined,
57
- setInterval: undefined,
58
- setImmediate: undefined,
59
- // pg API placeholder (populated by main thread via message passing)
60
- pg: {},
61
- };
62
- const context = vm.createContext(sandbox);
63
- // Wrap code in async IIFE to support await
64
- const wrappedCode = `
65
- (async () => {
66
- ${code}
67
- })();
68
- `;
69
- // Compile and run with timeout
70
- const script = new vm.Script(wrappedCode, {
71
- filename: "worker-codemode-script.js",
72
- });
73
- const result = await script.runInContext(context, {
74
- timeout,
75
- breakOnSigint: true,
76
- });
77
- const response = {
78
- success: true,
79
- result,
80
- };
81
- parentPort?.postMessage(response);
82
- }
83
- catch (error) {
84
- const errorMessage = error instanceof Error ? error.message : String(error);
85
- const stack = error instanceof Error ? error.stack : undefined;
86
- // Check for timeout
87
- if (errorMessage.includes("Script execution timed out")) {
88
- const response = {
89
- success: false,
90
- error: `Execution timeout: exceeded ${String(timeout)}ms limit`,
91
- stack,
92
- };
93
- parentPort?.postMessage(response);
94
- return;
95
- }
96
- const response = {
97
- success: false,
98
- error: errorMessage,
99
- stack,
100
- };
101
- parentPort?.postMessage(response);
102
- }
103
- }
104
- // Execute immediately
105
- executeCode().catch((error) => {
106
- const response = {
107
- success: false,
108
- error: error instanceof Error ? error.message : String(error),
109
- stack: error instanceof Error ? error.stack : undefined,
110
- };
111
- parentPort?.postMessage(response);
112
- });
113
- //# sourceMappingURL=worker-script.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-script.js","sourceRoot":"","sources":["../../src/codemode/worker-script.ts"],"names":[],"mappings":"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"}