@adaptabletools/adaptable-mcp 0.1.0-canary.0 → 0.1.0-canary.2

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 (348) hide show
  1. package/README.md +58 -61
  2. package/data/changes/21-22.json +542 -0
  3. package/data/changes/22-23.json +639 -0
  4. package/data/changes/23-24.json +1874 -0
  5. package/data/manifest.snapshot.json +202 -0
  6. package/data/templates/angular/src/app/adaptableOptions.ts +40 -0
  7. package/data/templates/angular/src/app/agGridModules.ts +7 -0
  8. package/data/templates/angular/src/app/app.component.ts +66 -0
  9. package/data/templates/angular/src/app/app.module.ts +14 -0
  10. package/data/templates/angular/src/app/columnDefs.ts +121 -0
  11. package/data/templates/angular/src/app/gridOptions.ts +32 -0
  12. package/data/templates/angular/src/app/onAdaptableReady.ts +11 -0
  13. package/data/templates/angular/src/app/rowData.ts +851 -0
  14. package/data/templates/angular/src/app/styles.css +50 -0
  15. package/data/templates/angular/src/index.html +17 -0
  16. package/data/templates/angular/src/main.ts +18 -0
  17. package/data/templates/angular/src/polyfills.ts +1 -0
  18. package/data/templates/angular/tsconfig.json +16 -0
  19. package/data/templates/manifest.json +406 -0
  20. package/data/templates/react/src/App.tsx +71 -0
  21. package/data/templates/react/src/adaptableOptions.ts +40 -0
  22. package/data/templates/react/src/agGridModules.ts +7 -0
  23. package/data/templates/react/src/columnDefs.ts +121 -0
  24. package/data/templates/react/src/gridOptions.ts +32 -0
  25. package/data/templates/react/src/index.tsx +8 -0
  26. package/data/templates/react/src/onAdaptableReady.ts +11 -0
  27. package/data/templates/react/src/rowData.ts +851 -0
  28. package/data/templates/react/src/styles.css +50 -0
  29. package/data/templates/react/tsconfig.json +9 -0
  30. package/data/templates/vanilla/index.html +18 -0
  31. package/data/templates/vanilla/src/adaptableOptions.ts +40 -0
  32. package/data/templates/vanilla/src/agGridModules.ts +7 -0
  33. package/data/templates/vanilla/src/columnDefs.ts +121 -0
  34. package/data/templates/vanilla/src/gridOptions.ts +32 -0
  35. package/data/templates/vanilla/src/index.ts +41 -0
  36. package/data/templates/vanilla/src/onAdaptableReady.ts +11 -0
  37. package/data/templates/vanilla/src/rowData.ts +851 -0
  38. package/data/templates/vanilla/src/styles.css +50 -0
  39. package/data/templates/vanilla/tsconfig.json +14 -0
  40. package/data/templates/vue/.babelrc +3 -0
  41. package/data/templates/vue/public/index.html +19 -0
  42. package/data/templates/vue/src/App.vue +35 -0
  43. package/data/templates/vue/src/adaptableOptions.ts +40 -0
  44. package/data/templates/vue/src/agGridModules.ts +7 -0
  45. package/data/templates/vue/src/columnDefs.ts +121 -0
  46. package/data/templates/vue/src/gridOptions.ts +32 -0
  47. package/data/templates/vue/src/main.ts +6 -0
  48. package/data/templates/vue/src/onAdaptableReady.ts +11 -0
  49. package/data/templates/vue/src/rowData.ts +851 -0
  50. package/data/templates/vue/src/shims-vue.d.ts +6 -0
  51. package/data/templates/vue/src/styles.css +50 -0
  52. package/data/templates/vue/tsconfig.json +30 -0
  53. package/dist/bin.js +23 -0
  54. package/dist/bin.js.map +1 -0
  55. package/dist/cli/build-commands.js +200 -0
  56. package/dist/cli/build-commands.js.map +1 -0
  57. package/dist/cli/index.js +94 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/render.js +57 -0
  60. package/dist/cli/render.js.map +1 -0
  61. package/dist/core/anonymise/anonymise.js +315 -0
  62. package/dist/core/anonymise/anonymise.js.map +1 -0
  63. package/dist/core/anonymise/capabilities.js +94 -0
  64. package/dist/core/anonymise/capabilities.js.map +1 -0
  65. package/dist/core/aql/capabilities.js +339 -0
  66. package/dist/core/aql/capabilities.js.map +1 -0
  67. package/dist/core/aql/check.js +204 -0
  68. package/dist/core/aql/check.js.map +1 -0
  69. package/dist/core/aql/engine.js +92 -0
  70. package/dist/core/aql/engine.js.map +1 -0
  71. package/dist/core/aql/functions.js +108 -0
  72. package/dist/core/aql/functions.js.map +1 -0
  73. package/dist/core/aql/migrate.js +62 -0
  74. package/dist/core/aql/migrate.js.map +1 -0
  75. package/dist/core/capabilities.js +105 -0
  76. package/dist/core/capabilities.js.map +1 -0
  77. package/dist/core/changes/capabilities.js +92 -0
  78. package/dist/core/changes/capabilities.js.map +1 -0
  79. package/dist/core/changes/changes.js +101 -0
  80. package/dist/core/changes/changes.js.map +1 -0
  81. package/dist/core/changes/grep.js +183 -0
  82. package/dist/core/changes/grep.js.map +1 -0
  83. package/dist/core/changes/records.js +172 -0
  84. package/dist/core/changes/records.js.map +1 -0
  85. package/dist/core/changes/render-md.js +101 -0
  86. package/dist/core/changes/render-md.js.map +1 -0
  87. package/dist/core/changes/with-docs.js +86 -0
  88. package/dist/core/changes/with-docs.js.map +1 -0
  89. package/dist/core/compat/capabilities.js +127 -0
  90. package/dist/core/compat/capabilities.js.map +1 -0
  91. package/dist/core/compat/manifest.js +203 -0
  92. package/dist/core/compat/manifest.js.map +1 -0
  93. package/dist/core/constants.js +38 -0
  94. package/dist/core/constants.js.map +1 -0
  95. package/dist/core/context/capabilities.js +106 -0
  96. package/dist/core/context/capabilities.js.map +1 -0
  97. package/dist/core/context/detect.js +370 -0
  98. package/dist/core/context/detect.js.map +1 -0
  99. package/dist/core/context/projects.js +159 -0
  100. package/dist/core/context/projects.js.map +1 -0
  101. package/dist/core/context/resolve.js +85 -0
  102. package/dist/core/context/resolve.js.map +1 -0
  103. package/dist/core/convert/capabilities.js +86 -0
  104. package/dist/core/convert/capabilities.js.map +1 -0
  105. package/dist/core/convert/coldefs.js +313 -0
  106. package/dist/core/convert/coldefs.js.map +1 -0
  107. package/dist/core/docs/areas.js +22 -0
  108. package/dist/core/docs/areas.js.map +1 -0
  109. package/dist/core/docs/cache.js +133 -0
  110. package/dist/core/docs/cache.js.map +1 -0
  111. package/dist/core/docs/capabilities.js +377 -0
  112. package/dist/core/docs/capabilities.js.map +1 -0
  113. package/dist/core/docs/corpus.js.map +1 -0
  114. package/dist/core/docs/demos.js +105 -0
  115. package/dist/core/docs/demos.js.map +1 -0
  116. package/dist/core/docs/get-page.js +182 -0
  117. package/dist/core/docs/get-page.js.map +1 -0
  118. package/dist/core/docs/hosts.js +74 -0
  119. package/dist/core/docs/hosts.js.map +1 -0
  120. package/dist/core/docs/search.js.map +1 -0
  121. package/dist/core/envelope.js +79 -0
  122. package/dist/core/envelope.js.map +1 -0
  123. package/dist/core/extract/imports.js +163 -0
  124. package/dist/core/extract/imports.js.map +1 -0
  125. package/dist/core/extract/input.js +140 -0
  126. package/dist/core/extract/input.js.map +1 -0
  127. package/dist/core/extract/line-map.js +90 -0
  128. package/dist/core/extract/line-map.js.map +1 -0
  129. package/dist/core/extract/ts-literal.js +963 -0
  130. package/dist/core/extract/ts-literal.js.map +1 -0
  131. package/dist/core/index.js +13 -0
  132. package/dist/core/index.js.map +1 -0
  133. package/dist/core/migrate/capabilities.js +143 -0
  134. package/dist/core/migrate/capabilities.js.map +1 -0
  135. package/dist/core/migrate/leftovers.js +119 -0
  136. package/dist/core/migrate/leftovers.js.map +1 -0
  137. package/dist/core/migrate/state.js +295 -0
  138. package/dist/core/migrate/state.js.map +1 -0
  139. package/dist/core/packages/cache.js +139 -0
  140. package/dist/core/packages/cache.js.map +1 -0
  141. package/dist/core/packages/capabilities.js +95 -0
  142. package/dist/core/packages/capabilities.js.map +1 -0
  143. package/dist/{adaptable/types.js → core/packages/entry-types.js} +1 -1
  144. package/dist/core/packages/entry-types.js.map +1 -0
  145. package/dist/core/packages/exec.js +37 -0
  146. package/dist/core/packages/exec.js.map +1 -0
  147. package/dist/core/packages/load-entry.js +123 -0
  148. package/dist/core/packages/load-entry.js.map +1 -0
  149. package/dist/core/packages/prepare.js +122 -0
  150. package/dist/core/packages/prepare.js.map +1 -0
  151. package/dist/core/packages/registry.js +75 -0
  152. package/dist/core/packages/registry.js.map +1 -0
  153. package/dist/core/packages/resolve.js +94 -0
  154. package/dist/core/packages/resolve.js.map +1 -0
  155. package/dist/core/packages/versions.js +71 -0
  156. package/dist/core/packages/versions.js.map +1 -0
  157. package/dist/core/ping.js +22 -0
  158. package/dist/core/ping.js.map +1 -0
  159. package/dist/core/register.js +18 -0
  160. package/dist/core/register.js.map +1 -0
  161. package/dist/core/scaffold/capabilities.js +434 -0
  162. package/dist/core/scaffold/capabilities.js.map +1 -0
  163. package/dist/core/scaffold/generate.js +409 -0
  164. package/dist/core/scaffold/generate.js.map +1 -0
  165. package/dist/core/scaffold/infer.js +441 -0
  166. package/dist/core/scaffold/infer.js.map +1 -0
  167. package/dist/core/scaffold/overlay.js +290 -0
  168. package/dist/core/scaffold/overlay.js.map +1 -0
  169. package/dist/core/scaffold/readers/csv.js +146 -0
  170. package/dist/core/scaffold/readers/csv.js.map +1 -0
  171. package/dist/core/scaffold/readers/dataset.js +53 -0
  172. package/dist/core/scaffold/readers/dataset.js.map +1 -0
  173. package/dist/core/scaffold/readers/index.js +62 -0
  174. package/dist/core/scaffold/readers/index.js.map +1 -0
  175. package/dist/core/scaffold/readers/json.js +101 -0
  176. package/dist/core/scaffold/readers/json.js.map +1 -0
  177. package/dist/core/scaffold/readers/xlsx.js +81 -0
  178. package/dist/core/scaffold/readers/xlsx.js.map +1 -0
  179. package/dist/core/scaffold/suggestions.js +57 -0
  180. package/dist/core/scaffold/suggestions.js.map +1 -0
  181. package/dist/core/scaffold/templates.js +59 -0
  182. package/dist/core/scaffold/templates.js.map +1 -0
  183. package/dist/core/setup/audit.js +91 -0
  184. package/dist/core/setup/audit.js.map +1 -0
  185. package/dist/core/setup/capabilities.js +80 -0
  186. package/dist/core/setup/capabilities.js.map +1 -0
  187. package/dist/core/setup/context.js +118 -0
  188. package/dist/core/setup/context.js.map +1 -0
  189. package/dist/core/setup/rules/cell-data-type.js +40 -0
  190. package/dist/core/setup/rules/cell-data-type.js.map +1 -0
  191. package/dist/core/setup/rules/coldef-ownership.js +67 -0
  192. package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
  193. package/dist/core/setup/rules/css-import.js +34 -0
  194. package/dist/core/setup/rules/css-import.js.map +1 -0
  195. package/dist/core/setup/rules/direct-grid.js +42 -0
  196. package/dist/core/setup/rules/direct-grid.js.map +1 -0
  197. package/dist/core/setup/rules/index.js +53 -0
  198. package/dist/core/setup/rules/index.js.map +1 -0
  199. package/dist/core/setup/rules/licence-literal.js +23 -0
  200. package/dist/core/setup/rules/licence-literal.js.map +1 -0
  201. package/dist/core/setup/rules/modules.js +86 -0
  202. package/dist/core/setup/rules/modules.js.map +1 -0
  203. package/dist/core/setup/rules/react-stable-refs.js +20 -0
  204. package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
  205. package/dist/core/setup/rules/ready-hook.js +33 -0
  206. package/dist/core/setup/rules/ready-hook.js.map +1 -0
  207. package/dist/core/setup/rules/required-options.js +43 -0
  208. package/dist/core/setup/rules/required-options.js.map +1 -0
  209. package/dist/core/setup/rules/rule.js +10 -0
  210. package/dist/core/setup/rules/rule.js.map +1 -0
  211. package/dist/core/setup/rules/version-skew.js +65 -0
  212. package/dist/core/setup/rules/version-skew.js.map +1 -0
  213. package/dist/core/state/capabilities.js +78 -0
  214. package/dist/core/state/capabilities.js.map +1 -0
  215. package/dist/core/state/check.js +216 -0
  216. package/dist/core/state/check.js.map +1 -0
  217. package/dist/core/state/columns.js +130 -0
  218. package/dist/core/state/columns.js.map +1 -0
  219. package/dist/core/state/did-you-mean.js +83 -0
  220. package/dist/core/state/did-you-mean.js.map +1 -0
  221. package/dist/core/state/expressions.js +170 -0
  222. package/dist/core/state/expressions.js.map +1 -0
  223. package/dist/core/state/known-names.js +96 -0
  224. package/dist/core/state/known-names.js.map +1 -0
  225. package/dist/core/state/rules/aql-legacy-shape.js +42 -0
  226. package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
  227. package/dist/core/state/rules/aql-missing.js +21 -0
  228. package/dist/core/state/rules/aql-missing.js.map +1 -0
  229. package/dist/core/state/rules/aql-syntax.js +77 -0
  230. package/dist/core/state/rules/aql-syntax.js.map +1 -0
  231. package/dist/core/state/rules/calculated-settings.js +23 -0
  232. package/dist/core/state/rules/calculated-settings.js.map +1 -0
  233. package/dist/core/state/rules/column-id-exists.js +29 -0
  234. package/dist/core/state/rules/column-id-exists.js.map +1 -0
  235. package/dist/core/state/rules/dashboard-module-names.js +31 -0
  236. package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
  237. package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
  238. package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
  239. package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
  240. package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
  241. package/dist/core/state/rules/helpers.js +39 -0
  242. package/dist/core/state/rules/helpers.js.map +1 -0
  243. package/dist/core/state/rules/index.js +80 -0
  244. package/dist/core/state/rules/index.js.map +1 -0
  245. package/dist/core/state/rules/layout-column-refs.js +60 -0
  246. package/dist/core/state/rules/layout-column-refs.js.map +1 -0
  247. package/dist/core/state/rules/layout-current-exists.js +27 -0
  248. package/dist/core/state/rules/layout-current-exists.js.map +1 -0
  249. package/dist/core/state/rules/layout-non-empty.js +32 -0
  250. package/dist/core/state/rules/layout-non-empty.js.map +1 -0
  251. package/dist/core/state/rules/rule.js +2 -0
  252. package/dist/core/state/rules/rule.js.map +1 -0
  253. package/dist/core/state/rules/scope-column-refs.js +32 -0
  254. package/dist/core/state/rules/scope-column-refs.js.map +1 -0
  255. package/dist/core/state/rules/scope-shape.js +61 -0
  256. package/dist/core/state/rules/scope-shape.js.map +1 -0
  257. package/dist/core/state/rules/state-unique-name.js +40 -0
  258. package/dist/core/state/rules/state-unique-name.js.map +1 -0
  259. package/dist/core/state/rules/state-unknown-section.js +30 -0
  260. package/dist/core/state/rules/state-unknown-section.js.map +1 -0
  261. package/dist/core/state/rules/type-discriminator.js +70 -0
  262. package/dist/core/state/rules/type-discriminator.js.map +1 -0
  263. package/dist/core/state/type-check.js +408 -0
  264. package/dist/core/state/type-check.js.map +1 -0
  265. package/dist/mcp/index.js +109 -0
  266. package/dist/mcp/index.js.map +1 -0
  267. package/dist/mcp/server.js +110 -0
  268. package/dist/mcp/server.js.map +1 -0
  269. package/dist/skills/adaptable-debug/SKILL.md +145 -0
  270. package/dist/skills/adaptable-debug/VERSION.md +1 -0
  271. package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
  272. package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
  273. package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
  274. package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
  275. package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
  276. package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
  277. package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
  278. package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
  279. package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
  280. package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
  281. package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
  282. package/dist/skills/adaptable-dev/SKILL.md +97 -0
  283. package/dist/skills/adaptable-dev/VERSION.md +1 -0
  284. package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
  285. package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
  286. package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
  287. package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
  288. package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
  289. package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
  290. package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
  291. package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
  292. package/dist/skills/adaptable-setup/SKILL.md +158 -0
  293. package/dist/skills/adaptable-setup/VERSION.md +1 -0
  294. package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
  295. package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
  296. package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
  297. package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
  298. package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
  299. package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
  300. package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
  301. package/dist/skills/adaptable-setup/references/paths.md +45 -0
  302. package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
  303. package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
  304. package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
  305. package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
  306. package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
  307. package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
  308. package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
  309. package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
  310. package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
  311. package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
  312. package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
  313. package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
  314. package/package.json +34 -13
  315. package/dist/adaptable/loadEntry.js +0 -94
  316. package/dist/adaptable/loadEntry.js.map +0 -1
  317. package/dist/adaptable/types.js.map +0 -1
  318. package/dist/cache.js +0 -11
  319. package/dist/cache.js.map +0 -1
  320. package/dist/checks/stateRules.js +0 -389
  321. package/dist/checks/stateRules.js.map +0 -1
  322. package/dist/checks/stateTypes.js +0 -142
  323. package/dist/checks/stateTypes.js.map +0 -1
  324. package/dist/context.js +0 -39
  325. package/dist/context.js.map +0 -1
  326. package/dist/docs/corpus.js.map +0 -1
  327. package/dist/docs/search.js.map +0 -1
  328. package/dist/docs/source.js +0 -151
  329. package/dist/docs/source.js.map +0 -1
  330. package/dist/environment.js +0 -181
  331. package/dist/environment.js.map +0 -1
  332. package/dist/index.js +0 -7
  333. package/dist/index.js.map +0 -1
  334. package/dist/prompts.js +0 -84
  335. package/dist/prompts.js.map +0 -1
  336. package/dist/resources.js +0 -59
  337. package/dist/resources.js.map +0 -1
  338. package/dist/server.js +0 -23
  339. package/dist/server.js.map +0 -1
  340. package/dist/tools/checks.js +0 -250
  341. package/dist/tools/checks.js.map +0 -1
  342. package/dist/tools/docs.js +0 -173
  343. package/dist/tools/docs.js.map +0 -1
  344. package/dist/tools/environment.js +0 -52
  345. package/dist/tools/environment.js.map +0 -1
  346. package/skills/adaptable-dev/SKILL.md +0 -42
  347. /package/dist/{docs → core/docs}/corpus.js +0 -0
  348. /package/dist/{docs → core/docs}/search.js +0 -0
@@ -0,0 +1,127 @@
1
+ /**
2
+ * `adaptable compat [--adaptable <n>] [--ag-grid <n>] [--framework <fw>]` · MCP `get_compatibility` (plan §8.2).
3
+ * From the manifest only; no project needed.
4
+ */
5
+ import { z } from 'zod';
6
+ import { registerCapability } from '../capabilities.js';
7
+ import { FRAMEWORKS } from '../docs/corpus.js';
8
+ import { CapabilityError, ok } from '../envelope.js';
9
+ import { getManifestInfo, majorsWithRecords, pairingFor } from './manifest.js';
10
+ const Environment = z.object({
11
+ node: z.string().optional(),
12
+ typescript: z.string().optional(),
13
+ react: z.string().optional(),
14
+ angular: z.string().optional(),
15
+ vue: z.string().optional(),
16
+ });
17
+ const CompatOutput = z.object({
18
+ adaptable: z.object({ major: z.number(), latest: z.boolean(), latestMajor: z.number() }),
19
+ agGrid: z.object({
20
+ requiredMajor: z.number(),
21
+ requiredVersion: z.string(),
22
+ /** the range the latest AdapTable requires, when the manifest states it */
23
+ requiredByLatest: z.string().optional(),
24
+ }),
25
+ /** present when --ag-grid was given */
26
+ compatible: z.boolean().optional(),
27
+ wrappers: z.record(z.string(), z.string()).optional(),
28
+ environment: Environment.optional(),
29
+ releaseNote: z.string(),
30
+ docsHost: z.string(),
31
+ majorsWithRecords: z.array(z.number()),
32
+ manifest: z.object({ source: z.enum(['hosted', 'cached', 'snapshot']), builtAt: z.string(), host: z.string() }),
33
+ });
34
+ export const releaseNoteSlug = (major) => `version-${major}0-release-note`;
35
+ export function compatFor(info, adaptableMajor, input) {
36
+ const pairing = pairingFor(info, adaptableMajor);
37
+ if (!pairing) {
38
+ const known = [...new Set(info.pairings.map((p) => p.adaptableMajor))].sort((a, b) => a - b);
39
+ throw new CapabilityError('VERSION_NOT_SUPPORTED', `AdapTable ${adaptableMajor} is not in the documented AG Grid pairings.`, `Known majors: ${known.join(', ')}. Pass one of them with --adaptable, or check the release schedule at ${info.latest.docsHost}/support/release-schedule.`);
40
+ }
41
+ const warnings = [];
42
+ const key = String(adaptableMajor);
43
+ const wrappersAll = info.wrappers?.[key];
44
+ const wrappers = wrappersAll
45
+ ? input.framework
46
+ ? input.framework === 'vanilla'
47
+ ? {}
48
+ : wrappersAll[input.framework]
49
+ ? { [input.framework]: wrappersAll[input.framework] }
50
+ : {}
51
+ : wrappersAll
52
+ : undefined;
53
+ const environment = info.environment?.[key];
54
+ if (!info.environment || !info.wrappers) {
55
+ warnings.push(`The manifest from ${info.host} (built ${info.manifest.builtAt}) has no environment / wrapper table yet; those fields are omitted.`);
56
+ }
57
+ const docsHost = info.docsHosts?.[key] ?? (adaptableMajor >= info.latest.adaptableMajor ? info.latest.docsHost : `https://v${adaptableMajor}.adaptabletools.com`);
58
+ const data = {
59
+ adaptable: { major: adaptableMajor, latest: adaptableMajor === info.latest.adaptableMajor, latestMajor: info.latest.adaptableMajor },
60
+ agGrid: {
61
+ requiredMajor: pairing.agGridMajor,
62
+ requiredVersion: pairing.agGridVersion,
63
+ ...(info.latest.requiredAgGrid ? { requiredByLatest: info.latest.requiredAgGrid } : {}),
64
+ },
65
+ ...(input.agGrid !== undefined ? { compatible: input.agGrid === pairing.agGridMajor } : {}),
66
+ ...(wrappers ? { wrappers } : {}),
67
+ ...(environment ? { environment } : {}),
68
+ releaseNote: releaseNoteSlug(adaptableMajor),
69
+ docsHost,
70
+ majorsWithRecords: majorsWithRecords(),
71
+ manifest: { source: info.source, builtAt: info.manifest.builtAt, host: info.host },
72
+ };
73
+ return { data, warnings };
74
+ }
75
+ registerCapability({
76
+ name: 'compat',
77
+ description: 'AG Grid pairing, wrapper packages and environment requirements for an AdapTable major, from the docs manifest.',
78
+ cli: { command: ['compat'] },
79
+ mcp: { tool: 'get_compatibility' },
80
+ input: z.object({
81
+ adaptable: z.number().int().optional().describe('AdapTable major; defaults to the detected one, else the latest'),
82
+ agGrid: z.number().int().optional().describe('AG Grid major to check against the pairing'),
83
+ framework: z.enum(FRAMEWORKS).optional().describe('Return only this framework’s wrapper'),
84
+ }),
85
+ output: CompatOutput,
86
+ run: async (input, ctx) => {
87
+ const info = await getManifestInfo(ctx.manifest);
88
+ if (!info) {
89
+ throw new CapabilityError('DOCS_NOT_AVAILABLE', 'No docs manifest could be read: the host is unreachable (or --offline) and nothing is cached or bundled.', 'Retry with network access, or pass --docs-host <url>.');
90
+ }
91
+ const warnings = [];
92
+ let major = input.adaptable;
93
+ let resolvedContext;
94
+ if (major === undefined) {
95
+ const resolution = await ctx.resolveContext();
96
+ resolvedContext = resolution.context;
97
+ warnings.push(...resolution.warnings);
98
+ major = resolution.context.adaptableMajor ?? info.latest.adaptableMajor;
99
+ }
100
+ const result = compatFor(info, major, { agGrid: input.agGrid, framework: input.framework ?? ctx.globals.framework });
101
+ return ok(result.data, { warnings: [...warnings, ...result.warnings], resolvedContext });
102
+ },
103
+ markdown: (data) => {
104
+ const lines = [
105
+ `# AdapTable ${data.adaptable.major}${data.adaptable.latest ? ' (latest)' : ` (latest is ${data.adaptable.latestMajor})`}`,
106
+ '',
107
+ `- AG Grid: ${data.agGrid.requiredMajor} (documented with ${data.agGrid.requiredVersion})${data.compatible !== undefined ? ` — your AG Grid is ${data.compatible ? 'compatible' : 'not the documented major'}` : ''}`,
108
+ ];
109
+ if (data.agGrid.requiredByLatest) {
110
+ lines.push(`- Latest AdapTable requires AG Grid ${data.agGrid.requiredByLatest}`);
111
+ }
112
+ if (data.wrappers && Object.keys(data.wrappers).length) {
113
+ lines.push(`- Wrappers: ${Object.entries(data.wrappers).map(([fw, pkg]) => `${fw} → \`${pkg}\``).join(', ')}`);
114
+ }
115
+ if (data.environment) {
116
+ lines.push(`- Environment: ${Object.entries(data.environment).map(([k, v]) => `${k} ${v}`).join(', ')}`);
117
+ }
118
+ lines.push(`- Release note: ${data.docsHost}/support/${data.releaseNote}`);
119
+ lines.push(`- Docs: ${data.docsHost}`);
120
+ if (data.majorsWithRecords.length) {
121
+ lines.push(`- Majors with change records: ${data.majorsWithRecords.join(', ')}`);
122
+ }
123
+ lines.push('', `_Manifest: ${data.manifest.source} from ${data.manifest.host}, built ${data.manifest.builtAt}_`);
124
+ return lines.join('\n');
125
+ },
126
+ });
127
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/core/compat/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * The docs manifest (plan Appendix C, §8.3 "Freshness"): `GET <host>/llms/manifest.json`
3
+ * with `If-None-Match`, an ETag store under `docs/<host>/`, the bundled
4
+ * `data/manifest.snapshot.json` as the offline / unreachable fallback, and the
5
+ * derived `ManifestInfo` that `compat`, `detect` and context resolution consume.
6
+ */
7
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { CURRENT_DOCS_HOST, RECORDS_FLOOR } from '../constants.js';
10
+ import { getCacheRoot, DOCS_DIR } from '../packages/cache.js';
11
+ import { compareSemver } from '../packages/versions.js';
12
+ const MANIFEST_PATH = '/llms/manifest.json';
13
+ const SNAPSHOT_URL = new URL('../../../data/manifest.snapshot.json', import.meta.url);
14
+ export function manifestHost(options = {}) {
15
+ return (options.docsHost ?? process.env.ADAPTABLE_MCP_DOCS_HOST ?? CURRENT_DOCS_HOST).replace(/\/+$/, '');
16
+ }
17
+ /** Folder for a host's cached manifest and corpora: `docs/<hostname>/` */
18
+ export function hostCacheDir(host) {
19
+ const name = host.replace(/^https?:\/\//, '').replace(/[^A-Za-z0-9.-]/g, '_');
20
+ return join(getCacheRoot(), DOCS_DIR, name);
21
+ }
22
+ function readJsonFile(path) {
23
+ try {
24
+ return JSON.parse(readFileSync(path, 'utf8'));
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ export function readSnapshot() {
31
+ return readJsonFile(SNAPSHOT_URL);
32
+ }
33
+ function readCachedManifest(host) {
34
+ const dir = hostCacheDir(host);
35
+ const manifest = readJsonFile(join(dir, 'manifest.json'));
36
+ if (!manifest) {
37
+ return undefined;
38
+ }
39
+ const readText = (name) => {
40
+ try {
41
+ return readFileSync(join(dir, name), 'utf8').trim() || undefined;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ };
47
+ const checked = readText('manifest.checked');
48
+ return { manifest, etag: readText('manifest.etag'), checkedAt: checked ? Number(checked) : undefined };
49
+ }
50
+ function writeCachedManifest(host, manifest, etag) {
51
+ const dir = hostCacheDir(host);
52
+ mkdirSync(dir, { recursive: true });
53
+ writeFileSync(join(dir, 'manifest.json'), JSON.stringify(manifest, null, 2));
54
+ writeFileSync(join(dir, 'manifest.etag'), etag ?? '');
55
+ touchChecked(host);
56
+ }
57
+ function touchChecked(host) {
58
+ const dir = hostCacheDir(host);
59
+ mkdirSync(dir, { recursive: true });
60
+ writeFileSync(join(dir, 'manifest.checked'), String(Date.now()));
61
+ }
62
+ const fallback = (host, reason, allowSnapshot) => {
63
+ const cached = readCachedManifest(host);
64
+ if (cached) {
65
+ return { manifest: cached.manifest, source: 'cached', warning: `${reason}; using the manifest cached from ${host} (built ${cached.manifest.builtAt}).` };
66
+ }
67
+ const snapshot = allowSnapshot ? readSnapshot() : undefined;
68
+ if (snapshot) {
69
+ return { manifest: snapshot, source: 'snapshot', warning: `${reason}; using the bundled manifest snapshot (built ${snapshot.builtAt}).` };
70
+ }
71
+ throw new ManifestUnavailable(allowSnapshot
72
+ ? `${reason}, nothing is cached for ${host} and the bundled manifest snapshot is missing.`
73
+ : `${reason} and nothing is cached for ${host}.`);
74
+ };
75
+ export class ManifestUnavailable extends Error {
76
+ }
77
+ /**
78
+ * The manifest for a host. Online: conditional GET, `304` → cached copy, `200` →
79
+ * stored with its ETag; skipped entirely when the cached copy was validated within
80
+ * `maxAgeMs`. Offline or unreachable: cached copy, else (when allowed) the snapshot.
81
+ */
82
+ export async function fetchManifest(options = {}) {
83
+ const host = manifestHost(options);
84
+ const allowSnapshot = options.allowSnapshot ?? true;
85
+ const cached = readCachedManifest(host);
86
+ if (options.offline) {
87
+ if (cached) {
88
+ return { manifest: cached.manifest, source: 'cached' };
89
+ }
90
+ const snapshot = allowSnapshot ? readSnapshot() : undefined;
91
+ if (snapshot) {
92
+ return { manifest: snapshot, source: 'snapshot' };
93
+ }
94
+ throw new ManifestUnavailable(allowSnapshot
95
+ ? `--offline, nothing is cached for ${host} and the bundled manifest snapshot is missing.`
96
+ : `--offline and nothing is cached for ${host}.`);
97
+ }
98
+ if (cached?.checkedAt !== undefined && options.maxAgeMs && Date.now() - cached.checkedAt < options.maxAgeMs) {
99
+ return { manifest: cached.manifest, source: 'cached' };
100
+ }
101
+ let response;
102
+ try {
103
+ response = await fetch(`${host}${MANIFEST_PATH}`, {
104
+ headers: cached?.etag ? { 'If-None-Match': cached.etag } : {},
105
+ signal: AbortSignal.timeout(options.timeoutMs ?? 8_000),
106
+ });
107
+ }
108
+ catch (error) {
109
+ return fallback(host, `Could not reach ${host} (${error instanceof Error ? error.message : String(error)})`, allowSnapshot);
110
+ }
111
+ if (response.status === 304 && cached) {
112
+ touchChecked(host);
113
+ return { manifest: cached.manifest, source: 'cached' };
114
+ }
115
+ if (!response.ok) {
116
+ return fallback(host, `${host}${MANIFEST_PATH} returned ${response.status}`, allowSnapshot);
117
+ }
118
+ let manifest;
119
+ try {
120
+ manifest = (await response.json());
121
+ }
122
+ catch (error) {
123
+ return fallback(host, `${host}${MANIFEST_PATH} is not JSON (${error instanceof Error ? error.message : String(error)})`, allowSnapshot);
124
+ }
125
+ writeCachedManifest(host, manifest, response.headers.get('etag'));
126
+ return { manifest, source: 'hosted' };
127
+ }
128
+ export const majorOfPairing = (pairing) => Number(pairing.adaptableVersion.split('.')[0]);
129
+ /** Pairings sorted newest first (by AdapTable version) so `find` gives the newest row of a major */
130
+ export function normalisePairings(manifest) {
131
+ return [...manifest.agGridPairings]
132
+ .map((p) => ({ ...p, adaptableMajor: majorOfPairing(p) }))
133
+ .filter((p) => Number.isFinite(p.adaptableMajor))
134
+ .sort((a, b) => compareSemver(pad(b.adaptableVersion), pad(a.adaptableVersion)));
135
+ }
136
+ const pad = (version) => {
137
+ const parts = version.split('.');
138
+ while (parts.length < 3) {
139
+ parts.push('0');
140
+ }
141
+ return parts.join('.');
142
+ };
143
+ export function toManifestInfo(fetched, host) {
144
+ const { manifest } = fetched;
145
+ const latestMajor = manifest.latest?.adaptableMajor ?? manifest.major;
146
+ return {
147
+ latest: {
148
+ adaptableMajor: latestMajor,
149
+ adaptableVersion: manifest.adaptableVersion,
150
+ ...(manifest.latest?.requiredAgGrid ?? manifest.agGridPeer
151
+ ? { requiredAgGrid: manifest.latest?.requiredAgGrid ?? manifest.agGridPeer ?? undefined }
152
+ : {}),
153
+ docsHost: manifest.docsHosts?.[String(latestMajor)] ?? host,
154
+ ...(manifest.docsHosts ? { docsHosts: manifest.docsHosts } : {}),
155
+ },
156
+ pairings: normalisePairings(manifest),
157
+ ...(manifest.docsHosts ? { docsHosts: manifest.docsHosts } : {}),
158
+ ...(manifest.environment ? { environment: manifest.environment } : {}),
159
+ ...(manifest.wrappers ? { wrappers: manifest.wrappers } : {}),
160
+ source: fetched.source,
161
+ manifest,
162
+ host,
163
+ ...(fetched.warning ? { warning: fetched.warning } : {}),
164
+ };
165
+ }
166
+ /** The manifest-derived facts, or undefined when no manifest can be had at all */
167
+ export async function getManifestInfo(options = {}) {
168
+ const host = manifestHost(options);
169
+ try {
170
+ return toManifestInfo(await fetchManifest(options), host);
171
+ }
172
+ catch (error) {
173
+ if (error instanceof ManifestUnavailable) {
174
+ return undefined;
175
+ }
176
+ throw error;
177
+ }
178
+ }
179
+ /** The documented AG Grid pairing for an AdapTable major (its newest row) */
180
+ export function pairingFor(info, adaptableMajor) {
181
+ if (!info || adaptableMajor === undefined) {
182
+ return undefined;
183
+ }
184
+ return info.pairings.find((p) => p.adaptableMajor === adaptableMajor);
185
+ }
186
+ /** Majors with change records bundled in `data/changes/<N-1>-<N>.json` */
187
+ export function majorsWithRecords(dataDir = new URL('../../../data/changes/', import.meta.url)) {
188
+ if (!existsSync(dataDir)) {
189
+ return [];
190
+ }
191
+ try {
192
+ return readdirSync(dataDir)
193
+ .map((name) => name.match(/^\d+-(\d+)\.json$/)?.[1])
194
+ .filter((m) => !!m)
195
+ .map(Number)
196
+ .filter((m) => m >= RECORDS_FLOOR)
197
+ .sort((a, b) => a - b);
198
+ }
199
+ catch {
200
+ return [];
201
+ }
202
+ }
203
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/compat/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Values shared by the registry, context resolution and the docs layer.
3
+ * `capabilities.ts` re-exports them under the names the plan uses (§6.1);
4
+ * they live here so `context/` and `docs/` can import them without a cycle.
5
+ */
6
+ import { readFileSync } from 'node:fs';
7
+ export const CLI_PACKAGE = '@adaptabletools/adaptable-mcp';
8
+ /** Oldest major with change records (`data/changes/<N-1>-<N>.json`). */
9
+ export const RECORDS_FLOOR = 21;
10
+ /** Oldest major `migrate state` accepts as `--from`. */
11
+ export const MIGRATION_FLOOR = 16;
12
+ /** The library package whose `types.d.ts`, `aql` and `upgrade` entries the checks use (plan §7.3). */
13
+ export const LIBRARY_PACKAGE = '@adaptabletools/adaptable';
14
+ /** Oldest major whose package carries the `aql` and `upgrade` entries — the engine is always ≥ this (plan §7.3). */
15
+ export const ENGINE_FLOOR = 24;
16
+ /**
17
+ * The docs host for the current major (plan §7.4, decision 7 of the implementation file).
18
+ * Never switched at release; other hosts are reached through `--docs-host` / `ADAPTABLE_MCP_DOCS_HOST`.
19
+ */
20
+ export const CURRENT_DOCS_HOST = 'https://www.adaptabletools.com';
21
+ /** Environment variable that overrides the docs host for one invocation. */
22
+ export const DOCS_HOST_ENV = 'ADAPTABLE_MCP_DOCS_HOST';
23
+ /**
24
+ * The npm range skills use to invoke the CLI, derived from the package's own
25
+ * version: `^<major>` for a stable version, the prerelease dist-tag
26
+ * (`canary`) for a `-canary.N` prerelease — `^1` would match neither `0.x`
27
+ * nor prereleases (§6.1).
28
+ */
29
+ export function cliRangeFor(version) {
30
+ const prerelease = version.match(/-([0-9A-Za-z]+)(?:[.-]|$)/);
31
+ if (prerelease) {
32
+ return prerelease[1];
33
+ }
34
+ return `^${version.split('.')[0]}`;
35
+ }
36
+ export const PACKAGE_VERSION = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version;
37
+ export const CLI_RANGE = cliRangeFor(PACKAGE_VERSION);
38
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAE3D,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEhC,wDAAwD;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,sGAAsG;AACtG,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,oHAAoH;AACpH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAElE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC9D,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAC1B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAChF,CAAC,OAAO,CAAC;AAEV,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * `adaptable detect [--all-projects]` · MCP `detect_environment` (plan §8.1).
3
+ */
4
+ import { z } from 'zod';
5
+ import { registerCapability } from '../capabilities.js';
6
+ import { getManifestInfo } from '../compat/manifest.js';
7
+ import { FRAMEWORKS } from '../docs/corpus.js';
8
+ import { ok } from '../envelope.js';
9
+ import { detect } from './detect.js';
10
+ const VersionPair = z.object({ range: z.string().optional(), installed: z.string().optional() });
11
+ export const ProjectReportSchema = z.object({
12
+ path: z.string(),
13
+ packageManager: z.enum(['npm', 'yarn', 'pnpm', 'bun']).optional(),
14
+ adaptable: z.object({ range: z.string().optional(), installed: z.string().optional(), major: z.number().optional() }),
15
+ wrapper: z
16
+ .object({ name: z.string(), range: z.string().optional(), installed: z.string().optional(), skew: z.boolean() })
17
+ .optional(),
18
+ agGrid: z
19
+ .object({
20
+ name: z.string(),
21
+ range: z.string().optional(),
22
+ installed: z.string().optional(),
23
+ major: z.number().optional(),
24
+ enterprise: z.boolean(),
25
+ compatible: z.boolean().optional(),
26
+ requiredByTarget: z.string().optional(),
27
+ })
28
+ .optional(),
29
+ framework: z.enum(FRAMEWORKS),
30
+ frameworkVersions: z.record(z.string(), VersionPair),
31
+ typescript: VersionPair.optional(),
32
+ node: z.object({ engines: z.string().optional(), nvmrc: z.string().optional() }).optional(),
33
+ licensePresent: z.boolean(),
34
+ rowModelHints: z.array(z.string()),
35
+ entryPoints: z.array(z.string()),
36
+ initialStateLiterals: z.array(z.string()),
37
+ columnDefsFiles: z.array(z.string()),
38
+ agGridModulesFile: z.string().optional(),
39
+ plugins: z.array(z.string()),
40
+ companionSkills: z.object({ agDev: z.boolean(), agUpdate: z.boolean() }),
41
+ });
42
+ const DetectOutput = z.object({
43
+ projects: z.array(ProjectReportSchema),
44
+ agGridOnly: z.boolean(),
45
+ latest: z
46
+ .object({ adaptableMajor: z.number(), requiredAgGrid: z.string().optional(), docsHost: z.string() })
47
+ .optional(),
48
+ });
49
+ function projectMarkdown(project) {
50
+ const lines = [`## ${project.path}`, ''];
51
+ const versions = (pair) => pair ? `${pair.installed ?? 'not installed'}${pair.range ? ` (declared ${pair.range})` : ''}` : '—';
52
+ lines.push(`- AdapTable: ${versions(project.adaptable)}${project.adaptable.major !== undefined ? `, major ${project.adaptable.major}` : ''}`);
53
+ if (project.wrapper) {
54
+ lines.push(`- Wrapper: ${project.wrapper.name} ${versions(project.wrapper)}${project.wrapper.skew ? ' — version skew with the core package' : ''}`);
55
+ }
56
+ lines.push(`- AG Grid: ${project.agGrid ? `${project.agGrid.name} ${versions(project.agGrid)}${project.agGrid.compatible === false ? ' — not the documented pairing' : ''}` : 'not declared'}`);
57
+ lines.push(`- Framework: ${project.framework}${Object.keys(project.frameworkVersions).length ? ` (${Object.entries(project.frameworkVersions).map(([n, v]) => `${n} ${versions(v)}`).join(', ')})` : ''}`);
58
+ if (project.typescript) {
59
+ lines.push(`- TypeScript: ${versions(project.typescript)}`);
60
+ }
61
+ if (project.packageManager) {
62
+ lines.push(`- Package manager: ${project.packageManager}`);
63
+ }
64
+ lines.push(`- Licence key in sources: ${project.licensePresent ? 'yes' : 'no'}`);
65
+ if (project.rowModelHints.length) {
66
+ lines.push(`- Row models: ${project.rowModelHints.join(', ')}`);
67
+ }
68
+ const files = (label, list) => {
69
+ if (list.length) {
70
+ lines.push(`- ${label}: ${list.map((f) => `\`${f}\``).join(', ')}`);
71
+ }
72
+ };
73
+ files('Entry points', project.entryPoints);
74
+ files('Initial State literals', project.initialStateLiterals);
75
+ files('columnDefs files', project.columnDefsFiles);
76
+ if (project.agGridModulesFile) {
77
+ lines.push(`- AG Grid modules: \`${project.agGridModulesFile}\``);
78
+ }
79
+ files('Plugins', project.plugins);
80
+ lines.push(`- Companion skills: ag-dev ${project.companionSkills.agDev ? 'installed' : 'missing'}, ag-update ${project.companionSkills.agUpdate ? 'installed' : 'missing'}`);
81
+ return lines.join('\n');
82
+ }
83
+ registerCapability({
84
+ name: 'detect',
85
+ description: 'Detects the AdapTable projects at or below the folder: versions, framework, AG Grid, source layout hints.',
86
+ cli: { command: ['detect'] },
87
+ mcp: { tool: 'detect_environment', stdioOnly: true },
88
+ input: z.object({
89
+ allProjects: z.boolean().optional().describe('Describe every project found instead of requiring a single one'),
90
+ }),
91
+ output: DetectOutput,
92
+ run: async (input, ctx) => {
93
+ const manifest = await getManifestInfo(ctx.manifest);
94
+ const { report, warnings } = detect(ctx.cwd, { allProjects: input.allProjects, manifest });
95
+ const context = report.projects.length === 1 ? (await ctx.resolveContext()).context : undefined;
96
+ return ok(report, { warnings, resolvedContext: context });
97
+ },
98
+ markdown: (data) => {
99
+ const parts = data.projects.map(projectMarkdown);
100
+ if (data.latest) {
101
+ parts.push(`_Latest AdapTable: ${data.latest.adaptableMajor}${data.latest.requiredAgGrid ? `, requires AG Grid ${data.latest.requiredAgGrid}` : ''} · docs ${data.latest.docsHost}_`);
102
+ }
103
+ return parts.join('\n\n');
104
+ },
105
+ });
106
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/core/context/capabilities.ts"],"names":[],"mappings":"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"}