@mcp-rune/create 0.11.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 (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/bin/rune.js +7 -0
  4. package/dist/commands/add-model.d.ts +5 -0
  5. package/dist/commands/add-model.d.ts.map +1 -0
  6. package/dist/commands/add-model.js +131 -0
  7. package/dist/commands/add-model.js.map +1 -0
  8. package/dist/commands/db-up.d.ts +2 -0
  9. package/dist/commands/db-up.d.ts.map +1 -0
  10. package/dist/commands/db-up.js +29 -0
  11. package/dist/commands/db-up.js.map +1 -0
  12. package/dist/commands/doctor/env-checks.d.ts +4 -0
  13. package/dist/commands/doctor/env-checks.d.ts.map +1 -0
  14. package/dist/commands/doctor/env-checks.js +88 -0
  15. package/dist/commands/doctor/env-checks.js.map +1 -0
  16. package/dist/commands/doctor/index.d.ts +21 -0
  17. package/dist/commands/doctor/index.d.ts.map +1 -0
  18. package/dist/commands/doctor/index.js +44 -0
  19. package/dist/commands/doctor/index.js.map +1 -0
  20. package/dist/commands/doctor/project-validation.d.ts +5 -0
  21. package/dist/commands/doctor/project-validation.d.ts.map +1 -0
  22. package/dist/commands/doctor/project-validation.js +166 -0
  23. package/dist/commands/doctor/project-validation.js.map +1 -0
  24. package/dist/commands/doctor.d.ts +7 -0
  25. package/dist/commands/doctor.d.ts.map +1 -0
  26. package/dist/commands/doctor.js +306 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/inspect.d.ts +16 -0
  29. package/dist/commands/inspect.d.ts.map +1 -0
  30. package/dist/commands/inspect.js +66 -0
  31. package/dist/commands/inspect.js.map +1 -0
  32. package/dist/commands/new/actions/apps.d.ts +5 -0
  33. package/dist/commands/new/actions/apps.d.ts.map +1 -0
  34. package/dist/commands/new/actions/apps.js +51 -0
  35. package/dist/commands/new/actions/apps.js.map +1 -0
  36. package/dist/commands/new/actions/architecture.d.ts +5 -0
  37. package/dist/commands/new/actions/architecture.d.ts.map +1 -0
  38. package/dist/commands/new/actions/architecture.js +45 -0
  39. package/dist/commands/new/actions/architecture.js.map +1 -0
  40. package/dist/commands/new/actions/auth.d.ts +5 -0
  41. package/dist/commands/new/actions/auth.d.ts.map +1 -0
  42. package/dist/commands/new/actions/auth.js +30 -0
  43. package/dist/commands/new/actions/auth.js.map +1 -0
  44. package/dist/commands/new/actions/database.d.ts +5 -0
  45. package/dist/commands/new/actions/database.d.ts.map +1 -0
  46. package/dist/commands/new/actions/database.js +60 -0
  47. package/dist/commands/new/actions/database.js.map +1 -0
  48. package/dist/commands/new/actions/fetch-template.d.ts +5 -0
  49. package/dist/commands/new/actions/fetch-template.d.ts.map +1 -0
  50. package/dist/commands/new/actions/fetch-template.js +22 -0
  51. package/dist/commands/new/actions/fetch-template.js.map +1 -0
  52. package/dist/commands/new/actions/intro.d.ts +5 -0
  53. package/dist/commands/new/actions/intro.d.ts.map +1 -0
  54. package/dist/commands/new/actions/intro.js +7 -0
  55. package/dist/commands/new/actions/intro.js.map +1 -0
  56. package/dist/commands/new/actions/layers.d.ts +5 -0
  57. package/dist/commands/new/actions/layers.d.ts.map +1 -0
  58. package/dist/commands/new/actions/layers.js +38 -0
  59. package/dist/commands/new/actions/layers.js.map +1 -0
  60. package/dist/commands/new/actions/models.d.ts +5 -0
  61. package/dist/commands/new/actions/models.d.ts.map +1 -0
  62. package/dist/commands/new/actions/models.js +18 -0
  63. package/dist/commands/new/actions/models.js.map +1 -0
  64. package/dist/commands/new/actions/next-steps.d.ts +5 -0
  65. package/dist/commands/new/actions/next-steps.d.ts.map +1 -0
  66. package/dist/commands/new/actions/next-steps.js +38 -0
  67. package/dist/commands/new/actions/next-steps.js.map +1 -0
  68. package/dist/commands/new/actions/observability.d.ts +5 -0
  69. package/dist/commands/new/actions/observability.d.ts.map +1 -0
  70. package/dist/commands/new/actions/observability.js +45 -0
  71. package/dist/commands/new/actions/observability.js.map +1 -0
  72. package/dist/commands/new/actions/post-scaffold.d.ts +5 -0
  73. package/dist/commands/new/actions/post-scaffold.d.ts.map +1 -0
  74. package/dist/commands/new/actions/post-scaffold.js +81 -0
  75. package/dist/commands/new/actions/post-scaffold.js.map +1 -0
  76. package/dist/commands/new/actions/preset.d.ts +5 -0
  77. package/dist/commands/new/actions/preset.d.ts.map +1 -0
  78. package/dist/commands/new/actions/preset.js +23 -0
  79. package/dist/commands/new/actions/preset.js.map +1 -0
  80. package/dist/commands/new/actions/prompts.d.ts +5 -0
  81. package/dist/commands/new/actions/prompts.d.ts.map +1 -0
  82. package/dist/commands/new/actions/prompts.js +33 -0
  83. package/dist/commands/new/actions/prompts.js.map +1 -0
  84. package/dist/commands/new/actions/render.d.ts +5 -0
  85. package/dist/commands/new/actions/render.d.ts.map +1 -0
  86. package/dist/commands/new/actions/render.js +35 -0
  87. package/dist/commands/new/actions/render.js.map +1 -0
  88. package/dist/commands/new/actions/scaffold-header.d.ts +5 -0
  89. package/dist/commands/new/actions/scaffold-header.d.ts.map +1 -0
  90. package/dist/commands/new/actions/scaffold-header.js +19 -0
  91. package/dist/commands/new/actions/scaffold-header.js.map +1 -0
  92. package/dist/commands/new/actions/scaffold-mode.d.ts +5 -0
  93. package/dist/commands/new/actions/scaffold-mode.d.ts.map +1 -0
  94. package/dist/commands/new/actions/scaffold-mode.js +49 -0
  95. package/dist/commands/new/actions/scaffold-mode.js.map +1 -0
  96. package/dist/commands/new/actions/summary.d.ts +5 -0
  97. package/dist/commands/new/actions/summary.d.ts.map +1 -0
  98. package/dist/commands/new/actions/summary.js +71 -0
  99. package/dist/commands/new/actions/summary.js.map +1 -0
  100. package/dist/commands/new/actions/toggles.d.ts +5 -0
  101. package/dist/commands/new/actions/toggles.d.ts.map +1 -0
  102. package/dist/commands/new/actions/toggles.js +25 -0
  103. package/dist/commands/new/actions/toggles.js.map +1 -0
  104. package/dist/commands/new/actions/tools.d.ts +5 -0
  105. package/dist/commands/new/actions/tools.d.ts.map +1 -0
  106. package/dist/commands/new/actions/tools.js +36 -0
  107. package/dist/commands/new/actions/tools.js.map +1 -0
  108. package/dist/commands/new/actions/transport.d.ts +5 -0
  109. package/dist/commands/new/actions/transport.d.ts.map +1 -0
  110. package/dist/commands/new/actions/transport.js +24 -0
  111. package/dist/commands/new/actions/transport.js.map +1 -0
  112. package/dist/commands/new/context.d.ts +76 -0
  113. package/dist/commands/new/context.d.ts.map +1 -0
  114. package/dist/commands/new/context.js +134 -0
  115. package/dist/commands/new/context.js.map +1 -0
  116. package/dist/commands/new/index.d.ts +5 -0
  117. package/dist/commands/new/index.d.ts.map +1 -0
  118. package/dist/commands/new/index.js +18 -0
  119. package/dist/commands/new/index.js.map +1 -0
  120. package/dist/commands/new/pipeline.d.ts +12 -0
  121. package/dist/commands/new/pipeline.d.ts.map +1 -0
  122. package/dist/commands/new/pipeline.js +67 -0
  123. package/dist/commands/new/pipeline.js.map +1 -0
  124. package/dist/commands/new/presets.d.ts +40 -0
  125. package/dist/commands/new/presets.d.ts.map +1 -0
  126. package/dist/commands/new/presets.js +91 -0
  127. package/dist/commands/new/presets.js.map +1 -0
  128. package/dist/commands/new.d.ts +24 -0
  129. package/dist/commands/new.d.ts.map +1 -0
  130. package/dist/commands/new.js +162 -0
  131. package/dist/commands/new.js.map +1 -0
  132. package/dist/commands/post-scaffold.d.ts +6 -0
  133. package/dist/commands/post-scaffold.d.ts.map +1 -0
  134. package/dist/commands/post-scaffold.js +24 -0
  135. package/dist/commands/post-scaffold.js.map +1 -0
  136. package/dist/core/cancel.d.ts +3 -0
  137. package/dist/core/cancel.d.ts.map +1 -0
  138. package/dist/core/cancel.js +17 -0
  139. package/dist/core/cancel.js.map +1 -0
  140. package/dist/core/color.d.ts +12 -0
  141. package/dist/core/color.d.ts.map +1 -0
  142. package/dist/core/color.js +14 -0
  143. package/dist/core/color.js.map +1 -0
  144. package/dist/core/db-setup.d.ts +13 -0
  145. package/dist/core/db-setup.d.ts.map +1 -0
  146. package/dist/core/db-setup.js +63 -0
  147. package/dist/core/db-setup.js.map +1 -0
  148. package/dist/core/fs-utils.d.ts +4 -0
  149. package/dist/core/fs-utils.d.ts.map +1 -0
  150. package/dist/core/fs-utils.js +31 -0
  151. package/dist/core/fs-utils.js.map +1 -0
  152. package/dist/core/output.d.ts +19 -0
  153. package/dist/core/output.d.ts.map +1 -0
  154. package/dist/core/output.js +42 -0
  155. package/dist/core/output.js.map +1 -0
  156. package/dist/core/prompts.d.ts +2 -0
  157. package/dist/core/prompts.d.ts.map +1 -0
  158. package/dist/core/prompts.js +2 -0
  159. package/dist/core/prompts.js.map +1 -0
  160. package/dist/core/tasks.d.ts +11 -0
  161. package/dist/core/tasks.d.ts.map +1 -0
  162. package/dist/core/tasks.js +28 -0
  163. package/dist/core/tasks.js.map +1 -0
  164. package/dist/data/mascot.d.ts +13 -0
  165. package/dist/data/mascot.d.ts.map +1 -0
  166. package/dist/data/mascot.js +80 -0
  167. package/dist/data/mascot.js.map +1 -0
  168. package/dist/index.d.ts +4 -0
  169. package/dist/index.d.ts.map +1 -0
  170. package/dist/index.js +68 -0
  171. package/dist/index.js.map +1 -0
  172. package/dist/render/copy-tree.d.ts +5 -0
  173. package/dist/render/copy-tree.d.ts.map +1 -0
  174. package/dist/render/copy-tree.js +146 -0
  175. package/dist/render/copy-tree.js.map +1 -0
  176. package/dist/render/fetch-template.d.ts +9 -0
  177. package/dist/render/fetch-template.d.ts.map +1 -0
  178. package/dist/render/fetch-template.js +113 -0
  179. package/dist/render/fetch-template.js.map +1 -0
  180. package/dist/render/model-gen.d.ts +3 -0
  181. package/dist/render/model-gen.d.ts.map +1 -0
  182. package/dist/render/model-gen.js +23 -0
  183. package/dist/render/model-gen.js.map +1 -0
  184. package/dist/templates/registry.d.ts +14 -0
  185. package/dist/templates/registry.d.ts.map +1 -0
  186. package/dist/templates/registry.js +34 -0
  187. package/dist/templates/registry.js.map +1 -0
  188. package/dist/types.d.ts +87 -0
  189. package/dist/types.d.ts.map +1 -0
  190. package/dist/types.js +8 -0
  191. package/dist/types.js.map +1 -0
  192. package/dist/wizard/presets.d.ts +35 -0
  193. package/dist/wizard/presets.d.ts.map +1 -0
  194. package/dist/wizard/presets.js +67 -0
  195. package/dist/wizard/presets.js.map +1 -0
  196. package/dist/wizard/questions.d.ts +11 -0
  197. package/dist/wizard/questions.d.ts.map +1 -0
  198. package/dist/wizard/questions.js +154 -0
  199. package/dist/wizard/questions.js.map +1 -0
  200. package/package.json +52 -0
  201. package/templates/advanced/.env.example.ejs +82 -0
  202. package/templates/advanced/.node-version +1 -0
  203. package/templates/advanced/README.md.ejs +76 -0
  204. package/templates/advanced/__only_if_hasHttp__/src/servers/remote.ts.ejs +36 -0
  205. package/templates/advanced/__only_if_hasStdio__/src/servers/local.ts +30 -0
  206. package/templates/advanced/__only_if_useAxiosClient__/src/api/axios-client.ts +74 -0
  207. package/templates/advanced/__only_if_useCustomApiClient__/src/api/custom-client.ts +48 -0
  208. package/templates/advanced/__only_if_useCustomConvention__/src/conventions/custom-convention.ts +64 -0
  209. package/templates/advanced/__only_if_useCustomSearch__/src/api-extensions/custom-search-adapter.ts +30 -0
  210. package/templates/advanced/__only_if_useFetchClient__/src/api/fetch-client.ts +111 -0
  211. package/templates/advanced/__only_if_useFlatRestConvention__/src/conventions/flat-rest-convention.ts +85 -0
  212. package/templates/advanced/__only_if_usePinoLogger__/src/observability/logger.ts +62 -0
  213. package/templates/advanced/__only_if_useRansackSearch__/src/api-extensions/ransack-search-adapter.ts +41 -0
  214. package/templates/advanced/__only_if_useSharedModelAttrs__/src/models/app-base-model.ts +22 -0
  215. package/templates/advanced/__only_if_useVectorStorage__/src/storage/vector-store.ts +21 -0
  216. package/templates/advanced/__only_if_withAnalysis__/docker-compose.yml +18 -0
  217. package/templates/advanced/__only_if_withDomain__/src/domain/registry.ts +25 -0
  218. package/templates/advanced/config/schema.ts.ejs +126 -0
  219. package/templates/advanced/package.json.ejs +50 -0
  220. package/templates/advanced/src/config.ts.ejs +207 -0
  221. package/templates/advanced/src/db.ts.ejs +35 -0
  222. package/templates/advanced/src/models/_model_.ts.ejs +25 -0
  223. package/templates/advanced/src/models/index.ts.ejs +13 -0
  224. package/templates/advanced/src/profiles.ts +44 -0
  225. package/templates/advanced/src/prompts/_model_-prompt.ts.ejs +27 -0
  226. package/templates/advanced/src/prompts/index.ts.ejs +18 -0
  227. package/templates/advanced/src/scripts/db-migrate.ts +90 -0
  228. package/templates/advanced/src/tools/index.ts.ejs +133 -0
  229. package/templates/advanced/test/smoke.test.ts +16 -0
  230. package/templates/advanced/tsconfig.json +14 -0
  231. package/templates/simple/.env.example +3 -0
  232. package/templates/simple/.node-version +1 -0
  233. package/templates/simple/README.md +40 -0
  234. package/templates/simple/package.json.ejs +27 -0
  235. package/templates/simple/src/config.ts.ejs +56 -0
  236. package/templates/simple/src/models/_model_.ts.ejs +25 -0
  237. package/templates/simple/src/models/index.ts.ejs +13 -0
  238. package/templates/simple/src/prompts/_model_-prompt.ts.ejs +27 -0
  239. package/templates/simple/src/prompts/index.ts.ejs +18 -0
  240. package/templates/simple/src/server.ts +12 -0
  241. package/templates/simple/test/smoke.test.ts +16 -0
  242. package/templates/simple/tsconfig.json +14 -0
@@ -0,0 +1,166 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ export async function runProjectChecks(projectDir) {
5
+ if (!existsSync(resolve(projectDir, 'package.json'))) {
6
+ return [
7
+ {
8
+ status: 'fail',
9
+ label: 'project root has no package.json',
10
+ hint: `expected at ${projectDir}/package.json`,
11
+ },
12
+ ];
13
+ }
14
+ // Delegate to the project's installed mcp-rune so the validator stays
15
+ // version-aligned with the model definitions.
16
+ const validatorPath = resolve(projectDir, 'node_modules/@mcp-rune/mcp-rune/dist/core/schema-validation.js');
17
+ if (!existsSync(validatorPath)) {
18
+ return [
19
+ {
20
+ status: 'fail',
21
+ label: '@mcp-rune/mcp-rune does not expose schema-validation',
22
+ hint: 'this project is on an older @mcp-rune/mcp-rune. Upgrade to a version that exports validateRegistries.',
23
+ },
24
+ ];
25
+ }
26
+ let validatorModule;
27
+ try {
28
+ validatorModule = (await import(pathToFileURL(validatorPath).href));
29
+ }
30
+ catch (err) {
31
+ return [
32
+ {
33
+ status: 'fail',
34
+ label: 'failed to load schema-validation from @mcp-rune/mcp-rune',
35
+ hint: err.message,
36
+ },
37
+ ];
38
+ }
39
+ const registries = await loadRegistries(projectDir);
40
+ if ('error' in registries) {
41
+ return [{ status: 'fail', label: registries.error, hint: registries.hint }];
42
+ }
43
+ const { models, forms, prompts } = registries;
44
+ let report;
45
+ try {
46
+ report = validatorModule.validateRegistries({
47
+ models,
48
+ ...(forms && { forms }),
49
+ ...(prompts && { prompts }),
50
+ });
51
+ }
52
+ catch (err) {
53
+ return [
54
+ {
55
+ status: 'fail',
56
+ label: 'validateRegistries threw during validation',
57
+ hint: err.message,
58
+ },
59
+ ];
60
+ }
61
+ if (report.errors.length === 0 && report.warnings.length === 0) {
62
+ const modelCount = Object.keys(models).length;
63
+ return [
64
+ {
65
+ status: 'ok',
66
+ label: `${modelCount} model(s) validate cleanly`,
67
+ hint: (forms ? `${Object.keys(forms).length} form(s) checked. ` : '') +
68
+ (prompts ? `${Object.keys(prompts).length} prompt(s) checked.` : ''),
69
+ },
70
+ ];
71
+ }
72
+ const results = [];
73
+ for (const issue of report.errors) {
74
+ results.push({ status: 'fail', label: formatIssue(issue), hint: issue.hint });
75
+ }
76
+ for (const issue of report.warnings) {
77
+ results.push({ status: 'warn', label: formatIssue(issue), hint: issue.hint });
78
+ }
79
+ return results;
80
+ }
81
+ function formatIssue(issue) {
82
+ const ref = issue.attribute ? `${issue.model}.${issue.attribute}` : issue.model;
83
+ return `[${ref}] ${issue.message}`;
84
+ }
85
+ async function loadRegistries(projectDir) {
86
+ const modelsPath = resolve(projectDir, 'src/models/index.js');
87
+ if (!existsSync(modelsPath)) {
88
+ return { error: 'src/models/index.js not found', hint: `expected at ${modelsPath}` };
89
+ }
90
+ let modelsModule;
91
+ try {
92
+ modelsModule = (await import(pathToFileURL(modelsPath).href));
93
+ }
94
+ catch (err) {
95
+ return {
96
+ error: 'failed to import src/models/index.js',
97
+ hint: err.message,
98
+ };
99
+ }
100
+ const models = collectModels(modelsModule);
101
+ if (!models) {
102
+ return {
103
+ error: 'src/models/index.js does not export MODEL_CLASSES',
104
+ hint: 'expected `export const MODEL_CLASSES = { name: Class, ... }`',
105
+ };
106
+ }
107
+ const forms = await loadRegistryMap(projectDir, 'forms', 'FORM_CLASSES', 'formClass');
108
+ const prompts = await loadRegistryMap(projectDir, 'prompts', 'PROMPT_CLASSES', 'promptClass');
109
+ return { models, forms, prompts };
110
+ }
111
+ function collectModels(mod) {
112
+ if (mod.MODEL_CLASSES && typeof mod.MODEL_CLASSES === 'object') {
113
+ return mod.MODEL_CLASSES;
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Load an optional registry (forms or prompts). Returns the map keyed by
119
+ * model name, or undefined if the project doesn't ship that registry. Two
120
+ * shapes are recognized: a `<UPPERCASE>_CLASSES` export or a
121
+ * `<lowercase>Registry` with `getFormModels()` / `getFormClassByModel(name)`.
122
+ */
123
+ async function loadRegistryMap(projectDir, dir, upperKey, classKey) {
124
+ const indexPath = resolve(projectDir, `src/${dir}/index.js`);
125
+ if (!existsSync(indexPath))
126
+ return undefined;
127
+ let mod;
128
+ try {
129
+ mod = (await import(pathToFileURL(indexPath).href));
130
+ }
131
+ catch {
132
+ return undefined;
133
+ }
134
+ // Shape 1: bare `<UPPER>_CLASSES = { model: ClassRef }` map.
135
+ if (mod[upperKey] && typeof mod[upperKey] === 'object') {
136
+ const map = mod[upperKey];
137
+ const flat = {};
138
+ for (const [name, entry] of Object.entries(map)) {
139
+ // engineer-mcp's FORM_CLASSES wraps the class in `{ formClass, model }`.
140
+ const entryRecord = entry;
141
+ flat[name] = entryRecord && classKey in entryRecord ? entryRecord[classKey] : entry;
142
+ }
143
+ return flat;
144
+ }
145
+ // Shape 2: a registry instance with getter methods.
146
+ const registryName = `${dir === 'forms' ? 'form' : 'prompt'}Registry`;
147
+ const registry = mod[registryName];
148
+ if (!registry)
149
+ return undefined;
150
+ const getModels = typeof registry.getFormModels === 'function' ? registry.getFormModels.bind(registry) : null;
151
+ const getClass = typeof registry.getFormClassByModel === 'function'
152
+ ? registry.getFormClassByModel.bind(registry)
153
+ : typeof registry.getPromptClassByModel === 'function'
154
+ ? registry.getPromptClassByModel.bind(registry)
155
+ : null;
156
+ if (!getModels || !getClass)
157
+ return undefined;
158
+ const flat = {};
159
+ for (const name of getModels()) {
160
+ const cls = getClass(name);
161
+ if (cls)
162
+ flat[name] = cls;
163
+ }
164
+ return flat;
165
+ }
166
+ //# sourceMappingURL=project-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-validation.js","sourceRoot":"","sources":["../../../src/commands/doctor/project-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface DoctorOptions {
2
+ /** Path to a scaffolded project to additionally lint with validateRegistries. */
3
+ project?: string | true;
4
+ }
5
+ export declare function doctorCommand(opts?: DoctorOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC3E"}
@@ -0,0 +1,306 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { execa } from 'execa';
5
+ import kleur from 'kleur';
6
+ export async function doctorCommand(opts = {}) {
7
+ const results = [];
8
+ for (const check of CHECKS) {
9
+ const r = await check();
10
+ if ('skip' in r)
11
+ continue;
12
+ results.push(r);
13
+ print(r);
14
+ }
15
+ if (opts.project) {
16
+ const projectDir = opts.project === true ? process.cwd() : resolve(opts.project);
17
+ console.log();
18
+ console.log(kleur.bold(`Project schema check (${projectDir})`));
19
+ const projectResults = await runProjectChecks(projectDir);
20
+ for (const r of projectResults) {
21
+ results.push(r);
22
+ print(r);
23
+ }
24
+ }
25
+ const failed = results.filter((r) => r.status === 'fail').length;
26
+ const warned = results.filter((r) => r.status === 'warn').length;
27
+ console.log();
28
+ if (failed > 0) {
29
+ console.log(kleur.red(`${failed} check(s) failed${warned ? `, ${warned} warning(s)` : ''}.`));
30
+ process.exitCode = 1;
31
+ }
32
+ else if (warned > 0) {
33
+ console.log(kleur.yellow(`${warned} warning(s).`));
34
+ }
35
+ else {
36
+ console.log(kleur.green('All checks passed.'));
37
+ }
38
+ }
39
+ async function runProjectChecks(projectDir) {
40
+ // 1. Project sanity check
41
+ if (!existsSync(resolve(projectDir, 'package.json'))) {
42
+ return [
43
+ {
44
+ status: 'fail',
45
+ label: 'project root has no package.json',
46
+ hint: `expected at ${projectDir}/package.json`,
47
+ },
48
+ ];
49
+ }
50
+ // 2. Locate the project's installed mcp-rune (we delegate to it so the
51
+ // validator stays version-aligned with the model definitions).
52
+ const validatorPath = resolve(projectDir, 'node_modules/@mcp-rune/mcp-rune/dist/core/schema-validation.js');
53
+ if (!existsSync(validatorPath)) {
54
+ return [
55
+ {
56
+ status: 'fail',
57
+ label: '@mcp-rune/mcp-rune does not expose schema-validation',
58
+ hint: 'this project is on an older @mcp-rune/mcp-rune. Upgrade to a version that exports validateRegistries.',
59
+ },
60
+ ];
61
+ }
62
+ let validatorModule;
63
+ try {
64
+ validatorModule = (await import(pathToFileURL(validatorPath).href));
65
+ }
66
+ catch (err) {
67
+ return [
68
+ {
69
+ status: 'fail',
70
+ label: 'failed to load schema-validation from @mcp-rune/mcp-rune',
71
+ hint: err.message,
72
+ },
73
+ ];
74
+ }
75
+ // 3. Load the project's registries. We only mandate models — forms and
76
+ // prompts are optional and only some scaffolded projects emit them.
77
+ const registries = await loadRegistries(projectDir);
78
+ if ('error' in registries) {
79
+ return [{ status: 'fail', label: registries.error, hint: registries.hint }];
80
+ }
81
+ const { models, forms, prompts } = registries;
82
+ // 4. Run the validator.
83
+ let report;
84
+ try {
85
+ report = validatorModule.validateRegistries({
86
+ models,
87
+ ...(forms && { forms }),
88
+ ...(prompts && { prompts }),
89
+ });
90
+ }
91
+ catch (err) {
92
+ return [
93
+ {
94
+ status: 'fail',
95
+ label: 'validateRegistries threw during validation',
96
+ hint: err.message,
97
+ },
98
+ ];
99
+ }
100
+ // 5. Render the report as CheckResults.
101
+ if (report.errors.length === 0 && report.warnings.length === 0) {
102
+ const modelCount = Object.keys(models).length;
103
+ return [
104
+ {
105
+ status: 'ok',
106
+ label: `${modelCount} model(s) validate cleanly`,
107
+ hint: (forms ? `${Object.keys(forms).length} form(s) checked. ` : '') +
108
+ (prompts ? `${Object.keys(prompts).length} prompt(s) checked.` : ''),
109
+ },
110
+ ];
111
+ }
112
+ const results = [];
113
+ for (const issue of report.errors) {
114
+ results.push({ status: 'fail', label: formatIssue(issue), hint: issue.hint });
115
+ }
116
+ for (const issue of report.warnings) {
117
+ results.push({ status: 'warn', label: formatIssue(issue), hint: issue.hint });
118
+ }
119
+ return results;
120
+ }
121
+ function formatIssue(issue) {
122
+ const ref = issue.attribute ? `${issue.model}.${issue.attribute}` : issue.model;
123
+ return `[${ref}] ${issue.message}`;
124
+ }
125
+ async function loadRegistries(projectDir) {
126
+ const modelsPath = resolve(projectDir, 'src/models/index.js');
127
+ if (!existsSync(modelsPath)) {
128
+ return { error: 'src/models/index.js not found', hint: `expected at ${modelsPath}` };
129
+ }
130
+ let modelsModule;
131
+ try {
132
+ modelsModule = (await import(pathToFileURL(modelsPath).href));
133
+ }
134
+ catch (err) {
135
+ return {
136
+ error: 'failed to import src/models/index.js',
137
+ hint: err.message,
138
+ };
139
+ }
140
+ const models = collectModels(modelsModule);
141
+ if (!models) {
142
+ return {
143
+ error: 'src/models/index.js does not export MODEL_CLASSES',
144
+ hint: 'expected `export const MODEL_CLASSES = { name: Class, ... }`',
145
+ };
146
+ }
147
+ const forms = await loadRegistryMap(projectDir, 'forms', 'FORM_CLASSES', 'formClass');
148
+ const prompts = await loadRegistryMap(projectDir, 'prompts', 'PROMPT_CLASSES', 'promptClass');
149
+ return { models, forms, prompts };
150
+ }
151
+ function collectModels(mod) {
152
+ if (mod.MODEL_CLASSES && typeof mod.MODEL_CLASSES === 'object') {
153
+ return mod.MODEL_CLASSES;
154
+ }
155
+ return null;
156
+ }
157
+ /**
158
+ * Load an optional registry (forms or prompts). Returns the map keyed by
159
+ * model name, or undefined if the project doesn't ship that registry. We try
160
+ * a few shapes — a `<UPPERCASE>_CLASSES` export or a `<lowercase>Registry`
161
+ * with `getFormModels()` / `getFormClassByModel(name)`.
162
+ */
163
+ async function loadRegistryMap(projectDir, dir, upperKey, classKey) {
164
+ const indexPath = resolve(projectDir, `src/${dir}/index.js`);
165
+ if (!existsSync(indexPath))
166
+ return undefined;
167
+ let mod;
168
+ try {
169
+ mod = (await import(pathToFileURL(indexPath).href));
170
+ }
171
+ catch {
172
+ return undefined;
173
+ }
174
+ // Shape 1: bare `<UPPER>_CLASSES = { model: ClassRef }` map.
175
+ if (mod[upperKey] && typeof mod[upperKey] === 'object') {
176
+ const map = mod[upperKey];
177
+ const flat = {};
178
+ for (const [name, entry] of Object.entries(map)) {
179
+ // engineer-mcp's FORM_CLASSES wraps the class in `{ formClass, model }`.
180
+ const entryRecord = entry;
181
+ flat[name] =
182
+ entryRecord && classKey in entryRecord ? entryRecord[classKey] : entry;
183
+ }
184
+ return flat;
185
+ }
186
+ // Shape 2: a registry instance with getter methods.
187
+ const registryName = `${dir === 'forms' ? 'form' : 'prompt'}Registry`;
188
+ const registry = mod[registryName];
189
+ if (!registry)
190
+ return undefined;
191
+ const getModels = typeof registry.getFormModels === 'function' ? registry.getFormModels.bind(registry) : null;
192
+ const getClass = typeof registry.getFormClassByModel === 'function'
193
+ ? registry.getFormClassByModel.bind(registry)
194
+ : typeof registry.getPromptClassByModel === 'function'
195
+ ? registry.getPromptClassByModel.bind(registry)
196
+ : null;
197
+ if (!getModels || !getClass)
198
+ return undefined;
199
+ const flat = {};
200
+ for (const name of getModels()) {
201
+ const cls = getClass(name);
202
+ if (cls)
203
+ flat[name] = cls;
204
+ }
205
+ return flat;
206
+ }
207
+ function print(r) {
208
+ const icon = r.status === 'ok' ? kleur.green('✓') : r.status === 'warn' ? kleur.yellow('!') : kleur.red('✗');
209
+ const suffix = r.hint ? kleur.dim(` — ${r.hint}`) : '';
210
+ console.log(`${icon} ${r.label}${suffix}`);
211
+ }
212
+ const CHECKS = [
213
+ async () => {
214
+ const major = Number.parseInt(process.versions.node.split('.')[0], 10);
215
+ if (major >= 24)
216
+ return { status: 'ok', label: `Node.js ${process.versions.node}` };
217
+ if (major >= 22) {
218
+ return {
219
+ status: 'warn',
220
+ label: `Node.js ${process.versions.node}`,
221
+ hint: 'scaffolded projects require >= 24',
222
+ };
223
+ }
224
+ return {
225
+ status: 'fail',
226
+ label: `Node.js ${process.versions.node}`,
227
+ hint: 'CLI requires >= 22; scaffolded projects require >= 24',
228
+ };
229
+ },
230
+ async () => {
231
+ try {
232
+ const { stdout } = await execa('npm', ['--version']);
233
+ return { status: 'ok', label: `npm ${stdout.trim()}` };
234
+ }
235
+ catch {
236
+ return { status: 'fail', label: 'npm', hint: 'not found in PATH' };
237
+ }
238
+ },
239
+ async () => {
240
+ const set = Boolean(process.env.GH_PACKAGES_READ_TOKEN);
241
+ return set
242
+ ? { status: 'ok', label: 'GH_PACKAGES_READ_TOKEN set' }
243
+ : {
244
+ status: 'warn',
245
+ label: 'GH_PACKAGES_READ_TOKEN not set',
246
+ hint: 'install of @mcp-rune/mcp-rune will fail; create at github.com/settings/tokens',
247
+ };
248
+ },
249
+ async () => {
250
+ try {
251
+ await execa('docker', ['info'], { timeout: 3000 });
252
+ return { status: 'ok', label: 'Docker daemon reachable' };
253
+ }
254
+ catch {
255
+ return {
256
+ status: 'warn',
257
+ label: 'Docker not reachable',
258
+ hint: 'needed for the analysis module (skip if unused)',
259
+ };
260
+ }
261
+ },
262
+ async () => {
263
+ const pkgPath = resolve(process.cwd(), 'package.json');
264
+ if (!existsSync(pkgPath))
265
+ return { skip: true };
266
+ let pkg;
267
+ try {
268
+ pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
269
+ }
270
+ catch {
271
+ return { skip: true };
272
+ }
273
+ if (!pkg.dependencies?.['@mcp-rune/mcp-rune'])
274
+ return { skip: true };
275
+ const installed = existsSync(resolve(process.cwd(), 'node_modules/@mcp-rune/mcp-rune'));
276
+ return installed
277
+ ? { status: 'ok', label: '@mcp-rune/mcp-rune installed in this project' }
278
+ : {
279
+ status: 'warn',
280
+ label: '@mcp-rune/mcp-rune not installed in this project',
281
+ hint: 'run `npm install`',
282
+ };
283
+ },
284
+ async () => {
285
+ if (!existsSync(resolve(process.cwd(), 'docker-compose.yml')))
286
+ return { skip: true };
287
+ try {
288
+ const { stdout } = await execa('docker', ['compose', 'ps', '--format', 'json'], {
289
+ cwd: process.cwd(),
290
+ timeout: 3000,
291
+ });
292
+ const running = stdout.trim().length > 0;
293
+ return running
294
+ ? { status: 'ok', label: 'docker-compose services running' }
295
+ : {
296
+ status: 'warn',
297
+ label: 'docker-compose.yml present but no services running',
298
+ hint: 'run `rune db up`',
299
+ };
300
+ }
301
+ catch {
302
+ return { status: 'warn', label: 'docker-compose.yml present but compose not reachable' };
303
+ }
304
+ },
305
+ ];
306
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface InspectCommandOptions {
2
+ transport?: 'stdio' | 'http';
3
+ url?: string;
4
+ port?: string;
5
+ server?: string;
6
+ }
7
+ export type DetectedTransport = {
8
+ kind: 'stdio';
9
+ serverPath: string;
10
+ } | {
11
+ kind: 'http';
12
+ url: string;
13
+ };
14
+ export declare function detectTransport(cwd: string, opts: InspectCommandOptions): DetectedTransport;
15
+ export declare function inspectCommand(opts: InspectCommandOptions): Promise<void>;
16
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AASlC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CA8B3F;AAWD,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/E"}
@@ -0,0 +1,66 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { hint } from '../core/output.js';
5
+ const DEFAULT_PORT = 4100;
6
+ const DEFAULT_PATH_PREFIX = '/mcp';
7
+ const INSPECTOR_PKG = '@modelcontextprotocol/inspector';
8
+ const STDIO_CANDIDATES = ['src/servers/local.js', 'src/server.js'];
9
+ const HTTP_SERVER_PATH = 'src/servers/remote.js';
10
+ export function detectTransport(cwd, opts) {
11
+ if (opts.transport === 'http' || opts.url) {
12
+ return { kind: 'http', url: opts.url ?? defaultHttpUrl(opts.port) };
13
+ }
14
+ if (opts.transport === 'stdio' || opts.server) {
15
+ const rel = opts.server ?? firstExisting(cwd, STDIO_CANDIDATES);
16
+ if (!rel) {
17
+ throw new Error('No stdio server entry found. Pass --server <path> or run from a scaffolded project.');
18
+ }
19
+ const abs = resolve(cwd, rel);
20
+ if (!existsSync(abs)) {
21
+ throw new Error(`Server entry not found: ${abs}`);
22
+ }
23
+ return { kind: 'stdio', serverPath: abs };
24
+ }
25
+ if (existsSync(resolve(cwd, HTTP_SERVER_PATH))) {
26
+ return { kind: 'http', url: defaultHttpUrl(opts.port) };
27
+ }
28
+ const stdio = firstExisting(cwd, STDIO_CANDIDATES);
29
+ if (stdio) {
30
+ return { kind: 'stdio', serverPath: resolve(cwd, stdio) };
31
+ }
32
+ throw new Error('Could not detect an MCP server. Run `rune inspect` from a scaffolded project, or pass --server <path> / --url <url>.');
33
+ }
34
+ function defaultHttpUrl(port) {
35
+ const p = port ?? String(DEFAULT_PORT);
36
+ return `http://localhost:${p}${DEFAULT_PATH_PREFIX}`;
37
+ }
38
+ function firstExisting(cwd, candidates) {
39
+ return candidates.find((rel) => existsSync(resolve(cwd, rel)));
40
+ }
41
+ export async function inspectCommand(opts) {
42
+ const cwd = process.cwd();
43
+ const detected = detectTransport(cwd, opts);
44
+ const args = detected.kind === 'stdio'
45
+ ? [INSPECTOR_PKG, 'node', detected.serverPath]
46
+ : [INSPECTOR_PKG, '--url', detected.url];
47
+ if (detected.kind === 'stdio') {
48
+ hint(` launching inspector against ${detected.serverPath}`);
49
+ }
50
+ else {
51
+ hint(` connecting inspector to ${detected.url}`);
52
+ hint(' the server must be running — start it with npm run start:remote');
53
+ }
54
+ await new Promise((resolvePromise, rejectPromise) => {
55
+ const child = spawn('npx', args, { cwd, stdio: 'inherit' });
56
+ child.on('error', rejectPromise);
57
+ child.on('exit', (code, signal) => {
58
+ if (code === 0 || code === null)
59
+ return resolvePromise();
60
+ if (signal === 'SIGINT' || code === 130)
61
+ return resolvePromise();
62
+ rejectPromise(new Error(`inspector exited with code ${code}`));
63
+ });
64
+ });
65
+ }
66
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NewContext } from '../context.js';
2
+ type Ctx = Pick<NewContext, 'scaffoldMode' | 'preset' | 'apiConvention' | 'apiClient' | 'searchAdapter' | 'yes'>;
3
+ export declare function apps(ctx: Ctx): Promise<void>;
4
+ export {};
5
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../../src/commands/new/actions/apps.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,KAAK,GAAG,GAAG,IAAI,CACb,UAAU,EACV,cAAc,GAAG,QAAQ,GAAG,eAAe,GAAG,WAAW,GAAG,eAAe,GAAG,KAAK,CACpF,CAAC;AAEF,wBAAsB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ClD"}