@ratio-mcp/dev-server 1.2.0 → 1.4.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/dist/data/scope-webhook-map.d.ts +26 -0
- package/dist/data/scope-webhook-map.d.ts.map +1 -0
- package/dist/data/scope-webhook-map.js +117 -0
- package/dist/data/scope-webhook-map.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -13
- package/dist/index.js.map +1 -1
- package/dist/orchestrated-index.d.ts +4 -9
- package/dist/orchestrated-index.d.ts.map +1 -1
- package/dist/orchestrated-index.js +6 -14
- package/dist/orchestrated-index.js.map +1 -1
- package/dist/orchestrated-server.d.ts +14 -9
- package/dist/orchestrated-server.d.ts.map +1 -1
- package/dist/orchestrated-server.js +86 -48
- package/dist/orchestrated-server.js.map +1 -1
- package/dist/services/session-state.d.ts +50 -16
- package/dist/services/session-state.d.ts.map +1 -1
- package/dist/services/session-state.js +195 -140
- package/dist/services/session-state.js.map +1 -1
- package/dist/services/tool-guard.d.ts +29 -9
- package/dist/services/tool-guard.d.ts.map +1 -1
- package/dist/services/tool-guard.js +83 -60
- package/dist/services/tool-guard.js.map +1 -1
- package/dist/templates/backend/.env.example +3 -0
- package/dist/templates/backend/package.json +2 -1
- package/dist/templates/backend/src/app.module.ts +2 -0
- package/dist/templates/backend/src/oauth/oauth-callback.controller.ts +62 -0
- package/dist/templates/backend/src/oauth/oauth-callback.module.ts +10 -0
- package/dist/templates/backend/src/oauth/oauth-callback.service.ts +158 -0
- package/dist/templates/frontend/.env.example +1 -1
- package/dist/templates/frontend/README.md +16 -0
- package/dist/templates/frontend/eslint.config.js +29 -0
- package/dist/templates/frontend/index.html +4 -4
- package/dist/templates/frontend/jsconfig.json +22 -0
- package/dist/templates/frontend/package.json +14 -11
- package/dist/templates/frontend/public/favicon.svg +1 -0
- package/dist/templates/frontend/public/icons.svg +24 -0
- package/dist/templates/frontend/src/App.css +184 -0
- package/dist/templates/frontend/src/App.jsx +121 -0
- package/dist/templates/frontend/src/assets/hero.png +0 -0
- package/dist/templates/frontend/src/assets/react.svg +1 -0
- package/dist/templates/frontend/src/assets/vite.svg +1 -0
- package/dist/templates/frontend/src/index.css +94 -31
- package/dist/templates/frontend/src/main.jsx +10 -0
- package/dist/templates/frontend/vite.config.js +19 -0
- package/dist/tools/app-management.d.ts.map +1 -1
- package/dist/tools/app-management.js +73 -13
- package/dist/tools/app-management.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +15 -3
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/codegen.d.ts.map +1 -1
- package/dist/tools/codegen.js +312 -18
- package/dist/tools/codegen.js.map +1 -1
- package/dist/tools/gather-requirements.d.ts.map +1 -1
- package/dist/tools/gather-requirements.js +19 -19
- package/dist/tools/gather-requirements.js.map +1 -1
- package/dist/tools/get-status.d.ts +3 -0
- package/dist/tools/get-status.d.ts.map +1 -0
- package/dist/tools/get-status.js +122 -0
- package/dist/tools/get-status.js.map +1 -0
- package/dist/tools/hookdeck.d.ts +3 -0
- package/dist/tools/hookdeck.d.ts.map +1 -0
- package/dist/tools/hookdeck.js +101 -0
- package/dist/tools/hookdeck.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lifecycle.d.ts.map +1 -1
- package/dist/tools/lifecycle.js +22 -11
- package/dist/tools/lifecycle.js.map +1 -1
- package/dist/tools/reference-data.d.ts.map +1 -1
- package/dist/tools/reference-data.js +6 -4
- package/dist/tools/reference-data.js.map +1 -1
- package/dist/tools/requirements.d.ts.map +1 -1
- package/dist/tools/requirements.js +84 -5
- package/dist/tools/requirements.js.map +1 -1
- package/dist/tools/scaffold.d.ts.map +1 -1
- package/dist/tools/scaffold.js +30 -16
- package/dist/tools/scaffold.js.map +1 -1
- package/dist/tools/submission.js +4 -4
- package/dist/tools/submission.js.map +1 -1
- package/dist/tools/webhooks.d.ts +25 -0
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +143 -93
- package/dist/tools/webhooks.js.map +1 -1
- package/dist/utils/logger.js +17 -17
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -2
- package/dist/templates/frontend/src/App.tsx +0 -32
- package/dist/templates/frontend/src/components/Layout.tsx +0 -53
- package/dist/templates/frontend/src/context/AuthContext.tsx +0 -59
- package/dist/templates/frontend/src/main.tsx +0 -16
- package/dist/templates/frontend/src/pages/Callback.tsx +0 -53
- package/dist/templates/frontend/src/pages/Dashboard.tsx +0 -24
- package/dist/templates/frontend/src/pages/Login.tsx +0 -42
- package/dist/templates/frontend/src/services/api.ts +0 -48
- package/dist/templates/frontend/tsconfig.json +0 -21
- package/dist/templates/frontend/vite.config.ts +0 -15
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getSession, getAppState, getActiveAppId, getAllCompletedTools } from '../services/session-state.js';
|
|
3
|
+
import { checkToolPrerequisites } from '../services/tool-guard.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* All tools in the system, grouped by purpose.
|
|
7
|
+
* Used to compute available/blocked status.
|
|
8
|
+
*/
|
|
9
|
+
const ALL_TOOLS = [
|
|
10
|
+
// Auth
|
|
11
|
+
'developer_login', 'developer_signup', 'developer_verify_otp',
|
|
12
|
+
// Read-only
|
|
13
|
+
'get_categories', 'get_webhook_topics',
|
|
14
|
+
// App setup
|
|
15
|
+
'create_app',
|
|
16
|
+
// Requirements
|
|
17
|
+
'gather_requirements', 'define_app_requirements',
|
|
18
|
+
// Webhooks
|
|
19
|
+
'create_webhooks',
|
|
20
|
+
// Frontend pipeline
|
|
21
|
+
'scaffold_frontend', 'build_frontend', 'validate_build',
|
|
22
|
+
'create_submission_zip', 'upload_build', 'submit_for_review',
|
|
23
|
+
// Review & publish
|
|
24
|
+
'get_app_status', 'publish_app',
|
|
25
|
+
// Backend
|
|
26
|
+
'scaffold_backend', 'generate_api_routes',
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Compute suggested next tool based on what's done and what's available.
|
|
30
|
+
* Picks the tool that unblocks the most downstream work.
|
|
31
|
+
*/
|
|
32
|
+
function computeSuggestedNext(completed) {
|
|
33
|
+
// Priority order — the main happy path
|
|
34
|
+
const HAPPY_PATH = [
|
|
35
|
+
'developer_login',
|
|
36
|
+
'create_app',
|
|
37
|
+
'gather_requirements',
|
|
38
|
+
'define_app_requirements',
|
|
39
|
+
'scaffold_frontend',
|
|
40
|
+
'build_frontend',
|
|
41
|
+
'validate_build',
|
|
42
|
+
'create_submission_zip',
|
|
43
|
+
'upload_build',
|
|
44
|
+
'submit_for_review',
|
|
45
|
+
'get_app_status',
|
|
46
|
+
'publish_app',
|
|
47
|
+
'scaffold_backend',
|
|
48
|
+
'generate_api_routes',
|
|
49
|
+
];
|
|
50
|
+
for (const tool of HAPPY_PATH) {
|
|
51
|
+
if (!completed.has(tool)) {
|
|
52
|
+
const guard = checkToolPrerequisites(tool);
|
|
53
|
+
if (guard.allowed)
|
|
54
|
+
return tool;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
export const statusTools = [
|
|
60
|
+
{
|
|
61
|
+
name: 'get_status',
|
|
62
|
+
description: 'Returns the current session status: authenticated developer, active app, completed tools, ' +
|
|
63
|
+
'available tools (unblocked), blocked tools (with reasons), and a suggested next step. ' +
|
|
64
|
+
'Call this tool to orient yourself before taking any action. ' +
|
|
65
|
+
'This is a read-only tool with no prerequisites — it can be called at any time.',
|
|
66
|
+
inputSchema: z.object({
|
|
67
|
+
app_id: z.string().optional().describe('Optional app ID to check status for. If omitted, uses the currently active app.'),
|
|
68
|
+
}),
|
|
69
|
+
handler: async (input) => {
|
|
70
|
+
const { app_id } = input;
|
|
71
|
+
const session = getSession();
|
|
72
|
+
const targetAppId = app_id || getActiveAppId();
|
|
73
|
+
logger.info(`[get_status] Checking status for app_id=${targetAppId || 'none'}`);
|
|
74
|
+
// Build completed set (global + app-specific)
|
|
75
|
+
const completedGlobal = new Set(session.completedTools);
|
|
76
|
+
const appState = targetAppId ? getAppState(targetAppId) : undefined;
|
|
77
|
+
const completedAll = new Set(getAllCompletedTools());
|
|
78
|
+
// Compute available and blocked tools
|
|
79
|
+
const available = [];
|
|
80
|
+
const blocked = {};
|
|
81
|
+
for (const tool of ALL_TOOLS) {
|
|
82
|
+
if (completedAll.has(tool))
|
|
83
|
+
continue; // Already done
|
|
84
|
+
const guard = checkToolPrerequisites(tool);
|
|
85
|
+
if (guard.allowed) {
|
|
86
|
+
available.push(tool);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
blocked[tool] = guard.hint || guard.message || 'Prerequisites not met';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const suggestedNext = computeSuggestedNext(completedAll);
|
|
93
|
+
const confirmedScopes = appState?.context.confirmedScopes || session.context.confirmedScopes;
|
|
94
|
+
return {
|
|
95
|
+
authenticated: completedGlobal.has('developer_login') || completedGlobal.has('developer_verify_otp'),
|
|
96
|
+
developer_id: session.context.developerId || null,
|
|
97
|
+
active_app: targetAppId ? {
|
|
98
|
+
app_id: targetAppId,
|
|
99
|
+
name: appState?.context.appName || session.context.appName || null,
|
|
100
|
+
client_id: appState?.context.clientId || session.context.clientId || null,
|
|
101
|
+
scopes_confirmed: appState?.context.scopesConfirmed || false,
|
|
102
|
+
confirmed_scopes: appState?.context.confirmedScopes || [],
|
|
103
|
+
webhooks_configured: appState?.context.webhooksConfigured || false,
|
|
104
|
+
app_approved: appState?.context.appApproved || false,
|
|
105
|
+
app_published: appState?.context.appPublished || false,
|
|
106
|
+
project_path: appState?.context.projectPath || session.context.projectPath || null,
|
|
107
|
+
completed_tools: appState ? [...appState.completedTools] : [],
|
|
108
|
+
} : null,
|
|
109
|
+
completed: [...completedAll],
|
|
110
|
+
available_now: available,
|
|
111
|
+
blocked,
|
|
112
|
+
suggested_next: suggestedNext || null,
|
|
113
|
+
// Hint for webhook setup if scopes confirmed but webhooks not configured
|
|
114
|
+
webhook_hint: (confirmedScopes && confirmedScopes.length > 0 && !appState?.context.webhooksConfigured)
|
|
115
|
+
? 'Scopes are confirmed but webhooks not yet configured. Call get_webhook_topics to see available events.'
|
|
116
|
+
: undefined,
|
|
117
|
+
app_count: Object.keys(session.apps).length,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
//# sourceMappingURL=get-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-status.js","sourceRoot":"","sources":["../../src/tools/get-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookdeck.d.ts","sourceRoot":"","sources":["../../src/tools/hookdeck.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAsDjD,eAAO,MAAM,aAAa,EAAE,cAAc,EAyEzC,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { HOOKDECK_API_KEY } from '@ratio-mcp/shared';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
const HOOKDECK_API_BASE = 'https://api.hookdeck.com/2025-07-01';
|
|
6
|
+
// ── Hookdeck API helpers ───────────────────────────────────────────────
|
|
7
|
+
async function hookdeckRequest(method, path, data) {
|
|
8
|
+
const apiKey = HOOKDECK_API_KEY;
|
|
9
|
+
if (!apiKey) {
|
|
10
|
+
throw new Error('Hookdeck API key not found in constants.ts. Contact team lead.');
|
|
11
|
+
}
|
|
12
|
+
const url = `${HOOKDECK_API_BASE}${path}`;
|
|
13
|
+
logger.info(`[hookdeck-api] ${method} ${url} — body=${data ? JSON.stringify(data).slice(0, 300) : 'none'}`);
|
|
14
|
+
try {
|
|
15
|
+
const response = await axios({
|
|
16
|
+
method,
|
|
17
|
+
url,
|
|
18
|
+
data,
|
|
19
|
+
headers: {
|
|
20
|
+
Authorization: `Bearer ${apiKey}`,
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
logger.info(`[hookdeck-api] Response ${response.status}: ${JSON.stringify(response.data).slice(0, 500)}`);
|
|
25
|
+
return response.data;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
const status = err.response?.status;
|
|
29
|
+
const errBody = err.response?.data ? JSON.stringify(err.response.data).slice(0, 500) : err.message;
|
|
30
|
+
logger.error(`[hookdeck-api] ERROR ${status}: ${errBody}`);
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// ── Tool definitions ───────────────────────────────────────────────────
|
|
35
|
+
export const hookdeckTools = [
|
|
36
|
+
{
|
|
37
|
+
name: 'setup_hookdeck',
|
|
38
|
+
description: 'Set up a Hookdeck tunnel for OAuth callback URL. Provisions a persistent public URL that tunnels to the developer\'s localhost. ' +
|
|
39
|
+
'This is used when the developer does NOT have their own callback URL. ' +
|
|
40
|
+
'If the developer provides their own callback URL, skip this tool entirely. ' +
|
|
41
|
+
'Just pass app_id and port to provision a new connection. API key is built-in.',
|
|
42
|
+
inputSchema: z.object({
|
|
43
|
+
app_id: z.string().optional().describe('App ID from create_app. Used to name the Hookdeck connection.'),
|
|
44
|
+
port: z.number().default(3000).describe('Local port the backend will run on. Defaults to 3000.'),
|
|
45
|
+
}),
|
|
46
|
+
handler: async (input) => {
|
|
47
|
+
const { app_id, port } = input;
|
|
48
|
+
logger.info(`[setup_hookdeck] START — app_id=${app_id}, port=${port}`);
|
|
49
|
+
// Provision Hookdeck connection
|
|
50
|
+
// app_id may not exist yet (called before create_app), so use a unique suffix
|
|
51
|
+
const suffix = app_id ? app_id.slice(0, 8) : Date.now().toString(36);
|
|
52
|
+
const connectionName = `ratio-app-${suffix}`;
|
|
53
|
+
const sourceName = `ratio-oauth-${suffix}`;
|
|
54
|
+
const destinationName = `ratio-local-${suffix}`;
|
|
55
|
+
logger.info(`[setup_hookdeck] Creating connection: ${connectionName}`);
|
|
56
|
+
try {
|
|
57
|
+
const connection = await hookdeckRequest('PUT', '/connections', {
|
|
58
|
+
name: connectionName,
|
|
59
|
+
source: {
|
|
60
|
+
name: sourceName,
|
|
61
|
+
config: {
|
|
62
|
+
allowed_http_methods: ['GET', 'POST'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
destination: {
|
|
66
|
+
name: destinationName,
|
|
67
|
+
config: {
|
|
68
|
+
url: `http://localhost:${port}`,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
const hookdeckUrl = connection.source.url;
|
|
73
|
+
logger.info(`[setup_hookdeck] Connection created: ${connectionName}, URL: ${hookdeckUrl}`);
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
message: `Hookdeck tunnel provisioned. OAuth callback URL: ${hookdeckUrl}/callback`,
|
|
77
|
+
hookdeck_url: hookdeckUrl,
|
|
78
|
+
callback_url: `${hookdeckUrl}/callback`,
|
|
79
|
+
hookdeck_source_name: sourceName,
|
|
80
|
+
connection_id: connection.id,
|
|
81
|
+
source_id: connection.source.id,
|
|
82
|
+
destination_url: `http://localhost:${port}/callback`,
|
|
83
|
+
next_steps: [
|
|
84
|
+
`Use "${hookdeckUrl}/callback" as the redirect_uri when creating the app`,
|
|
85
|
+
'The Hookdeck CLI will be started automatically with the backend',
|
|
86
|
+
],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const errMsg = error.response?.data?.message || error.message;
|
|
91
|
+
logger.error(`[setup_hookdeck] Failed to create connection: ${errMsg}`);
|
|
92
|
+
return {
|
|
93
|
+
error: true,
|
|
94
|
+
message: `Failed to provision Hookdeck connection: ${errMsg}`,
|
|
95
|
+
hint: 'Check your Hookdeck API key and account status at https://dashboard.hookdeck.com',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
//# sourceMappingURL=hookdeck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookdeck.js","sourceRoot":"","sources":["../../src/tools/hookdeck.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAkBD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,cAAc,EAevC,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -10,7 +10,9 @@ import { codegenTools } from './codegen.js';
|
|
|
10
10
|
import { buildTools } from './build.js';
|
|
11
11
|
import { submissionTools } from './submission.js';
|
|
12
12
|
import { webhookTools } from './webhooks.js';
|
|
13
|
+
import { hookdeckTools } from './hookdeck.js';
|
|
13
14
|
import { lifecycleTools } from './lifecycle.js';
|
|
15
|
+
import { statusTools } from './get-status.js';
|
|
14
16
|
/**
|
|
15
17
|
* All dev-server tools in registration order
|
|
16
18
|
* NOTE: get_available_scopes is in docs-server (static data, no auth needed)
|
|
@@ -18,16 +20,18 @@ import { lifecycleTools } from './lifecycle.js';
|
|
|
18
20
|
export const allDevTools = [
|
|
19
21
|
...developerAuthTools, // 3 tools
|
|
20
22
|
...referenceDataTools, // 1 tool (get_categories — call before create_app)
|
|
23
|
+
...hookdeckTools, // 1 tool (setup_hookdeck — optional, before create_app)
|
|
21
24
|
...appManagementTools, // 5 tools
|
|
22
25
|
...gatherRequirementsTools, // 1 tool (gather_requirements — NL → scope recommendations)
|
|
23
|
-
...requirementsTools, //
|
|
26
|
+
...requirementsTools, // 2 tools (define_app_requirements, validate_scopes)
|
|
24
27
|
...scaffoldTools, // 2 tools
|
|
25
|
-
...authTools, //
|
|
28
|
+
...authTools, // 2 tools (refresh_access_token, check_token_status — request_auth_code and get_access_token removed: OAuth happens via merchant install callback)
|
|
26
29
|
...codegenTools, // 1 tool
|
|
27
30
|
...buildTools, // 3 tools
|
|
28
31
|
...submissionTools, // 4 tools
|
|
29
32
|
...webhookTools, // 5 tools (get_webhook_topics, create_webhooks, list_webhooks, toggle_webhook, delete_webhook)
|
|
30
33
|
...lifecycleTools, // 1 tool
|
|
34
|
+
...statusTools, // 1 tool (get_status — session status and available tools)
|
|
31
35
|
];
|
|
32
|
-
// Total:
|
|
36
|
+
// Total: 33 tools
|
|
33
37
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAYA,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAYA,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,GAAG,kBAAkB,EAAK,UAAU;IACpC,GAAG,kBAAkB,EAAK,oDAAoD;IAC9E,GAAG,aAAa,EAAU,yDAAyD;IACnF,GAAG,kBAAkB,EAAK,UAAU;IACpC,GAAG,uBAAuB,EAAE,6DAA6D;IACzF,GAAG,iBAAiB,EAAM,qDAAqD;IAC/E,GAAG,aAAa,EAAU,UAAU;IACpC,GAAG,SAAS,EAAc,mJAAmJ;IAC7K,GAAG,YAAY,EAAW,SAAS;IACnC,GAAG,UAAU,EAAa,UAAU;IACpC,GAAG,eAAe,EAAQ,UAAU;IACpC,GAAG,YAAY,EAAW,+FAA+F;IACzH,GAAG,cAAc,EAAS,SAAS;IACnC,GAAG,WAAW,EAAY,4DAA4D;CACvF,CAAC;AACF,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/tools/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/tools/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4FjD,eAAO,MAAM,cAAc,EAAE,cAAc,EA4B1C,CAAC"}
|
package/dist/tools/lifecycle.js
CHANGED
|
@@ -18,9 +18,11 @@ const LIFECYCLE_PHASES = [
|
|
|
18
18
|
name: 'App Creation',
|
|
19
19
|
description: 'Create the app. Steps: ' +
|
|
20
20
|
'1) Call get_categories and let the developer pick categories. ' +
|
|
21
|
-
'2) Ask
|
|
22
|
-
'
|
|
23
|
-
|
|
21
|
+
'2) Ask the developer: "Do you have a callback URL for OAuth, or should we set one up for you?" ' +
|
|
22
|
+
' - If NO: Call setup_hookdeck to provision a persistent public URL (tunnels to their localhost). ' +
|
|
23
|
+
' - If YES: Use their URL directly, skip setup_hookdeck. ' +
|
|
24
|
+
'3) Call create_app with name, description, categories, and callback URL (auto-filled from Hookdeck if set up).',
|
|
25
|
+
tools: ['get_categories', 'setup_hookdeck', 'create_app'],
|
|
24
26
|
},
|
|
25
27
|
{
|
|
26
28
|
phase: 3,
|
|
@@ -56,15 +58,21 @@ const LIFECYCLE_PHASES = [
|
|
|
56
58
|
},
|
|
57
59
|
{
|
|
58
60
|
phase: 7,
|
|
59
|
-
name: 'Publish
|
|
60
|
-
description: 'Publish the approved app
|
|
61
|
-
tools: ['publish_app'
|
|
61
|
+
name: 'Publish',
|
|
62
|
+
description: 'Publish the approved app so merchants can install it.',
|
|
63
|
+
tools: ['publish_app'],
|
|
62
64
|
},
|
|
63
65
|
{
|
|
64
66
|
phase: 8,
|
|
65
|
-
name: 'Backend Code Generation',
|
|
66
|
-
description: 'Scaffold the NestJS backend (with
|
|
67
|
-
'API routes for each resource based on the confirmed scopes.'
|
|
67
|
+
name: 'Backend Code Generation & Auto-Start',
|
|
68
|
+
description: 'Scaffold the NestJS backend (with /callback handler for receiving merchant install tokens), ' +
|
|
69
|
+
'then auto-generate API routes for each resource based on the confirmed scopes. ' +
|
|
70
|
+
'generate_api_routes will AUTOMATICALLY: 1) Run npm install, 2) Start the backend server, ' +
|
|
71
|
+
'3) Start Hookdeck CLI tunnel if Hookdeck was configured. The developer does NOT need to run anything manually. ' +
|
|
72
|
+
'Once the backend is running, merchants can install the app from the store. When a merchant clicks Install, ' +
|
|
73
|
+
'the OAuth code is sent to the callback URL, the backend exchanges it for an access token, and the token + merchant_id ' +
|
|
74
|
+
'are displayed in the console and stored in merchant-tokens.json. ' +
|
|
75
|
+
'NOTE: Multi-merchant token management will be added in a future update.',
|
|
68
76
|
tools: ['scaffold_backend', 'generate_api_routes'],
|
|
69
77
|
docs_server_tools: ['get_scope_endpoint_map', 'get_api_reference'],
|
|
70
78
|
},
|
|
@@ -87,14 +95,17 @@ export const lifecycleTools = [
|
|
|
87
95
|
success: true,
|
|
88
96
|
total_phases: LIFECYCLE_PHASES.length,
|
|
89
97
|
phases: LIFECYCLE_PHASES,
|
|
90
|
-
note: 'Tools prefixed with docs_server are from ratio-
|
|
98
|
+
note: 'Tools prefixed with docs_server are from ratio-docs-server. All other tools are from ratio-dev-server.',
|
|
91
99
|
important: [
|
|
92
100
|
'Follow the phases in order — the tool guard will block out-of-order calls',
|
|
101
|
+
'Ask if the developer has a callback URL — if not, call setup_hookdeck before create_app',
|
|
93
102
|
'Scope selection is critical — it drives backend code generation AND webhook suggestions',
|
|
94
103
|
'Always call define_app_requirements with confirmed=false first to preview scopes',
|
|
95
|
-
'Webhook events are auto-suggested based on confirmed scopes (Phase 4)',
|
|
96
104
|
'Phase 4 (Webhooks) is optional — ask the developer if they need event notifications',
|
|
97
105
|
'Backend code generation only works for codegen_ready resources (currently: orders, products)',
|
|
106
|
+
'generate_api_routes auto-starts the backend + Hookdeck tunnel — developer never runs npm run dev manually',
|
|
107
|
+
'OAuth happens automatically when merchants install the app — the backend /callback handler exchanges the code for a token and displays it in the console',
|
|
108
|
+
'No need to call request_auth_code or get_access_token manually — the callback flow handles it',
|
|
98
109
|
],
|
|
99
110
|
};
|
|
100
111
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/tools/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG;IACvB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;KACvE;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,yBAAyB;YACzB,gEAAgE;YAChE,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/tools/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG;IACvB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;KACvE;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,yBAAyB;YACzB,gEAAgE;YAChE,iGAAiG;YACjG,qGAAqG;YACrG,4DAA4D;YAC5D,gHAAgH;QAClH,KAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC;KAC1D;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,iGAAiG;YACjG,2FAA2F;YAC3F,2FAA2F;YAC3F,+FAA+F;YAC/F,kFAAkF;QACpF,KAAK,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;QACzD,iBAAiB,EAAE,CAAC,sBAAsB,CAAC;KAC5C;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,iFAAiF;YACjF,gGAAgG;YAChG,iGAAiG;YACjG,iEAAiE;QACnE,KAAK,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,CAAC;KAClE;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,gGAAgG;QAClG,KAAK,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,cAAc,EAAE,mBAAmB,CAAC;KAC7G;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,qDAAqD;QAClE,KAAK,EAAE,CAAC,gBAAgB,CAAC;KAC1B;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uDAAuD;QACpE,KAAK,EAAE,CAAC,aAAa,CAAC;KACvB;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,sCAAsC;QAC5C,WAAW,EACT,8FAA8F;YAC9F,iFAAiF;YACjF,2FAA2F;YAC3F,iHAAiH;YACjH,6GAA6G;YAC7G,wHAAwH;YACxH,mEAAmE;YACnE,yEAAyE;QAC3E,KAAK,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;QAClD,iBAAiB,EAAE,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;KACnE;IACD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0DAA0D;QACvE,iBAAiB,EAAE,CAAC,mBAAmB,CAAC;KACzC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,4FAA4F;YAC5F,6FAA6F;YAC7F,kCAAkC;QACpC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,gBAAgB,CAAC,MAAM;gBACrC,MAAM,EAAE,gBAAgB;gBACxB,IAAI,EAAE,wGAAwG;gBAC9G,SAAS,EAAE;oBACT,2EAA2E;oBAC3E,yFAAyF;oBACzF,yFAAyF;oBACzF,kFAAkF;oBAClF,qFAAqF;oBACrF,8FAA8F;oBAC9F,2GAA2G;oBAC3G,0JAA0J;oBAC1J,+FAA+F;iBAChG;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-data.d.ts","sourceRoot":"","sources":["../../src/tools/reference-data.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwBjD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuCxF;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"reference-data.d.ts","sourceRoot":"","sources":["../../src/tools/reference-data.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwBjD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuCxF;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,EA2C9C,CAAC"}
|
|
@@ -68,10 +68,12 @@ export const referenceDataTools = [
|
|
|
68
68
|
name: cat.name,
|
|
69
69
|
description: cat.description || null,
|
|
70
70
|
})),
|
|
71
|
-
_instruction: '
|
|
72
|
-
'
|
|
73
|
-
'
|
|
74
|
-
'
|
|
71
|
+
_instruction: 'MANDATORY: You MUST present these categories to the developer as a numbered list and ask them to choose. ' +
|
|
72
|
+
'Do NOT auto-select categories based on the app name or description. ' +
|
|
73
|
+
'The developer MUST explicitly confirm which categories they want. ' +
|
|
74
|
+
'After they confirm, call create_app with their chosen category slugs. ' +
|
|
75
|
+
'create_app will BLOCK if the developer has not confirmed categories.',
|
|
76
|
+
requires_developer_confirmation: true,
|
|
75
77
|
};
|
|
76
78
|
},
|
|
77
79
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-data.js","sourceRoot":"","sources":["../../src/tools/reference-data.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reference-data.js","sourceRoot":"","sources":["../../src/tools/reference-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/tools/requirements.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/tools/requirements.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,eAAO,MAAM,iBAAiB,EAAE,cAAc,EA2Q7C,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ALL_SCOPE_CODES, getResourceForScope, RESOURCE_METADATA, SCOPES_BY_RESOURCE } from '@ratio-mcp/shared';
|
|
3
3
|
import { saveRequirements } from '../store/requirements-store.js';
|
|
4
|
+
import { getRecommendedWebhookEvents } from './webhooks.js';
|
|
5
|
+
import { developerApiRequest } from '../api/developer.js';
|
|
4
6
|
import { logger } from '../utils/logger.js';
|
|
7
|
+
// No client-side scope resolution needed — the backend's PATCH /applications/:id
|
|
8
|
+
// accepts both UUIDs and scope codes via its resolveScopeIds() method.
|
|
5
9
|
export const requirementsTools = [
|
|
6
10
|
{
|
|
7
11
|
name: 'define_app_requirements',
|
|
@@ -114,7 +118,7 @@ export const requirementsTools = [
|
|
|
114
118
|
suggestedAdditional.push({
|
|
115
119
|
code: pairedCode,
|
|
116
120
|
label: pairedData.label,
|
|
117
|
-
reason: `Commonly needed with ${scope} — ${pairedData.
|
|
121
|
+
reason: `Commonly needed with ${scope} — ${pairedData.label}.`,
|
|
118
122
|
});
|
|
119
123
|
}
|
|
120
124
|
alreadySelected.add(pairedCode); // prevent re-suggesting
|
|
@@ -137,7 +141,7 @@ export const requirementsTools = [
|
|
|
137
141
|
'Once approved, call define_app_requirements again with the final scopes and confirmed=true.',
|
|
138
142
|
};
|
|
139
143
|
}
|
|
140
|
-
// ── If confirmed: save requirements
|
|
144
|
+
// ── If confirmed: save requirements locally + update backend ──
|
|
141
145
|
const requirements = {
|
|
142
146
|
app_id,
|
|
143
147
|
app_name,
|
|
@@ -148,11 +152,32 @@ export const requirementsTools = [
|
|
|
148
152
|
updated_at: new Date().toISOString(),
|
|
149
153
|
};
|
|
150
154
|
saveRequirements(app_id, requirements);
|
|
151
|
-
logger.info(`Requirements confirmed and saved for app: ${app_id}`);
|
|
155
|
+
logger.info(`Requirements confirmed and saved locally for app: ${app_id}`);
|
|
156
|
+
// Sync scopes to backend — send scope codes directly.
|
|
157
|
+
// The backend's PATCH /applications/:id accepts both UUIDs and scope codes
|
|
158
|
+
// via its resolveScopeIds() method, so no client-side resolution needed.
|
|
159
|
+
let backendSyncResult = { synced: false };
|
|
160
|
+
try {
|
|
161
|
+
await developerApiRequest('PATCH', `/applications/${app_id}`, {
|
|
162
|
+
scopeIds: validScopes,
|
|
163
|
+
});
|
|
164
|
+
backendSyncResult = { synced: true };
|
|
165
|
+
logger.info(`[requirements] Synced ${validScopes.length} scopes to backend for app: ${app_id}`);
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
169
|
+
backendSyncResult = { synced: false, message: errMsg };
|
|
170
|
+
logger.error(`[requirements] Failed to sync scopes to backend: ${errMsg}`);
|
|
171
|
+
warnings.push(`Scopes saved locally but failed to sync to backend: ${errMsg}`);
|
|
172
|
+
}
|
|
173
|
+
// Fetch real webhook events from backend, filtered by confirmed scopes
|
|
174
|
+
const webhookRecs = await getRecommendedWebhookEvents(validScopes);
|
|
175
|
+
const hasRecommendations = webhookRecs.recommended.length > 0 || webhookRecs.always_recommended.length > 0;
|
|
152
176
|
return {
|
|
153
177
|
success: true,
|
|
154
178
|
confirmed: true,
|
|
155
|
-
message: `Requirements saved for app ${app_id}
|
|
179
|
+
message: `Requirements saved for app ${app_id}` +
|
|
180
|
+
(backendSyncResult.synced ? ' and synced to backend' : ' (local only — backend sync failed)'),
|
|
156
181
|
requirements: {
|
|
157
182
|
app_id,
|
|
158
183
|
scopes: validScopes,
|
|
@@ -160,8 +185,62 @@ export const requirementsTools = [
|
|
|
160
185
|
codegen_resources: [...dataNeedsSet].filter((r) => RESOURCE_METADATA[r]?.codegen_ready),
|
|
161
186
|
features,
|
|
162
187
|
},
|
|
188
|
+
backend_sync: backendSyncResult,
|
|
189
|
+
webhook_recommendations: hasRecommendations ? {
|
|
190
|
+
message: 'Based on your confirmed scopes, these webhook events are available:',
|
|
191
|
+
recommended_events: webhookRecs.recommended,
|
|
192
|
+
always_recommended_events: webhookRecs.always_recommended,
|
|
193
|
+
_instruction: 'Show these REAL event names to the developer. These come directly from the backend. ' +
|
|
194
|
+
'Ask if they want to subscribe to any. If yes, ask for their webhook URL and call create_webhooks ' +
|
|
195
|
+
'with the exact event_name values shown here. If no, proceed to scaffold_frontend.',
|
|
196
|
+
} : undefined,
|
|
163
197
|
warnings: warnings.length > 0 ? warnings : undefined,
|
|
164
|
-
next_step:
|
|
198
|
+
next_step: hasRecommendations
|
|
199
|
+
? 'Show the developer the recommended webhook events and ask if they want to subscribe.'
|
|
200
|
+
: 'Call scaffold_frontend to create the frontend project.',
|
|
201
|
+
doc_hint: 'Call get_webhook_topics to see ALL available events beyond the recommendations.',
|
|
202
|
+
};
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: 'validate_scopes',
|
|
207
|
+
description: 'Validate a list of scope codes against the platform. Returns which scopes are valid and which are not. ' +
|
|
208
|
+
'MANDATORY: You MUST call this tool before presenting any scope recommendations to the developer. ' +
|
|
209
|
+
'This prevents showing scopes that do not exist on the platform.',
|
|
210
|
+
inputSchema: z.object({
|
|
211
|
+
scopes: z
|
|
212
|
+
.array(z.string())
|
|
213
|
+
.min(1)
|
|
214
|
+
.describe('Array of scope codes to validate (e.g. ["read_orders", "read_payments"])'),
|
|
215
|
+
}),
|
|
216
|
+
handler: async (input) => {
|
|
217
|
+
const { scopes } = input;
|
|
218
|
+
logger.info(`[validate_scopes] Validating ${scopes.length} scopes`);
|
|
219
|
+
const valid = [];
|
|
220
|
+
const invalid = [];
|
|
221
|
+
for (const code of scopes) {
|
|
222
|
+
if (ALL_SCOPE_CODES.has(code)) {
|
|
223
|
+
const resource = getResourceForScope(code);
|
|
224
|
+
const scopeData = resource ? (SCOPES_BY_RESOURCE[resource] || []).find((s) => s.code === code) : undefined;
|
|
225
|
+
valid.push({
|
|
226
|
+
code,
|
|
227
|
+
label: scopeData?.label || code,
|
|
228
|
+
resource: resource || 'unknown',
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
invalid.push(code);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
logger.info(`[validate_scopes] Result: ${valid.length} valid, ${invalid.length} invalid`);
|
|
236
|
+
return {
|
|
237
|
+
valid,
|
|
238
|
+
invalid,
|
|
239
|
+
total_valid: valid.length,
|
|
240
|
+
total_invalid: invalid.length,
|
|
241
|
+
_instruction: 'ONLY present the scopes listed in "valid" to the developer. ' +
|
|
242
|
+
'Do NOT mention, suggest, or include any scope from the "invalid" list. ' +
|
|
243
|
+
'If you were about to recommend an invalid scope, silently drop it.',
|
|
165
244
|
};
|
|
166
245
|
},
|
|
167
246
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/tools/requirements.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/tools/requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2BjD,eAAO,MAAM,aAAa,EAAE,cAAc,EAqPzC,CAAC"}
|