@ratio-mcp/dev-server 1.0.0 → 1.1.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/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -9
- package/dist/index.js.map +1 -1
- package/dist/orchestrated-index.d.ts +16 -0
- package/dist/orchestrated-index.d.ts.map +1 -0
- package/dist/orchestrated-index.js +41 -0
- package/dist/orchestrated-index.js.map +1 -0
- package/dist/orchestrated-server.d.ts +16 -0
- package/dist/orchestrated-server.d.ts.map +1 -0
- package/dist/orchestrated-server.js +63 -0
- package/dist/orchestrated-server.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -0
- package/dist/server.js.map +1 -1
- package/dist/services/orchestrator.d.ts +63 -0
- package/dist/services/orchestrator.d.ts.map +1 -0
- package/dist/services/orchestrator.js +769 -0
- package/dist/services/orchestrator.js.map +1 -0
- package/dist/services/response-formatter.d.ts +24 -0
- package/dist/services/response-formatter.d.ts.map +1 -0
- package/dist/services/response-formatter.js +311 -0
- package/dist/services/response-formatter.js.map +1 -0
- package/dist/services/session-state.d.ts +51 -0
- package/dist/services/session-state.d.ts.map +1 -0
- package/dist/services/session-state.js +248 -0
- package/dist/services/session-state.js.map +1 -0
- package/dist/services/tool-guard.d.ts +20 -0
- package/dist/services/tool-guard.d.ts.map +1 -0
- package/dist/services/tool-guard.js +164 -0
- package/dist/services/tool-guard.js.map +1 -0
- package/dist/store/requirements-store.d.ts.map +1 -1
- package/dist/store/requirements-store.js +16 -3
- package/dist/store/requirements-store.js.map +1 -1
- package/dist/store/token-store.d.ts.map +1 -1
- package/dist/store/token-store.js +8 -2
- package/dist/store/token-store.js.map +1 -1
- package/dist/templates/backend/.env.example +3 -1
- package/dist/tools/agent-chat.d.ts +9 -0
- package/dist/tools/agent-chat.d.ts.map +1 -0
- package/dist/tools/agent-chat.js +379 -0
- package/dist/tools/agent-chat.js.map +1 -0
- package/dist/tools/app-management.d.ts.map +1 -1
- package/dist/tools/app-management.js +29 -8
- package/dist/tools/app-management.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +45 -8
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +13 -2
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/codegen.d.ts.map +1 -1
- package/dist/tools/codegen.js +39 -6
- package/dist/tools/codegen.js.map +1 -1
- package/dist/tools/gather-requirements.d.ts +3 -0
- package/dist/tools/gather-requirements.d.ts.map +1 -0
- package/dist/tools/gather-requirements.js +281 -0
- package/dist/tools/gather-requirements.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lifecycle.d.ts.map +1 -1
- package/dist/tools/lifecycle.js +40 -32
- package/dist/tools/lifecycle.js.map +1 -1
- package/dist/tools/reference-data.d.ts +8 -0
- package/dist/tools/reference-data.d.ts.map +1 -0
- package/dist/tools/reference-data.js +79 -0
- package/dist/tools/reference-data.js.map +1 -0
- package/dist/tools/scaffold.d.ts.map +1 -1
- package/dist/tools/scaffold.js +17 -1
- package/dist/tools/scaffold.js.map +1 -1
- package/dist/tools/submission.d.ts.map +1 -1
- package/dist/tools/submission.js +79 -21
- package/dist/tools/submission.js.map +1 -1
- package/dist/tools/webhooks.d.ts +3 -0
- package/dist/tools/webhooks.d.ts.map +1 -0
- package/dist/tools/webhooks.js +303 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +93 -14
- package/dist/utils/logger.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
// ── Singleton state ─────────────────────────────────────────────────────
|
|
3
|
+
let session = createFreshSession();
|
|
4
|
+
function createFreshSession() {
|
|
5
|
+
return {
|
|
6
|
+
completedTools: new Set(),
|
|
7
|
+
context: {},
|
|
8
|
+
lastActivity: Date.now(),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
12
|
+
/** Get current session state (read-only snapshot) */
|
|
13
|
+
export function getSession() {
|
|
14
|
+
return session;
|
|
15
|
+
}
|
|
16
|
+
/** Record that a tool completed successfully and extract relevant context */
|
|
17
|
+
export function recordToolSuccess(toolName, result) {
|
|
18
|
+
session.completedTools.add(toolName);
|
|
19
|
+
session.lastActivity = Date.now();
|
|
20
|
+
// Extract context from tool results
|
|
21
|
+
const data = result;
|
|
22
|
+
logger.info(`[session-state] recordToolSuccess called for: ${toolName}`);
|
|
23
|
+
logger.info(`[session-state] result type: ${typeof result}, isNull: ${result === null}, isUndefined: ${result === undefined}`);
|
|
24
|
+
if (data) {
|
|
25
|
+
logger.info(`[session-state] result top-level keys: ${JSON.stringify(Object.keys(data))}`);
|
|
26
|
+
// Log full result structure to file (not redacted) for debugging
|
|
27
|
+
logger.debug(`[session-state] FULL result for ${toolName}: ${JSON.stringify(data, null, 2).slice(0, 5000)}`);
|
|
28
|
+
}
|
|
29
|
+
if (!data) {
|
|
30
|
+
logger.warn(`[session-state] result is null/undefined for ${toolName} — skipping context extraction`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
switch (toolName) {
|
|
34
|
+
case 'developer_login':
|
|
35
|
+
case 'developer_signup': {
|
|
36
|
+
// Login/signup returns token and developer info
|
|
37
|
+
const dev = data['developer'];
|
|
38
|
+
logger.info(`[session-state] ${toolName}: data.developer exists=${!!dev}, data.developer keys=${dev ? JSON.stringify(Object.keys(dev)) : 'N/A'}`);
|
|
39
|
+
if (dev?.['id'])
|
|
40
|
+
session.context.developerId = String(dev['id']);
|
|
41
|
+
if (data['token'])
|
|
42
|
+
session.context.developerToken = String(data['token']);
|
|
43
|
+
logger.info(`[session-state] ${toolName}: extracted developerId=${session.context.developerId}, hasToken=${!!session.context.developerToken}`);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'create_app': {
|
|
47
|
+
const app = data['application'];
|
|
48
|
+
logger.info(`[session-state] create_app: data.application exists=${!!app}`);
|
|
49
|
+
if (app) {
|
|
50
|
+
logger.info(`[session-state] create_app: application keys=${JSON.stringify(Object.keys(app))}`);
|
|
51
|
+
logger.info(`[session-state] create_app: application.id=${app['id']}, application.name=${app['name']}`);
|
|
52
|
+
logger.info(`[session-state] create_app: application.client_id=${app['client_id']}, application.clientId=${app['clientId']}`);
|
|
53
|
+
logger.info(`[session-state] create_app: application.client_secret exists=${!!app['client_secret']}, application.clientSecret exists=${!!app['clientSecret']}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Maybe the response is structured differently — log what we actually got
|
|
57
|
+
logger.warn(`[session-state] create_app: NO 'application' key found! Checking alternate structures...`);
|
|
58
|
+
logger.info(`[session-state] create_app: data.data=${JSON.stringify(data['data'])?.slice(0, 500)}`);
|
|
59
|
+
logger.info(`[session-state] create_app: data.app=${JSON.stringify(data['app'])?.slice(0, 500)}`);
|
|
60
|
+
logger.info(`[session-state] create_app: data.id=${data['id']}, data.client_id=${data['client_id']}, data.clientId=${data['clientId']}`);
|
|
61
|
+
}
|
|
62
|
+
if (app?.['id'])
|
|
63
|
+
session.context.appId = String(app['id']);
|
|
64
|
+
if (app?.['name'])
|
|
65
|
+
session.context.appName = String(app['name']);
|
|
66
|
+
if (app?.['client_id'])
|
|
67
|
+
session.context.clientId = String(app['client_id']);
|
|
68
|
+
if (app?.['client_secret'])
|
|
69
|
+
session.context.clientSecret = String(app['client_secret']);
|
|
70
|
+
logger.info(`[session-state] create_app RESULT: appId=${session.context.appId}, appName=${session.context.appName}, clientId=${session.context.clientId}, hasClientSecret=${!!session.context.clientSecret}`);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 'define_app_requirements': {
|
|
74
|
+
// Only mark confirmed if the call was a confirmation (not preview)
|
|
75
|
+
const confirmed = data['confirmed'] ?? data['status'];
|
|
76
|
+
if (confirmed === true || confirmed === 'confirmed') {
|
|
77
|
+
session.context.scopesConfirmed = true;
|
|
78
|
+
// Capture the confirmed scope codes for webhook suggestion
|
|
79
|
+
// The tool returns: { requirements: { scopes: [...] } } when confirmed
|
|
80
|
+
const reqs = data['requirements'];
|
|
81
|
+
const scopes = reqs?.['scopes'] ?? data['scopes'];
|
|
82
|
+
if (Array.isArray(scopes)) {
|
|
83
|
+
session.context.confirmedScopes = scopes.map(String);
|
|
84
|
+
logger.info(`Confirmed scopes captured: [${session.context.confirmedScopes.join(', ')}]`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'create_webhooks': {
|
|
90
|
+
if (data['success'])
|
|
91
|
+
session.context.webhooksConfigured = true;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'upload_build': {
|
|
95
|
+
if (data['success'])
|
|
96
|
+
session.context.buildUploaded = true;
|
|
97
|
+
// Capture version ID from upload response
|
|
98
|
+
// Backend returns: { success, message, data: { id, version, status, ... } }
|
|
99
|
+
// MCP tool wraps it as: { success, response: <backend response> }
|
|
100
|
+
const uploadResponse = data['response'];
|
|
101
|
+
const responseData = uploadResponse?.['data'];
|
|
102
|
+
logger.info(`[session-state] upload_build response keys: ${JSON.stringify(Object.keys(data))}`);
|
|
103
|
+
logger.info(`[session-state] upload_build uploadResponse keys: ${uploadResponse ? JSON.stringify(Object.keys(uploadResponse)) : 'undefined'}`);
|
|
104
|
+
logger.info(`[session-state] upload_build responseData keys: ${responseData ? JSON.stringify(Object.keys(responseData)) : 'undefined'}`);
|
|
105
|
+
const versionId = responseData?.['id'] ??
|
|
106
|
+
responseData?.['versionId'] ??
|
|
107
|
+
uploadResponse?.id ??
|
|
108
|
+
uploadResponse?.versionId ??
|
|
109
|
+
data['version_id'] ??
|
|
110
|
+
data['versionId'];
|
|
111
|
+
if (versionId) {
|
|
112
|
+
session.context.latestVersionId = String(versionId);
|
|
113
|
+
logger.info(`[session-state] Captured latestVersionId from upload_build: ${session.context.latestVersionId}`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
logger.warn(`[session-state] Could NOT capture versionId from upload_build. Full data: ${JSON.stringify(data).slice(0, 500)}`);
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case 'submit_for_review': {
|
|
121
|
+
if (data['success'])
|
|
122
|
+
session.context.submittedForReview = true;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case 'get_app_status': {
|
|
126
|
+
const status = data['status'] ?? data['application']?.['status'];
|
|
127
|
+
if (status === 'approved' || status === 'APPROVED') {
|
|
128
|
+
session.context.appApproved = true;
|
|
129
|
+
}
|
|
130
|
+
// Capture latest version ID — the tool now returns it as a top-level field
|
|
131
|
+
const latestVerId = data['latestVersionId'];
|
|
132
|
+
logger.info(`[session-state] get_app_status latestVersionId from tool: ${latestVerId}`);
|
|
133
|
+
if (latestVerId) {
|
|
134
|
+
session.context.latestVersionId = String(latestVerId);
|
|
135
|
+
logger.info(`[session-state] Captured latestVersionId: ${session.context.latestVersionId}`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Fallback: dig into application response
|
|
139
|
+
const appResponse = data['application'];
|
|
140
|
+
const appData = appResponse?.data || appResponse;
|
|
141
|
+
const vers = appData?.versions;
|
|
142
|
+
if (vers?.[0]?.['id']) {
|
|
143
|
+
session.context.latestVersionId = String(vers[0]['id']);
|
|
144
|
+
logger.info(`[session-state] Captured latestVersionId from fallback: ${session.context.latestVersionId}`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
logger.warn(`[session-state] Could NOT capture latestVersionId from get_app_status. data keys: ${JSON.stringify(Object.keys(data))}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case 'publish_app': {
|
|
153
|
+
if (data['success'])
|
|
154
|
+
session.context.appPublished = true;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'request_auth_code': {
|
|
158
|
+
logger.info(`[session-state] request_auth_code: data keys=${JSON.stringify(Object.keys(data))}`);
|
|
159
|
+
logger.info(`[session-state] request_auth_code: data.auth_code=${data['auth_code']}, data.code=${data['code']}`);
|
|
160
|
+
const authCode = data['auth_code'] ?? data['code'];
|
|
161
|
+
if (authCode) {
|
|
162
|
+
session.context.authCode = String(authCode);
|
|
163
|
+
logger.info(`[session-state] request_auth_code: captured authCode=${String(authCode).substring(0, 12)}...`);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
logger.warn(`[session-state] request_auth_code: NO auth code found in result!`);
|
|
167
|
+
}
|
|
168
|
+
const redirectUri = data['redirect_uri'];
|
|
169
|
+
if (redirectUri) {
|
|
170
|
+
session.context.authCodeRedirectUri = String(redirectUri);
|
|
171
|
+
}
|
|
172
|
+
logger.info(`[session-state] request_auth_code: authCode=${session.context.authCode?.substring(0, 12)}..., redirectUri=${session.context.authCodeRedirectUri}`);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
case 'get_access_token': {
|
|
176
|
+
logger.info(`[session-state] get_access_token: data keys=${JSON.stringify(Object.keys(data))}`);
|
|
177
|
+
logger.info(`[session-state] get_access_token: data.success=${data['success']}, data.access_token exists=${!!data['access_token']}`);
|
|
178
|
+
logger.info(`[session-state] get_access_token: data.tokens=${JSON.stringify(data['tokens'])?.slice(0, 200)}`);
|
|
179
|
+
logger.info(`[session-state] get_access_token: data.token_injected_to_project=${data['token_injected_to_project']}`);
|
|
180
|
+
if (data['success'] || data['access_token']) {
|
|
181
|
+
session.context.oauthCompleted = true;
|
|
182
|
+
logger.info(`[session-state] get_access_token: oauthCompleted set to TRUE`);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
logger.warn(`[session-state] get_access_token: oauthCompleted NOT set — neither success nor access_token found`);
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'scaffold_frontend':
|
|
190
|
+
case 'scaffold_backend': {
|
|
191
|
+
logger.info(`[session-state] ${toolName}: data keys=${JSON.stringify(Object.keys(data))}`);
|
|
192
|
+
logger.info(`[session-state] ${toolName}: data.project_path=${data['project_path']}, data.path=${data['path']}, data.backend_path=${data['backend_path']}`);
|
|
193
|
+
logger.info(`[session-state] ${toolName}: data.token_injected=${data['token_injected']}`);
|
|
194
|
+
const path = data['project_path'] ?? data['path'];
|
|
195
|
+
if (path) {
|
|
196
|
+
session.context.projectPath = String(path);
|
|
197
|
+
logger.info(`[session-state] ${toolName}: projectPath set to ${session.context.projectPath}`);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
logger.warn(`[session-state] ${toolName}: NO project_path found in result!`);
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case 'build_frontend': {
|
|
205
|
+
const buildPath = data['build_path'] ?? data['output_path'];
|
|
206
|
+
if (buildPath)
|
|
207
|
+
session.context.buildPath = String(buildPath);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'create_submission_zip': {
|
|
211
|
+
const zipPath = data['zip_path'] ?? data['path'];
|
|
212
|
+
if (zipPath)
|
|
213
|
+
session.context.zipPath = String(zipPath);
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Always log a full session snapshot after every tool — this is the key debugging info
|
|
218
|
+
logger.info(`[session-state] ── SNAPSHOT after ${toolName} ──`);
|
|
219
|
+
logger.info(`[session-state] completedTools=[${[...session.completedTools].join(', ')}]`);
|
|
220
|
+
logger.info(`[session-state] context.appId=${session.context.appId}`);
|
|
221
|
+
logger.info(`[session-state] context.appName=${session.context.appName}`);
|
|
222
|
+
logger.info(`[session-state] context.clientId=${session.context.clientId}`);
|
|
223
|
+
logger.info(`[session-state] context.hasClientSecret=${!!session.context.clientSecret}`);
|
|
224
|
+
logger.info(`[session-state] context.scopesConfirmed=${session.context.scopesConfirmed}`);
|
|
225
|
+
logger.info(`[session-state] context.confirmedScopes=${JSON.stringify(session.context.confirmedScopes)}`);
|
|
226
|
+
logger.info(`[session-state] context.webhooksConfigured=${session.context.webhooksConfigured}`);
|
|
227
|
+
logger.info(`[session-state] context.appApproved=${session.context.appApproved}`);
|
|
228
|
+
logger.info(`[session-state] context.appPublished=${session.context.appPublished}`);
|
|
229
|
+
logger.info(`[session-state] context.oauthCompleted=${session.context.oauthCompleted}`);
|
|
230
|
+
logger.info(`[session-state] context.authCode=${session.context.authCode?.substring(0, 12) ?? 'undefined'}...`);
|
|
231
|
+
logger.info(`[session-state] context.projectPath=${session.context.projectPath}`);
|
|
232
|
+
logger.info(`[session-state] context.latestVersionId=${session.context.latestVersionId}`);
|
|
233
|
+
logger.info(`[session-state] ── END SNAPSHOT ──`);
|
|
234
|
+
}
|
|
235
|
+
/** Reset session (for testing or starting a new flow) */
|
|
236
|
+
export function resetSession() {
|
|
237
|
+
logger.info('Session state reset');
|
|
238
|
+
session = createFreshSession();
|
|
239
|
+
}
|
|
240
|
+
/** Check if a specific tool has been completed */
|
|
241
|
+
export function hasCompleted(toolName) {
|
|
242
|
+
return session.completedTools.has(toolName);
|
|
243
|
+
}
|
|
244
|
+
/** Check if ANY of the given tools has been completed */
|
|
245
|
+
export function hasCompletedAny(toolNames) {
|
|
246
|
+
return toolNames.some((t) => session.completedTools.has(t));
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=session-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Guard — prerequisite validation for MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Enforced flow:
|
|
5
|
+
* 1. developer_login (authentication)
|
|
6
|
+
* 2. get_categories → create_app (name, description, categories, callback URL)
|
|
7
|
+
* 3. define_app_requirements (scope selection — needs app to exist)
|
|
8
|
+
* 4. webhooks (auto-suggested from scopes — needs scopes confirmed)
|
|
9
|
+
* 5. scaffold_frontend → build_frontend → create_submission_zip → upload_build → submit_for_review
|
|
10
|
+
* 6. get_app_status (wait for admin approval)
|
|
11
|
+
* 7. publish_app → request_auth_code → get_access_token
|
|
12
|
+
* 8. scaffold_backend → generate_api_routes
|
|
13
|
+
*/
|
|
14
|
+
export interface GuardResult {
|
|
15
|
+
allowed: boolean;
|
|
16
|
+
message?: string;
|
|
17
|
+
requiredTools?: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function checkToolPrerequisites(toolName: string): GuardResult;
|
|
20
|
+
//# sourceMappingURL=tool-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-guard.d.ts","sourceRoot":"","sources":["../../src/services/tool-guard.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAoPD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAWpE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { getSession, hasCompleted, hasCompletedAny } from './session-state.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
// ── Prerequisite rules ──────────────────────────────────────────────────
|
|
4
|
+
const TOOL_PREREQUISITES = {
|
|
5
|
+
// ── Phase 1: App Creation (auth → categories → create_app) ──────────
|
|
6
|
+
get_categories: () => {
|
|
7
|
+
if (!isAuthenticated()) {
|
|
8
|
+
return blocked('You must authenticate first. Call developer_login.', ['developer_login']);
|
|
9
|
+
}
|
|
10
|
+
return allowed();
|
|
11
|
+
},
|
|
12
|
+
create_app: () => {
|
|
13
|
+
if (!isAuthenticated()) {
|
|
14
|
+
return blocked('You must authenticate first. Call developer_login.', ['developer_login']);
|
|
15
|
+
}
|
|
16
|
+
if (!hasCompleted('get_categories')) {
|
|
17
|
+
return blocked('You must call get_categories first so the developer can choose app categories.', ['get_categories']);
|
|
18
|
+
}
|
|
19
|
+
return allowed();
|
|
20
|
+
},
|
|
21
|
+
// ── Phase 2: Scope Selection (gather requirements → define scopes) ──
|
|
22
|
+
gather_requirements: () => {
|
|
23
|
+
if (!getSession().context.appId) {
|
|
24
|
+
return blocked('You must create an app first (create_app) before gathering requirements.', ['get_categories', 'create_app']);
|
|
25
|
+
}
|
|
26
|
+
return allowed();
|
|
27
|
+
},
|
|
28
|
+
define_app_requirements: () => {
|
|
29
|
+
if (!getSession().context.appId) {
|
|
30
|
+
return blocked('You must create an app first (create_app) before defining scopes.', ['get_categories', 'create_app']);
|
|
31
|
+
}
|
|
32
|
+
if (!hasCompleted('gather_requirements')) {
|
|
33
|
+
return blocked('You must call gather_requirements first to analyze what the developer wants to build, ' +
|
|
34
|
+
'then use the recommended scopes with define_app_requirements.', ['gather_requirements']);
|
|
35
|
+
}
|
|
36
|
+
return allowed();
|
|
37
|
+
},
|
|
38
|
+
// ── Phase 3: Webhooks (needs scopes confirmed) ─────────────────────
|
|
39
|
+
get_webhook_topics: () => {
|
|
40
|
+
if (!isAuthenticated()) {
|
|
41
|
+
return blocked('You must authenticate first.', ['developer_login']);
|
|
42
|
+
}
|
|
43
|
+
if (!getSession().context.scopesConfirmed) {
|
|
44
|
+
return blocked('You must confirm scopes first (define_app_requirements) before configuring webhooks. ' +
|
|
45
|
+
'Webhook events are suggested based on the selected scopes.', ['define_app_requirements']);
|
|
46
|
+
}
|
|
47
|
+
return allowed();
|
|
48
|
+
},
|
|
49
|
+
create_webhooks: () => {
|
|
50
|
+
if (!getSession().context.appId) {
|
|
51
|
+
return blocked('You must create an app first before configuring webhooks.', ['create_app']);
|
|
52
|
+
}
|
|
53
|
+
if (!getSession().context.scopesConfirmed) {
|
|
54
|
+
return blocked('You must confirm scopes first. Webhook events are based on selected scopes.', ['define_app_requirements']);
|
|
55
|
+
}
|
|
56
|
+
return allowed();
|
|
57
|
+
},
|
|
58
|
+
// ── Phase 4: Scaffold & Build ───────────────────────────────────────
|
|
59
|
+
scaffold_frontend: () => {
|
|
60
|
+
if (!getSession().context.appId) {
|
|
61
|
+
return blocked('You must create an app first before scaffolding.', ['create_app']);
|
|
62
|
+
}
|
|
63
|
+
if (!getSession().context.scopesConfirmed) {
|
|
64
|
+
return blocked('You must define and confirm app scopes before scaffolding.', ['define_app_requirements']);
|
|
65
|
+
}
|
|
66
|
+
return allowed();
|
|
67
|
+
},
|
|
68
|
+
build_frontend: () => {
|
|
69
|
+
if (!hasCompleted('scaffold_frontend')) {
|
|
70
|
+
return blocked('You must scaffold the frontend first before building.', ['scaffold_frontend']);
|
|
71
|
+
}
|
|
72
|
+
return allowed();
|
|
73
|
+
},
|
|
74
|
+
create_submission_zip: () => {
|
|
75
|
+
if (!hasCompleted('build_frontend')) {
|
|
76
|
+
return blocked('You must build the frontend first before creating a submission zip.', ['build_frontend']);
|
|
77
|
+
}
|
|
78
|
+
return allowed();
|
|
79
|
+
},
|
|
80
|
+
upload_build: () => {
|
|
81
|
+
if (!hasCompleted('build_frontend')) {
|
|
82
|
+
return blocked('You must build the frontend first before uploading.', ['build_frontend']);
|
|
83
|
+
}
|
|
84
|
+
return allowed();
|
|
85
|
+
},
|
|
86
|
+
submit_for_review: () => {
|
|
87
|
+
if (!getSession().context.buildUploaded && !hasCompleted('upload_build')) {
|
|
88
|
+
return blocked('You must upload the build first before submitting for review.', ['upload_build']);
|
|
89
|
+
}
|
|
90
|
+
return allowed();
|
|
91
|
+
},
|
|
92
|
+
// ── Phase 5: Publish & OAuth ────────────────────────────────────────
|
|
93
|
+
publish_app: () => {
|
|
94
|
+
if (!getSession().context.appApproved) {
|
|
95
|
+
return blocked('The app must be approved by admin before publishing. Call get_app_status to check.', ['get_app_status']);
|
|
96
|
+
}
|
|
97
|
+
return allowed();
|
|
98
|
+
},
|
|
99
|
+
request_auth_code: () => {
|
|
100
|
+
if (!getSession().context.appPublished && !hasCompleted('publish_app')) {
|
|
101
|
+
return blocked('You must publish the app first before starting the OAuth flow.', ['publish_app']);
|
|
102
|
+
}
|
|
103
|
+
return allowed();
|
|
104
|
+
},
|
|
105
|
+
get_access_token: () => {
|
|
106
|
+
if (!hasCompleted('request_auth_code')) {
|
|
107
|
+
return blocked('You must request an authorization code first.', ['request_auth_code']);
|
|
108
|
+
}
|
|
109
|
+
return allowed();
|
|
110
|
+
},
|
|
111
|
+
// ── Phase 6: Backend Codegen ────────────────────────────────────────
|
|
112
|
+
scaffold_backend: () => {
|
|
113
|
+
if (!getSession().context.oauthCompleted) {
|
|
114
|
+
return blocked('You must complete the OAuth flow (get_access_token) before scaffolding the backend.', ['get_access_token']);
|
|
115
|
+
}
|
|
116
|
+
return allowed();
|
|
117
|
+
},
|
|
118
|
+
generate_api_routes: () => {
|
|
119
|
+
if (!hasCompleted('scaffold_backend')) {
|
|
120
|
+
return blocked('You must scaffold the backend first before generating API routes.', ['scaffold_backend']);
|
|
121
|
+
}
|
|
122
|
+
return allowed();
|
|
123
|
+
},
|
|
124
|
+
// ── Management tools (auth only) ───────────────────────────────────
|
|
125
|
+
update_app: () => requireAuth(),
|
|
126
|
+
delete_app: () => requireAuth(),
|
|
127
|
+
list_apps: () => requireAuth(),
|
|
128
|
+
get_app: () => requireAuth(),
|
|
129
|
+
list_webhooks: () => requireAuth(),
|
|
130
|
+
toggle_webhook: () => requireAuth(),
|
|
131
|
+
delete_webhook: () => requireAuth(),
|
|
132
|
+
get_app_status: () => requireAuth(),
|
|
133
|
+
refresh_access_token: () => requireAuth(),
|
|
134
|
+
check_token_status: () => requireAuth(),
|
|
135
|
+
validate_build: () => requireAuth(),
|
|
136
|
+
};
|
|
137
|
+
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
138
|
+
function allowed() {
|
|
139
|
+
return { allowed: true };
|
|
140
|
+
}
|
|
141
|
+
function blocked(message, requiredTools) {
|
|
142
|
+
return { allowed: false, message, requiredTools };
|
|
143
|
+
}
|
|
144
|
+
function isAuthenticated() {
|
|
145
|
+
return hasCompletedAny(['developer_login', 'developer_verify_otp']);
|
|
146
|
+
}
|
|
147
|
+
function requireAuth() {
|
|
148
|
+
if (!isAuthenticated()) {
|
|
149
|
+
return blocked('You must authenticate first. Call developer_login or developer_signup.', ['developer_login']);
|
|
150
|
+
}
|
|
151
|
+
return allowed();
|
|
152
|
+
}
|
|
153
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
154
|
+
export function checkToolPrerequisites(toolName) {
|
|
155
|
+
const check = TOOL_PREREQUISITES[toolName];
|
|
156
|
+
if (!check)
|
|
157
|
+
return allowed();
|
|
158
|
+
const result = check();
|
|
159
|
+
if (!result.allowed) {
|
|
160
|
+
logger.info(`GUARD BLOCKED: ${toolName} — ${result.message} (need: [${result.requiredTools?.join(', ')}])`);
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=tool-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-guard.js","sourceRoot":"","sources":["../../src/services/tool-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements-store.d.ts","sourceRoot":"","sources":["../../src/store/requirements-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAgCzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"requirements-store.d.ts","sourceRoot":"","sources":["../../src/store/requirements-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAgCzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,GAAG,IAAI,CAOnF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAM1E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAEpE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAWvF;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,GACpE,OAAO,CAaT;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQzD"}
|
|
@@ -24,21 +24,34 @@ function writeStore(store) {
|
|
|
24
24
|
writeFileSync(REQUIREMENTS_FILE, JSON.stringify(store, null, 2), 'utf-8');
|
|
25
25
|
}
|
|
26
26
|
export function saveRequirements(appId, requirements) {
|
|
27
|
+
logger.info(`[requirements-store] saveRequirements: appId=${appId}, scopes=${JSON.stringify(requirements.scopes)}, data_needs=${JSON.stringify(requirements.data_needs)}, client_id=${requirements.client_id}, project_path=${requirements.project_path}`);
|
|
27
28
|
const store = readStore();
|
|
28
29
|
requirements.updated_at = new Date().toISOString();
|
|
29
30
|
store.requirements[appId] = requirements;
|
|
30
31
|
writeStore(store);
|
|
31
|
-
logger.info(`Requirements saved for app_id: ${appId}
|
|
32
|
+
logger.info(`[requirements-store] Requirements saved for app_id: ${appId}. Store now has ${Object.keys(store.requirements).length} entries.`);
|
|
32
33
|
}
|
|
33
34
|
export function getRequirements(appId) {
|
|
34
|
-
|
|
35
|
+
logger.info(`[requirements-store] getRequirements: appId=${appId}`);
|
|
36
|
+
const store = readStore();
|
|
37
|
+
const req = store.requirements[appId];
|
|
38
|
+
logger.info(`[requirements-store] getRequirements result: found=${!!req}${req ? `, scopes=${JSON.stringify(req.scopes)}, data_needs=${JSON.stringify(req.data_needs)}, client_id=${req.client_id}` : ''}`);
|
|
39
|
+
return req;
|
|
35
40
|
}
|
|
36
41
|
export function getAllRequirements() {
|
|
37
42
|
return readStore().requirements;
|
|
38
43
|
}
|
|
39
44
|
export function getRequirementsByClientId(clientId) {
|
|
45
|
+
logger.info(`[requirements-store] getRequirementsByClientId: clientId=${clientId}`);
|
|
40
46
|
const store = readStore();
|
|
41
|
-
|
|
47
|
+
const allEntries = Object.entries(store.requirements);
|
|
48
|
+
logger.info(`[requirements-store] Searching ${allEntries.length} entries for client_id=${clientId}`);
|
|
49
|
+
for (const [appId, req] of allEntries) {
|
|
50
|
+
logger.info(`[requirements-store] appId=${appId}, req.client_id=${req.client_id}, match=${req.client_id === clientId}`);
|
|
51
|
+
}
|
|
52
|
+
const result = Object.values(store.requirements).find((r) => r.client_id === clientId);
|
|
53
|
+
logger.info(`[requirements-store] getRequirementsByClientId result: found=${!!result}${result ? `, project_path=${result.project_path}` : ''}`);
|
|
54
|
+
return result;
|
|
42
55
|
}
|
|
43
56
|
export function updateRequirementsField(appId, updates) {
|
|
44
57
|
const store = readStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements-store.js","sourceRoot":"","sources":["../../src/store/requirements-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C,SAAS,cAAc;IACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAA4B;IAC9C,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,YAA6B;IAC3E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,YAAY,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;IACzC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"requirements-store.js","sourceRoot":"","sources":["../../src/store/requirements-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/store/token-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiCrD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../src/store/token-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAiCrD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAOpE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAOlE;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,SAAS,CAOxD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAE1D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQrD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,SAAM,GAAG,OAAO,CAI/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CA0BjF"}
|
|
@@ -25,14 +25,20 @@ function writeStore(store) {
|
|
|
25
25
|
writeFileSync(TOKENS_FILE, JSON.stringify(store, null, 2), 'utf-8');
|
|
26
26
|
}
|
|
27
27
|
export function saveToken(clientId, token) {
|
|
28
|
+
logger.info(`[token-store] saveToken called: clientId=${clientId}, merchant_id=${token.merchant_id}, scopes=${token.scopes?.join(',')}`);
|
|
28
29
|
const store = readStore();
|
|
30
|
+
logger.info(`[token-store] Current store has ${Object.keys(store.tokens).length} tokens: [${Object.keys(store.tokens).join(', ')}]`);
|
|
29
31
|
store.tokens[clientId] = token;
|
|
30
32
|
writeStore(store);
|
|
31
|
-
logger.info(`Token saved for client_id: ${clientId}
|
|
33
|
+
logger.info(`[token-store] Token saved for client_id: ${clientId}. Store now has ${Object.keys(store.tokens).length} tokens.`);
|
|
32
34
|
}
|
|
33
35
|
export function getToken(clientId) {
|
|
36
|
+
logger.info(`[token-store] getToken called: clientId=${clientId} (type: ${typeof clientId})`);
|
|
34
37
|
const store = readStore();
|
|
35
|
-
|
|
38
|
+
logger.info(`[token-store] Store has ${Object.keys(store.tokens).length} tokens: [${Object.keys(store.tokens).join(', ')}]`);
|
|
39
|
+
const token = store.tokens[clientId];
|
|
40
|
+
logger.info(`[token-store] getToken result: found=${!!token}${token ? `, merchant_id=${token.merchant_id}, scopes=${token.scopes?.join(',')}` : ''}`);
|
|
41
|
+
return token;
|
|
36
42
|
}
|
|
37
43
|
export function getLatestToken() {
|
|
38
44
|
const store = readStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/store/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C,SAAS,cAAc;IACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB;IACvC,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,KAAkB;IAC5D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/store/token-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@ NODE_ENV=development
|
|
|
6
6
|
RATIO_APP_ID=your_app_id
|
|
7
7
|
RATIO_APP_SECRET=your_app_secret
|
|
8
8
|
RATIO_REDIRECT_URI=http://localhost:3000/auth/callback
|
|
9
|
-
|
|
9
|
+
# Dev: https://dev-os-ecosystem.dev.gokwik.io
|
|
10
|
+
# Prod: https://gkx.gokwik.co/aes
|
|
11
|
+
RATIO_API_BASE_URL=https://gkx.gokwik.co/aes
|
|
10
12
|
RATIO_API_VERSION=v1
|
|
11
13
|
|
|
12
14
|
# OAuth Tokens (auto-filled by MCP after OAuth flow)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolDefinition } from './index.js';
|
|
2
|
+
import { allDevTools } from './index.js';
|
|
3
|
+
/**
|
|
4
|
+
* The unified agent-chat tool definition.
|
|
5
|
+
* This single tool replaces all 24+ individual dev tools by orchestrating them intelligently.
|
|
6
|
+
*/
|
|
7
|
+
export declare const agentChatTool: ToolDefinition;
|
|
8
|
+
export { allDevTools };
|
|
9
|
+
//# sourceMappingURL=agent-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/tools/agent-chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoWzC;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,cA+G3B,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|