@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.
- package/README.md +138 -344
- package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-merge-review-data.js +3 -13
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +1 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +0 -4
- package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +0 -8
- package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.js +3 -6
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +0 -2
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +0 -17
- package/dist/src/presentation/web/lib/format-duration.d.ts +11 -0
- package/dist/src/presentation/web/lib/format-duration.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/format-duration.js +26 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_16a7514c._.js → _775fb008._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_16a7514c._.js.map → _775fb008._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_df15bd24._.js +1 -1
- package/web/.next/server/chunks/ssr/_df15bd24._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +28 -28
- package/web/.next/static/chunks/13388eebaebbd765.js +1 -0
- package/web/.next/static/chunks/2b5c09afb6a9d9d2.js +1 -0
- package/web/.next/static/chunks/{7bf51da075913f1c.js → 3f369959cf539e2b.js} +1 -1
- package/web/.next/static/chunks/{166e31f7adad1949.js → 42371631f1b478db.js} +1 -1
- package/web/.next/static/chunks/{0a1511515cbdf02e.js → 426a8fa52f6cbb29.js} +2 -2
- package/web/.next/static/chunks/{62652f0d1304c333.js → 975ffabcff2c7596.js} +1 -1
- package/web/.next/static/chunks/{449251751b4908f7.js → e2f35ce4e7d7220a.js} +1 -1
- package/web/.next/static/chunks/{ceb79276cb6d8b88.js → ec8a6b8d8b504077.js} +1 -1
- package/web/.next/static/chunks/{1da59e0c79357cf8.js → f03e1e09ef60b8c4.js} +1 -1
- package/web/.next/static/chunks/{85c0a8c9420d2064.js → f9a2483ac3ea86a7.js} +1 -1
- package/web/.next/static/chunks/{4a13c8befddbfae9.js → fce827d66af7ae8c.js} +1 -1
- package/web/.next/static/chunks/2ae98439dac3693e.js +0 -1
- package/web/.next/static/chunks/97b0a13714eb4d92.js +0 -1
- /package/web/.next/static/{KEWoM0Hk-MbG0_3S8cSrW → WVz5KLpC5vrF5Ijfky3EH}/_buildManifest.js +0 -0
- /package/web/.next/static/{KEWoM0Hk-MbG0_3S8cSrW → WVz5KLpC5vrF5Ijfky3EH}/_clientMiddlewareManifest.json +0 -0
- /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
|
-
###
|
|
5
|
+
### Autonomous AI Native SDLC Platform
|
|
6
6
|
|
|
7
|
-
|
|
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
|
[](https://github.com/shep-ai/cli/actions/workflows/ci.yml)
|
|
10
10
|
[](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
|
-
[](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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<details>
|
|
44
|
-
<summary><b>List features</b> — <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> — <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> — 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> — 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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
##
|
|
67
|
+
## CLI Reference
|
|
351
68
|
|
|
352
|
-
|
|
69
|
+
### Daemon
|
|
353
70
|
|
|
354
|
-
```
|
|
355
|
-
shep
|
|
356
|
-
shep
|
|
357
|
-
shep
|
|
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
|
-
|
|
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
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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
|
|
373
|
-
shep
|
|
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
|
|
377
|
-
shep
|
|
378
|
-
shep
|
|
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 ·
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
breakpoint breakpoint check gate
|
|
180
|
+
Started -> Analyze -> Requirements -> Research -> Planning -> Implementation -> Review -> Maintain
|
|
181
|
+
|
|
|
182
|
+
(Blocked)
|
|
410
183
|
```
|
|
411
184
|
|
|
412
|
-
|
|
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
|
|
423
|
-
|
|
|
424
|
-
|
|
|
425
|
-
|
|
|
426
|
-
|
|
|
427
|
-
|
|
|
428
|
-
|
|
|
429
|
-
|
|
|
430
|
-
|
|
|
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
|
|
436
|
-
|
|
437
|
-
|
|
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":"
|
|
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,
|
|
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,
|
|
37
|
+
return { pr, branch, diffSummary, fileDiffs };
|
|
48
38
|
}
|
|
49
39
|
catch {
|
|
50
|
-
return { pr, branch,
|
|
40
|
+
return { pr, branch, warning: 'Diff statistics unavailable' };
|
|
51
41
|
}
|
|
52
42
|
}
|
|
53
43
|
catch (error) {
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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
|
/* ---------------------------------------------------------------------------
|