edsger 0.5.4 → 0.6.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 (250) hide show
  1. package/.claude/settings.local.json +13 -0
  2. package/dist/api/features/batch-operations.d.ts +4 -4
  3. package/dist/api/features/batch-operations.js +8 -8
  4. package/dist/api/features/feature-utils.d.ts +1 -1
  5. package/dist/api/features/feature-utils.js +2 -2
  6. package/dist/api/features/get-feature.d.ts +1 -1
  7. package/dist/api/features/get-feature.js +4 -2
  8. package/dist/api/features/status-updater.d.ts +3 -7
  9. package/dist/api/features/status-updater.js +3 -4
  10. package/dist/api/features/test-cases.d.ts +4 -4
  11. package/dist/api/features/test-cases.js +11 -9
  12. package/dist/api/features/update-feature.d.ts +2 -2
  13. package/dist/api/features/update-feature.js +4 -4
  14. package/dist/api/features/user-stories.d.ts +4 -4
  15. package/dist/api/features/user-stories.js +11 -9
  16. package/dist/api/mcp-client.d.ts +2 -3
  17. package/dist/api/mcp-client.js +12 -3
  18. package/dist/api/products.d.ts +1 -1
  19. package/dist/api/products.js +4 -2
  20. package/dist/api/test-reports.js +1 -1
  21. package/dist/commands/workflow/config/phase-configs.d.ts +5 -0
  22. package/dist/commands/workflow/config/phase-configs.js +98 -0
  23. package/dist/commands/workflow/core/feature-filter.d.ts +16 -0
  24. package/dist/commands/workflow/core/feature-filter.js +46 -0
  25. package/dist/commands/workflow/core/index.d.ts +8 -0
  26. package/dist/commands/workflow/core/index.js +12 -0
  27. package/dist/commands/workflow/core/pipeline-evaluator.d.ts +24 -0
  28. package/dist/commands/workflow/core/pipeline-evaluator.js +32 -0
  29. package/dist/commands/workflow/core/state-manager.d.ts +24 -0
  30. package/dist/commands/workflow/core/state-manager.js +42 -0
  31. package/dist/commands/workflow/core/workflow-logger.d.ts +20 -0
  32. package/dist/commands/workflow/core/workflow-logger.js +65 -0
  33. package/dist/commands/workflow/executors/phase-executor.d.ts +8 -0
  34. package/dist/commands/workflow/executors/phase-executor.js +238 -0
  35. package/dist/commands/workflow/feature-coordinator.d.ts +33 -0
  36. package/dist/commands/workflow/feature-coordinator.js +126 -0
  37. package/dist/commands/workflow/index.js +3 -3
  38. package/dist/commands/workflow/phase-orchestrator.d.ts +26 -0
  39. package/dist/commands/workflow/phase-orchestrator.js +395 -0
  40. package/dist/commands/workflow/pipeline-runner.d.ts +17 -0
  41. package/dist/commands/workflow/pipeline-runner.js +393 -0
  42. package/dist/commands/workflow/processor.d.ts +46 -0
  43. package/dist/commands/workflow/processor.js +156 -0
  44. package/dist/commands/workflow/runner.d.ts +26 -0
  45. package/dist/commands/workflow/runner.js +119 -0
  46. package/dist/commands/workflow/workflow-runner.d.ts +26 -0
  47. package/dist/commands/workflow/workflow-runner.js +119 -0
  48. package/dist/index.d.ts +3 -3
  49. package/dist/index.js +62 -3
  50. package/dist/phases/bug-fixing/analyzer.d.ts +0 -2
  51. package/dist/phases/bug-fixing/analyzer.js +3 -4
  52. package/dist/phases/bug-fixing/context-fetcher.d.ts +1 -1
  53. package/dist/phases/bug-fixing/context-fetcher.js +7 -5
  54. package/dist/phases/bug-fixing/mcp-server.d.ts +1 -1
  55. package/dist/phases/bug-fixing/mcp-server.js +9 -5
  56. package/dist/phases/code-implementation/analyzer-helpers.d.ts +3 -3
  57. package/dist/phases/code-implementation/analyzer-helpers.js +7 -7
  58. package/dist/phases/code-implementation/analyzer.d.ts +0 -3
  59. package/dist/phases/code-implementation/analyzer.js +7 -19
  60. package/dist/phases/code-implementation/context-fetcher.d.ts +1 -1
  61. package/dist/phases/code-implementation/context-fetcher.js +5 -5
  62. package/dist/phases/code-implementation/context.d.ts +17 -0
  63. package/dist/phases/code-implementation/context.js +86 -0
  64. package/dist/phases/code-implementation/index.d.ts +32 -0
  65. package/dist/phases/code-implementation/index.js +630 -0
  66. package/dist/phases/code-implementation/mcp-server.d.ts +1 -1
  67. package/dist/phases/code-implementation/mcp-server.js +9 -5
  68. package/dist/phases/code-implementation/outcome.d.ts +19 -0
  69. package/dist/phases/code-implementation/outcome.js +51 -0
  70. package/dist/phases/code-implementation/prompts.d.ts +5 -0
  71. package/dist/phases/code-implementation/prompts.js +108 -0
  72. package/dist/phases/code-implementation-verification/agent.d.ts +31 -0
  73. package/dist/phases/code-implementation-verification/agent.js +196 -0
  74. package/dist/phases/code-implementation-verification/index.d.ts +15 -1
  75. package/dist/phases/code-implementation-verification/index.js +126 -1
  76. package/dist/phases/code-refine/analyzer.d.ts +0 -3
  77. package/dist/phases/code-refine/analyzer.js +3 -9
  78. package/dist/phases/code-refine/context-fetcher.d.ts +3 -3
  79. package/dist/phases/code-refine/context-fetcher.js +10 -6
  80. package/dist/phases/code-refine/context.d.ts +94 -0
  81. package/dist/phases/code-refine/context.js +423 -0
  82. package/dist/phases/code-refine/index.d.ts +39 -5
  83. package/dist/phases/code-refine/index.js +371 -5
  84. package/dist/phases/code-refine/prompts.d.ts +4 -0
  85. package/dist/phases/code-refine/prompts.js +190 -0
  86. package/dist/phases/code-refine/retry-handler.js +2 -2
  87. package/dist/phases/code-refine-verification/analysis/llm-analyzer.d.ts +22 -0
  88. package/dist/phases/code-refine-verification/analysis/llm-analyzer.js +134 -0
  89. package/dist/phases/code-refine-verification/github.d.ts +23 -0
  90. package/dist/phases/code-refine-verification/github.js +190 -0
  91. package/dist/phases/code-refine-verification/index.d.ts +9 -4
  92. package/dist/phases/code-refine-verification/index.js +214 -4
  93. package/dist/phases/code-refine-verification/llm-analyzer.d.ts +22 -0
  94. package/dist/phases/code-refine-verification/llm-analyzer.js +134 -0
  95. package/dist/phases/code-refine-verification/prompts.d.ts +5 -0
  96. package/dist/phases/code-refine-verification/prompts.js +80 -0
  97. package/dist/phases/code-refine-verification/types.d.ts +68 -0
  98. package/dist/phases/code-refine-verification/types.js +4 -0
  99. package/dist/phases/code-refine-verification/verifier.d.ts +0 -3
  100. package/dist/phases/code-refine-verification/verifier.js +3 -8
  101. package/dist/phases/code-review/analyzer.d.ts +0 -3
  102. package/dist/phases/code-review/analyzer.js +3 -9
  103. package/dist/phases/code-review/context-fetcher.d.ts +3 -3
  104. package/dist/phases/code-review/context-fetcher.js +10 -6
  105. package/dist/phases/code-review/context.d.ts +92 -0
  106. package/dist/phases/code-review/context.js +296 -0
  107. package/dist/phases/code-review/index.d.ts +27 -5
  108. package/dist/phases/code-review/index.js +361 -5
  109. package/dist/phases/code-testing/analyzer.d.ts +0 -3
  110. package/dist/phases/code-testing/analyzer.js +2 -14
  111. package/dist/phases/code-testing/context-fetcher.d.ts +1 -1
  112. package/dist/phases/code-testing/context-fetcher.js +5 -5
  113. package/dist/phases/code-testing/index.d.ts +1 -1
  114. package/dist/phases/code-testing/index.js +1 -1
  115. package/dist/phases/feature-analysis/agent.d.ts +2 -0
  116. package/dist/phases/feature-analysis/agent.js +105 -0
  117. package/dist/phases/feature-analysis/analyzer-helpers.d.ts +2 -54
  118. package/dist/phases/feature-analysis/analyzer-helpers.js +0 -403
  119. package/dist/phases/feature-analysis/context-fetcher.d.ts +9 -1
  120. package/dist/phases/feature-analysis/context-fetcher.js +53 -5
  121. package/dist/phases/feature-analysis/context.d.ts +26 -0
  122. package/dist/phases/feature-analysis/context.js +134 -0
  123. package/dist/phases/feature-analysis/index.d.ts +8 -4
  124. package/dist/phases/feature-analysis/index.js +147 -4
  125. package/dist/phases/feature-analysis/mcp-server.d.ts +1 -1
  126. package/dist/phases/feature-analysis/mcp-server.js +15 -9
  127. package/dist/phases/feature-analysis/outcome.d.ts +21 -0
  128. package/dist/phases/feature-analysis/outcome.js +143 -0
  129. package/dist/phases/feature-analysis/prompts-improvement.d.ts +1 -1
  130. package/dist/phases/feature-analysis/prompts.d.ts +9 -2
  131. package/dist/phases/feature-analysis/prompts.js +111 -6
  132. package/dist/phases/feature-analysis-verification/agent.d.ts +33 -0
  133. package/dist/phases/feature-analysis-verification/agent.js +115 -0
  134. package/dist/phases/feature-analysis-verification/index.d.ts +15 -1
  135. package/dist/phases/feature-analysis-verification/index.js +92 -1
  136. package/dist/phases/feature-analysis-verification/prompts.d.ts +2 -3
  137. package/dist/phases/feature-analysis-verification/prompts.js +1 -1
  138. package/dist/phases/functional-testing/analyzer.d.ts +0 -3
  139. package/dist/phases/functional-testing/analyzer.js +6 -25
  140. package/dist/phases/functional-testing/context-fetcher.d.ts +1 -1
  141. package/dist/phases/functional-testing/context-fetcher.js +5 -5
  142. package/dist/phases/functional-testing/http-fallback.d.ts +1 -3
  143. package/dist/phases/functional-testing/http-fallback.js +7 -3
  144. package/dist/phases/functional-testing/index.d.ts +1 -1
  145. package/dist/phases/functional-testing/index.js +1 -1
  146. package/dist/phases/functional-testing/mcp-server.d.ts +1 -1
  147. package/dist/phases/functional-testing/mcp-server.js +10 -6
  148. package/dist/phases/functional-testing/test-report-creator.d.ts +0 -4
  149. package/dist/phases/functional-testing/test-report-creator.js +11 -9
  150. package/dist/phases/functional-testing/test-retry-handler.js +2 -4
  151. package/dist/phases/pull-request/creator.d.ts +1 -1
  152. package/dist/phases/pull-request/creator.js +3 -1
  153. package/dist/phases/pull-request/handler.d.ts +1 -3
  154. package/dist/phases/pull-request/handler.js +3 -3
  155. package/dist/phases/technical-design/analyzer-helpers.d.ts +1 -14
  156. package/dist/phases/technical-design/analyzer-helpers.js +0 -153
  157. package/dist/phases/technical-design/analyzer.d.ts +0 -3
  158. package/dist/phases/technical-design/analyzer.js +12 -29
  159. package/dist/phases/technical-design/context-fetcher.d.ts +1 -1
  160. package/dist/phases/technical-design/context-fetcher.js +5 -5
  161. package/dist/phases/technical-design/context.d.ts +12 -0
  162. package/dist/phases/technical-design/context.js +39 -0
  163. package/dist/phases/technical-design/http-fallback.d.ts +1 -3
  164. package/dist/phases/technical-design/http-fallback.js +7 -3
  165. package/dist/phases/technical-design/index.d.ts +21 -0
  166. package/dist/phases/technical-design/index.js +438 -0
  167. package/dist/phases/technical-design/mcp-server.d.ts +1 -1
  168. package/dist/phases/technical-design/mcp-server.js +15 -7
  169. package/dist/phases/technical-design/outcome.d.ts +25 -0
  170. package/dist/phases/technical-design/outcome.js +39 -0
  171. package/dist/phases/technical-design/prompts.d.ts +5 -0
  172. package/dist/phases/technical-design/prompts.js +93 -0
  173. package/dist/phases/technical-design-verification/agent.d.ts +53 -0
  174. package/dist/phases/technical-design-verification/agent.js +170 -0
  175. package/dist/phases/technical-design-verification/index.d.ts +26 -1
  176. package/dist/phases/technical-design-verification/index.js +153 -1
  177. package/dist/services/audit-logs.d.ts +3 -7
  178. package/dist/services/audit-logs.js +6 -25
  179. package/dist/services/checklist.js +12 -4
  180. package/dist/services/feedbacks.js +6 -4
  181. package/dist/types/index.d.ts +0 -1
  182. package/dist/types/pipeline.d.ts +0 -4
  183. package/dist/utils/formatters.d.ts +3 -3
  184. package/package.json +2 -3
  185. package/dist/cli/commands/code-implementation-command.d.ts +0 -2
  186. package/dist/cli/commands/code-implementation-command.js +0 -36
  187. package/dist/cli/commands/code-review-command.d.ts +0 -2
  188. package/dist/cli/commands/code-review-command.js +0 -39
  189. package/dist/cli/commands/feature-analysis-command.d.ts +0 -2
  190. package/dist/cli/commands/feature-analysis-command.js +0 -36
  191. package/dist/cli/commands/functional-testing-command.d.ts +0 -2
  192. package/dist/cli/commands/functional-testing-command.js +0 -36
  193. package/dist/cli/commands/refactor-command.d.ts +0 -2
  194. package/dist/cli/commands/refactor-command.js +0 -123
  195. package/dist/cli/commands/technical-design-command.d.ts +0 -2
  196. package/dist/cli/commands/technical-design-command.js +0 -36
  197. package/dist/cli/commands/workflow-command.d.ts +0 -2
  198. package/dist/cli/commands/workflow-command.js +0 -34
  199. package/dist/cli/formatters/code-implementation-formatter.d.ts +0 -9
  200. package/dist/cli/formatters/code-implementation-formatter.js +0 -27
  201. package/dist/cli/formatters/feature-analysis-formatter.d.ts +0 -2
  202. package/dist/cli/formatters/feature-analysis-formatter.js +0 -27
  203. package/dist/cli/formatters/formatter-utils.d.ts +0 -23
  204. package/dist/cli/formatters/formatter-utils.js +0 -67
  205. package/dist/cli/formatters/functional-testing-formatter.d.ts +0 -15
  206. package/dist/cli/formatters/functional-testing-formatter.js +0 -37
  207. package/dist/cli/formatters/technical-design-formatter.d.ts +0 -7
  208. package/dist/cli/formatters/technical-design-formatter.js +0 -30
  209. package/dist/cli/index.d.ts +0 -3
  210. package/dist/cli/index.js +0 -78
  211. package/dist/cli/utils/command-handler.d.ts +0 -23
  212. package/dist/cli/utils/command-handler.js +0 -39
  213. package/dist/cli/utils/validation.d.ts +0 -25
  214. package/dist/cli/utils/validation.js +0 -58
  215. package/dist/cli/utils/workflow-utils.d.ts +0 -21
  216. package/dist/cli/utils/workflow-utils.js +0 -47
  217. package/dist/cli.d.ts +0 -3
  218. package/dist/cli.js +0 -78
  219. package/dist/phases/code-review/reviewer.d.ts +0 -3
  220. package/dist/phases/code-review/reviewer.js +0 -192
  221. package/dist/phases/feature-analysis/improvement-prompts.d.ts +0 -8
  222. package/dist/phases/feature-analysis/improvement-prompts.js +0 -109
  223. package/dist/phases/technical-design/prompts-improment.d.ts +0 -5
  224. package/dist/phases/technical-design/prompts-improment.js +0 -93
  225. package/dist/prompts/bug-fixing.d.ts +0 -2
  226. package/dist/prompts/bug-fixing.js +0 -63
  227. package/dist/prompts/checklist-verification.d.ts +0 -11
  228. package/dist/prompts/checklist-verification.js +0 -153
  229. package/dist/prompts/code-implementation-improvement.d.ts +0 -5
  230. package/dist/prompts/code-implementation-improvement.js +0 -108
  231. package/dist/prompts/code-implementation-verification.d.ts +0 -3
  232. package/dist/prompts/code-implementation-verification.js +0 -176
  233. package/dist/prompts/code-implementation.d.ts +0 -3
  234. package/dist/prompts/code-implementation.js +0 -132
  235. package/dist/prompts/feature-analysis-improvement.d.ts +0 -8
  236. package/dist/prompts/feature-analysis-improvement.js +0 -109
  237. package/dist/prompts/feature-analysis.d.ts +0 -3
  238. package/dist/prompts/feature-analysis.js +0 -149
  239. package/dist/prompts/formatters.d.ts +0 -42
  240. package/dist/prompts/formatters.js +0 -168
  241. package/dist/prompts/functional-testing.d.ts +0 -3
  242. package/dist/prompts/functional-testing.js +0 -126
  243. package/dist/prompts/index.d.ts +0 -6
  244. package/dist/prompts/index.js +0 -7
  245. package/dist/prompts/technical-design-improvement.d.ts +0 -5
  246. package/dist/prompts/technical-design-improvement.js +0 -93
  247. package/dist/prompts/technical-design-verification.d.ts +0 -13
  248. package/dist/prompts/technical-design-verification.js +0 -214
  249. package/dist/prompts/technical-design.d.ts +0 -3
  250. package/dist/prompts/technical-design.js +0 -187
@@ -0,0 +1,13 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Read(//Users/steven/development/edsger/**)",
5
+ "Bash(npm run build)",
6
+ "Bash(node:*)",
7
+ "Bash(git add:*)",
8
+ "Bash(git commit:*)"
9
+ ],
10
+ "deny": [],
11
+ "ask": []
12
+ }
13
+ }
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * Batch update user story statuses
3
3
  */
4
- export declare function batchUpdateUserStoryStatus(mcpServerUrl: string, mcpToken: string, userStoryIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
4
+ export declare function batchUpdateUserStoryStatus(userStoryIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
5
5
  /**
6
6
  * Batch update test case statuses
7
7
  */
8
- export declare function batchUpdateTestCaseStatus(mcpServerUrl: string, mcpToken: string, testCaseIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
8
+ export declare function batchUpdateTestCaseStatus(testCaseIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
9
9
  /**
10
10
  * Batch delete user stories
11
11
  */
12
- export declare function batchDeleteUserStories(mcpServerUrl: string, mcpToken: string, userStoryIds: string[], verbose?: boolean): Promise<boolean>;
12
+ export declare function batchDeleteUserStories(userStoryIds: string[], verbose?: boolean): Promise<boolean>;
13
13
  /**
14
14
  * Batch delete test cases
15
15
  */
16
- export declare function batchDeleteTestCases(mcpServerUrl: string, mcpToken: string, testCaseIds: string[], verbose?: boolean): Promise<boolean>;
16
+ export declare function batchDeleteTestCases(testCaseIds: string[], verbose?: boolean): Promise<boolean>;
@@ -3,13 +3,13 @@ import { callMcpEndpoint } from '../mcp-client.js';
3
3
  /**
4
4
  * Batch update user story statuses
5
5
  */
6
- export async function batchUpdateUserStoryStatus(mcpServerUrl, mcpToken, userStoryIds, status, verbose) {
6
+ export async function batchUpdateUserStoryStatus(userStoryIds, status, verbose) {
7
7
  try {
8
8
  if (verbose) {
9
9
  logInfo(`Batch updating ${userStoryIds.length} user stories to status: ${status}`);
10
10
  }
11
11
  for (const id of userStoryIds) {
12
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/update_status', {
12
+ await callMcpEndpoint('user_stories/update_status', {
13
13
  user_story_id: id,
14
14
  status,
15
15
  });
@@ -28,13 +28,13 @@ export async function batchUpdateUserStoryStatus(mcpServerUrl, mcpToken, userSto
28
28
  /**
29
29
  * Batch update test case statuses
30
30
  */
31
- export async function batchUpdateTestCaseStatus(mcpServerUrl, mcpToken, testCaseIds, status, verbose) {
31
+ export async function batchUpdateTestCaseStatus(testCaseIds, status, verbose) {
32
32
  try {
33
33
  if (verbose) {
34
34
  logInfo(`Batch updating ${testCaseIds.length} test cases to status: ${status}`);
35
35
  }
36
36
  for (const id of testCaseIds) {
37
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/update_status', {
37
+ await callMcpEndpoint('test_cases/update_status', {
38
38
  test_case_id: id,
39
39
  status,
40
40
  });
@@ -53,13 +53,13 @@ export async function batchUpdateTestCaseStatus(mcpServerUrl, mcpToken, testCase
53
53
  /**
54
54
  * Batch delete user stories
55
55
  */
56
- export async function batchDeleteUserStories(mcpServerUrl, mcpToken, userStoryIds, verbose) {
56
+ export async function batchDeleteUserStories(userStoryIds, verbose) {
57
57
  try {
58
58
  if (verbose) {
59
59
  logInfo(`Batch deleting ${userStoryIds.length} user stories`);
60
60
  }
61
61
  for (const id of userStoryIds) {
62
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/delete', {
62
+ await callMcpEndpoint('user_stories/delete', {
63
63
  user_story_id: id,
64
64
  });
65
65
  }
@@ -77,13 +77,13 @@ export async function batchDeleteUserStories(mcpServerUrl, mcpToken, userStoryId
77
77
  /**
78
78
  * Batch delete test cases
79
79
  */
80
- export async function batchDeleteTestCases(mcpServerUrl, mcpToken, testCaseIds, verbose) {
80
+ export async function batchDeleteTestCases(testCaseIds, verbose) {
81
81
  try {
82
82
  if (verbose) {
83
83
  logInfo(`Batch deleting ${testCaseIds.length} test cases`);
84
84
  }
85
85
  for (const id of testCaseIds) {
86
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/delete', {
86
+ await callMcpEndpoint('test_cases/delete', {
87
87
  test_case_id: id,
88
88
  });
89
89
  }
@@ -10,4 +10,4 @@ export declare function sortFeaturesByUpdatedAt(features: FeatureInfo[]): Featur
10
10
  /**
11
11
  * Get features with ready_for_dev status for a product
12
12
  */
13
- export declare function getReadyForDevFeatures(mcpServerUrl: string, mcpToken: string, productId: string, verbose?: boolean): Promise<FeatureInfo[]>;
13
+ export declare function getReadyForDevFeatures(productId: string, verbose?: boolean): Promise<FeatureInfo[]>;
@@ -19,12 +19,12 @@ export function sortFeaturesByUpdatedAt(features) {
19
19
  /**
20
20
  * Get features with ready_for_dev status for a product
21
21
  */
22
- export async function getReadyForDevFeatures(mcpServerUrl, mcpToken, productId, verbose) {
22
+ export async function getReadyForDevFeatures(productId, verbose) {
23
23
  if (verbose) {
24
24
  logInfo(`Fetching ready_for_dev features for product: ${productId}`);
25
25
  }
26
26
  try {
27
- const result = (await callMcpEndpoint(mcpServerUrl, mcpToken, 'features/list', {
27
+ const result = (await callMcpEndpoint('features/list', {
28
28
  product_id: productId,
29
29
  status: 'ready_for_dev',
30
30
  }));
@@ -2,4 +2,4 @@ import { FeatureInfo } from '../../types/features.js';
2
2
  /**
3
3
  * Get feature details by ID
4
4
  */
5
- export declare function getFeature(mcpServerUrl: string, mcpToken: string, featureId: string, verbose?: boolean): Promise<FeatureInfo>;
5
+ export declare function getFeature(featureId: string, verbose?: boolean): Promise<FeatureInfo>;
@@ -3,11 +3,13 @@ import { callMcpEndpoint } from '../mcp-client.js';
3
3
  /**
4
4
  * Get feature details by ID
5
5
  */
6
- export async function getFeature(mcpServerUrl, mcpToken, featureId, verbose) {
6
+ export async function getFeature(featureId, verbose) {
7
7
  if (verbose) {
8
8
  logInfo(`Fetching feature details for: ${featureId}`);
9
9
  }
10
- const result = (await callMcpEndpoint(mcpServerUrl, mcpToken, 'features/get', { feature_id: featureId }));
10
+ const result = (await callMcpEndpoint('features/get', {
11
+ feature_id: featureId,
12
+ }));
11
13
  if (!result.features || result.features.length === 0) {
12
14
  throw new Error(`Feature not found: ${featureId}`);
13
15
  }
@@ -3,11 +3,7 @@
3
3
  * Updates feature status at each phase of the development workflow
4
4
  */
5
5
  import type { FeatureStatus } from '../../types/index.js';
6
- interface McpClientConfig {
7
- readonly mcpServerUrl: string;
8
- readonly mcpToken: string;
9
- }
10
- interface StatusUpdateOptions extends McpClientConfig {
6
+ interface StatusUpdateOptions {
11
7
  readonly featureId: string;
12
8
  readonly status: FeatureStatus;
13
9
  readonly verbose?: boolean;
@@ -15,7 +11,7 @@ interface StatusUpdateOptions extends McpClientConfig {
15
11
  /**
16
12
  * Update feature status via MCP endpoint
17
13
  */
18
- export declare function updateFeatureStatus({ mcpServerUrl, mcpToken, featureId, status, verbose, }: StatusUpdateOptions): Promise<boolean>;
14
+ export declare function updateFeatureStatus({ featureId, status, verbose, }: StatusUpdateOptions): Promise<boolean>;
19
15
  /**
20
16
  * Map pipeline phase to feature status
21
17
  */
@@ -23,5 +19,5 @@ export declare const getStatusForPhase: (phase: string) => FeatureStatus;
23
19
  /**
24
20
  * Update feature status based on pipeline phase
25
21
  */
26
- export declare const updateFeatureStatusForPhase: (mcpConfig: McpClientConfig, featureId: string, phase: string, verbose?: boolean) => Promise<boolean>;
22
+ export declare const updateFeatureStatusForPhase: (featureId: string, phase: string, verbose?: boolean) => Promise<boolean>;
27
23
  export {};
@@ -7,12 +7,12 @@ import { callMcpEndpoint } from '../mcp-client.js';
7
7
  /**
8
8
  * Update feature status via MCP endpoint
9
9
  */
10
- export async function updateFeatureStatus({ mcpServerUrl, mcpToken, featureId, status, verbose = false, }) {
10
+ export async function updateFeatureStatus({ featureId, status, verbose = false, }) {
11
11
  try {
12
12
  if (verbose) {
13
13
  logInfo(`Updating feature ${featureId} status to: ${status}`);
14
14
  }
15
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'features/update', {
15
+ await callMcpEndpoint('features/update', {
16
16
  feature_id: featureId,
17
17
  status,
18
18
  });
@@ -73,10 +73,9 @@ export const getStatusForPhase = (phase) => {
73
73
  /**
74
74
  * Update feature status based on pipeline phase
75
75
  */
76
- export const updateFeatureStatusForPhase = (mcpConfig, featureId, phase, verbose) => {
76
+ export const updateFeatureStatusForPhase = (featureId, phase, verbose) => {
77
77
  const status = getStatusForPhase(phase);
78
78
  return updateFeatureStatus({
79
- ...mcpConfig,
80
79
  featureId,
81
80
  status,
82
81
  verbose,
@@ -2,11 +2,11 @@ import { TestCase } from '../../types/features.js';
2
2
  /**
3
3
  * Get test cases for a feature
4
4
  */
5
- export declare function getTestCases(mcpServerUrl: string, mcpToken: string, featureId: string, verbose?: boolean): Promise<TestCase[]>;
5
+ export declare function getTestCases(featureId: string, verbose?: boolean): Promise<TestCase[]>;
6
6
  /**
7
7
  * Create a new test case for a feature
8
8
  */
9
- export declare function createTestCase(mcpServerUrl: string, mcpToken: string, featureId: string, testCase: {
9
+ export declare function createTestCase(featureId: string, testCase: {
10
10
  name: string;
11
11
  description: string;
12
12
  is_critical?: boolean;
@@ -22,8 +22,8 @@ export declare function createTestCases(mcpServerUrl: string, mcpToken: string,
22
22
  /**
23
23
  * Delete a test case
24
24
  */
25
- export declare function deleteTestCase(mcpServerUrl: string, mcpToken: string, testCaseId: string, verbose?: boolean): Promise<boolean>;
25
+ export declare function deleteTestCase(testCaseId: string, verbose?: boolean): Promise<boolean>;
26
26
  /**
27
27
  * Update test case status
28
28
  */
29
- export declare function updateTestCaseStatus(mcpServerUrl: string, mcpToken: string, testCaseId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
29
+ export declare function updateTestCaseStatus(testCaseId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
@@ -3,22 +3,24 @@ import { callMcpEndpoint } from '../mcp-client.js';
3
3
  /**
4
4
  * Get test cases for a feature
5
5
  */
6
- export async function getTestCases(mcpServerUrl, mcpToken, featureId, verbose) {
6
+ export async function getTestCases(featureId, verbose) {
7
7
  if (verbose) {
8
8
  logInfo(`Fetching test cases for feature: ${featureId}`);
9
9
  }
10
- const result = (await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/list', { feature_id: featureId }));
10
+ const result = (await callMcpEndpoint('test_cases/list', {
11
+ feature_id: featureId,
12
+ }));
11
13
  return (result.test_cases || []);
12
14
  }
13
15
  /**
14
16
  * Create a new test case for a feature
15
17
  */
16
- export async function createTestCase(mcpServerUrl, mcpToken, featureId, testCase, verbose) {
18
+ export async function createTestCase(featureId, testCase, verbose) {
17
19
  try {
18
20
  if (verbose) {
19
21
  logInfo(`Creating test case for feature: ${featureId}`);
20
22
  }
21
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/create', {
23
+ await callMcpEndpoint('test_cases/create', {
22
24
  feature_id: featureId,
23
25
  test_cases: [
24
26
  {
@@ -48,7 +50,7 @@ export async function createTestCases(mcpServerUrl, mcpToken, featureId, testCas
48
50
  logInfo(`Creating ${testCases.length} test cases for feature: ${featureId}`);
49
51
  }
50
52
  for (const testCase of testCases) {
51
- await createTestCase(mcpServerUrl, mcpToken, featureId, testCase, false);
53
+ await createTestCase(featureId, testCase, false);
52
54
  }
53
55
  if (verbose) {
54
56
  logInfo('✅ All test cases created successfully');
@@ -64,12 +66,12 @@ export async function createTestCases(mcpServerUrl, mcpToken, featureId, testCas
64
66
  /**
65
67
  * Delete a test case
66
68
  */
67
- export async function deleteTestCase(mcpServerUrl, mcpToken, testCaseId, verbose) {
69
+ export async function deleteTestCase(testCaseId, verbose) {
68
70
  try {
69
71
  if (verbose) {
70
72
  logInfo(`Deleting test case: ${testCaseId}`);
71
73
  }
72
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/delete', {
74
+ await callMcpEndpoint('test_cases/delete', {
73
75
  test_case_id: testCaseId,
74
76
  });
75
77
  if (verbose) {
@@ -86,12 +88,12 @@ export async function deleteTestCase(mcpServerUrl, mcpToken, testCaseId, verbose
86
88
  /**
87
89
  * Update test case status
88
90
  */
89
- export async function updateTestCaseStatus(mcpServerUrl, mcpToken, testCaseId, status, verbose) {
91
+ export async function updateTestCaseStatus(testCaseId, status, verbose) {
90
92
  try {
91
93
  if (verbose) {
92
94
  logInfo(`Updating test case ${testCaseId} status to: ${status}`);
93
95
  }
94
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_cases/update_status', {
96
+ await callMcpEndpoint('test_cases/update_status', {
95
97
  test_case_id: testCaseId,
96
98
  status,
97
99
  });
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Update feature with new data
3
3
  */
4
- export declare function updateFeature(mcpServerUrl: string, mcpToken: string, featureId: string, updates: {
4
+ export declare function updateFeature(featureId: string, updates: {
5
5
  technical_design?: string;
6
6
  status?: string;
7
7
  pull_request_url?: string;
@@ -10,4 +10,4 @@ export declare function updateFeature(mcpServerUrl: string, mcpToken: string, fe
10
10
  /**
11
11
  * Update technical design for a feature
12
12
  */
13
- export declare function updateTechnicalDesign(mcpServerUrl: string, mcpToken: string, featureId: string, technicalDesign: string, verbose?: boolean): Promise<boolean>;
13
+ export declare function updateTechnicalDesign(featureId: string, technicalDesign: string, verbose?: boolean): Promise<boolean>;
@@ -3,12 +3,12 @@ import { callMcpEndpoint } from '../mcp-client.js';
3
3
  /**
4
4
  * Update feature with new data
5
5
  */
6
- export async function updateFeature(mcpServerUrl, mcpToken, featureId, updates, verbose) {
6
+ export async function updateFeature(featureId, updates, verbose) {
7
7
  try {
8
8
  if (verbose) {
9
9
  logInfo(`Updating feature: ${featureId}`);
10
10
  }
11
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'features/update', {
11
+ await callMcpEndpoint('features/update', {
12
12
  feature_id: featureId,
13
13
  ...updates,
14
14
  });
@@ -26,6 +26,6 @@ export async function updateFeature(mcpServerUrl, mcpToken, featureId, updates,
26
26
  /**
27
27
  * Update technical design for a feature
28
28
  */
29
- export async function updateTechnicalDesign(mcpServerUrl, mcpToken, featureId, technicalDesign, verbose) {
30
- return updateFeature(mcpServerUrl, mcpToken, featureId, { technical_design: technicalDesign }, verbose);
29
+ export async function updateTechnicalDesign(featureId, technicalDesign, verbose) {
30
+ return updateFeature(featureId, { technical_design: technicalDesign }, verbose);
31
31
  }
@@ -2,11 +2,11 @@ import { UserStory } from '../../types/features.js';
2
2
  /**
3
3
  * Get user stories for a feature
4
4
  */
5
- export declare function getUserStories(mcpServerUrl: string, mcpToken: string, featureId: string, verbose?: boolean): Promise<UserStory[]>;
5
+ export declare function getUserStories(featureId: string, verbose?: boolean): Promise<UserStory[]>;
6
6
  /**
7
7
  * Create a new user story for a feature
8
8
  */
9
- export declare function createUserStory(mcpServerUrl: string, mcpToken: string, featureId: string, userStory: {
9
+ export declare function createUserStory(featureId: string, userStory: {
10
10
  title: string;
11
11
  description: string;
12
12
  status?: string;
@@ -22,8 +22,8 @@ export declare function createUserStories(mcpServerUrl: string, mcpToken: string
22
22
  /**
23
23
  * Delete a user story
24
24
  */
25
- export declare function deleteUserStory(mcpServerUrl: string, mcpToken: string, userStoryId: string, verbose?: boolean): Promise<boolean>;
25
+ export declare function deleteUserStory(userStoryId: string, verbose?: boolean): Promise<boolean>;
26
26
  /**
27
27
  * Update user story status
28
28
  */
29
- export declare function updateUserStoryStatus(mcpServerUrl: string, mcpToken: string, userStoryId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
29
+ export declare function updateUserStoryStatus(userStoryId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
@@ -3,22 +3,24 @@ import { callMcpEndpoint } from '../mcp-client.js';
3
3
  /**
4
4
  * Get user stories for a feature
5
5
  */
6
- export async function getUserStories(mcpServerUrl, mcpToken, featureId, verbose) {
6
+ export async function getUserStories(featureId, verbose) {
7
7
  if (verbose) {
8
8
  logInfo(`Fetching user stories for feature: ${featureId}`);
9
9
  }
10
- const result = (await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/list', { feature_id: featureId }));
10
+ const result = (await callMcpEndpoint('user_stories/list', {
11
+ feature_id: featureId,
12
+ }));
11
13
  return (result.user_stories || []);
12
14
  }
13
15
  /**
14
16
  * Create a new user story for a feature
15
17
  */
16
- export async function createUserStory(mcpServerUrl, mcpToken, featureId, userStory, verbose) {
18
+ export async function createUserStory(featureId, userStory, verbose) {
17
19
  try {
18
20
  if (verbose) {
19
21
  logInfo(`Creating user story for feature: ${featureId}`);
20
22
  }
21
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/create', {
23
+ await callMcpEndpoint('user_stories/create', {
22
24
  feature_id: featureId,
23
25
  user_stories: [
24
26
  {
@@ -48,7 +50,7 @@ export async function createUserStories(mcpServerUrl, mcpToken, featureId, userS
48
50
  logInfo(`Creating ${userStories.length} user stories for feature: ${featureId}`);
49
51
  }
50
52
  for (const story of userStories) {
51
- await createUserStory(mcpServerUrl, mcpToken, featureId, story, false);
53
+ await createUserStory(featureId, story, false);
52
54
  }
53
55
  if (verbose) {
54
56
  logInfo('✅ All user stories created successfully');
@@ -64,12 +66,12 @@ export async function createUserStories(mcpServerUrl, mcpToken, featureId, userS
64
66
  /**
65
67
  * Delete a user story
66
68
  */
67
- export async function deleteUserStory(mcpServerUrl, mcpToken, userStoryId, verbose) {
69
+ export async function deleteUserStory(userStoryId, verbose) {
68
70
  try {
69
71
  if (verbose) {
70
72
  logInfo(`Deleting user story: ${userStoryId}`);
71
73
  }
72
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/delete', {
74
+ await callMcpEndpoint('user_stories/delete', {
73
75
  user_story_id: userStoryId,
74
76
  });
75
77
  if (verbose) {
@@ -86,12 +88,12 @@ export async function deleteUserStory(mcpServerUrl, mcpToken, userStoryId, verbo
86
88
  /**
87
89
  * Update user story status
88
90
  */
89
- export async function updateUserStoryStatus(mcpServerUrl, mcpToken, userStoryId, status, verbose) {
91
+ export async function updateUserStoryStatus(userStoryId, status, verbose) {
90
92
  try {
91
93
  if (verbose) {
92
94
  logInfo(`Updating user story ${userStoryId} status to: ${status}`);
93
95
  }
94
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'user_stories/update_status', {
96
+ await callMcpEndpoint('user_stories/update_status', {
95
97
  user_story_id: userStoryId,
96
98
  status,
97
99
  });
@@ -2,16 +2,15 @@
2
2
  * Common MCP client utilities for making HTTP requests to MCP servers
3
3
  */
4
4
  export interface McpRequestOptions {
5
- mcpServerUrl: string;
6
- mcpToken: string;
7
5
  method: string;
8
6
  params: unknown;
9
7
  verbose?: boolean;
10
8
  }
11
9
  /**
12
10
  * Helper function to make HTTP requests to the MCP server
11
+ * Reads EDSGER_MCP_SERVER_URL and EDSGER_MCP_TOKEN from environment variables
13
12
  */
14
- export declare function callMcpEndpoint(mcpServerUrl: string, mcpToken: string, method: string, params: unknown): Promise<unknown>;
13
+ export declare function callMcpEndpoint(method: string, params: unknown): Promise<unknown>;
15
14
  /**
16
15
  * Wrapper for making MCP requests with standardized error handling
17
16
  */
@@ -3,8 +3,17 @@
3
3
  */
4
4
  /**
5
5
  * Helper function to make HTTP requests to the MCP server
6
+ * Reads EDSGER_MCP_SERVER_URL and EDSGER_MCP_TOKEN from environment variables
6
7
  */
7
- export async function callMcpEndpoint(mcpServerUrl, mcpToken, method, params) {
8
+ export async function callMcpEndpoint(method, params) {
9
+ const mcpServerUrl = process.env.EDSGER_MCP_SERVER_URL;
10
+ const mcpToken = process.env.EDSGER_MCP_TOKEN;
11
+ if (!mcpServerUrl) {
12
+ throw new Error('EDSGER_MCP_SERVER_URL environment variable is not set');
13
+ }
14
+ if (!mcpToken) {
15
+ throw new Error('EDSGER_MCP_TOKEN environment variable is not set');
16
+ }
8
17
  try {
9
18
  const response = await fetch(`${mcpServerUrl}/mcp`, {
10
19
  method: 'POST',
@@ -37,12 +46,12 @@ export async function callMcpEndpoint(mcpServerUrl, mcpToken, method, params) {
37
46
  * Wrapper for making MCP requests with standardized error handling
38
47
  */
39
48
  export async function makeMcpRequest(options) {
40
- const { mcpServerUrl, mcpToken, method, params, verbose } = options;
49
+ const { method, params, verbose } = options;
41
50
  if (verbose) {
42
51
  console.log(`Making MCP request: ${method}`);
43
52
  }
44
53
  try {
45
- const result = await callMcpEndpoint(mcpServerUrl, mcpToken, method, params);
54
+ const result = await callMcpEndpoint(method, params);
46
55
  if (verbose) {
47
56
  console.log(`MCP request successful: ${method}`);
48
57
  }
@@ -7,4 +7,4 @@ export interface ProductInfo {
7
7
  /**
8
8
  * Get product details by ID
9
9
  */
10
- export declare function getProduct(mcpServerUrl: string, mcpToken: string, productId: string, verbose?: boolean): Promise<ProductInfo>;
10
+ export declare function getProduct(productId: string, verbose?: boolean): Promise<ProductInfo>;
@@ -3,11 +3,13 @@ import { callMcpEndpoint } from './mcp-client.js';
3
3
  /**
4
4
  * Get product details by ID
5
5
  */
6
- export async function getProduct(mcpServerUrl, mcpToken, productId, verbose) {
6
+ export async function getProduct(productId, verbose) {
7
7
  if (verbose) {
8
8
  logInfo(`Fetching product details for: ${productId}`);
9
9
  }
10
- const result = (await callMcpEndpoint(mcpServerUrl, mcpToken, 'resources/read', { uri: `product://${productId}` }));
10
+ const result = (await callMcpEndpoint('resources/read', {
11
+ uri: `product://${productId}`,
12
+ }));
11
13
  const productText = result.contents?.[0]?.text || '{}';
12
14
  try {
13
15
  return JSON.parse(productText);
@@ -8,7 +8,7 @@ export async function createTestReport(mcpServerUrl, mcpToken, featureId, report
8
8
  if (verbose) {
9
9
  logInfo(`Creating test report for feature: ${featureId}`);
10
10
  }
11
- await callMcpEndpoint(mcpServerUrl, mcpToken, 'test_reports/create', {
11
+ await callMcpEndpoint('test_reports/create', {
12
12
  feature_id: featureId,
13
13
  ...reportData,
14
14
  });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Phase configurations for the pipeline runner
3
+ */
4
+ import { PhaseConfig } from '../../../types/pipeline.js';
5
+ export declare const phaseConfigs: readonly PhaseConfig[];
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Phase configurations for the pipeline runner
3
+ */
4
+ import { analyseFeature } from '../../../phases/feature-analysis/index.js';
5
+ import { generateTechnicalDesign } from '../../../phases/technical-design/index.js';
6
+ import { implementFeatureCode } from '../../../phases/code-implementation/index.js';
7
+ import { runFunctionalTesting } from '../../../phases/functional-testing/analyzer.js';
8
+ import { writeCodeTests } from '../../../phases/code-testing/analyzer.js';
9
+ import { refineCodeFromPRFeedback } from '../../../phases/code-refine/index.js';
10
+ import { verifyAndResolveComments } from '../../../phases/code-refine-verification/index.js';
11
+ import { reviewPullRequest } from '../../../phases/code-review/index.js';
12
+ /**
13
+ * Wrapper for code-refine phase to inject GitHub token
14
+ */
15
+ const executeCodeRefine = async (options, config) => {
16
+ const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
17
+ if (!githubToken) {
18
+ return {
19
+ status: 'error',
20
+ message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
21
+ };
22
+ }
23
+ return refineCodeFromPRFeedback({
24
+ featureId: options.featureId,
25
+ githubToken,
26
+ verbose: options.verbose,
27
+ }, config);
28
+ };
29
+ /**
30
+ * Wrapper for code-refine-verification phase to inject GitHub token
31
+ */
32
+ const executeCodeRefineVerification = async (options, config) => {
33
+ const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
34
+ if (!githubToken) {
35
+ return {
36
+ status: 'error',
37
+ message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
38
+ };
39
+ }
40
+ return verifyAndResolveComments({
41
+ featureId: options.featureId,
42
+ githubToken,
43
+ config, // Add config parameter for LLM analysis
44
+ verbose: options.verbose,
45
+ });
46
+ };
47
+ /**
48
+ * Wrapper for code-review phase to inject GitHub token
49
+ */
50
+ const executeCodeReview = async (options, config) => {
51
+ const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
52
+ if (!githubToken) {
53
+ return {
54
+ status: 'error',
55
+ message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
56
+ };
57
+ }
58
+ return reviewPullRequest({
59
+ featureId: options.featureId,
60
+ githubToken,
61
+ verbose: options.verbose,
62
+ }, config);
63
+ };
64
+ // Pipeline phase configurations
65
+ export const phaseConfigs = [
66
+ {
67
+ name: 'feature-analysis',
68
+ execute: analyseFeature,
69
+ },
70
+ {
71
+ name: 'technical-design',
72
+ execute: generateTechnicalDesign,
73
+ },
74
+ {
75
+ name: 'code-implementation',
76
+ execute: implementFeatureCode,
77
+ },
78
+ {
79
+ name: 'functional-testing',
80
+ execute: runFunctionalTesting,
81
+ },
82
+ {
83
+ name: 'code-testing',
84
+ execute: writeCodeTests,
85
+ },
86
+ {
87
+ name: 'code-refine',
88
+ execute: executeCodeRefine,
89
+ },
90
+ {
91
+ name: 'code-refine-verification',
92
+ execute: executeCodeRefineVerification,
93
+ },
94
+ {
95
+ name: 'code-review',
96
+ execute: executeCodeReview,
97
+ },
98
+ ];
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Feature filtering utilities for workflow processor
3
+ * Pure functions for filtering and selecting features for processing
4
+ */
5
+ import type { FeatureInfo } from '../../../types/features.js';
6
+ import type { FeatureProcessingState } from './state-manager.js';
7
+ export declare const shouldProcessFeature: (maxRetries: number) => (feature: FeatureInfo, states: Map<string, FeatureProcessingState>) => boolean;
8
+ export declare const findNextFeature: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>, maxRetries: number) => FeatureInfo | undefined;
9
+ export declare const isFeatureProcessing: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
10
+ export declare const isFeatureCompleted: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
11
+ export declare const isFeatureFailed: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
12
+ export declare const hasReachedMaxRetries: (featureId: string, states: Map<string, FeatureProcessingState>, maxRetries: number) => boolean;
13
+ export declare const filterProcessingFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
14
+ export declare const filterCompletedFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
15
+ export declare const filterFailedFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
16
+ export declare const filterAvailableFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>, maxRetries: number) => FeatureInfo[];