@adaptabletools/adaptable-mcp 0.1.0-canary.1 → 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 (271) hide show
  1. package/README.md +3 -1
  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 +28 -10
  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 +7 -0
  54. package/dist/bin.js.map +1 -1
  55. package/dist/cli/index.js +8 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/core/anonymise/anonymise.js +315 -0
  58. package/dist/core/anonymise/anonymise.js.map +1 -0
  59. package/dist/core/anonymise/capabilities.js +94 -0
  60. package/dist/core/anonymise/capabilities.js.map +1 -0
  61. package/dist/core/aql/capabilities.js +339 -0
  62. package/dist/core/aql/capabilities.js.map +1 -0
  63. package/dist/core/aql/check.js +204 -0
  64. package/dist/core/aql/check.js.map +1 -0
  65. package/dist/core/aql/engine.js +92 -0
  66. package/dist/core/aql/engine.js.map +1 -0
  67. package/dist/core/aql/functions.js +108 -0
  68. package/dist/core/aql/functions.js.map +1 -0
  69. package/dist/core/aql/migrate.js +62 -0
  70. package/dist/core/aql/migrate.js.map +1 -0
  71. package/dist/core/capabilities.js +9 -3
  72. package/dist/core/capabilities.js.map +1 -1
  73. package/dist/core/changes/capabilities.js +92 -0
  74. package/dist/core/changes/capabilities.js.map +1 -0
  75. package/dist/core/changes/changes.js +101 -0
  76. package/dist/core/changes/changes.js.map +1 -0
  77. package/dist/core/changes/grep.js +183 -0
  78. package/dist/core/changes/grep.js.map +1 -0
  79. package/dist/core/changes/records.js +172 -0
  80. package/dist/core/changes/records.js.map +1 -0
  81. package/dist/core/changes/render-md.js +101 -0
  82. package/dist/core/changes/render-md.js.map +1 -0
  83. package/dist/core/changes/with-docs.js +86 -0
  84. package/dist/core/changes/with-docs.js.map +1 -0
  85. package/dist/core/compat/capabilities.js +1 -1
  86. package/dist/core/compat/capabilities.js.map +1 -1
  87. package/dist/core/context/capabilities.js +1 -1
  88. package/dist/core/context/capabilities.js.map +1 -1
  89. package/dist/core/convert/capabilities.js +86 -0
  90. package/dist/core/convert/capabilities.js.map +1 -0
  91. package/dist/core/convert/coldefs.js +313 -0
  92. package/dist/core/convert/coldefs.js.map +1 -0
  93. package/dist/core/docs/cache.js +1 -1
  94. package/dist/core/docs/capabilities.js +1 -5
  95. package/dist/core/docs/capabilities.js.map +1 -1
  96. package/dist/core/docs/hosts.js +2 -2
  97. package/dist/core/docs/hosts.js.map +1 -1
  98. package/dist/core/extract/imports.js +163 -0
  99. package/dist/core/extract/imports.js.map +1 -0
  100. package/dist/core/extract/input.js +140 -0
  101. package/dist/core/extract/input.js.map +1 -0
  102. package/dist/core/extract/line-map.js +90 -0
  103. package/dist/core/extract/line-map.js.map +1 -0
  104. package/dist/core/extract/ts-literal.js +963 -0
  105. package/dist/core/extract/ts-literal.js.map +1 -0
  106. package/dist/core/migrate/capabilities.js +143 -0
  107. package/dist/core/migrate/capabilities.js.map +1 -0
  108. package/dist/core/migrate/leftovers.js +119 -0
  109. package/dist/core/migrate/leftovers.js.map +1 -0
  110. package/dist/core/migrate/state.js +295 -0
  111. package/dist/core/migrate/state.js.map +1 -0
  112. package/dist/core/packages/cache.js +2 -1
  113. package/dist/core/packages/cache.js.map +1 -1
  114. package/dist/core/register.js +8 -0
  115. package/dist/core/register.js.map +1 -1
  116. package/dist/core/scaffold/capabilities.js +434 -0
  117. package/dist/core/scaffold/capabilities.js.map +1 -0
  118. package/dist/core/scaffold/generate.js +409 -0
  119. package/dist/core/scaffold/generate.js.map +1 -0
  120. package/dist/core/scaffold/infer.js +441 -0
  121. package/dist/core/scaffold/infer.js.map +1 -0
  122. package/dist/core/scaffold/overlay.js +290 -0
  123. package/dist/core/scaffold/overlay.js.map +1 -0
  124. package/dist/core/scaffold/readers/csv.js +146 -0
  125. package/dist/core/scaffold/readers/csv.js.map +1 -0
  126. package/dist/core/scaffold/readers/dataset.js +53 -0
  127. package/dist/core/scaffold/readers/dataset.js.map +1 -0
  128. package/dist/core/scaffold/readers/index.js +62 -0
  129. package/dist/core/scaffold/readers/index.js.map +1 -0
  130. package/dist/core/scaffold/readers/json.js +101 -0
  131. package/dist/core/scaffold/readers/json.js.map +1 -0
  132. package/dist/core/scaffold/readers/xlsx.js +81 -0
  133. package/dist/core/scaffold/readers/xlsx.js.map +1 -0
  134. package/dist/core/scaffold/suggestions.js +57 -0
  135. package/dist/core/scaffold/suggestions.js.map +1 -0
  136. package/dist/core/scaffold/templates.js +59 -0
  137. package/dist/core/scaffold/templates.js.map +1 -0
  138. package/dist/core/setup/audit.js +91 -0
  139. package/dist/core/setup/audit.js.map +1 -0
  140. package/dist/core/setup/capabilities.js +80 -0
  141. package/dist/core/setup/capabilities.js.map +1 -0
  142. package/dist/core/setup/context.js +118 -0
  143. package/dist/core/setup/context.js.map +1 -0
  144. package/dist/core/setup/rules/cell-data-type.js +40 -0
  145. package/dist/core/setup/rules/cell-data-type.js.map +1 -0
  146. package/dist/core/setup/rules/coldef-ownership.js +67 -0
  147. package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
  148. package/dist/core/setup/rules/css-import.js +34 -0
  149. package/dist/core/setup/rules/css-import.js.map +1 -0
  150. package/dist/core/setup/rules/direct-grid.js +42 -0
  151. package/dist/core/setup/rules/direct-grid.js.map +1 -0
  152. package/dist/core/setup/rules/index.js +53 -0
  153. package/dist/core/setup/rules/index.js.map +1 -0
  154. package/dist/core/setup/rules/licence-literal.js +23 -0
  155. package/dist/core/setup/rules/licence-literal.js.map +1 -0
  156. package/dist/core/setup/rules/modules.js +86 -0
  157. package/dist/core/setup/rules/modules.js.map +1 -0
  158. package/dist/core/setup/rules/react-stable-refs.js +20 -0
  159. package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
  160. package/dist/core/setup/rules/ready-hook.js +33 -0
  161. package/dist/core/setup/rules/ready-hook.js.map +1 -0
  162. package/dist/core/setup/rules/required-options.js +43 -0
  163. package/dist/core/setup/rules/required-options.js.map +1 -0
  164. package/dist/core/setup/rules/rule.js +10 -0
  165. package/dist/core/setup/rules/rule.js.map +1 -0
  166. package/dist/core/setup/rules/version-skew.js +65 -0
  167. package/dist/core/setup/rules/version-skew.js.map +1 -0
  168. package/dist/core/state/capabilities.js +78 -0
  169. package/dist/core/state/capabilities.js.map +1 -0
  170. package/dist/core/state/check.js +216 -0
  171. package/dist/core/state/check.js.map +1 -0
  172. package/dist/core/state/columns.js +130 -0
  173. package/dist/core/state/columns.js.map +1 -0
  174. package/dist/core/state/did-you-mean.js +83 -0
  175. package/dist/core/state/did-you-mean.js.map +1 -0
  176. package/dist/core/state/expressions.js +170 -0
  177. package/dist/core/state/expressions.js.map +1 -0
  178. package/dist/core/state/known-names.js +96 -0
  179. package/dist/core/state/known-names.js.map +1 -0
  180. package/dist/core/state/rules/aql-legacy-shape.js +42 -0
  181. package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
  182. package/dist/core/state/rules/aql-missing.js +21 -0
  183. package/dist/core/state/rules/aql-missing.js.map +1 -0
  184. package/dist/core/state/rules/aql-syntax.js +77 -0
  185. package/dist/core/state/rules/aql-syntax.js.map +1 -0
  186. package/dist/core/state/rules/calculated-settings.js +23 -0
  187. package/dist/core/state/rules/calculated-settings.js.map +1 -0
  188. package/dist/core/state/rules/column-id-exists.js +29 -0
  189. package/dist/core/state/rules/column-id-exists.js.map +1 -0
  190. package/dist/core/state/rules/dashboard-module-names.js +31 -0
  191. package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
  192. package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
  193. package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
  194. package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
  195. package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
  196. package/dist/core/state/rules/helpers.js +39 -0
  197. package/dist/core/state/rules/helpers.js.map +1 -0
  198. package/dist/core/state/rules/index.js +80 -0
  199. package/dist/core/state/rules/index.js.map +1 -0
  200. package/dist/core/state/rules/layout-column-refs.js +60 -0
  201. package/dist/core/state/rules/layout-column-refs.js.map +1 -0
  202. package/dist/core/state/rules/layout-current-exists.js +27 -0
  203. package/dist/core/state/rules/layout-current-exists.js.map +1 -0
  204. package/dist/core/state/rules/layout-non-empty.js +32 -0
  205. package/dist/core/state/rules/layout-non-empty.js.map +1 -0
  206. package/dist/core/state/rules/rule.js +2 -0
  207. package/dist/core/state/rules/rule.js.map +1 -0
  208. package/dist/core/state/rules/scope-column-refs.js +32 -0
  209. package/dist/core/state/rules/scope-column-refs.js.map +1 -0
  210. package/dist/core/state/rules/scope-shape.js +61 -0
  211. package/dist/core/state/rules/scope-shape.js.map +1 -0
  212. package/dist/core/state/rules/state-unique-name.js +40 -0
  213. package/dist/core/state/rules/state-unique-name.js.map +1 -0
  214. package/dist/core/state/rules/state-unknown-section.js +30 -0
  215. package/dist/core/state/rules/state-unknown-section.js.map +1 -0
  216. package/dist/core/state/rules/type-discriminator.js +70 -0
  217. package/dist/core/state/rules/type-discriminator.js.map +1 -0
  218. package/dist/core/state/type-check.js +349 -83
  219. package/dist/core/state/type-check.js.map +1 -1
  220. package/dist/mcp/index.js +104 -16
  221. package/dist/mcp/index.js.map +1 -1
  222. package/dist/mcp/server.js +110 -0
  223. package/dist/mcp/server.js.map +1 -0
  224. package/dist/skills/adaptable-debug/SKILL.md +145 -0
  225. package/dist/skills/adaptable-debug/VERSION.md +1 -0
  226. package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
  227. package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
  228. package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
  229. package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
  230. package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
  231. package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
  232. package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
  233. package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
  234. package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
  235. package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
  236. package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
  237. package/dist/skills/adaptable-dev/SKILL.md +97 -0
  238. package/dist/skills/adaptable-dev/VERSION.md +1 -0
  239. package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
  240. package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
  241. package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
  242. package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
  243. package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
  244. package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
  245. package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
  246. package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
  247. package/dist/skills/adaptable-setup/SKILL.md +158 -0
  248. package/dist/skills/adaptable-setup/VERSION.md +1 -0
  249. package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
  250. package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
  251. package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
  252. package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
  253. package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
  254. package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
  255. package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
  256. package/dist/skills/adaptable-setup/references/paths.md +45 -0
  257. package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
  258. package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
  259. package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
  260. package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
  261. package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
  262. package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
  263. package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
  264. package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
  265. package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
  266. package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
  267. package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
  268. package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
  269. package/package.json +11 -5
  270. package/dist/core/state/rules.js +0 -417
  271. package/dist/core/state/rules.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: adaptable-setup
3
+ description: "Use when adding AdapTable to a project for the first time: creating a new AdapTable + AG Grid app from nothing, from a dataset (CSV, Excel, JSON, a REST endpoint) or from a description, or wiring AdapTable onto an existing AG Grid Enterprise grid (including moving ColDef-level layout and styling into AdapTable Initial State). Covers packages, AG Grid modules, licence keys, containers, Adaptable Options, Initial State and a first verified run. Not for upgrades (adaptable-upgrade) or for adding features to an existing AdapTable instance (adaptable-dev)."
4
+ ---
5
+
6
+ # adaptable-setup — first-time AdapTable integration
7
+
8
+ Work through the phases in order. Shared protocol, read once:
9
+ [grounding](references/_shared/grounding.md) (always first),
10
+ [docs protocol](references/_shared/docs-protocol.md),
11
+ [validation loop](references/_shared/validation-loop.md),
12
+ [conversation](references/_shared/conversation.md),
13
+ [guards](references/_shared/guards.md). Every command binding is in
14
+ [capabilities](references/_shared/capabilities.md); framework file layouts are
15
+ in [paths](references/paths.md).
16
+
17
+ ## Phase 1 — Ground
18
+
19
+ Run `detect` (see grounding). Record the AdapTable major if any, the AG Grid
20
+ version, the framework and every project found. Everything after this phase
21
+ targets the detected versions, never the newest you remember.
22
+
23
+ ## Phase 2 — Qualify
24
+
25
+ Classify the project from the `detect` result:
26
+
27
+ - **A** — an AG Grid Enterprise app already exists. AdapTable is wired onto it.
28
+ - **B** — a project exists but has no grid. A grid plus AdapTable are added.
29
+ - **C** — nothing exists. A shell is created first (phase 3).
30
+
31
+ Run `compat` for the target major to get the AG Grid pairing, the wrapper
32
+ package and the environment minimums.
33
+
34
+ **Gate — AG Grid edition and version.** AdapTable needs AG Grid Enterprise at
35
+ the paired version. If `detect` shows AG Grid Community, or an AG Grid below
36
+ the pairing: **ask** — upgrade AG Grid first (hand over to `ag-update` when it
37
+ is installed) or stop. Do not install AdapTable onto an unpaired grid and hope.
38
+
39
+ **Ask once, for everything this phase needs:** the AdapTable and AG Grid
40
+ licence keys (or confirmation to use trial placeholders — keys go to the
41
+ environment file, never into source; see guards), the data source for B/C (a
42
+ file, an endpoint URL, or "demo data"), and the primary key when the data has
43
+ no obvious unique column. One round of questions, then proceed.
44
+
45
+ ## Phase 3 — Shell (path C only)
46
+
47
+ ```bash
48
+ npx -y @adaptabletools/adaptable-mcp@canary scaffold --dry-run --framework <framework> --out <dir> [--data <file> | --sample <file.json> | --source-url <url>]
49
+ ```
50
+
51
+ Pass the data source agreed in Phase 2 (without it the dry run previews the
52
+ shared demo dataset's columns and `id` key, not the user's). **Tell** the
53
+ user the framework creator command the `Shell: missing` line prints
54
+ (`npm create vite@latest …` or `ng new …`) and run it (or let the user run
55
+ it). `scaffold` overlays onto a creator shell; it does not create one. Then
56
+ re-run `detect` in the new folder.
57
+
58
+ ## Phase 4 — Install and wire
59
+
60
+ ### Path A — onto the existing grid
61
+
62
+ 1. Keep the existing `columnDefs` and `gridOptions`. Add `adaptableId` and
63
+ `primaryKey` to the Adaptable Options, and hand grid instantiation to the
64
+ framework wrapper exactly as `docs get <framework>-integration` shows for
65
+ the detected major — the grid is created through the wrapper, not
66
+ alongside it.
67
+ 2. Move logic that ran after grid creation into the `adaptableReady` handler
68
+ (React: `onAdaptableReady`); that is where the `adaptableApi` exists.
69
+ 3. Migrate ColDef-owned layout and styling:
70
+
71
+ ```bash
72
+ npx -y @adaptabletools/adaptable-mcp@canary convert coldefs <columnDefs file>
73
+ ```
74
+
75
+ It returns a Layout for the new Initial State, a `remove[]` list of
76
+ ColDef properties AdapTable now owns (visibility, order, width, pinning,
77
+ sorting, grouping, aggregation) and `candidates[]` (`cellStyle`,
78
+ `valueFormatter`, `valueGetter`, renderers) to re-express as Format,
79
+ Calculated, Styled or Action Columns.
80
+
81
+ **Gate — ColDef migration.** **Ask** which Layout-owned properties to move
82
+ (default: all — leaving them in the ColDef means the Layout and the ColDef
83
+ fight) and which candidates to re-express now (default: none; they keep
84
+ working and can move later with `adaptable-dev`). Apply the agreed edits,
85
+ then `check setup` and `check state` on the new Initial State.
86
+
87
+ ### Paths B/C — scaffold the overlay
88
+
89
+ ```bash
90
+ npx -y @adaptabletools/adaptable-mcp@canary scaffold --dry-run --out <dir> [--data <file> | --sample <file.json> | --source-url <url>]
91
+ ```
92
+
93
+ **Gate — columns and primary key.** **Show** the inferred columns (field,
94
+ type, nullability) and the primary-key choice from the dry run and **ask**
95
+ the user to confirm or correct them — a wrong type or key here is baked into
96
+ every file. Then run without `--dry-run` (add `--force` only for files the
97
+ user has agreed to overwrite). The run writes `columnDefs.ts`, `rowData.ts`,
98
+ `adaptableOptions.ts`, `gridOptions.ts`, `agGridModules.ts`, `licenses.ts` and
99
+ `onAdaptableReady.ts` into the framework's source folder, pins the paired
100
+ dependencies in `package.json`, and writes the `AGENTS.md` snippet when the
101
+ project has none. Licence keys are read from environment variables in the
102
+ generated code — tell the user which variables to set.
103
+
104
+ ## Phase 5 — Initial State
105
+
106
+ `scaffold` (B/C) or `convert coldefs` (A) already produced a minimal Initial
107
+ State: one Layout with every column, a Dashboard with the Layout and Export
108
+ toolbars. Keep it minimal.
109
+
110
+ **Gate — showcase set.** Offer the `suggestions[]` from the scaffold report:
111
+ for each candidate, `docs demo <name>`, adapt that demo's State to the
112
+ confirmed columns (column ids and Scopes change; shapes come from the demo),
113
+ and validate the merged Initial State:
114
+
115
+ ```bash
116
+ npx -y @adaptabletools/adaptable-mcp@canary check state <adaptableOptions file> --columns <columnDefs file>
117
+ ```
118
+
119
+ **Ask** which suggestions to include (default: none — a clean minimal grid
120
+ the user grows with `adaptable-dev` beats a showcase they delete).
121
+
122
+ ## Phase 6 — Persistence
123
+
124
+ **Tell** the user that Adaptable State persists to `localStorage` by default
125
+ — Layouts, filters and settings survive reloads with no code.
126
+
127
+ **Gate — remote persistence.** **Ask** whether to wire remote persistence
128
+ now, following `docs get dev-guide-adaptable-state-persistence` (default:
129
+ no). If yes, keep the state key and user name stable and say what changing
130
+ them later would orphan.
131
+
132
+ ## Phase 7 — Run and verify
133
+
134
+ 1. `check setup` on the project; fix what it names and re-check.
135
+ 2. Typecheck and build with the project's own commands; start the dev server.
136
+ 3. With a browser tool, evaluate on the page: `listInstances()`, then
137
+ `getGridInfo(id)` — strip the licence key before showing or saving it —
138
+ and `getLogs(id, { level: ['error', 'warn'] })`. One instance, no
139
+ AdapTable errors, is the bar.
140
+ 4. Without a browser tool, **tell** the user the same three calls to paste
141
+ into the browser console against `window.__ADAPTABLE_DEVTOOLS__` and to
142
+ paste the results back.
143
+
144
+ Licence banner warnings in the console are expected until real keys are set;
145
+ AdapTable errors are not.
146
+
147
+ ## Phase 8 — Hand-off
148
+
149
+ Close in prose (see conversation): the Adaptable Options in two sentences
150
+ (where they live, the `adaptableId` and `primaryKey`), the Initial State in
151
+ two sentences (the Layout, where to add features), the API in two sentences
152
+ (`adaptableApi` from `adaptableReady`, never before it), where the licence
153
+ keys live (environment variables), and where State persists. From now on the
154
+ project uses `adaptable-dev`.
155
+
156
+ **Done when:** the app builds and runs; one AdapTable instance mounts with no
157
+ AdapTable errors; `check setup` and `check state` are clean; the user knows
158
+ where the keys and the State live.
@@ -0,0 +1 @@
1
+ 0.1.0-canary.1
@@ -0,0 +1,3 @@
1
+ <!-- BEGIN:adaptable-agent-rules -->
2
+ AdapTable (`@adaptabletools/*`) is used in this project. Its Options, State shapes, API and AdapTableQL change between majors, so do not rely on recalled knowledge. Before writing or changing AdapTable code use the `adaptable-dev` skill; for first-time integration `adaptable-setup`; for a misbehaving running grid `adaptable-debug`; for version upgrades `adaptable-upgrade`. Validate State, expressions and setup with `npx -y @adaptabletools/adaptable-mcp@canary check …` (or the `check_*` MCP tools when configured); read the docs for the installed version with `npx -y @adaptabletools/adaptable-mcp@canary docs search "<topic>"`. Pure AG Grid questions go to the `ag-dev` skill or AG Grid's documentation.
3
+ <!-- END:adaptable-agent-rules -->
@@ -0,0 +1,35 @@
1
+ <!-- Generated by scripts/generate-bindings.ts from the capability registry. Do not edit; run `npm run generate`. -->
2
+
3
+ # Capabilities and their bindings
4
+
5
+ Every capability of `@adaptabletools/adaptable-mcp` (response schema 1) has a CLI command and, where listed, an MCP tool. Both run the same code and return the same envelope.
6
+
7
+ | Capability | MCP tool | CLI command | What it does |
8
+ | --- | --- | --- | --- |
9
+ | `anonymise` | — | `adaptable anonymise <file>` | Replaces the values of a State, Options, Grid Info, columns or row-data JSON with shape-preserving placeholders — names, column ids, expressions and structure kept, licence keys and user names redacted, row data scrubbed — for a support case. |
10
+ | `check-expression` | `check_expression` | `adaptable check expression <expression>` | Validates an AdapTableQL expression with the 24 engine: syntax, functions, kinds the module accepts, column references; exact rewrites for JavaScript-style operators and pre-24 syntax. |
11
+ | `migrate-expression` | `migrate_expression` | `adaptable migrate expression <expression>` | Rewrites one pre-24 AdapTableQL expression to the target major's syntax with the library's own migration (brace aggregations, named operands, legacy observable rules) and validates the result. |
12
+ | `aql-functions` | `list_expression_functions` | `adaptable aql functions` | Lists the AdapTableQL functions, aggregations, observable functions and clauses the engine accepts, with signatures, examples and docs slugs; filter by group, module or text. |
13
+ | `changes` | `list_changes` | `adaptable changes` | Lists the changes between two AdapTable majors from the release-note records; with --repo keeps the ones the project's code hits (file:line) and the ones that always apply. |
14
+ | `compat` | `get_compatibility` | `adaptable compat` | AG Grid pairing, wrapper packages and environment requirements for an AdapTable major, from the docs manifest. |
15
+ | `detect` | `detect_environment` | `adaptable detect` | Detects the AdapTable projects at or below the folder: versions, framework, AG Grid, source layout hints. |
16
+ | `convert-coldefs` | — | `adaptable convert coldefs <file>` | Turns AG Grid columnDefs into an AdapTable Layout (order, hidden columns, sizing, pinning, sorts, row groups, aggregations, pivots), lists the ColDef properties to remove with file:line, and the cellStyle / valueFormatter / valueGetter / cellRenderer snippets to re-express as Format, Calculated, Styled or Action Columns. The Layout is run through check state first. |
17
+ | `docs-list` | — | `adaptable docs list` | Lists the docs pages for the project’s AdapTable version, grouped by sidebar section: the feature index. |
18
+ | `docs-search` | `search_docs` | `adaptable docs search <query>` | Searches the docs for the project’s AdapTable version and framework; returns matching sections with slugs and URLs. |
19
+ | `docs-get` | `get_doc` | `adaptable docs get <pages...>` | Reads docs pages as Markdown for the project’s version and framework; one section with --section, demo code trimmed unless --full. |
20
+ | `docs-demos` | — | `adaptable docs demos <page>` | Lists the demos embedded in a docs page, with the files each demo owns. |
21
+ | `docs-demo` | `get_demo` | `adaptable docs demo <name>` | Returns one demo’s own files (adaptableOptions.ts by default; --files for others). Template files are never returned. |
22
+ | `migrate-state` | `migrate_state` | `adaptable migrate state <file>` | Migrates Adaptable State between majors with the library's own migration engine; reports the log, what the target major does not know (leftovers) and the check state result for the target. |
23
+ | `cache-add` | — | `adaptable cache add <spec>` | Downloads a @adaptabletools/adaptable version into the cache so checks and migrations for that major work offline. |
24
+ | `cache-list` | — | `adaptable cache list` | Shows cached library packages, bundled entries and docs corpora with sizes and ages. |
25
+ | `cache-clear` | — | `adaptable cache clear` | Removes cached docs corpora and/or library packages (with their entry bundles); everything when no flag is given. |
26
+ | `scaffold` | — | `adaptable scaffold` | Overlays the AdapTable files the docs demos run on onto a creator project (Vite or Angular CLI): columns, row data and an Initial State inferred from a CSV / JSON / XLSX file, dependencies pinned from the docs manifest, an AGENTS.md snippet. Never overwrites without --force. |
27
+ | `check-setup` | `check_setup` | `adaptable check setup` | Audits how AdapTable is wired into a project: stylesheet, required options, licence literal, version skew, AG Grid modules, column typing, direct grid use, ColDef ownership, React refs, ready hook, and the Options shape against the major’s types. |
28
+ | `check-state` | `check_state` | `adaptable check state <file>` | Validates Adaptable State (a JSON file or the literal in a .ts/.tsx/.js/.jsx/.vue file) against the checked major: shape, semantics, column references and AdapTableQL. |
29
+
30
+ ## Choosing a binding
31
+
32
+ - Prefer the MCP tool when the harness has the `adaptable` MCP server configured. Otherwise run the CLI command as `npx -y @adaptabletools/adaptable-mcp@canary <command> [options]`; add `--json` to read fields instead of Markdown.
33
+ - If neither binding exists for what you need — the capability is not in this table, not in `adaptable --capabilities`, or not in the MCP tool list — say so and fall back to the docs (see `docs-protocol.md`). Never improvise the result a missing capability would have produced.
34
+ - All bindings return the same envelope: `ok`, `data`, `issues`, `warnings`, and on failure `error { code, message, hint }`. CLI exit codes: `0` ok, `1` findings, `2` usage, `3` environment.
35
+ - Skill scripts cannot reach the agent's MCP session: a script only ever runs the CLI. When the CLI is unavailable, the agent performs the fallback itself.
@@ -0,0 +1,20 @@
1
+ # How to talk to the user
2
+
3
+ The skills mark instructions **Tell** and **Ask**; treat them literally.
4
+
5
+ - **"Tell the user X"** → show X in the conversation and continue working.
6
+ - **"Ask the user X"** → show the question and stop. Use the harness's
7
+ question tool when one exists. Do not answer your own question from context,
8
+ however obvious the answer looks — every Ask in these skills guards a choice
9
+ that is expensive to reverse (licence handling, ColDef migration, persisted
10
+ State, a package upgrade).
11
+
12
+ Phases that produce an artefact **write the file before the next phase
13
+ starts**, so a long task can be resumed from disk rather than from memory.
14
+
15
+ Never dump whole State objects, whole `getGridInfo()` results or full log
16
+ buffers into the conversation: extract the one section or the few lines the
17
+ decision needs, and keep the rest in the scratch file it was saved to.
18
+
19
+ End in plain prose: what changed, what was validated (name the check and its
20
+ result), and what remains manual. No envelope JSON in the final message.
@@ -0,0 +1,36 @@
1
+ # Reading the docs — don't guess
2
+
3
+ Training data is wrong for the installed version surprisingly often: option
4
+ names, State shapes and AdapTableQL syntax all move between majors. The docs
5
+ for the *detected* major are the source of truth, and they are one command
6
+ away. The bindings (CLI or MCP) are listed in `capabilities.md`.
7
+
8
+ ## The lookup order
9
+
10
+ 1. **Find the feature.** `docs list --section` groups every page by sidebar
11
+ section; `docs search "<topic>"` ranks matching sections. Start here —
12
+ AdapTable usually has a feature for what looks like a hand-rolled job.
13
+ 2. **Behaviour.** `docs get <handbook slug> --section "<heading>"` for how a
14
+ feature behaves; read the whole page only when the section is not obvious.
15
+ 3. **Shape.** `docs get technical-reference-<feature>` for the exact
16
+ State / Options object: property names, types, which are required.
17
+ 4. **A working example.** `docs demos <page>` lists a page's demos;
18
+ `docs demo <name>` returns the demo's own files. Adapt a demo's shape to
19
+ the project's columns rather than inventing one.
20
+ 5. **Expressions.** Before using an AdapTableQL function you are not certain
21
+ exists for the installed version, ask the engine: `aql functions --module
22
+ <Module> --query <text>` returns the name, call form and signatures the
23
+ version actually accepts.
24
+
25
+ With no shell, fetch `https://<docs host>/docs/<slug>/index.md` directly.
26
+
27
+ ## Rules
28
+
29
+ - Unfamiliar does not mean unsupported. If a page or function is absent from
30
+ the detected version's docs and catalogue, say so plainly instead of
31
+ writing it from memory.
32
+ - Before building anything from a primitive — a `valueGetter`, a custom cell
33
+ renderer, hand-rolled persisted state — check the feature index for an
34
+ AdapTable feature that already does it. Initial State, not code, is where
35
+ user-facing grid behaviour belongs.
36
+ - Cite the slug you used when reporting, so the user can read the same page.
@@ -0,0 +1,54 @@
1
+ # Grounding — do this first in every skill
2
+
3
+ AdapTable's Options, State shapes, API and AdapTableQL differ between majors,
4
+ and recalled knowledge is unreliable for any of them. Before writing, changing
5
+ or diagnosing anything, establish what is actually installed.
6
+
7
+ ## 1. Detect the project
8
+
9
+ ```bash
10
+ npx -y @adaptabletools/adaptable-mcp@canary detect --json
11
+ ```
12
+
13
+ (or the `detect_environment` MCP tool when the `adaptable` MCP server is
14
+ configured). Record from the result:
15
+
16
+ - the AdapTable major and exact version, and the paired AG Grid version,
17
+ - the framework (React, Angular, Vue or vanilla) and the wrapper package,
18
+ - the row model when one can be told (client-side vs server-side),
19
+ - every project found — in a monorepo, work in the project the task is about.
20
+
21
+ If detection reports no AdapTable (exit 3), the project either has AG Grid only
22
+ or nothing yet; the calling skill says which path to take from there.
23
+
24
+ With no shell and no MCP server, read `package.json` and the lockfile by hand —
25
+ `@adaptabletools/*` and `ag-grid-*` entries — and say in the report that the
26
+ versions were read by hand rather than detected.
27
+
28
+ ## 2. Freshness of this skill
29
+
30
+ Compare this skill's `VERSION.md` with
31
+ `https://<docs host>/.well-known/skills/VERSION` (best effort — skip silently
32
+ when it cannot be fetched). The docs host is the one `detect` resolved for the
33
+ project's major; a browser fetch or the shell both work.
34
+
35
+ - Skill older by a **minor**: tell the user, suggest
36
+ `npx skills add https://<docs host>`, then continue.
37
+ - Skill older by a **major**: tell the user to update the skill and stop —
38
+ instructions written for another major are worse than none.
39
+
40
+ One caveat on a project whose AdapTable major is not yet released (a canary
41
+ build, or a `24.x` range before the 24 release): the default docs host still
42
+ serves the current released major's docs. The symptoms are a `docs` command
43
+ failing with `DOCS_NOT_AVAILABLE`, or a warning that the docs host "is for
44
+ AdapTable N, not M". Pass `--docs-host https://<branch>.adaptabletools.com`
45
+ (or set `ADAPTABLE_MCP_DOCS_HOST`) on every command from then on so each
46
+ lookup below reads the pre-release docs.
47
+
48
+ ## 3. AG Grid siblings
49
+
50
+ Note whether the `ag-dev` and `ag-update` skills are installed. Column
51
+ definitions, AG Grid modules, row models, themes and the grid API belong to
52
+ AG Grid: hand that work to `ag-dev`, and AG Grid version bumps to `ag-update`,
53
+ rather than improvising either here. Everything that imports from
54
+ `@adaptabletools/*` stays in these skills.
@@ -0,0 +1,20 @@
1
+ # Guards — never cross these
2
+
3
+ - **No licence keys in source.** AdapTable and AG Grid keys come from
4
+ environment variables (`VITE_ADAPTABLE_LICENSE_KEY` /
5
+ `VITE_AG_GRID_LICENSE_KEY` in a Vite shell, the shell's own convention
6
+ elsewhere). A key pasted into a file, an example or a chat answer stays in
7
+ version control forever. When the user pastes a key, use it to configure the
8
+ environment file and do not echo it back.
9
+ - **Persisted State is the user's.** Never call `restoreState`, clear
10
+ `localStorage`, or change the state key (`adaptableId` / `stateKey` /
11
+ user name) without explicit confirmation in this conversation. Each of
12
+ those discards or orphans a user's saved Layouts, filters and settings.
13
+ - **Planning phases do not touch source.** A phase whose artefact is a plan
14
+ or a report writes only its own artefacts; application source changes wait
15
+ for the apply step the user approved.
16
+ - **Never echo a licence key out of a running grid.** `getGridInfo()` results
17
+ are saved with the key stripped before they are shown, attached or quoted.
18
+ - **Upgrade discovery does not read the codebase.** During an upgrade plan,
19
+ the CLI searches the code; reading whole source files defeats that and
20
+ burns context. Read a file only when a named change record points at it.
@@ -0,0 +1,42 @@
1
+ # The validation loop
2
+
3
+ Nothing AdapTable-shaped is "done" until the checker for the project's
4
+ detected major has seen it. The commands below are the CLI bindings; the MCP
5
+ tools named in `capabilities.md` return the same envelope.
6
+
7
+ ## What gets checked
8
+
9
+ - **Every AdapTableQL string** → `check expression "<expr>" --module <Module>`,
10
+ with `--columns <file>` when a columns file exists. The module matters: the
11
+ same text can be valid in one module and the wrong expression kind in
12
+ another.
13
+ - **Every State literal** (Initial State in source, or a persisted State
14
+ export) → `check state <file> [--columns <file>]`; persisted exports add
15
+ `--kind persistent`.
16
+ - **Setup and wiring** — after any change to Adaptable Options, the wrapper
17
+ components, `columnDefs` or modules → `check setup`.
18
+
19
+ ## The loop
20
+
21
+ 1. Run the check with `--json` and read `issues`, not just the exit code.
22
+ 2. Fix what it names. Each issue carries a rule id and, for the common cases,
23
+ an exact fix — apply that fix rather than a paraphrase.
24
+ 3. Re-check while the result shows `requiresAnotherCheckAfterFix`, at most
25
+ **three rounds**. If issues remain after that, stop and report the
26
+ remaining issues verbatim; do not summarise them into a false "clean".
27
+
28
+ ## Column lists
29
+
30
+ Column references are checked against a columns file: the `columnDefs` source
31
+ file, or `getColumns()` output from the running grid (debug skill) saved to a
32
+ file. Never retype a column list from memory or from the conversation — a
33
+ retyped list silently drifts from the grid it describes.
34
+
35
+ A `columnDefs` file knows the grid's own columns only. Ids that the State
36
+ defines — Calculated Columns above all — are known to `check state`, which
37
+ reads them from the literal it checks, but not to a standalone
38
+ `check expression --columns <columnDefs file>`: an `AQL_UNKNOWN_COLUMN` on a
39
+ Calculated Column id there is the missing context, not a wrong expression.
40
+ Validate such expressions through `check state` on the literal that holds
41
+ them, or pass `getColumns()` output (which lists Calculated Columns) as the
42
+ columns file.
@@ -0,0 +1,45 @@
1
+ ---
2
+ sources:
3
+ docs: [getting-started-integration, react-integration, angular-integration, vue-overview, getting-started-license-key, dev-guide-adaptable-state-persistence]
4
+ paths: [packages/adaptable-mcp/data/templates/manifest.json, packages/adaptable-mcp/src/core/scaffold/overlay.ts]
5
+ ---
6
+
7
+ # Framework paths
8
+
9
+ Where the AdapTable files live per framework. `scaffold` writes exactly this
10
+ layout; on path A (existing grid) add the same files beside the existing
11
+ `columnDefs` / `gridOptions` rather than moving them.
12
+
13
+ | Framework | Source folder | Entry the wiring lands in | Wrapper |
14
+ | --- | --- | --- | --- |
15
+ | React (Vite) | `src/` | `src/App.tsx` | `@adaptabletools/adaptable-react-aggrid` — `Adaptable.Provider` + `Adaptable.AgGridReact` |
16
+ | Angular | `src/app/` | the root standalone component (`src/app/app.ts`, or `src/app/app.component.ts`) | `@adaptabletools/adaptable-angular-aggrid` — `<adaptable-provider>`, `<adaptable-ui>`, `<ag-grid-angular *adaptable>` |
17
+ | Vue (Vite) | `src/` | `src/App.vue` | `@adaptabletools/adaptable-vue-aggrid` — `AdaptableProvider` + `AdaptableAgGridVue` |
18
+ | Vanilla (Vite) | `src/` | `src/main.ts` | `@adaptabletools/adaptable` — `Adaptable.init(options, { gridOptions, modules })` |
19
+
20
+ Generated files in the source folder: `columnDefs.ts`, `rowData.ts`,
21
+ `adaptableOptions.ts`, `gridOptions.ts`, `agGridModules.ts`, `licenses.ts`,
22
+ `onAdaptableReady.ts`, plus `styles.css` carrying the AdapTable stylesheet
23
+ import. The exact per-framework file set is recorded in
24
+ `packages/adaptable-mcp/data/templates/manifest.json` (`srcDir`,
25
+ `indexHtmlPath`, wrapper package) — when this table and the manifest disagree,
26
+ the manifest wins and this file is stale.
27
+
28
+ Framework specifics that bite:
29
+
30
+ - **React:** keep the Adaptable Options, `gridOptions` and `rowData`
31
+ references stable across renders (module scope or `useRef`); recreating
32
+ them per render remounts the grid.
33
+ - **Angular:** the stylesheet goes to the global `src/styles.css`, not a
34
+ component stylesheet (component style budgets reject it). A production
35
+ build of AG Grid Enterprise + AdapTable exceeds the default 1 MB `initial`
36
+ budget — raise the budget in `angular.json`; that is expected, not an error.
37
+ - **Vue:** the AdapTable stylesheet imports are added in `App.vue` because
38
+ the creator's `main.ts` is left untouched.
39
+ - **Vanilla:** `Adaptable.init` returns the API asynchronously through the
40
+ ready handler; do not hold the grid API from before it fires.
41
+
42
+ Licence keys are read from environment variables in `licenses.ts` (Vite:
43
+ `VITE_ADAPTABLE_LICENSE_KEY` / `VITE_AG_GRID_LICENSE_KEY`); Angular reads its
44
+ environment file — the generated file names the variables. Keys never appear
45
+ as literals in any of these files.