edsger 0.50.0 → 0.52.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 (470) hide show
  1. package/.claude/settings.local.json +23 -3
  2. package/.env.local +12 -0
  3. package/README.md +25 -25
  4. package/dist/api/chat.d.ts +7 -7
  5. package/dist/api/chat.js +13 -13
  6. package/dist/api/cross-product.d.ts +10 -10
  7. package/dist/api/cross-product.js +30 -30
  8. package/dist/api/github.d.ts +5 -5
  9. package/dist/api/github.js +10 -10
  10. package/dist/api/intelligence.d.ts +3 -3
  11. package/dist/api/issues/approval-checker.d.ts +20 -0
  12. package/dist/api/{features → issues}/approval-checker.js +16 -16
  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/{features → issues}/status-updater.js +23 -23
  21. package/dist/api/{features → issues}/test-cases.d.ts +7 -7
  22. package/dist/api/{features → issues}/test-cases.js +12 -12
  23. package/dist/api/issues/update-issue.d.ts +20 -0
  24. package/dist/api/{features/update-feature.js → issues/update-issue.js} +22 -22
  25. package/dist/api/{features → issues}/user-stories.d.ts +5 -5
  26. package/dist/api/{features → issues}/user-stories.js +8 -8
  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/{feature-worker.d.ts → issue-worker.d.ts} +4 -4
  37. package/dist/commands/agent-workflow/{feature-worker.js → issue-worker.js} +12 -12
  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/find-smells/index.d.ts +21 -0
  46. package/dist/commands/find-smells/index.js +65 -0
  47. package/dist/commands/init/prompts.js +1 -1
  48. package/dist/commands/init/templates.d.ts +1 -1
  49. package/dist/commands/init/templates.js +4 -4
  50. package/dist/commands/workflow/config/phase-configs.js +17 -17
  51. package/dist/commands/workflow/core/index.d.ts +1 -1
  52. package/dist/commands/workflow/core/index.js +2 -2
  53. package/dist/commands/workflow/core/issue-filter.d.ts +16 -0
  54. package/dist/commands/workflow/core/issue-filter.js +47 -0
  55. package/dist/commands/workflow/core/state-manager.d.ts +10 -10
  56. package/dist/commands/workflow/core/state-manager.js +10 -10
  57. package/dist/commands/workflow/core/workflow-logger.d.ts +9 -9
  58. package/dist/commands/workflow/core/workflow-logger.js +21 -21
  59. package/dist/commands/workflow/executors/phase-executor.d.ts +2 -2
  60. package/dist/commands/workflow/executors/phase-executor.js +32 -32
  61. package/dist/commands/workflow/issue-coordinator.d.ts +18 -0
  62. package/dist/commands/workflow/{feature-coordinator.js → issue-coordinator.js} +29 -29
  63. package/dist/commands/workflow/phase-orchestrator.d.ts +2 -2
  64. package/dist/commands/workflow/phase-orchestrator.js +82 -82
  65. package/dist/commands/workflow/processor.d.ts +7 -7
  66. package/dist/commands/workflow/processor.js +44 -44
  67. package/dist/config/{feature-status.d.ts → issue-status.d.ts} +14 -14
  68. package/dist/config/{feature-status.js → issue-status.js} +14 -14
  69. package/dist/errors/index.d.ts +6 -6
  70. package/dist/errors/index.js +11 -11
  71. package/dist/index.js +90 -1
  72. package/dist/phases/app-store-generation/context.js +6 -6
  73. package/dist/phases/app-store-generation/index.js +2 -2
  74. package/dist/phases/app-store-generation/prompts.js +2 -2
  75. package/dist/phases/autonomous/index.d.ts +3 -3
  76. package/dist/phases/autonomous/index.js +37 -37
  77. package/dist/phases/autonomous/prompts.d.ts +2 -2
  78. package/dist/phases/autonomous/prompts.js +4 -4
  79. package/dist/phases/branch-planning/context.d.ts +3 -3
  80. package/dist/phases/branch-planning/context.js +12 -12
  81. package/dist/phases/branch-planning/index.d.ts +3 -3
  82. package/dist/phases/branch-planning/index.js +32 -32
  83. package/dist/phases/branch-planning/outcome.d.ts +5 -5
  84. package/dist/phases/branch-planning/outcome.js +12 -12
  85. package/dist/phases/branch-planning/prompts.d.ts +3 -3
  86. package/dist/phases/branch-planning/prompts.js +13 -13
  87. package/dist/phases/bug-fixing/analyzer.d.ts +2 -2
  88. package/dist/phases/bug-fixing/analyzer.js +13 -13
  89. package/dist/phases/bug-fixing/context-fetcher.d.ts +3 -3
  90. package/dist/phases/bug-fixing/context-fetcher.js +18 -18
  91. package/dist/phases/bug-fixing/mcp-server.js +17 -18
  92. package/dist/phases/chat-processor/context.d.ts +5 -5
  93. package/dist/phases/chat-processor/context.js +17 -17
  94. package/dist/phases/chat-processor/index.d.ts +4 -4
  95. package/dist/phases/chat-processor/index.js +17 -17
  96. package/dist/phases/chat-processor/product-context.d.ts +3 -3
  97. package/dist/phases/chat-processor/product-context.js +16 -16
  98. package/dist/phases/chat-processor/product-prompts.d.ts +1 -1
  99. package/dist/phases/chat-processor/product-prompts.js +10 -10
  100. package/dist/phases/chat-processor/product-tools.d.ts +2 -2
  101. package/dist/phases/chat-processor/product-tools.js +33 -33
  102. package/dist/phases/chat-processor/prompts.d.ts +3 -3
  103. package/dist/phases/chat-processor/prompts.js +22 -22
  104. package/dist/phases/chat-processor/tools.js +46 -46
  105. package/dist/phases/code-implementation/branch-pr-creator.d.ts +3 -3
  106. package/dist/phases/code-implementation/branch-pr-creator.js +5 -5
  107. package/dist/phases/code-implementation/context.d.ts +3 -3
  108. package/dist/phases/code-implementation/context.js +18 -18
  109. package/dist/phases/code-implementation/index.d.ts +4 -4
  110. package/dist/phases/code-implementation/index.js +88 -88
  111. package/dist/phases/code-implementation/outcome.d.ts +3 -3
  112. package/dist/phases/code-implementation/outcome.js +6 -6
  113. package/dist/phases/code-implementation/prompts.d.ts +1 -1
  114. package/dist/phases/code-implementation/prompts.js +6 -6
  115. package/dist/phases/code-implementation-verification/agent.d.ts +3 -3
  116. package/dist/phases/code-implementation-verification/agent.js +5 -5
  117. package/dist/phases/code-implementation-verification/index.d.ts +3 -3
  118. package/dist/phases/code-implementation-verification/index.js +11 -11
  119. package/dist/phases/code-implementation-verification/prompts.d.ts +3 -3
  120. package/dist/phases/code-implementation-verification/prompts.js +7 -7
  121. package/dist/phases/code-refine/context.d.ts +8 -8
  122. package/dist/phases/code-refine/context.js +29 -29
  123. package/dist/phases/code-refine/index.d.ts +2 -2
  124. package/dist/phases/code-refine/index.js +20 -20
  125. package/dist/phases/code-refine/prompts.d.ts +1 -1
  126. package/dist/phases/code-refine/prompts.js +3 -3
  127. package/dist/phases/code-refine/refine-iteration.d.ts +1 -1
  128. package/dist/phases/code-refine/refine-iteration.js +4 -4
  129. package/dist/phases/code-refine/retry-handler.js +2 -2
  130. package/dist/phases/code-refine-verification/index.js +10 -10
  131. package/dist/phases/code-refine-verification/types.d.ts +2 -2
  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 +216 -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 +19 -0
  149. package/dist/phases/find-bugs/state.js +13 -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 +279 -0
  154. package/dist/phases/find-features/prompts.d.ts +43 -0
  155. package/dist/phases/find-features/prompts.js +138 -0
  156. package/dist/phases/find-features/state.d.ts +25 -0
  157. package/dist/phases/find-features/state.js +22 -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/find-shared/git.d.ts +24 -0
  161. package/dist/phases/find-shared/git.js +60 -0
  162. package/dist/phases/find-shared/mcp.d.ts +33 -0
  163. package/dist/phases/find-shared/mcp.js +69 -0
  164. package/dist/phases/find-shared/scan-state.d.ts +33 -0
  165. package/dist/phases/find-shared/scan-state.js +112 -0
  166. package/dist/phases/find-smells/index.d.ts +47 -0
  167. package/dist/phases/find-smells/index.js +278 -0
  168. package/dist/phases/find-smells/prompts.d.ts +30 -0
  169. package/dist/phases/find-smells/prompts.js +129 -0
  170. package/dist/phases/find-smells/state.d.ts +21 -0
  171. package/dist/phases/find-smells/state.js +17 -0
  172. package/dist/phases/find-smells/types.d.ts +51 -0
  173. package/dist/phases/find-smells/types.js +64 -0
  174. package/dist/phases/functional-testing/analyzer.d.ts +2 -2
  175. package/dist/phases/functional-testing/analyzer.js +40 -40
  176. package/dist/phases/functional-testing/context-fetcher.d.ts +3 -3
  177. package/dist/phases/functional-testing/context-fetcher.js +16 -16
  178. package/dist/phases/functional-testing/http-fallback.d.ts +2 -2
  179. package/dist/phases/functional-testing/http-fallback.js +9 -9
  180. package/dist/phases/functional-testing/mcp-server.js +23 -24
  181. package/dist/phases/functional-testing/prompts.d.ts +1 -1
  182. package/dist/phases/functional-testing/prompts.js +4 -4
  183. package/dist/phases/functional-testing/test-report-creator.d.ts +2 -2
  184. package/dist/phases/functional-testing/test-report-creator.js +10 -10
  185. package/dist/phases/functional-testing/test-retry-handler.js +3 -3
  186. package/dist/phases/growth-analysis/context.js +6 -6
  187. package/dist/phases/growth-analysis/index.js +2 -2
  188. package/dist/phases/growth-analysis/prompts.js +2 -2
  189. package/dist/phases/intelligence-analysis/context.js +7 -7
  190. package/dist/phases/intelligence-analysis/index.js +3 -3
  191. package/dist/phases/{feature-analysis → issue-analysis}/agent.js +1 -1
  192. package/dist/phases/issue-analysis/context.d.ts +24 -0
  193. package/dist/phases/{feature-analysis → issue-analysis}/context.js +30 -30
  194. package/dist/phases/issue-analysis/index.d.ts +8 -0
  195. package/dist/phases/{feature-analysis → issue-analysis}/index.js +29 -29
  196. package/dist/phases/issue-analysis/outcome.d.ts +40 -0
  197. package/dist/phases/{feature-analysis → issue-analysis}/outcome.js +17 -17
  198. package/dist/phases/{feature-analysis → issue-analysis}/prompts.d.ts +3 -3
  199. package/dist/phases/{feature-analysis → issue-analysis}/prompts.js +12 -12
  200. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.d.ts +2 -2
  201. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.js +1 -1
  202. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.d.ts +5 -5
  203. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.js +9 -9
  204. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.d.ts +2 -2
  205. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.js +7 -7
  206. package/dist/phases/output-contracts.js +37 -37
  207. package/dist/phases/pr-execution/context.d.ts +3 -3
  208. package/dist/phases/pr-execution/context.js +14 -14
  209. package/dist/phases/pr-execution/index.d.ts +2 -2
  210. package/dist/phases/pr-execution/index.js +22 -22
  211. package/dist/phases/pr-execution/outcome.d.ts +4 -4
  212. package/dist/phases/pr-execution/outcome.js +6 -6
  213. package/dist/phases/pr-execution/prompts.d.ts +4 -4
  214. package/dist/phases/pr-execution/prompts.js +6 -6
  215. package/dist/phases/pr-resolve/checklist-learner.js +2 -2
  216. package/dist/phases/pr-review/index.d.ts +1 -1
  217. package/dist/phases/pr-review/index.js +1 -1
  218. package/dist/phases/pr-review/prompts.d.ts +1 -1
  219. package/dist/phases/pr-review/prompts.js +1 -1
  220. package/dist/phases/pr-shared/context.d.ts +3 -3
  221. package/dist/phases/pr-shared/context.js +3 -3
  222. package/dist/phases/pr-splitting/context.d.ts +3 -3
  223. package/dist/phases/pr-splitting/context.js +16 -16
  224. package/dist/phases/pr-splitting/index.d.ts +4 -4
  225. package/dist/phases/pr-splitting/index.js +29 -29
  226. package/dist/phases/pr-splitting/outcome.d.ts +3 -3
  227. package/dist/phases/pr-splitting/outcome.js +7 -7
  228. package/dist/phases/pr-splitting/prompts.d.ts +3 -3
  229. package/dist/phases/pr-splitting/prompts.js +11 -11
  230. package/dist/phases/pull-request/creator.d.ts +4 -4
  231. package/dist/phases/pull-request/creator.js +25 -25
  232. package/dist/phases/pull-request/handler.d.ts +3 -3
  233. package/dist/phases/pull-request/handler.js +16 -16
  234. package/dist/phases/release-sync/index.js +2 -2
  235. package/dist/phases/run-sheet/agent.js +1 -2
  236. package/dist/phases/run-sheet/index.js +3 -3
  237. package/dist/phases/smoke-test/index.js +2 -2
  238. package/dist/phases/technical-design/context.d.ts +3 -3
  239. package/dist/phases/technical-design/context.js +11 -11
  240. package/dist/phases/technical-design/index.d.ts +2 -2
  241. package/dist/phases/technical-design/index.js +27 -27
  242. package/dist/phases/technical-design/outcome.d.ts +4 -4
  243. package/dist/phases/technical-design/outcome.js +6 -6
  244. package/dist/phases/technical-design/prompts.d.ts +2 -2
  245. package/dist/phases/technical-design/prompts.js +10 -10
  246. package/dist/phases/technical-design-verification/agent.d.ts +3 -3
  247. package/dist/phases/technical-design-verification/agent.js +4 -4
  248. package/dist/phases/technical-design-verification/index.d.ts +4 -4
  249. package/dist/phases/technical-design-verification/index.js +12 -12
  250. package/dist/phases/technical-design-verification/prompts.d.ts +3 -3
  251. package/dist/phases/technical-design-verification/prompts.js +6 -6
  252. package/dist/phases/test-cases-analysis/context.d.ts +5 -5
  253. package/dist/phases/test-cases-analysis/context.js +18 -18
  254. package/dist/phases/test-cases-analysis/formatters.js +7 -7
  255. package/dist/phases/test-cases-analysis/index.d.ts +1 -1
  256. package/dist/phases/test-cases-analysis/index.js +21 -21
  257. package/dist/phases/test-cases-analysis/outcome.d.ts +7 -7
  258. package/dist/phases/test-cases-analysis/outcome.js +13 -13
  259. package/dist/phases/test-cases-analysis/prompts.d.ts +3 -3
  260. package/dist/phases/test-cases-analysis/prompts.js +6 -6
  261. package/dist/phases/user-stories-analysis/context.d.ts +5 -5
  262. package/dist/phases/user-stories-analysis/context.js +18 -18
  263. package/dist/phases/user-stories-analysis/formatters.js +7 -7
  264. package/dist/phases/user-stories-analysis/index.d.ts +1 -1
  265. package/dist/phases/user-stories-analysis/index.js +21 -21
  266. package/dist/phases/user-stories-analysis/outcome.d.ts +7 -7
  267. package/dist/phases/user-stories-analysis/outcome.js +13 -13
  268. package/dist/phases/user-stories-analysis/prompts.d.ts +3 -3
  269. package/dist/phases/user-stories-analysis/prompts.js +10 -10
  270. package/dist/services/audit-logs.d.ts +10 -10
  271. package/dist/services/audit-logs.js +12 -12
  272. package/dist/services/branches.d.ts +6 -6
  273. package/dist/services/branches.js +16 -16
  274. package/dist/services/checklist.d.ts +3 -3
  275. package/dist/services/checklist.js +11 -11
  276. package/dist/services/coaching/coaching-agent.js +2 -2
  277. package/dist/services/coaching/coaching-loop.d.ts +1 -1
  278. package/dist/services/coaching/coaching-loop.js +2 -2
  279. package/dist/services/coaching/phase-coaching.d.ts +2 -2
  280. package/dist/services/coaching/phase-coaching.js +3 -3
  281. package/dist/services/coaching/self-rating.js +1 -1
  282. package/dist/services/feedbacks.d.ts +4 -4
  283. package/dist/services/feedbacks.js +8 -8
  284. package/dist/services/phase-hooks/bindings-fetcher.d.ts +4 -4
  285. package/dist/services/phase-hooks/bindings-fetcher.js +8 -8
  286. package/dist/services/phase-hooks/hook-executor.js +1 -1
  287. package/dist/services/phase-hooks/hook-logging.d.ts +2 -2
  288. package/dist/services/phase-hooks/hook-logging.js +4 -4
  289. package/dist/services/phase-hooks/hook-runner.d.ts +1 -1
  290. package/dist/services/phase-hooks/hook-runner.js +4 -4
  291. package/dist/services/phase-hooks/types.d.ts +3 -3
  292. package/dist/services/phase-ratings.d.ts +7 -7
  293. package/dist/services/phase-ratings.js +8 -8
  294. package/dist/services/pull-requests.d.ts +4 -4
  295. package/dist/services/pull-requests.js +11 -11
  296. package/dist/services/skill-resolver.d.ts +1 -1
  297. package/dist/services/skill-resolver.js +1 -1
  298. package/dist/skills/phase/app-store-generation/SKILL.md +9 -9
  299. package/dist/skills/phase/autonomous/SKILL.md +2 -2
  300. package/dist/skills/phase/branch-planning/SKILL.md +12 -12
  301. package/dist/skills/phase/bug-fixing/SKILL.md +1 -1
  302. package/dist/skills/phase/code-implementation/SKILL.md +6 -6
  303. package/dist/skills/phase/code-implementation-verification/SKILL.md +3 -3
  304. package/dist/skills/phase/code-testing/SKILL.md +5 -5
  305. package/dist/skills/phase/functional-testing/SKILL.md +3 -3
  306. package/dist/skills/phase/growth-analysis/SKILL.md +8 -8
  307. package/dist/skills/phase/incremental-sync/SKILL.md +6 -6
  308. package/dist/skills/phase/intelligence-analysis/SKILL.md +7 -7
  309. package/dist/skills/phase/{feature-analysis → issue-analysis}/SKILL.md +8 -8
  310. package/dist/skills/phase/pr-execution/SKILL.md +7 -7
  311. package/dist/skills/phase/pr-splitting/SKILL.md +14 -14
  312. package/dist/skills/phase/smoke-test/SKILL.md +1 -1
  313. package/dist/skills/phase/technical-design/SKILL.md +5 -5
  314. package/dist/skills/phase/test-cases-analysis/SKILL.md +4 -4
  315. package/dist/skills/phase/user-stories-analysis/SKILL.md +13 -13
  316. package/dist/system/session-manager.d.ts +3 -3
  317. package/dist/system/session-manager.js +3 -3
  318. package/dist/system/sleep-notification.js +2 -2
  319. package/dist/system/sleep-prevention.js +1 -1
  320. package/dist/types/index.d.ts +21 -21
  321. package/dist/types/{features.d.ts → issues.d.ts} +3 -3
  322. package/dist/types/pipeline.d.ts +4 -4
  323. package/dist/updater/auto-updater.d.ts +2 -2
  324. package/dist/updater/auto-updater.js +3 -3
  325. package/dist/utils/conflict-resolver.d.ts +1 -1
  326. package/dist/utils/conflict-resolver.js +5 -5
  327. package/dist/utils/formatters.d.ts +4 -4
  328. package/dist/utils/formatters.js +29 -29
  329. package/dist/utils/git-branch-manager-async.d.ts +6 -6
  330. package/dist/utils/git-branch-manager-async.js +41 -41
  331. package/dist/utils/git-branch-manager.d.ts +11 -11
  332. package/dist/utils/git-branch-manager.js +42 -42
  333. package/dist/utils/image-downloader.d.ts +4 -4
  334. package/dist/utils/image-downloader.js +17 -17
  335. package/dist/utils/pipeline-logger.d.ts +1 -1
  336. package/dist/utils/pipeline-logger.js +5 -5
  337. package/dist/workspace/workspace-manager.d.ts +17 -17
  338. package/dist/workspace/workspace-manager.js +21 -21
  339. package/package.json +1 -1
  340. package/vitest.config.ts +4 -0
  341. package/dist/api/__tests__/app-store.test.d.ts +0 -7
  342. package/dist/api/__tests__/app-store.test.js +0 -60
  343. package/dist/api/__tests__/intelligence.test.d.ts +0 -11
  344. package/dist/api/__tests__/intelligence.test.js +0 -315
  345. package/dist/api/features/__tests__/feature-utils.test.d.ts +0 -4
  346. package/dist/api/features/__tests__/feature-utils.test.js +0 -370
  347. package/dist/api/features/__tests__/status-updater.test.d.ts +0 -4
  348. package/dist/api/features/__tests__/status-updater.test.js +0 -88
  349. package/dist/api/features/approval-checker.d.ts +0 -20
  350. package/dist/api/features/feature-utils.d.ts +0 -23
  351. package/dist/api/features/feature-utils.js +0 -80
  352. package/dist/api/features/get-feature.d.ts +0 -5
  353. package/dist/api/features/get-feature.js +0 -21
  354. package/dist/api/features/index.d.ts +0 -8
  355. package/dist/api/features/index.js +0 -10
  356. package/dist/api/features/status-updater.d.ts +0 -41
  357. package/dist/api/features/update-feature.d.ts +0 -20
  358. package/dist/commands/build/__tests__/build.test.d.ts +0 -5
  359. package/dist/commands/build/__tests__/build.test.js +0 -206
  360. package/dist/commands/build/__tests__/detect-project.test.d.ts +0 -6
  361. package/dist/commands/build/__tests__/detect-project.test.js +0 -160
  362. package/dist/commands/build/__tests__/run-build.test.d.ts +0 -6
  363. package/dist/commands/build/__tests__/run-build.test.js +0 -433
  364. package/dist/commands/intelligence/__tests__/command.test.d.ts +0 -4
  365. package/dist/commands/intelligence/__tests__/command.test.js +0 -48
  366. package/dist/commands/workflow/core/__tests__/feature-filter.test.d.ts +0 -5
  367. package/dist/commands/workflow/core/__tests__/feature-filter.test.js +0 -316
  368. package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.d.ts +0 -4
  369. package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.js +0 -397
  370. package/dist/commands/workflow/core/__tests__/state-manager.test.d.ts +0 -4
  371. package/dist/commands/workflow/core/__tests__/state-manager.test.js +0 -384
  372. package/dist/commands/workflow/core/feature-filter.d.ts +0 -16
  373. package/dist/commands/workflow/core/feature-filter.js +0 -47
  374. package/dist/commands/workflow/feature-coordinator.d.ts +0 -18
  375. package/dist/config/__tests__/config.test.d.ts +0 -4
  376. package/dist/config/__tests__/config.test.js +0 -286
  377. package/dist/config/__tests__/feature-status.test.d.ts +0 -4
  378. package/dist/config/__tests__/feature-status.test.js +0 -111
  379. package/dist/errors/__tests__/index.test.d.ts +0 -4
  380. package/dist/errors/__tests__/index.test.js +0 -349
  381. package/dist/phases/app-store-generation/__tests__/agent.test.d.ts +0 -5
  382. package/dist/phases/app-store-generation/__tests__/agent.test.js +0 -142
  383. package/dist/phases/app-store-generation/__tests__/context.test.d.ts +0 -4
  384. package/dist/phases/app-store-generation/__tests__/context.test.js +0 -284
  385. package/dist/phases/app-store-generation/__tests__/prompts.test.d.ts +0 -4
  386. package/dist/phases/app-store-generation/__tests__/prompts.test.js +0 -122
  387. package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.d.ts +0 -5
  388. package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.js +0 -826
  389. package/dist/phases/code-review/__tests__/diff-utils.test.js +0 -101
  390. package/dist/phases/feature-analysis/context.d.ts +0 -24
  391. package/dist/phases/feature-analysis/index.d.ts +0 -8
  392. package/dist/phases/feature-analysis/outcome.d.ts +0 -40
  393. package/dist/phases/intelligence-analysis/__tests__/context.test.d.ts +0 -4
  394. package/dist/phases/intelligence-analysis/__tests__/context.test.js +0 -192
  395. package/dist/phases/intelligence-analysis/__tests__/matching.test.d.ts +0 -13
  396. package/dist/phases/intelligence-analysis/__tests__/matching.test.js +0 -154
  397. package/dist/phases/intelligence-analysis/__tests__/orchestration.test.d.ts +0 -5
  398. package/dist/phases/intelligence-analysis/__tests__/orchestration.test.js +0 -378
  399. package/dist/phases/intelligence-analysis/__tests__/prompts.test.d.ts +0 -4
  400. package/dist/phases/intelligence-analysis/__tests__/prompts.test.js +0 -33
  401. package/dist/phases/pr-execution/__tests__/file-assigner.test.d.ts +0 -1
  402. package/dist/phases/pr-execution/__tests__/file-assigner.test.js +0 -303
  403. package/dist/phases/pr-resolve/__tests__/checklist-learner.test.d.ts +0 -1
  404. package/dist/phases/pr-resolve/__tests__/checklist-learner.test.js +0 -157
  405. package/dist/phases/pr-resolve/__tests__/prompts.test.d.ts +0 -1
  406. package/dist/phases/pr-resolve/__tests__/prompts.test.js +0 -116
  407. package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.d.ts +0 -1
  408. package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.js +0 -138
  409. package/dist/phases/pr-resolve/__tests__/types.test.d.ts +0 -1
  410. package/dist/phases/pr-resolve/__tests__/types.test.js +0 -43
  411. package/dist/phases/pr-resolve/__tests__/workspace.test.d.ts +0 -1
  412. package/dist/phases/pr-resolve/__tests__/workspace.test.js +0 -111
  413. package/dist/phases/pr-review/__tests__/prompts.test.d.ts +0 -1
  414. package/dist/phases/pr-review/__tests__/prompts.test.js +0 -49
  415. package/dist/phases/pr-review/__tests__/review-comments.test.d.ts +0 -1
  416. package/dist/phases/pr-review/__tests__/review-comments.test.js +0 -110
  417. package/dist/phases/pr-shared/__tests__/agent-utils.test.d.ts +0 -1
  418. package/dist/phases/pr-shared/__tests__/agent-utils.test.js +0 -91
  419. package/dist/phases/pr-shared/__tests__/context.test.d.ts +0 -1
  420. package/dist/phases/pr-shared/__tests__/context.test.js +0 -94
  421. package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.d.ts +0 -1
  422. package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.js +0 -331
  423. package/dist/phases/run-sheet/render.d.ts +0 -60
  424. package/dist/phases/run-sheet/render.js +0 -297
  425. package/dist/phases/smoke-test/__tests__/agent.test.d.ts +0 -4
  426. package/dist/phases/smoke-test/__tests__/agent.test.js +0 -84
  427. package/dist/phases/smoke-test/__tests__/github.test.d.ts +0 -9
  428. package/dist/phases/smoke-test/__tests__/github.test.js +0 -120
  429. package/dist/phases/smoke-test/__tests__/snapshot.test.d.ts +0 -8
  430. package/dist/phases/smoke-test/__tests__/snapshot.test.js +0 -93
  431. package/dist/phases/smoke-test/github.d.ts +0 -54
  432. package/dist/phases/smoke-test/github.js +0 -101
  433. package/dist/phases/smoke-test/snapshot.d.ts +0 -27
  434. package/dist/phases/smoke-test/snapshot.js +0 -157
  435. package/dist/services/coaching/__tests__/coaching-agent.test.d.ts +0 -1
  436. package/dist/services/coaching/__tests__/coaching-agent.test.js +0 -74
  437. package/dist/services/coaching/__tests__/coaching-loop.test.d.ts +0 -1
  438. package/dist/services/coaching/__tests__/coaching-loop.test.js +0 -59
  439. package/dist/services/coaching/__tests__/self-rating.test.d.ts +0 -1
  440. package/dist/services/coaching/__tests__/self-rating.test.js +0 -188
  441. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.d.ts +0 -4
  442. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.js +0 -133
  443. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.d.ts +0 -4
  444. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.js +0 -336
  445. package/dist/services/lifecycle-agent/index.d.ts +0 -24
  446. package/dist/services/lifecycle-agent/index.js +0 -25
  447. package/dist/services/lifecycle-agent/phase-criteria.d.ts +0 -57
  448. package/dist/services/lifecycle-agent/phase-criteria.js +0 -335
  449. package/dist/services/lifecycle-agent/transition-rules.d.ts +0 -60
  450. package/dist/services/lifecycle-agent/transition-rules.js +0 -184
  451. package/dist/services/lifecycle-agent/types.d.ts +0 -190
  452. package/dist/services/lifecycle-agent/types.js +0 -12
  453. package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.d.ts +0 -1
  454. package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.js +0 -122
  455. package/dist/services/phase-hooks/__tests__/hook-executor.test.d.ts +0 -1
  456. package/dist/services/phase-hooks/__tests__/hook-executor.test.js +0 -321
  457. package/dist/services/phase-hooks/__tests__/hook-runner.test.d.ts +0 -1
  458. package/dist/services/phase-hooks/__tests__/hook-runner.test.js +0 -261
  459. package/dist/services/phase-hooks/__tests__/plugin-loader.test.d.ts +0 -1
  460. package/dist/services/phase-hooks/__tests__/plugin-loader.test.js +0 -158
  461. package/dist/services/video/__tests__/video-pipeline.test.d.ts +0 -6
  462. package/dist/services/video/__tests__/video-pipeline.test.js +0 -249
  463. package/dist/types/features.js +0 -1
  464. package/dist/workspace/__tests__/workspace-manager.test.d.ts +0 -7
  465. package/dist/workspace/__tests__/workspace-manager.test.js +0 -52
  466. /package/dist/api/{features → issues}/batch-operations.d.ts +0 -0
  467. /package/dist/api/{features → issues}/batch-operations.js +0 -0
  468. /package/dist/phases/{feature-analysis → issue-analysis}/agent.d.ts +0 -0
  469. /package/dist/skills/phase/{feature-analysis-verification → issue-analysis-verification}/SKILL.md +0 -0
  470. /package/dist/{phases/code-review/__tests__/diff-utils.test.d.ts → types/issues.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { getMcpServerUrl, getMcpToken } from '../../auth/auth-store.js';
2
2
  import { logError, logInfo } from '../../utils/logger.js';
3
3
  export async function saveFunctionalTestResultsViaHttp(options) {
4
- const { featureId, testStatus, testResults: _testResults, verbose } = options;
4
+ const { issueId, testStatus, testResults: _testResults, verbose } = options;
5
5
  try {
6
6
  if (verbose) {
7
7
  logInfo('🔄 Attempting to save functional test results via HTTP fallback...');
@@ -16,9 +16,9 @@ export async function saveFunctionalTestResultsViaHttp(options) {
16
16
  },
17
17
  body: JSON.stringify({
18
18
  jsonrpc: '2.0',
19
- method: 'features/update',
19
+ method: 'issues/update',
20
20
  params: {
21
- feature_id: featureId,
21
+ issue_id: issueId,
22
22
  status: testStatus,
23
23
  },
24
24
  id: Math.random().toString(36).substring(7),
@@ -43,7 +43,7 @@ export async function saveFunctionalTestResultsViaHttp(options) {
43
43
  return false;
44
44
  }
45
45
  }
46
- export async function verifyTestStatusSaved(featureId, verbose, expectedStatus) {
46
+ export async function verifyTestStatusSaved(issueId, verbose, expectedStatus) {
47
47
  try {
48
48
  if (verbose) {
49
49
  logInfo('🔍 Verifying test status was saved...');
@@ -58,9 +58,9 @@ export async function verifyTestStatusSaved(featureId, verbose, expectedStatus)
58
58
  },
59
59
  body: JSON.stringify({
60
60
  jsonrpc: '2.0',
61
- method: 'features/get',
61
+ method: 'issues/get',
62
62
  params: {
63
- feature_id: featureId,
63
+ issue_id: issueId,
64
64
  },
65
65
  id: Math.random().toString(36).substring(7),
66
66
  }),
@@ -72,8 +72,8 @@ export async function verifyTestStatusSaved(featureId, verbose, expectedStatus)
72
72
  if (data.error) {
73
73
  throw new Error(data.error.message || 'Verification failed');
74
74
  }
75
- const feature = data.result?.features?.[0];
76
- const actualTestStatus = feature?.status;
75
+ const issue = data.result?.issues?.[0];
76
+ const actualTestStatus = issue?.status;
77
77
  if (expectedStatus && actualTestStatus) {
78
78
  const statusMatches = actualTestStatus === expectedStatus;
79
79
  if (verbose) {
@@ -112,7 +112,7 @@ export async function saveFunctionalTestResultsWithRetry(options, maxRetries = 3
112
112
  }
113
113
  const saved = await saveFunctionalTestResultsViaHttp(options);
114
114
  if (saved) {
115
- const verified = await verifyTestStatusSaved(options.featureId, verbose, options.testStatus);
115
+ const verified = await verifyTestStatusSaved(options.issueId, verbose, options.testStatus);
116
116
  if (verified) {
117
117
  if (verbose) {
118
118
  logInfo(`✅ Functional test results successfully saved and verified (attempt ${attempt})`);
@@ -8,24 +8,23 @@ export const createFunctionalTestingMcpServer = () => {
8
8
  name: 'edsger-functional-testing-mcp',
9
9
  version: '1.0.0',
10
10
  tools: [
11
- tool('get_feature_testing_info', 'Get comprehensive feature information for functional testing including product, user stories, test cases, and technical design', {
12
- feature_id: z
11
+ tool('get_issue_testing_info', 'Get comprehensive issue information for functional testing including product, user stories, test cases, and technical design', {
12
+ issue_id: z
13
13
  .string()
14
- .describe('Feature ID to get testing information for'),
14
+ .describe('Issue ID to get testing information for'),
15
15
  }, async (args) => {
16
16
  try {
17
- // Get feature details
18
- const featureResult = (await callMcpEndpoint('features/get', {
19
- feature_id: args.feature_id,
17
+ // Get issue details
18
+ const issueResult = (await callMcpEndpoint('issues/get', {
19
+ issue_id: args.issue_id,
20
20
  }));
21
- if (!featureResult.features ||
22
- featureResult.features.length === 0) {
23
- throw new Error('Feature not found');
21
+ if (!issueResult.issues || issueResult.issues.length === 0) {
22
+ throw new Error('Issue not found');
24
23
  }
25
- const feature = featureResult.features[0];
24
+ const issue = issueResult.issues[0];
26
25
  // Get product details
27
26
  const productResult = (await callMcpEndpoint('resources/read', {
28
- uri: `product://${feature.product_id}`,
27
+ uri: `product://${issue.product_id}`,
29
28
  }));
30
29
  const productText = productResult.contents?.[0]?.text || '{}';
31
30
  let productInfo;
@@ -34,23 +33,23 @@ export const createFunctionalTestingMcpServer = () => {
34
33
  }
35
34
  catch {
36
35
  productInfo = {
37
- id: feature.product_id,
36
+ id: issue.product_id,
38
37
  name: 'Unknown Product',
39
38
  };
40
39
  }
41
40
  // Get user stories
42
- const userStoriesResult = (await callMcpEndpoint('user_stories/list', { feature_id: args.feature_id }));
41
+ const userStoriesResult = (await callMcpEndpoint('user_stories/list', { issue_id: args.issue_id }));
43
42
  // Get test cases
44
43
  const testCasesResult = (await callMcpEndpoint('test_cases/list', {
45
- feature_id: args.feature_id,
44
+ issue_id: args.issue_id,
46
45
  }));
47
46
  const testingInfo = {
48
- feature,
47
+ issue,
49
48
  product: productInfo,
50
49
  user_stories: userStoriesResult.user_stories || [],
51
50
  test_cases: testCasesResult.test_cases || [],
52
- technical_design: feature.technical_design || null,
53
- current_test_status: feature.status || 'backlog',
51
+ technical_design: issue.technical_design || null,
52
+ current_test_status: issue.status || 'backlog',
54
53
  };
55
54
  return {
56
55
  content: [
@@ -62,12 +61,12 @@ export const createFunctionalTestingMcpServer = () => {
62
61
  };
63
62
  }
64
63
  catch (error) {
65
- logError(`Error in get_feature_testing_info: ${error}`);
64
+ logError(`Error in get_issue_testing_info: ${error}`);
66
65
  throw error;
67
66
  }
68
67
  }),
69
- tool('update_test_status', 'Update the functional test status of a feature', {
70
- feature_id: z.string().describe('Feature ID to update'),
68
+ tool('update_test_status', 'Update the functional test status of an issue', {
69
+ issue_id: z.string().describe('Issue ID to update'),
71
70
  test_status: z
72
71
  .enum(['testing_in_progress', 'testing_passed', 'testing_failed'])
73
72
  .describe('New test status'),
@@ -77,8 +76,8 @@ export const createFunctionalTestingMcpServer = () => {
77
76
  .describe('Optional test results or error details'),
78
77
  }, async (args) => {
79
78
  try {
80
- const result = await callMcpEndpoint('features/update', {
81
- feature_id: args.feature_id,
79
+ const result = await callMcpEndpoint('issues/update', {
80
+ issue_id: args.issue_id,
82
81
  status: args.test_status,
83
82
  });
84
83
  return {
@@ -87,10 +86,10 @@ export const createFunctionalTestingMcpServer = () => {
87
86
  type: 'text',
88
87
  text: JSON.stringify({
89
88
  success: true,
90
- feature_id: args.feature_id,
89
+ issue_id: args.issue_id,
91
90
  test_status: args.test_status,
92
91
  test_results: args.test_results || null,
93
- message: `Feature test status updated to: ${args.test_status}`,
92
+ message: `Issue test status updated to: ${args.test_status}`,
94
93
  result,
95
94
  }, null, 2),
96
95
  },
@@ -1,2 +1,2 @@
1
1
  export declare const createFunctionalTestingSystemPrompt: (projectDir?: string) => Promise<string>;
2
- export declare const createFunctionalTestingPromptWithContext: (featureId: string, contextInfo: string) => string;
2
+ export declare const createFunctionalTestingPromptWithContext: (issueId: string, contextInfo: string) => string;
@@ -9,8 +9,8 @@ export const createFunctionalTestingSystemPrompt = async (projectDir) => {
9
9
 
10
10
  ${OUTPUT_CONTRACTS['functional-testing']}`;
11
11
  };
12
- export const createFunctionalTestingPromptWithContext = (featureId, contextInfo) => {
13
- return `Execute comprehensive functional testing for feature ID: ${featureId}
12
+ export const createFunctionalTestingPromptWithContext = (issueId, contextInfo) => {
13
+ return `Execute comprehensive functional testing for issue ID: ${issueId}
14
14
 
15
15
  ${contextInfo}
16
16
 
@@ -42,12 +42,12 @@ Follow this systematic approach:
42
42
  - Test edge cases and boundary conditions
43
43
 
44
44
  5. **Integration Testing**:
45
- - Test interactions between different parts of the feature
45
+ - Test interactions between different parts of the issue
46
46
  - Verify API calls and data flow
47
47
  - Test any third-party integrations
48
48
 
49
49
  ## Important Testing Notes:
50
- - The feature has already been implemented - you're testing existing functionality
50
+ - The issue has already been implemented - you're testing existing functionality
51
51
  - Use HEADLESS browser mode for better performance and CI/CD compatibility
52
52
  - Test ALL critical functionality described in the user stories
53
53
  - Mark as 'passed' only if ALL critical tests pass
@@ -6,7 +6,7 @@ export interface TestReportData {
6
6
  }
7
7
  export interface TestReport {
8
8
  id: string;
9
- feature_id: string;
9
+ issue_id: string;
10
10
  title: string;
11
11
  status: 'draft' | 'submitted' | 'approved' | 'rejected';
12
12
  summary: string;
@@ -27,7 +27,7 @@ export interface StructuredTestReport {
27
27
  timestamp: string;
28
28
  }
29
29
  export interface TestReportCreateOptions {
30
- featureId: string;
30
+ issueId: string;
31
31
  testReportData: TestReportData;
32
32
  testResults?: TestResultInput[];
33
33
  verbose?: boolean;
@@ -23,9 +23,9 @@ testResults, verbose) {
23
23
  * Uses structured data generated by Claude Code
24
24
  */
25
25
  export async function createTestReport(options) {
26
- const { featureId, testReportData, testResults, verbose } = options;
26
+ const { issueId, testReportData, testResults, verbose } = options;
27
27
  if (verbose) {
28
- logInfo(`Creating test report for feature: ${featureId}`);
28
+ logInfo(`Creating test report for issue: ${issueId}`);
29
29
  }
30
30
  // Parse test results to extract statistics
31
31
  const stats = parseTestResults(testReportData.testResults);
@@ -56,7 +56,7 @@ export async function createTestReport(options) {
56
56
  jsonrpc: '2.0',
57
57
  method: 'test_reports/create',
58
58
  params: {
59
- feature_id: featureId,
59
+ issue_id: issueId,
60
60
  title: structuredReport.title,
61
61
  status: structuredReport.status,
62
62
  summary: structuredReport.summary,
@@ -86,7 +86,7 @@ export async function createTestReport(options) {
86
86
  logInfo('Claude Code MCP call may have failed, manually calling MCP endpoint...');
87
87
  }
88
88
  // Manual fallback: Call MCP endpoint with the structured data
89
- const fallbackResult = await manualMcpTestReportCreation(featureId, structuredReport, testResults, verbose);
89
+ const fallbackResult = await manualMcpTestReportCreation(issueId, structuredReport, testResults, verbose);
90
90
  return fallbackResult;
91
91
  }
92
92
  catch (error) {
@@ -95,7 +95,7 @@ export async function createTestReport(options) {
95
95
  logError(`Test report creation failed: ${errorMessage}`);
96
96
  }
97
97
  // Manual fallback on any error
98
- return manualMcpTestReportCreation(featureId, structuredReport, testResults, verbose);
98
+ return manualMcpTestReportCreation(issueId, structuredReport, testResults, verbose);
99
99
  }
100
100
  }
101
101
  /**
@@ -160,7 +160,7 @@ export async function createTestReportResults(options) {
160
160
  };
161
161
  }
162
162
  }
163
- async function manualMcpTestReportCreation(featureId, structuredReport, testResults, verbose) {
163
+ async function manualMcpTestReportCreation(issueId, structuredReport, testResults, verbose) {
164
164
  if (verbose) {
165
165
  logInfo('Manually calling MCP test_reports/create endpoint with structured data');
166
166
  }
@@ -178,7 +178,7 @@ async function manualMcpTestReportCreation(featureId, structuredReport, testResu
178
178
  jsonrpc: '2.0',
179
179
  method: 'test_reports/create',
180
180
  params: {
181
- feature_id: featureId,
181
+ issue_id: issueId,
182
182
  title: structuredReport.title,
183
183
  status: structuredReport.status,
184
184
  summary: structuredReport.summary,
@@ -218,8 +218,8 @@ async function manualMcpTestReportCreation(featureId, structuredReport, testResu
218
218
  }
219
219
  // Create a mock test report object for consistency
220
220
  const mockTestReport = {
221
- id: featureId, // Use feature ID for URL generation
222
- feature_id: featureId,
221
+ id: issueId, // Use issue ID for URL generation
222
+ issue_id: issueId,
223
223
  title: structuredReport.title,
224
224
  status: structuredReport.status,
225
225
  summary: structuredReport.summary,
@@ -232,7 +232,7 @@ async function manualMcpTestReportCreation(featureId, structuredReport, testResu
232
232
  return {
233
233
  success: true,
234
234
  testReport: mockTestReport,
235
- testReportUrl: generateTestReportUrl(featureId),
235
+ testReportUrl: generateTestReportUrl(issueId),
236
236
  };
237
237
  }
238
238
  catch (error) {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Test retry and bug fixing handler for pipeline execution
3
3
  */
4
- import { updateFeatureStatusForPhase } from '../../api/features/index.js';
4
+ import { updateIssueStatusForPhase } from '../../api/issues/index.js';
5
5
  import { runFunctionalTestingPhase } from '../../commands/workflow/executors/phase-executor.js';
6
6
  import { logDebug, logWarning } from '../../utils/logger.js';
7
7
  import { logPhaseResult } from '../../utils/pipeline-logger.js';
@@ -33,7 +33,7 @@ export async function handleTestFailuresWithRetry({ options, config, results, ve
33
33
  testingResult.data?.testResult || testingResult.message;
34
34
  // Run bug fixing
35
35
  const fixResult = await fixTestFailures({
36
- featureId: options.featureId,
36
+ issueId: options.issueId,
37
37
  testErrors,
38
38
  attemptNumber: fixAttempt,
39
39
  verbose,
@@ -48,7 +48,7 @@ export async function handleTestFailuresWithRetry({ options, config, results, ve
48
48
  // Remove the previous failed test result from results
49
49
  results.pop();
50
50
  // Update status to indicate we're retrying tests
51
- await updateFeatureStatusForPhase(options.featureId, 'functional-testing', verbose);
51
+ await updateIssueStatusForPhase(options.issueId, 'functional-testing', verbose);
52
52
  }
53
53
  else {
54
54
  logDebug(`Bug fixing failed: ${fixResult.message}`, verbose);
@@ -40,11 +40,11 @@ export function formatContextForPrompt(context, guidance) {
40
40
  Created: ${c.created_at}`)
41
41
  .join('\n\n')
42
42
  : 'No previous campaigns.';
43
- const featuresList = product.features && product.features.length > 0
44
- ? product.features
43
+ const issuesList = product.issues && product.issues.length > 0
44
+ ? product.issues
45
45
  .map((f) => `- **${f.name}**: ${f.description || 'No description'} (Status: ${f.status || 'unknown'})`)
46
46
  .join('\n')
47
- : 'No features listed.';
47
+ : 'No issues listed.';
48
48
  const guidanceSection = guidance
49
49
  ? `
50
50
 
@@ -62,8 +62,8 @@ ${guidance}
62
62
  - **Product ID**: ${product.id}
63
63
  - **Description**: ${product.description || 'No description provided'}
64
64
 
65
- ## Product Features (${product.features?.length || 0})
66
- ${featuresList}
65
+ ## Product Issues (${product.issues?.length || 0})
66
+ ${issuesList}
67
67
  ${guidanceSection}
68
68
 
69
69
  ## Previous Growth Campaigns (${previousCampaigns.length})
@@ -71,7 +71,7 @@ ${campaignsList}
71
71
 
72
72
  ---
73
73
 
74
- **Important**: Analyze the product above and create a growth strategy.${guidance ? ' Follow the human growth guidance provided above for direction, themes, and tone.' : ''} Each content suggestion must be DIFFERENT from all previous campaigns listed above. Use the product name, description, and features to write specific, concrete content — never use placeholder text.`;
74
+ **Important**: Analyze the product above and create a growth strategy.${guidance ? ' Follow the human growth guidance provided above for direction, themes, and tone.' : ''} Each content suggestion must be DIFFERENT from all previous campaigns listed above. Use the product name, description, and issues to write specific, concrete content — never use placeholder text.`;
75
75
  }
76
76
  /**
77
77
  * Prepare the full analysis prompt with all context
@@ -2,7 +2,7 @@ import { getGitHubConfigByProduct } from '../../api/github.js';
2
2
  import { saveGrowthAnalysis, updateGrowthAnalysis } from '../../api/growth.js';
3
3
  import { generateGrowthVideo, } from '../../services/video/index.js';
4
4
  import { logError, logInfo, logSuccess, logWarning, } from '../../utils/logger.js';
5
- import { cloneFeatureRepo, ensureWorkspaceDir, } from '../../workspace/workspace-manager.js';
5
+ import { cloneIssueRepo, ensureWorkspaceDir, } from '../../workspace/workspace-manager.js';
6
6
  import { executeGrowthAnalysisQuery } from './agent.js';
7
7
  import { prepareGrowthAnalysisContext } from './context.js';
8
8
  import { createGrowthAnalysisSystemPrompt } from './prompts.js';
@@ -65,7 +65,7 @@ export const analyseGrowth = async (options, config) => {
65
65
  githubConfig.owner &&
66
66
  githubConfig.repo) {
67
67
  const workspaceRoot = ensureWorkspaceDir();
68
- const { repoPath } = cloneFeatureRepo(workspaceRoot, `growth-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
68
+ const { repoPath } = cloneIssueRepo(workspaceRoot, `growth-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
69
69
  repoCwd = repoPath;
70
70
  logInfo(`Repository cloned to: ${repoCwd}`);
71
71
  }
@@ -34,10 +34,10 @@ ${codebaseInstructions}
34
34
  1. Understand the product's real value proposition, target users, and competitive advantages
35
35
  2. Study the previous campaigns listed above - DO NOT suggest content that overlaps with what has already been published
36
36
  3. Identify the most effective channels for reaching this product's target audience
37
- 4. Generate specific, ready-to-publish content pieces using REAL details${hasCodebase ? ' from the codebase (actual feature names, real technical details, concrete benefits)' : ' from the product context above'}
37
+ 4. Generate specific, ready-to-publish content pieces using REAL details${hasCodebase ? ' from the codebase (actual issue names, real technical details, concrete benefits)' : ' from the product context above'}
38
38
  5. For content that would benefit from visual demonstration, create detailed video scene plans with HTML templates and narration scripts
39
39
 
40
- **VIDEO CONTENT**: Decide for each suggestion whether it needs a video. Include a video_plan object in every content_suggestions entry. When video adds value (demos, tutorials, feature showcases), provide complete scene plans with HTML templates featuring realistic mock data. When text is sufficient, set should_generate_video to false with a brief explanation.
40
+ **VIDEO CONTENT**: Decide for each suggestion whether it needs a video. Include a video_plan object in every content_suggestions entry. When video adds value (demos, tutorials, issue showcases), provide complete scene plans with HTML templates featuring realistic mock data. When text is sufficient, set should_generate_video to false with a brief explanation.
41
41
 
42
42
  **CRITICAL**: Every content piece must be ready to copy-paste and publish. Use actual product details, not placeholders.
43
43
 
@@ -48,11 +48,11 @@ export async function fetchIntelligenceContext(productId, verbose) {
48
48
  */
49
49
  export function formatContextForPrompt(context, guidance) {
50
50
  const { product, confirmedCompetitors, previousSnapshots } = context;
51
- const featuresList = product.features && product.features.length > 0
52
- ? product.features
51
+ const issuesList = product.issues && product.issues.length > 0
52
+ ? product.issues
53
53
  .map((f) => `- **${f.name}**: ${f.description || 'No description'} (Status: ${f.status || 'unknown'})`)
54
54
  .join('\n')
55
- : 'No features listed.';
55
+ : 'No issues listed.';
56
56
  let competitorsSection = '';
57
57
  if (confirmedCompetitors.length > 0) {
58
58
  const competitorEntries = confirmedCompetitors.map((c) => {
@@ -70,8 +70,8 @@ export function formatContextForPrompt(context, guidance) {
70
70
  if (latestSnapshot.app_version) {
71
71
  parts.push(`Version: ${latestSnapshot.app_version}`);
72
72
  }
73
- if (latestSnapshot.features?.length) {
74
- parts.push(`Known features: ${latestSnapshot.features.length}`);
73
+ if (latestSnapshot.issues?.length) {
74
+ parts.push(`Known issues: ${latestSnapshot.issues.length}`);
75
75
  }
76
76
  if (latestSnapshot.pricing?.model) {
77
77
  parts.push(`Pricing model: ${latestSnapshot.pricing.model}`);
@@ -115,8 +115,8 @@ ${guidance}
115
115
  - **Product ID**: ${product.id}
116
116
  - **Description**: ${product.description || 'No description provided'}
117
117
 
118
- ## Product Features (${product.features?.length || 0})
119
- ${featuresList}
118
+ ## Product Issues (${product.issues?.length || 0})
119
+ ${issuesList}
120
120
  ${guidanceSection}
121
121
 
122
122
  ${competitorsSection}
@@ -1,7 +1,7 @@
1
1
  import { getGitHubConfigByProduct } from '../../api/github.js';
2
2
  import { batchCreateCompetitors, saveReport, saveSnapshot, updateReport, } from '../../api/intelligence.js';
3
3
  import { logError, logInfo, logSuccess, logWarning, } from '../../utils/logger.js';
4
- import { cloneFeatureRepo, ensureWorkspaceDir, } from '../../workspace/workspace-manager.js';
4
+ import { cloneIssueRepo, ensureWorkspaceDir, } from '../../workspace/workspace-manager.js';
5
5
  import { executeIntelligenceQuery } from './agent.js';
6
6
  import { prepareIntelligenceContext } from './context.js';
7
7
  import { createIntelligenceSystemPrompt } from './prompts.js';
@@ -87,7 +87,7 @@ export async function analyseIntelligence(options, config, deps = defaultDeps) {
87
87
  githubConfig.owner &&
88
88
  githubConfig.repo) {
89
89
  const workspaceRoot = ensureWorkspaceDir();
90
- const { repoPath } = cloneFeatureRepo(workspaceRoot, `intel-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
90
+ const { repoPath } = cloneIssueRepo(workspaceRoot, `intel-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
91
91
  repoCwd = repoPath;
92
92
  logInfo(`Repository cloned to: ${repoCwd}`);
93
93
  }
@@ -163,7 +163,7 @@ export async function analyseIntelligence(options, config, deps = defaultDeps) {
163
163
  const saved = await deps.saveSnap({
164
164
  competitor_id: competitorId,
165
165
  product_id: productId,
166
- features: snap.features,
166
+ issues: snap.issues,
167
167
  pricing: snap.pricing,
168
168
  tech_stack: snap.tech_stack,
169
169
  app_rating: snap.app_rating,
@@ -73,7 +73,7 @@ export async function executeAnalysisQuery(currentPrompt, systemPrompt, config,
73
73
  if (message.type === 'result') {
74
74
  executionSessionId = message.session_id || executionSessionId;
75
75
  if (message.subtype === 'success') {
76
- logInfo('\n📊 Feature analysis completed, parsing results...');
76
+ logInfo('\n📊 Issue analysis completed, parsing results...');
77
77
  const responseText = message.result || lastAssistantResponse;
78
78
  const parsed = parseAnalysisResult(responseText);
79
79
  if (parsed.error) {
@@ -0,0 +1,24 @@
1
+ import { type ProductInfo } from '../../api/products.js';
2
+ import { type ChecklistPhaseContext } from '../../services/checklist.js';
3
+ import type { IssueInfo, TestCase, UserStory } from '../../types/issues.js';
4
+ export interface IssueAnalysisContext {
5
+ issue: IssueInfo;
6
+ product: ProductInfo;
7
+ existing_user_stories: UserStory[];
8
+ existing_test_cases: TestCase[];
9
+ }
10
+ /**
11
+ * Fetch all issue analysis context information via MCP endpoints
12
+ */
13
+ export declare function fetchIssueAnalysisContext(issueId: string, verbose?: boolean): Promise<IssueAnalysisContext>;
14
+ /**
15
+ * Format the context into a readable string for Claude Code
16
+ */
17
+ export declare function formatContextForPrompt(context: IssueAnalysisContext): string;
18
+ /**
19
+ * Prepare all context information needed for analysis
20
+ */
21
+ export declare function prepareAnalysisContext(issueId: string, checklistContext: ChecklistPhaseContext | null | undefined, verbose?: boolean): Promise<{
22
+ issueContext: IssueAnalysisContext;
23
+ analysisPrompt: string;
24
+ }>;
@@ -1,34 +1,34 @@
1
- import { getFeature, getTestCases, getUserStories, } from '../../api/features/index.js';
1
+ import { getIssue, getTestCases, getUserStories, } from '../../api/issues/index.js';
2
2
  import { getProduct } from '../../api/products.js';
3
3
  import { formatChecklistsForContext, } from '../../services/checklist.js';
4
4
  import { formatFeedbacksForContext, getFeedbacksForPhase, } from '../../services/feedbacks.js';
5
- import { formatFeatureAnalysisContext } from '../../utils/formatters.js';
5
+ import { formatIssueAnalysisContext } from '../../utils/formatters.js';
6
6
  import { logError, logInfo } from '../../utils/logger.js';
7
- import { createFeatureAnalysisPromptWithContext } from './prompts.js';
7
+ import { createIssueAnalysisPromptWithContext } from './prompts.js';
8
8
  /**
9
- * Fetch all feature analysis context information via MCP endpoints
9
+ * Fetch all issue analysis context information via MCP endpoints
10
10
  */
11
- export async function fetchFeatureAnalysisContext(featureId, verbose) {
11
+ export async function fetchIssueAnalysisContext(issueId, verbose) {
12
12
  try {
13
13
  if (verbose) {
14
- logInfo(`Fetching complete feature analysis context for feature: ${featureId}`);
14
+ logInfo(`Fetching complete issue analysis context for issue: ${issueId}`);
15
15
  }
16
16
  // Fetch all required data in parallel for better performance
17
- const [feature, existingUserStories, existingTestCases] = await Promise.all([
18
- getFeature(featureId, verbose),
19
- getUserStories(featureId, verbose),
20
- getTestCases(featureId, verbose),
17
+ const [issue, existingUserStories, existingTestCases] = await Promise.all([
18
+ getIssue(issueId, verbose),
19
+ getUserStories(issueId, verbose),
20
+ getTestCases(issueId, verbose),
21
21
  ]);
22
- const product = await getProduct(feature.product_id, verbose);
22
+ const product = await getProduct(issue.product_id, verbose);
23
23
  if (verbose) {
24
- logInfo(`✅ Feature analysis context fetched successfully:`);
25
- logInfo(` Feature: ${feature.name}`);
24
+ logInfo(`✅ Issue analysis context fetched successfully:`);
25
+ logInfo(` Issue: ${issue.name}`);
26
26
  logInfo(` Product: ${product.name}`);
27
27
  logInfo(` Existing User Stories: ${existingUserStories.length}`);
28
28
  logInfo(` Existing Test Cases: ${existingTestCases.length}`);
29
29
  }
30
30
  return {
31
- feature,
31
+ issue,
32
32
  product,
33
33
  existing_user_stories: existingUserStories,
34
34
  existing_test_cases: existingTestCases,
@@ -36,7 +36,7 @@ export async function fetchFeatureAnalysisContext(featureId, verbose) {
36
36
  }
37
37
  catch (error) {
38
38
  const errorMessage = error instanceof Error ? error.message : String(error);
39
- logError(`Failed to fetch feature analysis context: ${errorMessage}`);
39
+ logError(`Failed to fetch issue analysis context: ${errorMessage}`);
40
40
  throw new Error(`Context fetch failed: ${errorMessage}`);
41
41
  }
42
42
  }
@@ -66,13 +66,13 @@ export function formatContextForPrompt(context) {
66
66
  })
67
67
  .join('\n\n');
68
68
  };
69
- return `# Feature Analysis Context
69
+ return `# Issue Analysis Context
70
70
 
71
- ## Feature Information
72
- - **ID**: ${context.feature.id}
73
- - **Name**: ${context.feature.name}
74
- - **Description**: ${context.feature.description || 'No description provided'}
75
- - **Current Status**: ${context.feature.status}
71
+ ## Issue Information
72
+ - **ID**: ${context.issue.id}
73
+ - **Name**: ${context.issue.name}
74
+ - **Description**: ${context.issue.description || 'No description provided'}
75
+ - **Current Status**: ${context.issue.status}
76
76
 
77
77
  ## Product Information
78
78
  - **Product**: ${context.product.name}
@@ -86,21 +86,21 @@ ${formatUserStories(context.existing_user_stories)}
86
86
  ${formatTestCases(context.existing_test_cases)}
87
87
 
88
88
  ## Current Technical Design
89
- ${context.feature.technical_design || 'No technical design available yet'}
89
+ ${context.issue.technical_design || 'No technical design available yet'}
90
90
 
91
91
  ---
92
92
 
93
- **Analysis Instructions**: Based on the above feature information and existing user stories/test cases, conduct comprehensive business analysis to identify gaps and create additional user stories and test cases that add business value.`;
93
+ **Analysis Instructions**: Based on the above issue information and existing user stories/test cases, conduct comprehensive business analysis to identify gaps and create additional user stories and test cases that add business value.`;
94
94
  }
95
95
  /**
96
96
  * Prepare all context information needed for analysis
97
97
  */
98
- export async function prepareAnalysisContext(featureId, checklistContext, verbose) {
98
+ export async function prepareAnalysisContext(issueId, checklistContext, verbose) {
99
99
  if (verbose) {
100
- logInfo('Fetching feature analysis context via MCP endpoints...');
100
+ logInfo('Fetching issue analysis context via MCP endpoints...');
101
101
  }
102
- const featureContext = await fetchFeatureAnalysisContext(featureId, verbose);
103
- const { content: contextInfo, downloadedImages } = await formatFeatureAnalysisContext(featureContext);
102
+ const issueContext = await fetchIssueAnalysisContext(issueId, verbose);
103
+ const { content: contextInfo, downloadedImages } = await formatIssueAnalysisContext(issueContext);
104
104
  if (verbose && downloadedImages.length > 0) {
105
105
  logInfo(`Downloaded ${downloadedImages.length} images for Claude Code:`);
106
106
  downloadedImages.forEach((img) => {
@@ -110,7 +110,7 @@ export async function prepareAnalysisContext(featureId, checklistContext, verbos
110
110
  let finalContextInfo = contextInfo;
111
111
  // Add feedbacks context to the analysis prompt
112
112
  try {
113
- const feedbacksContext = await getFeedbacksForPhase({ featureId, verbose }, 'feature-analysis');
113
+ const feedbacksContext = await getFeedbacksForPhase({ issueId, verbose }, 'issue-analysis');
114
114
  if (feedbacksContext.feedbacks.length > 0) {
115
115
  const feedbacksInfo = await formatFeedbacksForContext(feedbacksContext);
116
116
  finalContextInfo = `${finalContextInfo}\n\n${feedbacksInfo}`;
@@ -133,6 +133,6 @@ export async function prepareAnalysisContext(featureId, checklistContext, verbos
133
133
  logInfo(`Added ${checklistContext.checklists.length} checklists to analysis context`);
134
134
  }
135
135
  }
136
- const analysisPrompt = createFeatureAnalysisPromptWithContext(featureId, finalContextInfo);
137
- return { featureContext, analysisPrompt };
136
+ const analysisPrompt = createIssueAnalysisPromptWithContext(issueId, finalContextInfo);
137
+ return { issueContext, analysisPrompt };
138
138
  }
@@ -0,0 +1,8 @@
1
+ import { type ChecklistPhaseContext } from '../../services/checklist.js';
2
+ import { type EdsgerConfig, type IssueAnalysisResult } from '../../types/index.js';
3
+ export interface IssueAnalysisOptions {
4
+ issueId: string;
5
+ verbose?: boolean;
6
+ maxVerificationIterations?: number;
7
+ }
8
+ export declare const analyseIssue: (options: IssueAnalysisOptions, config: EdsgerConfig, checklistContext?: ChecklistPhaseContext | null) => Promise<IssueAnalysisResult>;