@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,524 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { fetchAPI } from './fetch.js';
3
+ import { validatePortableScriptSource } from './mutation-guards.js';
4
+ import { writeSourceArtifact } from './source-artifacts.js';
5
+ import { analyzeExtensionSfc, extensionElementHasAttribute, } from './extension-sfc-analyzer.js';
6
+ import { assertExtensionKnowledgeAck, assertGlobalRulesAck, } from './required-knowledge.js';
7
+ import { AUTO_INJECTED_EXTENSION_COMPONENT_BY_LOWERCASE, FULL_WIDTH_EXTENSION_FIELD_TAGS, buildExtensionUiSnippet, reviewExtensionRuntimeContract, reviewExtensionThemeContract, reviewExtensionUiContract, } from './platform-extension-ui.js';
8
+ import { getId, unwrapData, } from './platform-route-operations.js';
9
+ import { findRecord, } from './platform-data-operations.js';
10
+ export function parseJsonObjectArg(name, value, fallback = {}) {
11
+ if (value === undefined || value === null || value === '')
12
+ return fallback;
13
+ const parsed = typeof value === 'string' ? JSON.parse(value) : value;
14
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
15
+ throw new Error(`${name} must be a JSON object.`);
16
+ }
17
+ return parsed;
18
+ }
19
+ export function normalizeMenuPermissionArg(permission) {
20
+ const parsed = parseJsonObjectArg('permission', permission, null);
21
+ if (!parsed)
22
+ return null;
23
+ if (Object.keys(parsed).length === 0)
24
+ return null;
25
+ return parsed;
26
+ }
27
+ export function parseJsonArrayArg(name, value, fallback = []) {
28
+ if (value === undefined || value === null || value === '')
29
+ return fallback;
30
+ const parsed = typeof value === 'string' ? JSON.parse(value) : value;
31
+ if (!Array.isArray(parsed)) {
32
+ throw new Error(`${name} must be a JSON array.`);
33
+ }
34
+ return parsed;
35
+ }
36
+ export function filterQuery(filter) {
37
+ return encodeURIComponent(JSON.stringify(filter));
38
+ }
39
+ export async function reloadBestEffort(apiUrl, path) {
40
+ try {
41
+ const result = await fetchAPI(apiUrl, path, { method: 'POST' });
42
+ return { attempted: true, succeeded: true, result };
43
+ }
44
+ catch (error) {
45
+ return { attempted: true, succeeded: false, error: error?.message || String(error) };
46
+ }
47
+ }
48
+ export function naturalPartialReload(reason) {
49
+ return { attempted: false, succeeded: true, reason };
50
+ }
51
+ export async function validateDynamicScript(apiUrl, sourceCode, scriptLanguage = 'javascript') {
52
+ validatePortableScriptSource(sourceCode);
53
+ const result = await fetchAPI(apiUrl, '/admin/script/validate', {
54
+ method: 'POST',
55
+ body: JSON.stringify({ sourceCode, scriptLanguage }),
56
+ });
57
+ if (result?.valid === false || result?.success === false) {
58
+ throw new Error(result?.error?.message || 'Dynamic script validation failed.');
59
+ }
60
+ return {
61
+ valid: true,
62
+ scriptLanguage,
63
+ compiledLength: typeof result?.data?.compiledCode === 'string' ? result.data.compiledCode.length : undefined,
64
+ };
65
+ }
66
+ export function readTemplateBlocks(code) {
67
+ const blocks = [];
68
+ const lower = String(code || '').toLowerCase();
69
+ let index = 0;
70
+ while (index < lower.length) {
71
+ const openStart = lower.indexOf('<template', index);
72
+ if (openStart === -1)
73
+ break;
74
+ const boundary = lower[openStart + '<template'.length];
75
+ if (boundary && !/\s|>/.test(boundary)) {
76
+ index = openStart + 1;
77
+ continue;
78
+ }
79
+ const openEnd = lower.indexOf('>', openStart + '<template'.length);
80
+ if (openEnd === -1)
81
+ break;
82
+ const closeStart = lower.indexOf('</template', openEnd + 1);
83
+ if (closeStart === -1)
84
+ break;
85
+ blocks.push(String(code).slice(openEnd + 1, closeStart));
86
+ index = closeStart + '</template'.length;
87
+ }
88
+ return blocks;
89
+ }
90
+ function readTemplateTagName(template, start) {
91
+ const next = template[start + 1];
92
+ if (!next || next === '!' || next === '?')
93
+ return null;
94
+ let index = start + (next === '/' ? 2 : 1);
95
+ while (/\s/.test(template[index] || ''))
96
+ index += 1;
97
+ const nameStart = index;
98
+ while (/[\w.-]/.test(template[index] || ''))
99
+ index += 1;
100
+ return index > nameStart ? template.slice(nameStart, index) : null;
101
+ }
102
+ function findInvalidExtensionSortSyntax(code) {
103
+ const source = String(code || '');
104
+ if (/\bsort\s*:\s*\[[\s\S]*?\]/u.test(source)) {
105
+ return 'sort arrays create repeated query parameters.';
106
+ }
107
+ if (/\bsort\s*:\s*(['"`])[^'"`]*:\s*(?:asc|desc)\1/iu.test(source)) {
108
+ return 'SQL-style field:ASC/field:DESC tokens are not valid Enfyra REST sort syntax.';
109
+ }
110
+ return null;
111
+ }
112
+ export function validateExtensionCodeLocally(code, options = {}) {
113
+ const analysis = analyzeExtensionSfc(code);
114
+ if (!analysis.valid) {
115
+ throw new Error(`Invalid Vue SFC: ${analysis.errors[0] || 'template parsing failed.'}`);
116
+ }
117
+ if (/\bresolveComponent\s*\(/.test(String(code || ''))) {
118
+ throw new Error('Invalid extension component resolution: do not call resolveComponent() in Enfyra extensions. Use auto-injected components such as <UButton> directly in the template so the app/compiler resolves them correctly.');
119
+ }
120
+ const invalidSortSyntax = findInvalidExtensionSortSyntax(code);
121
+ if (invalidSortSyntax) {
122
+ throw new Error(`Invalid extension sort contract: ${invalidSortSyntax} Use build_extension_ui kind=api_usage with structured sort entries; Enfyra REST requires one comma-separated string such as "-isPinned,-updatedAt".`);
123
+ }
124
+ const violations = analysis.elements.flatMap((element) => {
125
+ const tagName = element.tag;
126
+ if (tagName !== tagName.toLowerCase() || tagName.includes('-'))
127
+ return [];
128
+ const expected = AUTO_INJECTED_EXTENSION_COMPONENT_BY_LOWERCASE.get(tagName);
129
+ return expected ? [{ tag: tagName, expected }] : [];
130
+ });
131
+ if (violations.length) {
132
+ const first = violations[0];
133
+ throw new Error(`Invalid extension component casing: use <${first.expected}> instead of <${first.tag}>. Enfyra/Nuxt UI auto-injected components must keep PascalCase in extension templates; lowercase tags render as unresolved DOM elements.`);
134
+ }
135
+ const missingFullWidthFields = analysis.elements
136
+ .filter((element) => FULL_WIDTH_EXTENSION_FIELD_TAGS.includes(element.tag))
137
+ .filter((element) => !extensionElementHasAttribute(element, 'data-compact', null))
138
+ .filter((element) => !extensionElementHasAttribute(element, 'data-inline', null))
139
+ .filter((element) => !element.classes.includes('w-full'))
140
+ .map((element) => ({ tag: element.tag, snippet: element.source }));
141
+ if (missingFullWidthFields.length) {
142
+ const first = missingFullWidthFields[0];
143
+ throw new Error(`Invalid extension field width: <${first.tag}> must include class="w-full" in Enfyra extensions unless it is intentionally compact with data-compact or data-inline. First offending snippet: ${first.snippet}`);
144
+ }
145
+ const uiReview = reviewExtensionUiContract(code, { pattern: options.uiPattern });
146
+ const firstUiError = uiReview.issues.find((issue) => issue.severity === 'error');
147
+ if (firstUiError) {
148
+ throw new Error(`Invalid extension UI contract: ${firstUiError.message} Rule: ${firstUiError.rule}. ${firstUiError.suggestion}`);
149
+ }
150
+ const themeReview = reviewExtensionThemeContract(code);
151
+ const firstThemeError = themeReview.issues.find((issue) => issue.severity === 'error');
152
+ if (firstThemeError) {
153
+ throw new Error(`Invalid extension theme contract: ${firstThemeError.message} Rule: ${firstThemeError.rule}. ${firstThemeError.suggestion}`);
154
+ }
155
+ const runtimeReview = reviewExtensionRuntimeContract(code);
156
+ const firstRuntimeError = runtimeReview.issues.find((issue) => issue.severity === 'error');
157
+ if (firstRuntimeError) {
158
+ throw new Error(`Invalid extension runtime contract: ${firstRuntimeError.message} Rule: ${firstRuntimeError.rule}. ${firstRuntimeError.suggestion}`);
159
+ }
160
+ return { vueSfcAst: 'passed', componentCasing: 'passed', fieldWidth: 'passed', themeContract: 'passed', runtimeContract: 'passed' };
161
+ }
162
+ export async function validateExtensionCode(apiUrl, code, name, options = {}) {
163
+ const localChecks = validateExtensionCodeLocally(code, options);
164
+ const result = await fetchAPI(apiUrl, '/enfyra_extension/preview', {
165
+ method: 'POST',
166
+ body: JSON.stringify({ code, name }),
167
+ });
168
+ if (result?.success === false) {
169
+ throw new Error(result?.error?.message || 'Extension validation failed.');
170
+ }
171
+ return {
172
+ valid: true,
173
+ localChecks,
174
+ extensionId: result?.extensionId || name || null,
175
+ compiledLength: typeof result?.compiledCode === 'string' ? result.compiledCode.length : undefined,
176
+ };
177
+ }
178
+ function summarizeExtensionSaveResult(result, fallback = {}) {
179
+ const record = unwrapData(result)[0] || (result?.data && !Array.isArray(result.data) ? result.data : null) || {};
180
+ return {
181
+ id: getId(record) ?? fallback.id ?? null,
182
+ name: record.name ?? fallback.name ?? null,
183
+ type: record.type ?? fallback.type ?? null,
184
+ isEnabled: record.isEnabled ?? fallback.isEnabled ?? null,
185
+ version: record.version ?? fallback.version ?? null,
186
+ updatedAt: record.updatedAt ?? null,
187
+ };
188
+ }
189
+ export function buildExtensionRuntimeVerification({ extension, code, validation, uiPattern, expectedSha256 }) {
190
+ const source = String(code || '');
191
+ const currentSha256 = sha256Text(source);
192
+ const review = buildExtensionUiSnippet('review', { code: source, pattern: uiPattern });
193
+ const rawMenu = Array.isArray(extension?.menu) ? extension.menu[0] : extension?.menu;
194
+ const isPage = String(extension?.type || '').toLowerCase() === 'page';
195
+ const savedRecordPassed = getId(extension) !== null;
196
+ const menuWiringPassed = !isPage || Boolean(getId(rawMenu) !== null && rawMenu?.path);
197
+ const hashMatches = !expectedSha256 || expectedSha256 === currentSha256;
198
+ const compilerPassed = validation?.valid === true;
199
+ const valid = savedRecordPassed && compilerPassed && review.valid && menuWiringPassed && hashMatches;
200
+ return {
201
+ action: 'extension_runtime_verified',
202
+ valid,
203
+ extension: {
204
+ id: getId(extension),
205
+ name: extension?.name || null,
206
+ type: extension?.type || null,
207
+ isEnabled: extension?.isEnabled ?? null,
208
+ version: extension?.version ?? null,
209
+ sha256: currentSha256,
210
+ length: source.length,
211
+ },
212
+ checks: {
213
+ savedRecord: { status: savedRecordPassed ? 'passed' : 'failed' },
214
+ expectedHash: { status: hashMatches ? 'passed' : 'failed', expectedSha256: expectedSha256 || null, currentSha256 },
215
+ serverCompile: { status: compilerPassed ? 'passed' : 'failed', compiledLength: validation?.compiledLength ?? null },
216
+ uiContract: { status: review.ui.valid ? 'passed' : 'failed', issueCount: review.ui.issueCount, pattern: review.ui.pattern },
217
+ themeContract: { status: review.theme.valid ? 'passed' : 'failed', issueCount: review.theme.issueCount },
218
+ runtimeContract: { status: review.runtime.valid ? 'passed' : 'failed', issueCount: review.runtime.issueCount },
219
+ menuWiring: {
220
+ status: menuWiringPassed ? 'passed' : 'failed',
221
+ applicable: isPage,
222
+ menu: rawMenu ? { id: getId(rawMenu), label: rawMenu.label || null, path: rawMenu.path || null } : null,
223
+ },
224
+ browserRender: {
225
+ status: 'not_run',
226
+ reason: 'MCP can verify saved metadata, server compilation, static runtime/UI/theme contracts, and page menu wiring. A signed-in browser is still required to prove component execution, API data shape, console errors, and responsive layout.',
227
+ },
228
+ },
229
+ contractReview: review.valid
230
+ ? { valid: true, issueCount: 0, pattern: review.ui.pattern }
231
+ : review,
232
+ coverage: {
233
+ verified: ['saved metadata', 'expected source hash', 'server Vue compilation', 'static UI/theme/runtime contracts', ...(isPage ? ['page menu wiring'] : [])],
234
+ browserRequiredForFullRuntimeProof: true,
235
+ },
236
+ };
237
+ }
238
+ export async function verifyExtensionRuntime(apiUrl, { id, name, uiPattern, expectedSha256 }) {
239
+ if (!id && !name)
240
+ throw new Error('Provide id or name to verify an existing extension.');
241
+ const existing = id
242
+ ? await findRecord(apiUrl, 'enfyra_extension', { id: { _eq: id } }, 'id,_id,name,type,isEnabled,version,updatedAt,menu.id,menu.label,menu.path,code')
243
+ : await findRecord(apiUrl, 'enfyra_extension', { name: { _eq: name } }, 'id,_id,name,type,isEnabled,version,updatedAt,menu.id,menu.label,menu.path,code');
244
+ if (!existing)
245
+ throw new Error(`Extension not found: ${id || name}`);
246
+ const code = String(existing.code || '');
247
+ const validation = await validateExtensionCode(apiUrl, code, existing.name || String(id || name), { uiPattern });
248
+ return buildExtensionRuntimeVerification({ extension: existing, code, validation, uiPattern, expectedSha256 });
249
+ }
250
+ export async function updateExtensionCode(apiUrl, { id, name, code, description, isEnabled, version, expectedSha256, uiPattern, globalRulesAckKey, extensionKnowledgeAckKey, }) {
251
+ assertGlobalRulesAck(globalRulesAckKey);
252
+ assertExtensionKnowledgeAck(extensionKnowledgeAckKey);
253
+ if (!id && !name)
254
+ throw new Error('Provide id or name to update an existing extension.');
255
+ const existing = id
256
+ ? await findRecord(apiUrl, 'enfyra_extension', { id: { _eq: id } }, 'id,_id,name,type,isEnabled,version,menu.id,code')
257
+ : await findRecord(apiUrl, 'enfyra_extension', { name: { _eq: name } }, 'id,_id,name,type,isEnabled,version,menu.id,code');
258
+ if (!existing)
259
+ throw new Error(`Extension not found: ${id || name}`);
260
+ const extensionId = getId(existing);
261
+ const currentSha256 = sha256Text(existing.code || '');
262
+ if (expectedSha256 && expectedSha256 !== currentSha256) {
263
+ throw new Error(`Extension code hash mismatch. Expected ${expectedSha256}, got ${currentSha256}. Re-read the extension before replacing it.`);
264
+ }
265
+ const validation = await validateExtensionCode(apiUrl, code, name || existing.name || extensionId, { uiPattern });
266
+ const contractReview = buildExtensionUiSnippet('review', { code, pattern: uiPattern });
267
+ const body = {
268
+ code,
269
+ ...(description !== undefined ? { description } : {}),
270
+ ...(isEnabled !== undefined ? { isEnabled } : {}),
271
+ ...(version !== undefined ? { version } : {}),
272
+ };
273
+ const result = await fetchAPI(apiUrl, `/enfyra_extension/${encodeURIComponent(String(extensionId))}`, {
274
+ method: 'PATCH',
275
+ body: JSON.stringify(body),
276
+ });
277
+ const nextSha256 = sha256Text(code);
278
+ const verification = await verifyExtensionRuntime(apiUrl, {
279
+ id: extensionId,
280
+ name: undefined,
281
+ uiPattern,
282
+ expectedSha256: nextSha256,
283
+ });
284
+ return {
285
+ action: 'extension_code_updated',
286
+ id: extensionId,
287
+ name: existing.name || name || null,
288
+ type: existing.type || null,
289
+ previousSha256: currentSha256,
290
+ sha256: nextSha256,
291
+ saved: summarizeExtensionSaveResult(result, {
292
+ id: extensionId,
293
+ name: existing.name || name,
294
+ type: existing.type,
295
+ isEnabled: isEnabled ?? existing.isEnabled,
296
+ version: version ?? existing.version,
297
+ }),
298
+ validation,
299
+ contractReview: {
300
+ valid: contractReview.valid,
301
+ issueCount: contractReview.issueCount,
302
+ pattern: contractReview.ui?.pattern,
303
+ },
304
+ verification,
305
+ };
306
+ }
307
+ export function sha256Text(value) {
308
+ return createHash('sha256').update(String(value ?? '')).digest('hex');
309
+ }
310
+ export function escapeRegExp(value) {
311
+ return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
312
+ }
313
+ function whitespaceFlexiblePattern(search) {
314
+ const parts = String(search ?? '').trim().split(/\s+/).filter(Boolean);
315
+ if (!parts.length)
316
+ throw new Error('search must contain at least one non-whitespace token.');
317
+ return new RegExp(parts.map(escapeRegExp).join('\\s+'), 'g');
318
+ }
319
+ function regexMatches(code, regex) {
320
+ const matches = [];
321
+ regex.lastIndex = 0;
322
+ let match = regex.exec(code);
323
+ while (match) {
324
+ matches.push(match);
325
+ if (match[0] === '')
326
+ regex.lastIndex += 1;
327
+ match = regex.exec(code);
328
+ }
329
+ regex.lastIndex = 0;
330
+ return matches;
331
+ }
332
+ function replaceFirstExact(code, search, replace) {
333
+ const index = code.indexOf(search);
334
+ if (index === -1)
335
+ return code;
336
+ return `${code.slice(0, index)}${replace}${code.slice(index + search.length)}`;
337
+ }
338
+ function normalizeExtensionPatch(input, index) {
339
+ const search = input?.search;
340
+ if (typeof search !== 'string' || search.length === 0) {
341
+ throw new Error(`patches[${index}].search must be a non-empty string.`);
342
+ }
343
+ if (input?.replace === undefined) {
344
+ throw new Error(`patches[${index}].replace is required.`);
345
+ }
346
+ const searchMode = input?.searchMode || 'exact';
347
+ if (!['exact', 'whitespace'].includes(searchMode)) {
348
+ throw new Error(`patches[${index}].searchMode must be "exact" or "whitespace".`);
349
+ }
350
+ return {
351
+ search,
352
+ replace: String(input.replace),
353
+ searchMode,
354
+ replaceAll: Boolean(input?.replaceAll),
355
+ };
356
+ }
357
+ function normalizeExtensionPatchInputs({ search, replace, searchMode, replaceAll, patches }) {
358
+ if (Array.isArray(patches) && patches.length > 0) {
359
+ return patches.map(normalizeExtensionPatch);
360
+ }
361
+ return [normalizeExtensionPatch({ search, replace, searchMode, replaceAll }, 0)];
362
+ }
363
+ function applyOneExtensionPatch(code, patch, index) {
364
+ const beforeLength = code.length;
365
+ let occurrences = 0;
366
+ let nextCode = code;
367
+ if (patch.searchMode === 'whitespace') {
368
+ const regex = whitespaceFlexiblePattern(patch.search);
369
+ occurrences = regexMatches(code, regex).length;
370
+ if (occurrences === 0) {
371
+ throw new Error(`Patch ${index} search fragment was not found with whitespace-flex matching.`);
372
+ }
373
+ if (!patch.replaceAll && occurrences !== 1) {
374
+ throw new Error(`Patch ${index} expected search fragment to occur exactly once; found ${occurrences}. Use replaceAll=true, a more specific fragment, or update_extension_code for a full replacement.`);
375
+ }
376
+ let replaced = false;
377
+ nextCode = code.replace(regex, (match) => {
378
+ if (patch.replaceAll)
379
+ return patch.replace;
380
+ if (replaced)
381
+ return match;
382
+ replaced = true;
383
+ return patch.replace;
384
+ });
385
+ }
386
+ else {
387
+ occurrences = code.split(patch.search).length - 1;
388
+ if (occurrences === 0) {
389
+ throw new Error(`Patch ${index} search fragment was not found.`);
390
+ }
391
+ if (!patch.replaceAll && occurrences !== 1) {
392
+ throw new Error(`Patch ${index} expected search fragment to occur exactly once; found ${occurrences}. Use replaceAll=true, a more specific fragment, or update_extension_code for a full replacement.`);
393
+ }
394
+ nextCode = patch.replaceAll
395
+ ? code.split(patch.search).join(patch.replace)
396
+ : replaceFirstExact(code, patch.search, patch.replace);
397
+ }
398
+ return {
399
+ code: nextCode,
400
+ result: {
401
+ index,
402
+ searchMode: patch.searchMode,
403
+ replaceAll: patch.replaceAll,
404
+ occurrences,
405
+ beforeLength,
406
+ afterLength: nextCode.length,
407
+ },
408
+ };
409
+ }
410
+ export function applyExtensionCodePatches(code, patches) {
411
+ const normalizedPatches = normalizeExtensionPatchInputs(patches);
412
+ let nextCode = String(code ?? '');
413
+ const results = [];
414
+ normalizedPatches.forEach((patch, index) => {
415
+ const applied = applyOneExtensionPatch(nextCode, patch, index);
416
+ nextCode = applied.code;
417
+ results.push(applied.result);
418
+ });
419
+ return { code: nextCode, patches: normalizedPatches, results };
420
+ }
421
+ function patchDiffLines(value, prefix) {
422
+ const lines = String(value ?? '').split('\n');
423
+ return lines.map((line) => `${prefix}${line}`).join('\n');
424
+ }
425
+ export function buildExtensionPatchDiffArtifact({ id, name, currentSha256, nextSha256, patches }) {
426
+ const hunks = (patches || []).map((patch, index) => [
427
+ `@@ patch ${index + 1} (${patch.searchMode || 'exact'}${patch.replaceAll ? ', all matches' : ''}) @@`,
428
+ patchDiffLines(patch.search, '-'),
429
+ patchDiffLines(patch.replace, '+'),
430
+ ].join('\n'));
431
+ const content = [
432
+ `--- ${name || id || 'extension'}@${currentSha256 || 'unknown'}`,
433
+ `+++ ${name || id || 'extension'}@${nextSha256 || 'unknown'}`,
434
+ ...hunks,
435
+ '',
436
+ ].join('\n');
437
+ return writeSourceArtifact({
438
+ tableName: 'enfyra_extension',
439
+ id: id || name || 'extension',
440
+ fieldName: 'patch.diff',
441
+ source: content,
442
+ });
443
+ }
444
+ export async function patchExtensionCode(apiUrl, { id, name, search, replace, searchMode, replaceAll, patches, expectedSha256, apply, description, isEnabled, version, uiPattern, globalRulesAckKey, extensionKnowledgeAckKey, }) {
445
+ assertGlobalRulesAck(globalRulesAckKey);
446
+ assertExtensionKnowledgeAck(extensionKnowledgeAckKey);
447
+ if (!id && !name)
448
+ throw new Error('Provide id or name to patch an existing extension.');
449
+ const existing = id
450
+ ? await findRecord(apiUrl, 'enfyra_extension', { id: { _eq: id } }, 'id,_id,name,type,menu.id,code')
451
+ : await findRecord(apiUrl, 'enfyra_extension', { name: { _eq: name } }, 'id,_id,name,type,menu.id,code');
452
+ if (!existing)
453
+ throw new Error(`Extension not found: ${id || name}`);
454
+ const extensionId = getId(existing);
455
+ const currentCode = String(existing.code ?? '');
456
+ const currentSha256 = sha256Text(currentCode);
457
+ if (apply && !expectedSha256) {
458
+ throw new Error('expectedSha256 is required when apply=true. Preview the patch or inspect the extension first, then retry with the current code hash.');
459
+ }
460
+ if (expectedSha256 && expectedSha256 !== currentSha256) {
461
+ throw new Error(`Extension code hash mismatch. Expected ${expectedSha256}, got ${currentSha256}. Re-read the extension before patching.`);
462
+ }
463
+ const patchResult = applyExtensionCodePatches(currentCode, { search, replace, searchMode, replaceAll, patches });
464
+ const nextCode = patchResult.code;
465
+ const nextSha256 = sha256Text(nextCode);
466
+ const occurrences = patchResult.results.reduce((total, item) => total + item.occurrences, 0);
467
+ const diff = buildExtensionPatchDiffArtifact({
468
+ id: extensionId,
469
+ name: existing.name || name,
470
+ currentSha256,
471
+ nextSha256,
472
+ patches: patchResult.patches,
473
+ });
474
+ const nextStepPatchInput = patchResult.patches.length === 1
475
+ ? {
476
+ search: patchResult.patches[0].search,
477
+ replace: patchResult.patches[0].replace,
478
+ searchMode: patchResult.patches[0].searchMode,
479
+ replaceAll: patchResult.patches[0].replaceAll,
480
+ }
481
+ : { patches: patchResult.patches };
482
+ const preview = {
483
+ action: apply ? 'extension_code_patch_applied' : 'extension_code_patch_previewed',
484
+ id: extensionId,
485
+ name: existing.name || name || null,
486
+ type: existing.type || null,
487
+ currentSha256,
488
+ nextSha256,
489
+ currentLength: currentCode.length,
490
+ nextLength: nextCode.length,
491
+ occurrences,
492
+ patchResults: patchResult.results,
493
+ diff,
494
+ atomic: patchResult.patches.length > 1,
495
+ apply: Boolean(apply),
496
+ };
497
+ if (!apply) {
498
+ return {
499
+ ...preview,
500
+ nextStep: {
501
+ tool: 'patch_extension_code',
502
+ input: { id: extensionId, expectedSha256: currentSha256, ...nextStepPatchInput, apply: true },
503
+ },
504
+ };
505
+ }
506
+ const result = await updateExtensionCode(apiUrl, {
507
+ id: extensionId,
508
+ name: undefined,
509
+ code: nextCode,
510
+ description,
511
+ isEnabled,
512
+ version,
513
+ expectedSha256: currentSha256,
514
+ uiPattern,
515
+ globalRulesAckKey,
516
+ extensionKnowledgeAckKey,
517
+ });
518
+ return {
519
+ ...preview,
520
+ result,
521
+ validation: result.validation,
522
+ };
523
+ }
524
+ //# sourceMappingURL=platform-extension-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-extension-source.js","sourceRoot":"","sources":["../../src/lib/platform-extension-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function registerPlatformExtensionTools(server: any, ENFYRA_API_URL: any): void;