edsger 0.49.0 → 0.51.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 (329) hide show
  1. package/README.md +25 -25
  2. package/dist/api/chat.d.ts +7 -7
  3. package/dist/api/chat.js +13 -13
  4. package/dist/api/cross-product.d.ts +10 -10
  5. package/dist/api/cross-product.js +30 -30
  6. package/dist/api/github.d.ts +5 -5
  7. package/dist/api/github.js +10 -10
  8. package/dist/api/intelligence.d.ts +3 -3
  9. package/dist/api/issues/approval-checker.d.ts +20 -0
  10. package/dist/api/issues/approval-checker.js +152 -0
  11. package/dist/api/issues/batch-operations.d.ts +17 -0
  12. package/dist/api/issues/batch-operations.js +100 -0
  13. package/dist/api/issues/get-issue.d.ts +5 -0
  14. package/dist/api/issues/get-issue.js +21 -0
  15. package/dist/api/issues/index.d.ts +8 -0
  16. package/dist/api/issues/index.js +10 -0
  17. package/dist/api/issues/issue-utils.d.ts +23 -0
  18. package/dist/api/issues/issue-utils.js +80 -0
  19. package/dist/api/issues/status-updater.d.ts +41 -0
  20. package/dist/api/issues/status-updater.js +122 -0
  21. package/dist/api/issues/test-cases.d.ts +29 -0
  22. package/dist/api/issues/test-cases.js +110 -0
  23. package/dist/api/issues/update-issue.d.ts +20 -0
  24. package/dist/api/issues/update-issue.js +83 -0
  25. package/dist/api/issues/user-stories.d.ts +21 -0
  26. package/dist/api/issues/user-stories.js +88 -0
  27. package/dist/api/products.d.ts +1 -1
  28. package/dist/api/tasks.d.ts +1 -1
  29. package/dist/api/test-reports.d.ts +2 -2
  30. package/dist/api/test-reports.js +4 -4
  31. package/dist/auth/login.js +1 -1
  32. package/dist/commands/agent-workflow/chat-worker.d.ts +7 -7
  33. package/dist/commands/agent-workflow/chat-worker.js +50 -50
  34. package/dist/commands/agent-workflow/index.d.ts +2 -2
  35. package/dist/commands/agent-workflow/index.js +3 -3
  36. package/dist/commands/agent-workflow/issue-worker.d.ts +14 -0
  37. package/dist/commands/agent-workflow/issue-worker.js +65 -0
  38. package/dist/commands/agent-workflow/processor.d.ts +9 -9
  39. package/dist/commands/agent-workflow/processor.js +90 -90
  40. package/dist/commands/build/index.js +2 -2
  41. package/dist/commands/find-bugs/index.d.ts +11 -0
  42. package/dist/commands/find-bugs/index.js +39 -0
  43. package/dist/commands/find-features/index.d.ts +14 -0
  44. package/dist/commands/find-features/index.js +42 -0
  45. package/dist/commands/init/prompts.js +1 -1
  46. package/dist/commands/init/templates.d.ts +1 -1
  47. package/dist/commands/init/templates.js +4 -4
  48. package/dist/commands/workflow/config/phase-configs.js +17 -17
  49. package/dist/commands/workflow/core/index.d.ts +1 -1
  50. package/dist/commands/workflow/core/index.js +2 -2
  51. package/dist/commands/workflow/core/issue-filter.d.ts +16 -0
  52. package/dist/commands/workflow/core/issue-filter.js +47 -0
  53. package/dist/commands/workflow/core/state-manager.d.ts +10 -10
  54. package/dist/commands/workflow/core/state-manager.js +10 -10
  55. package/dist/commands/workflow/core/workflow-logger.d.ts +9 -9
  56. package/dist/commands/workflow/core/workflow-logger.js +21 -21
  57. package/dist/commands/workflow/executors/phase-executor.d.ts +2 -2
  58. package/dist/commands/workflow/executors/phase-executor.js +32 -32
  59. package/dist/commands/workflow/issue-coordinator.d.ts +18 -0
  60. package/dist/commands/workflow/issue-coordinator.js +161 -0
  61. package/dist/commands/workflow/phase-orchestrator.d.ts +2 -2
  62. package/dist/commands/workflow/phase-orchestrator.js +82 -82
  63. package/dist/commands/workflow/processor.d.ts +7 -7
  64. package/dist/commands/workflow/processor.js +44 -44
  65. package/dist/config/issue-status.d.ts +56 -0
  66. package/dist/config/issue-status.js +130 -0
  67. package/dist/errors/index.d.ts +6 -6
  68. package/dist/errors/index.js +11 -11
  69. package/dist/index.js +61 -1
  70. package/dist/phases/app-store-generation/context.js +6 -6
  71. package/dist/phases/app-store-generation/index.js +2 -2
  72. package/dist/phases/app-store-generation/prompts.js +2 -2
  73. package/dist/phases/autonomous/index.d.ts +3 -3
  74. package/dist/phases/autonomous/index.js +37 -37
  75. package/dist/phases/autonomous/prompts.d.ts +2 -2
  76. package/dist/phases/autonomous/prompts.js +4 -4
  77. package/dist/phases/branch-planning/context.d.ts +3 -3
  78. package/dist/phases/branch-planning/context.js +12 -12
  79. package/dist/phases/branch-planning/index.d.ts +3 -3
  80. package/dist/phases/branch-planning/index.js +32 -32
  81. package/dist/phases/branch-planning/outcome.d.ts +5 -5
  82. package/dist/phases/branch-planning/outcome.js +12 -12
  83. package/dist/phases/branch-planning/prompts.d.ts +3 -3
  84. package/dist/phases/branch-planning/prompts.js +13 -13
  85. package/dist/phases/bug-fixing/analyzer.d.ts +2 -2
  86. package/dist/phases/bug-fixing/analyzer.js +13 -13
  87. package/dist/phases/bug-fixing/context-fetcher.d.ts +3 -3
  88. package/dist/phases/bug-fixing/context-fetcher.js +18 -18
  89. package/dist/phases/bug-fixing/mcp-server.js +17 -18
  90. package/dist/phases/chat-processor/context.d.ts +5 -5
  91. package/dist/phases/chat-processor/context.js +17 -17
  92. package/dist/phases/chat-processor/index.d.ts +4 -4
  93. package/dist/phases/chat-processor/index.js +17 -17
  94. package/dist/phases/chat-processor/product-context.d.ts +3 -3
  95. package/dist/phases/chat-processor/product-context.js +16 -16
  96. package/dist/phases/chat-processor/product-prompts.d.ts +1 -1
  97. package/dist/phases/chat-processor/product-prompts.js +10 -10
  98. package/dist/phases/chat-processor/product-tools.d.ts +2 -2
  99. package/dist/phases/chat-processor/product-tools.js +33 -33
  100. package/dist/phases/chat-processor/prompts.d.ts +3 -3
  101. package/dist/phases/chat-processor/prompts.js +22 -22
  102. package/dist/phases/chat-processor/tools.js +46 -46
  103. package/dist/phases/code-implementation/branch-pr-creator.d.ts +3 -3
  104. package/dist/phases/code-implementation/branch-pr-creator.js +5 -5
  105. package/dist/phases/code-implementation/context.d.ts +3 -3
  106. package/dist/phases/code-implementation/context.js +18 -18
  107. package/dist/phases/code-implementation/index.d.ts +4 -4
  108. package/dist/phases/code-implementation/index.js +88 -88
  109. package/dist/phases/code-implementation/outcome.d.ts +3 -3
  110. package/dist/phases/code-implementation/outcome.js +6 -6
  111. package/dist/phases/code-implementation/prompts.d.ts +1 -1
  112. package/dist/phases/code-implementation/prompts.js +6 -6
  113. package/dist/phases/code-implementation-verification/agent.d.ts +3 -3
  114. package/dist/phases/code-implementation-verification/agent.js +5 -5
  115. package/dist/phases/code-implementation-verification/index.d.ts +3 -3
  116. package/dist/phases/code-implementation-verification/index.js +11 -11
  117. package/dist/phases/code-implementation-verification/prompts.d.ts +3 -3
  118. package/dist/phases/code-implementation-verification/prompts.js +7 -7
  119. package/dist/phases/code-refine/context.d.ts +8 -8
  120. package/dist/phases/code-refine/context.js +29 -29
  121. package/dist/phases/code-refine/index.d.ts +2 -2
  122. package/dist/phases/code-refine/index.js +20 -20
  123. package/dist/phases/code-refine/prompts.d.ts +1 -1
  124. package/dist/phases/code-refine/prompts.js +3 -3
  125. package/dist/phases/code-refine/refine-iteration.d.ts +1 -1
  126. package/dist/phases/code-refine/refine-iteration.js +4 -4
  127. package/dist/phases/code-refine/retry-handler.js +2 -2
  128. package/dist/phases/code-refine-verification/github.d.ts +16 -0
  129. package/dist/phases/code-refine-verification/github.js +118 -32
  130. package/dist/phases/code-refine-verification/index.js +10 -10
  131. package/dist/phases/code-refine-verification/types.d.ts +17 -12
  132. package/dist/phases/code-review/context.d.ts +8 -8
  133. package/dist/phases/code-review/context.js +25 -25
  134. package/dist/phases/code-review/diff-utils.d.ts +1 -1
  135. package/dist/phases/code-review/diff-utils.js +1 -1
  136. package/dist/phases/code-review/index.d.ts +2 -2
  137. package/dist/phases/code-review/index.js +26 -26
  138. package/dist/phases/code-testing/analyzer.d.ts +2 -2
  139. package/dist/phases/code-testing/analyzer.js +18 -18
  140. package/dist/phases/code-testing/context-fetcher.d.ts +3 -3
  141. package/dist/phases/code-testing/context-fetcher.js +16 -16
  142. package/dist/phases/code-testing/prompts.d.ts +1 -1
  143. package/dist/phases/code-testing/prompts.js +5 -5
  144. package/dist/phases/find-bugs/index.d.ts +30 -0
  145. package/dist/phases/find-bugs/index.js +301 -0
  146. package/dist/phases/find-bugs/prompts.d.ts +22 -0
  147. package/dist/phases/find-bugs/prompts.js +101 -0
  148. package/dist/phases/find-bugs/state.d.ts +44 -0
  149. package/dist/phases/find-bugs/state.js +121 -0
  150. package/dist/phases/find-bugs/types.d.ts +21 -0
  151. package/dist/phases/find-bugs/types.js +16 -0
  152. package/dist/phases/find-features/index.d.ts +40 -0
  153. package/dist/phases/find-features/index.js +346 -0
  154. package/dist/phases/find-features/prompts.d.ts +37 -0
  155. package/dist/phases/find-features/prompts.js +118 -0
  156. package/dist/phases/find-features/state.d.ts +29 -0
  157. package/dist/phases/find-features/state.js +94 -0
  158. package/dist/phases/find-features/types.d.ts +27 -0
  159. package/dist/phases/find-features/types.js +16 -0
  160. package/dist/phases/functional-testing/analyzer.d.ts +2 -2
  161. package/dist/phases/functional-testing/analyzer.js +40 -40
  162. package/dist/phases/functional-testing/context-fetcher.d.ts +3 -3
  163. package/dist/phases/functional-testing/context-fetcher.js +16 -16
  164. package/dist/phases/functional-testing/http-fallback.d.ts +2 -2
  165. package/dist/phases/functional-testing/http-fallback.js +9 -9
  166. package/dist/phases/functional-testing/mcp-server.js +23 -24
  167. package/dist/phases/functional-testing/prompts.d.ts +1 -1
  168. package/dist/phases/functional-testing/prompts.js +4 -4
  169. package/dist/phases/functional-testing/test-report-creator.d.ts +2 -2
  170. package/dist/phases/functional-testing/test-report-creator.js +10 -10
  171. package/dist/phases/functional-testing/test-retry-handler.js +3 -3
  172. package/dist/phases/growth-analysis/context.js +6 -6
  173. package/dist/phases/growth-analysis/index.js +2 -2
  174. package/dist/phases/growth-analysis/prompts.js +2 -2
  175. package/dist/phases/intelligence-analysis/context.js +7 -7
  176. package/dist/phases/intelligence-analysis/index.js +3 -3
  177. package/dist/phases/issue-analysis/agent.d.ts +13 -0
  178. package/dist/phases/issue-analysis/agent.js +112 -0
  179. package/dist/phases/issue-analysis/context.d.ts +24 -0
  180. package/dist/phases/issue-analysis/context.js +138 -0
  181. package/dist/phases/issue-analysis/index.d.ts +8 -0
  182. package/dist/phases/issue-analysis/index.js +199 -0
  183. package/dist/phases/issue-analysis/outcome.d.ts +40 -0
  184. package/dist/phases/issue-analysis/outcome.js +280 -0
  185. package/dist/phases/issue-analysis/prompts.d.ts +10 -0
  186. package/dist/phases/issue-analysis/prompts.js +212 -0
  187. package/dist/phases/issue-analysis-verification/agent.d.ts +33 -0
  188. package/dist/phases/issue-analysis-verification/agent.js +124 -0
  189. package/dist/phases/issue-analysis-verification/index.d.ts +25 -0
  190. package/dist/phases/issue-analysis-verification/index.js +92 -0
  191. package/dist/phases/issue-analysis-verification/prompts.d.ts +10 -0
  192. package/dist/phases/issue-analysis-verification/prompts.js +100 -0
  193. package/dist/phases/output-contracts.js +37 -37
  194. package/dist/phases/pr-execution/context.d.ts +3 -3
  195. package/dist/phases/pr-execution/context.js +14 -14
  196. package/dist/phases/pr-execution/index.d.ts +2 -2
  197. package/dist/phases/pr-execution/index.js +22 -22
  198. package/dist/phases/pr-execution/outcome.d.ts +4 -4
  199. package/dist/phases/pr-execution/outcome.js +6 -6
  200. package/dist/phases/pr-execution/prompts.d.ts +4 -4
  201. package/dist/phases/pr-execution/prompts.js +6 -6
  202. package/dist/phases/pr-resolve/checklist-learner.js +2 -2
  203. package/dist/phases/pr-review/index.d.ts +1 -1
  204. package/dist/phases/pr-review/index.js +1 -1
  205. package/dist/phases/pr-review/prompts.d.ts +1 -1
  206. package/dist/phases/pr-review/prompts.js +1 -1
  207. package/dist/phases/pr-shared/context.d.ts +3 -3
  208. package/dist/phases/pr-shared/context.js +3 -3
  209. package/dist/phases/pr-splitting/context.d.ts +3 -3
  210. package/dist/phases/pr-splitting/context.js +16 -16
  211. package/dist/phases/pr-splitting/index.d.ts +4 -4
  212. package/dist/phases/pr-splitting/index.js +29 -29
  213. package/dist/phases/pr-splitting/outcome.d.ts +3 -3
  214. package/dist/phases/pr-splitting/outcome.js +7 -7
  215. package/dist/phases/pr-splitting/prompts.d.ts +3 -3
  216. package/dist/phases/pr-splitting/prompts.js +11 -11
  217. package/dist/phases/pull-request/creator.d.ts +4 -4
  218. package/dist/phases/pull-request/creator.js +25 -25
  219. package/dist/phases/pull-request/handler.d.ts +3 -3
  220. package/dist/phases/pull-request/handler.js +16 -16
  221. package/dist/phases/release-sync/index.js +2 -2
  222. package/dist/phases/run-sheet/agent.js +1 -2
  223. package/dist/phases/run-sheet/index.js +3 -3
  224. package/dist/phases/smoke-test/index.js +2 -2
  225. package/dist/phases/technical-design/context.d.ts +3 -3
  226. package/dist/phases/technical-design/context.js +11 -11
  227. package/dist/phases/technical-design/index.d.ts +2 -2
  228. package/dist/phases/technical-design/index.js +27 -27
  229. package/dist/phases/technical-design/outcome.d.ts +4 -4
  230. package/dist/phases/technical-design/outcome.js +6 -6
  231. package/dist/phases/technical-design/prompts.d.ts +2 -2
  232. package/dist/phases/technical-design/prompts.js +10 -10
  233. package/dist/phases/technical-design-verification/agent.d.ts +3 -3
  234. package/dist/phases/technical-design-verification/agent.js +4 -4
  235. package/dist/phases/technical-design-verification/index.d.ts +4 -4
  236. package/dist/phases/technical-design-verification/index.js +12 -12
  237. package/dist/phases/technical-design-verification/prompts.d.ts +3 -3
  238. package/dist/phases/technical-design-verification/prompts.js +6 -6
  239. package/dist/phases/test-cases-analysis/context.d.ts +5 -5
  240. package/dist/phases/test-cases-analysis/context.js +18 -18
  241. package/dist/phases/test-cases-analysis/formatters.js +7 -7
  242. package/dist/phases/test-cases-analysis/index.d.ts +1 -1
  243. package/dist/phases/test-cases-analysis/index.js +21 -21
  244. package/dist/phases/test-cases-analysis/outcome.d.ts +7 -7
  245. package/dist/phases/test-cases-analysis/outcome.js +13 -13
  246. package/dist/phases/test-cases-analysis/prompts.d.ts +3 -3
  247. package/dist/phases/test-cases-analysis/prompts.js +6 -6
  248. package/dist/phases/user-stories-analysis/context.d.ts +5 -5
  249. package/dist/phases/user-stories-analysis/context.js +18 -18
  250. package/dist/phases/user-stories-analysis/formatters.js +7 -7
  251. package/dist/phases/user-stories-analysis/index.d.ts +1 -1
  252. package/dist/phases/user-stories-analysis/index.js +21 -21
  253. package/dist/phases/user-stories-analysis/outcome.d.ts +7 -7
  254. package/dist/phases/user-stories-analysis/outcome.js +13 -13
  255. package/dist/phases/user-stories-analysis/prompts.d.ts +3 -3
  256. package/dist/phases/user-stories-analysis/prompts.js +10 -10
  257. package/dist/services/audit-logs.d.ts +10 -10
  258. package/dist/services/audit-logs.js +12 -12
  259. package/dist/services/branches.d.ts +6 -6
  260. package/dist/services/branches.js +16 -16
  261. package/dist/services/checklist.d.ts +3 -3
  262. package/dist/services/checklist.js +11 -11
  263. package/dist/services/coaching/coaching-agent.js +2 -2
  264. package/dist/services/coaching/coaching-loop.d.ts +1 -1
  265. package/dist/services/coaching/coaching-loop.js +2 -2
  266. package/dist/services/coaching/phase-coaching.d.ts +2 -2
  267. package/dist/services/coaching/phase-coaching.js +3 -3
  268. package/dist/services/coaching/self-rating.js +1 -1
  269. package/dist/services/feedbacks.d.ts +4 -4
  270. package/dist/services/feedbacks.js +8 -8
  271. package/dist/services/phase-hooks/bindings-fetcher.d.ts +4 -4
  272. package/dist/services/phase-hooks/bindings-fetcher.js +8 -8
  273. package/dist/services/phase-hooks/hook-executor.js +1 -1
  274. package/dist/services/phase-hooks/hook-logging.d.ts +2 -2
  275. package/dist/services/phase-hooks/hook-logging.js +4 -4
  276. package/dist/services/phase-hooks/hook-runner.d.ts +1 -1
  277. package/dist/services/phase-hooks/hook-runner.js +4 -4
  278. package/dist/services/phase-hooks/types.d.ts +3 -3
  279. package/dist/services/phase-ratings.d.ts +7 -7
  280. package/dist/services/phase-ratings.js +8 -8
  281. package/dist/services/pull-requests.d.ts +4 -4
  282. package/dist/services/pull-requests.js +11 -11
  283. package/dist/services/skill-resolver.d.ts +1 -1
  284. package/dist/services/skill-resolver.js +1 -1
  285. package/dist/skills/phase/app-store-generation/SKILL.md +9 -9
  286. package/dist/skills/phase/autonomous/SKILL.md +2 -2
  287. package/dist/skills/phase/branch-planning/SKILL.md +12 -12
  288. package/dist/skills/phase/bug-fixing/SKILL.md +1 -1
  289. package/dist/skills/phase/code-implementation/SKILL.md +6 -6
  290. package/dist/skills/phase/code-implementation-verification/SKILL.md +3 -3
  291. package/dist/skills/phase/code-testing/SKILL.md +5 -5
  292. package/dist/skills/phase/functional-testing/SKILL.md +3 -3
  293. package/dist/skills/phase/growth-analysis/SKILL.md +8 -8
  294. package/dist/skills/phase/incremental-sync/SKILL.md +6 -6
  295. package/dist/skills/phase/intelligence-analysis/SKILL.md +7 -7
  296. package/dist/skills/phase/{feature-analysis → issue-analysis}/SKILL.md +8 -8
  297. package/dist/skills/phase/pr-execution/SKILL.md +7 -7
  298. package/dist/skills/phase/pr-splitting/SKILL.md +14 -14
  299. package/dist/skills/phase/smoke-test/SKILL.md +1 -1
  300. package/dist/skills/phase/technical-design/SKILL.md +5 -5
  301. package/dist/skills/phase/test-cases-analysis/SKILL.md +4 -4
  302. package/dist/skills/phase/user-stories-analysis/SKILL.md +13 -13
  303. package/dist/system/session-manager.d.ts +3 -3
  304. package/dist/system/session-manager.js +3 -3
  305. package/dist/system/sleep-notification.js +2 -2
  306. package/dist/system/sleep-prevention.js +1 -1
  307. package/dist/types/index.d.ts +21 -21
  308. package/dist/types/issues.d.ts +35 -0
  309. package/dist/types/issues.js +1 -0
  310. package/dist/types/pipeline.d.ts +4 -4
  311. package/dist/updater/auto-updater.d.ts +2 -2
  312. package/dist/updater/auto-updater.js +3 -3
  313. package/dist/utils/conflict-resolver.d.ts +1 -1
  314. package/dist/utils/conflict-resolver.js +5 -5
  315. package/dist/utils/formatters.d.ts +4 -4
  316. package/dist/utils/formatters.js +29 -29
  317. package/dist/utils/git-branch-manager-async.d.ts +6 -6
  318. package/dist/utils/git-branch-manager-async.js +41 -41
  319. package/dist/utils/git-branch-manager.d.ts +11 -11
  320. package/dist/utils/git-branch-manager.js +42 -42
  321. package/dist/utils/image-downloader.d.ts +4 -4
  322. package/dist/utils/image-downloader.js +17 -17
  323. package/dist/utils/pipeline-logger.d.ts +1 -1
  324. package/dist/utils/pipeline-logger.js +5 -5
  325. package/dist/workspace/workspace-manager.d.ts +17 -17
  326. package/dist/workspace/workspace-manager.js +21 -21
  327. package/package.json +1 -1
  328. package/vitest.config.ts +10 -4
  329. /package/dist/skills/phase/{feature-analysis-verification → issue-analysis-verification}/SKILL.md +0 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Edsger
2
2
 
3
- AI-powered software development CLI tool with comprehensive feature management, code review, and testing capabilities using Claude Code SDK and MCP integration.
3
+ AI-powered software development CLI tool with comprehensive issue management, code review, and testing capabilities using Claude Code SDK and MCP integration.
4
4
 
5
5
  ## Features
6
6
 
@@ -26,36 +26,36 @@ AI-powered software development CLI tool with comprehensive feature management,
26
26
  - **Improvement Suggestions**: Provides prioritized recommendations for code improvement
27
27
  - **Interactive Mode**: Ask for confirmation before applying refactoring changes
28
28
 
29
- ### 🎯 Feature Analysis
29
+ ### 🎯 Issue Analysis
30
30
 
31
- - **MCP Integration**: Analyze features using Model Context Protocol
32
- - **User Story Generation**: Create comprehensive user stories for features
31
+ - **MCP Integration**: Analyze issues using Model Context Protocol
32
+ - **User Story Generation**: Create comprehensive user stories for issues
33
33
  - **Test Case Creation**: Generate detailed test cases with criticality levels
34
34
  - **Deduplication**: Avoid creating similar existing user stories and test cases
35
35
  - **Real-time Streaming**: Live analysis feedback with Claude Code SDK
36
36
 
37
37
  ### 🎨 Technical Design
38
38
 
39
- - **Design Generation**: Create technical specifications for features
39
+ - **Design Generation**: Create technical specifications for issues
40
40
  - **Architecture Planning**: Generate implementation roadmaps and technical details
41
41
  - **Integration Support**: Works with MCP for structured design output
42
42
 
43
43
  ### 💻 Code Implementation
44
44
 
45
- - **Feature Implementation**: Automatically implement features based on specifications
45
+ - **Issue Implementation**: Automatically implement issues based on specifications
46
46
  - **Branch Management**: Creates feature branches and manages git workflow
47
47
  - **Code Generation**: AI-powered code writing with proper git integration
48
48
 
49
49
  ### 🎭 Functional Testing
50
50
 
51
- - **Automated Testing**: Run Playwright-based functional tests for features
51
+ - **Automated Testing**: Run Playwright-based functional tests for issues
52
52
  - **Test Execution**: Execute test cases with detailed reporting
53
53
  - **Status Tracking**: Monitor test results with pass/fail statistics
54
54
 
55
55
  ### 🚀 Workflow Management
56
56
 
57
- - **Continuous Processing**: Monitor and process features ready for development
58
- - **End-to-End Automation**: Complete feature lifecycle from analysis to testing
57
+ - **Continuous Processing**: Monitor and process issues ready for development
58
+ - **End-to-End Automation**: Complete issue lifecycle from analysis to testing
59
59
  - **Real-time Monitoring**: Live workflow processing with statistics and graceful shutdown
60
60
 
61
61
  ## Installation
@@ -120,44 +120,44 @@ edsger --refactor
120
120
  edsger --refactor --verbose
121
121
  ```
122
122
 
123
- ### Feature Analysis
123
+ ### Issue Analysis
124
124
 
125
125
  ```bash
126
- # Analyze a feature and generate user stories/test cases
127
- edsger --feature-analysis <feature-id>
126
+ # Analyze an issue and generate user stories/test cases
127
+ edsger --issue-analysis <issue-id>
128
128
 
129
129
  # Verbose analysis output
130
- edsger --feature-analysis <feature-id> --verbose
130
+ edsger --issue-analysis <issue-id> --verbose
131
131
  ```
132
132
 
133
133
  ### Technical Design
134
134
 
135
135
  ```bash
136
- # Generate technical design for a feature
137
- edsger --technical-design <feature-id>
136
+ # Generate technical design for an issue
137
+ edsger --technical-design <issue-id>
138
138
 
139
139
  # Verbose design output
140
- edsger --technical-design <feature-id> --verbose
140
+ edsger --technical-design <issue-id> --verbose
141
141
  ```
142
142
 
143
143
  ### Code Implementation
144
144
 
145
145
  ```bash
146
- # Implement feature code based on specifications
147
- edsger --implement <feature-id>
146
+ # Implement issue code based on specifications
147
+ edsger --implement <issue-id>
148
148
 
149
149
  # Verbose implementation output
150
- edsger --implement <feature-id> --verbose
150
+ edsger --implement <issue-id> --verbose
151
151
  ```
152
152
 
153
153
  ### Functional Testing
154
154
 
155
155
  ```bash
156
- # Run functional tests for a feature
157
- edsger --test <feature-id>
156
+ # Run functional tests for an issue
157
+ edsger --test <issue-id>
158
158
 
159
159
  # Verbose test output
160
- edsger --test <feature-id> --verbose
160
+ edsger --test <issue-id> --verbose
161
161
  ```
162
162
 
163
163
  ### Workflow Management
@@ -198,9 +198,9 @@ Create a configuration file (`.edsgerrc.json`, `edsger.config.js`, etc.):
198
198
 
199
199
  ## Environment Variables
200
200
 
201
- ### Required for Advanced Features (Feature Analysis, Technical Design, Implementation, Testing, Workflow)
201
+ ### Required for Advanced Features (Issue Analysis, Technical Design, Implementation, Testing, Workflow)
202
202
 
203
- - `EDSGER_MCP_SERVER_URL`: MCP server URL for feature operations
203
+ - `EDSGER_MCP_SERVER_URL`: MCP server URL for issue operations
204
204
  - `EDSGER_MCP_TOKEN`: Required authentication token for MCP server
205
205
  - `EDSGER_PRODUCT_ID`: Product ID for workflow management (optional for workflow mode)
206
206
 
@@ -226,7 +226,7 @@ npx edsger --review --staged
226
226
 
227
227
  - Node.js >= 18.0.0
228
228
  - `@anthropic-ai/claude-code` SDK
229
- - MCP server for advanced feature operations (analysis, design, implementation, testing)
229
+ - MCP server for advanced issue operations (analysis, design, implementation, testing)
230
230
  - Playwright for functional testing (when using `--test` flag)
231
231
 
232
232
  ## License
@@ -52,20 +52,20 @@ export declare function sendProductAiMessage(productId: string, content: string,
52
52
  parentMessageId?: string;
53
53
  }, verbose?: boolean): Promise<ChatMessage>;
54
54
  /**
55
- * Get or create the group chat channel for a feature.
56
- * This is the most common operation — every feature has one group channel.
55
+ * Get or create the group chat channel for an issue.
56
+ * This is the most common operation — every issue has one group channel.
57
57
  */
58
- export declare function getFeatureChannel(featureId: string, verbose?: boolean): Promise<ChatChannel>;
58
+ export declare function getIssueChannel(issueId: string, verbose?: boolean): Promise<ChatChannel>;
59
59
  /**
60
- * Send a system message to a feature's group channel.
60
+ * Send a system message to an issue's group channel.
61
61
  * Creates the channel if it doesn't exist.
62
62
  */
63
- export declare function sendFeatureSystemMessage(featureId: string, content: string, metadata?: Record<string, unknown>, verbose?: boolean): Promise<ChatMessage>;
63
+ export declare function sendIssueSystemMessage(issueId: string, content: string, metadata?: Record<string, unknown>, verbose?: boolean): Promise<ChatMessage>;
64
64
  /**
65
- * Send an AI message to a feature's group channel.
65
+ * Send an AI message to an issue's group channel.
66
66
  * Creates the channel if it doesn't exist.
67
67
  */
68
- export declare function sendFeatureAiMessage(featureId: string, content: string, metadata?: Record<string, unknown>, options?: {
68
+ export declare function sendIssueAiMessage(issueId: string, content: string, metadata?: Record<string, unknown>, options?: {
69
69
  messageType?: ChatMessageType;
70
70
  parentMessageId?: string;
71
71
  }, verbose?: boolean): Promise<ChatMessage>;
package/dist/api/chat.js CHANGED
@@ -176,43 +176,43 @@ export async function sendProductAiMessage(productId, content, metadata = {}, op
176
176
  }
177
177
  }
178
178
  // ============================================================
179
- // Convenience: Feature Channel
179
+ // Convenience: Issue Channel
180
180
  // ============================================================
181
181
  /**
182
- * Get or create the group chat channel for a feature.
183
- * This is the most common operation — every feature has one group channel.
182
+ * Get or create the group chat channel for an issue.
183
+ * This is the most common operation — every issue has one group channel.
184
184
  */
185
- export async function getFeatureChannel(featureId, verbose) {
186
- const { channel } = await getOrCreateChannel('feature', featureId, 'group', undefined, verbose);
185
+ export async function getIssueChannel(issueId, verbose) {
186
+ const { channel } = await getOrCreateChannel('issue', issueId, 'group', undefined, verbose);
187
187
  return channel;
188
188
  }
189
189
  /**
190
- * Send a system message to a feature's group channel.
190
+ * Send a system message to an issue's group channel.
191
191
  * Creates the channel if it doesn't exist.
192
192
  */
193
- export async function sendFeatureSystemMessage(featureId, content, metadata = {}, verbose) {
193
+ export async function sendIssueSystemMessage(issueId, content, metadata = {}, verbose) {
194
194
  try {
195
- const channel = await getFeatureChannel(featureId, verbose);
195
+ const channel = await getIssueChannel(issueId, verbose);
196
196
  return await sendSystemMessage(channel.id, content, metadata, verbose);
197
197
  }
198
198
  catch (error) {
199
199
  const msg = error instanceof Error ? error.message : String(error);
200
- logError(`Failed to send system message for feature ${featureId}: ${msg}`);
200
+ logError(`Failed to send system message for issue ${issueId}: ${msg}`);
201
201
  throw error;
202
202
  }
203
203
  }
204
204
  /**
205
- * Send an AI message to a feature's group channel.
205
+ * Send an AI message to an issue's group channel.
206
206
  * Creates the channel if it doesn't exist.
207
207
  */
208
- export async function sendFeatureAiMessage(featureId, content, metadata = {}, options = {}, verbose) {
208
+ export async function sendIssueAiMessage(issueId, content, metadata = {}, options = {}, verbose) {
209
209
  try {
210
- const channel = await getFeatureChannel(featureId, verbose);
210
+ const channel = await getIssueChannel(issueId, verbose);
211
211
  return await sendAiMessage(channel.id, content, metadata, options, verbose);
212
212
  }
213
213
  catch (error) {
214
214
  const msg = error instanceof Error ? error.message : String(error);
215
- logError(`Failed to send AI message for feature ${featureId}: ${msg}`);
215
+ logError(`Failed to send AI message for issue ${issueId}: ${msg}`);
216
216
  throw error;
217
217
  }
218
218
  }
@@ -1,18 +1,18 @@
1
1
  /**
2
- * Cross-product API - Fetch features across all products
2
+ * Cross-product API - Fetch issues across all products
3
3
  *
4
4
  * Used in the new default mode (agent workflow) where the CLI
5
- * processes features from all products the user has access to,
5
+ * processes issues from all products the user has access to,
6
6
  * not just a single product.
7
7
  */
8
- import { type FeatureInfo } from '../types/features.js';
8
+ import { type IssueInfo } from '../types/issues.js';
9
9
  export interface ProductSummary {
10
10
  id: string;
11
11
  name: string;
12
12
  description?: string;
13
13
  status?: string;
14
14
  }
15
- export interface FeatureWithProduct extends FeatureInfo {
15
+ export interface IssueWithProduct extends IssueInfo {
16
16
  product_name?: string;
17
17
  }
18
18
  /**
@@ -20,12 +20,12 @@ export interface FeatureWithProduct extends FeatureInfo {
20
20
  */
21
21
  export declare function listProducts(verbose?: boolean): Promise<ProductSummary[]>;
22
22
  /**
23
- * List all ready_for_ai features across all products
24
- * Iterates through all accessible products and collects their features
23
+ * List all ready_for_ai issues across all products
24
+ * Iterates through all accessible products and collects their issues
25
25
  */
26
- export declare function listAllReadyFeatures(verbose?: boolean): Promise<FeatureWithProduct[]>;
26
+ export declare function listAllReadyIssues(verbose?: boolean): Promise<IssueWithProduct[]>;
27
27
  /**
28
- * Claim a specific feature for processing
29
- * Unlike the product-level claim, this claims a specific feature by ID
28
+ * Claim a specific issue for processing
29
+ * Unlike the product-level claim, this claims a specific issue by ID
30
30
  */
31
- export declare function claimFeatureById(featureId: string, productId: string, verbose?: boolean): Promise<FeatureInfo | null>;
31
+ export declare function claimIssueById(issueId: string, productId: string, verbose?: boolean): Promise<IssueInfo | null>;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Cross-product API - Fetch features across all products
2
+ * Cross-product API - Fetch issues across all products
3
3
  *
4
4
  * Used in the new default mode (agent workflow) where the CLI
5
- * processes features from all products the user has access to,
5
+ * processes issues from all products the user has access to,
6
6
  * not just a single product.
7
7
  */
8
8
  import { logError, logInfo } from '../utils/logger.js';
@@ -28,12 +28,12 @@ export async function listProducts(verbose) {
28
28
  }
29
29
  }
30
30
  /**
31
- * List all ready_for_ai features across all products
32
- * Iterates through all accessible products and collects their features
31
+ * List all ready_for_ai issues across all products
32
+ * Iterates through all accessible products and collects their issues
33
33
  */
34
- export async function listAllReadyFeatures(verbose) {
34
+ export async function listAllReadyIssues(verbose) {
35
35
  if (verbose) {
36
- logInfo('Fetching ready_for_ai features across all products...');
36
+ logInfo('Fetching ready_for_ai issues across all products...');
37
37
  }
38
38
  try {
39
39
  // First, get all products
@@ -44,68 +44,68 @@ export async function listAllReadyFeatures(verbose) {
44
44
  }
45
45
  return [];
46
46
  }
47
- // Fetch ready_for_ai features for all products in parallel
48
- const featureResults = await Promise.allSettled(products.map(async (product) => {
49
- const result = (await callMcpEndpoint('features/list', {
47
+ // Fetch ready_for_ai issues for all products in parallel
48
+ const issueResults = await Promise.allSettled(products.map(async (product) => {
49
+ const result = (await callMcpEndpoint('issues/list', {
50
50
  product_id: product.id,
51
51
  status: 'ready_for_ai',
52
52
  }));
53
- return (result.features || []).map((feature) => ({
54
- ...feature,
53
+ return (result.issues || []).map((issue) => ({
54
+ ...issue,
55
55
  product_name: product.name,
56
56
  }));
57
57
  }));
58
- const allFeatures = [];
59
- featureResults.forEach((result, i) => {
58
+ const allIssues = [];
59
+ issueResults.forEach((result, i) => {
60
60
  if (result.status === 'fulfilled') {
61
- allFeatures.push(...result.value);
61
+ allIssues.push(...result.value);
62
62
  }
63
63
  else if (verbose) {
64
- logInfo(`Could not fetch features for product: ${products[i].name}`);
64
+ logInfo(`Could not fetch issues for product: ${products[i].name}`);
65
65
  }
66
66
  });
67
67
  // Sort by updated_at (oldest first)
68
- allFeatures.sort((a, b) => {
68
+ allIssues.sort((a, b) => {
69
69
  const dateA = new Date(a.updated_at || 0).getTime();
70
70
  const dateB = new Date(b.updated_at || 0).getTime();
71
71
  return dateA - dateB;
72
72
  });
73
73
  if (verbose) {
74
- logInfo(`Found ${allFeatures.length} ready_for_ai feature(s) across ${products.length} product(s)`);
75
- allFeatures.forEach((f, i) => {
74
+ logInfo(`Found ${allIssues.length} ready_for_ai issue(s) across ${products.length} product(s)`);
75
+ allIssues.forEach((f, i) => {
76
76
  logInfo(` ${i + 1}. [${f.product_name}] ${f.name}`);
77
77
  });
78
78
  }
79
- return allFeatures;
79
+ return allIssues;
80
80
  }
81
81
  catch (error) {
82
- logError(`Failed to list features: ${error instanceof Error ? error.message : String(error)}`);
82
+ logError(`Failed to list issues: ${error instanceof Error ? error.message : String(error)}`);
83
83
  throw error;
84
84
  }
85
85
  }
86
86
  /**
87
- * Claim a specific feature for processing
88
- * Unlike the product-level claim, this claims a specific feature by ID
87
+ * Claim a specific issue for processing
88
+ * Unlike the product-level claim, this claims a specific issue by ID
89
89
  */
90
- export async function claimFeatureById(featureId, productId, verbose) {
90
+ export async function claimIssueById(issueId, productId, verbose) {
91
91
  if (verbose) {
92
- logInfo(`Claiming feature: ${featureId}`);
92
+ logInfo(`Claiming issue: ${issueId}`);
93
93
  }
94
94
  try {
95
- const result = (await callMcpEndpoint('features/claim', {
95
+ const result = (await callMcpEndpoint('issues/claim', {
96
96
  product_id: productId,
97
- feature_id: featureId,
97
+ issue_id: issueId,
98
98
  }));
99
- if (result.feature) {
99
+ if (result.issue) {
100
100
  if (verbose) {
101
- logInfo(`Claimed feature: ${result.feature.name}`);
101
+ logInfo(`Claimed issue: ${result.issue.name}`);
102
102
  }
103
- return result.feature;
103
+ return result.issue;
104
104
  }
105
105
  return null;
106
106
  }
107
107
  catch (error) {
108
- logError(`Failed to claim feature: ${error instanceof Error ? error.message : String(error)}`);
108
+ logError(`Failed to claim issue: ${error instanceof Error ? error.message : String(error)}`);
109
109
  return null;
110
110
  }
111
111
  }
@@ -31,16 +31,16 @@ export interface GitHubConfigAndToken {
31
31
  expires_at?: string;
32
32
  }
33
33
  /**
34
- * Get GitHub developer configuration for a feature
34
+ * Get GitHub developer configuration for an issue
35
35
  * Returns installation_id, repository info from product_developers
36
36
  */
37
- export declare function getGitHubDeveloperConfig(featureId: string, verbose?: boolean): Promise<GitHubDeveloperConfig>;
37
+ export declare function getGitHubDeveloperConfig(issueId: string, verbose?: boolean): Promise<GitHubDeveloperConfig>;
38
38
  /**
39
39
  * Get installation access token for GitHub API operations
40
40
  */
41
- export declare function getGitHubInstallationToken(installationId: number, featureId: string, verbose?: boolean): Promise<GitHubInstallationToken | null>;
41
+ export declare function getGitHubInstallationToken(installationId: number, issueId: string, verbose?: boolean): Promise<GitHubInstallationToken | null>;
42
42
  /**
43
- * Get GitHub config and token by product ID (no feature required).
43
+ * Get GitHub config and token by product ID (no issue required).
44
44
  * Used for product-level operations like growth analysis.
45
45
  */
46
46
  export declare function getGitHubConfigByProduct(productId: string, verbose?: boolean): Promise<{
@@ -54,7 +54,7 @@ export declare function getGitHubConfigByProduct(productId: string, verbose?: bo
54
54
  * Get GitHub config and token in one call
55
55
  * This is the main entry point for getting GitHub config
56
56
  */
57
- export declare function getGitHubConfig(featureId: string, verbose?: boolean): Promise<{
57
+ export declare function getGitHubConfig(issueId: string, verbose?: boolean): Promise<{
58
58
  configured: boolean;
59
59
  token?: string;
60
60
  owner?: string;
@@ -5,14 +5,14 @@
5
5
  import { logDebug, logError, logSuccess, logWarning } from '../utils/logger.js';
6
6
  import { callMcpEndpoint } from './mcp-client.js';
7
7
  /**
8
- * Get GitHub developer configuration for a feature
8
+ * Get GitHub developer configuration for an issue
9
9
  * Returns installation_id, repository info from product_developers
10
10
  */
11
- export async function getGitHubDeveloperConfig(featureId, verbose) {
12
- logDebug(`Fetching GitHub developer config for feature: ${featureId}`, verbose);
11
+ export async function getGitHubDeveloperConfig(issueId, verbose) {
12
+ logDebug(`Fetching GitHub developer config for issue: ${issueId}`, verbose);
13
13
  try {
14
14
  const result = (await callMcpEndpoint('github/developer_config', {
15
- feature_id: featureId,
15
+ issue_id: issueId,
16
16
  }));
17
17
  if (verbose) {
18
18
  if (result.configured) {
@@ -37,12 +37,12 @@ export async function getGitHubDeveloperConfig(featureId, verbose) {
37
37
  /**
38
38
  * Get installation access token for GitHub API operations
39
39
  */
40
- export async function getGitHubInstallationToken(installationId, featureId, verbose) {
40
+ export async function getGitHubInstallationToken(installationId, issueId, verbose) {
41
41
  logDebug(`Fetching GitHub installation token for: ${installationId}`, verbose);
42
42
  try {
43
43
  const result = (await callMcpEndpoint('github/installation_token', {
44
44
  installation_id: installationId,
45
- feature_id: featureId,
45
+ issue_id: issueId,
46
46
  }));
47
47
  if (verbose) {
48
48
  logSuccess(`GitHub token obtained, expires: ${result.expires_at}`);
@@ -57,7 +57,7 @@ export async function getGitHubInstallationToken(installationId, featureId, verb
57
57
  }
58
58
  }
59
59
  /**
60
- * Get GitHub config and token by product ID (no feature required).
60
+ * Get GitHub config and token by product ID (no issue required).
61
61
  * Used for product-level operations like growth analysis.
62
62
  */
63
63
  export async function getGitHubConfigByProduct(productId, verbose) {
@@ -102,11 +102,11 @@ export async function getGitHubConfigByProduct(productId, verbose) {
102
102
  * Get GitHub config and token in one call
103
103
  * This is the main entry point for getting GitHub config
104
104
  */
105
- export async function getGitHubConfig(featureId, verbose) {
106
- logDebug(`Fetching GitHub config for feature: ${featureId}`, verbose);
105
+ export async function getGitHubConfig(issueId, verbose) {
106
+ logDebug(`Fetching GitHub config for issue: ${issueId}`, verbose);
107
107
  try {
108
108
  const result = (await callMcpEndpoint('github/config_and_token', {
109
- feature_id: featureId,
109
+ issue_id: issueId,
110
110
  }));
111
111
  if (verbose) {
112
112
  if (result.configured) {
@@ -19,7 +19,7 @@ export interface CompetitorSnapshot {
19
19
  id: string;
20
20
  competitor_id: string;
21
21
  product_id: string;
22
- features: {
22
+ issues: {
23
23
  name: string;
24
24
  description: string;
25
25
  is_new?: boolean;
@@ -28,7 +28,7 @@ export interface CompetitorSnapshot {
28
28
  tiers?: {
29
29
  name: string;
30
30
  price: string;
31
- features: string[];
31
+ issues: string[];
32
32
  }[];
33
33
  model?: string;
34
34
  };
@@ -133,7 +133,7 @@ export declare function getSnapshots(opts: {
133
133
  export declare function saveSnapshot(snapshot: {
134
134
  competitor_id: string;
135
135
  product_id: string;
136
- features?: unknown[];
136
+ issues?: unknown[];
137
137
  pricing?: unknown;
138
138
  tech_stack?: unknown[];
139
139
  app_rating?: number;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Approval workflow integration for issue phases
3
+ * Checks if current issue status has been approved before executing next phase
4
+ */
5
+ interface ApprovalCheckResult {
6
+ canProceed: boolean;
7
+ requiresApproval: boolean;
8
+ approvalId?: string;
9
+ message?: string;
10
+ }
11
+ /**
12
+ * Check if current issue status has been approved before executing next phase
13
+ * This should be called BEFORE executing a phase, not after
14
+ *
15
+ * @param issueId - Issue ID
16
+ * @param verbose - Verbose logging
17
+ * @returns Promise<ApprovalCheckResult> - Whether the phase can proceed
18
+ */
19
+ export declare function checkApprovalBeforePhaseExecution(issueId: string, verbose?: boolean): Promise<ApprovalCheckResult>;
20
+ export {};