@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.
- package/README.md +420 -0
- package/dist/.creezio-src-hash.json +4 -0
- package/dist/admin/adapters.d.ts +10 -0
- package/dist/admin/adapters.d.ts.map +1 -0
- package/dist/admin/adapters.js +21 -0
- package/dist/admin/adapters.js.map +1 -0
- package/dist/admin/http-routes.d.ts +11 -0
- package/dist/admin/http-routes.d.ts.map +1 -0
- package/dist/admin/http-routes.js +66 -0
- package/dist/admin/http-routes.js.map +1 -0
- package/dist/admin/index.d.ts +12 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +8 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/mcp-admin.d.ts +165 -0
- package/dist/admin/mcp-admin.d.ts.map +1 -0
- package/dist/admin/mcp-admin.js +419 -0
- package/dist/admin/mcp-admin.js.map +1 -0
- package/dist/admin/tool-policy-guard.d.ts +106 -0
- package/dist/admin/tool-policy-guard.d.ts.map +1 -0
- package/dist/admin/tool-policy-guard.js +187 -0
- package/dist/admin/tool-policy-guard.js.map +1 -0
- package/dist/admin/types.d.ts +62 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +6 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/brand-facade.d.ts +41 -0
- package/dist/brand-facade.d.ts.map +1 -0
- package/dist/brand-facade.js +67 -0
- package/dist/brand-facade.js.map +1 -0
- package/dist/core-tools.d.ts +22 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +93 -0
- package/dist/core-tools.js.map +1 -0
- package/dist/dyn-import.d.ts +13 -0
- package/dist/dyn-import.d.ts.map +1 -0
- package/dist/dyn-import.js +2 -0
- package/dist/dyn-import.js.map +1 -0
- package/dist/facade.d.ts +40 -0
- package/dist/facade.d.ts.map +1 -0
- package/dist/facade.js +334 -0
- package/dist/facade.js.map +1 -0
- package/dist/hono-bind.d.ts +48 -0
- package/dist/hono-bind.d.ts.map +1 -0
- package/dist/hono-bind.js +70 -0
- package/dist/hono-bind.js.map +1 -0
- package/dist/hono-proxy.d.ts +63 -0
- package/dist/hono-proxy.d.ts.map +1 -0
- package/dist/hono-proxy.js +185 -0
- package/dist/hono-proxy.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.d.ts +20 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +84 -0
- package/dist/jwt.js.map +1 -0
- package/dist/module-ops-tools.d.ts +43 -0
- package/dist/module-ops-tools.d.ts.map +1 -0
- package/dist/module-ops-tools.js +301 -0
- package/dist/module-ops-tools.js.map +1 -0
- package/dist/namespace.d.ts +23 -0
- package/dist/namespace.d.ts.map +1 -0
- package/dist/namespace.js +51 -0
- package/dist/namespace.js.map +1 -0
- package/dist/oauth/cors-policy.d.ts +3 -0
- package/dist/oauth/cors-policy.d.ts.map +1 -0
- package/dist/oauth/cors-policy.js +25 -0
- package/dist/oauth/cors-policy.js.map +1 -0
- package/dist/oauth/hono-app.d.ts +18 -0
- package/dist/oauth/hono-app.d.ts.map +1 -0
- package/dist/oauth/hono-app.js +175 -0
- package/dist/oauth/hono-app.js.map +1 -0
- package/dist/oauth/index.d.ts +9 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +6 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/rate-limit.d.ts +11 -0
- package/dist/oauth/rate-limit.d.ts.map +1 -0
- package/dist/oauth/rate-limit.js +32 -0
- package/dist/oauth/rate-limit.js.map +1 -0
- package/dist/oauth/routes.d.ts +8 -0
- package/dist/oauth/routes.d.ts.map +1 -0
- package/dist/oauth/routes.js +671 -0
- package/dist/oauth/routes.js.map +1 -0
- package/dist/oauth/store.d.ts +113 -0
- package/dist/oauth/store.d.ts.map +1 -0
- package/dist/oauth/store.js +390 -0
- package/dist/oauth/store.js.map +1 -0
- package/dist/oauth/types.d.ts +97 -0
- package/dist/oauth/types.d.ts.map +1 -0
- package/dist/oauth/types.js +5 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/open-external-tab-host-tools.d.ts +67 -0
- package/dist/open-external-tab-host-tools.d.ts.map +1 -0
- package/dist/open-external-tab-host-tools.js +92 -0
- package/dist/open-external-tab-host-tools.js.map +1 -0
- package/dist/policy.d.ts +59 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +88 -0
- package/dist/policy.js.map +1 -0
- package/dist/runtime.d.ts +22 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +20 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +163 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/admin/adapters.js +27 -0
- package/dist-cjs/admin/adapters.js.map +1 -0
- package/dist-cjs/admin/http-routes.js +69 -0
- package/dist-cjs/admin/http-routes.js.map +1 -0
- package/dist-cjs/admin/index.js +40 -0
- package/dist-cjs/admin/index.js.map +1 -0
- package/dist-cjs/admin/mcp-admin.js +441 -0
- package/dist-cjs/admin/mcp-admin.js.map +1 -0
- package/dist-cjs/admin/tool-policy-guard.js +193 -0
- package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
- package/dist-cjs/admin/types.js +7 -0
- package/dist-cjs/admin/types.js.map +1 -0
- package/dist-cjs/brand-facade.js +70 -0
- package/dist-cjs/brand-facade.js.map +1 -0
- package/dist-cjs/core-tools.js +97 -0
- package/dist-cjs/core-tools.js.map +1 -0
- package/dist-cjs/dyn-import.js +5 -0
- package/dist-cjs/dyn-import.js.map +1 -0
- package/dist-cjs/facade.js +337 -0
- package/dist-cjs/facade.js.map +1 -0
- package/dist-cjs/hono-bind.js +74 -0
- package/dist-cjs/hono-bind.js.map +1 -0
- package/dist-cjs/hono-proxy.js +189 -0
- package/dist-cjs/hono-proxy.js.map +1 -0
- package/dist-cjs/index.js +120 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/jwt.js +91 -0
- package/dist-cjs/jwt.js.map +1 -0
- package/dist-cjs/module-ops-tools.js +308 -0
- package/dist-cjs/module-ops-tools.js.map +1 -0
- package/dist-cjs/namespace.js +56 -0
- package/dist-cjs/namespace.js.map +1 -0
- package/dist-cjs/oauth/cors-policy.js +29 -0
- package/dist-cjs/oauth/cors-policy.js.map +1 -0
- package/dist-cjs/oauth/hono-app.js +178 -0
- package/dist-cjs/oauth/hono-app.js.map +1 -0
- package/dist-cjs/oauth/index.js +48 -0
- package/dist-cjs/oauth/index.js.map +1 -0
- package/dist-cjs/oauth/rate-limit.js +37 -0
- package/dist-cjs/oauth/rate-limit.js.map +1 -0
- package/dist-cjs/oauth/routes.js +674 -0
- package/dist-cjs/oauth/routes.js.map +1 -0
- package/dist-cjs/oauth/store.js +418 -0
- package/dist-cjs/oauth/store.js.map +1 -0
- package/dist-cjs/oauth/types.js +6 -0
- package/dist-cjs/oauth/types.js.map +1 -0
- package/dist-cjs/open-external-tab-host-tools.js +96 -0
- package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/policy.js +93 -0
- package/dist-cjs/policy.js.map +1 -0
- package/dist-cjs/runtime.js +24 -0
- package/dist-cjs/runtime.js.map +1 -0
- package/dist-cjs/types.js +3 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +92 -0
- package/ui/index.ts +5 -0
- package/ui/mcp-admin-client.tsx +270 -0
- package/ui/primitives/badge.tsx +37 -0
- package/ui/primitives/button.tsx +44 -0
- package/ui/primitives/card.tsx +44 -0
- package/ui/primitives/cn.ts +6 -0
- package/ui/primitives/input.tsx +19 -0
- 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 @@
|
|
|
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":";AAAA;;;;;GAKG;;;AA8BH,gDA6EC;AAzGD,0DAA8D;AAC9D,oDAAoD;AAGvC,QAAA,2BAA2B,GAAG;IACzC,gBAAgB;IAChB,sBAAsB;IACtB,2BAA2B;IAC3B,mCAAmC;IACnC,4BAA4B;CACpB,CAAC;AAaX,SAAS,YAAY;IACnB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,2DAA2D;AAC3D,SAAgB,kBAAkB,CAChC,OAAkC,EAAE;IAEpC,MAAM,mBAAmB,GACvB,IAAI,CAAC,mBAAmB,IAAI,oCAAoB,CAAC;IACnD,OAAO;QACL;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;aACrD,CAAC;SACH;QACD;YACE,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,2CAA2C;YACxD,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE;oBACP,mBAAmB;oBACnB,SAAS,EAAE,0BAAa;oBACxB,IAAI,EAAE,uDAAuD;oBAC7D,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBACxC,kBAAkB,EAAE;wBAClB,WAAW;wBACX,kBAAkB;wBAClB,MAAM;qBACP;iBACF;aACF,CAAC;SACH;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,+CAA+C;YAC5D,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE;oBACP,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;iBACvD;aACF,CAAC;SACH;QACD;YACE,IAAI,EAAE,mCAAmC;YACzC,WAAW,EACT,iEAAiE;YACnE,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE;oBACP,OAAO,EAAE,IAAI,CAAC,oBAAoB;wBAChC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE;wBAC7B,CAAC,CAAC,YAAY,EAAE;iBACnB;aACF,CAAC;SACH;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,WAAW,EACT,sEAAsE;YACxE,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE;oBACP,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC5D;aACF,CAAC;SACH;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|