@enfyra/mcp-server 0.1.69 → 0.1.71

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 (248) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/config-local-adapters.d.ts +18 -0
  3. package/dist/lib/config-local-adapters.js +271 -0
  4. package/dist/lib/config-local-adapters.js.map +1 -0
  5. package/dist/lib/config-local-contracts.d.ts +28 -0
  6. package/dist/lib/config-local-contracts.js +200 -0
  7. package/dist/lib/config-local-contracts.js.map +1 -0
  8. package/dist/lib/config-local-prompts.d.ts +10 -0
  9. package/dist/lib/config-local-prompts.js +185 -0
  10. package/dist/lib/config-local-prompts.js.map +1 -0
  11. package/dist/lib/config-local-types.d.ts +23 -0
  12. package/dist/lib/config-local-types.js +2 -0
  13. package/dist/lib/config-local-types.js.map +1 -0
  14. package/dist/lib/config-local.js +3 -649
  15. package/dist/lib/config-local.js.map +1 -1
  16. package/dist/lib/discovery-tools.d.ts +4 -0
  17. package/dist/lib/discovery-tools.js +546 -0
  18. package/dist/lib/discovery-tools.js.map +1 -0
  19. package/dist/lib/dynamic-repository-builder.d.ts +1 -1
  20. package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
  21. package/dist/lib/dynamic-script-context-contract.js +163 -0
  22. package/dist/lib/dynamic-script-context-contract.js.map +1 -0
  23. package/dist/lib/enfyra-mcp-server.d.ts +3 -0
  24. package/dist/lib/enfyra-mcp-server.js +79 -0
  25. package/dist/lib/enfyra-mcp-server.js.map +1 -0
  26. package/dist/lib/enfyra-tool-logic.d.ts +7 -0
  27. package/dist/lib/enfyra-tool-logic.js +8 -0
  28. package/dist/lib/enfyra-tool-logic.js.map +1 -0
  29. package/dist/lib/enfyra-tool-types.d.ts +27 -0
  30. package/dist/lib/enfyra-tool-types.js +2 -0
  31. package/dist/lib/enfyra-tool-types.js.map +1 -0
  32. package/dist/lib/extension-api-builders.d.ts +17 -0
  33. package/dist/lib/extension-api-builders.js +235 -0
  34. package/dist/lib/extension-api-builders.js.map +1 -0
  35. package/dist/lib/extension-component-builders.d.ts +87 -0
  36. package/dist/lib/extension-component-builders.js +623 -0
  37. package/dist/lib/extension-component-builders.js.map +1 -0
  38. package/dist/lib/extension-contract-review.d.ts +26 -0
  39. package/dist/lib/extension-contract-review.js +187 -0
  40. package/dist/lib/extension-contract-review.js.map +1 -0
  41. package/dist/lib/extension-theme-contract.d.ts +63 -0
  42. package/dist/lib/extension-theme-contract.js +417 -0
  43. package/dist/lib/extension-theme-contract.js.map +1 -0
  44. package/dist/lib/identity-tools.d.ts +4 -0
  45. package/dist/lib/identity-tools.js +46 -0
  46. package/dist/lib/identity-tools.js.map +1 -0
  47. package/dist/lib/log-tools.d.ts +4 -0
  48. package/dist/lib/log-tools.js +65 -0
  49. package/dist/lib/log-tools.js.map +1 -0
  50. package/dist/lib/mcp-example-connect.d.ts +9 -0
  51. package/dist/lib/mcp-example-connect.js +442 -0
  52. package/dist/lib/mcp-example-connect.js.map +1 -0
  53. package/dist/lib/mcp-example-extensions.d.ts +9 -0
  54. package/dist/lib/mcp-example-extensions.js +729 -0
  55. package/dist/lib/mcp-example-extensions.js.map +1 -0
  56. package/dist/lib/mcp-example-files.d.ts +9 -0
  57. package/dist/lib/mcp-example-files.js +51 -0
  58. package/dist/lib/mcp-example-files.js.map +1 -0
  59. package/dist/lib/mcp-example-flows.d.ts +9 -0
  60. package/dist/lib/mcp-example-flows.js +76 -0
  61. package/dist/lib/mcp-example-flows.js.map +1 -0
  62. package/dist/lib/mcp-example-graphql.d.ts +9 -0
  63. package/dist/lib/mcp-example-graphql.js +57 -0
  64. package/dist/lib/mcp-example-graphql.js.map +1 -0
  65. package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
  66. package/dist/lib/mcp-example-handlers-hooks.js +328 -0
  67. package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
  68. package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
  69. package/dist/lib/mcp-example-oauth-setup.js +41 -0
  70. package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
  71. package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
  72. package/dist/lib/mcp-example-permissions-rls.js +210 -0
  73. package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
  74. package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
  75. package/dist/lib/mcp-example-queries-deep.js +220 -0
  76. package/dist/lib/mcp-example-queries-deep.js.map +1 -0
  77. package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
  78. package/dist/lib/mcp-example-schema-relations.js +148 -0
  79. package/dist/lib/mcp-example-schema-relations.js.map +1 -0
  80. package/dist/lib/mcp-example-websocket.d.ts +9 -0
  81. package/dist/lib/mcp-example-websocket.js +103 -0
  82. package/dist/lib/mcp-example-websocket.js.map +1 -0
  83. package/dist/lib/mcp-examples.d.ts +5 -5
  84. package/dist/lib/mcp-examples.js +22 -2394
  85. package/dist/lib/mcp-examples.js.map +1 -1
  86. package/dist/lib/method-tools.d.ts +4 -0
  87. package/dist/lib/method-tools.js +217 -0
  88. package/dist/lib/method-tools.js.map +1 -0
  89. package/dist/lib/package-tools.d.ts +4 -0
  90. package/dist/lib/package-tools.js +98 -0
  91. package/dist/lib/package-tools.js.map +1 -0
  92. package/dist/lib/platform-data-operations.d.ts +24 -0
  93. package/dist/lib/platform-data-operations.js +71 -0
  94. package/dist/lib/platform-data-operations.js.map +1 -0
  95. package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
  96. package/dist/lib/platform-endpoint-workflow.js +382 -0
  97. package/dist/lib/platform-endpoint-workflow.js.map +1 -0
  98. package/dist/lib/platform-extension-source.d.ts +487 -0
  99. package/dist/lib/platform-extension-source.js +524 -0
  100. package/dist/lib/platform-extension-source.js.map +1 -0
  101. package/dist/lib/platform-extension-tools.d.ts +1 -0
  102. package/dist/lib/platform-extension-tools.js +416 -0
  103. package/dist/lib/platform-extension-tools.js.map +1 -0
  104. package/dist/lib/platform-extension-ui.d.ts +4 -0
  105. package/dist/lib/platform-extension-ui.js +5 -0
  106. package/dist/lib/platform-extension-ui.js.map +1 -0
  107. package/dist/lib/platform-extension-workflow.d.ts +54 -0
  108. package/dist/lib/platform-extension-workflow.js +194 -0
  109. package/dist/lib/platform-extension-workflow.js.map +1 -0
  110. package/dist/lib/platform-flow-operations.d.ts +554 -0
  111. package/dist/lib/platform-flow-operations.js +317 -0
  112. package/dist/lib/platform-flow-operations.js.map +1 -0
  113. package/dist/lib/platform-flow-tools.d.ts +1 -0
  114. package/dist/lib/platform-flow-tools.js +248 -0
  115. package/dist/lib/platform-flow-tools.js.map +1 -0
  116. package/dist/lib/platform-operation-logic.d.ts +10 -0
  117. package/dist/lib/platform-operation-logic.js +11 -0
  118. package/dist/lib/platform-operation-logic.js.map +1 -0
  119. package/dist/lib/platform-operation-tools.d.ts +1 -324
  120. package/dist/lib/platform-operation-tools.js +13 -4620
  121. package/dist/lib/platform-operation-tools.js.map +1 -1
  122. package/dist/lib/platform-operation-types.d.ts +46 -0
  123. package/dist/lib/platform-operation-types.js +2 -0
  124. package/dist/lib/platform-operation-types.js.map +1 -0
  125. package/dist/lib/platform-policy-tools.d.ts +1 -0
  126. package/dist/lib/platform-policy-tools.js +248 -0
  127. package/dist/lib/platform-policy-tools.js.map +1 -0
  128. package/dist/lib/platform-resource-operations.d.ts +124 -0
  129. package/dist/lib/platform-resource-operations.js +109 -0
  130. package/dist/lib/platform-resource-operations.js.map +1 -0
  131. package/dist/lib/platform-resource-tools.d.ts +1 -0
  132. package/dist/lib/platform-resource-tools.js +70 -0
  133. package/dist/lib/platform-resource-tools.js.map +1 -0
  134. package/dist/lib/platform-route-operations.d.ts +222 -0
  135. package/dist/lib/platform-route-operations.js +290 -0
  136. package/dist/lib/platform-route-operations.js.map +1 -0
  137. package/dist/lib/platform-route-tools.d.ts +1 -0
  138. package/dist/lib/platform-route-tools.js +307 -0
  139. package/dist/lib/platform-route-tools.js.map +1 -0
  140. package/dist/lib/platform-shared-operations.d.ts +7 -0
  141. package/dist/lib/platform-shared-operations.js +4 -0
  142. package/dist/lib/platform-shared-operations.js.map +1 -0
  143. package/dist/lib/platform-websocket-tools.d.ts +1 -0
  144. package/dist/lib/platform-websocket-tools.js +70 -0
  145. package/dist/lib/platform-websocket-tools.js.map +1 -0
  146. package/dist/lib/record-tools.d.ts +4 -0
  147. package/dist/lib/record-tools.js +418 -0
  148. package/dist/lib/record-tools.js.map +1 -0
  149. package/dist/lib/required-knowledge.d.ts +1 -1
  150. package/dist/lib/required-knowledge.js +3 -2
  151. package/dist/lib/required-knowledge.js.map +1 -1
  152. package/dist/lib/route-access-tools.d.ts +4 -0
  153. package/dist/lib/route-access-tools.js +172 -0
  154. package/dist/lib/route-access-tools.js.map +1 -0
  155. package/dist/lib/route-definition-tools.d.ts +4 -0
  156. package/dist/lib/route-definition-tools.js +285 -0
  157. package/dist/lib/route-definition-tools.js.map +1 -0
  158. package/dist/lib/route-inspection-tools.d.ts +4 -0
  159. package/dist/lib/route-inspection-tools.js +319 -0
  160. package/dist/lib/route-inspection-tools.js.map +1 -0
  161. package/dist/lib/route-tools.d.ts +1 -0
  162. package/dist/lib/route-tools.js +9 -0
  163. package/dist/lib/route-tools.js.map +1 -0
  164. package/dist/lib/runtime-zone-registry.d.ts +27 -0
  165. package/dist/lib/runtime-zone-registry.js +81 -0
  166. package/dist/lib/runtime-zone-registry.js.map +1 -0
  167. package/dist/lib/runtime-zone-search.d.ts +303 -0
  168. package/dist/lib/runtime-zone-search.js +596 -0
  169. package/dist/lib/runtime-zone-search.js.map +1 -0
  170. package/dist/lib/runtime-zone-tools.d.ts +2 -307
  171. package/dist/lib/runtime-zone-tools.js +2 -674
  172. package/dist/lib/runtime-zone-tools.js.map +1 -1
  173. package/dist/lib/schema-column-tools.d.ts +3 -0
  174. package/dist/lib/schema-column-tools.js +80 -0
  175. package/dist/lib/schema-column-tools.js.map +1 -0
  176. package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
  177. package/dist/lib/schema-mutation-coordinator.js +154 -0
  178. package/dist/lib/schema-mutation-coordinator.js.map +1 -0
  179. package/dist/lib/schema-relation-contracts.d.ts +39 -0
  180. package/dist/lib/schema-relation-contracts.js +160 -0
  181. package/dist/lib/schema-relation-contracts.js.map +1 -0
  182. package/dist/lib/schema-relation-tools.d.ts +3 -0
  183. package/dist/lib/schema-relation-tools.js +61 -0
  184. package/dist/lib/schema-relation-tools.js.map +1 -0
  185. package/dist/lib/schema-table-contracts.d.ts +28 -0
  186. package/dist/lib/schema-table-contracts.js +263 -0
  187. package/dist/lib/schema-table-contracts.js.map +1 -0
  188. package/dist/lib/schema-table-tools.d.ts +3 -0
  189. package/dist/lib/schema-table-tools.js +297 -0
  190. package/dist/lib/schema-table-tools.js.map +1 -0
  191. package/dist/lib/schema-tool-operations.d.ts +150 -0
  192. package/dist/lib/schema-tool-operations.js +468 -0
  193. package/dist/lib/schema-tool-operations.js.map +1 -0
  194. package/dist/lib/schema-tool-types.d.ts +38 -0
  195. package/dist/lib/schema-tool-types.js +2 -0
  196. package/dist/lib/schema-tool-types.js.map +1 -0
  197. package/dist/lib/schema-verification.d.ts +14 -0
  198. package/dist/lib/schema-verification.js +105 -0
  199. package/dist/lib/schema-verification.js.map +1 -0
  200. package/dist/lib/script-tools.d.ts +4 -0
  201. package/dist/lib/script-tools.js +127 -0
  202. package/dist/lib/script-tools.js.map +1 -0
  203. package/dist/lib/system-tools.d.ts +4 -0
  204. package/dist/lib/system-tools.js +41 -0
  205. package/dist/lib/system-tools.js.map +1 -0
  206. package/dist/lib/table-tool-logic.d.ts +5 -0
  207. package/dist/lib/table-tool-logic.js +6 -0
  208. package/dist/lib/table-tool-logic.js.map +1 -0
  209. package/dist/lib/table-tools.d.ts +1 -84
  210. package/dist/lib/table-tools.js +7 -1522
  211. package/dist/lib/table-tools.js.map +1 -1
  212. package/dist/lib/tool-catalog.d.ts +2 -1
  213. package/dist/lib/tool-catalog.js +23 -2
  214. package/dist/lib/tool-catalog.js.map +1 -1
  215. package/dist/lib/tool-metadata-operations.d.ts +27 -0
  216. package/dist/lib/tool-metadata-operations.js +93 -0
  217. package/dist/lib/tool-metadata-operations.js.map +1 -0
  218. package/dist/lib/tool-permission-profile.d.ts +37 -0
  219. package/dist/lib/tool-permission-profile.js +106 -0
  220. package/dist/lib/tool-permission-profile.js.map +1 -0
  221. package/dist/lib/tool-record-operations.d.ts +102 -0
  222. package/dist/lib/tool-record-operations.js +260 -0
  223. package/dist/lib/tool-record-operations.js.map +1 -0
  224. package/dist/lib/tool-route-inspection.d.ts +47 -0
  225. package/dist/lib/tool-route-inspection.js +168 -0
  226. package/dist/lib/tool-route-inspection.js.map +1 -0
  227. package/dist/lib/tool-routing.d.ts +3 -417
  228. package/dist/lib/tool-routing.js +3 -1038
  229. package/dist/lib/tool-routing.js.map +1 -1
  230. package/dist/lib/tool-runtime-config.d.ts +33 -0
  231. package/dist/lib/tool-runtime-config.js +237 -0
  232. package/dist/lib/tool-runtime-config.js.map +1 -0
  233. package/dist/lib/tool-script-operations.d.ts +34 -0
  234. package/dist/lib/tool-script-operations.js +153 -0
  235. package/dist/lib/tool-script-operations.js.map +1 -0
  236. package/dist/lib/workflow-definitions.d.ts +366 -0
  237. package/dist/lib/workflow-definitions.js +703 -0
  238. package/dist/lib/workflow-definitions.js.map +1 -0
  239. package/dist/lib/workflow-planner.d.ts +45 -0
  240. package/dist/lib/workflow-planner.js +338 -0
  241. package/dist/lib/workflow-planner.js.map +1 -0
  242. package/dist/lib/workflow-types.d.ts +39 -0
  243. package/dist/lib/workflow-types.js +2 -0
  244. package/dist/lib/workflow-types.js.map +1 -0
  245. package/dist/mcp-server-entry.d.ts +0 -3
  246. package/dist/mcp-server-entry.js +2 -3249
  247. package/dist/mcp-server-entry.js.map +1 -1
  248. package/package.json +1 -1
@@ -0,0 +1,416 @@
1
+ import { z } from 'zod';
2
+ import { normalizeEscapedVueSource, } from './tool-input-normalization.js';
3
+ import { assertExtensionKnowledgeAck, extensionKnowledgeAckParam, globalRulesAckParam, } from './required-knowledge.js';
4
+ import { buildExtensionAccountPanelSnippet, buildExtensionApiUsageSnippet, buildExtensionDrawerSnippet, buildExtensionEmptyStateSnippet, buildExtensionFormEditorSnippet, buildExtensionMenuNotificationSnippet, buildExtensionModalSnippet, buildExtensionPageShellSnippet, buildExtensionPermissionGateSnippet, buildExtensionResourceGridSnippet, buildExtensionResourceListSnippet, buildExtensionTabsSnippet, buildExtensionUiSnippet, buildExtensionUploadModalSnippet, buildExtensionWidgetSnippet, getExtensionThemeContract, getThemeClassReference, jsonText, patchExtensionCode, reviewExtensionUiContract, runExtensionWorkflow, updateExtensionCode, validateDynamicScript, validateExtensionCode, verifyExtensionRuntime, } from './platform-operation-logic.js';
5
+ export function registerPlatformExtensionTools(server, ENFYRA_API_URL) {
6
+ const extensionFooterActionSchema = z.object({
7
+ label: z.string().optional().describe('Static action label. Use labelExpression instead for dynamic labels.'),
8
+ labelExpression: z.string().optional().describe('Raw Vue expression for a dynamic label, e.g. mode === "create" ? "Create" : "Save".'),
9
+ icon: z.string().optional().describe('Optional icon name such as lucide:save or lucide:trash-2.'),
10
+ loading: z.string().optional().describe('Raw Vue expression/ref name for loading state, e.g. saving.'),
11
+ disabled: z.string().optional().describe('Raw Vue expression/ref name for disabled state, e.g. saving || !canSubmit.'),
12
+ color: z.string().optional().describe('Optional component-supported color. Usually omit and let the managed action choose intent.'),
13
+ variant: z.string().optional().describe('Optional component-supported variant. Usually omit and let the managed action choose intent.'),
14
+ tone: z.string().optional().describe('Optional action tone when supported by the shell component.'),
15
+ onClick: z.string().describe('Raw Vue expression or function reference for the click handler, e.g. saveNote or () => (open = false).'),
16
+ });
17
+ const extensionHeaderActionSchema = z.object({
18
+ id: z.string().describe('Stable action id.'),
19
+ label: z.string().optional().describe('Action label.'),
20
+ icon: z.string().optional().describe('Icon name such as lucide:plus or lucide:refresh-cw.'),
21
+ color: z.string().optional().default('neutral').describe('Nuxt UI color. Use primary only for the single main scope action; otherwise neutral.'),
22
+ variant: z.string().optional().default('outline').describe('Nuxt UI variant. Use solid for the main scope action; otherwise outline/ghost.'),
23
+ loading: z.string().optional().describe('Raw Vue expression/ref name for loading state.'),
24
+ disabled: z.string().optional().describe('Raw Vue expression/ref name for disabled state.'),
25
+ to: z.string().optional().describe('Route path for visible navigation actions.'),
26
+ onClick: z.string().optional().describe('Script callback expression or handler reference. Prefer a handler name; bare ref assignments must use ref.value, e.g. () => (modalOpen.value = true).'),
27
+ order: z.number().optional().describe('Sort order in the shell header action area.'),
28
+ side: z.enum(['left', 'right']).optional().describe('Optional shell side.'),
29
+ });
30
+ server.tool('validate_dynamic_script', [
31
+ 'Validate Enfyra dynamic script code before saving it to any script-backed metadata record.',
32
+ 'Use this before create/update of handlers, hooks, flow steps, websocket scripts, OAuth provisioning scripts, or bootstrap scripts when the user is iterating on code.',
33
+ 'This calls the same server compiler contract used by Enfyra, but does not save anything.',
34
+ ].join(' '), {
35
+ sourceCode: z.string().describe('Raw dynamic script sourceCode.'),
36
+ scriptLanguage: z.enum(['javascript', 'typescript']).optional().default('javascript').describe('Script language to validate.'),
37
+ }, async ({ sourceCode, scriptLanguage }) => jsonText({
38
+ action: 'dynamic_script_validated',
39
+ validation: await validateDynamicScript(ENFYRA_API_URL, sourceCode, scriptLanguage),
40
+ }));
41
+ server.tool('validate_extension_code', [
42
+ 'Validate Enfyra admin extension code before saving it to enfyra_extension.',
43
+ 'Use this only when the user explicitly wants a validation-only check. For normal edits, use update_extension_code or ensure_*_extension so successful validation saves in the same tool call.',
44
+ 'This calls /enfyra_extension/preview and does not save anything.',
45
+ 'Call get_extension_theme_contract first when generating or reviewing UI.',
46
+ ].join(' '), {
47
+ code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC or compiled extension bundle code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
48
+ name: z.string().optional().describe('Optional extension name/id used by the preview compiler.'),
49
+ uiPattern: z.enum(['resource_list', 'resource_grid', 'master_detail', 'form', 'custom']).optional().describe('Optional intended UI pattern. resource_list/resource_grid enable deterministic layout policy checks.'),
50
+ }, async ({ code, name, uiPattern }) => jsonText({
51
+ action: 'extension_code_validated',
52
+ validation: await validateExtensionCode(ENFYRA_API_URL, code, name, { uiPattern }),
53
+ }));
54
+ server.tool('verify_extension_runtime', [
55
+ 'Verify one saved Enfyra extension through the strongest checks available inside MCP.',
56
+ 'It checks the saved record and expected hash, runs local UI/theme/runtime policy review, calls the server Vue compiler, and verifies page menu wiring.',
57
+ 'It explicitly reports browserRender=not_run because signed-in component execution, real API data shape, console errors, and responsive layout require browser automation outside this MCP server.',
58
+ ].join(' '), {
59
+ id: z.union([z.string(), z.number()]).optional().describe('Saved extension id. Provide id or name.'),
60
+ name: z.string().optional().describe('Saved extension unique name. Provide id or name.'),
61
+ expectedSha256: z.string().optional().describe('Optional expected saved source hash from inspect/update/patch output.'),
62
+ uiPattern: z.enum(['resource_list', 'resource_grid', 'master_detail', 'form', 'custom']).optional().describe('Optional intended UI pattern for deterministic layout policy checks.'),
63
+ }, async (input) => jsonText(await verifyExtensionRuntime(ENFYRA_API_URL, input)));
64
+ server.tool('update_extension_code', [
65
+ 'Business operation: update an existing Enfyra admin extension code by id or name.',
66
+ 'It runs local extension guards and /enfyra_extension/preview first, saves only when validation succeeds, then re-reads and verifies the exact saved source in the same call.',
67
+ 'Use this instead of validate_extension_code followed by update_record when editing an existing page/widget/global extension.',
68
+ 'Call get_extension_theme_contract first when generating or reviewing UI.',
69
+ ].join(' '), {
70
+ id: z.union([z.string(), z.number()]).optional().describe('Existing extension id. Provide id or name.'),
71
+ name: z.string().optional().describe('Existing extension unique name. Provide id or name.'),
72
+ code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC extension code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
73
+ description: z.string().optional().describe('Optional replacement extension description. Omit to preserve.'),
74
+ isEnabled: z.boolean().optional().describe('Optional enabled state. Omit to preserve.'),
75
+ version: z.string().optional().describe('Optional extension version. Omit to preserve.'),
76
+ expectedSha256: z.string().optional().describe('Optional SHA-256 of current extension code. Rejects stale full replacements.'),
77
+ uiPattern: z.enum(['resource_list', 'resource_grid', 'master_detail', 'form', 'custom']).optional().describe('Optional intended UI pattern. Enforces deterministic layout policy before saving.'),
78
+ globalRulesAckKey: globalRulesAckParam(z),
79
+ extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
80
+ }, async (input) => jsonText(await updateExtensionCode(ENFYRA_API_URL, input)));
81
+ server.tool('patch_extension_code', [
82
+ 'Focused operation: patch an existing Enfyra admin extension code by exact search/replace.',
83
+ 'Use this for small UI fixes instead of rewriting the whole Vue SFC.',
84
+ 'For edits that temporarily unbalance Vue tags or slots, pass patches=[{search,replace},...] so all patches are applied in memory, then the final SFC is validated and saved atomically when apply=true.',
85
+ 'Default searchMode="exact"; use searchMode="whitespace" only when indentation/newline variation is the problem.',
86
+ 'Default replaceAll=false requires exactly one match; set replaceAll=true only after preview confirms the match count.',
87
+ 'It hash-checks the current code, validates with /enfyra_extension/preview, saves only when apply=true, then re-reads and verifies the exact saved source.',
88
+ 'Default apply=false returns a preview and nextStep input.',
89
+ ].join(' '), {
90
+ id: z.union([z.string(), z.number()]).optional().describe('Existing extension id. Provide id or name.'),
91
+ name: z.string().optional().describe('Existing extension unique name. Provide id or name.'),
92
+ search: z.string().optional().describe('Single-patch search fragment. Exact by default; JSON strings can contain \\n for multiline fragments. Omit when using patches.'),
93
+ replace: z.string().optional().describe('Single-patch replacement code fragment. Required when search is provided. Omit when using patches.'),
94
+ searchMode: z.enum(['exact', 'whitespace']).optional().default('exact').describe('Single-patch matching mode. exact is safest. whitespace treats each run of whitespace in search as flexible whitespace.'),
95
+ replaceAll: z.boolean().optional().default(false).describe('Single-patch replace-all mode. false requires exactly one match; true replaces every match after previewing the count.'),
96
+ patches: z.array(z.object({
97
+ search: z.string().describe('Patch search fragment. JSON strings can contain \\n for multiline fragments.'),
98
+ replace: z.string().describe('Patch replacement fragment.'),
99
+ searchMode: z.enum(['exact', 'whitespace']).optional().default('exact').describe('Patch matching mode. Use whitespace only for indentation/newline variation.'),
100
+ replaceAll: z.boolean().optional().default(false).describe('Patch replace-all mode. false requires exactly one match for this patch.'),
101
+ })).optional().describe('Atomic multi-patch list. Patches apply sequentially in memory and only the final SFC is validated/saved when apply=true. Use this for slot/tag pairs that would be invalid as intermediate states.'),
102
+ expectedSha256: z.string().optional().describe('SHA-256 of current extension code from preview/inspect. Required when apply=true and rejects stale patches.'),
103
+ apply: z.boolean().optional().default(false).describe('Preview by default. Set true to validate and save.'),
104
+ description: z.string().optional().describe('Optional replacement extension description. Omit to preserve.'),
105
+ isEnabled: z.boolean().optional().describe('Optional enabled state. Omit to preserve.'),
106
+ version: z.string().optional().describe('Optional extension version. Omit to preserve.'),
107
+ uiPattern: z.enum(['resource_list', 'resource_grid', 'master_detail', 'form', 'custom']).optional().describe('Optional intended UI pattern. Enforces deterministic layout policy before saving.'),
108
+ globalRulesAckKey: globalRulesAckParam(z),
109
+ extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
110
+ }, async (input) => jsonText(await patchExtensionCode(ENFYRA_API_URL, input)));
111
+ server.tool('get_extension_theme_contract', 'Return the concise Enfyra admin extension UI/theme/security contract. Call before writing or reviewing extension UI.', {}, async () => jsonText(getExtensionThemeContract()));
112
+ server.tool('get_theme_class_reference', [
113
+ 'Return the authoritative Enfyra theme & color class reference: class -> CSS variable -> Nuxt UI semantic color -> intent.',
114
+ 'Call this whenever you need the exact eapp-* class name or the Nuxt UI color mapping for shell, system page, or dynamic extension UI.',
115
+ 'Source of truth: documents/app/theme-color-contract.md.',
116
+ ].join(' '), {}, async () => jsonText(getThemeClassReference()));
117
+ server.tool('build_extension_ui', [
118
+ 'Lazy gateway for Enfyra admin extension UI builders.',
119
+ 'Use this after get_enfyra_required_knowledge(scope="extension") when a high-contract extension UI snippet is needed.',
120
+ 'It keeps guided startup small by dispatching drawer, modal, page_shell, permission_gate, empty_state, resource_list, resource_grid, form_editor, widget, menu_notification, account_panel_item, tabs, upload_modal, api_usage, notify, confirm, runtime_review, theme_classes, theme_review, or review internally instead of exposing every builder tool up front.',
121
+ ].join(' '), {
122
+ kind: z.enum([
123
+ 'drawer',
124
+ 'modal',
125
+ 'page_shell',
126
+ 'permission_gate',
127
+ 'empty_state',
128
+ 'resource_list',
129
+ 'resource_grid',
130
+ 'form_editor',
131
+ 'widget',
132
+ 'menu_notification',
133
+ 'account_panel_item',
134
+ 'tabs',
135
+ 'upload_modal',
136
+ 'api_usage',
137
+ 'notify',
138
+ 'confirm',
139
+ 'runtime_review',
140
+ 'theme_classes',
141
+ 'theme_review',
142
+ 'review',
143
+ ]).describe('Which extension UI contract builder/reviewer to run.'),
144
+ input: z.record(z.any()).optional().default({}).describe('Builder input object. For kind=api_usage, pass { path, resource, method? }; for kind=confirm, pass { resource, executeName?, refreshName?, recordName?, idExpression? }; for kind=notify, pass { kind, title, description? }. For kind=theme_classes, pass { intent }. For kind=runtime_review/theme_review/review, pass { code, pattern? }, where pattern may be resource_list or resource_grid for deterministic layout policy.'),
145
+ extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
146
+ }, async ({ kind, input, extensionKnowledgeAckKey }) => {
147
+ assertExtensionKnowledgeAck(extensionKnowledgeAckKey);
148
+ return jsonText(buildExtensionUiSnippet(kind, input));
149
+ });
150
+ server.tool('build_extension_api_usage', [
151
+ 'Generate a contract-safe useApi snippet for Enfyra admin extensions.',
152
+ 'Use this instead of writing useApi calls from memory so route paths, execute({ id, body }), query/body objects, and mutation handlers follow the app composable contract.',
153
+ 'The tool returns code only; apply it with patch_extension_code or update_extension_code and then validate/save normally.',
154
+ ].join(' '), {
155
+ operation: z.enum(['list', 'find_one', 'create', 'update', 'delete', 'batch_update', 'batch_delete']).default('list').describe('API usage pattern to generate. Reads use the base route with query objects; mutations append ids through execute options.'),
156
+ resource: z.string().default('items').describe('Resource variable base name, e.g. notes, projects, messages.'),
157
+ path: z.string().optional().describe('Base API route path such as /notes. Do not include /:id; the builder strips a trailing /:id if provided.'),
158
+ query: z.record(z.any()).optional().describe('Static Enfyra query object. Use this with sort for filter/page/limit reads; do not JSON.stringify it or put sort arrays inside it.'),
159
+ queryExpression: z.string().optional().describe('Raw Vue expression for reactive query state. Do not JSON.stringify and do not use it to construct sort values; use structured sort instead.'),
160
+ queryName: z.string().optional().describe('Variable name for the generated computed query when query is provided.'),
161
+ sort: z.array(z.object({
162
+ field: z.string().min(1).describe('Metadata field or supported aggregate sort expression.'),
163
+ direction: z.enum(['asc', 'desc']).default('asc').describe('Enfyra sort direction.'),
164
+ })).optional().describe('Structured sort order. The builder emits one Enfyra REST sort string, for example [{ field: "isPinned", direction: "desc" }, { field: "updatedAt", direction: "desc" }] becomes "-isPinned,-updatedAt".'),
165
+ bodyExpression: z.string().optional().describe('Raw Vue expression for default body object/computed when useful. Do not JSON.stringify.'),
166
+ errorContext: z.string().optional().describe('Safe error context label for useApi error reporting.'),
167
+ responseName: z.string().optional().describe('Optional data ref variable name.'),
168
+ pendingName: z.string().optional().describe('Optional pending ref variable name.'),
169
+ errorName: z.string().optional().describe('Optional error ref variable name.'),
170
+ executeName: z.string().optional().describe('Optional execute alias name.'),
171
+ refreshName: z.string().optional().describe('Optional refresh alias name.'),
172
+ rowsName: z.string().optional().describe('Optional computed rows variable for list/find_one operations.'),
173
+ handlerName: z.string().optional().describe('Optional generated handler function name for mutations.'),
174
+ recordName: z.string().optional().describe('Record parameter name for update/delete handlers.'),
175
+ payloadName: z.string().optional().describe('Payload parameter name for create handlers.'),
176
+ bodyName: z.string().optional().describe('Body parameter name for update/batch_update handlers.'),
177
+ idsName: z.string().optional().describe('Ids parameter name for batch handlers.'),
178
+ idExpression: z.string().optional().describe('Raw id expression for update/delete handlers. Defaults to record.id.'),
179
+ autoLoad: z.boolean().optional().default(true).describe('For reads, generate onMounted(() => execute()).'),
180
+ onErrorExpression: z.string().optional().describe('Raw onError handler expression when custom handling is needed.'),
181
+ extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
182
+ }, async ({ extensionKnowledgeAckKey, ...input }) => {
183
+ assertExtensionKnowledgeAck(extensionKnowledgeAckKey);
184
+ return jsonText(buildExtensionApiUsageSnippet(input));
185
+ });
186
+ server.tool('build_extension_drawer', [
187
+ 'Generate a contract-safe CommonDrawer Vue snippet for Enfyra admin extensions.',
188
+ 'Use this before writing or patching drawer/editing workflows so the model does not have to remember CommonDrawer slots, footer action props, full-width fields, or button type rules.',
189
+ 'The tool returns code only; apply it with patch_extension_code or update_extension_code and then validate/save normally.',
190
+ ].join(' '), {
191
+ model: z.string().optional().default('drawerOpen').describe('Vue state variable used with v-model.'),
192
+ title: z.string().optional().describe('Static drawer title.'),
193
+ titleExpression: z.string().optional().describe('Raw Vue expression for a dynamic title.'),
194
+ direction: z.enum(['right', 'left', 'top', 'bottom']).optional().default('right').describe('Drawer direction.'),
195
+ nested: z.boolean().optional().default(false).describe('Set true when rendering a drawer inside another modal/drawer.'),
196
+ body: z.string().describe('Vue template body content for #body. UInput/UTextarea/select controls are normalized to w-full; native buttons get type="button".'),
197
+ cancelAction: z.union([extensionFooterActionSchema, z.literal(false)]).optional().describe('Cancel action object. Omit for a default Cancel that closes the model; false disables cancelAction.'),
198
+ primaryAction: extensionFooterActionSchema.optional().describe('Primary action. Editing/create drawers should wire Save/Create here.'),
199
+ dangerAction: extensionFooterActionSchema.optional().describe('Danger action. Destructive edit drawers should wire Delete here.'),
200
+ footerHint: z.string().optional().describe('Optional footer hint text when supported by CommonDrawer.'),
201
+ }, async (input) => jsonText(buildExtensionDrawerSnippet(input)));
202
+ server.tool('build_extension_modal', [
203
+ 'Generate a contract-safe CommonModal/UModal Vue snippet for Enfyra admin extensions.',
204
+ 'Use this before writing or patching confirmation/edit modals so the model does not have to remember v-model:open, slots, final action props, full-width fields, or button type rules.',
205
+ 'The tool returns code only; apply it with patch_extension_code or update_extension_code and then validate/save normally.',
206
+ ].join(' '), {
207
+ model: z.string().optional().default('modalOpen').describe('Vue state variable used with v-model:open.'),
208
+ title: z.string().optional().describe('Static modal title.'),
209
+ titleExpression: z.string().optional().describe('Raw Vue expression for a dynamic title.'),
210
+ alias: z.enum(['CommonModal', 'UModal']).optional().default('CommonModal').describe('Use UModal only when preserving an existing UModal tag is useful; dynamic extensions resolve it to CommonModal.'),
211
+ body: z.string().describe('Vue template body content for #body. UInput/UTextarea/select controls are normalized to w-full; native buttons get type="button".'),
212
+ cancelAction: z.union([extensionFooterActionSchema, z.literal(false)]).optional().describe('Cancel action object. Omit for a default Cancel that closes the model; false disables cancelAction.'),
213
+ primaryAction: extensionFooterActionSchema.optional().describe('Primary final action for non-destructive submit/confirm flows.'),
214
+ dangerAction: extensionFooterActionSchema.optional().describe('Danger final action for destructive confirmation flows.'),
215
+ footerHint: z.string().optional().describe('Optional footer hint text when supported by CommonModal.'),
216
+ }, async (input) => jsonText(buildExtensionModalSnippet(input)));
217
+ server.tool('review_extension_ui_contract', [
218
+ 'Review an Enfyra extension Vue snippet for common modal/drawer contract mistakes.',
219
+ 'Use this before patching or saving generated extension UI when CommonDrawer, CommonModal, UModal, UInput, UTextarea, USelect, or native buttons are involved.',
220
+ 'This is a static contract review, not a compiler validation; still validate the final SFC before saving.',
221
+ ].join(' '), {
222
+ code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC or template snippet to review.'),
223
+ }, async ({ code }) => jsonText(reviewExtensionUiContract(code)));
224
+ server.tool('build_extension_page_shell', [
225
+ 'Generate page-header and shell-header-action script setup code for Enfyra page extensions.',
226
+ 'Use this so generated page extensions register shell chrome through usePageHeaderRegistry/useHeaderActionRegistry instead of rendering duplicate local headers.',
227
+ ].join(' '), {
228
+ title: z.string().optional().describe('Static page title.'),
229
+ titleExpression: z.string().optional().describe('Raw Vue expression for a dynamic title.'),
230
+ description: z.string().optional().describe('Optional page description.'),
231
+ leadingIcon: z.string().optional().describe('Optional page header icon.'),
232
+ gradient: z.enum(['none', 'purple', 'blue', 'cyan']).optional().default('none').describe('Generated operational extensions should usually use none.'),
233
+ variant: z.enum(['default', 'minimal', 'stats-focus']).optional().default('minimal').describe('Page header variant.'),
234
+ headerActions: z.array(extensionHeaderActionSchema).optional().describe('Optional shell header actions registered through useHeaderActionRegistry.'),
235
+ }, async (input) => jsonText(buildExtensionPageShellSnippet(input)));
236
+ server.tool('build_extension_permission_gate', [
237
+ 'Generate a PermissionGate wrapper snippet for Enfyra admin extension UI.',
238
+ 'Use this when a visible button/block/list needs operator UX gating; backend route permissions and owner checks still remain authoritative.',
239
+ ].join(' '), {
240
+ route: z.string().optional().describe('API route path to gate against, e.g. /notes.'),
241
+ methods: z.array(z.string()).optional().describe('HTTP methods for the route condition. Defaults to GET when route is provided.'),
242
+ condition: z.string().optional().describe('Raw Vue permission condition expression. Overrides route/methods when provided.'),
243
+ body: z.string().describe('Vue template content to render inside PermissionGate. Field controls are normalized to w-full.'),
244
+ }, async (input) => jsonText(buildExtensionPermissionGateSnippet(input)));
245
+ server.tool('build_extension_empty_state', [
246
+ 'Generate an EmptyState snippet for Enfyra admin extensions.',
247
+ 'Use this for app-matched empty/error/no-results states instead of hand-rolled blank panels.',
248
+ ].join(' '), {
249
+ title: z.string().optional().describe('Empty state title.'),
250
+ description: z.string().optional().describe('Empty state description.'),
251
+ icon: z.string().optional().describe('Icon name. Defaults to lucide:inbox.'),
252
+ size: z.enum(['sm', 'md', 'lg']).optional().default('sm').describe('Empty state size.'),
253
+ variant: z.enum(['outline', 'naked', 'soft', 'subtle', 'solid']).optional().default('naked').describe('Use naked inside existing panels/lists.'),
254
+ action: extensionFooterActionSchema.optional().describe('Optional primary empty-state action.'),
255
+ }, async (input) => jsonText(buildExtensionEmptyStateSnippet(input)));
256
+ server.tool('build_extension_resource_list', [
257
+ 'Generate a CommonResourceListFrame/CommonResourceListItem snippet for Enfyra admin extensions.',
258
+ 'Use this for operational list pages so loading, empty state, pagination placement, row chrome, icons, stats, and row actions follow the app contract.',
259
+ ].join(' '), {
260
+ itemsExpression: z.string().optional().default('items').describe('Vue expression for the row array, e.g. notes.'),
261
+ itemName: z.string().optional().default('item').describe('Loop variable name.'),
262
+ keyExpression: z.string().optional().describe('Vue expression for :key. Defaults to item.id.'),
263
+ titleExpression: z.string().optional().describe('Vue expression for item title. Defaults to item.title || "Untitled".'),
264
+ descriptionExpression: z.string().optional().describe('Vue expression for item description. Defaults to item.description.'),
265
+ icon: z.string().optional().describe('Static row icon when iconExpression is omitted.'),
266
+ iconExpression: z.string().optional().describe('Vue expression for row icon.'),
267
+ loadingExpression: z.string().optional().default('pending').describe('Vue expression for frame loading.'),
268
+ totalExpression: z.string().optional().describe('Vue expression for total rows.'),
269
+ itemsPerPageExpression: z.string().optional().describe('Vue expression for items per page; use 0 to hide pagination.'),
270
+ statsExpression: z.string().optional().describe('Vue expression returning ResourceListStat[] for each row.'),
271
+ actionsExpression: z.string().optional().describe('Vue expression returning ResourceListAction[] for each row.'),
272
+ topBadgeExpression: z.string().optional().describe('Vue expression returning a ResourceListTopBadge for each row.'),
273
+ onClick: z.string().optional().describe('Raw Vue expression called for row click, e.g. openEdit(item).'),
274
+ emptyTitle: z.string().optional().describe('Empty title.'),
275
+ emptyDescription: z.string().optional().describe('Empty description.'),
276
+ emptyIcon: z.string().optional().describe('Empty icon.'),
277
+ }, async (input) => jsonText(buildExtensionResourceListSnippet(input)));
278
+ server.tool('build_extension_resource_grid', [
279
+ 'Generate a constrained responsive CommonResourceListFrame card grid for Enfyra admin extensions.',
280
+ 'Use this for workboards, catalogs, dashboards, and other card collections so generated pages do not become full-width horizontal strips.',
281
+ 'The tool owns the page constraint, plain list-frame chrome, md/two-column and xl/three-column breakpoints, semantic card surface, loading/empty frame, and stable card height.',
282
+ ].join(' '), {
283
+ itemsExpression: z.string().optional().default('items').describe('Vue expression for the card array, e.g. notes.'),
284
+ itemName: z.string().optional().default('item').describe('Loop variable name.'),
285
+ keyExpression: z.string().optional().describe('Vue expression for :key. Defaults to item.id.'),
286
+ cardBody: z.string().optional().describe('Card body Vue template. Defaults to semantic title/description. Fields and native buttons are normalized.'),
287
+ loadingExpression: z.string().optional().default('pending').describe('Vue expression for frame loading.'),
288
+ totalExpression: z.string().optional().describe('Vue expression for total cards.'),
289
+ itemsPerPageExpression: z.string().optional().describe('Vue expression for items per page; use 0 to hide pagination.'),
290
+ emptyTitle: z.string().optional().describe('Empty state title.'),
291
+ emptyDescription: z.string().optional().describe('Empty state description.'),
292
+ emptyIcon: z.string().optional().describe('Empty state icon.'),
293
+ constrained: z.boolean().optional().default(true).describe('Wrap in eapp-page-constrained-wide. Disable only for intentional full-bleed surfaces.'),
294
+ }, async (input) => jsonText(buildExtensionResourceGridSnippet(input)));
295
+ server.tool('build_extension_form_editor', [
296
+ 'Generate a FormEditor/FormEditorLazy snippet for Enfyra table-backed extension forms.',
297
+ 'Use this instead of hand-writing UInput/UTextarea fields when the form maps directly to a table record.',
298
+ ].join(' '), {
299
+ tableName: z.string().optional().describe('Static table name.'),
300
+ tableNameExpression: z.string().optional().describe('Raw Vue expression for dynamic table name.'),
301
+ model: z.string().optional().default('form').describe('Record state variable for v-model.'),
302
+ errors: z.string().optional().default('errors').describe('Errors state variable for v-model:errors.'),
303
+ mode: z.enum(['create', 'update']).optional().describe('Optional fixed form mode.'),
304
+ loadingExpression: z.string().optional().describe('Raw Vue expression/ref for loading.'),
305
+ layout: z.enum(['stack', 'grid']).optional().describe('Form layout.'),
306
+ includes: z.array(z.string()).optional().describe('Fields to include. Prefer explicit includes for focused generated forms.'),
307
+ excluded: z.array(z.string()).optional().describe('Fields to exclude. compiledCode is always excluded by FormEditor.'),
308
+ sectionsExpression: z.string().optional().describe('Raw Vue expression for FormEditorSection[].'),
309
+ fieldMapExpression: z.string().optional().describe('Raw Vue expression for fieldMap overrides.'),
310
+ virtualFieldsExpression: z.string().optional().describe('Raw Vue expression for virtual fields.'),
311
+ currentRecordIdExpression: z.string().optional().describe('Raw Vue expression for current record id.'),
312
+ hasChangedHandler: z.string().optional().describe('Handler expression for @has-changed.'),
313
+ virtualFieldEmitHandler: z.string().optional().describe('Handler expression for @virtual-field-emit.'),
314
+ lazy: z.boolean().optional().default(true).describe('Use FormEditorLazy by default.'),
315
+ }, async (input) => jsonText(buildExtensionFormEditorSnippet(input)));
316
+ server.tool('build_extension_widget', [
317
+ 'Generate a Widget snippet for reusing a widget extension inside an Enfyra page extension.',
318
+ 'Use this so agents pass numeric widget ids and keep prop/event ownership explicit.',
319
+ ].join(' '), {
320
+ id: z.union([z.number(), z.string()]).describe('Numeric enfyra_extension widget id. Strings are allowed but return a warning because names/extensionId are wrong for Widget.'),
321
+ props: z.record(z.string()).optional().describe('Map of prop name to raw Vue expression.'),
322
+ events: z.record(z.string()).optional().describe('Map of event name to handler expression.'),
323
+ }, async (input) => jsonText(buildExtensionWidgetSnippet(input)));
324
+ server.tool('build_extension_menu_notification', [
325
+ 'Generate useMenuNotificationRegistry registration code for a global extension.',
326
+ 'Use this for sidebar menu count chips or dot notifications without mutating enfyra_menu records.',
327
+ ].join(' '), {
328
+ id: z.string().optional().describe('Stable notification id.'),
329
+ targetId: z.union([z.string(), z.number()]).optional().describe('Target menu id.'),
330
+ path: z.string().optional().describe('Target menu path.'),
331
+ route: z.string().optional().describe('Target route path.'),
332
+ value: z.union([z.string(), z.number()]).optional().describe('Static count/chip value. Omit with valueExpression for a dot.'),
333
+ valueExpression: z.string().optional().describe('Raw Vue expression for count/chip value. Omit value for a dot-only notification.'),
334
+ color: z.enum(['primary', 'success', 'warning', 'error', 'info', 'neutral']).optional().default('primary').describe('Chip/dot color intent.'),
335
+ title: z.string().optional().describe('Optional tooltip/title.'),
336
+ order: z.number().optional().describe('Sort order when multiple notifications target the same menu.'),
337
+ }, async (input) => jsonText(buildExtensionMenuNotificationSnippet(input)));
338
+ server.tool('build_extension_account_panel_item', [
339
+ 'Generate useAccountPanelRegistry registration code for a global extension.',
340
+ 'Use this for data-driven account panel rows instead of drawing full custom sidebar/account UI.',
341
+ ].join(' '), {
342
+ id: z.string().optional().describe('Stable account panel item id.'),
343
+ order: z.number().optional().describe('Display order.'),
344
+ label: z.string().optional().describe('Row label.'),
345
+ description: z.string().optional().describe('Row description.'),
346
+ icon: z.string().optional().describe('Leading icon.'),
347
+ count: z.union([z.string(), z.number()]).optional().describe('Static notification chip value.'),
348
+ countExpression: z.string().optional().describe('Raw Vue expression for notification chip value.'),
349
+ badge: z.union([z.string(), z.number()]).optional().describe('Legacy static badge value. Prefer count.'),
350
+ badgeExpression: z.string().optional().describe('Raw Vue expression for badge. Prefer countExpression.'),
351
+ badgeColor: z.enum(['primary', 'neutral', 'info', 'error', 'warning', 'success']).optional().describe('Chip color.'),
352
+ trailingIcon: z.string().optional().describe('Trailing icon.'),
353
+ expandedExpression: z.string().optional().describe('Raw Vue expression controlling expanded state.'),
354
+ contentComponent: z.string().optional().describe('Raw component reference for inline expanded content.'),
355
+ contentPropsExpression: z.string().optional().describe('Raw Vue expression for content props.'),
356
+ onClick: z.string().optional().describe('Direct action handler expression.'),
357
+ onToggle: z.string().optional().describe('Expandable row toggle handler expression.'),
358
+ }, async (input) => jsonText(buildExtensionAccountPanelSnippet(input)));
359
+ server.tool('build_extension_tabs', [
360
+ 'Generate a UTabs snippet for Enfyra extension page sections.',
361
+ 'Use this instead of custom tab bars so app-wide tab chrome owns active indicators, focus rings, spacing, and theme contrast.',
362
+ ].join(' '), {
363
+ model: z.string().optional().default('activeTab').describe('Active tab model variable.'),
364
+ itemsExpression: z.string().optional().default('tabs').describe('Raw Vue expression for tab items.'),
365
+ body: z.string().optional().describe('Vue template body for #content="{ item }".'),
366
+ }, async (input) => jsonText(buildExtensionTabsSnippet(input)));
367
+ server.tool('build_extension_upload_modal', [
368
+ 'Generate a CommonUploadModal snippet and upload-progress companion snippet for Enfyra extensions.',
369
+ 'Use this for file upload UI so progress, selected-file rows, and x-enfyra-upload-id wiring follow the app contract.',
370
+ ].join(' '), {
371
+ model: z.string().optional().default('showUploadModal').describe('Modal open state variable.'),
372
+ title: z.string().optional().describe('Upload modal title.'),
373
+ accept: z.string().optional().default('*/*').describe('Accepted mime/extensions.'),
374
+ multiple: z.boolean().optional().default(true).describe('Allow multiple files.'),
375
+ maxSizeExpression: z.string().optional().describe('Raw Vue expression for max file size.'),
376
+ loadingExpression: z.string().optional().describe('Raw Vue expression/ref for upload pending state.'),
377
+ uploadProgressExpression: z.string().optional().describe('Raw Vue expression/ref for aggregate upload progress.'),
378
+ fileProgressExpression: z.string().optional().describe('Raw Vue expression for per-row progress map.'),
379
+ dragText: z.string().optional().describe('Drag/drop text.'),
380
+ acceptText: z.string().optional().describe('Accept/help text.'),
381
+ uploadText: z.string().optional().describe('Upload action text.'),
382
+ uploadingText: z.string().optional().describe('Uploading action text.'),
383
+ uploadHandler: z.string().optional().default('handleUpload').describe('@upload handler expression.'),
384
+ errorHandler: z.string().optional().describe('@error handler expression.'),
385
+ headerContent: z.string().optional().describe('Optional #header-content template, e.g. storage selector. Fields are normalized to w-full.'),
386
+ }, async (input) => jsonText(buildExtensionUploadModalSnippet(input)));
387
+ server.tool('extension_workflow', [
388
+ 'Step-by-step workflow for creating or updating Enfyra admin page, global, or widget extensions.',
389
+ 'Use this when an LLM is building extension UI, menu shell notifications, account panel entries, or page/menu wiring and should follow live nextSteps instead of guessing raw enfyra_extension mutations.',
390
+ 'With apply=false it validates code, reads live menu/extension state, and returns pending steps.',
391
+ 'With apply=true it applies exactly the next pending step. With applyAll=true it advances all currently safe pending steps.',
392
+ 'Call get_extension_theme_contract before generating or reviewing UI.',
393
+ ].join(' '), {
394
+ name: z.string().describe('Extension unique name.'),
395
+ type: z.enum(['page', 'global', 'widget']).optional().default('page').describe('Extension type. Page extensions need a menu. Global extensions are for shell-wide registration.'),
396
+ code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC extension code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
397
+ menuId: z.union([z.string(), z.number()]).optional().describe('Existing menu id for a page extension. Provide this or menuLabel/menuPath.'),
398
+ menuLabel: z.string().optional().describe('Menu label to create or update for a page extension when menuId is not provided.'),
399
+ menuPath: z.string().optional().describe('Admin app route path for the page menu, e.g. /cloud/support.'),
400
+ menuIcon: z.string().optional().describe('Optional menu icon name.'),
401
+ menuType: z.enum(['Menu', 'Dropdown Menu']).optional().describe('Menu type. Omit to preserve an existing menu value or use the platform default for a new menu.'),
402
+ menuOrder: z.number().optional().describe('Menu display order. Omit to preserve an existing menu value or use the platform default for a new menu.'),
403
+ menuPermission: z.string().optional().describe('Optional menu permission JSON object. Omit for unrestricted menus; empty objects are normalized to null.'),
404
+ menuDescription: z.string().optional().describe('Optional menu admin note.'),
405
+ menuIsEnabled: z.boolean().optional().describe('Enable the menu. Omit to preserve an existing menu value or use the platform default for a new menu.'),
406
+ description: z.string().optional().describe('Extension description.'),
407
+ isEnabled: z.boolean().optional().default(true).describe('Enable extension.'),
408
+ version: z.string().optional().default('1.0.0').describe('Extension version.'),
409
+ apply: z.boolean().optional().default(false).describe('false returns plan only; true applies exactly the next pending step. When true, always pass globalRulesAckKey; also pass knowledgeAckKey when saving handler sourceCode.'),
410
+ applyAll: z.boolean().optional().default(false).describe('true applies all safe pending steps in order. Prefer apply=true for production changes. When true, always pass globalRulesAckKey and pass knowledgeAckKey if handler sourceCode may be saved.'),
411
+ stepId: z.string().optional().describe('Optional pending step id to apply. Omit to apply the next pending step.'),
412
+ globalRulesAckKey: globalRulesAckParam(z).optional().describe('Required when apply/applyAll mutates metadata. Use globalRulesAckKey from get_enfyra_required_knowledge.'),
413
+ extensionKnowledgeAckKey: extensionKnowledgeAckParam(z).optional().describe('Required when apply/applyAll saves extension code. Use extensionAckKey from get_enfyra_required_knowledge.'),
414
+ }, async (input) => jsonText(await runExtensionWorkflow(ENFYRA_API_URL, input)));
415
+ }
416
+ //# sourceMappingURL=platform-extension-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-extension-tools.js","sourceRoot":"","sources":["../../src/lib/platform-extension-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './extension-component-builders.js';
2
+ export * from './extension-api-builders.js';
3
+ export * from './extension-contract-review.js';
4
+ export * from './extension-theme-contract.js';
@@ -0,0 +1,5 @@
1
+ export * from './extension-component-builders.js';
2
+ export * from './extension-api-builders.js';
3
+ export * from './extension-contract-review.js';
4
+ export * from './extension-theme-contract.js';
5
+ //# sourceMappingURL=platform-extension-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-extension-ui.js","sourceRoot":"","sources":["../../src/lib/platform-extension-ui.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,54 @@
1
+ export declare function runExtensionWorkflow(apiUrl: any, opts: any): Promise<{
2
+ action: string;
3
+ extension: {
4
+ name: any;
5
+ type: any;
6
+ id: any;
7
+ menuId: any;
8
+ };
9
+ validation: {
10
+ valid: boolean;
11
+ localChecks: {
12
+ vueSfcAst: string;
13
+ componentCasing: string;
14
+ fieldWidth: string;
15
+ themeContract: string;
16
+ runtimeContract: string;
17
+ };
18
+ extensionId: any;
19
+ compiledLength: any;
20
+ };
21
+ menu: {
22
+ id: any;
23
+ label: any;
24
+ path: any;
25
+ };
26
+ existingExtension: {
27
+ id: any;
28
+ name: any;
29
+ type: any;
30
+ menuId: any;
31
+ };
32
+ steps: any[];
33
+ operations: any[];
34
+ complete: boolean;
35
+ nextSteps: {
36
+ tool: string;
37
+ input: {
38
+ name: any;
39
+ type: any;
40
+ };
41
+ reason: any;
42
+ }[] | {
43
+ tool: string;
44
+ input: {
45
+ name: any;
46
+ type: any;
47
+ apply: boolean;
48
+ stepId: any;
49
+ };
50
+ stepId: any;
51
+ requiresKnowledgeAck: string;
52
+ }[];
53
+ guidance: string[];
54
+ }>;