@mrpatronz/nexusflow 1.9.1 → 2.1.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 (237) hide show
  1. package/README.md +2 -1
  2. package/dist/agent/AcpCliAdapter.d.ts +75 -0
  3. package/dist/agent/AcpCliAdapter.d.ts.map +1 -0
  4. package/dist/agent/AcpCliAdapter.js +292 -0
  5. package/dist/agent/AcpCliAdapter.js.map +1 -0
  6. package/dist/agent/AcpCliAdapter.test.d.ts +2 -0
  7. package/dist/agent/AcpCliAdapter.test.d.ts.map +1 -0
  8. package/dist/agent/AcpCliAdapter.test.js +235 -0
  9. package/dist/agent/AcpCliAdapter.test.js.map +1 -0
  10. package/dist/agent/ClaudeCliAdapter.d.ts +40 -5
  11. package/dist/agent/ClaudeCliAdapter.d.ts.map +1 -1
  12. package/dist/agent/ClaudeCliAdapter.js +212 -15
  13. package/dist/agent/ClaudeCliAdapter.js.map +1 -1
  14. package/dist/agent/ClaudeCliAdapter.test.d.ts +2 -0
  15. package/dist/agent/ClaudeCliAdapter.test.d.ts.map +1 -0
  16. package/dist/agent/ClaudeCliAdapter.test.js +320 -0
  17. package/dist/agent/ClaudeCliAdapter.test.js.map +1 -0
  18. package/dist/agent/CliAdapterBase.d.ts +29 -12
  19. package/dist/agent/CliAdapterBase.d.ts.map +1 -1
  20. package/dist/agent/CliAdapterBase.js +76 -36
  21. package/dist/agent/CliAdapterBase.js.map +1 -1
  22. package/dist/agent/CodexCliAdapter.d.ts +51 -0
  23. package/dist/agent/CodexCliAdapter.d.ts.map +1 -0
  24. package/dist/agent/CodexCliAdapter.js +226 -0
  25. package/dist/agent/CodexCliAdapter.js.map +1 -0
  26. package/dist/agent/CodexCliAdapter.test.d.ts +2 -0
  27. package/dist/agent/CodexCliAdapter.test.d.ts.map +1 -0
  28. package/dist/agent/CodexCliAdapter.test.js +316 -0
  29. package/dist/agent/CodexCliAdapter.test.js.map +1 -0
  30. package/dist/agent/CopilotAcpAdapter.d.ts +7 -0
  31. package/dist/agent/CopilotAcpAdapter.d.ts.map +1 -0
  32. package/dist/agent/CopilotAcpAdapter.js +29 -0
  33. package/dist/agent/CopilotAcpAdapter.js.map +1 -0
  34. package/dist/agent/ProviderRegistry.d.ts +50 -3
  35. package/dist/agent/ProviderRegistry.d.ts.map +1 -1
  36. package/dist/agent/ProviderRegistry.js +43 -8
  37. package/dist/agent/ProviderRegistry.js.map +1 -1
  38. package/dist/agent/ProviderRegistry.test.js +53 -0
  39. package/dist/agent/ProviderRegistry.test.js.map +1 -1
  40. package/dist/agent/adapters.d.ts +16 -0
  41. package/dist/agent/adapters.d.ts.map +1 -1
  42. package/dist/agent/adapters.js +114 -4
  43. package/dist/agent/adapters.js.map +1 -1
  44. package/dist/agent/adapters.test.d.ts +2 -0
  45. package/dist/agent/adapters.test.d.ts.map +1 -0
  46. package/dist/agent/adapters.test.js +71 -0
  47. package/dist/agent/adapters.test.js.map +1 -0
  48. package/dist/agent/cliAvailability.d.ts +86 -0
  49. package/dist/agent/cliAvailability.d.ts.map +1 -0
  50. package/dist/agent/cliAvailability.js +231 -0
  51. package/dist/agent/cliAvailability.js.map +1 -0
  52. package/dist/agent/cliAvailability.test.d.ts +2 -0
  53. package/dist/agent/cliAvailability.test.d.ts.map +1 -0
  54. package/dist/agent/cliAvailability.test.js +192 -0
  55. package/dist/agent/cliAvailability.test.js.map +1 -0
  56. package/dist/agent/session.d.ts +2 -1
  57. package/dist/agent/session.d.ts.map +1 -1
  58. package/dist/agent/session.js +15 -4
  59. package/dist/agent/session.js.map +1 -1
  60. package/dist/agent/session.test.js +29 -8
  61. package/dist/agent/session.test.js.map +1 -1
  62. package/dist/analyzers/detect-deps.d.ts.map +1 -1
  63. package/dist/analyzers/detect-deps.js +16 -19
  64. package/dist/analyzers/detect-deps.js.map +1 -1
  65. package/dist/analyzers/index.d.ts +0 -2
  66. package/dist/analyzers/index.d.ts.map +1 -1
  67. package/dist/analyzers/index.js +6 -9
  68. package/dist/analyzers/index.js.map +1 -1
  69. package/dist/commands/commands.test.js +4 -3
  70. package/dist/commands/commands.test.js.map +1 -1
  71. package/dist/commands/create.d.ts.map +1 -1
  72. package/dist/commands/create.js.map +1 -1
  73. package/dist/commands/knowledge.d.ts +10 -0
  74. package/dist/commands/knowledge.d.ts.map +1 -1
  75. package/dist/commands/knowledge.js +27 -1
  76. package/dist/commands/knowledge.js.map +1 -1
  77. package/dist/commands/knowledge.test.d.ts +2 -0
  78. package/dist/commands/knowledge.test.d.ts.map +1 -0
  79. package/dist/commands/knowledge.test.js +77 -0
  80. package/dist/commands/knowledge.test.js.map +1 -0
  81. package/dist/commands/refresh.d.ts +2 -4
  82. package/dist/commands/refresh.d.ts.map +1 -1
  83. package/dist/commands/refresh.js +4 -20
  84. package/dist/commands/refresh.js.map +1 -1
  85. package/dist/core/adapters/registry.d.ts.map +1 -1
  86. package/dist/core/adapters/registry.js +8 -3
  87. package/dist/core/adapters/registry.js.map +1 -1
  88. package/dist/core/adapters/storage.test.js +5 -24
  89. package/dist/core/adapters/storage.test.js.map +1 -1
  90. package/dist/core/analysis-cache.d.ts +15 -8
  91. package/dist/core/analysis-cache.d.ts.map +1 -1
  92. package/dist/core/analysis-cache.js +61 -10
  93. package/dist/core/analysis-cache.js.map +1 -1
  94. package/dist/core/analysis-cache.test.js +17 -4
  95. package/dist/core/analysis-cache.test.js.map +1 -1
  96. package/dist/core/config.d.ts.map +1 -1
  97. package/dist/core/config.js +5 -4
  98. package/dist/core/config.js.map +1 -1
  99. package/dist/core/doctor.d.ts.map +1 -1
  100. package/dist/core/doctor.js +9 -5
  101. package/dist/core/doctor.js.map +1 -1
  102. package/dist/core/knowledge.d.ts +14 -4
  103. package/dist/core/knowledge.d.ts.map +1 -1
  104. package/dist/core/knowledge.js +64 -14
  105. package/dist/core/knowledge.js.map +1 -1
  106. package/dist/core/knowledge.test.js +54 -2
  107. package/dist/core/knowledge.test.js.map +1 -1
  108. package/dist/core/locks.d.ts +43 -0
  109. package/dist/core/locks.d.ts.map +1 -0
  110. package/dist/core/locks.js +102 -0
  111. package/dist/core/locks.js.map +1 -0
  112. package/dist/core/locks.test.d.ts +2 -0
  113. package/dist/core/locks.test.d.ts.map +1 -0
  114. package/dist/core/locks.test.js +95 -0
  115. package/dist/core/locks.test.js.map +1 -0
  116. package/dist/core/ports/storage.d.ts +3 -3
  117. package/dist/core/ports/storage.d.ts.map +1 -1
  118. package/dist/core/refresh.d.ts +12 -13
  119. package/dist/core/refresh.d.ts.map +1 -1
  120. package/dist/core/refresh.js +14 -11
  121. package/dist/core/refresh.js.map +1 -1
  122. package/dist/core/refresh.test.js +17 -11
  123. package/dist/core/refresh.test.js.map +1 -1
  124. package/dist/core/scheduler.d.ts.map +1 -1
  125. package/dist/core/scheduler.js +2 -65
  126. package/dist/core/scheduler.js.map +1 -1
  127. package/dist/core/sync.js +3 -3
  128. package/dist/core/sync.js.map +1 -1
  129. package/dist/core/worktree.js +2 -2
  130. package/dist/core/worktree.js.map +1 -1
  131. package/dist/core/worktree.test.js +2 -2
  132. package/dist/core/worktree.test.js.map +1 -1
  133. package/dist/generators/base.d.ts +31 -2
  134. package/dist/generators/base.d.ts.map +1 -1
  135. package/dist/generators/base.js +174 -238
  136. package/dist/generators/base.js.map +1 -1
  137. package/dist/generators/base.test.js +231 -24
  138. package/dist/generators/base.test.js.map +1 -1
  139. package/dist/generators/claude.d.ts +19 -5
  140. package/dist/generators/claude.d.ts.map +1 -1
  141. package/dist/generators/claude.js +33 -11
  142. package/dist/generators/claude.js.map +1 -1
  143. package/dist/generators/index.d.ts +10 -9
  144. package/dist/generators/index.d.ts.map +1 -1
  145. package/dist/generators/index.js +103 -118
  146. package/dist/generators/index.js.map +1 -1
  147. package/dist/generators/plan-generator.d.ts.map +1 -1
  148. package/dist/generators/plan-generator.js +217 -193
  149. package/dist/generators/plan-generator.js.map +1 -1
  150. package/dist/generators/plan-generator.test.d.ts +2 -0
  151. package/dist/generators/plan-generator.test.d.ts.map +1 -0
  152. package/dist/generators/plan-generator.test.js +217 -0
  153. package/dist/generators/plan-generator.test.js.map +1 -0
  154. package/dist/gui/assets/DashboardPage-BeAHHUtn.js +1 -0
  155. package/dist/gui/assets/GettingStartedPage-CFAyG0ar.js +1 -0
  156. package/dist/gui/assets/ProjectsPage-C0SmbBqW.js +1 -0
  157. package/dist/gui/assets/{ScaffoldRepoInline-DRipQsos.js → ScaffoldRepoInline-lfFwOnQu.js} +1 -1
  158. package/dist/gui/assets/SettingsPage-DIBk9fu8.js +1 -0
  159. package/dist/gui/assets/StartWorkPage-CWC5OujI.js +1 -0
  160. package/dist/gui/assets/{StrategiesPage-6LWOnKdk.js → StrategiesPage-Dcq10WZS.js} +2 -2
  161. package/dist/gui/assets/WorkspacesPage-BqOx6Gbe.js +6 -0
  162. package/dist/gui/assets/index-B5IYXvr6.css +2 -0
  163. package/dist/gui/assets/{index-CyYbQwRf.js → index-BCfJkb0T.js} +7 -7
  164. package/dist/gui/index.html +2 -2
  165. package/dist/index.js +2 -4
  166. package/dist/index.js.map +1 -1
  167. package/dist/mcp/tools.d.ts.map +1 -1
  168. package/dist/mcp/tools.js +11 -15
  169. package/dist/mcp/tools.js.map +1 -1
  170. package/dist/resources/workflows/plan-implement-review.md +8 -0
  171. package/dist/resources/workflows/research-verify.md +6 -0
  172. package/dist/resources/workflows/solo-developer.md +3 -0
  173. package/dist/server.d.ts +13 -0
  174. package/dist/server.d.ts.map +1 -1
  175. package/dist/server.js +154 -23
  176. package/dist/server.js.map +1 -1
  177. package/dist/server.test.js +147 -3
  178. package/dist/server.test.js.map +1 -1
  179. package/dist/types.d.ts +0 -24
  180. package/dist/types.d.ts.map +1 -1
  181. package/dist/utils/prompts.js +2 -2
  182. package/dist/utils/prompts.js.map +1 -1
  183. package/dist/utils/resources.d.ts +28 -0
  184. package/dist/utils/resources.d.ts.map +1 -0
  185. package/dist/utils/resources.js +54 -0
  186. package/dist/utils/resources.js.map +1 -0
  187. package/dist/utils/session-finder.d.ts +3 -0
  188. package/dist/utils/session-finder.d.ts.map +1 -1
  189. package/dist/utils/session-finder.js +54 -10
  190. package/dist/utils/session-finder.js.map +1 -1
  191. package/dist/utils/session-finder.test.js +61 -2
  192. package/dist/utils/session-finder.test.js.map +1 -1
  193. package/dist/utils/workflow-advisor.d.ts.map +1 -1
  194. package/dist/utils/workflow-advisor.js +17 -27
  195. package/dist/utils/workflow-advisor.js.map +1 -1
  196. package/dist/utils/workflows.d.ts.map +1 -1
  197. package/dist/utils/workflows.js +6 -2
  198. package/dist/utils/workflows.js.map +1 -1
  199. package/package.json +8 -4
  200. package/resources/workflows/plan-implement-review.md +8 -0
  201. package/resources/workflows/research-verify.md +6 -0
  202. package/resources/workflows/solo-developer.md +3 -0
  203. package/dist/analyzers/detect-apis.d.ts +0 -19
  204. package/dist/analyzers/detect-apis.d.ts.map +0 -1
  205. package/dist/analyzers/detect-apis.js +0 -250
  206. package/dist/analyzers/detect-apis.js.map +0 -1
  207. package/dist/analyzers/messaging-analyzer.d.ts +0 -17
  208. package/dist/analyzers/messaging-analyzer.d.ts.map +0 -1
  209. package/dist/analyzers/messaging-analyzer.js +0 -229
  210. package/dist/analyzers/messaging-analyzer.js.map +0 -1
  211. package/dist/core/adapters/vault-storage.d.ts +0 -16
  212. package/dist/core/adapters/vault-storage.d.ts.map +0 -1
  213. package/dist/core/adapters/vault-storage.js +0 -77
  214. package/dist/core/adapters/vault-storage.js.map +0 -1
  215. package/dist/core/graph.d.ts +0 -35
  216. package/dist/core/graph.d.ts.map +0 -1
  217. package/dist/core/graph.js +0 -281
  218. package/dist/core/graph.js.map +0 -1
  219. package/dist/generators/diff-context.d.ts +0 -6
  220. package/dist/generators/diff-context.d.ts.map +0 -1
  221. package/dist/generators/diff-context.js +0 -70
  222. package/dist/generators/diff-context.js.map +0 -1
  223. package/dist/generators/map-generator.d.ts +0 -15
  224. package/dist/generators/map-generator.d.ts.map +0 -1
  225. package/dist/generators/map-generator.js +0 -514
  226. package/dist/generators/map-generator.js.map +0 -1
  227. package/dist/generators/map-generator.test.d.ts +0 -2
  228. package/dist/generators/map-generator.test.d.ts.map +0 -1
  229. package/dist/generators/map-generator.test.js +0 -147
  230. package/dist/generators/map-generator.test.js.map +0 -1
  231. package/dist/gui/assets/DashboardPage-C3NH97y2.js +0 -1
  232. package/dist/gui/assets/GettingStartedPage-og-Kv7Sm.js +0 -1
  233. package/dist/gui/assets/ProjectsPage-COqqadEr.js +0 -1
  234. package/dist/gui/assets/SettingsPage-CpU3V9oU.js +0 -1
  235. package/dist/gui/assets/StartWorkPage-DIND0hJy.js +0 -1
  236. package/dist/gui/assets/WorkspacesPage-BUqgOhuy.js +0 -6
  237. package/dist/gui/assets/index-CsA2SueF.css +0 -2
@@ -1,250 +0,0 @@
1
- /**
2
- * @module analyzers/detect-apis
3
- * Detects API endpoints in a repository by scanning for OpenAPI/Swagger files,
4
- * route patterns in common frameworks, and gRPC proto files.
5
- */
6
- import * as fs from 'node:fs/promises';
7
- import * as path from 'node:path';
8
- import { globby } from 'globby';
9
- /**
10
- * Detects API endpoints in a repository.
11
- *
12
- * Strategies (in order):
13
- * 1. Look for OpenAPI/Swagger spec files (JSON/YAML)
14
- * 2. Scan source files for Express/Fastify/ASP.NET route patterns
15
- * 3. Look for gRPC .proto files
16
- *
17
- * @param repoPath - Absolute path to the repository root.
18
- * @returns Array of detected {@link ApiEndpoint} objects.
19
- */
20
- export async function detectApis(repoPath) {
21
- const endpoints = [];
22
- // 1. OpenAPI/Swagger files
23
- const openApiEndpoints = await scanOpenApiFiles(repoPath);
24
- endpoints.push(...openApiEndpoints);
25
- // 2. Route patterns in source files (only if no OpenAPI found)
26
- if (endpoints.length === 0) {
27
- const routeEndpoints = await scanRoutePatterns(repoPath);
28
- endpoints.push(...routeEndpoints);
29
- }
30
- return endpoints;
31
- }
32
- /** Looks for OpenAPI/Swagger spec files and extracts paths. */
33
- async function scanOpenApiFiles(repoPath) {
34
- const candidates = [
35
- 'swagger.json', 'swagger.yaml', 'swagger.yml',
36
- 'openapi.json', 'openapi.yaml', 'openapi.yml',
37
- 'api-spec.json', 'api-spec.yaml', 'api-spec.yml',
38
- ];
39
- const endpoints = [];
40
- for (const filename of candidates) {
41
- const filePath = path.join(repoPath, filename);
42
- try {
43
- const content = await fs.readFile(filePath, 'utf-8');
44
- if (filename.endsWith('.json')) {
45
- const spec = JSON.parse(content);
46
- const paths = spec.paths;
47
- if (paths) {
48
- for (const [routePath, methods] of Object.entries(paths)) {
49
- for (const method of Object.keys(methods)) {
50
- if (['get', 'post', 'put', 'patch', 'delete', 'head', 'options'].includes(method)) {
51
- endpoints.push({
52
- method: method.toUpperCase(),
53
- path: routePath,
54
- source: filename,
55
- });
56
- }
57
- }
58
- }
59
- }
60
- }
61
- }
62
- catch {
63
- // File doesn't exist or can't be parsed — skip
64
- }
65
- }
66
- return endpoints;
67
- }
68
- /** Scans C# files for controllers and Minimal APIs. */
69
- function extractCsEndpoints(content, relPath) {
70
- const endpoints = [];
71
- // 1. Controller style routing
72
- const classRegex = /class\s+(\w+Controller)/gi;
73
- const classes = [];
74
- let classMatch;
75
- while ((classMatch = classRegex.exec(content)) !== null) {
76
- classes.push({
77
- name: classMatch[1],
78
- index: classMatch.index,
79
- });
80
- }
81
- const routeAttrRegex = /\[Route\s*\(\s*"([^"]*)"\s*\)\]/gi;
82
- const classRoutes = [];
83
- let routeMatch;
84
- while ((routeMatch = routeAttrRegex.exec(content)) !== null) {
85
- classRoutes.push({
86
- route: routeMatch[1],
87
- index: routeMatch.index,
88
- });
89
- }
90
- const versionAttrRegex = /\[ApiVersion\s*\(\s*["']?([^"'\s\)]+)["']?\s*\)\]/gi;
91
- const apiVersions = [];
92
- let versionMatch;
93
- while ((versionMatch = versionAttrRegex.exec(content)) !== null) {
94
- apiVersions.push({
95
- version: versionMatch[1],
96
- index: versionMatch.index,
97
- });
98
- }
99
- const controllerRoutes = [];
100
- for (const cr of classRoutes) {
101
- const targetClass = classes.find(c => c.index > cr.index);
102
- if (targetClass) {
103
- const targetVersion = apiVersions.find(v => v.index > cr.index - 100 && v.index < targetClass.index);
104
- controllerRoutes.push({
105
- route: cr.route,
106
- controllerName: targetClass.name,
107
- version: targetVersion?.version,
108
- classIndex: targetClass.index,
109
- });
110
- }
111
- }
112
- const httpAttrRegex = /\[Http(Get|Post|Put|Patch|Delete)(?:\s*\(\s*"([^"]*)"\s*\))?\]/gi;
113
- let httpMatch;
114
- while ((httpMatch = httpAttrRegex.exec(content)) !== null) {
115
- const method = httpMatch[1].toUpperCase();
116
- const actionRoute = httpMatch[2] || '';
117
- const index = httpMatch.index;
118
- let matchedController = controllerRoutes[0];
119
- for (const cr of controllerRoutes) {
120
- if (cr.classIndex < index) {
121
- matchedController = cr;
122
- }
123
- else {
124
- break;
125
- }
126
- }
127
- let resolvedRoute = '';
128
- if (matchedController) {
129
- let baseRoute = matchedController.route;
130
- const controllerBaseName = matchedController.controllerName.replace(/Controller$/i, '');
131
- baseRoute = baseRoute.replace(/\[controller\]/gi, controllerBaseName);
132
- const ver = matchedController.version;
133
- const verReplacement = ver ? 'v' + ver.split('.')[0] : 'v1';
134
- baseRoute = baseRoute.replace(/\{version(:apiVersion)?\}/gi, verReplacement);
135
- if (actionRoute) {
136
- resolvedRoute = baseRoute.endsWith('/') || actionRoute.startsWith('/')
137
- ? `${baseRoute}${actionRoute}`
138
- : `${baseRoute}/${actionRoute}`;
139
- }
140
- else {
141
- resolvedRoute = baseRoute;
142
- }
143
- }
144
- else {
145
- resolvedRoute = actionRoute;
146
- }
147
- resolvedRoute = resolvedRoute
148
- .replace(/\/+/g, '/')
149
- .replace(/:[a-zA-Z0-9\?]+/g, '');
150
- if (resolvedRoute && !resolvedRoute.startsWith('/')) {
151
- resolvedRoute = '/' + resolvedRoute;
152
- }
153
- if (resolvedRoute) {
154
- endpoints.push({
155
- method,
156
- path: resolvedRoute,
157
- source: relPath,
158
- });
159
- }
160
- }
161
- // 2. Minimal API style routing
162
- const groupRegex = /(?:const|var|let)?\s*(\w+)\s*=\s*(?:\w+)\.MapGroup\s*\(\s*"([^"]+)"/gi;
163
- const groups = new Map();
164
- let groupMatch;
165
- while ((groupMatch = groupRegex.exec(content)) !== null) {
166
- groups.set(groupMatch[1], groupMatch[2]);
167
- }
168
- const minimalApiRegex = /\b(\w+)?\.?Map(Get|Post|Put|Patch|Delete)\s*\(\s*"([^"]+)"/gi;
169
- let minMatch;
170
- while ((minMatch = minimalApiRegex.exec(content)) !== null) {
171
- const varName = minMatch[1];
172
- const method = minMatch[2].toUpperCase();
173
- const actionRoute = minMatch[3];
174
- let fullPath = actionRoute;
175
- if (varName && groups.has(varName)) {
176
- const groupPath = groups.get(varName);
177
- fullPath = groupPath.endsWith('/') || actionRoute.startsWith('/')
178
- ? `${groupPath}${actionRoute}`
179
- : `${groupPath}/${actionRoute}`;
180
- }
181
- fullPath = fullPath
182
- .replace(/\/+/g, '/')
183
- .replace(/:[a-zA-Z0-9\?]+/g, '');
184
- if (fullPath && !fullPath.startsWith('/')) {
185
- fullPath = '/' + fullPath;
186
- }
187
- if (fullPath) {
188
- endpoints.push({
189
- method,
190
- path: fullPath,
191
- source: relPath,
192
- });
193
- }
194
- }
195
- return endpoints;
196
- }
197
- /** Scans source files for common route patterns recursively using globby. */
198
- async function scanRoutePatterns(repoPath) {
199
- const endpoints = [];
200
- const routeRegex = /\.(get|post|put|patch|delete)\s*\(\s*['"`]([^'"`]+)['"`]/gi;
201
- try {
202
- const files = await globby(['**/*.ts', '**/*.js', '**/*.cs', '**/*.py'], {
203
- cwd: repoPath,
204
- absolute: true,
205
- ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
206
- });
207
- for (const file of files) {
208
- try {
209
- const stat = await fs.stat(file);
210
- if (!stat.isFile() || stat.size > 100_000)
211
- continue; // Skip large files
212
- const content = await fs.readFile(file, 'utf-8');
213
- const relPath = path.relative(repoPath, file);
214
- if (file.endsWith('.cs')) {
215
- endpoints.push(...extractCsEndpoints(content, relPath));
216
- }
217
- else {
218
- // Express/Fastify/Hono/etc style routes
219
- let match;
220
- routeRegex.lastIndex = 0;
221
- while ((match = routeRegex.exec(content)) !== null) {
222
- endpoints.push({
223
- method: match[1].toUpperCase(),
224
- path: match[2],
225
- source: relPath,
226
- });
227
- }
228
- }
229
- }
230
- catch {
231
- continue;
232
- }
233
- }
234
- }
235
- catch {
236
- // Ignore errors
237
- }
238
- // De-duplicate endpoints
239
- const seen = new Set();
240
- const uniqueEndpoints = [];
241
- for (const ep of endpoints) {
242
- const key = `${ep.method}:${ep.path}`;
243
- if (!seen.has(key)) {
244
- seen.add(key);
245
- uniqueEndpoints.push(ep);
246
- }
247
- }
248
- return uniqueEndpoints;
249
- }
250
- //# sourceMappingURL=detect-apis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect-apis.js","sourceRoot":"","sources":["../../src/analyzers/detect-apis.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * @module analyzers/messaging-analyzer
3
- * Detects publishers and subscribers for pub/sub messaging topologies
4
- * across multiple programming languages and frameworks.
5
- */
6
- import type { MessagingTopology } from '../types.js';
7
- /**
8
- * Analyzes messaging/event topology in a repository.
9
- *
10
- * Scans C#, JS/TS, Python, and Go source files for publish and subscribe
11
- * patterns and extracts message/event contracts.
12
- *
13
- * @param repoPath - Absolute path to the repository root.
14
- * @returns Detected publishers and subscribers.
15
- */
16
- export declare function analyzeMessaging(repoPath: string): Promise<MessagingTopology>;
17
- //# sourceMappingURL=messaging-analyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messaging-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/messaging-analyzer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,aAAa,CAAC;AAE1F;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyOnF"}
@@ -1,229 +0,0 @@
1
- /**
2
- * @module analyzers/messaging-analyzer
3
- * Detects publishers and subscribers for pub/sub messaging topologies
4
- * across multiple programming languages and frameworks.
5
- */
6
- import * as fs from 'node:fs/promises';
7
- import * as path from 'node:path';
8
- import { globby } from 'globby';
9
- /**
10
- * Analyzes messaging/event topology in a repository.
11
- *
12
- * Scans C#, JS/TS, Python, and Go source files for publish and subscribe
13
- * patterns and extracts message/event contracts.
14
- *
15
- * @param repoPath - Absolute path to the repository root.
16
- * @returns Detected publishers and subscribers.
17
- */
18
- export async function analyzeMessaging(repoPath) {
19
- const publishers = [];
20
- const subscribers = [];
21
- try {
22
- const files = await globby(['**/*.ts', '**/*.js', '**/*.cs', '**/*.py', '**/*.go'], {
23
- cwd: repoPath,
24
- absolute: true,
25
- ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**', '**/dist/**', '**/out/**', '**/.git/**'],
26
- });
27
- for (const file of files) {
28
- try {
29
- const stat = await fs.stat(file);
30
- if (!stat.isFile() || stat.size > 200_000)
31
- continue; // Skip large files
32
- const content = await fs.readFile(file, 'utf-8');
33
- const relPath = path.relative(repoPath, file).replace(/\\/g, '/');
34
- if (file.endsWith('.cs')) {
35
- // ── C# Messaging Patterns ────────────────────────────────────────
36
- // MediatR notification handler
37
- // INotificationHandler<MyNotification>
38
- const mediatrSubRegex = /:\s*INotificationHandler\s*<\s*(\w+)\s*>/g;
39
- let match;
40
- while ((match = mediatrSubRegex.exec(content)) !== null) {
41
- subscribers.push({
42
- contractType: match[1],
43
- handlerFile: relPath,
44
- registrationFile: relPath,
45
- });
46
- }
47
- // MediatR command/query handler
48
- // IRequestHandler<MyRequest, MyResponse> or IRequestHandler<MyRequest>
49
- const requestHandlerRegex = /:\s*IRequestHandler\s*<\s*(\w+)(?:\s*,\s*\w+)?\s*>/g;
50
- while ((match = requestHandlerRegex.exec(content)) !== null) {
51
- subscribers.push({
52
- contractType: match[1],
53
- handlerFile: relPath,
54
- registrationFile: relPath,
55
- });
56
- }
57
- // MassTransit Consumer: IConsumer<MyMessage>
58
- const massTransitSubRegex = /:\s*IConsumer\s*<\s*(\w+)\s*>/g;
59
- while ((match = massTransitSubRegex.exec(content)) !== null) {
60
- subscribers.push({
61
- contractType: match[1],
62
- handlerFile: relPath,
63
- registrationFile: relPath,
64
- });
65
- }
66
- // NServiceBus Handler: IHandleMessages<MyMessage>
67
- const nserviceBusSubRegex = /:\s*IHandleMessages\s*<\s*(\w+)\s*>/g;
68
- while ((match = nserviceBusSubRegex.exec(content)) !== null) {
69
- subscribers.push({
70
- contractType: match[1],
71
- handlerFile: relPath,
72
- registrationFile: relPath,
73
- });
74
- }
75
- // Azure Service Bus triggers: [ServiceBusTrigger("queueOrTopicName")]
76
- const sbtRegex = /\[ServiceBusTrigger\s*\(\s*"([^"]+)"(?:\s*,\s*"[^"]+")?\s*\)\]/g;
77
- while ((match = sbtRegex.exec(content)) !== null) {
78
- subscribers.push({
79
- contractType: 'ServiceBusMessage',
80
- handlerFile: relPath,
81
- registrationFile: relPath,
82
- });
83
- }
84
- // Publishers in C#
85
- // .Publish<MyEvent>( or .PublishAsync<MyEvent>( or .Send<MyCommand>( or .SendAsync<MyCommand>(
86
- const csPubRegex = /\b(?:Publish|PublishAsync|Send|SendAsync)\s*<\s*(\w+)\s*>\s*\(/g;
87
- while ((match = csPubRegex.exec(content)) !== null) {
88
- publishers.push({
89
- contractType: match[1],
90
- topicOrQueue: 'direct/inferred',
91
- publisherFile: relPath,
92
- });
93
- }
94
- const mediatorSendRegex = /\bmediator\s*\.\s*(?:Send|Publish)\s*\(\s*new\s+(\w+)\s*\(/gi;
95
- while ((match = mediatorSendRegex.exec(content)) !== null) {
96
- publishers.push({
97
- contractType: match[1],
98
- topicOrQueue: 'mediator',
99
- publisherFile: relPath,
100
- });
101
- }
102
- }
103
- else if (file.endsWith('.ts') || file.endsWith('.js')) {
104
- // ── TS/JS Messaging Patterns ─────────────────────────────────────
105
- // EventEmitter emitters: emit('event-name', ...)
106
- const tsEmitRegex = /\bemit\s*\(\s*['"`]([^'"`]+)['"`]/g;
107
- let match;
108
- while ((match = tsEmitRegex.exec(content)) !== null) {
109
- publishers.push({
110
- contractType: match[1],
111
- topicOrQueue: 'EventEmitter',
112
- publisherFile: relPath,
113
- });
114
- }
115
- // EventEmitter listeners: on('event-name', ...) or addListener('event-name', ...)
116
- const tsOnRegex = /\b(?:on|addListener)\s*\(\s*['"`]([^'"`]+)['"`]/g;
117
- while ((match = tsOnRegex.exec(content)) !== null) {
118
- subscribers.push({
119
- contractType: match[1],
120
- handlerFile: relPath,
121
- registrationFile: relPath,
122
- });
123
- }
124
- // Kafka/RabbitMQ subscribe: topic: 'topic-name' inside subscription object
125
- const tsSubTopicRegex = /topic\s*:\s*['"`]([^'"`]+)['"`]/g;
126
- while ((match = tsSubTopicRegex.exec(content)) !== null) {
127
- subscribers.push({
128
- contractType: 'Kafka/MQ Message',
129
- handlerFile: relPath,
130
- registrationFile: relPath,
131
- });
132
- }
133
- // BullMQ add: queue.add('job-name', ...)
134
- const bullmqAddRegex = /\badd\s*\(\s*['"`]([^'"`]+)['"`]/g;
135
- while ((match = bullmqAddRegex.exec(content)) !== null) {
136
- publishers.push({
137
- contractType: match[1],
138
- topicOrQueue: 'BullMQ',
139
- publisherFile: relPath,
140
- });
141
- }
142
- }
143
- else if (file.endsWith('.py')) {
144
- // ── Python Messaging Patterns ────────────────────────────────────
145
- // Celery task definitions: @app.task or @shared_task
146
- const celeryTaskRegex = /@(?:[a-zA-Z0-9_]+\.)?(?:task|shared_task)(?:\([^)]*\))?\s*\n\s*def\s+(\w+)\s*\(/g;
147
- let match;
148
- while ((match = celeryTaskRegex.exec(content)) !== null) {
149
- subscribers.push({
150
- contractType: match[1],
151
- handlerFile: relPath,
152
- registrationFile: relPath,
153
- });
154
- }
155
- // Celery task invocations: task.delay(...) or task.apply_async(...)
156
- const celeryDelayRegex = /\b(\w+)\s*\.\s*(?:delay|apply_async)\s*\(/g;
157
- while ((match = celeryDelayRegex.exec(content)) !== null) {
158
- publishers.push({
159
- contractType: match[1],
160
- topicOrQueue: 'Celery',
161
- publisherFile: relPath,
162
- });
163
- }
164
- // RabbitMQ basic_publish: routing_key='key'
165
- const pikaPublishRegex = /routing_key\s*=\s*['"`]([^'"`]+)['"`]/g;
166
- while ((match = pikaPublishRegex.exec(content)) !== null) {
167
- publishers.push({
168
- contractType: match[1],
169
- topicOrQueue: 'RabbitMQ',
170
- publisherFile: relPath,
171
- });
172
- }
173
- }
174
- else if (file.endsWith('.go')) {
175
- // ── Go Messaging Patterns ────────────────────────────────────────
176
- // Go publish/produce calls: Publish("topic", ...) or Produce("topic", ...)
177
- const goPubRegex = /\b(?:Publish|Produce|Send)\s*\(\s*['"`]([^'"`]+)['"`]/g;
178
- let match;
179
- while ((match = goPubRegex.exec(content)) !== null) {
180
- publishers.push({
181
- contractType: 'GoMessage',
182
- topicOrQueue: match[1],
183
- publisherFile: relPath,
184
- });
185
- }
186
- // Go subscribe/consume calls: Subscribe("topic", ...) or Consume("topic", ...)
187
- const goSubRegex = /\b(?:Subscribe|Consume)\s*\(\s*['"`]([^'"`]+)['"`]/g;
188
- while ((match = goSubRegex.exec(content)) !== null) {
189
- subscribers.push({
190
- contractType: 'GoMessage',
191
- handlerFile: relPath,
192
- registrationFile: relPath,
193
- });
194
- }
195
- }
196
- }
197
- catch {
198
- // Skip unreadable files
199
- }
200
- }
201
- }
202
- catch {
203
- // Ignore errors
204
- }
205
- // De-duplicate publishers & subscribers
206
- const uniquePublishers = [];
207
- const seenPub = new Set();
208
- for (const p of publishers) {
209
- const key = `${p.contractType}:${p.topicOrQueue}:${p.publisherFile}`;
210
- if (!seenPub.has(key)) {
211
- seenPub.add(key);
212
- uniquePublishers.push(p);
213
- }
214
- }
215
- const uniqueSubscribers = [];
216
- const seenSub = new Set();
217
- for (const s of subscribers) {
218
- const key = `${s.contractType}:${s.handlerFile}:${s.registrationFile}`;
219
- if (!seenSub.has(key)) {
220
- seenSub.add(key);
221
- uniqueSubscribers.push(s);
222
- }
223
- }
224
- return {
225
- publishers: uniquePublishers,
226
- subscribers: uniqueSubscribers,
227
- };
228
- }
229
- //# sourceMappingURL=messaging-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messaging-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/messaging-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { StoragePort, StorageAdapterMeta } from '../ports/storage.js';
2
- export declare class CentralVaultAdapter implements StoragePort {
3
- readonly meta: StorageAdapterMeta;
4
- private getVaultPath;
5
- writeWorkspaceFile(workspacePath: string, featureId: string, filename: string, content: string): Promise<void>;
6
- readWorkspaceFile(workspacePath: string, featureId: string, filename: string): Promise<string>;
7
- workspaceFileExists(workspacePath: string, featureId: string, filename: string): Promise<boolean>;
8
- resolveWorkspaceFileUrl(workspacePath: string, featureId: string, filename: string): string;
9
- private getBaseVaultPath;
10
- writeBaseFile(workspacePath: string, repoName: string, filename: string, content: string): Promise<void>;
11
- readBaseFile(workspacePath: string, repoName: string, filename: string): Promise<string>;
12
- baseFileExists(workspacePath: string, repoName: string, filename: string): Promise<boolean>;
13
- resolveBaseFileUrl(workspacePath: string, repoName: string, filename: string): string;
14
- deleteWorkspace(workspacePath: string, featureId: string): Promise<void>;
15
- }
16
- //# sourceMappingURL=vault-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vault-storage.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/vault-storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,qBAAa,mBAAoB,YAAW,WAAW;IACrD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAK/B;IAEF,OAAO,CAAC,YAAY;IAId,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9G,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9F,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWvG,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3F,OAAO,CAAC,gBAAgB;IAIlB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxG,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMxF,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWjG,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK/E,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM/E"}
@@ -1,77 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as path from 'node:path';
3
- import * as os from 'node:os';
4
- export class CentralVaultAdapter {
5
- meta = {
6
- name: 'central-vault',
7
- displayName: 'Central Vault',
8
- description: 'Store context in ~/.nexusflow/vault/ — keeps repos clean, Obsidian-compatible.',
9
- configFields: [],
10
- };
11
- getVaultPath(featureId) {
12
- return path.join(os.homedir(), '.nexusflow', 'vault', featureId);
13
- }
14
- async writeWorkspaceFile(workspacePath, featureId, filename, content) {
15
- const vaultDir = this.getVaultPath(featureId);
16
- const filePath = path.join(vaultDir, filename);
17
- await fs.mkdir(path.dirname(filePath), { recursive: true });
18
- await fs.writeFile(filePath, content, 'utf8');
19
- }
20
- async readWorkspaceFile(workspacePath, featureId, filename) {
21
- const vaultDir = this.getVaultPath(featureId);
22
- const filePath = path.join(vaultDir, filename);
23
- return await fs.readFile(filePath, 'utf8');
24
- }
25
- async workspaceFileExists(workspacePath, featureId, filename) {
26
- const vaultDir = this.getVaultPath(featureId);
27
- const filePath = path.join(vaultDir, filename);
28
- try {
29
- await fs.access(filePath);
30
- return true;
31
- }
32
- catch {
33
- return false;
34
- }
35
- }
36
- resolveWorkspaceFileUrl(workspacePath, featureId, filename) {
37
- const vaultDir = this.getVaultPath(featureId);
38
- return path.join(vaultDir, filename).replace(/\\/g, '/');
39
- }
40
- getBaseVaultPath(repoName) {
41
- return path.join(os.homedir(), '.nexusflow', 'vault', '_base', repoName);
42
- }
43
- async writeBaseFile(workspacePath, repoName, filename, content) {
44
- const baseDir = this.getBaseVaultPath(repoName);
45
- const filePath = path.join(baseDir, filename);
46
- await fs.mkdir(path.dirname(filePath), { recursive: true });
47
- await fs.writeFile(filePath, content, 'utf8');
48
- }
49
- async readBaseFile(workspacePath, repoName, filename) {
50
- const baseDir = this.getBaseVaultPath(repoName);
51
- const filePath = path.join(baseDir, filename);
52
- return await fs.readFile(filePath, 'utf8');
53
- }
54
- async baseFileExists(workspacePath, repoName, filename) {
55
- const baseDir = this.getBaseVaultPath(repoName);
56
- const filePath = path.join(baseDir, filename);
57
- try {
58
- await fs.access(filePath);
59
- return true;
60
- }
61
- catch {
62
- return false;
63
- }
64
- }
65
- resolveBaseFileUrl(workspacePath, repoName, filename) {
66
- const baseDir = this.getBaseVaultPath(repoName);
67
- return path.join(baseDir, filename).replace(/\\/g, '/');
68
- }
69
- async deleteWorkspace(workspacePath, featureId) {
70
- const dir = this.getVaultPath(featureId);
71
- try {
72
- await fs.rm(dir, { recursive: true, force: true });
73
- }
74
- catch { }
75
- }
76
- }
77
- //# sourceMappingURL=vault-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vault-storage.js","sourceRoot":"","sources":["../../../src/core/adapters/vault-storage.ts"],"names":[],"mappings":"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"}