vitek-plugin 0.2.0-beta → 0.2.2-beta

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 (263) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/dispatch/http-webhook.d.ts +10 -0
  3. package/dist/adapters/dispatch/http-webhook.d.ts.map +1 -0
  4. package/dist/adapters/dispatch/http-webhook.js +38 -0
  5. package/dist/adapters/node/console-structured-request-logger.d.ts +6 -0
  6. package/dist/adapters/node/console-structured-request-logger.d.ts.map +1 -0
  7. package/dist/adapters/node/console-structured-request-logger.js +31 -0
  8. package/dist/build/build-api-bundle.d.ts.map +1 -1
  9. package/dist/build/build-api-bundle.js +11 -0
  10. package/dist/build/build-sockets-bundle.d.ts.map +1 -1
  11. package/dist/build/build-sockets-bundle.js +11 -0
  12. package/dist/cli/contract.d.ts +11 -0
  13. package/dist/cli/contract.d.ts.map +1 -0
  14. package/dist/cli/contract.js +143 -0
  15. package/dist/cli/doctor.d.ts +2 -0
  16. package/dist/cli/doctor.d.ts.map +1 -0
  17. package/dist/cli/doctor.js +70 -0
  18. package/dist/cli/generate.d.ts +2 -0
  19. package/dist/cli/generate.d.ts.map +1 -0
  20. package/dist/cli/generate.js +56 -0
  21. package/dist/cli/mcp-docs.d.ts +2 -0
  22. package/dist/cli/mcp-docs.d.ts.map +1 -0
  23. package/dist/cli/mcp-docs.js +4 -0
  24. package/dist/cli/mcp-project-write-tools.d.ts +4 -0
  25. package/dist/cli/mcp-project-write-tools.d.ts.map +1 -0
  26. package/dist/cli/mcp-project-write-tools.js +64 -0
  27. package/dist/cli/schedule.d.ts +2 -0
  28. package/dist/cli/schedule.d.ts.map +1 -0
  29. package/dist/cli/schedule.js +66 -0
  30. package/dist/core/contract/compare-asyncapi.d.ts +3 -0
  31. package/dist/core/contract/compare-asyncapi.d.ts.map +1 -0
  32. package/dist/core/contract/compare-asyncapi.js +45 -0
  33. package/dist/core/contract/compare-openapi.d.ts +3 -0
  34. package/dist/core/contract/compare-openapi.d.ts.map +1 -0
  35. package/dist/core/contract/compare-openapi.js +116 -0
  36. package/dist/core/contract/http-methods.d.ts +2 -0
  37. package/dist/core/contract/http-methods.d.ts.map +1 -0
  38. package/dist/core/contract/http-methods.js +2 -0
  39. package/dist/core/contract/index.d.ts +9 -0
  40. package/dist/core/contract/index.d.ts.map +1 -0
  41. package/dist/core/contract/index.js +7 -0
  42. package/dist/core/contract/project-specs.d.ts +12 -0
  43. package/dist/core/contract/project-specs.d.ts.map +1 -0
  44. package/dist/core/contract/project-specs.js +27 -0
  45. package/dist/core/contract/sort-json.d.ts +2 -0
  46. package/dist/core/contract/sort-json.d.ts.map +1 -0
  47. package/dist/core/contract/sort-json.js +14 -0
  48. package/dist/core/contract/types.d.ts +7 -0
  49. package/dist/core/contract/types.d.ts.map +1 -0
  50. package/dist/core/contract/types.js +1 -0
  51. package/dist/core/dispatch/dispatchers.d.ts +4 -0
  52. package/dist/core/dispatch/dispatchers.d.ts.map +1 -0
  53. package/dist/core/dispatch/dispatchers.js +16 -0
  54. package/dist/core/dispatch/emit-safe.d.ts +3 -0
  55. package/dist/core/dispatch/emit-safe.d.ts.map +1 -0
  56. package/dist/core/dispatch/emit-safe.js +10 -0
  57. package/dist/core/dispatch/index.d.ts +4 -0
  58. package/dist/core/dispatch/index.d.ts.map +1 -0
  59. package/dist/core/dispatch/index.js +2 -0
  60. package/dist/core/dispatch/types.d.ts +22 -0
  61. package/dist/core/dispatch/types.d.ts.map +1 -0
  62. package/dist/core/dispatch/types.js +1 -0
  63. package/dist/core/doctor/index.d.ts +3 -0
  64. package/dist/core/doctor/index.d.ts.map +1 -0
  65. package/dist/core/doctor/index.js +1 -0
  66. package/dist/core/doctor/report.d.ts +4 -0
  67. package/dist/core/doctor/report.d.ts.map +1 -0
  68. package/dist/core/doctor/report.js +166 -0
  69. package/dist/core/doctor/scan.d.ts +3 -0
  70. package/dist/core/doctor/scan.d.ts.map +1 -0
  71. package/dist/core/doctor/scan.js +23 -0
  72. package/dist/core/doctor/types.d.ts +12 -0
  73. package/dist/core/doctor/types.d.ts.map +1 -0
  74. package/dist/core/doctor/types.js +1 -0
  75. package/dist/core/events/event-bus.d.ts +8 -0
  76. package/dist/core/events/event-bus.d.ts.map +1 -0
  77. package/dist/core/events/event-bus.js +26 -0
  78. package/dist/core/events/index.d.ts +3 -0
  79. package/dist/core/events/index.d.ts.map +1 -0
  80. package/dist/core/events/index.js +1 -0
  81. package/dist/core/generators/adapters/drizzle.d.ts +3 -0
  82. package/dist/core/generators/adapters/drizzle.d.ts.map +1 -0
  83. package/dist/core/generators/adapters/drizzle.js +26 -0
  84. package/dist/core/generators/adapters/prisma.d.ts +3 -0
  85. package/dist/core/generators/adapters/prisma.d.ts.map +1 -0
  86. package/dist/core/generators/adapters/prisma.js +136 -0
  87. package/dist/core/generators/adapters/sql.d.ts +3 -0
  88. package/dist/core/generators/adapters/sql.d.ts.map +1 -0
  89. package/dist/core/generators/adapters/sql.js +26 -0
  90. package/dist/core/generators/generate-crud.d.ts +8 -0
  91. package/dist/core/generators/generate-crud.d.ts.map +1 -0
  92. package/dist/core/generators/generate-crud.js +17 -0
  93. package/dist/core/generators/index.d.ts +3 -0
  94. package/dist/core/generators/index.d.ts.map +1 -0
  95. package/dist/core/generators/index.js +1 -0
  96. package/dist/core/generators/types.d.ts +16 -0
  97. package/dist/core/generators/types.d.ts.map +1 -0
  98. package/dist/core/generators/types.js +1 -0
  99. package/dist/core/generators/utils.d.ts +3 -0
  100. package/dist/core/generators/utils.d.ts.map +1 -0
  101. package/dist/core/generators/utils.js +10 -0
  102. package/dist/core/observability/with-span.d.ts +5 -0
  103. package/dist/core/observability/with-span.d.ts.map +1 -0
  104. package/dist/core/observability/with-span.js +7 -0
  105. package/dist/core/scheduler/define-schedule.d.ts +3 -0
  106. package/dist/core/scheduler/define-schedule.d.ts.map +1 -0
  107. package/dist/core/scheduler/define-schedule.js +3 -0
  108. package/dist/core/scheduler/in-memory-lock.d.ts +6 -0
  109. package/dist/core/scheduler/in-memory-lock.d.ts.map +1 -0
  110. package/dist/core/scheduler/in-memory-lock.js +12 -0
  111. package/dist/core/scheduler/index.d.ts +5 -0
  112. package/dist/core/scheduler/index.d.ts.map +1 -0
  113. package/dist/core/scheduler/index.js +3 -0
  114. package/dist/core/scheduler/runner.d.ts +6 -0
  115. package/dist/core/scheduler/runner.d.ts.map +1 -0
  116. package/dist/core/scheduler/runner.js +37 -0
  117. package/dist/core/scheduler/types.d.ts +21 -0
  118. package/dist/core/scheduler/types.d.ts.map +1 -0
  119. package/dist/core/scheduler/types.js +1 -0
  120. package/dist/core/server/request-log-meta.d.ts +5 -0
  121. package/dist/core/server/request-log-meta.d.ts.map +1 -0
  122. package/dist/core/server/request-log-meta.js +1 -0
  123. package/dist/mcp/write/apply-guard.d.ts +7 -0
  124. package/dist/mcp/write/apply-guard.d.ts.map +1 -0
  125. package/dist/mcp/write/apply-guard.js +22 -0
  126. package/dist/mcp/write/openapi-jsdoc.d.ts +2 -0
  127. package/dist/mcp/write/openapi-jsdoc.d.ts.map +1 -0
  128. package/dist/mcp/write/openapi-jsdoc.js +15 -0
  129. package/dist/mcp/write/project-write-handlers.d.ts +46 -0
  130. package/dist/mcp/write/project-write-handlers.d.ts.map +1 -0
  131. package/dist/mcp/write/project-write-handlers.js +304 -0
  132. package/dist/mcp/write/risks.d.ts +3 -0
  133. package/dist/mcp/write/risks.d.ts.map +1 -0
  134. package/dist/mcp/write/risks.js +20 -0
  135. package/dist/mcp/write/route-snippet.d.ts +5 -0
  136. package/dist/mcp/write/route-snippet.d.ts.map +1 -0
  137. package/dist/mcp/write/route-snippet.js +46 -0
  138. package/dist/mcp/write/safe-path.d.ts +3 -0
  139. package/dist/mcp/write/safe-path.d.ts.map +1 -0
  140. package/dist/mcp/write/safe-path.js +16 -0
  141. package/dist/mcp/write/test-file-content.d.ts +8 -0
  142. package/dist/mcp/write/test-file-content.d.ts.map +1 -0
  143. package/dist/mcp/write/test-file-content.js +31 -0
  144. package/dist/mcp/write/unified-diff.d.ts +2 -0
  145. package/dist/mcp/write/unified-diff.d.ts.map +1 -0
  146. package/dist/mcp/write/unified-diff.js +19 -0
  147. package/dist/mcp/write/validation-scaffold.d.ts +2 -0
  148. package/dist/mcp/write/validation-scaffold.d.ts.map +1 -0
  149. package/dist/mcp/write/validation-scaffold.js +31 -0
  150. package/dist/mcp-docs-server/resources/configuration.d.ts +3 -0
  151. package/dist/mcp-docs-server/resources/configuration.d.ts.map +1 -0
  152. package/dist/mcp-docs-server/resources/configuration.js +25 -0
  153. package/dist/mcp-docs-server/resources/context.d.ts +3 -0
  154. package/dist/mcp-docs-server/resources/context.d.ts.map +1 -0
  155. package/dist/mcp-docs-server/resources/context.js +34 -0
  156. package/dist/mcp-docs-server/resources/errors.d.ts +3 -0
  157. package/dist/mcp-docs-server/resources/errors.d.ts.map +1 -0
  158. package/dist/mcp-docs-server/resources/errors.js +27 -0
  159. package/dist/mcp-docs-server/resources/introspection.d.ts +3 -0
  160. package/dist/mcp-docs-server/resources/introspection.d.ts.map +1 -0
  161. package/dist/mcp-docs-server/resources/introspection.js +24 -0
  162. package/dist/mcp-docs-server/resources/middlewares.d.ts +3 -0
  163. package/dist/mcp-docs-server/resources/middlewares.d.ts.map +1 -0
  164. package/dist/mcp-docs-server/resources/middlewares.js +36 -0
  165. package/dist/mcp-docs-server/resources/plugin-api.d.ts +3 -0
  166. package/dist/mcp-docs-server/resources/plugin-api.d.ts.map +1 -0
  167. package/dist/mcp-docs-server/resources/plugin-api.js +32 -0
  168. package/dist/mcp-docs-server/resources/response.d.ts +3 -0
  169. package/dist/mcp-docs-server/resources/response.d.ts.map +1 -0
  170. package/dist/mcp-docs-server/resources/response.js +39 -0
  171. package/dist/mcp-docs-server/resources/routing.d.ts +3 -0
  172. package/dist/mcp-docs-server/resources/routing.d.ts.map +1 -0
  173. package/dist/mcp-docs-server/resources/routing.js +47 -0
  174. package/dist/mcp-docs-server/resources/validation.d.ts +3 -0
  175. package/dist/mcp-docs-server/resources/validation.d.ts.map +1 -0
  176. package/dist/mcp-docs-server/resources/validation.js +37 -0
  177. package/dist/mcp-docs-server/resources/websockets.d.ts +3 -0
  178. package/dist/mcp-docs-server/resources/websockets.d.ts.map +1 -0
  179. package/dist/mcp-docs-server/resources/websockets.js +42 -0
  180. package/dist/mcp-docs-server/start-mcp-docs-server.d.ts +2 -0
  181. package/dist/mcp-docs-server/start-mcp-docs-server.d.ts.map +1 -0
  182. package/dist/mcp-docs-server/start-mcp-docs-server.js +171 -0
  183. package/dist/mcp-docs-server/tools/create-middleware.d.ts +5 -0
  184. package/dist/mcp-docs-server/tools/create-middleware.d.ts.map +1 -0
  185. package/dist/mcp-docs-server/tools/create-middleware.js +29 -0
  186. package/dist/mcp-docs-server/tools/create-route.d.ts +5 -0
  187. package/dist/mcp-docs-server/tools/create-route.d.ts.map +1 -0
  188. package/dist/mcp-docs-server/tools/create-route.js +44 -0
  189. package/dist/mcp-docs-server/tools/create-socket.d.ts +5 -0
  190. package/dist/mcp-docs-server/tools/create-socket.d.ts.map +1 -0
  191. package/dist/mcp-docs-server/tools/create-socket.js +39 -0
  192. package/dist/mcp-docs-server/tools/suggest-vite-config.d.ts +11 -0
  193. package/dist/mcp-docs-server/tools/suggest-vite-config.d.ts.map +1 -0
  194. package/dist/mcp-docs-server/tools/suggest-vite-config.js +30 -0
  195. package/dist/mcp-docs-server/tools/validate-convention.d.ts +21 -0
  196. package/dist/mcp-docs-server/tools/validate-convention.d.ts.map +1 -0
  197. package/dist/mcp-docs-server/tools/validate-convention.js +48 -0
  198. package/dist/platform/config.d.ts +30 -0
  199. package/dist/platform/config.d.ts.map +1 -0
  200. package/dist/platform/config.js +85 -0
  201. package/dist/platform/correlation.d.ts +5 -0
  202. package/dist/platform/correlation.d.ts.map +1 -0
  203. package/dist/platform/correlation.js +19 -0
  204. package/dist/platform/index.d.ts +5 -0
  205. package/dist/platform/index.d.ts.map +1 -0
  206. package/dist/platform/index.js +3 -0
  207. package/dist/platform/redaction.d.ts +6 -0
  208. package/dist/platform/redaction.d.ts.map +1 -0
  209. package/dist/platform/redaction.js +40 -0
  210. package/dist/plugin/mode.d.ts +5 -0
  211. package/dist/plugin/mode.d.ts.map +1 -0
  212. package/dist/plugin/mode.js +7 -0
  213. package/dist/plugin/vitek-resolve.d.ts.map +1 -1
  214. package/dist/plugin/vitek-resolve.js +4 -3
  215. package/dist/plugin/vitek-transform.d.ts +1 -1
  216. package/dist/plugin/vitek-transform.d.ts.map +1 -1
  217. package/dist/plugin/vitek-transform.js +30 -5
  218. package/dist/public/dispatch.d.ts +3 -0
  219. package/dist/public/dispatch.d.ts.map +1 -0
  220. package/dist/public/dispatch.js +1 -0
  221. package/dist/public/doctor.d.ts +3 -0
  222. package/dist/public/doctor.d.ts.map +1 -0
  223. package/dist/public/doctor.js +1 -0
  224. package/dist/public/errors.d.ts +2 -0
  225. package/dist/public/errors.d.ts.map +1 -0
  226. package/dist/public/errors.js +1 -0
  227. package/dist/public/events.d.ts +3 -0
  228. package/dist/public/events.d.ts.map +1 -0
  229. package/dist/public/events.js +1 -0
  230. package/dist/public/generators.d.ts +3 -0
  231. package/dist/public/generators.d.ts.map +1 -0
  232. package/dist/public/generators.js +1 -0
  233. package/dist/public/introspection.d.ts +3 -0
  234. package/dist/public/introspection.d.ts.map +1 -0
  235. package/dist/public/introspection.js +1 -0
  236. package/dist/public/observability.d.ts +3 -0
  237. package/dist/public/observability.d.ts.map +1 -0
  238. package/dist/public/observability.js +1 -0
  239. package/dist/public/platform.d.ts +3 -0
  240. package/dist/public/platform.d.ts.map +1 -0
  241. package/dist/public/platform.js +1 -0
  242. package/dist/public/plugin.d.ts +3 -0
  243. package/dist/public/plugin.d.ts.map +1 -0
  244. package/dist/public/plugin.js +1 -0
  245. package/dist/public/response.d.ts +2 -0
  246. package/dist/public/response.d.ts.map +1 -0
  247. package/dist/public/response.js +1 -0
  248. package/dist/public/scheduler.d.ts +3 -0
  249. package/dist/public/scheduler.d.ts.map +1 -0
  250. package/dist/public/scheduler.js +1 -0
  251. package/dist/public/testing.d.ts +3 -0
  252. package/dist/public/testing.d.ts.map +1 -0
  253. package/dist/public/testing.js +1 -0
  254. package/dist/public/validation.d.ts +3 -0
  255. package/dist/public/validation.d.ts.map +1 -0
  256. package/dist/public/validation.js +1 -0
  257. package/dist/shared/mode.d.ts +5 -0
  258. package/dist/shared/mode.d.ts.map +1 -0
  259. package/dist/shared/mode.js +7 -0
  260. package/dist/testing/testing.d.ts +15 -0
  261. package/dist/testing/testing.d.ts.map +1 -0
  262. package/dist/testing/testing.js +51 -0
  263. package/package.json +23 -21
@@ -0,0 +1,26 @@
1
+ export function createEventBus() {
2
+ const handlers = new Map();
3
+ return {
4
+ on(event, handler) {
5
+ const set = handlers.get(event) ?? new Set();
6
+ set.add(handler);
7
+ handlers.set(event, set);
8
+ return () => {
9
+ const current = handlers.get(event);
10
+ if (!current)
11
+ return;
12
+ current.delete(handler);
13
+ if (current.size === 0)
14
+ handlers.delete(event);
15
+ };
16
+ },
17
+ async emit(event, payload) {
18
+ const set = handlers.get(event);
19
+ if (!set || set.size === 0)
20
+ return;
21
+ for (const handler of Array.from(set)) {
22
+ await Promise.resolve(handler(payload));
23
+ }
24
+ },
25
+ };
26
+ }
@@ -0,0 +1,3 @@
1
+ export type { EventMap, EventHandler, EventBus } from './event-bus.js';
2
+ export { createEventBus } from './event-bus.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/events/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { createEventBus } from './event-bus.js';
@@ -0,0 +1,3 @@
1
+ import type { DataAdapterGenerator } from '../types.js';
2
+ export declare const drizzleCrudGenerator: DataAdapterGenerator;
3
+ //# sourceMappingURL=drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../../src/core/generators/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,oBAAoB,EAAiB,MAAM,aAAa,CAAC;AAmB3F,eAAO,MAAM,oBAAoB,EAAE,oBASlC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { toPascalCase } from '../utils.js';
2
+ function createTemplate(model) {
3
+ return `import type { VitekContext } from "vitek-plugin";
4
+ import { ok } from "vitek-plugin/response";
5
+
6
+ /**
7
+ * @summary Drizzle CRUD template for ${model}
8
+ * @tag ${model}
9
+ */
10
+ export default async function handler(_context: VitekContext) {
11
+ return ok({
12
+ message: "Drizzle adapter template generated. Implement DB queries for ${model}.",
13
+ });
14
+ }
15
+ `;
16
+ }
17
+ export const drizzleCrudGenerator = {
18
+ name: 'drizzle',
19
+ generateCrud(input) {
20
+ const model = toPascalCase(input.model);
21
+ return [
22
+ { path: `${input.outDir}/index.get.ts`, content: createTemplate(model) },
23
+ { path: `${input.outDir}/crud.generated.test.ts`, content: 'import { describe, it, expect } from "vitest";\ndescribe("drizzle scaffold", () => { it("is generated", () => { expect(true).toBe(true); }); });\n' },
24
+ ];
25
+ },
26
+ };
@@ -0,0 +1,3 @@
1
+ import type { DataAdapterGenerator } from '../types.js';
2
+ export declare const prismaCrudGenerator: DataAdapterGenerator;
3
+ //# sourceMappingURL=prisma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../../../src/core/generators/adapters/prisma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,oBAAoB,EAAiB,MAAM,aAAa,CAAC;AAiI3F,eAAO,MAAM,mBAAmB,EAAE,oBAejC,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { toCamelCase, toPascalCase } from '../utils.js';
2
+ function createListRoute(model, modelVar) {
3
+ return `import type { VitekContext } from "vitek-plugin";
4
+ import { ok } from "vitek-plugin/response";
5
+ import { validateQuery } from "vitek-plugin/validation";
6
+
7
+ declare const prisma: any;
8
+
9
+ /**
10
+ * @summary List ${model}
11
+ * @tag ${model}
12
+ */
13
+ export default async function handler(context: VitekContext) {
14
+ const query = validateQuery<{ take?: string; skip?: string }>(context.query, {
15
+ take: { type: "string", required: false },
16
+ skip: { type: "string", required: false },
17
+ });
18
+ const take = query.take ? Number(query.take) : undefined;
19
+ const skip = query.skip ? Number(query.skip) : undefined;
20
+ const data = await prisma.${modelVar}.findMany({ take, skip });
21
+ return ok({ data });
22
+ }
23
+ `;
24
+ }
25
+ function createCreateRoute(model, modelVar) {
26
+ return `import type { VitekContext } from "vitek-plugin";
27
+ import { created } from "vitek-plugin/response";
28
+ import { validateBody } from "vitek-plugin/validation";
29
+
30
+ declare const prisma: any;
31
+
32
+ /**
33
+ * @summary Create ${model}
34
+ * @tag ${model}
35
+ */
36
+ export default async function handler(context: VitekContext) {
37
+ const body = validateBody<Record<string, unknown>>(context.body, {});
38
+ const data = await prisma.${modelVar}.create({ data: body });
39
+ return created({ data });
40
+ }
41
+ `;
42
+ }
43
+ function createGetByIdRoute(model, modelVar) {
44
+ return `import type { VitekContext } from "vitek-plugin";
45
+ import { notFound, ok } from "vitek-plugin/response";
46
+
47
+ declare const prisma: any;
48
+
49
+ /**
50
+ * @summary Get ${model} by id
51
+ * @tag ${model}
52
+ */
53
+ export default async function handler(context: VitekContext) {
54
+ const id = Number(context.params.id);
55
+ const data = await prisma.${modelVar}.findUnique({ where: { id } });
56
+ if (!data) return notFound({ error: "${model} not found" });
57
+ return ok({ data });
58
+ }
59
+ `;
60
+ }
61
+ function createPatchByIdRoute(model, modelVar) {
62
+ return `import type { VitekContext } from "vitek-plugin";
63
+ import { notFound, ok } from "vitek-plugin/response";
64
+ import { validateBody } from "vitek-plugin/validation";
65
+
66
+ declare const prisma: any;
67
+
68
+ /**
69
+ * @summary Update ${model} by id
70
+ * @tag ${model}
71
+ */
72
+ export default async function handler(context: VitekContext) {
73
+ const id = Number(context.params.id);
74
+ const body = validateBody<Record<string, unknown>>(context.body, {});
75
+ const current = await prisma.${modelVar}.findUnique({ where: { id } });
76
+ if (!current) return notFound({ error: "${model} not found" });
77
+ const data = await prisma.${modelVar}.update({ where: { id }, data: body });
78
+ return ok({ data });
79
+ }
80
+ `;
81
+ }
82
+ function createDeleteByIdRoute(model, modelVar) {
83
+ return `import type { VitekContext } from "vitek-plugin";
84
+ import { noContent, notFound } from "vitek-plugin/response";
85
+
86
+ declare const prisma: any;
87
+
88
+ /**
89
+ * @summary Delete ${model} by id
90
+ * @tag ${model}
91
+ */
92
+ export default async function handler(context: VitekContext) {
93
+ const id = Number(context.params.id);
94
+ const current = await prisma.${modelVar}.findUnique({ where: { id } });
95
+ if (!current) return notFound({ error: "${model} not found" });
96
+ await prisma.${modelVar}.delete({ where: { id } });
97
+ return noContent();
98
+ }
99
+ `;
100
+ }
101
+ function createUnitTest(outDir, model) {
102
+ return `import { describe, it, expect } from "vitest";
103
+
104
+ describe("${model} generated routes", () => {
105
+ it("keeps generated files under ${outDir}", () => {
106
+ expect(true).toBe(true);
107
+ });
108
+ });
109
+ `;
110
+ }
111
+ function createContractTest(model) {
112
+ return `import { describe, it, expect } from "vitest";
113
+
114
+ describe("${model} contract scaffold", () => {
115
+ it("placeholder for post-build contract assertion", () => {
116
+ expect(true).toBe(true);
117
+ });
118
+ });
119
+ `;
120
+ }
121
+ export const prismaCrudGenerator = {
122
+ name: 'prisma',
123
+ generateCrud(input) {
124
+ const model = toPascalCase(input.model);
125
+ const modelVar = toCamelCase(model);
126
+ return [
127
+ { path: `${input.outDir}/index.get.ts`, content: createListRoute(model, modelVar) },
128
+ { path: `${input.outDir}/index.post.ts`, content: createCreateRoute(model, modelVar) },
129
+ { path: `${input.outDir}/[id].get.ts`, content: createGetByIdRoute(model, modelVar) },
130
+ { path: `${input.outDir}/[id].patch.ts`, content: createPatchByIdRoute(model, modelVar) },
131
+ { path: `${input.outDir}/[id].delete.ts`, content: createDeleteByIdRoute(model, modelVar) },
132
+ { path: `${input.outDir}/crud.generated.test.ts`, content: createUnitTest(input.outDir, model) },
133
+ { path: `${input.outDir}/crud.contract.test.ts`, content: createContractTest(model) },
134
+ ];
135
+ },
136
+ };
@@ -0,0 +1,3 @@
1
+ import type { DataAdapterGenerator } from '../types.js';
2
+ export declare const sqlCrudGenerator: DataAdapterGenerator;
3
+ //# sourceMappingURL=sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../../src/core/generators/adapters/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,oBAAoB,EAAiB,MAAM,aAAa,CAAC;AAmB3F,eAAO,MAAM,gBAAgB,EAAE,oBAS9B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { toPascalCase } from '../utils.js';
2
+ function createTemplate(model) {
3
+ return `import type { VitekContext } from "vitek-plugin";
4
+ import { ok } from "vitek-plugin/response";
5
+
6
+ /**
7
+ * @summary SQL-first CRUD template for ${model}
8
+ * @tag ${model}
9
+ */
10
+ export default async function handler(_context: VitekContext) {
11
+ return ok({
12
+ message: "SQL-first adapter template generated. Implement SQL queries for ${model}.",
13
+ });
14
+ }
15
+ `;
16
+ }
17
+ export const sqlCrudGenerator = {
18
+ name: 'sql',
19
+ generateCrud(input) {
20
+ const model = toPascalCase(input.model);
21
+ return [
22
+ { path: `${input.outDir}/index.get.ts`, content: createTemplate(model) },
23
+ { path: `${input.outDir}/crud.generated.test.ts`, content: 'import { describe, it, expect } from "vitest";\ndescribe("sql scaffold", () => { it("is generated", () => { expect(true).toBe(true); }); });\n' },
24
+ ];
25
+ },
26
+ };
@@ -0,0 +1,8 @@
1
+ import type { DataAdapterName, GeneratedFile } from './types.js';
2
+ export declare function generateCrudFiles(opts: {
3
+ adapter: DataAdapterName;
4
+ model: string;
5
+ outDir: string;
6
+ root: string;
7
+ }): GeneratedFile[];
8
+ //# sourceMappingURL=generate-crud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-crud.d.ts","sourceRoot":"","sources":["../../../src/core/generators/generate-crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,aAAa,EAAE,CAQlB"}
@@ -0,0 +1,17 @@
1
+ import { prismaCrudGenerator } from './adapters/prisma.js';
2
+ import { drizzleCrudGenerator } from './adapters/drizzle.js';
3
+ import { sqlCrudGenerator } from './adapters/sql.js';
4
+ const generators = {
5
+ prisma: prismaCrudGenerator,
6
+ drizzle: drizzleCrudGenerator,
7
+ sql: sqlCrudGenerator,
8
+ };
9
+ export function generateCrudFiles(opts) {
10
+ const generator = generators[opts.adapter];
11
+ return generator.generateCrud({
12
+ adapter: opts.adapter,
13
+ model: opts.model,
14
+ outDir: opts.outDir,
15
+ root: opts.root,
16
+ });
17
+ }
@@ -0,0 +1,3 @@
1
+ export type { DataAdapterName, GeneratedFile, CrudGeneratorInput, DataAdapterGenerator, } from './types.js';
2
+ export { generateCrudFiles } from './generate-crud.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/generators/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export { generateCrudFiles } from './generate-crud.js';
@@ -0,0 +1,16 @@
1
+ export type DataAdapterName = 'prisma' | 'drizzle' | 'sql';
2
+ export interface GeneratedFile {
3
+ path: string;
4
+ content: string;
5
+ }
6
+ export interface CrudGeneratorInput {
7
+ adapter: DataAdapterName;
8
+ model: string;
9
+ outDir: string;
10
+ root: string;
11
+ }
12
+ export interface DataAdapterGenerator {
13
+ name: DataAdapterName;
14
+ generateCrud(input: CrudGeneratorInput): GeneratedFile[];
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/generators/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,EAAE,CAAC;CAC1D"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare function toCamelCase(value: string): string;
2
+ export declare function toPascalCase(value: string): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/generators/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD"}
@@ -0,0 +1,10 @@
1
+ export function toCamelCase(value) {
2
+ if (!value)
3
+ return value;
4
+ return value.charAt(0).toLowerCase() + value.slice(1);
5
+ }
6
+ export function toPascalCase(value) {
7
+ if (!value)
8
+ return value;
9
+ return value.charAt(0).toUpperCase() + value.slice(1);
10
+ }
@@ -0,0 +1,5 @@
1
+ export interface Span {
2
+ setAttribute(key: string, value: string | number | boolean): void;
3
+ }
4
+ export declare function withSpan<T>(name: string, fn: (span: Span) => T | Promise<T>): Promise<T>;
5
+ //# sourceMappingURL=with-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-span.d.ts","sourceRoot":"","sources":["../../../src/core/observability/with-span.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACnE;AAMD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxF"}
@@ -0,0 +1,7 @@
1
+ const noopSpan = {
2
+ setAttribute() { },
3
+ };
4
+ export function withSpan(name, fn) {
5
+ void name;
6
+ return Promise.resolve(fn(noopSpan));
7
+ }
@@ -0,0 +1,3 @@
1
+ import type { ScheduleDefinition } from './types.js';
2
+ export declare function defineSchedule(definition: ScheduleDefinition): ScheduleDefinition;
3
+ //# sourceMappingURL=define-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schedule.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/define-schedule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,cAAc,CAAC,UAAU,EAAE,kBAAkB,GAAG,kBAAkB,CAEjF"}
@@ -0,0 +1,3 @@
1
+ export function defineSchedule(definition) {
2
+ return definition;
3
+ }
@@ -0,0 +1,6 @@
1
+ import type { SchedulerLockProvider } from './types.js';
2
+ export declare class InMemoryLockProvider implements SchedulerLockProvider {
3
+ private readonly locks;
4
+ acquire(taskName: string): Promise<(() => void) | null>;
5
+ }
6
+ //# sourceMappingURL=in-memory-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-lock.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/in-memory-lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,qBAAa,oBAAqB,YAAW,qBAAqB;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAErC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAS9D"}
@@ -0,0 +1,12 @@
1
+ export class InMemoryLockProvider {
2
+ locks = new Set();
3
+ async acquire(taskName) {
4
+ if (this.locks.has(taskName)) {
5
+ return null;
6
+ }
7
+ this.locks.add(taskName);
8
+ return () => {
9
+ this.locks.delete(taskName);
10
+ };
11
+ }
12
+ }
@@ -0,0 +1,5 @@
1
+ export type { ScheduleTask, ScheduleDefinition, TaskRunResult, ScheduleRunResult, SchedulerLockProvider, } from './types.js';
2
+ export { defineSchedule } from './define-schedule.js';
3
+ export { InMemoryLockProvider } from './in-memory-lock.js';
4
+ export { runScheduleOnce } from './runner.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { defineSchedule } from './define-schedule.js';
2
+ export { InMemoryLockProvider } from './in-memory-lock.js';
3
+ export { runScheduleOnce } from './runner.js';
@@ -0,0 +1,6 @@
1
+ import type { ScheduleDefinition, ScheduleRunResult, SchedulerLockProvider } from './types.js';
2
+ export interface RunScheduleOptions {
3
+ lockProvider?: SchedulerLockProvider;
4
+ }
5
+ export declare function runScheduleOnce(definition: ScheduleDefinition, options?: RunScheduleOptions): Promise<ScheduleRunResult>;
6
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,kBAAkB,EAC9B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAmC5B"}
@@ -0,0 +1,37 @@
1
+ import { InMemoryLockProvider } from './in-memory-lock.js';
2
+ export async function runScheduleOnce(definition, options = {}) {
3
+ const lockProvider = options.lockProvider ?? new InMemoryLockProvider();
4
+ const results = [];
5
+ for (const task of definition.tasks) {
6
+ const release = await lockProvider.acquire(task.name);
7
+ if (!release) {
8
+ results.push({
9
+ name: task.name,
10
+ cron: task.cron,
11
+ ok: false,
12
+ error: 'Task lock not acquired',
13
+ });
14
+ continue;
15
+ }
16
+ try {
17
+ await Promise.resolve(task.run());
18
+ results.push({
19
+ name: task.name,
20
+ cron: task.cron,
21
+ ok: true,
22
+ });
23
+ }
24
+ catch (error) {
25
+ results.push({
26
+ name: task.name,
27
+ cron: task.cron,
28
+ ok: false,
29
+ error: error instanceof Error ? error.message : String(error),
30
+ });
31
+ }
32
+ finally {
33
+ release();
34
+ }
35
+ }
36
+ return { tasks: results };
37
+ }
@@ -0,0 +1,21 @@
1
+ export interface ScheduleTask {
2
+ name: string;
3
+ cron: string;
4
+ run: () => void | Promise<void>;
5
+ }
6
+ export interface ScheduleDefinition {
7
+ tasks: ScheduleTask[];
8
+ }
9
+ export interface TaskRunResult {
10
+ name: string;
11
+ cron: string;
12
+ ok: boolean;
13
+ error?: string;
14
+ }
15
+ export interface ScheduleRunResult {
16
+ tasks: TaskRunResult[];
17
+ }
18
+ export interface SchedulerLockProvider {
19
+ acquire(taskName: string): Promise<(() => void) | null>;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/scheduler/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;CACzD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface RequestLogMeta {
2
+ requestId: string;
3
+ route?: string;
4
+ }
5
+ //# sourceMappingURL=request-log-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-log-meta.d.ts","sourceRoot":"","sources":["../../../src/core/server/request-log-meta.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ export interface ApplyResolution {
2
+ dryRun: boolean;
3
+ writeAllowed: boolean;
4
+ rejectReason?: string;
5
+ }
6
+ export declare function resolveApplyMode(root: string, apply: boolean, dryRun: boolean): ApplyResolution;
7
+ //# sourceMappingURL=apply-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-guard.d.ts","sourceRoot":"","sources":["../../../src/mcp/write/apply-guard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,CAqB/F"}
@@ -0,0 +1,22 @@
1
+ import { loadPlatformConfig, isFeatureEnabled } from '../../platform/config.js';
2
+ export function resolveApplyMode(root, apply, dryRun) {
3
+ if (!apply) {
4
+ return { dryRun: true, writeAllowed: false };
5
+ }
6
+ if (dryRun) {
7
+ return {
8
+ dryRun: true,
9
+ writeAllowed: false,
10
+ rejectReason: 'Pass dryRun: false together with apply: true to confirm writing to disk.',
11
+ };
12
+ }
13
+ const cfg = loadPlatformConfig(root);
14
+ if (!isFeatureEnabled(cfg, 'mcpWriteTools')) {
15
+ return {
16
+ dryRun: true,
17
+ writeAllowed: false,
18
+ rejectReason: 'Set features.mcpWriteTools: true in vitek.platform.json, then call with apply: true and dryRun: false.',
19
+ };
20
+ }
21
+ return { dryRun: false, writeAllowed: true };
22
+ }
@@ -0,0 +1,2 @@
1
+ export declare function applyOpenApiSummaryToFileContent(content: string, summary: string): string;
2
+ //# sourceMappingURL=openapi-jsdoc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-jsdoc.d.ts","sourceRoot":"","sources":["../../../src/mcp/write/openapi-jsdoc.ts"],"names":[],"mappings":"AAAA,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAazF"}
@@ -0,0 +1,15 @@
1
+ export function applyOpenApiSummaryToFileContent(content, summary) {
2
+ const re = /(\/\*\*[\s\S]*?\*\/)(\s*\n)(export\s+default)/;
3
+ const m = content.match(re);
4
+ if (!m) {
5
+ return `/**\n * @summary ${summary}\n */\n\n${content}`;
6
+ }
7
+ let jsdoc = m[1];
8
+ if (/\* @summary /m.test(jsdoc)) {
9
+ jsdoc = jsdoc.replace(/\* @summary [^\n]*/m, `* @summary ${summary}`);
10
+ }
11
+ else {
12
+ jsdoc = jsdoc.replace(/\/\*\*\s*/, `/**\n * @summary ${summary}\n`);
13
+ }
14
+ return content.replace(re, `${jsdoc}${m[2]}${m[3]}`);
15
+ }
@@ -0,0 +1,46 @@
1
+ export interface McpWriteToolResult {
2
+ ok: boolean;
3
+ dryRun: boolean;
4
+ written?: boolean;
5
+ diff: string;
6
+ risk: string[];
7
+ next: string;
8
+ error?: string;
9
+ rejectReason?: string;
10
+ filePath?: string;
11
+ }
12
+ export interface McpProjectPaths {
13
+ root: string;
14
+ apiDir: string;
15
+ apiBasePath: string;
16
+ baseUrl: string;
17
+ }
18
+ export declare function handleVitekRouteCreate(ctx: McpProjectPaths, input: {
19
+ routePath: string;
20
+ method: string;
21
+ extension?: 'ts' | 'js';
22
+ dryRun?: boolean;
23
+ apply?: boolean;
24
+ }): McpWriteToolResult;
25
+ export declare function handleVitekRouteUpdate(ctx: McpProjectPaths, input: {
26
+ filePath: string;
27
+ content: string;
28
+ dryRun?: boolean;
29
+ apply?: boolean;
30
+ }): McpWriteToolResult;
31
+ export declare function handleVitekValidationSuggest(ctx: McpProjectPaths, input: {
32
+ filePath: string;
33
+ dryRun?: boolean;
34
+ apply?: boolean;
35
+ }): McpWriteToolResult;
36
+ export declare function handleVitekTestGenerate(ctx: McpProjectPaths, input: {
37
+ routeFilePath: string;
38
+ dryRun?: boolean;
39
+ apply?: boolean;
40
+ }): McpWriteToolResult;
41
+ export declare function handleVitekOpenapiSync(ctx: McpProjectPaths, input: {
42
+ filePath: string;
43
+ dryRun?: boolean;
44
+ apply?: boolean;
45
+ }): McpWriteToolResult;
46
+ //# sourceMappingURL=project-write-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-write-handlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/write/project-write-handlers.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,kBAAkB,CAuDpB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9E,kBAAkB,CA2CpB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,kBAAkB,CAwDpB;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAClE,kBAAkB,CA6DpB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,kBAAkB,CA2DpB"}