@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,194 @@
1
+ import { assertExtensionKnowledgeAck, assertGlobalRulesAck, } from './required-knowledge.js';
2
+ import { validateExtensionCode, } from './platform-extension-source.js';
3
+ import { findRecord, } from './platform-data-operations.js';
4
+ import { getId, normalizeRestPath, refId, } from './platform-route-operations.js';
5
+ import { extensionMatches, step, } from './platform-endpoint-workflow.js';
6
+ import { ensureExtension, ensureMenu, } from './platform-resource-operations.js';
7
+ async function resolveExtensionWorkflowState(apiUrl, opts) {
8
+ const type = opts.type || 'page';
9
+ if (type === 'page' && opts.menuId && (opts.menuLabel || opts.menuPath)) {
10
+ throw new Error('Provide menuId or menuLabel/menuPath for page extension workflow, not both.');
11
+ }
12
+ if (type !== 'page' && (opts.menuId || opts.menuLabel || opts.menuPath)) {
13
+ throw new Error('Menu fields are only valid for page extensions.');
14
+ }
15
+ const validation = await validateExtensionCode(apiUrl, opts.code, opts.name);
16
+ const existingExtension = await findRecord(apiUrl, 'enfyra_extension', { name: { _eq: opts.name } }, 'id,_id,name,type,menu.id,description,isEnabled,version,code');
17
+ let menu = null;
18
+ if (type === 'page' && opts.menuId) {
19
+ menu = await findRecord(apiUrl, 'enfyra_menu', { id: { _eq: opts.menuId } }, 'id,_id,label,path,type,order,isEnabled');
20
+ if (!menu)
21
+ throw new Error(`Menu not found: ${opts.menuId}`);
22
+ }
23
+ else if (type === 'page' && (opts.menuPath || opts.menuLabel)) {
24
+ const normalizedPath = opts.menuPath ? normalizeRestPath(opts.menuPath) : undefined;
25
+ menu = normalizedPath
26
+ ? await findRecord(apiUrl, 'enfyra_menu', { path: { _eq: normalizedPath } }, 'id,_id,label,path,type,order,isEnabled')
27
+ : await findRecord(apiUrl, 'enfyra_menu', { label: { _eq: opts.menuLabel } }, 'id,_id,label,path,type,order,isEnabled');
28
+ }
29
+ const menuId = opts.menuId || getId(menu);
30
+ const steps = [];
31
+ steps.push(step('completed', 'validate_extension', 'Validate extension code', { validation }));
32
+ if (type === 'page') {
33
+ if (menuId) {
34
+ const menuNeedsUpdate = Boolean(menu && ((opts.menuLabel !== undefined && menu.label !== opts.menuLabel)
35
+ || (opts.menuPath !== undefined && menu.path !== normalizeRestPath(opts.menuPath))
36
+ || (opts.menuType !== undefined && menu.type !== opts.menuType)
37
+ || (opts.menuOrder !== undefined && Number(menu.order || 0) !== Number(opts.menuOrder))
38
+ || (opts.menuIsEnabled !== undefined && Boolean(menu.isEnabled) !== Boolean(opts.menuIsEnabled))));
39
+ steps.push(step(menuNeedsUpdate ? 'pending' : 'completed', 'ensure_menu', 'Ensure page menu', {
40
+ menuId,
41
+ menu: menu ? { id: getId(menu), label: menu.label, path: menu.path } : { id: menuId },
42
+ }));
43
+ }
44
+ else if (opts.menuLabel) {
45
+ steps.push(step('pending', 'ensure_menu', 'Create page menu', {
46
+ reason: 'No existing menu matched; ensure_menu will create it.',
47
+ }));
48
+ }
49
+ else {
50
+ steps.push(step('blocked', 'ensure_menu', 'Create or select page menu', {
51
+ reason: 'Page extensions require menuId or menuLabel. Provide menuId for an existing menu or menuLabel/menuPath to create/update one.',
52
+ }));
53
+ }
54
+ }
55
+ const effectiveMenuId = type === 'page' ? menuId : undefined;
56
+ const saveStatus = steps.some((item) => ['blocked', 'waiting'].includes(item.status))
57
+ ? 'waiting'
58
+ : extensionMatches(existingExtension, { ...opts, type }, effectiveMenuId)
59
+ ? 'completed'
60
+ : 'pending';
61
+ steps.push(step(saveStatus, 'save_extension', `Ensure ${type} extension`, {
62
+ extensionId: getId(existingExtension),
63
+ currentType: existingExtension?.type || null,
64
+ desiredType: type,
65
+ menuId: effectiveMenuId || null,
66
+ reason: saveStatus === 'waiting' ? 'Menu must exist before saving page extension.' : undefined,
67
+ }));
68
+ const firstRunnable = steps.find((item) => item.status === 'pending') || null;
69
+ const blocked = steps.find((item) => item.status === 'blocked') || null;
70
+ return {
71
+ extension: {
72
+ name: opts.name,
73
+ type,
74
+ id: getId(existingExtension),
75
+ menuId: effectiveMenuId || null,
76
+ },
77
+ validation,
78
+ existingExtension: existingExtension ? {
79
+ id: getId(existingExtension),
80
+ name: existingExtension.name,
81
+ type: existingExtension.type,
82
+ menuId: refId(existingExtension.menu) || null,
83
+ } : null,
84
+ menu: menu ? { id: getId(menu), label: menu.label, path: menu.path } : null,
85
+ steps,
86
+ firstRunnable,
87
+ blocked,
88
+ nextSteps: blocked
89
+ ? [{ tool: 'extension_workflow', input: { name: opts.name, type }, reason: blocked.reason }]
90
+ : firstRunnable
91
+ ? [{
92
+ tool: 'extension_workflow',
93
+ input: { name: opts.name, type, apply: true, stepId: firstRunnable.id },
94
+ stepId: firstRunnable.id,
95
+ requiresKnowledgeAck: 'globalRulesAckKey and extensionAckKey from get_enfyra_required_knowledge',
96
+ }]
97
+ : [],
98
+ };
99
+ }
100
+ async function applyExtensionWorkflowStep(apiUrl, state, opts, stepId) {
101
+ const selectedStep = stepId
102
+ ? state.steps.find((item) => item.id === stepId)
103
+ : state.firstRunnable;
104
+ if (!selectedStep)
105
+ return { action: 'noop', reason: 'No runnable step remains.' };
106
+ if (selectedStep.status !== 'pending') {
107
+ throw new Error(`Step "${selectedStep.id}" is ${selectedStep.status}, not pending.`);
108
+ }
109
+ const type = opts.type || 'page';
110
+ if (selectedStep.id === 'ensure_menu') {
111
+ if (type !== 'page')
112
+ throw new Error('ensure_menu step is only valid for page extensions.');
113
+ if (!opts.menuLabel && !opts.menuId)
114
+ throw new Error('menuLabel or menuId is required for ensure_menu.');
115
+ return {
116
+ action: 'menu_ensured',
117
+ menu: await ensureMenu(apiUrl, {
118
+ label: opts.menuLabel || state.menu?.label || opts.name,
119
+ path: opts.menuPath || state.menu?.path,
120
+ icon: opts.menuIcon,
121
+ type: opts.menuType,
122
+ order: opts.menuOrder,
123
+ permission: opts.menuPermission,
124
+ description: opts.menuDescription,
125
+ isEnabled: opts.menuIsEnabled,
126
+ globalRulesAckKey: opts.globalRulesAckKey,
127
+ }),
128
+ };
129
+ }
130
+ if (selectedStep.id === 'save_extension') {
131
+ let menuId = opts.menuId || state.extension.menuId;
132
+ if (type === 'page' && !menuId) {
133
+ const freshState = await resolveExtensionWorkflowState(apiUrl, opts);
134
+ menuId = freshState.extension.menuId;
135
+ }
136
+ if (type === 'page' && !menuId)
137
+ throw new Error('Page extension menu is missing. Apply ensure_menu first.');
138
+ return {
139
+ action: `${type}_extension_ensured`,
140
+ extension: await ensureExtension(apiUrl, {
141
+ name: opts.name,
142
+ type,
143
+ code: opts.code,
144
+ menuId,
145
+ description: opts.description,
146
+ isEnabled: opts.isEnabled,
147
+ version: opts.version,
148
+ globalRulesAckKey: opts.globalRulesAckKey,
149
+ extensionKnowledgeAckKey: opts.extensionKnowledgeAckKey,
150
+ }),
151
+ };
152
+ }
153
+ throw new Error(`Unsupported extension workflow step: ${selectedStep.id}`);
154
+ }
155
+ export async function runExtensionWorkflow(apiUrl, opts) {
156
+ let state = await resolveExtensionWorkflowState(apiUrl, opts);
157
+ const operations = [];
158
+ if (opts.apply || opts.applyAll) {
159
+ assertGlobalRulesAck(opts.globalRulesAckKey);
160
+ assertExtensionKnowledgeAck(opts.extensionKnowledgeAckKey);
161
+ const maxSteps = opts.applyAll ? 5 : 1;
162
+ for (let i = 0; i < maxSteps; i += 1) {
163
+ if (state.blocked || !state.firstRunnable)
164
+ break;
165
+ operations.push(await applyExtensionWorkflowStep(apiUrl, state, opts, opts.stepId));
166
+ if (!opts.applyAll)
167
+ break;
168
+ state = await resolveExtensionWorkflowState(apiUrl, opts);
169
+ }
170
+ }
171
+ const latestState = operations.length ? await resolveExtensionWorkflowState(apiUrl, opts) : state;
172
+ return {
173
+ action: operations.length ? 'extension_workflow_advanced' : 'extension_workflow_planned',
174
+ extension: latestState.extension,
175
+ validation: latestState.validation,
176
+ menu: latestState.menu,
177
+ existingExtension: latestState.existingExtension,
178
+ steps: latestState.steps,
179
+ operations,
180
+ complete: latestState.steps.every((item) => ['completed', 'skipped'].includes(item.status)),
181
+ nextSteps: latestState.nextSteps,
182
+ guidance: [
183
+ 'Call get_extension_theme_contract before generating or reviewing extension UI.',
184
+ 'For high-contract UI/runtime code, call build_extension_ui after extension acknowledgement before patching raw Vue: drawer, modal, page shell, permission gate, empty state, resource list, form editor, widget, menu notification, account panel item, tabs, upload modal, api usage, notify, runtime review, theme classes, theme review, or full review.',
185
+ 'Use build_extension_ui kind=api_usage, notify, theme_classes, runtime_review, theme_review, or review instead of hand-writing those contracts from memory.',
186
+ 'Extension validation rejects common field controls without class="w-full" unless intentionally marked data-compact or data-inline.',
187
+ 'PermissionGate renders the permitted slot directly and is UX-only; backend permissions and owner checks remain authoritative.',
188
+ 'For menu/account-panel notifications, use counts only when the signal source already owns an exact count; otherwise use a dot/chip for new attention.',
189
+ 'Do not fetch destination domain lists solely to decorate the shell; destination pages own domain fetching after click.',
190
+ 'Unrestricted menu permission is null, not {}. Empty permission objects are normalized to null by ensure_menu.',
191
+ ],
192
+ };
193
+ }
194
+ //# sourceMappingURL=platform-extension-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-extension-workflow.js","sourceRoot":"","sources":["../../src/lib/platform-extension-workflow.ts"],"names":[],"mappings":"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"}