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,15 +1,15 @@
1
1
  /**
2
- * Main workflow processor for continuous feature development
3
- * Monitors for ready_for_ai features and processes them through the complete pipeline
2
+ * Main workflow processor for continuous issue development
3
+ * Monitors for ready_for_ai issues and processes them through the complete pipeline
4
4
  * Uses functional programming principles
5
5
  */
6
- import { claimNextFeature } from '../../api/features/index.js';
6
+ import { claimNextIssue } from '../../api/issues/index.js';
7
7
  import { logInfo } from '../../utils/logger.js';
8
8
  import { evaluatePipelineResults } from './core/pipeline-evaluator.js';
9
9
  // Import core modules
10
- import { calculateStats, createCompletedState, createFailedState, createInitialState, createProcessingState, updateFeatureState, } from './core/state-manager.js';
11
- import { logFeatureError, logFeatureFailed, logFeatureSuccess, logNoFeaturesFound, logPipelineResults, logPollingError, logProcessingStart, logProcessNextFeatureError, logProcessorReady, logProcessorStart, logProcessorStop, logRetryInfo, logSkippingProcessing, } from './core/workflow-logger.js';
12
- import { runFeatureWorkflow } from './feature-coordinator.js';
10
+ import { calculateStats, createCompletedState, createFailedState, createInitialState, createProcessingState, updateIssueState, } from './core/state-manager.js';
11
+ import { logIssueError, logIssueFailed, logIssueSuccess, logNoIssuesFound, logPipelineResults, logPollingError, logProcessingStart, logProcessNextIssueError, logProcessorReady, logProcessorStart, logProcessorStop, logRetryInfo, logSkippingProcessing, } from './core/workflow-logger.js';
12
+ import { runIssueWorkflow } from './issue-coordinator.js';
13
13
  /**
14
14
  * Workflow processor using functional programming principles
15
15
  */
@@ -17,7 +17,7 @@ export class WorkflowProcessor {
17
17
  options;
18
18
  config;
19
19
  isRunning = false;
20
- processedFeatures = createInitialState();
20
+ processedIssues = createInitialState();
21
21
  pollTimer;
22
22
  constructor(options, config) {
23
23
  this.options = {
@@ -39,10 +39,10 @@ export class WorkflowProcessor {
39
39
  this.isRunning = true;
40
40
  logProcessorStart(this.options.productId, this.options.pollInterval);
41
41
  // Initial check
42
- await this.processNextFeature();
43
- // Set up polling for new features
42
+ await this.processNextIssue();
43
+ // Set up polling for new issues
44
44
  this.pollTimer = setInterval(() => {
45
- this.processNextFeature().catch((error) => {
45
+ this.processNextIssue().catch((error) => {
46
46
  logPollingError(error);
47
47
  });
48
48
  }, this.options.pollInterval);
@@ -63,87 +63,87 @@ export class WorkflowProcessor {
63
63
  logProcessorStop();
64
64
  }
65
65
  /**
66
- * Process the next available feature using atomic claim mechanism
66
+ * Process the next available issue using atomic claim mechanism
67
67
  * Uses database-level locking to prevent race conditions between workers
68
68
  */
69
- async processNextFeature() {
69
+ async processNextIssue() {
70
70
  try {
71
- // Skip feature fetching if there are any features currently being processed
72
- const stats = calculateStats(this.processedFeatures, this.isRunning);
71
+ // Skip issue fetching if there are any issues currently being processed
72
+ const stats = calculateStats(this.processedIssues, this.isRunning);
73
73
  if (stats.processing > 0) {
74
74
  if (this.options.verbose) {
75
75
  logSkippingProcessing(stats.processing);
76
76
  }
77
77
  return;
78
78
  }
79
- // Atomically claim the next available feature
80
- // This uses FOR UPDATE SKIP LOCKED to prevent multiple workers from claiming the same feature
81
- const claimedFeature = await claimNextFeature(this.options.productId, this.options.verbose);
82
- if (!claimedFeature) {
79
+ // Atomically claim the next available issue
80
+ // This uses FOR UPDATE SKIP LOCKED to prevent multiple workers from claiming the same issue
81
+ const claimedIssue = await claimNextIssue(this.options.productId, this.options.verbose);
82
+ if (!claimedIssue) {
83
83
  if (this.options.verbose) {
84
- logNoFeaturesFound();
84
+ logNoIssuesFound();
85
85
  }
86
86
  return;
87
87
  }
88
- // Process the claimed feature
89
- await this.processFeature(claimedFeature);
88
+ // Process the claimed issue
89
+ await this.processIssue(claimedIssue);
90
90
  }
91
91
  catch (error) {
92
- logProcessNextFeatureError(error);
92
+ logProcessNextIssueError(error);
93
93
  }
94
94
  }
95
95
  /**
96
- * Process a single feature through the complete pipeline using functional composition
96
+ * Process a single issue through the complete pipeline using functional composition
97
97
  */
98
- async processFeature(feature) {
99
- const featureId = feature.id;
100
- // Check if this is a reprocess due to feature update
101
- const existingState = this.processedFeatures.get(featureId);
98
+ async processIssue(issue) {
99
+ const issueId = issue.id;
100
+ // Check if this is a reprocess due to issue update
101
+ const existingState = this.processedIssues.get(issueId);
102
102
  if (existingState &&
103
103
  existingState.status === 'completed' &&
104
104
  this.options.verbose) {
105
- logInfo(`🔄 Reprocessing feature "${feature.name}" - detected status change`);
106
- if (feature.updated_at) {
105
+ logInfo(`🔄 Reprocessing issue "${issue.name}" - detected status change`);
106
+ if (issue.updated_at) {
107
107
  logInfo(` Previous process: ${existingState.lastAttempt.toISOString()}`);
108
- logInfo(` Feature updated: ${feature.updated_at}`);
108
+ logInfo(` Issue updated: ${issue.updated_at}`);
109
109
  }
110
110
  }
111
111
  // Update state to processing using pure function
112
- this.processedFeatures = updateFeatureState(this.processedFeatures, featureId, (currentState) => createProcessingState(featureId, currentState));
113
- logProcessingStart(feature, this.options.verbose);
112
+ this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createProcessingState(issueId, currentState));
113
+ logProcessingStart(issue, this.options.verbose);
114
114
  try {
115
- // Run feature workflow using feature coordinator with execution mode support
116
- const results = await runFeatureWorkflow({
117
- featureId,
115
+ // Run issue workflow using issue coordinator with execution mode support
116
+ const results = await runIssueWorkflow({
117
+ issueId,
118
118
  verbose: this.options.verbose,
119
119
  }, this.config);
120
120
  // Evaluate results using pure function
121
121
  const allSuccessful = evaluatePipelineResults(results);
122
122
  if (allSuccessful) {
123
123
  // Mark as completed using pure function
124
- this.processedFeatures = updateFeatureState(this.processedFeatures, featureId, (currentState) => createCompletedState(featureId, currentState));
125
- logFeatureSuccess(feature.name);
124
+ this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createCompletedState(issueId, currentState));
125
+ logIssueSuccess(issue.name);
126
126
  logPipelineResults(results);
127
127
  }
128
128
  else {
129
129
  // Mark as failed using pure function
130
- this.processedFeatures = updateFeatureState(this.processedFeatures, featureId, (currentState) => createFailedState(featureId, currentState));
131
- logFeatureFailed(feature.name);
130
+ this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
131
+ logIssueFailed(issue.name);
132
132
  logPipelineResults(results);
133
- const currentState = this.processedFeatures.get(featureId);
134
- logRetryInfo(feature.name, currentState?.retryCount ?? 0, this.options.maxRetries);
133
+ const currentState = this.processedIssues.get(issueId);
134
+ logRetryInfo(issue.name, currentState?.retryCount ?? 0, this.options.maxRetries);
135
135
  }
136
136
  }
137
137
  catch (error) {
138
138
  // Mark as failed using pure function
139
- this.processedFeatures = updateFeatureState(this.processedFeatures, featureId, (currentState) => createFailedState(featureId, currentState));
140
- logFeatureError(feature.name, error);
139
+ this.processedIssues = updateIssueState(this.processedIssues, issueId, (currentState) => createFailedState(issueId, currentState));
140
+ logIssueError(issue.name, error);
141
141
  }
142
142
  }
143
143
  /**
144
144
  * Get current processing statistics using pure function
145
145
  */
146
146
  getStats() {
147
- return calculateStats(this.processedFeatures, this.isRunning);
147
+ return calculateStats(this.processedIssues, this.isRunning);
148
148
  }
149
149
  }
@@ -1,14 +1,14 @@
1
1
  /**
2
- * Feature status configuration
3
- * Defines the progression order and mappings for feature statuses
2
+ * Issue status configuration
3
+ * Defines the progression order and mappings for issue statuses
4
4
  */
5
- import type { FeatureStatus } from '../types/index.js';
5
+ import type { IssueStatus } from '../types/index.js';
6
6
  /**
7
7
  * Status progression order - higher index means more advanced status
8
- * This defines the allowed forward progression through the feature workflow
8
+ * This defines the allowed forward progression through the issue workflow
9
9
  *
10
10
  * Business Logic Rules:
11
- * - Features can only move forward or stay at the same status level
11
+ * - Issues can only move forward or stay at the same status level
12
12
  * - No regression to earlier stages is allowed (e.g., cannot go back to 'backlog' from 'code_implementation')
13
13
  * - Status updates preserve development momentum and prevent accidental rollbacks
14
14
  *
@@ -21,21 +21,21 @@ import type { FeatureStatus } from '../types/index.js';
21
21
  * through to final shipping. All status values must match the database constraint
22
22
  * in migration 20251019000000_update_feature_status_constraint.sql
23
23
  */
24
- export declare const STATUS_PROGRESSION_ORDER: readonly FeatureStatus[];
24
+ export declare const STATUS_PROGRESSION_ORDER: readonly IssueStatus[];
25
25
  /**
26
26
  * Phase to status mapping
27
- * Maps pipeline phase names to their corresponding feature statuses
27
+ * Maps pipeline phase names to their corresponding issue statuses
28
28
  *
29
- * This mapping ensures that each pipeline phase updates the feature to the appropriate
30
- * status. Phase names use kebab-case (e.g., 'feature-analysis') while status values
31
- * use snake_case (e.g., 'feature_analysis') to match database schema.
29
+ * This mapping ensures that each pipeline phase updates the issue to the appropriate
30
+ * status. Phase names use kebab-case (e.g., 'issue-analysis') while status values
31
+ * use snake_case (e.g., 'issue_analysis') to match database schema.
32
32
  *
33
33
  * All status values must match the database constraint in migration 20251019000000_update_feature_status_constraint.sql
34
34
  *
35
- * If a phase is not found in this mapping, updateFeatureStatusForPhase will return null
35
+ * If a phase is not found in this mapping, updateIssueStatusForPhase will return null
36
36
  * and skip the status update to prevent unintended regression to 'backlog'.
37
37
  */
38
- export declare const PHASE_STATUS_MAP: Record<string, FeatureStatus>;
38
+ export declare const PHASE_STATUS_MAP: Record<string, IssueStatus>;
39
39
  /**
40
40
  * Human-selectable statuses
41
41
  * These are the statuses that a human user can manually set.
@@ -49,8 +49,8 @@ export declare const PHASE_STATUS_MAP: Record<string, FeatureStatus>;
49
49
  * These excluded statuses should not be shown in UI dropdowns for manual status changes
50
50
  * because they represent intermediate states that are managed by the workflow system.
51
51
  */
52
- export declare const HUMAN_SELECTABLE_STATUSES: readonly FeatureStatus[];
52
+ export declare const HUMAN_SELECTABLE_STATUSES: readonly IssueStatus[];
53
53
  /**
54
54
  * Check if a status can be manually selected by a human user
55
55
  */
56
- export declare function isHumanSelectableStatus(status: FeatureStatus): boolean;
56
+ export declare function isHumanSelectableStatus(status: IssueStatus): boolean;
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Feature status configuration
3
- * Defines the progression order and mappings for feature statuses
2
+ * Issue status configuration
3
+ * Defines the progression order and mappings for issue statuses
4
4
  */
5
5
  /**
6
6
  * Status progression order - higher index means more advanced status
7
- * This defines the allowed forward progression through the feature workflow
7
+ * This defines the allowed forward progression through the issue workflow
8
8
  *
9
9
  * Business Logic Rules:
10
- * - Features can only move forward or stay at the same status level
10
+ * - Issues can only move forward or stay at the same status level
11
11
  * - No regression to earlier stages is allowed (e.g., cannot go back to 'backlog' from 'code_implementation')
12
12
  * - Status updates preserve development momentum and prevent accidental rollbacks
13
13
  *
@@ -24,8 +24,8 @@ export const STATUS_PROGRESSION_ORDER = [
24
24
  'backlog',
25
25
  'ready_for_ai',
26
26
  'assigned_to_ai',
27
- 'feature_analysis',
28
- 'feature_analysis_verification',
27
+ 'issue_analysis',
28
+ 'issue_analysis_verification',
29
29
  'user_stories_analysis',
30
30
  'user_stories_analysis_verification',
31
31
  'test_cases_analysis',
@@ -53,20 +53,20 @@ export const STATUS_PROGRESSION_ORDER = [
53
53
  ];
54
54
  /**
55
55
  * Phase to status mapping
56
- * Maps pipeline phase names to their corresponding feature statuses
56
+ * Maps pipeline phase names to their corresponding issue statuses
57
57
  *
58
- * This mapping ensures that each pipeline phase updates the feature to the appropriate
59
- * status. Phase names use kebab-case (e.g., 'feature-analysis') while status values
60
- * use snake_case (e.g., 'feature_analysis') to match database schema.
58
+ * This mapping ensures that each pipeline phase updates the issue to the appropriate
59
+ * status. Phase names use kebab-case (e.g., 'issue-analysis') while status values
60
+ * use snake_case (e.g., 'issue_analysis') to match database schema.
61
61
  *
62
62
  * All status values must match the database constraint in migration 20251019000000_update_feature_status_constraint.sql
63
63
  *
64
- * If a phase is not found in this mapping, updateFeatureStatusForPhase will return null
64
+ * If a phase is not found in this mapping, updateIssueStatusForPhase will return null
65
65
  * and skip the status update to prevent unintended regression to 'backlog'.
66
66
  */
67
67
  export const PHASE_STATUS_MAP = {
68
- 'feature-analysis': 'feature_analysis',
69
- 'feature-analysis-verification': 'feature_analysis_verification',
68
+ 'issue-analysis': 'issue_analysis',
69
+ 'issue-analysis-verification': 'issue_analysis_verification',
70
70
  'user-stories-analysis': 'user_stories_analysis',
71
71
  'user-stories-analysis-verification': 'user_stories_analysis_verification',
72
72
  'test-cases-analysis': 'test_cases_analysis',
@@ -106,7 +106,7 @@ export const PHASE_STATUS_MAP = {
106
106
  export const HUMAN_SELECTABLE_STATUSES = [
107
107
  'backlog',
108
108
  'ready_for_ai',
109
- 'feature_analysis',
109
+ 'issue_analysis',
110
110
  'user_stories_analysis',
111
111
  'test_cases_analysis',
112
112
  'technical_design',
@@ -38,23 +38,23 @@ export declare class ConfigError extends EdsgerError {
38
38
  }
39
39
  export declare class PhaseError extends EdsgerError {
40
40
  readonly phase: string;
41
- readonly featureId: string;
41
+ readonly issueId: string;
42
42
  readonly iteration?: number;
43
- constructor(phase: string, featureId: string, message: string, iteration?: number, options?: ErrorOptions);
43
+ constructor(phase: string, issueId: string, message: string, iteration?: number, options?: ErrorOptions);
44
44
  }
45
45
  export declare class LLMParseError extends EdsgerError {
46
46
  readonly rawResponse?: string;
47
47
  constructor(message: string, rawResponse?: string, options?: ErrorOptions);
48
48
  }
49
49
  export declare class WorkerTimeoutError extends EdsgerError {
50
- readonly featureId: string;
50
+ readonly issueId: string;
51
51
  readonly timeoutMs: number;
52
- constructor(featureId: string, timeoutMs: number, options?: ErrorOptions);
52
+ constructor(issueId: string, timeoutMs: number, options?: ErrorOptions);
53
53
  }
54
54
  export declare class WorkerCrashError extends EdsgerError {
55
- readonly featureId: string;
55
+ readonly issueId: string;
56
56
  readonly exitCode: number | null;
57
- constructor(featureId: string, exitCode: number | null, options?: ErrorOptions);
57
+ constructor(issueId: string, exitCode: number | null, options?: ErrorOptions);
58
58
  }
59
59
  export declare class ValidationError extends EdsgerError {
60
60
  readonly fields: string[];
@@ -65,13 +65,13 @@ export class ConfigError extends EdsgerError {
65
65
  // ---- Phase execution errors ----
66
66
  export class PhaseError extends EdsgerError {
67
67
  phase;
68
- featureId;
68
+ issueId;
69
69
  iteration;
70
- constructor(phase, featureId, message, iteration, options) {
70
+ constructor(phase, issueId, message, iteration, options) {
71
71
  super('PHASE_ERROR', message, options);
72
72
  this.name = 'PhaseError';
73
73
  this.phase = phase;
74
- this.featureId = featureId;
74
+ this.issueId = issueId;
75
75
  this.iteration = iteration;
76
76
  }
77
77
  }
@@ -86,22 +86,22 @@ export class LLMParseError extends EdsgerError {
86
86
  }
87
87
  // ---- Worker errors ----
88
88
  export class WorkerTimeoutError extends EdsgerError {
89
- featureId;
89
+ issueId;
90
90
  timeoutMs;
91
- constructor(featureId, timeoutMs, options) {
92
- super('WORKER_TIMEOUT', `Worker for feature ${featureId} timed out after ${Math.round(timeoutMs / 1000)}s`, options);
91
+ constructor(issueId, timeoutMs, options) {
92
+ super('WORKER_TIMEOUT', `Worker for issue ${issueId} timed out after ${Math.round(timeoutMs / 1000)}s`, options);
93
93
  this.name = 'WorkerTimeoutError';
94
- this.featureId = featureId;
94
+ this.issueId = issueId;
95
95
  this.timeoutMs = timeoutMs;
96
96
  }
97
97
  }
98
98
  export class WorkerCrashError extends EdsgerError {
99
- featureId;
99
+ issueId;
100
100
  exitCode;
101
- constructor(featureId, exitCode, options) {
102
- super('WORKER_CRASH', `Worker for feature ${featureId} crashed with exit code ${exitCode}`, options);
101
+ constructor(issueId, exitCode, options) {
102
+ super('WORKER_CRASH', `Worker for issue ${issueId} crashed with exit code ${exitCode}`, options);
103
103
  this.name = 'WorkerCrashError';
104
- this.featureId = featureId;
104
+ this.issueId = issueId;
105
105
  this.exitCode = exitCode;
106
106
  }
107
107
  }
package/dist/index.js CHANGED
@@ -13,6 +13,9 @@ import { runBuild } from './commands/build/index.js';
13
13
  import { runChecklists } from './commands/checklists/index.js';
14
14
  import { runCodeReview } from './commands/code-review/index.js';
15
15
  import { runConfigGet, runConfigList, runConfigSet, runConfigUnset, } from './commands/config/index.js';
16
+ import { runFindBugs } from './commands/find-bugs/index.js';
17
+ import { runFindFeatures } from './commands/find-features/index.js';
18
+ import { parseCategoriesOption, runFindSmells, } from './commands/find-smells/index.js';
16
19
  import { runGrowthAnalysis } from './commands/growth-analysis/index.js';
17
20
  import { runInit } from './commands/init/index.js';
18
21
  import { runIntelligence } from './commands/intelligence/index.js';
@@ -24,6 +27,8 @@ import { runRunSheetCommand } from './commands/run-sheet/index.js';
24
27
  import { runSmokeTestCommand } from './commands/smoke-test/index.js';
25
28
  import { runTaskWorker } from './commands/task-worker/index.js';
26
29
  import { runWorkflow } from './commands/workflow/index.js';
30
+ import { DEFAULT_MAX_FILES as FIND_SMELLS_DEFAULT_MAX_FILES } from './phases/find-smells/index.js';
31
+ import { SMELL_CATEGORIES, } from './phases/find-smells/types.js';
27
32
  import { logError, logInfo } from './utils/logger.js';
28
33
  // Get package.json version dynamically
29
34
  // eslint-disable-next-line @typescript-eslint/naming-convention -- ESM __filename/__dirname polyfill
@@ -354,6 +359,90 @@ program
354
359
  }
355
360
  });
356
361
  // ============================================================
362
+ // Subcommand: edsger find-bugs <productId>
363
+ // ============================================================
364
+ program
365
+ .command('find-bugs <productId>')
366
+ .description("AI-audit a product's repository for bugs and file each new finding as an issue")
367
+ .option('--full', 'Force a full scan even if previous-scan state exists')
368
+ .option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
369
+ .option('--max-files <n>', 'Upper bound on files the auditor may Read (default 200)', (value) => {
370
+ const n = parseInt(value, 10);
371
+ if (Number.isNaN(n) || n <= 0) {
372
+ throw new Error('--max-files must be a positive integer');
373
+ }
374
+ return n;
375
+ })
376
+ .option('-v, --verbose', 'Verbose output')
377
+ .action(async (productId, opts) => {
378
+ try {
379
+ await runFindBugs(productId, opts);
380
+ }
381
+ catch (error) {
382
+ logError(error instanceof Error ? error.message : String(error));
383
+ process.exit(1);
384
+ }
385
+ });
386
+ // ============================================================
387
+ // Subcommand: edsger find-features <productId>
388
+ // ============================================================
389
+ program
390
+ .command('find-features <productId>')
391
+ .description("Synthesise feature opportunities from user feedback + intelligence reports + the product's codebase, and file each one as an issue")
392
+ .option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
393
+ .option('--since <duration>', 'Feedback lookback window — e.g. "30d", "12h", "4w" (default 90d)')
394
+ .option('--min-cluster-size <n>', 'Min feedback mentions for a theme to count as high-confidence (default 3)', (value) => {
395
+ const n = parseInt(value, 10);
396
+ if (Number.isNaN(n) || n <= 0) {
397
+ throw new Error('--min-cluster-size must be a positive integer');
398
+ }
399
+ return n;
400
+ })
401
+ .option('--max-suggestions <n>', 'Cap on opportunities the agent may surface (default 10)', (value) => {
402
+ const n = parseInt(value, 10);
403
+ if (Number.isNaN(n) || n <= 0) {
404
+ throw new Error('--max-suggestions must be a positive integer');
405
+ }
406
+ return n;
407
+ })
408
+ .option('--against-report <id>', 'Narrow the run to opportunities implied by a specific intelligence report')
409
+ .option('-v, --verbose', 'Verbose output')
410
+ .action(async (productId, opts) => {
411
+ try {
412
+ await runFindFeatures(productId, opts);
413
+ }
414
+ catch (error) {
415
+ logError(error instanceof Error ? error.message : String(error));
416
+ process.exit(1);
417
+ }
418
+ });
419
+ // ============================================================
420
+ // Subcommand: edsger find-smells <productId>
421
+ // ============================================================
422
+ program
423
+ .command('find-smells <productId>')
424
+ .description("AI-audit a product's repository for code smells (refactor candidates, perf cliffs, dead code, type-safety gaps) and file each new finding as an issue")
425
+ .option('--full', 'Force a full scan even if previous-scan state exists')
426
+ .option('--branch <name>', 'Branch to scan (defaults to repo default branch)')
427
+ .option('--max-files <n>', `Upper bound on files the auditor may Read (default ${FIND_SMELLS_DEFAULT_MAX_FILES})`, (value) => {
428
+ const n = parseInt(value, 10);
429
+ if (Number.isNaN(n) || n <= 0) {
430
+ throw new Error('--max-files must be a positive integer');
431
+ }
432
+ return n;
433
+ })
434
+ .option('--categories <list>', `Comma-separated category filter (${SMELL_CATEGORIES.join(',')})`, parseCategoriesOption)
435
+ .option('-v, --verbose', 'Verbose output')
436
+ .action(async (productId, opts) => {
437
+ try {
438
+ await runFindSmells(productId, opts);
439
+ }
440
+ catch (error) {
441
+ logError(error instanceof Error ? error.message : String(error));
442
+ process.exit(1);
443
+ }
444
+ });
445
+ // ============================================================
357
446
  // Subcommand: edsger pr-resolve <productId>
358
447
  // ============================================================
359
448
  program
@@ -383,7 +472,7 @@ program
383
472
  .option('--init', 'Initialize .edsger directory with project templates')
384
473
  .option('--product-level', 'Use legacy product-level workflow (requires EDSGER_PRODUCT_ID, EDSGER_MCP_SERVER_URL, EDSGER_MCP_TOKEN env vars)')
385
474
  .option('--watch-tasks <productId>', 'Watch and execute pending tasks for a product')
386
- .option('--concurrency <number>', 'Max concurrent features to process (default: 3)', parseInt)
475
+ .option('--concurrency <number>', 'Max concurrent issues to process (default: 3)', parseInt)
387
476
  .option('-c, --config <path>', 'Path to config file')
388
477
  .option('-v, --verbose', 'Verbose output');
389
478
  program.action(async (options) => {
@@ -32,11 +32,11 @@ export async function fetchAppStoreContext(productId, verbose) {
32
32
  */
33
33
  export function formatContextForPrompt(context) {
34
34
  const { product, existingConfigs } = context;
35
- const featuresList = product.features && product.features.length > 0
36
- ? product.features
35
+ const issuesList = product.issues && product.issues.length > 0
36
+ ? product.issues
37
37
  .map((f) => `- **${f.name}**: ${f.description || 'No description'} (Status: ${f.status || 'unknown'})`)
38
38
  .join('\n')
39
- : 'No features listed.';
39
+ : 'No issues listed.';
40
40
  const existingListings = existingConfigs.length > 0
41
41
  ? existingConfigs
42
42
  .map((c) => {
@@ -54,15 +54,15 @@ export function formatContextForPrompt(context) {
54
54
  - **Product ID**: ${product.id}
55
55
  - **Description**: ${product.description || 'No description provided'}
56
56
 
57
- ## Product Features (${product.features?.length || 0})
58
- ${featuresList}
57
+ ## Product Issues (${product.issues?.length || 0})
58
+ ${issuesList}
59
59
 
60
60
  ## Existing Store Configurations
61
61
  ${existingListings}
62
62
 
63
63
  ---
64
64
 
65
- **Important**: Generate professional app store assets for this product. Use the product name, description, and features to create specific, compelling content. Each screenshot should showcase a real feature with realistic mock data.`;
65
+ **Important**: Generate professional app store assets for this product. Use the product name, description, and issues to create specific, compelling content. Each screenshot should showcase a real issue with realistic mock data.`;
66
66
  }
67
67
  /**
68
68
  * Prepare the full prompt with all context
@@ -1,7 +1,7 @@
1
1
  import { getAppStorePrimaryLocale, saveAppStoreListings, upsertAppStoreConfig, } from '../../api/app-store.js';
2
2
  import { getGitHubConfigByProduct } from '../../api/github.js';
3
3
  import { logError, logInfo, logSuccess } 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 { executeAppStoreQuery } from './agent.js';
6
6
  import { prepareAppStoreContext } from './context.js';
7
7
  import { createAppStoreSystemPrompt } from './prompts.js';
@@ -48,7 +48,7 @@ export const generateAppStoreAssets = async (options, config) => {
48
48
  'Please configure a GitHub repo in the product settings before generating assets.');
49
49
  }
50
50
  const workspaceRoot = ensureWorkspaceDir();
51
- const { repoPath: repoCwd } = cloneFeatureRepo(workspaceRoot, `app-store-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
51
+ const { repoPath: repoCwd } = cloneIssueRepo(workspaceRoot, `app-store-${productId}`, githubConfig.owner, githubConfig.repo, githubConfig.token);
52
52
  logInfo(`Repository cloned to: ${repoCwd}`);
53
53
  // Prepare context and prompt
54
54
  const { context, prompt: analysisPrompt } = await prepareAppStoreContext(productId, targetStore, locale, verbose, true);
@@ -62,8 +62,8 @@ ${contextInfo}
62
62
  ## Instructions
63
63
  ${codebaseInstructions}
64
64
  1. Create compelling store listing content (app_name, subtitle, description, keywords, etc.) for the "${locale}" locale
65
- 2. Design 5-8 screenshot compositions, each highlighting a different key feature
66
- 3. For each screenshot, create a complete HTML template that renders realistic mock app UI for that feature
65
+ 2. Design 5-8 screenshot compositions, each highlighting a different key issue
66
+ 3. For each screenshot, create a complete HTML template that renders realistic mock app UI for that issue
67
67
  4. Use varied gradient backgrounds and engaging headline text for visual appeal
68
68
  5. Ensure mock data looks realistic — use real-looking names, numbers, dates, not "Lorem ipsum"
69
69
  6. Design mobile screenshots in portrait orientation (phone viewport: 390x844)
@@ -2,7 +2,7 @@
2
2
  * Autonomous Development Phase
3
3
  *
4
4
  * Runs a time-limited loop where Claude Code SDK analyzes the codebase,
5
- * decides the next actionable step toward the feature's objective (description),
5
+ * decides the next actionable step toward the issue's objective (description),
6
6
  * implements it, and commits. All iterations build on the same branch.
7
7
  * A PR is created after the first iteration; subsequent pushes update it.
8
8
  */
@@ -10,7 +10,7 @@ import { type ChecklistPhaseContext } from '../../services/checklist.js';
10
10
  import { type EdsgerConfig } from '../../types/index.js';
11
11
  import { type PipelinePhaseOptions } from '../../types/pipeline.js';
12
12
  export interface AutonomousResult {
13
- featureId: string;
13
+ issueId: string;
14
14
  status: 'success' | 'error';
15
15
  message: string;
16
16
  branchName: string;
@@ -22,7 +22,7 @@ export interface AutonomousResult {
22
22
  * Main entry point for autonomous development phase
23
23
  */
24
24
  export declare function runAutonomousDevelopment(options: PipelinePhaseOptions, config: EdsgerConfig, _checklistContext?: ChecklistPhaseContext | null): Promise<{
25
- featureId: string;
25
+ issueId: string;
26
26
  status: string;
27
27
  message: string;
28
28
  branchName?: string;