@shepai/cli 1.92.2 → 1.94.0-pr284.29008ae

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 (147) hide show
  1. package/README.md +138 -344
  2. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  3. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +3 -13
  4. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
  5. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +1 -3
  6. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -1
  7. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +0 -4
  8. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +0 -8
  9. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  11. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +3 -6
  12. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +0 -2
  13. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  14. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +0 -17
  15. package/dist/src/presentation/web/lib/format-duration.d.ts +11 -0
  16. package/dist/src/presentation/web/lib/format-duration.d.ts.map +1 -0
  17. package/dist/src/presentation/web/lib/format-duration.js +26 -0
  18. package/dist/tsconfig.build.tsbuildinfo +1 -1
  19. package/package.json +1 -1
  20. package/web/.next/BUILD_ID +1 -1
  21. package/web/.next/build-manifest.json +2 -2
  22. package/web/.next/fallback-build-manifest.json +2 -2
  23. package/web/.next/prerender-manifest.json +3 -3
  24. package/web/.next/required-server-files.js +3 -3
  25. package/web/.next/required-server-files.json +3 -3
  26. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
  27. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
  30. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  36. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
  39. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
  45. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  48. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  51. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  52. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/_global-error.html +2 -2
  54. package/web/.next/server/app/_global-error.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  58. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  59. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  60. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  61. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  63. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  64. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  65. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  67. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  68. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  70. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  71. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  73. package/web/.next/server/app/version/page_client-reference-manifest.js +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]__17143953._.js +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  92. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/{_16a7514c._.js → _775fb008._.js} +2 -2
  103. package/web/.next/server/chunks/ssr/{_16a7514c._.js.map → _775fb008._.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/_cc77a143._.js +1 -1
  107. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/_df15bd24._.js +1 -1
  109. package/web/.next/server/chunks/ssr/_df15bd24._.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__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
  119. package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  123. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  125. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  126. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
  128. package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
  129. package/web/.next/server/pages/500.html +2 -2
  130. package/web/.next/server/server-reference-manifest.js +1 -1
  131. package/web/.next/server/server-reference-manifest.json +28 -28
  132. package/web/.next/static/chunks/13388eebaebbd765.js +1 -0
  133. package/web/.next/static/chunks/2b5c09afb6a9d9d2.js +1 -0
  134. package/web/.next/static/chunks/{7bf51da075913f1c.js → 3f369959cf539e2b.js} +1 -1
  135. package/web/.next/static/chunks/{166e31f7adad1949.js → 42371631f1b478db.js} +1 -1
  136. package/web/.next/static/chunks/{0a1511515cbdf02e.js → 426a8fa52f6cbb29.js} +2 -2
  137. package/web/.next/static/chunks/{62652f0d1304c333.js → 975ffabcff2c7596.js} +1 -1
  138. package/web/.next/static/chunks/{449251751b4908f7.js → e2f35ce4e7d7220a.js} +1 -1
  139. package/web/.next/static/chunks/{ceb79276cb6d8b88.js → ec8a6b8d8b504077.js} +1 -1
  140. package/web/.next/static/chunks/{1da59e0c79357cf8.js → f03e1e09ef60b8c4.js} +1 -1
  141. package/web/.next/static/chunks/{85c0a8c9420d2064.js → f9a2483ac3ea86a7.js} +1 -1
  142. package/web/.next/static/chunks/{4a13c8befddbfae9.js → fce827d66af7ae8c.js} +1 -1
  143. package/web/.next/static/chunks/2ae98439dac3693e.js +0 -1
  144. package/web/.next/static/chunks/97b0a13714eb4d92.js +0 -1
  145. /package/web/.next/static/{KEWoM0Hk-MbG0_3S8cSrW → WVz5KLpC5vrF5Ijfky3EH}/_buildManifest.js +0 -0
  146. /package/web/.next/static/{KEWoM0Hk-MbG0_3S8cSrW → WVz5KLpC5vrF5Ijfky3EH}/_clientMiddlewareManifest.json +0 -0
  147. /package/web/.next/static/{KEWoM0Hk-MbG0_3S8cSrW → WVz5KLpC5vrF5Ijfky3EH}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  # Shep AI
4
4
 
5
- ### Multi-Session SDLC Control Center for AI Coding Agents
5
+ ### Autonomous AI Native SDLC Platform
6
6
 
7
- _Manage Claude Code, Cursor CLI, or any coding agent across the full development lifecycle — from requirements to deploy with parallel sessions, instant context switching, and human-in-the-loop control_
7
+ _Run `shep` in any repo to manage features through the full development lifecycle — requirements, planning, implementation, review, and deployment using AI coding agents with human-in-the-loop approval gates._
8
8
 
9
9
  [![CI](https://github.com/shep-ai/cli/actions/workflows/ci.yml/badge.svg)](https://github.com/shep-ai/cli/actions/workflows/ci.yml)
10
10
  [![npm version](https://img.shields.io/npm/v/@shepai/cli.svg?color=cb3837&logo=npm)](https://www.npmjs.com/package/@shepai/cli)
@@ -17,16 +17,12 @@ _Manage Claude Code, Cursor CLI, or any coding agent across the full development
17
17
 
18
18
  <br />
19
19
 
20
- [Features](#features) · [Quick Start](#quick-start) · [CLI Reference](#cli) · [Architecture](#architecture) · [Contributing](#contributing)
21
-
22
- <br />
23
-
24
- <img src="docs/poc/imgs/00-control-center-hero.png" alt="Shep AI Control Center — manage all features across repos from a single canvas" width="100%" />
25
-
26
- [![Live Demo](https://img.shields.io/badge/Live_Demo-shep--ai.github.io-blue?style=for-the-badge)](https://shep-ai.github.io/cli/poc/)
20
+ [Features](#features) · [Quick Start](#quick-start) · [CLI Reference](#cli-reference) · [Architecture](#architecture) · [Contributing](#contributing)
27
21
 
28
22
  </div>
29
23
 
24
+ ---
25
+
30
26
  ### Install
31
27
 
32
28
  ```bash
@@ -37,301 +33,22 @@ npm i -g @shepai/cli
37
33
 
38
34
  ```bash
39
35
  cd your-project/
40
- shep feat new "Add unit tests for all source files"
41
- ```
42
-
43
- <details>
44
- <summary><b>List features</b> &mdash; <code>shep feat ls</code></summary>
45
- <br />
46
-
47
- ```
48
- Features for /home/user/projects/my-app
49
-
50
- ID Name Status Branch Created
51
- 1b0a7969 Add Unit Tests ✓ Completed feat/add-unit-tests 2/13/2026
52
- ```
53
-
54
- </details>
55
-
56
- <details>
57
- <summary><b>Show feature detail</b> &mdash; <code>shep feat show 1b0a7969</code></summary>
58
- <br />
59
-
60
- ```
61
- Feature: Add Unit Tests
62
-
63
- ID 1b0a7969-b420-4754-832f-5c38801b4852
64
- Slug add-unit-tests
65
- Description Add comprehensive unit tests for all existing source files
66
- in the project to ensure code correctness and improve test coverage.
67
- Repository /home/user/projects/my-app
68
- Branch feat/add-unit-tests
69
- Status ✓ Completed
70
- Worktree ~/.shep/repos/9bbd30de/wt/feat-add-unit-tests
71
- Spec Dir ~/.shep/repos/9bbd30de/wt/feat-add-unit-tests/specs/001-add-unit-tests
72
- Agent Run 732a1fc2-a346-4052-a028-dcb1a46b6f2c
73
-
74
- Timestamps
75
- Created 2/13/2026, 12:15:08 AM
76
- Updated 2/13/2026, 12:15:08 AM
77
- ```
78
-
79
- </details>
80
-
81
- <details>
82
- <summary><b>Isolated worktree per feature</b> &mdash; no stashing, no branch switching</summary>
83
- <br />
84
-
85
- Each feature gets its own git worktree — fully isolated from your main branch.
86
-
87
- ```
88
- ~/.shep/repos/9bbd30de/wt/feat-add-unit-tests/
89
- ├── .git # linked worktree (not a clone)
90
- ├── src/
91
- ├── tests/
92
- ├── specs/
93
- │ └── 001-add-unit-tests/
94
- │ ├── feature.yaml # status tracking
95
- │ ├── spec.yaml # requirements & scope
96
- │ ├── research.yaml # technical decisions
97
- │ ├── plan.yaml # implementation strategy
98
- │ └── tasks.yaml # task breakdown
99
- ├── pyproject.toml
100
- └── README.md
101
- ```
102
-
103
- </details>
104
-
105
- <details>
106
- <summary><b>Auto-generated spec files</b> &mdash; real output from a single <code>shep feat new</code></summary>
107
- <br />
108
-
109
- > **`spec.yaml`** — requirements & scope
110
-
111
- ```yaml
112
- name: add-unit-tests
113
- oneLiner: Add comprehensive unit tests for all source modules
114
- summary: >
115
- Add unit tests for every module in the package. The project currently has
116
- minimal test coverage (only 7 tests total). This feature adds tests for
117
- config, agents, flows, tools, observability, and CLI — using pytest with
118
- mocking to avoid external dependencies.
119
- sizeEstimate: M
120
- openQuestions:
121
- - question: 'Should we set a minimum coverage threshold and enforce it in CI?'
122
- resolved: true
123
- answer: >
124
- Set 70% minimum via --cov-fail-under=70. Achievable and prevents regression.
125
- ```
126
-
127
- > **`research.yaml`** — technical decisions with rationale
128
-
129
- ```yaml
130
- decisions:
131
- - title: 'Test Framework'
132
- chosen: 'pytest (already configured)'
133
- rejected:
134
- - 'unittest — More verbose, no fixture system'
135
- - 'nose2 — Unmaintained, no advantage'
136
- rationale: >
137
- Already a dev dependency with asyncio and coverage plugins configured.
138
-
139
- - title: 'Mocking Library'
140
- chosen: 'unittest.mock (stdlib)'
141
- rejected:
142
- - 'pytest-mock — Adds a dependency for marginal convenience'
143
- rationale: >
144
- patch() for module-level replacement, MagicMock for spec objects,
145
- assert_called_with for verification. No new dependency needed.
146
- ```
147
-
148
- > **`tasks.yaml`** — TDD task breakdown
149
-
150
- ```yaml
151
- tasks:
152
- - id: task-1
153
- title: 'Create conftest.py with shared fixtures'
154
- dependencies: []
155
- acceptanceCriteria:
156
- - 'mock_settings returns a Settings instance with known values'
157
- - 'mock_llm returns MagicMock(spec=LLM) for agent tests'
158
- - 'tmp_repo creates a temp dir with git init and one commit'
159
- tdd:
160
- red: ['Write test_smoke.py that imports fixtures and asserts properties']
161
- green: ['Implement conftest.py with all three fixtures']
162
- refactor: ['Remove smoke test — subsumed by real test files']
163
-
164
- - id: task-3
165
- title: 'Test config/llm.py'
166
- dependencies: [task-1]
167
- acceptanceCriteria:
168
- - 'test_create_llm_with_openai_provider: verifies model, temperature, api_key'
169
- - 'test_create_llm_with_cursor_provider: verifies base_url included'
170
- - 'test_get_fast_llm: calls create_llm with settings.fast_model'
171
- tdd:
172
- red: ['Patch LLM and get_settings, assert constructor kwargs']
173
- green: ['Tests pass — they verify existing code with mocks']
174
- refactor: ['Extract common patch decorators if repetitive']
36
+ shep # First-run onboarding + web UI
37
+ shep feat new "Add unit tests" # Create a feature, agent takes over
175
38
  ```
176
39
 
177
- > **`feature.yaml`** — machine-readable progress (updated continuously)
178
-
179
- ```yaml
180
- feature:
181
- id: '001-add-unit-tests'
182
- branch: 'feat/001-add-unit-tests'
183
- lifecycle: 'research'
184
-
185
- status:
186
- phase: 'research'
187
- progress: { completed: 0, total: 12, percentage: 0 }
188
- lastUpdatedBy: 'feature-agent'
189
- ```
190
-
191
- </details>
192
-
193
- ---
194
-
195
- Running AI agents is easy. **Managing many of them through a full SDLC is the hard part.** Shep gives you a control center that handles the entire lifecycle — requirements gathering, planning, implementation, QA, and deployment — across multiple agent sessions running in parallel. See what each agent is doing, jump into any session's web preview, code editor, or terminal, approve plans when agents need your input, and let them keep working while you move on. Plug in Claude Code, Cursor CLI, Gemini CLI, or any coding agent. Each feature gets its own isolated worktree and dev environment. You manage the lifecycle, agents do the work.
196
-
197
40
  ---
198
41
 
199
42
  ## Features
200
43
 
201
- > 🚧 **Under active development** — Web UI screenshots are from the design spec. Core CLI (`feat new`, `feat ls`, `feat show`, `settings`, `ui`, `start`, `stop`, `status`) works today. The `mem` command is still WIP.
202
-
203
- <table>
204
- <tr>
205
- <td width="55%"><img src="docs/poc/imgs/01-features-control-center-overview.png" alt="Feature properties with attachments and metadata" /></td>
206
- <td width="45%">
207
-
208
- ### Feature Properties & Attachments
209
-
210
- - **Rich feature detail panel** with name, description, and metadata
211
- - **File attachments** — requirements PDFs, mockup images, API specs linked directly to features
212
- - **Team & metadata** tracking for ownership and collaboration
213
- - **Dependency mapping** between features across repos
214
- - **Iterative refinement** — update properties as requirements evolve through the lifecycle
215
-
216
- </td>
217
- </tr>
218
-
219
- <tr>
220
- <td width="55%"><img src="docs/poc/imgs/02-feature-card-action-toolbar.png" alt="Feature card with action toolbar" /></td>
221
- <td width="45%">
222
-
223
- ### Feature Cards with Quick Actions
224
-
225
- - **One-click dev server** launch directly from any card
226
- - **Action toolbar** — GitHub, web preview, terminal, code editor at your fingertips
227
- - **Live progress** tracking with percentage and lifecycle stage badge
228
- - **Unique IDs** for instant cross-referencing across CLI and UI
229
-
230
- </td>
231
- </tr>
232
-
233
- <tr>
234
- <td width="55%"><img src="docs/poc/imgs/03-requirements-discovery-validation.png" alt="Requirements discovery questionnaire" /></td>
235
- <td width="45%">
236
-
237
- ### AI-Guided Requirements Discovery
238
-
239
- - **Smart questionnaires** that surface the right questions for your feature
240
- - **Categorized inputs** — business, technical, and UX problem classification
241
- - **Priority tiers** (P1–P3) with clear impact descriptions
242
- - **Domain tagging** to scope the affected areas of your codebase
243
- - **Human breakpoint** — agent pauses here until you finalize
244
-
245
- </td>
246
- </tr>
247
-
248
- <tr>
249
- <td width="55%"><img src="docs/poc/imgs/04-technical-implementation-plan-review.png" alt="Technical plan review with architecture decisions" /></td>
250
- <td width="45%">
251
-
252
- ### Technical Plan Review
253
-
254
- - **AI-generated implementation plans** with full architecture rationale
255
- - **Technical decision cards** — see the chosen approach and alternatives side-by-side
256
- - **Architecture pattern selection** (microservices, monolith, serverless) with trade-off analysis
257
- - **Approve & continue** or send back for revision — you control the direction
258
-
259
- </td>
260
- </tr>
261
-
262
- <tr>
263
- <td width="55%"><img src="docs/poc/imgs/05-plan-review-tasks-and-artifacts.png" alt="Task breakdown and generated artifacts" /></td>
264
- <td width="45%">
265
-
266
- ### Tasks & Generated Artifacts
267
-
268
- - **Auto-generated documents** — plan.md, tasks.md, data_model.md created from your approved spec
269
- - **Task breakdown** with dependency tracking and status badges
270
- - **Artifact browser** — inspect any generated document directly in the panel
271
- - **Draft indicator** — nothing ships until you explicitly approve
272
-
273
- </td>
274
- </tr>
275
-
276
- <tr>
277
- <td width="55%"><img src="docs/poc/imgs/06-qa-check-review.png" alt="QA checklist with all checks passing" /></td>
278
- <td width="45%">
279
-
280
- ### Quality Assurance Gate
281
-
282
- - **Automated QA checklist** — functional, performance, compatibility, accessibility
283
- - **Performance benchmarks** — API response time p95 thresholds
284
- - **WCAG 2.5** accessibility compliance verification
285
- - **One-click Pass QA** when all checks are green
286
-
287
- </td>
288
- </tr>
289
-
290
- <tr>
291
- <td width="55%"><img src="docs/poc/imgs/07-dev-environment-web-preview.png" alt="Integrated web preview in dev environment" /></td>
292
- <td width="45%">
293
-
294
- ### Integrated Dev Environment — Web Preview
295
-
296
- - **Live localhost preview** embedded in the control center
297
- - **Isolated ports** — each feature runs its own dev server
298
- - **Server status** indicator with start/stop controls
299
- - **Open in Browser** for full-screen testing
300
- - **PR context** — branch, worktree path, and PR link always visible
301
-
302
- </td>
303
- </tr>
304
-
305
- <tr>
306
- <td width="55%"><img src="docs/poc/imgs/08-dev-environment-vscode-tab.png" alt="Embedded VS Code editor in dev environment" /></td>
307
- <td width="45%">
308
-
309
- ### Integrated Dev Environment — Code Editor
310
-
311
- - **Embedded VS Code** with full editor capabilities
312
- - **Git worktree isolation** — each feature in its own directory, no branch conflicts
313
- - **File explorer** with project structure at a glance
314
- - **PR badge** with commits ahead/behind and changed file count
315
- - **Zero context-switch** — edit code without leaving the control center
316
-
317
- </td>
318
- </tr>
319
-
320
- <tr>
321
- <td width="55%"><img src="docs/poc/imgs/09-dev-environment-terminal-tab.png" alt="Terminal tab showing running dev server" /></td>
322
- <td width="45%">
323
-
324
- ### Integrated Dev Environment — Terminal
325
-
326
- - **Full terminal access** inside the feature workspace
327
- - **Build output, test results, agent logs** in one place
328
- - **Pre-configured** in the feature's worktree directory
329
- - **Dev server output** — see Next.js/Vite/Express startup and compile times
330
- - **Three-tab workflow** — preview, code, and terminal without leaving the UI
331
-
332
- </td>
333
- </tr>
334
- </table>
44
+ - **Full SDLC automation** — AI agents handle requirements gathering, research, planning, implementation, and review
45
+ - **Human-in-the-loop gates** — Approval checkpoints at PRD, Plan, and Merge phases (configurable or skip with `--allow-all`)
46
+ - **Multi-agent support** — Plug in Claude Code, Cursor CLI, or Gemini CLI as your coding agent
47
+ - **Web UI dashboard** — Interactive React Flow canvas showing features and repos as graph nodes with real-time SSE updates
48
+ - **Git worktree isolation** Each feature gets its own worktree, no branch switching or stashing
49
+ - **CLI-first workflow** — Full feature management, agent control, settings, and tooling from the terminal
50
+ - **TUI onboarding wizard** — Guided setup on first run
51
+ - **Per-repo SQLite database** — All data lives locally in `~/.shep/`, no cloud dependency
335
52
 
336
53
  ---
337
54
 
@@ -347,37 +64,87 @@ shep
347
64
  # 3. Browser opens at http://localhost:4050 — you're in
348
65
  ```
349
66
 
350
- ## Daemon Management
67
+ ## CLI Reference
351
68
 
352
- `shep` runs the web UI as a background daemon so your terminal stays free. Use these commands to manage it:
69
+ ### Daemon
353
70
 
354
- ```bash
355
- shep start # Start (or re-open) the web UI daemon
356
- shep stop # Gracefully stop the daemon
357
- shep status # Show live PID, port, uptime, CPU%, and memory
71
+ ```
72
+ shep Start daemon + onboarding (first run)
73
+ shep start [--port <number>] Start web UI daemon (background, default port 4050)
74
+ shep stop Stop the running daemon
75
+ shep restart Restart the daemon
76
+ shep status Show daemon status and live metrics
77
+ shep ui [--port] [--no-open] Start the web UI in the foreground
358
78
  ```
359
79
 
360
- ## CLI
80
+ ### Feature Management
361
81
 
362
82
  ```
363
- shep Start daemon (onboarding on first run)
364
- shep start [--port <number>] Start the web UI as a background daemon
365
- shep stop Stop the running web UI daemon
366
- shep status Show daemon status and live metrics
367
83
  shep feat new <description> Create a new feature
368
- shep feat new --interactive Interactive mode with human checkpoints
369
- shep feat new --allow-all Full autonomous mode
370
- shep feat ls List features across repos
84
+ [--repo] [--push] [--pr]
85
+ [--allow-prd] [--allow-plan] [--allow-merge] [--allow-all]
86
+ [--parent] [--fast] [--model] [--attach]
87
+ shep feat ls [--repo] List features
371
88
  shep feat show <id> Show feature details
372
- shep feat preview <id> Preview feature dev environment
373
- shep ui Start the web UI in the foreground
89
+ shep feat del <id> Delete a feature
90
+ shep feat resume <id> Resume a paused feature
91
+ shep feat review <id> Review a feature
92
+ shep feat approve <id> [--comments] Approve a feature
93
+ shep feat reject <id> [--feedback] Reject a feature
94
+ shep feat logs <id> View feature logs
95
+ ```
96
+
97
+ ### Agent Management
98
+
99
+ ```
100
+ shep agent ls List agents
101
+ shep agent show <id> Show agent details
102
+ shep agent stop <id> Stop a running agent
103
+ shep agent logs <id> View agent logs
104
+ shep agent delete <id> Delete an agent
105
+ shep agent approve <id> Approve an agent action
106
+ shep agent reject <id> Reject an agent action
107
+ ```
108
+
109
+ ### Repository & Session Management
110
+
111
+ ```
112
+ shep repo ls List repositories
113
+ shep repo show <id> Show repository details
114
+ shep session ls List sessions
115
+ shep session show <id> Show session details
116
+ ```
117
+
118
+ ### Settings
119
+
120
+ ```
121
+ shep settings Launch setup wizard
374
122
  shep settings show Display current configuration
123
+ shep settings init Initialize settings
375
124
  shep settings agent Configure AI coding agent
376
- shep mem add <text> --global|--repo Add agent memory
377
- shep mem ls List memories
378
- shep version Version info
125
+ shep settings ide Configure IDE
126
+ shep settings workflow Configure workflow
127
+ shep settings model Configure model
379
128
  ```
380
129
 
130
+ ### Tools
131
+
132
+ ```
133
+ shep tools list List tools with install status
134
+ shep install <tool> [--how] Install a dev tool
135
+ shep ide-open [--ide] [--dir] Open IDE in directory
136
+ ```
137
+
138
+ ### Other
139
+
140
+ ```
141
+ shep version Show version info
142
+ shep upgrade Upgrade to latest version
143
+ shep run <agent> [-p prompt] [-r repo] [-s] Run an agent directly
144
+ ```
145
+
146
+ ---
147
+
381
148
  ## Architecture
382
149
 
383
150
  Clean Architecture with four layers. Dependencies point inward — domain has zero external deps.
@@ -387,7 +154,7 @@ flowchart TB
387
154
  P["<b>Presentation</b><br/>CLI · Web UI · TUI"]
388
155
  A["<b>Application</b><br/>Use Cases · Orchestration · Ports"]
389
156
  D["<b>Domain</b><br/>Entities · Value Objects · Services"]
390
- I["<b>Infrastructure</b><br/>SQLite · LangGraph · LanceDB"]
157
+ I["<b>Infrastructure</b><br/>SQLite · LangGraph · DI"]
391
158
 
392
159
  P --> A --> D
393
160
  I --> A
@@ -398,48 +165,76 @@ flowchart TB
398
165
  style I fill:#ede9fe,stroke:#8b5cf6,color:#4c1d95
399
166
  ```
400
167
 
168
+ | Layer | Path | Responsibility |
169
+ | -------------- | ----------------------------------- | ------------------------------------------------- |
170
+ | Domain | `packages/core/src/domain/` | Business logic, TypeSpec-generated types |
171
+ | Application | `packages/core/src/application/` | Use cases, output port interfaces |
172
+ | Infrastructure | `packages/core/src/infrastructure/` | SQLite repos, LangGraph agents, DI (tsyringe) |
173
+ | Presentation | `src/presentation/` | CLI (Commander), TUI (Inquirer), Web UI (Next.js) |
174
+
401
175
  ### Feature Lifecycle
402
176
 
403
- Every feature progresses through a structured SDLC pipeline:
177
+ Every feature progresses through a structured SDLC pipeline with 9 states:
404
178
 
405
179
  ```
406
- Requirements Research Review PRD Planning Review Plan → Implementation QA Approval → Live
407
- ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
408
- Agent Agent Human Agent Human Agent Human Human
409
- breakpoint breakpoint check gate
180
+ Started -> Analyze -> Requirements -> Research -> Planning -> Implementation -> Review -> Maintain
181
+ |
182
+ (Blocked)
410
183
  ```
411
184
 
412
- Breakpoints are configurable. In `--allow-all` mode, the agent handles everything autonomously.
185
+ Human approval gates are configurable at PRD, Plan, and Merge phases. In `--allow-all` mode the agent handles everything autonomously.
413
186
 
414
187
  ### Tech Stack
415
188
 
416
- | Component | Technology |
417
- | --------------- | --------------------------------------------------------------------------------------- |
418
- | Language | TypeScript |
419
- | Package Manager | pnpm |
420
- | CLI Framework | Commander |
421
- | TUI Framework | [@inquirer/prompts](https://github.com/SBoudrias/Inquirer.js) |
422
- | Web UI | Next.js 16 + React 19 + shadcn/ui ([@shepai/web](./src/presentation/web/)) |
423
- | Design System | Storybook |
424
- | Build Tool | tsc + tsc-alias (prod), tsx (CLI dev), Next.js (web dev) |
425
- | Database | SQLite |
426
- | Agent System | [LangGraph](https://www.langchain.com/langgraph) (`@langchain/langgraph`) |
427
- | Vector DB | [LanceDB](https://lancedb.com/) (file-based) |
428
- | Embeddings | [Transformers.js](https://huggingface.co/docs/transformers.js) (local, multiple models) |
429
- | Testing | Vitest (unit/integration) + Playwright (e2e) |
430
- | Methodology | TDD (Red-Green-Refactor) |
189
+ | Component | Technology |
190
+ | --------------- | ------------------------------------------------------------------------- |
191
+ | Language | TypeScript (ES2022) |
192
+ | Package Manager | pnpm |
193
+ | CLI Framework | Commander |
194
+ | TUI Framework | [@inquirer/prompts](https://github.com/SBoudrias/Inquirer.js) |
195
+ | Web UI | Next.js 16 + React 19 + shadcn/ui + Tailwind CSS 4 |
196
+ | Graph Viz | React Flow (XYFlow) 12 |
197
+ | Design System | Storybook 8.x |
198
+ | Build Tool | tsc + tsc-alias (prod), tsx (CLI dev), Next.js (web dev) |
199
+ | Database | SQLite (better-sqlite3, per-repo) |
200
+ | Domain Models | TypeSpec -> generated TypeScript |
201
+ | Agent System | [LangGraph](https://www.langchain.com/langgraph) (`@langchain/langgraph`) |
202
+ | DI Container | tsyringe |
203
+ | Testing | Vitest (unit/integration) + Playwright (e2e) |
204
+ | Methodology | TDD (Red-Green-Refactor) |
205
+
206
+ ### Supported Tools
207
+
208
+ Shep can detect, install, and manage the following tools:
209
+
210
+ | Category | Tools |
211
+ | ---------- | --------------------------------------------------------------------------------- |
212
+ | IDEs | Alacritty, Antigravity, Cursor, iTerm2, Kitty, TMux, VS Code, Warp, Windsurf, Zed |
213
+ | CLI Agents | Claude Code, Cursor CLI, Gemini CLI |
214
+ | Dev Tools | Git, GitHub CLI |
215
+
216
+ ### Web UI
217
+
218
+ The web dashboard runs at `http://localhost:4050` and provides:
219
+
220
+ - **Dashboard canvas** — Interactive React Flow graph with feature and repository nodes
221
+ - **Feature drawer** — Tabs for overview, activity, approval, rejection, PR info, deployment, and timeline
222
+ - **Create feature form** — Start new features from the UI
223
+ - **Settings, Tools, Skills, and Version pages**
224
+ - **Real-time updates** via Server-Sent Events (SSE)
431
225
 
432
226
  ### Data Model
433
227
 
434
228
  ```
435
- Repository ──┬── Feature ──┬── Plan ──┬── Task ──── ActionItem
436
- └── Artifact
437
- └── Requirement ── Research
438
- └── Analysis docs (cached)
229
+ Repository --+-- Feature --+-- Plan --+-- Task -- ActionItem
230
+ | | +-- Artifact
231
+ | +-- Requirement -- Research
439
232
  ```
440
233
 
441
234
  All data lives locally in `~/.shep/`. Per-repo SQLite databases. No cloud dependency.
442
235
 
236
+ ---
237
+
443
238
  ## Documentation
444
239
 
445
240
  | Document | Description |
@@ -453,7 +248,6 @@ All data lives locally in `~/.shep/`. Per-repo SQLite databases. No cloud depend
453
248
  | [Guides](./docs/guides/) | User guides and tutorials |
454
249
  | [Development](./docs/development/) | Contributing and development setup |
455
250
  | [API Reference](./docs/api/) | Interface and model documentation |
456
- | [POC: Feature Flow](./docs/poc/) | Interactive feature lifecycle demo |
457
251
 
458
252
  ## Contributing
459
253
 
@@ -1 +1 @@
1
- {"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,sDAAsD,CAAC;AAG9D,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA2D7F"}
1
+ {"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAG5F,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAiD7F"}
@@ -21,22 +21,12 @@ export async function getMergeReviewData(featureId) {
21
21
  }
22
22
  : undefined;
23
23
  const branch = feature.branch ? { source: feature.branch, target: 'main' } : undefined;
24
- // Load plan phases (best-effort)
25
- let phases;
26
- try {
27
- const planUseCase = resolve('GetPlanArtifactUseCase');
28
- const plan = await planUseCase.execute(featureId);
29
- phases = plan.phases.map(({ id, name, description }) => ({ id, name, description }));
30
- }
31
- catch {
32
- // Plan unavailable — not critical
33
- }
34
24
  const worktreePath = feature.worktreePath ??
35
25
  (feature.repositoryPath && feature.branch
36
26
  ? computeWorktreePath(feature.repositoryPath, feature.branch)
37
27
  : null);
38
28
  if (!worktreePath) {
39
- return { pr, branch, phases, warning: pr ? undefined : 'No PR or diff data available' };
29
+ return { pr, branch, warning: pr ? undefined : 'No PR or diff data available' };
40
30
  }
41
31
  try {
42
32
  const gitPrService = resolve('IGitPrService');
@@ -44,10 +34,10 @@ export async function getMergeReviewData(featureId) {
44
34
  gitPrService.getPrDiffSummary(worktreePath, 'main'),
45
35
  gitPrService.getFileDiffs(worktreePath, 'main').catch(() => undefined),
46
36
  ]);
47
- return { pr, branch, phases, diffSummary, fileDiffs };
37
+ return { pr, branch, diffSummary, fileDiffs };
48
38
  }
49
39
  catch {
50
- return { pr, branch, phases, warning: 'Diff statistics unavailable' };
40
+ return { pr, branch, warning: 'Diff statistics unavailable' };
51
41
  }
52
42
  }
53
43
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAiCD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AAMD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAyD3F"}
1
+ {"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAIjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AA6BD;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AAMD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAyD3F"}
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { Loader2, AlertCircle, Clock } from 'lucide-react';
4
4
  import { InlineAttachments } from '../../common/inline-attachments/index.js';
5
+ import { formatDuration } from '../../../lib/format-duration.js';
5
6
  const NODE_TO_PHASE = {
6
7
  analyze: 'Analyzing',
7
8
  requirements: 'Requirements',
@@ -22,9 +23,6 @@ const LIFECYCLE_EVENTS = {
22
23
  function isLifecycleEvent(phase) {
23
24
  return phase.startsWith('run:');
24
25
  }
25
- function formatDuration(ms) {
26
- return `${(ms / 1000).toFixed(1)}s`;
27
- }
28
26
  /**
29
27
  * Build a lifecycle-aware timeline from flat timing events and rejection feedback.
30
28
  *
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-tabs.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAyPhD,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAyBF,oEAAoE;AACpE,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC"}
1
+ {"version":3,"file":"feature-drawer-tabs.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAqPhD,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAyBF,oEAAoE;AACpE,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC"}
@@ -231,10 +231,6 @@ const mergeFixture = {
231
231
  ciStatus: CiStatus.Success,
232
232
  },
233
233
  branch: { source: 'feat/add-auth', target: 'main' },
234
- phases: [
235
- { id: 'phase-1', name: 'Foundation & Config', description: 'Set up types and server action' },
236
- { id: 'phase-2', name: 'Component Implementation', description: 'Build the merge review UI' },
237
- ],
238
234
  diffSummary: { filesChanged: 12, additions: 340, deletions: 85, commitCount: 5 },
239
235
  };
240
236
  /* ---------------------------------------------------------------------------