@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.
Files changed (100) hide show
  1. package/dist/data/scope-webhook-map.d.ts +26 -0
  2. package/dist/data/scope-webhook-map.d.ts.map +1 -0
  3. package/dist/data/scope-webhook-map.js +117 -0
  4. package/dist/data/scope-webhook-map.js.map +1 -0
  5. package/dist/index.d.ts +5 -4
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -13
  8. package/dist/index.js.map +1 -1
  9. package/dist/orchestrated-index.d.ts +4 -9
  10. package/dist/orchestrated-index.d.ts.map +1 -1
  11. package/dist/orchestrated-index.js +6 -14
  12. package/dist/orchestrated-index.js.map +1 -1
  13. package/dist/orchestrated-server.d.ts +14 -9
  14. package/dist/orchestrated-server.d.ts.map +1 -1
  15. package/dist/orchestrated-server.js +86 -48
  16. package/dist/orchestrated-server.js.map +1 -1
  17. package/dist/services/session-state.d.ts +50 -16
  18. package/dist/services/session-state.d.ts.map +1 -1
  19. package/dist/services/session-state.js +195 -140
  20. package/dist/services/session-state.js.map +1 -1
  21. package/dist/services/tool-guard.d.ts +29 -9
  22. package/dist/services/tool-guard.d.ts.map +1 -1
  23. package/dist/services/tool-guard.js +83 -60
  24. package/dist/services/tool-guard.js.map +1 -1
  25. package/dist/templates/backend/.env.example +3 -0
  26. package/dist/templates/backend/package.json +2 -1
  27. package/dist/templates/backend/src/app.module.ts +2 -0
  28. package/dist/templates/backend/src/oauth/oauth-callback.controller.ts +62 -0
  29. package/dist/templates/backend/src/oauth/oauth-callback.module.ts +10 -0
  30. package/dist/templates/backend/src/oauth/oauth-callback.service.ts +158 -0
  31. package/dist/templates/frontend/.env.example +1 -1
  32. package/dist/templates/frontend/README.md +16 -0
  33. package/dist/templates/frontend/eslint.config.js +29 -0
  34. package/dist/templates/frontend/index.html +4 -4
  35. package/dist/templates/frontend/jsconfig.json +22 -0
  36. package/dist/templates/frontend/package.json +14 -11
  37. package/dist/templates/frontend/public/favicon.svg +1 -0
  38. package/dist/templates/frontend/public/icons.svg +24 -0
  39. package/dist/templates/frontend/src/App.css +184 -0
  40. package/dist/templates/frontend/src/App.jsx +121 -0
  41. package/dist/templates/frontend/src/assets/hero.png +0 -0
  42. package/dist/templates/frontend/src/assets/react.svg +1 -0
  43. package/dist/templates/frontend/src/assets/vite.svg +1 -0
  44. package/dist/templates/frontend/src/index.css +94 -31
  45. package/dist/templates/frontend/src/main.jsx +10 -0
  46. package/dist/templates/frontend/vite.config.js +19 -0
  47. package/dist/tools/app-management.d.ts.map +1 -1
  48. package/dist/tools/app-management.js +73 -13
  49. package/dist/tools/app-management.js.map +1 -1
  50. package/dist/tools/auth.d.ts.map +1 -1
  51. package/dist/tools/auth.js +15 -3
  52. package/dist/tools/auth.js.map +1 -1
  53. package/dist/tools/codegen.d.ts.map +1 -1
  54. package/dist/tools/codegen.js +312 -18
  55. package/dist/tools/codegen.js.map +1 -1
  56. package/dist/tools/gather-requirements.d.ts.map +1 -1
  57. package/dist/tools/gather-requirements.js +19 -19
  58. package/dist/tools/gather-requirements.js.map +1 -1
  59. package/dist/tools/get-status.d.ts +3 -0
  60. package/dist/tools/get-status.d.ts.map +1 -0
  61. package/dist/tools/get-status.js +122 -0
  62. package/dist/tools/get-status.js.map +1 -0
  63. package/dist/tools/hookdeck.d.ts +3 -0
  64. package/dist/tools/hookdeck.d.ts.map +1 -0
  65. package/dist/tools/hookdeck.js +101 -0
  66. package/dist/tools/hookdeck.js.map +1 -0
  67. package/dist/tools/index.d.ts.map +1 -1
  68. package/dist/tools/index.js +7 -3
  69. package/dist/tools/index.js.map +1 -1
  70. package/dist/tools/lifecycle.d.ts.map +1 -1
  71. package/dist/tools/lifecycle.js +22 -11
  72. package/dist/tools/lifecycle.js.map +1 -1
  73. package/dist/tools/reference-data.d.ts.map +1 -1
  74. package/dist/tools/reference-data.js +6 -4
  75. package/dist/tools/reference-data.js.map +1 -1
  76. package/dist/tools/requirements.d.ts.map +1 -1
  77. package/dist/tools/requirements.js +84 -5
  78. package/dist/tools/requirements.js.map +1 -1
  79. package/dist/tools/scaffold.d.ts.map +1 -1
  80. package/dist/tools/scaffold.js +30 -16
  81. package/dist/tools/scaffold.js.map +1 -1
  82. package/dist/tools/submission.js +4 -4
  83. package/dist/tools/submission.js.map +1 -1
  84. package/dist/tools/webhooks.d.ts +25 -0
  85. package/dist/tools/webhooks.d.ts.map +1 -1
  86. package/dist/tools/webhooks.js +143 -93
  87. package/dist/tools/webhooks.js.map +1 -1
  88. package/dist/utils/logger.js +17 -17
  89. package/dist/utils/logger.js.map +1 -1
  90. package/package.json +2 -2
  91. package/dist/templates/frontend/src/App.tsx +0 -32
  92. package/dist/templates/frontend/src/components/Layout.tsx +0 -53
  93. package/dist/templates/frontend/src/context/AuthContext.tsx +0 -59
  94. package/dist/templates/frontend/src/main.tsx +0 -16
  95. package/dist/templates/frontend/src/pages/Callback.tsx +0 -53
  96. package/dist/templates/frontend/src/pages/Dashboard.tsx +0 -24
  97. package/dist/templates/frontend/src/pages/Login.tsx +0 -42
  98. package/dist/templates/frontend/src/services/api.ts +0 -48
  99. package/dist/templates/frontend/tsconfig.json +0 -21
  100. package/dist/templates/frontend/vite.config.ts +0 -15
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5B,yCAAyC;IACzC,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAgBD,qDAAqD;AACrD,wBAAgB,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC,CAEnD;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAyOzE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
@@ -5,246 +5,284 @@ function createFreshSession() {
5
5
  return {
6
6
  completedTools: new Set(),
7
7
  context: {},
8
+ apps: {},
8
9
  lastActivity: Date.now(),
9
10
  };
10
11
  }
12
+ function getOrCreateAppState(appId) {
13
+ if (!session.apps[appId]) {
14
+ session.apps[appId] = {
15
+ completedTools: new Set(),
16
+ context: {},
17
+ };
18
+ logger.info(`[session-state] Created app state for: ${appId}`);
19
+ }
20
+ return session.apps[appId];
21
+ }
11
22
  // ── Public API ──────────────────────────────────────────────────────────
12
- /** Get current session state (read-only snapshot) */
23
+ /** Get current session state (read-only reference) */
13
24
  export function getSession() {
14
25
  return session;
15
26
  }
27
+ /** Get state for a specific app */
28
+ export function getAppState(appId) {
29
+ return session.apps[appId];
30
+ }
31
+ /** Get the currently active app ID */
32
+ export function getActiveAppId() {
33
+ return session.context.activeAppId || session.context.appId;
34
+ }
35
+ /** Set the active app ID */
36
+ export function setActiveAppId(appId) {
37
+ session.context.activeAppId = appId;
38
+ }
16
39
  /** Record that a tool completed successfully and extract relevant context */
17
40
  export function recordToolSuccess(toolName, result) {
18
41
  session.completedTools.add(toolName);
19
42
  session.lastActivity = Date.now();
20
- // Extract context from tool results
21
43
  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
- }
44
+ logger.info(`[session-state] recordToolSuccess: ${toolName}`);
29
45
  if (!data) {
30
- logger.warn(`[session-state] result is null/undefined for ${toolName} — skipping context extraction`);
46
+ logger.warn(`[session-state] result is null/undefined for ${toolName}`);
31
47
  return;
32
48
  }
33
49
  switch (toolName) {
34
50
  case 'developer_login': {
35
- // Login returns token and developer info
36
51
  const dev = data['developer'];
37
- logger.info(`[session-state] ${toolName}: data.developer exists=${!!dev}, data.developer keys=${dev ? JSON.stringify(Object.keys(dev)) : 'N/A'}`);
38
52
  if (dev?.['id'])
39
53
  session.context.developerId = String(dev['id']);
40
54
  if (data['token'])
41
55
  session.context.developerToken = String(data['token']);
42
- logger.info(`[session-state] ${toolName}: extracted developerId=${session.context.developerId}, hasToken=${!!session.context.developerToken}`);
56
+ logger.info(`[session-state] ${toolName}: developerId=${session.context.developerId}`);
43
57
  break;
44
58
  }
45
59
  case 'developer_signup': {
46
- // Signup returns email confirmation — capture email for OTP step
47
60
  const signupEmail = data['email'];
48
- if (signupEmail) {
61
+ if (signupEmail)
49
62
  session.context.signupEmail = signupEmail;
50
- logger.info(`[session-state] developer_signup: captured signupEmail=${signupEmail}`);
51
- }
52
63
  break;
53
64
  }
54
65
  case 'developer_verify_otp': {
55
- // OTP verified — account is now active
56
- logger.info(`[session-state] developer_verify_otp: account verified for ${session.context.signupEmail}`);
66
+ logger.info(`[session-state] developer_verify_otp: account verified`);
67
+ break;
68
+ }
69
+ case 'setup_hookdeck': {
70
+ const hookdeckUrl = data['hookdeck_url'];
71
+ const callbackUrl = data['callback_url'];
72
+ const hookdeckSourceName = data['hookdeck_source_name'];
73
+ if (hookdeckUrl) {
74
+ session.context.hookdeckUrl = hookdeckUrl;
75
+ session.context.callbackUrl = callbackUrl || hookdeckUrl;
76
+ session.context.hookdeckSourceName = hookdeckSourceName;
77
+ session.context.useOwnCallback = false;
78
+ const appId = getActiveAppId();
79
+ if (appId) {
80
+ const appState = getOrCreateAppState(appId);
81
+ appState.context.hookdeckUrl = hookdeckUrl;
82
+ appState.context.callbackUrl = callbackUrl || hookdeckUrl;
83
+ appState.context.hookdeckSourceName = hookdeckSourceName;
84
+ appState.context.useOwnCallback = false;
85
+ }
86
+ logger.info(`[session-state] setup_hookdeck: hookdeckUrl=${hookdeckUrl}, callbackUrl=${callbackUrl}, sourceName=${hookdeckSourceName}`);
87
+ }
57
88
  break;
58
89
  }
59
90
  case 'create_app': {
60
91
  const app = data['application'];
61
- logger.info(`[session-state] create_app: data.application exists=${!!app}`);
62
- if (app) {
63
- logger.info(`[session-state] create_app: application keys=${JSON.stringify(Object.keys(app))}`);
64
- logger.info(`[session-state] create_app: application.id=${app['id']}, application.name=${app['name']}`);
65
- logger.info(`[session-state] create_app: application.client_id=${app['client_id']}, application.clientId=${app['clientId']}`);
66
- logger.info(`[session-state] create_app: application.client_secret exists=${!!app['client_secret']}, application.clientSecret exists=${!!app['clientSecret']}`);
92
+ if (app?.['id']) {
93
+ const appId = String(app['id']);
94
+ session.context.appId = appId;
95
+ session.context.activeAppId = appId;
96
+ const appState = getOrCreateAppState(appId);
97
+ appState.completedTools.add('create_app');
98
+ if (app['name']) {
99
+ session.context.appName = String(app['name']);
100
+ appState.context.appName = String(app['name']);
101
+ }
102
+ if (app['client_id']) {
103
+ session.context.clientId = String(app['client_id']);
104
+ appState.context.clientId = String(app['client_id']);
105
+ }
106
+ if (app['client_secret']) {
107
+ session.context.clientSecret = String(app['client_secret']);
108
+ appState.context.clientSecret = String(app['client_secret']);
109
+ }
110
+ logger.info(`[session-state] create_app: appId=${appId}, appName=${appState.context.appName}`);
67
111
  }
68
- else {
69
- // Maybe the response is structured differently — log what we actually got
70
- logger.warn(`[session-state] create_app: NO 'application' key found! Checking alternate structures...`);
71
- logger.info(`[session-state] create_app: data.data=${JSON.stringify(data['data'])?.slice(0, 500)}`);
72
- logger.info(`[session-state] create_app: data.app=${JSON.stringify(data['app'])?.slice(0, 500)}`);
73
- logger.info(`[session-state] create_app: data.id=${data['id']}, data.client_id=${data['client_id']}, data.clientId=${data['clientId']}`);
112
+ break;
113
+ }
114
+ case 'gather_requirements': {
115
+ const appId = getActiveAppId();
116
+ if (appId) {
117
+ const appState = getOrCreateAppState(appId);
118
+ appState.completedTools.add('gather_requirements');
119
+ // Store app description if provided
120
+ if (data['app_description']) {
121
+ session.context.appDescription = String(data['app_description']);
122
+ appState.context.appDescription = String(data['app_description']);
123
+ }
74
124
  }
75
- if (app?.['id'])
76
- session.context.appId = String(app['id']);
77
- if (app?.['name'])
78
- session.context.appName = String(app['name']);
79
- if (app?.['client_id'])
80
- session.context.clientId = String(app['client_id']);
81
- if (app?.['client_secret'])
82
- session.context.clientSecret = String(app['client_secret']);
83
- logger.info(`[session-state] create_app RESULT: appId=${session.context.appId}, appName=${session.context.appName}, clientId=${session.context.clientId}, hasClientSecret=${!!session.context.clientSecret}`);
84
125
  break;
85
126
  }
86
127
  case 'define_app_requirements': {
87
- // Only mark confirmed if the call was a confirmation (not preview)
88
128
  const confirmed = data['confirmed'] ?? data['status'];
89
129
  if (confirmed === true || confirmed === 'confirmed') {
90
130
  session.context.scopesConfirmed = true;
91
- // Capture the confirmed scope codes for webhook suggestion
92
- // The tool returns: { requirements: { scopes: [...] } } when confirmed
93
131
  const reqs = data['requirements'];
94
132
  const scopes = reqs?.['scopes'] ?? data['scopes'];
95
133
  if (Array.isArray(scopes)) {
96
134
  session.context.confirmedScopes = scopes.map(String);
97
- logger.info(`Confirmed scopes captured: [${session.context.confirmedScopes.join(', ')}]`);
135
+ }
136
+ const appId = getActiveAppId();
137
+ if (appId) {
138
+ const appState = getOrCreateAppState(appId);
139
+ appState.completedTools.add('define_app_requirements');
140
+ appState.context.scopesConfirmed = true;
141
+ appState.context.confirmedScopes = session.context.confirmedScopes;
98
142
  }
99
143
  }
100
144
  break;
101
145
  }
102
146
  case 'create_webhooks': {
103
- if (data['success'])
147
+ if (data['success']) {
104
148
  session.context.webhooksConfigured = true;
149
+ const appId = getActiveAppId();
150
+ if (appId) {
151
+ const appState = getOrCreateAppState(appId);
152
+ appState.completedTools.add('create_webhooks');
153
+ appState.context.webhooksConfigured = true;
154
+ if (data['webhook_id']) {
155
+ appState.context.webhookIds = appState.context.webhookIds || [];
156
+ appState.context.webhookIds.push(String(data['webhook_id']));
157
+ }
158
+ }
159
+ }
160
+ break;
161
+ }
162
+ case 'scaffold_frontend':
163
+ case 'scaffold_backend': {
164
+ const path = data['project_path'] ?? data['path'];
165
+ if (path) {
166
+ session.context.projectPath = String(path);
167
+ const appId = getActiveAppId();
168
+ if (appId) {
169
+ const appState = getOrCreateAppState(appId);
170
+ appState.completedTools.add(toolName);
171
+ appState.context.projectPath = String(path);
172
+ }
173
+ }
174
+ break;
175
+ }
176
+ case 'build_frontend': {
177
+ const buildPath = data['build_path'] ?? data['output_path'];
178
+ if (buildPath)
179
+ session.context.buildPath = String(buildPath);
180
+ recordAppTool(toolName);
181
+ break;
182
+ }
183
+ case 'validate_build': {
184
+ recordAppTool(toolName);
185
+ break;
186
+ }
187
+ case 'create_submission_zip': {
188
+ const zipPath = data['zip_path'] ?? data['path'];
189
+ if (zipPath)
190
+ session.context.zipPath = String(zipPath);
191
+ recordAppTool(toolName);
105
192
  break;
106
193
  }
107
194
  case 'upload_build': {
108
195
  if (data['success'])
109
196
  session.context.buildUploaded = true;
110
- // Capture version ID from upload response
111
- // Backend returns: { success, message, data: { id, version, status, ... } }
112
- // MCP tool wraps it as: { success, response: <backend response> }
113
197
  const uploadResponse = data['response'];
114
198
  const responseData = uploadResponse?.['data'];
115
- logger.info(`[session-state] upload_build response keys: ${JSON.stringify(Object.keys(data))}`);
116
- logger.info(`[session-state] upload_build uploadResponse keys: ${uploadResponse ? JSON.stringify(Object.keys(uploadResponse)) : 'undefined'}`);
117
- logger.info(`[session-state] upload_build responseData keys: ${responseData ? JSON.stringify(Object.keys(responseData)) : 'undefined'}`);
118
199
  const versionId = responseData?.['id'] ??
119
200
  responseData?.['versionId'] ??
120
201
  uploadResponse?.id ??
121
- uploadResponse?.versionId ??
122
202
  data['version_id'] ??
123
203
  data['versionId'];
124
- if (versionId) {
204
+ if (versionId)
125
205
  session.context.latestVersionId = String(versionId);
126
- logger.info(`[session-state] Captured latestVersionId from upload_build: ${session.context.latestVersionId}`);
127
- }
128
- else {
129
- logger.warn(`[session-state] Could NOT capture versionId from upload_build. Full data: ${JSON.stringify(data).slice(0, 500)}`);
130
- }
206
+ recordAppTool(toolName);
131
207
  break;
132
208
  }
133
209
  case 'submit_for_review': {
134
210
  if (data['success'])
135
211
  session.context.submittedForReview = true;
212
+ recordAppTool(toolName);
136
213
  break;
137
214
  }
138
215
  case 'get_app_status': {
139
216
  const status = data['status'] ?? data['application']?.['status'];
140
217
  if (status === 'approved' || status === 'APPROVED') {
141
218
  session.context.appApproved = true;
219
+ const appId = getActiveAppId();
220
+ if (appId)
221
+ getOrCreateAppState(appId).context.appApproved = true;
142
222
  }
143
- // Capture latest version ID — the tool now returns it as a top-level field
144
223
  const latestVerId = data['latestVersionId'];
145
- logger.info(`[session-state] get_app_status latestVersionId from tool: ${latestVerId}`);
146
- if (latestVerId) {
224
+ if (latestVerId)
147
225
  session.context.latestVersionId = String(latestVerId);
148
- logger.info(`[session-state] Captured latestVersionId: ${session.context.latestVersionId}`);
149
- }
150
- else {
151
- // Fallback: dig into application response
152
- const appResponse = data['application'];
153
- const appData = appResponse?.data || appResponse;
154
- const vers = appData?.versions;
155
- if (vers?.[0]?.['id']) {
156
- session.context.latestVersionId = String(vers[0]['id']);
157
- logger.info(`[session-state] Captured latestVersionId from fallback: ${session.context.latestVersionId}`);
158
- }
159
- else {
160
- logger.warn(`[session-state] Could NOT capture latestVersionId from get_app_status. data keys: ${JSON.stringify(Object.keys(data))}`);
161
- }
162
- }
163
226
  break;
164
227
  }
165
228
  case 'publish_app': {
166
- if (data['success'])
229
+ if (data['success']) {
167
230
  session.context.appPublished = true;
231
+ const appId = getActiveAppId();
232
+ if (appId)
233
+ getOrCreateAppState(appId).context.appPublished = true;
234
+ }
235
+ recordAppTool(toolName);
168
236
  break;
169
237
  }
170
238
  case 'request_auth_code': {
171
- logger.info(`[session-state] request_auth_code: data keys=${JSON.stringify(Object.keys(data))}`);
172
- logger.info(`[session-state] request_auth_code: data.auth_code=${data['auth_code']}, data.code=${data['code']}`);
173
239
  const authCode = data['auth_code'] ?? data['code'];
174
- if (authCode) {
240
+ if (authCode)
175
241
  session.context.authCode = String(authCode);
176
- logger.info(`[session-state] request_auth_code: captured authCode=${String(authCode).substring(0, 12)}...`);
177
- }
178
- else {
179
- logger.warn(`[session-state] request_auth_code: NO auth code found in result!`);
180
- }
181
242
  const redirectUri = data['redirect_uri'];
182
- if (redirectUri) {
243
+ if (redirectUri)
183
244
  session.context.authCodeRedirectUri = String(redirectUri);
184
- }
185
- logger.info(`[session-state] request_auth_code: authCode=${session.context.authCode?.substring(0, 12)}..., redirectUri=${session.context.authCodeRedirectUri}`);
245
+ recordAppTool(toolName);
186
246
  break;
187
247
  }
188
248
  case 'get_access_token': {
189
- logger.info(`[session-state] get_access_token: data keys=${JSON.stringify(Object.keys(data))}`);
190
- logger.info(`[session-state] get_access_token: data.success=${data['success']}, data.access_token exists=${!!data['access_token']}`);
191
- logger.info(`[session-state] get_access_token: data.tokens=${JSON.stringify(data['tokens'])?.slice(0, 200)}`);
192
- logger.info(`[session-state] get_access_token: data.token_injected_to_project=${data['token_injected_to_project']}`);
193
249
  if (data['success'] || data['access_token']) {
194
250
  session.context.oauthCompleted = true;
195
- logger.info(`[session-state] get_access_token: oauthCompleted set to TRUE`);
196
- }
197
- else {
198
- logger.warn(`[session-state] get_access_token: oauthCompleted NOT set — neither success nor access_token found`);
251
+ const appId = getActiveAppId();
252
+ if (appId)
253
+ getOrCreateAppState(appId).context.oauthCompleted = true;
199
254
  }
255
+ recordAppTool(toolName);
200
256
  break;
201
257
  }
202
- case 'scaffold_frontend':
203
- case 'scaffold_backend': {
204
- logger.info(`[session-state] ${toolName}: data keys=${JSON.stringify(Object.keys(data))}`);
205
- logger.info(`[session-state] ${toolName}: data.project_path=${data['project_path']}, data.path=${data['path']}, data.backend_path=${data['backend_path']}`);
206
- logger.info(`[session-state] ${toolName}: data.token_injected=${data['token_injected']}`);
207
- const path = data['project_path'] ?? data['path'];
208
- if (path) {
209
- session.context.projectPath = String(path);
210
- logger.info(`[session-state] ${toolName}: projectPath set to ${session.context.projectPath}`);
211
- }
212
- else {
213
- logger.warn(`[session-state] ${toolName}: NO project_path found in result!`);
214
- }
215
- break;
216
- }
217
- case 'build_frontend': {
218
- const buildPath = data['build_path'] ?? data['output_path'];
219
- if (buildPath)
220
- session.context.buildPath = String(buildPath);
221
- break;
222
- }
223
- case 'create_submission_zip': {
224
- const zipPath = data['zip_path'] ?? data['path'];
225
- if (zipPath)
226
- session.context.zipPath = String(zipPath);
258
+ default: {
259
+ // For any other tool, just record at app level
260
+ recordAppTool(toolName);
227
261
  break;
228
262
  }
229
263
  }
230
- // Always log a full session snapshot after every tool — this is the key debugging info
264
+ logSnapshot(toolName);
265
+ }
266
+ /** Helper: record a tool completion in the active app's state */
267
+ function recordAppTool(toolName) {
268
+ const appId = getActiveAppId();
269
+ if (appId) {
270
+ getOrCreateAppState(appId).completedTools.add(toolName);
271
+ }
272
+ }
273
+ /** Log session snapshot for debugging */
274
+ function logSnapshot(toolName) {
231
275
  logger.info(`[session-state] ── SNAPSHOT after ${toolName} ──`);
232
276
  logger.info(`[session-state] completedTools=[${[...session.completedTools].join(', ')}]`);
233
- logger.info(`[session-state] context.authMode=${session.context.authMode}`);
234
- logger.info(`[session-state] context.signupEmail=${session.context.signupEmail}`);
235
- logger.info(`[session-state] context.appId=${session.context.appId}`);
236
- logger.info(`[session-state] context.appName=${session.context.appName}`);
237
- logger.info(`[session-state] context.clientId=${session.context.clientId}`);
238
- logger.info(`[session-state] context.hasClientSecret=${!!session.context.clientSecret}`);
239
- logger.info(`[session-state] context.scopesConfirmed=${session.context.scopesConfirmed}`);
240
- logger.info(`[session-state] context.confirmedScopes=${JSON.stringify(session.context.confirmedScopes)}`);
241
- logger.info(`[session-state] context.webhooksConfigured=${session.context.webhooksConfigured}`);
242
- logger.info(`[session-state] context.appApproved=${session.context.appApproved}`);
243
- logger.info(`[session-state] context.appPublished=${session.context.appPublished}`);
244
- logger.info(`[session-state] context.oauthCompleted=${session.context.oauthCompleted}`);
245
- logger.info(`[session-state] context.authCode=${session.context.authCode?.substring(0, 12) ?? 'undefined'}...`);
246
- logger.info(`[session-state] context.projectPath=${session.context.projectPath}`);
247
- logger.info(`[session-state] context.latestVersionId=${session.context.latestVersionId}`);
277
+ logger.info(`[session-state] activeAppId=${session.context.activeAppId}`);
278
+ logger.info(`[session-state] appCount=${Object.keys(session.apps).length}`);
279
+ const appId = getActiveAppId();
280
+ if (appId && session.apps[appId]) {
281
+ const app = session.apps[appId];
282
+ logger.info(`[session-state] app[${appId}].completedTools=[${[...app.completedTools].join(', ')}]`);
283
+ logger.info(`[session-state] app[${appId}].scopesConfirmed=${app.context.scopesConfirmed}`);
284
+ logger.info(`[session-state] app[${appId}].webhooksConfigured=${app.context.webhooksConfigured}`);
285
+ }
248
286
  logger.info(`[session-state] ── END SNAPSHOT ──`);
249
287
  }
250
288
  /** Reset session (for testing or starting a new flow) */
@@ -252,12 +290,29 @@ export function resetSession() {
252
290
  logger.info('Session state reset');
253
291
  session = createFreshSession();
254
292
  }
255
- /** Check if a specific tool has been completed */
293
+ /** Check if a specific tool has been completed (global or active app) */
256
294
  export function hasCompleted(toolName) {
257
- return session.completedTools.has(toolName);
295
+ if (session.completedTools.has(toolName))
296
+ return true;
297
+ const appId = getActiveAppId();
298
+ if (appId && session.apps[appId]) {
299
+ return session.apps[appId].completedTools.has(toolName);
300
+ }
301
+ return false;
258
302
  }
259
303
  /** Check if ANY of the given tools has been completed */
260
304
  export function hasCompletedAny(toolNames) {
261
- return toolNames.some((t) => session.completedTools.has(t));
305
+ return toolNames.some((t) => hasCompleted(t));
306
+ }
307
+ /** Get all completed tools (global + active app) */
308
+ export function getAllCompletedTools() {
309
+ const all = new Set(session.completedTools);
310
+ const appId = getActiveAppId();
311
+ if (appId && session.apps[appId]) {
312
+ for (const tool of session.apps[appId].completedTools) {
313
+ all.add(tool);
314
+ }
315
+ }
316
+ return [...all];
262
317
  }
263
318
  //# sourceMappingURL=session-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,40 @@
1
1
  /**
2
2
  * Tool Guard — prerequisite validation for MCP tools.
3
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_frontendcreate_submission_zipupload_build → submit_for_review
10
- * 6. get_app_status (wait for admin approval)
11
- * 7. publish_apprequest_auth_codeget_access_token
12
- * 8. scaffold_backendgenerate_api_routes
4
+ * Tool-first architecture: each tool is exposed individually. The guard
5
+ * checks prerequisites before allowing execution and returns structured
6
+ * errors with hints so the LLM can self-correct.
7
+ *
8
+ * Enforced dependency graph:
9
+ * logincreate_appgather_requirementsdefine_app_requirements
10
+ * webhooks (optional, scope-based recommendations)
11
+ * scaffold_frontendbuildvalidate → zip → upload → submit
12
+ * review_waitpublish
13
+ * → OAuth (auth_code → access_token)
14
+ * → scaffold_backend → generate_api_routes (+ webhook handlers)
15
+ *
16
+ * Read-only tools (no prerequisites): get_categories, get_status, get_webhook_topics (browsing)
13
17
  */
14
18
  export interface GuardResult {
15
19
  allowed: boolean;
16
20
  message?: string;
17
21
  requiredTools?: string[];
22
+ /** Full chain of tools needed to unblock, in order */
23
+ chain?: string[];
24
+ hint?: string;
18
25
  }
26
+ /**
27
+ * Check whether a tool's prerequisites are met.
28
+ * Returns structured result with error details if blocked.
29
+ */
19
30
  export declare function checkToolPrerequisites(toolName: string): GuardResult;
31
+ /**
32
+ * Get the full prerequisite chain for a tool (for status display).
33
+ * Returns tool names that must be completed before this tool can run.
34
+ */
35
+ export declare function getToolPrerequisiteNames(toolName: string): string[];
36
+ /**
37
+ * Get all tool names that have prerequisites defined.
38
+ */
39
+ export declare function getGuardedToolNames(): string[];
20
40
  //# sourceMappingURL=tool-guard.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"tool-guard.d.ts","sourceRoot":"","sources":["../../src/services/tool-guard.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4PD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAWpE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAKnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}