fridayy 1.0.2 → 1.2.1

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 (41) hide show
  1. package/README.md +12 -0
  2. package/dist/adapters/nodejs/ast-scanner.d.ts +5 -3
  3. package/dist/adapters/nodejs/ast-scanner.d.ts.map +1 -1
  4. package/dist/adapters/nodejs/ast-scanner.js +104 -29
  5. package/dist/adapters/nodejs/ast-scanner.js.map +1 -1
  6. package/dist/adapters/rest/adapter.d.ts +1 -0
  7. package/dist/adapters/rest/adapter.d.ts.map +1 -1
  8. package/dist/adapters/rest/adapter.js +118 -2
  9. package/dist/adapters/rest/adapter.js.map +1 -1
  10. package/dist/cli/commands/doctor.d.ts.map +1 -1
  11. package/dist/cli/commands/doctor.js +45 -4
  12. package/dist/cli/commands/doctor.js.map +1 -1
  13. package/dist/cli/commands/generate.d.ts.map +1 -1
  14. package/dist/cli/commands/generate.js +11 -1
  15. package/dist/cli/commands/generate.js.map +1 -1
  16. package/dist/cli/commands/init.d.ts +1 -1
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +58 -8
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/scan.d.ts.map +1 -1
  21. package/dist/cli/commands/scan.js +33 -17
  22. package/dist/cli/commands/scan.js.map +1 -1
  23. package/dist/cli/commands/use.d.ts +7 -0
  24. package/dist/cli/commands/use.d.ts.map +1 -0
  25. package/dist/cli/commands/use.js +89 -0
  26. package/dist/cli/commands/use.js.map +1 -0
  27. package/dist/cli/index.d.ts.map +1 -1
  28. package/dist/cli/index.js +4 -1
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/ui/banner.js +1 -1
  31. package/dist/core/discovery/project-scanner.d.ts.map +1 -1
  32. package/dist/core/discovery/project-scanner.js +29 -19
  33. package/dist/core/discovery/project-scanner.js.map +1 -1
  34. package/dist/core/tool-generator/generator.d.ts +3 -1
  35. package/dist/core/tool-generator/generator.d.ts.map +1 -1
  36. package/dist/core/tool-generator/generator.js +33 -5
  37. package/dist/core/tool-generator/generator.js.map +1 -1
  38. package/package.json +2 -1
  39. package/point/AI_INSTRUCTIONS.md +130 -0
  40. package/point/PROJECT_CONTEXT.md +61 -0
  41. package/point/QUICK_START_PROMPT.md +27 -0
package/README.md CHANGED
@@ -76,6 +76,9 @@ npx fridayy init
76
76
  ### 2. The 4-Step Developer Experience
77
77
 
78
78
  ```bash
79
+ # How-To & Architecture guide
80
+ fridayy use
81
+
79
82
  # Step 1: Initialize Fridayy configuration in your project
80
83
  fridayy init
81
84
 
@@ -94,6 +97,15 @@ fridayy start
94
97
 
95
98
  ---
96
99
 
100
+ ### šŸ¤– Pointing AI Assistants to Your Project
101
+
102
+ Simply point any LLM or AI agent (Cursor, Claude, ChatGPT, Gemini, Antigravity) to:
103
+ šŸ‘‰ **[`point/AI_INSTRUCTIONS.md`](point/AI_INSTRUCTIONS.md)**
104
+
105
+ The AI will automatically understand your architecture, discover endpoints, generate tools, configure safe permissions, and run the MCP server autonomously!
106
+
107
+ ---
108
+
97
109
  ## šŸ—ļø Architecture
98
110
 
99
111
  fridayy is built with a modular, extensible architecture designed for future pluggability:
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Fridayy - Node.js Route Scanner
3
- * Scans JavaScript and TypeScript files for Express/Fastify/Koa route declarations.
2
+ * Fridayy - Enhanced Node.js Route Scanner
3
+ * Scans JavaScript and TypeScript files for Express, Fastify, Koa, NestJS, and Next.js route declarations.
4
4
  */
5
5
  export interface DiscoveredRoute {
6
6
  method: string;
@@ -12,10 +12,12 @@ export interface DiscoveredRoute {
12
12
  }
13
13
  export declare class NodeJsScanner {
14
14
  /**
15
- * Scans a directory recursively for Express/Fastify routes.
15
+ * Scans a directory recursively for Express/Fastify/Koa/NestJS/Next.js routes.
16
16
  */
17
17
  scanDirectory(rootDir: string, maxFiles?: number): Promise<DiscoveredRoute[]>;
18
18
  scanFileContent(content: string, filePath: string): DiscoveredRoute[];
19
+ private scanNextJsRouteFile;
20
+ private extractComment;
19
21
  private collectSourceFiles;
20
22
  }
21
23
  //# sourceMappingURL=ast-scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-scanner.d.ts","sourceRoot":"","sources":["../../../src/adapters/nodejs/ast-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAID,qBAAa,aAAa;IACxB;;OAEG;IACU,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiBhF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAkD5E,OAAO,CAAC,kBAAkB;CA8B3B"}
1
+ {"version":3,"file":"ast-scanner.d.ts","sourceRoot":"","sources":["../../../src/adapters/nodejs/ast-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAWD,qBAAa,aAAa;IACxB;;OAEG;IACU,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA8BhF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAsD5E,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,kBAAkB;CA8B3B"}
@@ -1,15 +1,20 @@
1
1
  /**
2
- * Fridayy - Node.js Route Scanner
3
- * Scans JavaScript and TypeScript files for Express/Fastify/Koa route declarations.
2
+ * Fridayy - Enhanced Node.js Route Scanner
3
+ * Scans JavaScript and TypeScript files for Express, Fastify, Koa, NestJS, and Next.js route declarations.
4
4
  */
5
5
  import fs from 'node:fs';
6
6
  import path from 'node:path';
7
- const ROUTE_PATTERN = /(?:app|router|fastify|server)\.(get|post|put|patch|delete|options|head)\s*\(\s*(['"`])([^'"`]+)\2/g;
7
+ // Matches: app.get('/path', ...), router.post('/path', ...), server.delete('/path', ...), etc.
8
+ const ROUTE_PATTERN = /(?:app|router|fastify|server|api|v1|route|r|expressRouter)\.(get|post|put|patch|delete|options|head)\s*\(\s*(['"`])([^'"`]+)\2/gi;
9
+ // Matches NestJS / TypeScript decorators: @Get('/path'), @Post('/path'), etc.
10
+ const DECORATOR_PATTERN = /@(Get|Post|Put|Patch|Delete|Options|Head)\s*\(\s*(?:(['"`])([^'"`]*)\2)?\s*\)/gi;
11
+ // Matches chained routes: .route('/users').get(...).post(...)
12
+ const CHAINED_ROUTE_PATTERN = /\.route\s*\(\s*(['"`])([^'"`]+)\1\s*\)/gi;
8
13
  export class NodeJsScanner {
9
14
  /**
10
- * Scans a directory recursively for Express/Fastify routes.
15
+ * Scans a directory recursively for Express/Fastify/Koa/NestJS/Next.js routes.
11
16
  */
12
- async scanDirectory(rootDir, maxFiles = 200) {
17
+ async scanDirectory(rootDir, maxFiles = 500) {
13
18
  const discovered = [];
14
19
  const files = this.collectSourceFiles(rootDir, maxFiles);
15
20
  for (const file of files) {
@@ -17,16 +22,28 @@ export class NodeJsScanner {
17
22
  const content = fs.readFileSync(file, 'utf-8');
18
23
  const fileRoutes = this.scanFileContent(content, file);
19
24
  discovered.push(...fileRoutes);
25
+ // Also check if this file is a Next.js App Router / Pages API route
26
+ const nextJsRoutes = this.scanNextJsRouteFile(content, file, rootDir);
27
+ discovered.push(...nextJsRoutes);
20
28
  }
21
29
  catch {
22
30
  // Skip unreadable files
23
31
  }
24
32
  }
25
- return discovered;
33
+ // Deduplicate routes by method + path
34
+ const uniqueMap = new Map();
35
+ for (const r of discovered) {
36
+ const key = `${r.method}:${r.path}`;
37
+ if (!uniqueMap.has(key)) {
38
+ uniqueMap.set(key, r);
39
+ }
40
+ }
41
+ return Array.from(uniqueMap.values());
26
42
  }
27
43
  scanFileContent(content, filePath) {
28
44
  const routes = [];
29
45
  const lines = content.split('\n');
46
+ // 1. Standard Express / Fastify / Koa routes
30
47
  for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
31
48
  const line = lines[lineIndex];
32
49
  ROUTE_PATTERN.lastIndex = 0;
@@ -34,27 +51,7 @@ export class NodeJsScanner {
34
51
  while ((match = ROUTE_PATTERN.exec(line)) !== null) {
35
52
  const method = match[1].toUpperCase();
36
53
  const routePath = match[3];
37
- // Extract comment from previous lines
38
- let comment;
39
- if (lineIndex > 0) {
40
- const prevLine = lines[lineIndex - 1].trim();
41
- if (prevLine.startsWith('//')) {
42
- comment = prevLine.replace(/^\/\/\s*/, '');
43
- }
44
- else if (prevLine.endsWith('*/')) {
45
- // Find start of JSDoc block
46
- let jsDocStart = lineIndex - 1;
47
- while (jsDocStart > 0 && !lines[jsDocStart].includes('/**')) {
48
- jsDocStart--;
49
- }
50
- const block = lines.slice(jsDocStart, lineIndex).join('\n');
51
- const summaryMatch = block.match(/@summary\s+([^\n*]+)/i) || block.match(/\*\s*([^*@\n/]+)/);
52
- if (summaryMatch) {
53
- comment = summaryMatch[1].trim();
54
- }
55
- }
56
- }
57
- // Extract path parameters like :id or :userId
54
+ const comment = this.extractComment(lines, lineIndex);
58
55
  const pathParams = (routePath.match(/:[a-zA-Z0-9_]+/g) || []).map(p => p.slice(1));
59
56
  routes.push({
60
57
  method,
@@ -65,9 +62,87 @@ export class NodeJsScanner {
65
62
  pathParams
66
63
  });
67
64
  }
65
+ // 2. NestJS Decorator style routes: @Get('/users')
66
+ DECORATOR_PATTERN.lastIndex = 0;
67
+ let decMatch;
68
+ while ((decMatch = DECORATOR_PATTERN.exec(line)) !== null) {
69
+ const method = decMatch[1].toUpperCase();
70
+ let subPath = decMatch[3] || '';
71
+ if (subPath && !subPath.startsWith('/')) {
72
+ subPath = `/${subPath}`;
73
+ }
74
+ const finalPath = subPath || '/';
75
+ const comment = this.extractComment(lines, lineIndex);
76
+ const pathParams = (finalPath.match(/:[a-zA-Z0-9_]+/g) || []).map(p => p.slice(1));
77
+ routes.push({
78
+ method,
79
+ path: finalPath,
80
+ file: filePath,
81
+ line: lineIndex + 1,
82
+ description: comment,
83
+ pathParams
84
+ });
85
+ }
68
86
  }
69
87
  return routes;
70
88
  }
89
+ scanNextJsRouteFile(content, filePath, rootDir) {
90
+ const routes = [];
91
+ const rel = path.relative(rootDir, filePath).replace(/\\/g, '/');
92
+ // Check Next.js App Router: app/api/.../route.ts
93
+ const appRouterMatch = rel.match(/(?:src\/)?app\/(api\/.*?)\/route\.[jt]sx?$/i);
94
+ if (appRouterMatch) {
95
+ const apiPath = `/${appRouterMatch[1]}`;
96
+ const methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
97
+ for (const m of methods) {
98
+ const regex = new RegExp(`export\\s+(?:async\\s+)?function\\s+${m}\\b`, 'i');
99
+ if (regex.test(content)) {
100
+ routes.push({
101
+ method: m,
102
+ path: apiPath,
103
+ file: filePath,
104
+ line: 1,
105
+ description: `Next.js App Router ${m} ${apiPath}`,
106
+ pathParams: (apiPath.match(/\[([a-zA-Z0-9_]+)\]/g) || []).map(p => p.slice(1, -1))
107
+ });
108
+ }
109
+ }
110
+ }
111
+ // Check Next.js Pages Router: pages/api/...
112
+ const pagesRouterMatch = rel.match(/(?:src\/)?pages\/(api\/.*?)\.[jt]sx?$/i);
113
+ if (pagesRouterMatch) {
114
+ const apiPath = `/${pagesRouterMatch[1]}`.replace(/\/index$/, '');
115
+ routes.push({
116
+ method: 'POST', // Default handler
117
+ path: apiPath,
118
+ file: filePath,
119
+ line: 1,
120
+ description: `Next.js Pages API ${apiPath}`,
121
+ pathParams: (apiPath.match(/\[([a-zA-Z0-9_]+)\]/g) || []).map(p => p.slice(1, -1))
122
+ });
123
+ }
124
+ return routes;
125
+ }
126
+ extractComment(lines, lineIndex) {
127
+ if (lineIndex <= 0)
128
+ return undefined;
129
+ const prevLine = lines[lineIndex - 1].trim();
130
+ if (prevLine.startsWith('//')) {
131
+ return prevLine.replace(/^\/\/\s*/, '');
132
+ }
133
+ else if (prevLine.endsWith('*/')) {
134
+ let jsDocStart = lineIndex - 1;
135
+ while (jsDocStart > 0 && !lines[jsDocStart].includes('/**')) {
136
+ jsDocStart--;
137
+ }
138
+ const block = lines.slice(jsDocStart, lineIndex).join('\n');
139
+ const summaryMatch = block.match(/@summary\s+([^\n*]+)/i) || block.match(/\*\s*([^*@\n/]+)/);
140
+ if (summaryMatch) {
141
+ return summaryMatch[1].trim();
142
+ }
143
+ }
144
+ return undefined;
145
+ }
71
146
  collectSourceFiles(dir, maxFiles, collected = []) {
72
147
  if (!fs.existsSync(dir))
73
148
  return collected;
@@ -81,13 +156,13 @@ export class NodeJsScanner {
81
156
  const fullPath = path.join(dir, entry.name);
82
157
  if (entry.isDirectory()) {
83
158
  // Ignore heavy or irrelevant folders
84
- if (!['node_modules', 'dist', '.git', '.gemini', 'coverage', 'build', '.next'].includes(entry.name)) {
159
+ if (!['node_modules', 'dist', '.git', '.gemini', 'coverage', 'build', '.next', '.turbo', '.cache'].includes(entry.name)) {
85
160
  this.collectSourceFiles(fullPath, maxFiles, collected);
86
161
  }
87
162
  }
88
163
  else if (entry.isFile()) {
89
164
  const ext = path.extname(entry.name).toLowerCase();
90
- if (['.js', '.ts', '.mjs', '.cjs'].includes(ext) && !entry.name.endsWith('.d.ts') && !entry.name.includes('.test.')) {
165
+ if (['.js', '.ts', '.mjs', '.cjs', '.jsx', '.tsx'].includes(ext) && !entry.name.endsWith('.d.ts') && !entry.name.includes('.test.') && !entry.name.includes('.spec.')) {
91
166
  collected.push(fullPath);
92
167
  }
93
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ast-scanner.js","sourceRoot":"","sources":["../../../src/adapters/nodejs/ast-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAW7B,MAAM,aAAa,GAAG,oGAAoG,CAAC;AAE3H,MAAM,OAAO,aAAa;IACxB;;OAEG;IACI,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,QAAQ,GAAG,GAAG;QACxD,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACvD,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,eAAe,CAAC,OAAe,EAAE,QAAgB;QACtD,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,IAAI,KAA6B,CAAC;YAElC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE3B,sCAAsC;gBACtC,IAAI,OAA2B,CAAC;gBAChC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC7C,CAAC;yBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBACnC,4BAA4B;wBAC5B,IAAI,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;wBAC/B,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC5D,UAAU,EAAE,CAAC;wBACf,CAAC;wBACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;wBAC7F,IAAI,YAAY,EAAE,CAAC;4BACjB,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACnC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnF,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM;oBACN,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS,GAAG,CAAC;oBACnB,WAAW,EAAE,OAAO;oBACpB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,GAAW,EAAE,QAAgB,EAAE,YAAsB,EAAE;QAChF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;oBAAE,MAAM;gBAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,qCAAqC;oBACrC,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBACnD,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACpH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"ast-scanner.js","sourceRoot":"","sources":["../../../src/adapters/nodejs/ast-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAW7B,+FAA+F;AAC/F,MAAM,aAAa,GAAG,kIAAkI,CAAC;AAEzJ,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,iFAAiF,CAAC;AAE5G,8DAA8D;AAC9D,MAAM,qBAAqB,GAAG,0CAA0C,CAAC;AAEzE,MAAM,OAAO,aAAa;IACxB;;OAEG;IACI,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,QAAQ,GAAG,GAAG;QACxD,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACvD,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAE/B,oEAAoE;gBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBACtE,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAEM,eAAe,CAAC,OAAe,EAAE,QAAgB;QACtD,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,6CAA6C;QAC7C,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,IAAI,KAA6B,CAAC;YAElC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnF,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM;oBACN,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS,GAAG,CAAC;oBACnB,WAAW,EAAE,OAAO;oBACpB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;YAED,mDAAmD;YACnD,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;YAChC,IAAI,QAAgC,CAAC;YACrC,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,CAAC;gBACD,MAAM,SAAS,GAAG,OAAO,IAAI,GAAG,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnF,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM;oBACN,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS,GAAG,CAAC;oBACnB,WAAW,EAAE,OAAO;oBACpB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,OAAe,EAAE,QAAgB,EAAE,OAAe;QAC5E,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEjE,iDAAiD;QACjD,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,uCAAuC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7E,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC;wBACP,WAAW,EAAE,sBAAsB,CAAC,IAAI,OAAO,EAAE;wBACjD,UAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qBACnF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC7E,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM,EAAE,kBAAkB;gBAClC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC;gBACP,WAAW,EAAE,qBAAqB,OAAO,EAAE;gBAC3C,UAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACnF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,KAAe,EAAE,SAAiB;QACvD,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;YAC/B,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5D,UAAU,EAAE,CAAC;YACf,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC7F,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,kBAAkB,CAAC,GAAW,EAAE,QAAgB,EAAE,YAAsB,EAAE;QAChF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,QAAQ;oBAAE,MAAM;gBAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,qCAAqC;oBACrC,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxH,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBACnD,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACtK,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Fridayy - Generic REST Adapter
3
3
  * Adapter for executing and declaring arbitrary REST endpoints.
4
+ * Automatically provisions baseline operational tools when connected to an API URL.
4
5
  */
5
6
  import { BaseAdapter, AdapterScanContext, AdapterGenerationContext, AdapterExecutionContext } from '../base.js';
6
7
  import { FridayyToolDefinition, ToolExecutionResult } from '../../core/schema/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/rest/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAMpC,qBAAa,WAAY,SAAQ,WAAW;IAC1C,SAAgB,IAAI,UAAU;IAC9B,SAAgB,WAAW,qDAAqD;IAEhF,OAAO,CAAC,YAAY,CAAuB;IAE9B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQlF,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAKlF,WAAW,CACtB,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,mBAAmB,CAAC;CAmBhC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/rest/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAOpC,qBAAa,WAAY,SAAQ,WAAW;IAC1C,SAAgB,IAAI,UAAU;IAC9B,SAAgB,WAAW,qDAAqD;IAEhF,OAAO,CAAC,YAAY,CAAuB;IAE9B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQlF,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAmGlF,WAAW,CACtB,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,mBAAmB,CAAC;CAqDhC"}
@@ -1,12 +1,14 @@
1
1
  /**
2
2
  * Fridayy - Generic REST Adapter
3
3
  * Adapter for executing and declaring arbitrary REST endpoints.
4
+ * Automatically provisions baseline operational tools when connected to an API URL.
4
5
  */
5
6
  import { BaseAdapter } from '../base.js';
6
7
  import { buildHttpRequest } from '../openapi/request-builder.js';
7
8
  import { defaultRestExecutor } from './executor.js';
8
9
  import { AuthenticationManager } from '../../core/authentication/manager.js';
9
10
  import { defaultSecretResolver } from '../../core/authentication/secret-resolver.js';
11
+ import { buildUnifiedInputSchema } from '../../core/schema/json-schema.js';
10
12
  export class RestAdapter extends BaseAdapter {
11
13
  name = 'rest';
12
14
  description = 'Adapter for REST APIs and custom HTTP endpoints';
@@ -19,12 +21,126 @@ export class RestAdapter extends BaseAdapter {
19
21
  };
20
22
  }
21
23
  async generateTools(context) {
22
- // REST adapter returns tools defined in config or manual definitions
23
- return [];
24
+ const baseUrl = defaultSecretResolver.resolveBaseUrl(context.config?.source?.baseUrl || context.config?.source?.url) ||
25
+ 'http://localhost:3000';
26
+ const tools = [];
27
+ // 1. Health check tool
28
+ tools.push({
29
+ id: 'tool_check_api_health',
30
+ name: 'check_api_health',
31
+ description: `Ping target API at ${baseUrl} to check availability and health status.`,
32
+ inputSchema: buildUnifiedInputSchema({
33
+ parameters: {
34
+ query: [
35
+ {
36
+ name: 'path',
37
+ in: 'query',
38
+ required: false,
39
+ schema: { type: 'string', default: '/health' },
40
+ description: 'Health probe path (e.g. /health or /)'
41
+ }
42
+ ]
43
+ }
44
+ }),
45
+ source: {
46
+ type: 'rest',
47
+ method: 'GET',
48
+ path: '/health',
49
+ baseUrl
50
+ },
51
+ permissions: {
52
+ type: 'READ',
53
+ read: true,
54
+ write: false,
55
+ destructive: false
56
+ },
57
+ risk: 'low',
58
+ status: 'APPROVED',
59
+ metadata: {
60
+ createdAt: new Date().toISOString(),
61
+ autoGenerated: true
62
+ }
63
+ });
64
+ // 2. Dynamic REST Query Tool
65
+ tools.push({
66
+ id: 'tool_call_api_endpoint',
67
+ name: 'call_api_endpoint',
68
+ description: `Execute a structured HTTP request to the target API at ${baseUrl}.`,
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {
72
+ path: {
73
+ type: 'string',
74
+ description: 'Relative endpoint path (e.g. /api/users or /products/123)'
75
+ },
76
+ method: {
77
+ type: 'string',
78
+ enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
79
+ default: 'GET',
80
+ description: 'HTTP method to execute'
81
+ },
82
+ queryParams: {
83
+ type: 'object',
84
+ description: 'Optional query parameters as key-value pairs',
85
+ additionalProperties: true
86
+ },
87
+ body: {
88
+ type: 'object',
89
+ description: 'Optional JSON payload for POST/PUT/PATCH requests',
90
+ additionalProperties: true
91
+ }
92
+ },
93
+ required: ['path']
94
+ },
95
+ source: {
96
+ type: 'rest',
97
+ method: 'GET',
98
+ path: '/',
99
+ baseUrl
100
+ },
101
+ permissions: {
102
+ type: 'WRITE',
103
+ read: true,
104
+ write: true,
105
+ destructive: false
106
+ },
107
+ risk: 'medium',
108
+ status: 'APPROVED',
109
+ metadata: {
110
+ createdAt: new Date().toISOString(),
111
+ autoGenerated: true
112
+ }
113
+ });
114
+ return tools;
24
115
  }
25
116
  async executeTool(tool, input, context = {}) {
26
117
  const authManager = new AuthenticationManager(context.config);
27
118
  const baseUrl = defaultSecretResolver.resolveBaseUrl(context.config?.source?.baseUrl);
119
+ // If dynamic endpoint execution
120
+ if (tool.name === 'call_api_endpoint' && input.path) {
121
+ const dynamicTool = {
122
+ ...tool,
123
+ source: {
124
+ ...tool.source,
125
+ method: input.method || 'GET',
126
+ path: input.path.startsWith('/') ? input.path : `/${input.path}`
127
+ }
128
+ };
129
+ const preparedReq = buildHttpRequest(dynamicTool, {
130
+ ...(input.queryParams || {}),
131
+ ...(input.body || {})
132
+ }, baseUrl);
133
+ if (context.headers) {
134
+ Object.assign(preparedReq.headers, context.headers);
135
+ }
136
+ authManager.applyAuth(tool.authentication, {
137
+ headers: preparedReq.headers,
138
+ queryParams: {}
139
+ });
140
+ return await this.restExecutor.execute(preparedReq, tool.name, {
141
+ timeoutMs: context.timeoutMs
142
+ });
143
+ }
28
144
  const preparedReq = buildHttpRequest(tool, input, baseUrl);
29
145
  if (context.headers) {
30
146
  Object.assign(preparedReq.headers, context.headers);
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/rest/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EAIZ,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1B,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,iDAAiD,CAAC;IAExE,YAAY,GAAG,mBAAmB,CAAC;IAEpC,KAAK,CAAC,MAAM,CAAC,OAA2B;QAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3F,OAAO;YACL,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;SACtD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAiC;QAC1D,qEAAqE;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,IAA2B,EAC3B,KAA0B,EAC1B,UAAmC,EAAE;QAErC,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEtF,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAE3D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;YACzC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE;YAC7D,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/rest/adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8H5D"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmK5D"}
@@ -2,6 +2,8 @@
2
2
  * Fridayy - Doctor Command
3
3
  * Diagnoses project configuration, environment variables, target API connectivity, and permissions.
4
4
  */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
5
7
  import chalk from 'chalk';
6
8
  import { defaultConfigManager } from '../../config/config-manager.js';
7
9
  import { defaultSecretResolver } from '../../core/authentication/secret-resolver.js';
@@ -35,7 +37,46 @@ export function registerDoctorCommand(program) {
35
37
  console.log(chalk.red('āœ–') + ' Configuration: fridayy.config.json not found (run `fridayy init`)');
36
38
  errorCount++;
37
39
  }
38
- // 2. Check tools file
40
+ // 2. Check Source Adapter & Files
41
+ if (config) {
42
+ const sourceType = config.source?.type || 'openapi';
43
+ if (sourceType === 'openapi') {
44
+ const specPath = path.resolve(rootDir, config.source?.path || './openapi.yaml');
45
+ if (fs.existsSync(specPath)) {
46
+ console.log(chalk.green('āœ“') + ` Source Adapter: OpenAPI specification verified at ${config.source.path}`);
47
+ passedCount++;
48
+ }
49
+ else {
50
+ console.log(chalk.yellow('⚠') +
51
+ ` Source Adapter: OpenAPI spec not found at "${config.source?.path || './openapi.yaml'}".` +
52
+ chalk.gray(' Run `fridayy init --source nodejs` or specify `--spec <path>`.'));
53
+ warnCount++;
54
+ }
55
+ }
56
+ else if (sourceType === 'nodejs') {
57
+ const pkgExists = fs.existsSync(path.join(rootDir, 'package.json'));
58
+ if (pkgExists) {
59
+ console.log(chalk.green('āœ“') + ' Source Adapter: Node.js workspace detected and active');
60
+ passedCount++;
61
+ }
62
+ else {
63
+ console.log(chalk.yellow('⚠') + ' Source Adapter: No package.json found in current directory');
64
+ warnCount++;
65
+ }
66
+ }
67
+ else if (sourceType === 'rest') {
68
+ const hasUrl = Boolean(config.source?.baseUrl);
69
+ if (hasUrl) {
70
+ console.log(chalk.green('āœ“') + ` Source Adapter: REST API configured at ${config.source.baseUrl}`);
71
+ passedCount++;
72
+ }
73
+ else {
74
+ console.log(chalk.yellow('⚠') + ' Source Adapter: No baseUrl configured for REST adapter');
75
+ warnCount++;
76
+ }
77
+ }
78
+ }
79
+ // 3. Check tools file
39
80
  const tools = defaultConfigManager.loadTools(rootDir);
40
81
  if (tools.length > 0) {
41
82
  console.log(chalk.green('āœ“') + ` Tools Definition: fridayy.tools.json found with ${tools.length} tools`);
@@ -45,7 +86,7 @@ export function registerDoctorCommand(program) {
45
86
  console.log(chalk.yellow('⚠') + ' Tools Definition: fridayy.tools.json is empty or not generated (run `fridayy generate`)');
46
87
  warnCount++;
47
88
  }
48
- // 3. Check Approval Breakdown & Destructive Safety
89
+ // 4. Check Approval Breakdown & Destructive Safety
49
90
  if (tools.length > 0) {
50
91
  const approved = tools.filter(t => t.status === 'APPROVED').length;
51
92
  const pending = tools.filter(t => t.status === 'PENDING').length;
@@ -67,7 +108,7 @@ export function registerDoctorCommand(program) {
67
108
  }
68
109
  }
69
110
  }
70
- // 4. Check Environment Variables & Secrets
111
+ // 5. Check Environment Variables & Secrets
71
112
  if (tools.length > 0) {
72
113
  const authSchemes = tools
73
114
  .filter(t => t.authentication?.required)
@@ -90,7 +131,7 @@ export function registerDoctorCommand(program) {
90
131
  passedCount++;
91
132
  }
92
133
  }
93
- // 5. Target API Connectivity Check
134
+ // 6. Target API Connectivity Check
94
135
  const baseUrl = defaultSecretResolver.resolveBaseUrl(config?.source?.baseUrl);
95
136
  if (baseUrl) {
96
137
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD9D"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE9D"}
@@ -15,6 +15,7 @@ export function registerGenerateCommand(program) {
15
15
  .description('Generate candidate MCP tools from configured API sources')
16
16
  .option('--force', 'Regenerate all tools and reset approval statuses')
17
17
  .option('--spec <path>', 'Path to OpenAPI specification')
18
+ .option('--source <type>', 'Override source adapter type: openapi, nodejs, rest')
18
19
  .action(async (options) => {
19
20
  printBanner();
20
21
  const rootDir = process.cwd();
@@ -26,6 +27,9 @@ export function registerGenerateCommand(program) {
26
27
  if (options.spec) {
27
28
  config.source.path = options.spec;
28
29
  }
30
+ if (options.source) {
31
+ config.source.type = options.source;
32
+ }
29
33
  const spinner = ora({
30
34
  text: chalk.cyan('Generating standardized MCP tools and mapping schemas...'),
31
35
  spinner: 'dots12',
@@ -46,11 +50,17 @@ export function registerGenerateCommand(program) {
46
50
  const tools = await defaultToolGenerator.generate({
47
51
  config,
48
52
  rootDir,
53
+ sourceTypeOverride: options.source,
49
54
  preserveStatuses: preserveMap
50
55
  });
51
56
  const savedPath = defaultConfigManager.saveTools(tools, config.source.type, rootDir);
52
57
  spinner.succeed(`Generated ${chalk.bold.green(tools.length)} MCP tools.`);
53
- console.log('\n' + createToolsTable(tools) + '\n');
58
+ if (tools.length > 0) {
59
+ console.log('\n' + createToolsTable(tools) + '\n');
60
+ }
61
+ else {
62
+ console.log(chalk.yellow('\n⚠ 0 tools generated. No endpoints discovered or configured.'));
63
+ }
54
64
  logger.success(`Saved tools definition to ${chalk.bold.cyan(savedPath)}`);
55
65
  console.log(`\nNext step: Run ${chalk.cyan.bold('fridayy review')} to approve/reject candidate tools.\n`);
56
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Fridayy - Init Command
3
- * Initializes fridayy.config.json in the current project.
3
+ * Initializes fridayy.config.json with smart source detection and manual overrides.
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  export declare function registerInitCommand(program: Command): void;