fridayy 1.0.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/bin/fridayy.js +12 -0
  4. package/dist/adapters/base.d.ts +40 -0
  5. package/dist/adapters/base.d.ts.map +1 -0
  6. package/dist/adapters/base.js +7 -0
  7. package/dist/adapters/base.js.map +1 -0
  8. package/dist/adapters/manual/adapter.d.ts +18 -0
  9. package/dist/adapters/manual/adapter.d.ts.map +1 -0
  10. package/dist/adapters/manual/adapter.js +52 -0
  11. package/dist/adapters/manual/adapter.js.map +1 -0
  12. package/dist/adapters/nodejs/adapter.d.ts +19 -0
  13. package/dist/adapters/nodejs/adapter.d.ts.map +1 -0
  14. package/dist/adapters/nodejs/adapter.js +135 -0
  15. package/dist/adapters/nodejs/adapter.js.map +1 -0
  16. package/dist/adapters/nodejs/ast-scanner.d.ts +21 -0
  17. package/dist/adapters/nodejs/ast-scanner.d.ts.map +1 -0
  18. package/dist/adapters/nodejs/ast-scanner.js +102 -0
  19. package/dist/adapters/nodejs/ast-scanner.js.map +1 -0
  20. package/dist/adapters/openapi/adapter.d.ts +22 -0
  21. package/dist/adapters/openapi/adapter.d.ts.map +1 -0
  22. package/dist/adapters/openapi/adapter.js +271 -0
  23. package/dist/adapters/openapi/adapter.js.map +1 -0
  24. package/dist/adapters/openapi/parser.d.ts +30 -0
  25. package/dist/adapters/openapi/parser.d.ts.map +1 -0
  26. package/dist/adapters/openapi/parser.js +136 -0
  27. package/dist/adapters/openapi/parser.js.map +1 -0
  28. package/dist/adapters/openapi/request-builder.d.ts +13 -0
  29. package/dist/adapters/openapi/request-builder.d.ts.map +1 -0
  30. package/dist/adapters/openapi/request-builder.js +83 -0
  31. package/dist/adapters/openapi/request-builder.js.map +1 -0
  32. package/dist/adapters/registry.d.ts +28 -0
  33. package/dist/adapters/registry.d.ts.map +1 -0
  34. package/dist/adapters/registry.js +46 -0
  35. package/dist/adapters/registry.js.map +1 -0
  36. package/dist/adapters/rest/adapter.d.ts +18 -0
  37. package/dist/adapters/rest/adapter.d.ts.map +1 -0
  38. package/dist/adapters/rest/adapter.js +41 -0
  39. package/dist/adapters/rest/adapter.js.map +1 -0
  40. package/dist/adapters/rest/executor.d.ts +19 -0
  41. package/dist/adapters/rest/executor.d.ts.map +1 -0
  42. package/dist/adapters/rest/executor.js +101 -0
  43. package/dist/adapters/rest/executor.js.map +1 -0
  44. package/dist/cli/commands/config.d.ts +7 -0
  45. package/dist/cli/commands/config.d.ts.map +1 -0
  46. package/dist/cli/commands/config.js +92 -0
  47. package/dist/cli/commands/config.js.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +7 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor.js +126 -0
  51. package/dist/cli/commands/doctor.js.map +1 -0
  52. package/dist/cli/commands/generate.d.ts +7 -0
  53. package/dist/cli/commands/generate.d.ts.map +1 -0
  54. package/dist/cli/commands/generate.js +58 -0
  55. package/dist/cli/commands/generate.js.map +1 -0
  56. package/dist/cli/commands/init.d.ts +7 -0
  57. package/dist/cli/commands/init.d.ts.map +1 -0
  58. package/dist/cli/commands/init.js +54 -0
  59. package/dist/cli/commands/init.js.map +1 -0
  60. package/dist/cli/commands/review.d.ts +7 -0
  61. package/dist/cli/commands/review.d.ts.map +1 -0
  62. package/dist/cli/commands/review.js +151 -0
  63. package/dist/cli/commands/review.js.map +1 -0
  64. package/dist/cli/commands/scan.d.ts +7 -0
  65. package/dist/cli/commands/scan.d.ts.map +1 -0
  66. package/dist/cli/commands/scan.js +77 -0
  67. package/dist/cli/commands/scan.js.map +1 -0
  68. package/dist/cli/commands/start.d.ts +7 -0
  69. package/dist/cli/commands/start.d.ts.map +1 -0
  70. package/dist/cli/commands/start.js +54 -0
  71. package/dist/cli/commands/start.js.map +1 -0
  72. package/dist/cli/commands/tools.d.ts +7 -0
  73. package/dist/cli/commands/tools.d.ts.map +1 -0
  74. package/dist/cli/commands/tools.js +48 -0
  75. package/dist/cli/commands/tools.js.map +1 -0
  76. package/dist/cli/index.d.ts +8 -0
  77. package/dist/cli/index.d.ts.map +1 -0
  78. package/dist/cli/index.js +42 -0
  79. package/dist/cli/index.js.map +1 -0
  80. package/dist/cli/ui/banner.d.ts +6 -0
  81. package/dist/cli/ui/banner.d.ts.map +1 -0
  82. package/dist/cli/ui/banner.js +20 -0
  83. package/dist/cli/ui/banner.js.map +1 -0
  84. package/dist/cli/ui/logger.d.ts +12 -0
  85. package/dist/cli/ui/logger.d.ts.map +1 -0
  86. package/dist/cli/ui/logger.js +13 -0
  87. package/dist/cli/ui/logger.js.map +1 -0
  88. package/dist/cli/ui/tables.d.ts +9 -0
  89. package/dist/cli/ui/tables.d.ts.map +1 -0
  90. package/dist/cli/ui/tables.js +72 -0
  91. package/dist/cli/ui/tables.js.map +1 -0
  92. package/dist/config/config-manager.d.ts +37 -0
  93. package/dist/config/config-manager.d.ts.map +1 -0
  94. package/dist/config/config-manager.js +129 -0
  95. package/dist/config/config-manager.js.map +1 -0
  96. package/dist/config/defaults.d.ts +8 -0
  97. package/dist/config/defaults.d.ts.map +1 -0
  98. package/dist/config/defaults.js +37 -0
  99. package/dist/config/defaults.js.map +1 -0
  100. package/dist/core/authentication/manager.d.ts +20 -0
  101. package/dist/core/authentication/manager.d.ts.map +1 -0
  102. package/dist/core/authentication/manager.js +71 -0
  103. package/dist/core/authentication/manager.js.map +1 -0
  104. package/dist/core/authentication/secret-resolver.d.ts +39 -0
  105. package/dist/core/authentication/secret-resolver.d.ts.map +1 -0
  106. package/dist/core/authentication/secret-resolver.js +89 -0
  107. package/dist/core/authentication/secret-resolver.js.map +1 -0
  108. package/dist/core/discovery/index.d.ts +5 -0
  109. package/dist/core/discovery/index.d.ts.map +1 -0
  110. package/dist/core/discovery/index.js +5 -0
  111. package/dist/core/discovery/index.js.map +1 -0
  112. package/dist/core/discovery/project-scanner.d.ts +20 -0
  113. package/dist/core/discovery/project-scanner.d.ts.map +1 -0
  114. package/dist/core/discovery/project-scanner.js +174 -0
  115. package/dist/core/discovery/project-scanner.js.map +1 -0
  116. package/dist/core/permissions/classifier.d.ts +25 -0
  117. package/dist/core/permissions/classifier.d.ts.map +1 -0
  118. package/dist/core/permissions/classifier.js +92 -0
  119. package/dist/core/permissions/classifier.js.map +1 -0
  120. package/dist/core/permissions/enforcer.d.ts +24 -0
  121. package/dist/core/permissions/enforcer.d.ts.map +1 -0
  122. package/dist/core/permissions/enforcer.js +71 -0
  123. package/dist/core/permissions/enforcer.js.map +1 -0
  124. package/dist/core/schema/json-schema.d.ts +29 -0
  125. package/dist/core/schema/json-schema.d.ts.map +1 -0
  126. package/dist/core/schema/json-schema.js +129 -0
  127. package/dist/core/schema/json-schema.js.map +1 -0
  128. package/dist/core/schema/types.d.ts +187 -0
  129. package/dist/core/schema/types.d.ts.map +1 -0
  130. package/dist/core/schema/types.js +6 -0
  131. package/dist/core/schema/types.js.map +1 -0
  132. package/dist/core/tool-generator/description-builder.d.ts +15 -0
  133. package/dist/core/tool-generator/description-builder.d.ts.map +1 -0
  134. package/dist/core/tool-generator/description-builder.js +32 -0
  135. package/dist/core/tool-generator/description-builder.js.map +1 -0
  136. package/dist/core/tool-generator/generator.d.ts +21 -0
  137. package/dist/core/tool-generator/generator.d.ts.map +1 -0
  138. package/dist/core/tool-generator/generator.js +61 -0
  139. package/dist/core/tool-generator/generator.js.map +1 -0
  140. package/dist/core/tool-generator/name-sanitizer.d.ts +21 -0
  141. package/dist/core/tool-generator/name-sanitizer.d.ts.map +1 -0
  142. package/dist/core/tool-generator/name-sanitizer.js +84 -0
  143. package/dist/core/tool-generator/name-sanitizer.js.map +1 -0
  144. package/dist/core/validation/config-schema.d.ts +1458 -0
  145. package/dist/core/validation/config-schema.d.ts.map +1 -0
  146. package/dist/core/validation/config-schema.js +137 -0
  147. package/dist/core/validation/config-schema.js.map +1 -0
  148. package/dist/core/validation/validator.d.ts +28 -0
  149. package/dist/core/validation/validator.d.ts.map +1 -0
  150. package/dist/core/validation/validator.js +108 -0
  151. package/dist/core/validation/validator.js.map +1 -0
  152. package/dist/index.d.ts +38 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +38 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/mcp/prompts/prompt-registry.d.ts +28 -0
  157. package/dist/mcp/prompts/prompt-registry.d.ts.map +1 -0
  158. package/dist/mcp/prompts/prompt-registry.js +65 -0
  159. package/dist/mcp/prompts/prompt-registry.js.map +1 -0
  160. package/dist/mcp/resources/resource-registry.d.ts +26 -0
  161. package/dist/mcp/resources/resource-registry.d.ts.map +1 -0
  162. package/dist/mcp/resources/resource-registry.js +87 -0
  163. package/dist/mcp/resources/resource-registry.js.map +1 -0
  164. package/dist/mcp/server/fridayy-server.d.ts +38 -0
  165. package/dist/mcp/server/fridayy-server.d.ts.map +1 -0
  166. package/dist/mcp/server/fridayy-server.js +143 -0
  167. package/dist/mcp/server/fridayy-server.js.map +1 -0
  168. package/dist/mcp/tools/tool-handler.d.ts +29 -0
  169. package/dist/mcp/tools/tool-handler.d.ts.map +1 -0
  170. package/dist/mcp/tools/tool-handler.js +206 -0
  171. package/dist/mcp/tools/tool-handler.js.map +1 -0
  172. package/dist/mcp/tools/tool-registry.d.ts +20 -0
  173. package/dist/mcp/tools/tool-registry.d.ts.map +1 -0
  174. package/dist/mcp/tools/tool-registry.js +38 -0
  175. package/dist/mcp/tools/tool-registry.js.map +1 -0
  176. package/dist/security/allowlist.d.ts +10 -0
  177. package/dist/security/allowlist.d.ts.map +1 -0
  178. package/dist/security/allowlist.js +30 -0
  179. package/dist/security/allowlist.js.map +1 -0
  180. package/dist/security/audit-logger.d.ts +35 -0
  181. package/dist/security/audit-logger.d.ts.map +1 -0
  182. package/dist/security/audit-logger.js +52 -0
  183. package/dist/security/audit-logger.js.map +1 -0
  184. package/dist/security/rate-limiter.d.ts +28 -0
  185. package/dist/security/rate-limiter.d.ts.map +1 -0
  186. package/dist/security/rate-limiter.js +64 -0
  187. package/dist/security/rate-limiter.js.map +1 -0
  188. package/dist/security/sanitizer.d.ts +17 -0
  189. package/dist/security/sanitizer.d.ts.map +1 -0
  190. package/dist/security/sanitizer.js +70 -0
  191. package/dist/security/sanitizer.js.map +1 -0
  192. package/package.json +77 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Fridayy - Universal Application-to-MCP Platform
3
+ * Core Type Definitions
4
+ */
5
+ export type ToolPermissionType = 'READ' | 'WRITE' | 'DESTRUCTIVE';
6
+ export type ToolRiskLevel = 'low' | 'medium' | 'high';
7
+ export type ToolApprovalStatus = 'APPROVED' | 'PENDING' | 'BLOCKED' | 'REJECTED';
8
+ export type SourceType = 'openapi' | 'rest' | 'nodejs' | 'manual' | 'graphql' | string;
9
+ export type AuthType = 'apiKey' | 'bearer' | 'basic' | 'customHeader' | 'oauth2' | 'none';
10
+ export interface ParameterDefinition {
11
+ name: string;
12
+ in: 'path' | 'query' | 'header' | 'cookie';
13
+ required: boolean;
14
+ description?: string;
15
+ schema: Record<string, any>;
16
+ example?: any;
17
+ }
18
+ export interface RequestBodyDefinition {
19
+ contentType: string;
20
+ required: boolean;
21
+ description?: string;
22
+ schema: Record<string, any>;
23
+ example?: any;
24
+ }
25
+ export interface ToolAuthentication {
26
+ required: boolean;
27
+ type?: AuthType;
28
+ envKey?: string;
29
+ headerName?: string;
30
+ queryParam?: string;
31
+ schemeName?: string;
32
+ description?: string;
33
+ }
34
+ export interface ToolPermissions {
35
+ type: ToolPermissionType;
36
+ read: boolean;
37
+ write: boolean;
38
+ destructive: boolean;
39
+ requiresConfirmation?: boolean;
40
+ }
41
+ export interface ToolRateLimit {
42
+ maxRequests: number;
43
+ windowSeconds: number;
44
+ }
45
+ export interface FridayyToolDefinition {
46
+ id: string;
47
+ name: string;
48
+ description: string;
49
+ inputSchema: {
50
+ type: 'object';
51
+ properties?: Record<string, any>;
52
+ required?: string[];
53
+ additionalProperties?: boolean;
54
+ [key: string]: any;
55
+ };
56
+ outputSchema?: Record<string, any>;
57
+ source: {
58
+ type: SourceType;
59
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS' | string;
60
+ url?: string;
61
+ path?: string;
62
+ baseUrl?: string;
63
+ handler?: string;
64
+ endpoint?: string;
65
+ operationId?: string;
66
+ tags?: string[];
67
+ summary?: string;
68
+ };
69
+ parameters?: {
70
+ path?: ParameterDefinition[];
71
+ query?: ParameterDefinition[];
72
+ header?: ParameterDefinition[];
73
+ cookie?: ParameterDefinition[];
74
+ };
75
+ requestBody?: RequestBodyDefinition;
76
+ authentication?: ToolAuthentication;
77
+ permissions: ToolPermissions;
78
+ risk: ToolRiskLevel;
79
+ status: ToolApprovalStatus;
80
+ rateLimit?: ToolRateLimit;
81
+ metadata?: {
82
+ createdAt?: string;
83
+ updatedAt?: string;
84
+ approvedAt?: string;
85
+ approvedBy?: string;
86
+ autoGenerated?: boolean;
87
+ sourceFile?: string;
88
+ [key: string]: any;
89
+ };
90
+ }
91
+ export interface FridayyConfig {
92
+ name: string;
93
+ version?: string;
94
+ description?: string;
95
+ source: {
96
+ type: 'openapi' | 'rest' | 'nodejs' | 'manual' | 'auto';
97
+ path?: string;
98
+ url?: string;
99
+ baseUrl?: string;
100
+ rootDir?: string;
101
+ [key: string]: any;
102
+ };
103
+ server?: {
104
+ name?: string;
105
+ version?: string;
106
+ transport?: 'stdio' | 'sse';
107
+ port?: number;
108
+ host?: string;
109
+ maxRequestsPerMinute?: number;
110
+ };
111
+ security?: {
112
+ requireApprovalForDestructive?: boolean;
113
+ autoApproveRead?: boolean;
114
+ autoApproveWrite?: boolean;
115
+ allowlist?: string[];
116
+ denylist?: string[];
117
+ rateLimit?: ToolRateLimit;
118
+ secretEnvPrefix?: string;
119
+ };
120
+ auth?: {
121
+ [schemeName: string]: {
122
+ type: AuthType;
123
+ envKey?: string;
124
+ headerName?: string;
125
+ queryParam?: string;
126
+ value?: string;
127
+ };
128
+ };
129
+ logging?: {
130
+ level?: 'debug' | 'info' | 'warn' | 'error';
131
+ auditLogPath?: string;
132
+ maskSecrets?: boolean;
133
+ };
134
+ tools?: {
135
+ autoGenerate?: boolean;
136
+ toolsFile?: string;
137
+ includeTags?: string[];
138
+ excludeTags?: string[];
139
+ includePaths?: string[];
140
+ excludePaths?: string[];
141
+ };
142
+ }
143
+ export interface ToolsFileStructure {
144
+ version: string;
145
+ generatedAt: string;
146
+ source: string;
147
+ tools: FridayyToolDefinition[];
148
+ }
149
+ export interface ToolExecutionResult {
150
+ success: boolean;
151
+ data?: any;
152
+ error?: {
153
+ code: string;
154
+ message: string;
155
+ details?: any;
156
+ };
157
+ metadata?: {
158
+ statusCode?: number;
159
+ durationMs: number;
160
+ timestamp: string;
161
+ toolName: string;
162
+ };
163
+ }
164
+ export interface ScanResult {
165
+ hasOpenApi: boolean;
166
+ openApiFiles: string[];
167
+ hasNodeJs: boolean;
168
+ nodeJsFramework?: 'express' | 'fastify' | 'koa' | 'nestjs' | 'custom' | 'none';
169
+ discoveredEndpointsCount: number;
170
+ authSchemesDetected: string[];
171
+ recommendedConfig: Partial<FridayyConfig>;
172
+ details: {
173
+ openApiSpecs?: Array<{
174
+ path: string;
175
+ version: string;
176
+ title: string;
177
+ endpointsCount: number;
178
+ }>;
179
+ routes?: Array<{
180
+ method: string;
181
+ path: string;
182
+ file: string;
183
+ line: number;
184
+ }>;
185
+ };
186
+ }
187
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/schema/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Fridayy - Universal Application-to-MCP Platform
3
+ * Core Type Definitions
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/schema/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Fridayy - Tool Description Builder
3
+ * Formats rich, semantic tool descriptions for LLMs.
4
+ */
5
+ export interface DescriptionBuildContext {
6
+ summary?: string;
7
+ description?: string;
8
+ method?: string;
9
+ path?: string;
10
+ tags?: string[];
11
+ permissionType?: string;
12
+ risk?: string;
13
+ }
14
+ export declare function buildToolDescription(ctx: DescriptionBuildContext): string;
15
+ //# sourceMappingURL=description-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-builder.d.ts","sourceRoot":"","sources":["../../../src/core/tool-generator/description-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,uBAAuB,GAAG,MAAM,CA4BzE"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Fridayy - Tool Description Builder
3
+ * Formats rich, semantic tool descriptions for LLMs.
4
+ */
5
+ export function buildToolDescription(ctx) {
6
+ const parts = [];
7
+ // 1. Primary summary or description
8
+ if (ctx.summary) {
9
+ parts.push(ctx.summary.trim());
10
+ }
11
+ else if (ctx.description) {
12
+ // Take first sentence or full short description
13
+ const firstLine = ctx.description.split('\n')[0].trim();
14
+ parts.push(firstLine);
15
+ }
16
+ else if (ctx.method && ctx.path) {
17
+ parts.push(`Execute ${ctx.method.toUpperCase()} request to ${ctx.path}`);
18
+ }
19
+ // 2. Additional context if different from summary
20
+ if (ctx.description && ctx.summary && ctx.description.trim() !== ctx.summary.trim()) {
21
+ const cleanDesc = ctx.description.replace(/\r?\n/g, ' ').trim();
22
+ if (cleanDesc.length > 0 && !parts.includes(cleanDesc)) {
23
+ parts.push(`Details: ${cleanDesc}`);
24
+ }
25
+ }
26
+ // 3. Risk / Permission advisory for LLM safety
27
+ if (ctx.permissionType === 'DESTRUCTIVE') {
28
+ parts.push('[CAUTION: Destructive operation - permanent deletion or irreversible state change]');
29
+ }
30
+ return parts.join('. ').replace(/\.\./g, '.');
31
+ }
32
+ //# sourceMappingURL=description-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-builder.js","sourceRoot":"","sources":["../../../src/core/tool-generator/description-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,UAAU,oBAAoB,CAAC,GAA4B;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,oCAAoC;IACpC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,gDAAgD;QAChD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAClD,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpF,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,CAAC,cAAc,KAAK,aAAa,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Fridayy - Tool Generator Engine
3
+ * Coordinates adapters to generate, filter, and normalize candidate MCP tools.
4
+ */
5
+ import { FridayyToolDefinition, FridayyConfig } from '../schema/types.js';
6
+ import { AdapterRegistry } from '../../adapters/registry.js';
7
+ export interface GenerationOptions {
8
+ rootDir?: string;
9
+ config: FridayyConfig;
10
+ preserveStatuses?: Map<string, 'APPROVED' | 'PENDING' | 'BLOCKED' | 'REJECTED'>;
11
+ }
12
+ export declare class ToolGenerator {
13
+ private adapterRegistry;
14
+ constructor(adapterRegistry?: AdapterRegistry);
15
+ /**
16
+ * Generates MCP tools from the configured source adapter.
17
+ */
18
+ generate(options: GenerationOptions): Promise<FridayyToolDefinition[]>;
19
+ }
20
+ export declare const defaultToolGenerator: ToolGenerator;
21
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/core/tool-generator/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAA0B,MAAM,4BAA4B,CAAC;AAGrF,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;CACjF;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAAkB;gBAE7B,eAAe,GAAE,eAAwC;IAIrE;;OAEG;IACU,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;CAiDpF;AAED,eAAO,MAAM,oBAAoB,eAAsB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Fridayy - Tool Generator Engine
3
+ * Coordinates adapters to generate, filter, and normalize candidate MCP tools.
4
+ */
5
+ import { defaultAdapterRegistry } from '../../adapters/registry.js';
6
+ import { isToolAllowed } from '../../security/allowlist.js';
7
+ export class ToolGenerator {
8
+ adapterRegistry;
9
+ constructor(adapterRegistry = defaultAdapterRegistry) {
10
+ this.adapterRegistry = adapterRegistry;
11
+ }
12
+ /**
13
+ * Generates MCP tools from the configured source adapter.
14
+ */
15
+ async generate(options) {
16
+ const { config, rootDir = process.cwd(), preserveStatuses } = options;
17
+ const sourceType = config.source.type || 'openapi';
18
+ const adapter = this.adapterRegistry.get(sourceType);
19
+ if (!adapter) {
20
+ throw new Error(`Unsupported source adapter: "${sourceType}". Registered adapters: [${this.adapterRegistry.getAll().map(a => a.name).join(', ')}]`);
21
+ }
22
+ const generatedRawTools = await adapter.generateTools({
23
+ rootDir,
24
+ config,
25
+ sourcePath: config.source.path,
26
+ sourceUrl: config.source.url
27
+ });
28
+ // Filter tools based on config
29
+ const filteredTools = generatedRawTools.filter(tool => {
30
+ // 1. Tag filters
31
+ if (config.tools?.includeTags && config.tools.includeTags.length > 0) {
32
+ const toolTags = tool.source.tags || [];
33
+ const hasTag = config.tools.includeTags.some(t => toolTags.includes(t));
34
+ if (!hasTag)
35
+ return false;
36
+ }
37
+ if (config.tools?.excludeTags && config.tools.excludeTags.length > 0) {
38
+ const toolTags = tool.source.tags || [];
39
+ const hasExcluded = config.tools.excludeTags.some(t => toolTags.includes(t));
40
+ if (hasExcluded)
41
+ return false;
42
+ }
43
+ // 2. Allowlist / Denylist
44
+ return isToolAllowed(tool.name, {
45
+ allowlist: config.security?.allowlist,
46
+ denylist: config.security?.denylist
47
+ });
48
+ });
49
+ // Preserve previous approval statuses if available
50
+ if (preserveStatuses && preserveStatuses.size > 0) {
51
+ for (const tool of filteredTools) {
52
+ if (preserveStatuses.has(tool.name)) {
53
+ tool.status = preserveStatuses.get(tool.name);
54
+ }
55
+ }
56
+ }
57
+ return filteredTools;
58
+ }
59
+ }
60
+ export const defaultToolGenerator = new ToolGenerator();
61
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/core/tool-generator/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Fridayy - Tool Name Sanitizer & Generator
3
+ * Converts API operations, methods, and paths into clean snake_case MCP tool names.
4
+ */
5
+ /**
6
+ * Sanitizes an operation ID or string to a valid MCP tool name.
7
+ */
8
+ export declare function sanitizeToolName(name: string): string;
9
+ /**
10
+ * Generates an intuitive tool name from HTTP method and path if operationId is missing.
11
+ * E.g.:
12
+ * - GET /users -> get_users
13
+ * - GET /users/{id} -> get_user
14
+ * - POST /orders -> create_order
15
+ * - PUT /users/{id} -> update_user
16
+ * - DELETE /users/{id} -> delete_user
17
+ * - PUT /customers/{id}/profile -> update_customer_profile
18
+ * - POST /auth/login -> login
19
+ */
20
+ export declare function generateToolNameFromRoute(method: string, pathStr: string): string;
21
+ //# sourceMappingURL=name-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name-sanitizer.d.ts","sourceRoot":"","sources":["../../../src/core/tool-generator/name-sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0DjF"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Fridayy - Tool Name Sanitizer & Generator
3
+ * Converts API operations, methods, and paths into clean snake_case MCP tool names.
4
+ */
5
+ /**
6
+ * Sanitizes an operation ID or string to a valid MCP tool name.
7
+ */
8
+ export function sanitizeToolName(name) {
9
+ return name
10
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2') // camelCase to snake_case
11
+ .replace(/[^a-zA-Z0-9_]/g, '_') // replace non-alphanumeric with underscore
12
+ .replace(/_+/g, '_') // collapse consecutive underscores
13
+ .replace(/^_+|_+$/g, '') // trim leading/trailing underscores
14
+ .toLowerCase();
15
+ }
16
+ /**
17
+ * Generates an intuitive tool name from HTTP method and path if operationId is missing.
18
+ * E.g.:
19
+ * - GET /users -> get_users
20
+ * - GET /users/{id} -> get_user
21
+ * - POST /orders -> create_order
22
+ * - PUT /users/{id} -> update_user
23
+ * - DELETE /users/{id} -> delete_user
24
+ * - PUT /customers/{id}/profile -> update_customer_profile
25
+ * - POST /auth/login -> login
26
+ */
27
+ export function generateToolNameFromRoute(method, pathStr) {
28
+ const m = method.toLowerCase();
29
+ // Strip leading and trailing slashes, remove /api/v1, /api prefixes
30
+ let cleanedPath = pathStr
31
+ .replace(/^\/?(api\/v\d+|api)\//i, '')
32
+ .replace(/^\/|\/$/g, '');
33
+ const rawSegments = cleanedPath.split('/').filter(Boolean);
34
+ const resourceSegments = [];
35
+ for (let i = 0; i < rawSegments.length; i++) {
36
+ const seg = rawSegments[i];
37
+ if (seg.startsWith('{') || seg.startsWith(':')) {
38
+ // If previous segment was plural, singularize it
39
+ if (resourceSegments.length > 0) {
40
+ const lastIdx = resourceSegments.length - 1;
41
+ const prev = resourceSegments[lastIdx];
42
+ if (prev.endsWith('s') && !prev.endsWith('ss') && !prev.endsWith('us')) {
43
+ resourceSegments[lastIdx] = prev.slice(0, -1);
44
+ }
45
+ }
46
+ }
47
+ else {
48
+ let cleanSeg = seg;
49
+ // If trailing segment on POST/DELETE/PUT and plural, singularize
50
+ if ((m === 'post' || m === 'delete' || m === 'put') && i === rawSegments.length - 1) {
51
+ if (cleanSeg.endsWith('s') && !cleanSeg.endsWith('ss') && !cleanSeg.endsWith('us')) {
52
+ cleanSeg = cleanSeg.slice(0, -1);
53
+ }
54
+ }
55
+ resourceSegments.push(cleanSeg);
56
+ }
57
+ }
58
+ let resource = resourceSegments.length > 0 ? resourceSegments.join('_') : 'resource';
59
+ let prefix = m;
60
+ if (m === 'get') {
61
+ prefix = 'get';
62
+ }
63
+ else if (m === 'post') {
64
+ prefix = 'create';
65
+ }
66
+ else if (m === 'put') {
67
+ prefix = 'update';
68
+ }
69
+ else if (m === 'patch') {
70
+ prefix = 'update';
71
+ }
72
+ else if (m === 'delete') {
73
+ prefix = 'delete';
74
+ }
75
+ // Handle special cases like /login, /logout, /search, /checkout
76
+ if (resourceSegments.length === 1) {
77
+ const single = resourceSegments[0].toLowerCase();
78
+ if (['login', 'logout', 'search', 'checkout', 'register', 'ping', 'health'].includes(single)) {
79
+ return sanitizeToolName(single);
80
+ }
81
+ }
82
+ return sanitizeToolName(`${prefix}_${resource}`);
83
+ }
84
+ //# sourceMappingURL=name-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name-sanitizer.js","sourceRoot":"","sources":["../../../src/core/tool-generator/name-sanitizer.ts"],"names":[],"mappings":"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"}