@shepai/cli 1.79.0-pr250.29eec94 → 1.80.0-pr240.79a8bf7

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 (155) hide show
  1. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +0 -10
  2. package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -1
  3. package/dist/src/presentation/web/app/actions/get-feature-plan.js +0 -8
  4. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -1
  5. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  6. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +4 -2
  7. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +5 -3
  9. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +20 -3
  11. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -1
  12. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +0 -74
  13. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +3 -2
  15. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -1
  16. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +4 -0
  18. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +9 -5
  20. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -0
  21. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +23 -0
  23. package/dist/tsconfig.build.tsbuildinfo +1 -1
  24. package/package.json +1 -1
  25. package/web/.next/BUILD_ID +1 -1
  26. package/web/.next/build-manifest.json +2 -2
  27. package/web/.next/fallback-build-manifest.json +2 -2
  28. package/web/.next/prerender-manifest.json +3 -3
  29. package/web/.next/required-server-files.js +1 -1
  30. package/web/.next/required-server-files.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  32. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
  35. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  36. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  38. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  41. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  42. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
  44. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  47. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  50. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/_global-error.html +2 -2
  53. package/web/.next/server/app/_global-error.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  58. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  60. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  62. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  63. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  65. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  66. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  68. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  69. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  71. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  73. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  74. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  75. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  76. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  77. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  78. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  79. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
  92. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
  95. package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/{_a9a31cc7._.js → _2d968ad5._.js} +2 -2
  97. package/web/.next/server/chunks/ssr/{_a9a31cc7._.js.map → _2d968ad5._.js.map} +1 -1
  98. package/web/.next/server/chunks/ssr/_5d4e7151._.js +1 -1
  99. package/web/.next/server/chunks/ssr/_5d4e7151._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/_6e08ce21._.js +1 -1
  103. package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  105. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/_bde34ca2._.js +3 -0
  107. package/web/.next/server/chunks/ssr/{_a89e9440._.js.map → _bde34ca2._.js.map} +1 -1
  108. package/web/.next/server/chunks/ssr/{_4cc78caa._.js → _d1152062._.js} +2 -2
  109. package/web/.next/server/chunks/ssr/{_4cc78caa._.js.map → _d1152062._.js.map} +1 -1
  110. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  111. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  123. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  125. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  127. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  128. package/web/.next/server/pages/500.html +2 -2
  129. package/web/.next/server/server-reference-manifest.js +1 -1
  130. package/web/.next/server/server-reference-manifest.json +28 -28
  131. package/web/.next/static/chunks/{a2e2da17a62d4a16.js → 015b084290b017d2.js} +1 -1
  132. package/web/.next/static/chunks/{1eb59ef58bc289af.js → 2d03ab2408c966e5.js} +1 -1
  133. package/web/.next/static/chunks/{709acc97b45864c5.js → 66dee5e3cd88056f.js} +1 -1
  134. package/web/.next/static/chunks/{7be2145c5da9915d.js → 6b48944329fbf859.js} +1 -1
  135. package/web/.next/static/chunks/{c576233480a01594.js → 7878dd3c731661ac.js} +1 -1
  136. package/web/.next/static/chunks/{5e3f946c0459b2e6.js → 935f3d27a461ee7c.js} +1 -1
  137. package/web/.next/static/chunks/96bab6d3820504f3.css +2 -0
  138. package/web/.next/static/chunks/{cc4ae5c962684c74.js → b09c11864bba03d3.js} +1 -1
  139. package/web/.next/static/chunks/{f34022767b8cb68c.js → bdad4d8fa9984ad4.js} +1 -1
  140. package/web/.next/static/chunks/{f9edf7cceb5ecfe1.js → d48e32a777450d9c.js} +1 -1
  141. package/web/.next/static/chunks/{c094a6d1f4f166cd.js → d8334064c1ee456f.js} +1 -1
  142. package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts +0 -3
  143. package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts.map +0 -1
  144. package/dist/src/presentation/web/components/common/task-progress-view/index.js +0 -1
  145. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts +0 -6
  146. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts.map +0 -1
  147. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +0 -84
  148. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +0 -16
  149. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +0 -1
  150. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.js +0 -194
  151. package/web/.next/server/chunks/ssr/_a89e9440._.js +0 -3
  152. package/web/.next/static/chunks/f324257cd8c5fd55.css +0 -2
  153. /package/web/.next/static/{Q5dSnqKRfMPVDs276cx_I → R_-vG7OQG9pDXte0x6MsV}/_buildManifest.js +0 -0
  154. /package/web/.next/static/{Q5dSnqKRfMPVDs276cx_I → R_-vG7OQG9pDXte0x6MsV}/_clientMiddlewareManifest.json +0 -0
  155. /package/web/.next/static/{Q5dSnqKRfMPVDs276cx_I → R_-vG7OQG9pDXte0x6MsV}/_ssgManifest.js +0 -0
@@ -1,17 +1,7 @@
1
- export interface AcceptanceCriterionData {
2
- description: string;
3
- verified: boolean;
4
- }
5
- export interface ActionItemData {
6
- name: string;
7
- description: string;
8
- acceptanceCriteria: AcceptanceCriterionData[];
9
- }
10
1
  export interface PlanTaskData {
11
2
  title: string;
12
3
  description: string;
13
4
  state: string;
14
- actionItems: ActionItemData[];
15
5
  }
16
6
  export interface PlanData {
17
7
  state: string;
@@ -1 +1 @@
1
- {"version":3,"file":"get-feature-plan.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-plan.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwC9E"}
1
+ {"version":3,"file":"get-feature-plan.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-plan.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgC9E"}
@@ -20,14 +20,6 @@ export async function getFeaturePlan(featureId) {
20
20
  title: t.title ?? '',
21
21
  description: t.description ?? '',
22
22
  state: t.state,
23
- actionItems: (t.actionItems ?? []).map((ai) => ({
24
- name: ai.name,
25
- description: ai.description,
26
- acceptanceCriteria: (ai.acceptanceCriteria ?? []).map((ac) => ({
27
- description: ac.description,
28
- verified: ac.verified,
29
- })),
30
- })),
31
23
  })),
32
24
  };
33
25
  return { plan };
@@ -24,7 +24,7 @@ const HEARTBEAT_INTERVAL_MS = 30_000;
24
24
  * can derive the correct FeatureLifecyclePhase via mapPhaseNameToLifecycle().
25
25
  */
26
26
  const LIFECYCLE_TO_NODE = {
27
- [SdlcLifecycle.Started]: 'requirements',
27
+ [SdlcLifecycle.Started]: 'analyze',
28
28
  [SdlcLifecycle.Analyze]: 'analyze',
29
29
  [SdlcLifecycle.Requirements]: 'requirements',
30
30
  [SdlcLifecycle.Research]: 'research',
@@ -1 +1 @@
1
- {"version":3,"file":"drawer-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,yCAAyC;AACzC,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,KAAK,GACL,MAAM,GACN,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,CAAC;AAEnB;;;GAGG;AACH,MAAM,MAAM,UAAU;AACpB,qEAAqE;AACnE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,aAAa,CAAA;CAAE;AACvE,4BAA4B;GAC1B;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AACH,8BAA8B;GAC5B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,aAAa,CAOrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD,GAAG,UAAU,GAAG,IAAI,CAoBpB"}
1
+ {"version":3,"file":"drawer-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,yCAAyC;AACzC,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,KAAK,GACL,MAAM,GACN,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,CAAC;AAEnB;;;GAGG;AACH,MAAM,MAAM,UAAU;AACpB,qEAAqE;AACnE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,aAAa,CAAA;CAAE;AACvE,4BAA4B;GAC1B;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AACH,8BAA8B;GAC5B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,aAAa,CAcrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD,GAAG,UAAU,GAAG,IAAI,CAoBpB"}
@@ -1,8 +1,10 @@
1
1
  /** Derives the initial tab from node lifecycle + state. */
2
2
  export function deriveInitialTab(node) {
3
- if (node.lifecycle === 'requirements' && node.state === 'action-required')
3
+ if ((node.lifecycle === 'requirements' || node.lifecycle === 'gathering') &&
4
+ node.state === 'action-required')
4
5
  return 'prd-review';
5
- if (node.lifecycle === 'implementation' && node.state === 'action-required')
6
+ if ((node.lifecycle === 'planning' || node.lifecycle === 'implementation') &&
7
+ node.state === 'action-required')
6
8
  return 'tech-decisions';
7
9
  if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error'))
8
10
  return 'merge-review';
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,wBAAwB,2CAmiBlF"}
1
+ {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,wBAAwB,2CAqiBlF"}
@@ -120,7 +120,8 @@ export function FeatureDrawerClient({ view: initialView }) {
120
120
  setChatInput('');
121
121
  }, [initialTab]);
122
122
  // ── Data fetching ─────────────────────────────────────────────────────
123
- const prdFeatureId = featureNode?.lifecycle === 'requirements' && featureNode?.state === 'action-required'
123
+ const prdFeatureId = (featureNode?.lifecycle === 'requirements' || featureNode?.lifecycle === 'gathering') &&
124
+ featureNode?.state === 'action-required'
124
125
  ? featureNode.featureId
125
126
  : null;
126
127
  const isLoadingPrd = useArtifactFetch(prdFeatureId, getFeatureArtifact, (result) => {
@@ -144,7 +145,8 @@ export function FeatureDrawerClient({ view: initialView }) {
144
145
  setPrdDefaultSelections({});
145
146
  setPrdData(null);
146
147
  }, 'Failed to load questionnaire');
147
- const techFeatureId = featureNode?.lifecycle === 'implementation' && featureNode?.state === 'action-required'
148
+ const techFeatureId = (featureNode?.lifecycle === 'implementation' || featureNode?.lifecycle === 'planning') &&
149
+ featureNode?.state === 'action-required'
148
150
  ? featureNode.featureId
149
151
  : null;
150
152
  const isLoadingTech = useArtifactFetch(techFeatureId, getResearchArtifact, (result) => {
@@ -172,7 +174,7 @@ export function FeatureDrawerClient({ view: initialView }) {
172
174
  }, () => setMergeData(null), 'Failed to load merge review data');
173
175
  // ── Close guard ──────────────────────────────────────────────────────
174
176
  const isChatDirty = chatInput.trim().length > 0;
175
- const isPrdDirty = featureNode?.lifecycle === 'requirements' &&
177
+ const isPrdDirty = (featureNode?.lifecycle === 'requirements' || featureNode?.lifecycle === 'gathering') &&
176
178
  featureNode?.state === 'action-required' &&
177
179
  Object.keys(prdDefaultSelections).some((k) => prdDefaultSelections[k] !== prdSelections[k]);
178
180
  const isDirty = isChatDirty || isPrdDirty;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAQD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,2CAgD7D"}
1
+ {"version":3,"file":"plan-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,gCAAgC,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAoBD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,2CAgD7D"}
@@ -1,14 +1,20 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Loader2 } from 'lucide-react';
3
+ import { Loader2, Circle, Check, Eye } from 'lucide-react';
4
4
  import { AlertCircle, ListTodo } from 'lucide-react';
5
5
  import { Badge } from '../../ui/badge.js';
6
- import { TaskProgressView } from '../../common/task-progress-view/index.js';
7
6
  const planStateBadgeStyles = {
8
7
  Requirements: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
9
8
  ClarificationRequired: 'border-transparent bg-amber-50 text-amber-700 hover:bg-amber-50',
10
9
  Ready: 'border-transparent bg-green-50 text-green-700 hover:bg-green-50',
11
10
  };
11
+ const taskStateConfig = {
12
+ Todo: { icon: Circle, colorClass: 'text-muted-foreground' },
13
+ 'Work in Progress': { icon: Loader2, colorClass: 'text-blue-600', spinning: true },
14
+ Done: { icon: Check, colorClass: 'text-emerald-600' },
15
+ Review: { icon: Eye, colorClass: 'text-amber-600' },
16
+ };
17
+ const defaultTaskConfig = { icon: Circle, colorClass: 'text-muted-foreground' };
12
18
  export function PlanTab({ plan, loading, error }) {
13
19
  if (loading) {
14
20
  return (_jsx("div", { "data-testid": "plan-tab-loading", className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
@@ -19,5 +25,16 @@ export function PlanTab({ plan, loading, error }) {
19
25
  if (!plan) {
20
26
  return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(ListTodo, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No plan created yet" })] }));
21
27
  }
22
- return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Plan State" }), _jsx(Badge, { className: planStateBadgeStyles[plan.state] ?? 'border-transparent bg-gray-50 text-gray-700', children: plan.state })] }), plan.overview ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Overview" }), _jsx("p", { className: "text-sm leading-relaxed", children: plan.overview })] })) : null, _jsx(TaskProgressView, { tasks: plan.tasks })] }));
28
+ return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Plan State" }), _jsx(Badge, { className: planStateBadgeStyles[plan.state] ?? 'border-transparent bg-gray-50 text-gray-700', children: plan.state })] }), plan.overview ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Overview" }), _jsx("p", { className: "text-sm leading-relaxed", children: plan.overview })] })) : null, _jsx(TaskList, { tasks: plan.tasks })] }));
29
+ }
30
+ function TaskList({ tasks }) {
31
+ if (tasks.length === 0) {
32
+ return (_jsx("div", { className: "flex flex-col items-center justify-center gap-2 py-4", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No tasks defined yet" }) }));
33
+ }
34
+ return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Tasks" }), _jsx("div", { "data-testid": "plan-task-list", className: "flex flex-col gap-2", children: tasks.map((task, index) => (_jsx(TaskItem, { task: task, index: index }, task.title || `task-${index}`))) })] }));
35
+ }
36
+ function TaskItem({ task, index }) {
37
+ const config = taskStateConfig[task.state] ?? defaultTaskConfig;
38
+ const Icon = config.icon;
39
+ return (_jsxs("div", { "data-testid": `plan-task-${index}`, className: `flex items-start gap-2 rounded-md border px-3 py-2 ${config.colorClass}`, children: [_jsx(Icon, { className: `mt-0.5 h-4 w-4 shrink-0 ${config.spinning ? 'animate-spin' : ''}` }), _jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-sm font-medium", children: task.title }), task.description ? (_jsx("span", { className: "text-muted-foreground text-xs", children: task.description })) : null] })] }));
23
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAc9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;AAoMtC,6EAA6E;AAC7E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
1
+ {"version":3,"file":"plan-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAc9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;AA0HtC,6EAA6E;AAC7E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
@@ -23,96 +23,31 @@ const mixedTasksPlan = {
23
23
  title: 'Set up OAuth provider configuration',
24
24
  description: 'Configure Google and GitHub OAuth apps with client IDs and secrets',
25
25
  state: 'Done',
26
- actionItems: [
27
- {
28
- name: 'Create OAuth config module',
29
- description: 'Define provider configuration schema and load from env',
30
- acceptanceCriteria: [
31
- { description: 'Config loads from environment variables', verified: true },
32
- { description: 'Validation rejects missing client ID or secret', verified: true },
33
- ],
34
- },
35
- {
36
- name: 'Register OAuth apps',
37
- description: 'Register apps with Google and GitHub developer consoles',
38
- acceptanceCriteria: [
39
- { description: 'Google OAuth app created with correct scopes', verified: true },
40
- { description: 'GitHub OAuth app created with correct callback URL', verified: true },
41
- ],
42
- },
43
- ],
44
26
  },
45
27
  {
46
28
  title: 'Implement callback handler',
47
29
  description: 'Handle OAuth callback with authorization code exchange',
48
30
  state: 'Done',
49
- actionItems: [
50
- {
51
- name: 'Build callback endpoint',
52
- description: 'GET /auth/callback with code exchange logic',
53
- acceptanceCriteria: [
54
- { description: 'Exchanges authorization code for tokens', verified: true },
55
- ],
56
- },
57
- ],
58
31
  },
59
32
  {
60
33
  title: 'Add token refresh logic',
61
34
  description: 'Implement silent token refresh using refresh tokens stored in httpOnly cookies',
62
35
  state: 'Work in Progress',
63
- actionItems: [
64
- {
65
- name: 'Implement refresh endpoint',
66
- description: 'POST /auth/refresh to issue new access token',
67
- acceptanceCriteria: [
68
- { description: 'Returns new access token when refresh token is valid', verified: true },
69
- { description: 'Returns 401 when refresh token is expired', verified: false },
70
- ],
71
- },
72
- {
73
- name: 'Add httpOnly cookie handling',
74
- description: 'Store refresh tokens in secure httpOnly cookies',
75
- acceptanceCriteria: [
76
- { description: 'Cookies are set with Secure and HttpOnly flags', verified: false },
77
- ],
78
- },
79
- ],
80
36
  },
81
37
  {
82
38
  title: 'Create user profile sync',
83
39
  description: 'Sync user profile data from identity providers on login',
84
40
  state: 'Todo',
85
- actionItems: [
86
- {
87
- name: 'Fetch profile from provider',
88
- description: 'Use access token to retrieve user profile from Google/GitHub',
89
- acceptanceCriteria: [
90
- { description: 'Retrieves name, email, and avatar from Google', verified: false },
91
- { description: 'Retrieves name, email, and avatar from GitHub', verified: false },
92
- ],
93
- },
94
- ],
95
41
  },
96
42
  {
97
43
  title: 'Write integration tests',
98
44
  description: 'Test the full OAuth flow with mocked providers',
99
45
  state: 'Todo',
100
- actionItems: [],
101
46
  },
102
47
  {
103
48
  title: 'Update API documentation',
104
49
  description: 'Document new authentication endpoints and flows',
105
50
  state: 'Review',
106
- actionItems: [
107
- {
108
- name: 'Document auth endpoints',
109
- description: 'Add OpenAPI specs for all auth routes',
110
- acceptanceCriteria: [
111
- { description: 'All endpoints have OpenAPI documentation', verified: true },
112
- { description: 'Examples included for each endpoint', verified: true },
113
- ],
114
- },
115
- ],
116
51
  },
117
52
  ],
118
53
  };
@@ -124,25 +59,21 @@ const allDonePlan = {
124
59
  title: 'Design sliding window algorithm',
125
60
  description: 'Implement Redis-backed sliding window counter',
126
61
  state: 'Done',
127
- actionItems: [],
128
62
  },
129
63
  {
130
64
  title: 'Add rate limit middleware',
131
65
  description: 'Express middleware that checks rate limits per IP',
132
66
  state: 'Done',
133
- actionItems: [],
134
67
  },
135
68
  {
136
69
  title: 'Configure limits per endpoint',
137
70
  description: 'Set different rate limits for public vs authenticated endpoints',
138
71
  state: 'Done',
139
- actionItems: [],
140
72
  },
141
73
  {
142
74
  title: 'Add rate limit headers',
143
75
  description: 'Include X-RateLimit-* headers in responses',
144
76
  state: 'Done',
145
- actionItems: [],
146
77
  },
147
78
  ],
148
79
  };
@@ -154,19 +85,16 @@ const draftPlan = {
154
85
  title: 'Define notification types',
155
86
  description: 'Enumerate all notification events and their payloads',
156
87
  state: 'Todo',
157
- actionItems: [],
158
88
  },
159
89
  {
160
90
  title: 'Set up WebSocket server',
161
91
  description: 'Configure Socket.io with Redis adapter for horizontal scaling',
162
92
  state: 'Todo',
163
- actionItems: [],
164
93
  },
165
94
  {
166
95
  title: 'Implement notification store',
167
96
  description: 'Persist notifications in database with read/unread tracking',
168
97
  state: 'Todo',
169
- actionItems: [],
170
98
  },
171
99
  ],
172
100
  };
@@ -178,13 +106,11 @@ const clarificationPlan = {
178
106
  title: 'Set up email provider',
179
107
  description: 'Configure SendGrid API integration',
180
108
  state: 'Done',
181
- actionItems: [],
182
109
  },
183
110
  {
184
111
  title: 'Create template engine',
185
112
  description: 'Implement Handlebars-based email template rendering',
186
113
  state: 'Todo',
187
- actionItems: [],
188
114
  },
189
115
  ],
190
116
  };
@@ -1 +1 @@
1
- {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB,CA4C9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAkBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAOlE,CAAC;AAcF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
1
+ {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,gBAAgB,CA4C9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAkBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAQlE,CAAC;AAcF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
@@ -97,6 +97,7 @@ export function mapEventTypeToState(eventType) {
97
97
  export const sdlcLifecycleMap = {
98
98
  Requirements: 'requirements',
99
99
  Research: 'research',
100
+ Planning: 'planning',
100
101
  Implementation: 'implementation',
101
102
  Review: 'review',
102
103
  'Deploy & QA': 'deploy',
@@ -105,9 +106,9 @@ export const sdlcLifecycleMap = {
105
106
  /** Map agent graph node names (from agent_run.result or SSE phaseName) to UI lifecycle phases. */
106
107
  const phaseNameToLifecycle = {
107
108
  analyze: 'requirements',
108
- requirements: 'requirements',
109
+ requirements: 'gathering',
109
110
  research: 'research',
110
- plan: 'implementation',
111
+ plan: 'planning',
111
112
  implement: 'implementation',
112
113
  merge: 'review',
113
114
  maintain: 'maintain',
@@ -3,7 +3,7 @@ import type { Node } from '@xyflow/react';
3
3
  import type { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
4
4
  import type { AgentTypeValue } from './agent-type-icons.js';
5
5
  export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'error';
6
- export type FeatureLifecyclePhase = 'requirements' | 'research' | 'implementation' | 'review' | 'deploy' | 'maintain';
6
+ export type FeatureLifecyclePhase = 'requirements' | 'gathering' | 'research' | 'planning' | 'implementation' | 'review' | 'deploy' | 'maintain';
7
7
  /** Human-readable display labels for lifecycle phases. */
8
8
  export declare const lifecycleDisplayLabels: Record<FeatureLifecyclePhase, string>;
9
9
  /** Present-participle verbs for the running badge, keyed by lifecycle phase. */
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,9 @@ import { Loader2, CircleAlert, CircleCheck, Ban, CircleX } from 'lucide-react';
2
2
  /** Human-readable display labels for lifecycle phases. */
3
3
  export const lifecycleDisplayLabels = {
4
4
  requirements: 'REQUIREMENTS',
5
+ gathering: 'REQUIREMENTS',
5
6
  research: 'RESEARCH',
7
+ planning: 'PLANNING',
6
8
  implementation: 'IMPLEMENTATION',
7
9
  review: 'REVIEW',
8
10
  deploy: 'DEPLOY & QA',
@@ -11,7 +13,9 @@ export const lifecycleDisplayLabels = {
11
13
  /** Present-participle verbs for the running badge, keyed by lifecycle phase. */
12
14
  export const lifecycleRunningVerbs = {
13
15
  requirements: 'Analyzing',
16
+ gathering: 'Gathering Requirements',
14
17
  research: 'Researching',
18
+ planning: 'Planning',
15
19
  implementation: 'Implementing',
16
20
  review: 'Reviewing',
17
21
  deploy: 'Deploying',
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAyDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAuPA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA4DnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAuPA"}
@@ -17,8 +17,10 @@ function AgentIcon({ agentType, className }) {
17
17
  function getBadgeIcon(data) {
18
18
  const config = featureNodeStateConfig[data.state];
19
19
  if (data.state === 'action-required') {
20
- if (data.lifecycle === 'requirements')
20
+ if (data.lifecycle === 'requirements' || data.lifecycle === 'gathering')
21
21
  return FileText;
22
+ if (data.lifecycle === 'planning')
23
+ return Wrench;
22
24
  if (data.lifecycle === 'implementation')
23
25
  return Wrench;
24
26
  if (data.lifecycle === 'review')
@@ -30,13 +32,13 @@ function getBadgeIcon(data) {
30
32
  function getActionRequiredBadgeClasses(data) {
31
33
  if (data.state !== 'action-required')
32
34
  return null;
33
- if (data.lifecycle === 'implementation') {
35
+ if (data.lifecycle === 'planning' || data.lifecycle === 'implementation') {
34
36
  return { badgeClass: 'text-indigo-700', badgeBgClass: 'bg-indigo-50' };
35
37
  }
36
38
  if (data.lifecycle === 'review') {
37
39
  return { badgeClass: 'text-emerald-700', badgeBgClass: 'bg-emerald-50' };
38
40
  }
39
- return null; // requirements stays amber (default)
41
+ return null; // requirements/gathering stays amber (default)
40
42
  }
41
43
  function getBadgeText(data) {
42
44
  const config = featureNodeStateConfig[data.state];
@@ -50,10 +52,12 @@ function getBadgeText(data) {
50
52
  case 'blocked':
51
53
  return data.blockedBy ? `Waiting on ${data.blockedBy}` : 'Blocked';
52
54
  case 'action-required':
53
- if (data.lifecycle === 'requirements')
55
+ if (data.lifecycle === 'requirements' || data.lifecycle === 'gathering')
54
56
  return 'Review Product Requirements';
55
- if (data.lifecycle === 'implementation')
57
+ if (data.lifecycle === 'planning')
56
58
  return 'Review Technical Planning';
59
+ if (data.lifecycle === 'implementation')
60
+ return 'Review Implementation';
57
61
  if (data.lifecycle === 'review')
58
62
  return 'Review Merge Request';
59
63
  return config.label;
@@ -12,6 +12,7 @@ export declare const LongContent: Story;
12
12
  export declare const DoneWithRuntime: Story;
13
13
  export declare const BlockedByFeature: Story;
14
14
  export declare const Creating: Story;
15
+ export declare const PlanningActionRequired: Story;
15
16
  export declare const MergeReviewActionRequired: Story;
16
17
  export declare const ErrorWithMessage: Story;
17
18
  export declare const WithDeleteButton: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAiCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAsGF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAWF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC"}
1
+ {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAiCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAgHF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAaF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAUpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC"}
@@ -75,6 +75,16 @@ const allStatesData = [
75
75
  repositoryPath: '/home/user/my-repo',
76
76
  branch: 'feat/data-pipeline',
77
77
  },
78
+ {
79
+ name: 'Tech Plan Review',
80
+ description: 'Technical plan awaiting review',
81
+ featureId: '#bi4',
82
+ lifecycle: 'planning',
83
+ state: 'action-required',
84
+ progress: 25,
85
+ repositoryPath: '/home/user/my-repo',
86
+ branch: 'feat/tech-plan',
87
+ },
78
88
  {
79
89
  name: 'Merge Review',
80
90
  description: 'PR ready for merge approval',
@@ -132,7 +142,9 @@ export const AllStates = {
132
142
  };
133
143
  const allLifecycles = [
134
144
  'requirements',
145
+ 'gathering',
135
146
  'research',
147
+ 'planning',
136
148
  'implementation',
137
149
  'review',
138
150
  'deploy',
@@ -274,6 +286,17 @@ export const Creating = {
274
286
  },
275
287
  render: (args) => _jsx(FeatureNodeCanvas, { data: args }),
276
288
  };
289
+ export const PlanningActionRequired = {
290
+ args: {
291
+ name: 'Tech Plan Review',
292
+ description: 'Technical planning awaiting review',
293
+ featureId: '#bi4',
294
+ lifecycle: 'planning',
295
+ state: 'action-required',
296
+ progress: 30,
297
+ },
298
+ render: (args) => _jsx(FeatureNodeCanvas, { data: args }),
299
+ };
277
300
  export const MergeReviewActionRequired = {
278
301
  args: {
279
302
  name: 'Merge Review',