@creezio/mcp-facade 0.22.0

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 (174) hide show
  1. package/README.md +420 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/admin/adapters.d.ts +10 -0
  4. package/dist/admin/adapters.d.ts.map +1 -0
  5. package/dist/admin/adapters.js +21 -0
  6. package/dist/admin/adapters.js.map +1 -0
  7. package/dist/admin/http-routes.d.ts +11 -0
  8. package/dist/admin/http-routes.d.ts.map +1 -0
  9. package/dist/admin/http-routes.js +66 -0
  10. package/dist/admin/http-routes.js.map +1 -0
  11. package/dist/admin/index.d.ts +12 -0
  12. package/dist/admin/index.d.ts.map +1 -0
  13. package/dist/admin/index.js +8 -0
  14. package/dist/admin/index.js.map +1 -0
  15. package/dist/admin/mcp-admin.d.ts +165 -0
  16. package/dist/admin/mcp-admin.d.ts.map +1 -0
  17. package/dist/admin/mcp-admin.js +419 -0
  18. package/dist/admin/mcp-admin.js.map +1 -0
  19. package/dist/admin/tool-policy-guard.d.ts +106 -0
  20. package/dist/admin/tool-policy-guard.d.ts.map +1 -0
  21. package/dist/admin/tool-policy-guard.js +187 -0
  22. package/dist/admin/tool-policy-guard.js.map +1 -0
  23. package/dist/admin/types.d.ts +62 -0
  24. package/dist/admin/types.d.ts.map +1 -0
  25. package/dist/admin/types.js +6 -0
  26. package/dist/admin/types.js.map +1 -0
  27. package/dist/brand-facade.d.ts +41 -0
  28. package/dist/brand-facade.d.ts.map +1 -0
  29. package/dist/brand-facade.js +67 -0
  30. package/dist/brand-facade.js.map +1 -0
  31. package/dist/core-tools.d.ts +22 -0
  32. package/dist/core-tools.d.ts.map +1 -0
  33. package/dist/core-tools.js +93 -0
  34. package/dist/core-tools.js.map +1 -0
  35. package/dist/dyn-import.d.ts +13 -0
  36. package/dist/dyn-import.d.ts.map +1 -0
  37. package/dist/dyn-import.js +2 -0
  38. package/dist/dyn-import.js.map +1 -0
  39. package/dist/facade.d.ts +40 -0
  40. package/dist/facade.d.ts.map +1 -0
  41. package/dist/facade.js +334 -0
  42. package/dist/facade.js.map +1 -0
  43. package/dist/hono-bind.d.ts +48 -0
  44. package/dist/hono-bind.d.ts.map +1 -0
  45. package/dist/hono-bind.js +70 -0
  46. package/dist/hono-bind.js.map +1 -0
  47. package/dist/hono-proxy.d.ts +63 -0
  48. package/dist/hono-proxy.d.ts.map +1 -0
  49. package/dist/hono-proxy.js +185 -0
  50. package/dist/hono-proxy.js.map +1 -0
  51. package/dist/index.d.ts +32 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/jwt.d.ts +20 -0
  56. package/dist/jwt.d.ts.map +1 -0
  57. package/dist/jwt.js +84 -0
  58. package/dist/jwt.js.map +1 -0
  59. package/dist/module-ops-tools.d.ts +43 -0
  60. package/dist/module-ops-tools.d.ts.map +1 -0
  61. package/dist/module-ops-tools.js +301 -0
  62. package/dist/module-ops-tools.js.map +1 -0
  63. package/dist/namespace.d.ts +23 -0
  64. package/dist/namespace.d.ts.map +1 -0
  65. package/dist/namespace.js +51 -0
  66. package/dist/namespace.js.map +1 -0
  67. package/dist/oauth/cors-policy.d.ts +3 -0
  68. package/dist/oauth/cors-policy.d.ts.map +1 -0
  69. package/dist/oauth/cors-policy.js +25 -0
  70. package/dist/oauth/cors-policy.js.map +1 -0
  71. package/dist/oauth/hono-app.d.ts +18 -0
  72. package/dist/oauth/hono-app.d.ts.map +1 -0
  73. package/dist/oauth/hono-app.js +175 -0
  74. package/dist/oauth/hono-app.js.map +1 -0
  75. package/dist/oauth/index.d.ts +9 -0
  76. package/dist/oauth/index.d.ts.map +1 -0
  77. package/dist/oauth/index.js +6 -0
  78. package/dist/oauth/index.js.map +1 -0
  79. package/dist/oauth/rate-limit.d.ts +11 -0
  80. package/dist/oauth/rate-limit.d.ts.map +1 -0
  81. package/dist/oauth/rate-limit.js +32 -0
  82. package/dist/oauth/rate-limit.js.map +1 -0
  83. package/dist/oauth/routes.d.ts +8 -0
  84. package/dist/oauth/routes.d.ts.map +1 -0
  85. package/dist/oauth/routes.js +671 -0
  86. package/dist/oauth/routes.js.map +1 -0
  87. package/dist/oauth/store.d.ts +113 -0
  88. package/dist/oauth/store.d.ts.map +1 -0
  89. package/dist/oauth/store.js +390 -0
  90. package/dist/oauth/store.js.map +1 -0
  91. package/dist/oauth/types.d.ts +97 -0
  92. package/dist/oauth/types.d.ts.map +1 -0
  93. package/dist/oauth/types.js +5 -0
  94. package/dist/oauth/types.js.map +1 -0
  95. package/dist/open-external-tab-host-tools.d.ts +67 -0
  96. package/dist/open-external-tab-host-tools.d.ts.map +1 -0
  97. package/dist/open-external-tab-host-tools.js +92 -0
  98. package/dist/open-external-tab-host-tools.js.map +1 -0
  99. package/dist/policy.d.ts +59 -0
  100. package/dist/policy.d.ts.map +1 -0
  101. package/dist/policy.js +88 -0
  102. package/dist/policy.js.map +1 -0
  103. package/dist/runtime.d.ts +22 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +20 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/types.d.ts +163 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist-cjs/admin/adapters.js +27 -0
  112. package/dist-cjs/admin/adapters.js.map +1 -0
  113. package/dist-cjs/admin/http-routes.js +69 -0
  114. package/dist-cjs/admin/http-routes.js.map +1 -0
  115. package/dist-cjs/admin/index.js +40 -0
  116. package/dist-cjs/admin/index.js.map +1 -0
  117. package/dist-cjs/admin/mcp-admin.js +441 -0
  118. package/dist-cjs/admin/mcp-admin.js.map +1 -0
  119. package/dist-cjs/admin/tool-policy-guard.js +193 -0
  120. package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
  121. package/dist-cjs/admin/types.js +7 -0
  122. package/dist-cjs/admin/types.js.map +1 -0
  123. package/dist-cjs/brand-facade.js +70 -0
  124. package/dist-cjs/brand-facade.js.map +1 -0
  125. package/dist-cjs/core-tools.js +97 -0
  126. package/dist-cjs/core-tools.js.map +1 -0
  127. package/dist-cjs/dyn-import.js +5 -0
  128. package/dist-cjs/dyn-import.js.map +1 -0
  129. package/dist-cjs/facade.js +337 -0
  130. package/dist-cjs/facade.js.map +1 -0
  131. package/dist-cjs/hono-bind.js +74 -0
  132. package/dist-cjs/hono-bind.js.map +1 -0
  133. package/dist-cjs/hono-proxy.js +189 -0
  134. package/dist-cjs/hono-proxy.js.map +1 -0
  135. package/dist-cjs/index.js +120 -0
  136. package/dist-cjs/index.js.map +1 -0
  137. package/dist-cjs/jwt.js +91 -0
  138. package/dist-cjs/jwt.js.map +1 -0
  139. package/dist-cjs/module-ops-tools.js +308 -0
  140. package/dist-cjs/module-ops-tools.js.map +1 -0
  141. package/dist-cjs/namespace.js +56 -0
  142. package/dist-cjs/namespace.js.map +1 -0
  143. package/dist-cjs/oauth/cors-policy.js +29 -0
  144. package/dist-cjs/oauth/cors-policy.js.map +1 -0
  145. package/dist-cjs/oauth/hono-app.js +178 -0
  146. package/dist-cjs/oauth/hono-app.js.map +1 -0
  147. package/dist-cjs/oauth/index.js +48 -0
  148. package/dist-cjs/oauth/index.js.map +1 -0
  149. package/dist-cjs/oauth/rate-limit.js +37 -0
  150. package/dist-cjs/oauth/rate-limit.js.map +1 -0
  151. package/dist-cjs/oauth/routes.js +674 -0
  152. package/dist-cjs/oauth/routes.js.map +1 -0
  153. package/dist-cjs/oauth/store.js +418 -0
  154. package/dist-cjs/oauth/store.js.map +1 -0
  155. package/dist-cjs/oauth/types.js +6 -0
  156. package/dist-cjs/oauth/types.js.map +1 -0
  157. package/dist-cjs/open-external-tab-host-tools.js +96 -0
  158. package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
  159. package/dist-cjs/package.json +3 -0
  160. package/dist-cjs/policy.js +93 -0
  161. package/dist-cjs/policy.js.map +1 -0
  162. package/dist-cjs/runtime.js +24 -0
  163. package/dist-cjs/runtime.js.map +1 -0
  164. package/dist-cjs/types.js +3 -0
  165. package/dist-cjs/types.js.map +1 -0
  166. package/package.json +92 -0
  167. package/ui/index.ts +5 -0
  168. package/ui/mcp-admin-client.tsx +270 -0
  169. package/ui/primitives/badge.tsx +37 -0
  170. package/ui/primitives/button.tsx +44 -0
  171. package/ui/primitives/card.tsx +44 -0
  172. package/ui/primitives/cn.ts +6 -0
  173. package/ui/primitives/input.tsx +19 -0
  174. package/ui/primitives/tabs.tsx +51 -0
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * Garde d'enforcement réutilisable des policies MCP admin (M1).
4
+ *
5
+ * Trois surfaces, pour trois points d'entrée :
6
+ * - `checkToolPolicy` : décision brute (enabled/rôles/scopes) —
7
+ * utilisable par n'importe quel enforcement
8
+ * marque (ex. TF3 `registerMcpTool`) ;
9
+ * - `createToolPolicyAuthorize`: `McpAuthorizeToolCallFn` composable avec
10
+ * `composeToolPolicies` / `denyCrossLayerToolCall`
11
+ * pour la façade (`createBrandMcpFacade`) ;
12
+ * - `registerGuardedMcpTool` : wrapper serveur MCP SDK — annotations +
13
+ * policy + audit + scopes marque injectés.
14
+ *
15
+ * Aucune donnée marque : la résolution du rôle (`resolveRole`) et la logique
16
+ * scopes marque (`scopeAllows`) sont injectées. Les policies vivent dans la
17
+ * table `mcp_tool_policies` (adapters `configureMcpAdmin`) — mêmes lignes que
18
+ * la page /admin/mcp.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.getStoredMcpToolPolicy = getStoredMcpToolPolicy;
22
+ exports.checkToolPolicy = checkToolPolicy;
23
+ exports.createToolPolicyAuthorize = createToolPolicyAuthorize;
24
+ exports.registerGuardedMcpTool = registerGuardedMcpTool;
25
+ const adapters_js_1 = require("./adapters.js");
26
+ const mcp_admin_js_1 = require("./mcp-admin.js");
27
+ function splitList(raw) {
28
+ return String(raw || "")
29
+ .split(/[\s,]+/)
30
+ .filter(Boolean);
31
+ }
32
+ function grantedScopeSet(scopes) {
33
+ if (Array.isArray(scopes))
34
+ return new Set(scopes.map(String).filter(Boolean));
35
+ return new Set(splitList(String(scopes)));
36
+ }
37
+ /** Policy stockée, lue directement (indépendante du registre tools marque). */
38
+ function getStoredMcpToolPolicy(name) {
39
+ (0, mcp_admin_js_1.ensureMcpAdminSchema)();
40
+ const row = (0, adapters_js_1.getMcpAdminAdapters)()
41
+ .getDb()
42
+ .prepare(`SELECT enabled, allowed_roles, allowed_scopes
43
+ FROM mcp_tool_policies WHERE tool_name = ?`)
44
+ .get(name);
45
+ if (!row)
46
+ return null;
47
+ return {
48
+ enabled: row.enabled !== 0,
49
+ allowedRoles: splitList(row.allowed_roles),
50
+ allowedScopes: splitList(row.allowed_scopes),
51
+ };
52
+ }
53
+ /**
54
+ * Décision d'enforcement d'un tool pour un acteur.
55
+ * Retourne la raison du deny, ou `null` si autorisé.
56
+ *
57
+ * Sémantique (parité TempoFlow) :
58
+ * - policy absente ou `enabled=false` → "tool_disabled" ;
59
+ * - rôle (resolveRole(userId) sinon defaultRole) hors allowedRoles → "role_forbidden" ;
60
+ * - scopes fournis, aucun full-access ni allowedScope accordé → "policy_scope_forbidden"
61
+ * (allowedScopes vide = aucune restriction de scope configurée).
62
+ */
63
+ function checkToolPolicy(name, actor, opts = {}) {
64
+ const getPolicy = opts.getPolicy || getStoredMcpToolPolicy;
65
+ const policy = getPolicy(name);
66
+ if (!policy?.enabled)
67
+ return "tool_disabled";
68
+ const role = (actor.userId ? opts.resolveRole?.(actor.userId) : null) ||
69
+ opts.defaultRole ||
70
+ "collaborator";
71
+ if (!policy.allowedRoles.includes(role))
72
+ return "role_forbidden";
73
+ if (actor.scopes != null && policy.allowedScopes.length > 0) {
74
+ const granted = grantedScopeSet(actor.scopes);
75
+ const fullAccess = opts.fullAccessScopes || ["crm", "full"];
76
+ if (!fullAccess.some((scope) => granted.has(scope)) &&
77
+ !policy.allowedScopes.some((scope) => granted.has(scope))) {
78
+ return "policy_scope_forbidden";
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+ function defaultResolveActor(ctx) {
84
+ const claims = ctx.claims || {};
85
+ const claimUserId = typeof claims.userId === "string" && claims.userId ? claims.userId : null;
86
+ const subject = ctx.subject && ctx.subject !== "anonymous" && ctx.subject !== "opaque-token"
87
+ ? ctx.subject
88
+ : null;
89
+ let scopes = null;
90
+ if (typeof claims.scope === "string")
91
+ scopes = claims.scope;
92
+ else if (Array.isArray(claims.scopes))
93
+ scopes = claims.scopes.map(String);
94
+ else if (typeof claims.scopes === "string")
95
+ scopes = claims.scopes;
96
+ return { userId: claimUserId ?? subject, scopes };
97
+ }
98
+ /**
99
+ * `McpAuthorizeToolCallFn` (composable via `composeToolPolicies`) qui applique
100
+ * les policies admin. Opt-in non cassant : si aucun `getPolicy` custom n'est
101
+ * fourni ET que `configureMcpAdmin` n'a pas été câblé, la garde autorise tout
102
+ * (comportement identique à une façade sans admin MCP).
103
+ */
104
+ function createToolPolicyAuthorize(opts = {}) {
105
+ const resolveActor = opts.resolveActor || defaultResolveActor;
106
+ const audit = opts.audit || mcp_admin_js_1.auditMcpAdmin;
107
+ return (ctx) => {
108
+ if (!opts.getPolicy && !(0, adapters_js_1.isMcpAdminConfigured)()) {
109
+ return { allow: true };
110
+ }
111
+ const actor = resolveActor(ctx);
112
+ // Les policies sont stockées sous le nom canonique OU le nom public
113
+ // (alias legacy) selon la surface seedée — on tente les deux.
114
+ const getPolicy = opts.getPolicy || getStoredMcpToolPolicy;
115
+ let denial = checkToolPolicy(ctx.canonicalName, actor, opts);
116
+ if (denial === "tool_disabled" &&
117
+ ctx.name !== ctx.canonicalName &&
118
+ getPolicy(ctx.name)) {
119
+ denial = checkToolPolicy(ctx.name, actor, opts);
120
+ }
121
+ if (denial) {
122
+ try {
123
+ audit("tool_call", {
124
+ actor: actor.userId || null,
125
+ toolName: ctx.name,
126
+ outcome: "denied",
127
+ detail: { reason: denial },
128
+ });
129
+ }
130
+ catch {
131
+ /* audit best-effort côté façade */
132
+ }
133
+ return { allow: false, reason: denial };
134
+ }
135
+ return { allow: true };
136
+ };
137
+ }
138
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
+ function errorResult(payload) {
140
+ return {
141
+ content: [{ type: "text", text: JSON.stringify(payload) }],
142
+ isError: true,
143
+ };
144
+ }
145
+ /**
146
+ * Enregistre un tool sur le serveur MCP SDK avec annotations + policy admin
147
+ * + audit + vérification scopes marque — SoT de l'enforcement TF-like
148
+ * (`registerMcpTool` des marques délègue ici, le registre métier reste marque).
149
+ */
150
+ function registerGuardedMcpTool(server, ctx, def, config,
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ handler, opts = {}) {
153
+ const auditFn = opts.audit || mcp_admin_js_1.auditMcpAdmin;
154
+ server.registerTool(def.name, {
155
+ ...config,
156
+ ...(def.annotations ? { annotations: def.annotations } : {}),
157
+ },
158
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
159
+ async (input) => {
160
+ const audit = (outcome, detail) => auditFn("tool_call", {
161
+ actor: ctx.userId ?? null,
162
+ clientId: ctx.clientId ?? null,
163
+ toolName: def.name,
164
+ outcome,
165
+ detail,
166
+ });
167
+ const denial = checkToolPolicy(def.name, { userId: ctx.userId, scopes: ctx.scopes ?? "" }, opts);
168
+ if (denial) {
169
+ audit("denied", { reason: denial });
170
+ return errorResult({ error: denial, tool: def.name });
171
+ }
172
+ if (opts.scopeAllows && !opts.scopeAllows(ctx, def)) {
173
+ audit("denied", { reason: "insufficient_scope" });
174
+ return errorResult({
175
+ error: "insufficient_scope",
176
+ tool: def.name,
177
+ required_scope: def.requiredScope,
178
+ });
179
+ }
180
+ try {
181
+ const result = await handler(input);
182
+ audit(result?.isError ? "error" : "ok");
183
+ return result;
184
+ }
185
+ catch (error) {
186
+ audit("error", {
187
+ message: error instanceof Error ? error.message.slice(0, 300) : "Erreur tool",
188
+ });
189
+ throw error;
190
+ }
191
+ });
192
+ }
193
+ //# sourceMappingURL=tool-policy-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy-guard.js","sourceRoot":"","sources":["../../src/admin/tool-policy-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Types admin MCP (port TempoFlow — N6).
4
+ * Le registre métier des tools reste injecté par la marque.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBrandMcpFacade = createBrandMcpFacade;
4
+ const facade_js_1 = require("./facade.js");
5
+ const policy_js_1 = require("./policy.js");
6
+ const adapters_js_1 = require("./admin/adapters.js");
7
+ const mcp_admin_js_1 = require("./admin/mcp-admin.js");
8
+ const tool_policy_guard_js_1 = require("./admin/tool-policy-guard.js");
9
+ const module_ops_tools_js_1 = require("./module-ops-tools.js");
10
+ /**
11
+ * Une seule factory listTools/callTool pour Electron / Hono / assistant.
12
+ */
13
+ function createBrandMcpFacade(options) {
14
+ const { api, aliases, discoverModuleTools, discoverPluginTools, extraAliases, publicSurface = "legacy-preferred", toolPolicyGuard, ...rest } = options;
15
+ let facade;
16
+ let authorizeToolCall = rest.authorizeToolCall;
17
+ if (toolPolicyGuard) {
18
+ const guardOpts = typeof toolPolicyGuard === "object" ? toolPolicyGuard : {};
19
+ const policyAuthorize = (0, tool_policy_guard_js_1.createToolPolicyAuthorize)(guardOpts);
20
+ // Seed permissif des tools exposés par la façade (INSERT OR IGNORE) —
21
+ // lazy à la première décision : la DB admin n'est pas forcément prête
22
+ // à la création de la façade.
23
+ let policySeeded = false;
24
+ const ensurePolicySeed = async () => {
25
+ if (policySeeded || guardOpts.getPolicy || !(0, adapters_js_1.isMcpAdminConfigured)()) {
26
+ return;
27
+ }
28
+ policySeeded = true;
29
+ try {
30
+ const { tools } = await facade.listTools();
31
+ (0, mcp_admin_js_1.seedMcpToolPolicies)(tools.map((tool) => ({
32
+ name: tool.name,
33
+ defaultRoles: tool.defaultRoles,
34
+ requiredScope: tool.requiredScope,
35
+ mcpPublishDefault: tool.mcpPublishDefault,
36
+ })));
37
+ }
38
+ catch {
39
+ policySeeded = false; // DB pas prête — retentera au prochain call
40
+ }
41
+ };
42
+ const guardedAuthorize = async (ctx) => {
43
+ await ensurePolicySeed();
44
+ return policyAuthorize(ctx);
45
+ };
46
+ authorizeToolCall = authorizeToolCall
47
+ ? (0, policy_js_1.composeToolPolicies)(authorizeToolCall, guardedAuthorize)
48
+ : guardedAuthorize;
49
+ }
50
+ facade = (0, facade_js_1.createMcpFacade)({
51
+ allowUnauthenticated: true,
52
+ enforceNamespaces: true,
53
+ publicSurface,
54
+ // defaultCrossLayerDeny=true : la façade compose elle-même
55
+ // denyCrossLayerToolCall AVANT authorizeToolCall (premier deny gagne).
56
+ defaultCrossLayerDeny: true,
57
+ listApiMounts: () => api.listMounts(),
58
+ ...rest,
59
+ authorizeToolCall,
60
+ aliases: { ...aliases, ...(extraAliases || {}) },
61
+ discoverToolsBySpace: async () => ({
62
+ module: (0, module_ops_tools_js_1.discoverModuleToolsFromKernel)(api, discoverModuleTools ? await discoverModuleTools(api) : []),
63
+ plugin: discoverPluginTools
64
+ ? await discoverPluginTools(api)
65
+ : [],
66
+ }),
67
+ });
68
+ return facade;
69
+ }
70
+ //# sourceMappingURL=brand-facade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-facade.js","sourceRoot":"","sources":["../src/brand-facade.ts"],"names":[],"mappings":";;AA4DA,oDA4EC;AAjID,2CAA8D;AAC9D,2CAAkD;AAClD,qDAA2D;AAC3D,uDAA2D;AAC3D,uEAGsC;AACtC,+DAAsE;AA0CtE;;GAEG;AACH,SAAgB,oBAAoB,CAClC,OAAoC;IAEpC,MAAM,EACJ,GAAG,EACH,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,aAAa,GAAG,kBAAkB,EAClC,eAAe,EACf,GAAG,IAAI,EACR,GAAG,OAAO,CAAC;IAEZ,IAAI,MAAiB,CAAC;IAEtB,IAAI,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAC/C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,SAAS,GACb,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAG,IAAA,gDAAyB,EAAC,SAAS,CAAC,CAAC;QAC7D,sEAAsE;QACtE,sEAAsE;QACtE,8BAA8B;QAC9B,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAClC,IAAI,YAAY,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAA,kCAAoB,GAAE,EAAE,CAAC;gBACnE,OAAO;YACT,CAAC;YACD,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3C,IAAA,kCAAmB,EACjB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;iBAC1C,CAAC,CAAC,CACJ,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY,GAAG,KAAK,CAAC,CAAC,4CAA4C;YACpE,CAAC;QACH,CAAC,CAAC;QACF,MAAM,gBAAgB,GAA2B,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7D,MAAM,gBAAgB,EAAE,CAAC;YACzB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC;QACF,iBAAiB,GAAG,iBAAiB;YACnC,CAAC,CAAC,IAAA,+BAAmB,EAAC,iBAAiB,EAAE,gBAAgB,CAAC;YAC1D,CAAC,CAAC,gBAAgB,CAAC;IACvB,CAAC;IAED,MAAM,GAAG,IAAA,2BAAe,EAAC;QACvB,oBAAoB,EAAE,IAAI;QAC1B,iBAAiB,EAAE,IAAI;QACvB,aAAa;QACb,2DAA2D;QAC3D,uEAAuE;QACvE,qBAAqB,EAAE,IAAI;QAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE;QACrC,GAAG,IAAI;QACP,iBAAiB;QACjB,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE;QAChD,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjC,MAAM,EAAE,IAAA,mDAA6B,EACnC,GAAG,EACH,mBAAmB,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAC1D;YACD,MAAM,EAAE,mBAAmB;gBACzB,CAAC,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC;gBAChC,CAAC,CAAC,EAAE;SACP,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Tools MCP cœur (`creezio.*`) — SoT kit (H1/H4 → M9).
4
+ *
5
+ * Les marques importent les noms / factories ; handlers Hono peuvent
6
+ * rester brand-specific tant que les noms restent alignés.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CREEZIO_CORE_MCP_TOOL_NAMES = void 0;
10
+ exports.createCoreMcpTools = createCoreMcpTools;
11
+ const platform_core_1 = require("@creezio/platform-core");
12
+ const api_kernel_1 = require("@creezio/api-kernel");
13
+ exports.CREEZIO_CORE_MCP_TOOL_NAMES = [
14
+ "creezio.health",
15
+ "creezio.architecture",
16
+ "creezio.admin.list_mounts",
17
+ "creezio.admin.list_tools_by_space",
18
+ "creezio.admin.list_aliases",
19
+ ];
20
+ function emptyBySpace() {
21
+ return { core: [], module: [], plugin: [] };
22
+ }
23
+ /** Factory tools cœur — utilisée par `createMcpFacade`. */
24
+ function createCoreMcpTools(opts = {}) {
25
+ const architectureVersion = opts.architectureVersion ?? platform_core_1.ARCHITECTURE_VERSION;
26
+ return [
27
+ {
28
+ name: "creezio.health",
29
+ description: "Ping santé façade MCP / API cœur",
30
+ space: "core",
31
+ inputSchema: { type: "object", properties: {} },
32
+ handler: async () => ({
33
+ ok: true,
34
+ content: { ok: true, brandId: opts.brandId ?? null },
35
+ }),
36
+ },
37
+ {
38
+ name: "creezio.architecture",
39
+ description: "Version architecture + préfixe API unique",
40
+ space: "core",
41
+ inputSchema: { type: "object", properties: {} },
42
+ handler: async () => ({
43
+ ok: true,
44
+ content: {
45
+ architectureVersion,
46
+ apiPrefix: api_kernel_1.API_V1_PREFIX,
47
+ note: "Une seule façade MCP = MCP de l'app (proxy unifié H4)",
48
+ toolSpaces: ["core", "module", "plugin"],
49
+ publicSurfaceModes: [
50
+ "canonical",
51
+ "legacy-preferred",
52
+ "both",
53
+ ],
54
+ },
55
+ }),
56
+ },
57
+ {
58
+ name: "creezio.admin.list_mounts",
59
+ description: "Liste les montages API modules/plugins connus",
60
+ space: "core",
61
+ inputSchema: { type: "object", properties: {} },
62
+ handler: async () => ({
63
+ ok: true,
64
+ content: {
65
+ mounts: opts.listApiMounts ? opts.listApiMounts() : [],
66
+ },
67
+ }),
68
+ },
69
+ {
70
+ name: "creezio.admin.list_tools_by_space",
71
+ description: "Liste les tools MCP groupés par couche (core / module / plugin)",
72
+ space: "core",
73
+ inputSchema: { type: "object", properties: {} },
74
+ handler: async () => ({
75
+ ok: true,
76
+ content: {
77
+ bySpace: opts.listToolsBySpaceSync
78
+ ? opts.listToolsBySpaceSync()
79
+ : emptyBySpace(),
80
+ },
81
+ }),
82
+ },
83
+ {
84
+ name: "creezio.admin.list_aliases",
85
+ description: "Liste les aliases legacy → tools canoniques (anti double exposition)",
86
+ space: "core",
87
+ inputSchema: { type: "object", properties: {} },
88
+ handler: async () => ({
89
+ ok: true,
90
+ content: {
91
+ aliases: opts.listAliasesSync ? opts.listAliasesSync() : {},
92
+ },
93
+ }),
94
+ },
95
+ ];
96
+ }
97
+ //# sourceMappingURL=core-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tools.js","sourceRoot":"","sources":["../src/core-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dynImport = void 0;
4
+ exports.dynImport = new Function("specifier", "return import(specifier)");
5
+ //# sourceMappingURL=dyn-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dyn-import.js","sourceRoot":"","sources":["../src/dyn-import.ts"],"names":[],"mappings":";;;AAWa,QAAA,SAAS,GAAG,IAAI,QAAQ,CACnC,WAAW,EACX,0BAA0B,CACd,CAAC"}