persona-harness 0.3.0-alpha.0 → 0.3.0-alpha.2
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/.persona/harness.jsonc +1 -1
- package/.persona/rules/backend/java-backend-bootstrap.md +2 -1
- package/.persona/rules/backend/spring-entity.md +1 -0
- package/CHANGELOG.md +30 -4
- package/README.ja.md +47 -4
- package/README.ko.md +47 -4
- package/README.md +61 -5
- package/README.zh-cn.md +47 -4
- package/dist/cli/bearshell.js +34 -4
- package/dist/cli/bearshell.js.map +1 -1
- package/dist/cli/history.js +1 -1
- package/dist/cli/history.js.map +1 -1
- package/dist/cli/init.js +13 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/plan-command.d.ts +1 -0
- package/dist/cli/plan-command.js +22 -4
- package/dist/cli/plan-command.js.map +1 -1
- package/dist/cli/plan-status.js +1 -1
- package/dist/cli/plan-status.js.map +1 -1
- package/dist/cli/plan.js +10 -8
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/policy.js +1 -1
- package/dist/cli/policy.js.map +1 -1
- package/dist/cli/report-status.js +1 -1
- package/dist/cli/report-status.js.map +1 -1
- package/dist/phase0/evidence.js +1 -0
- package/dist/phase0/evidence.js.map +1 -1
- package/dist/phase0/harness-config.d.ts +10 -0
- package/dist/phase0/harness-config.js +35 -11
- package/dist/phase0/harness-config.js.map +1 -1
- package/dist/phase0/injection.js +11 -2
- package/dist/phase0/injection.js.map +1 -1
- package/dist/phase0/java-role-discovery.js +1 -0
- package/dist/phase0/java-role-discovery.js.map +1 -1
- package/dist/phase0/types.d.ts +6 -0
- package/docs/current/README.md +2 -0
- package/docs/current/java-backend-mvp-install-guide.md +49 -1
- package/docs/current/persona-harness-detailed-usage.md +16 -13
- package/docs/current/release/README.md +8 -0
- package/docs/current/release/release-checklist.md +30 -1
- package/docs/current/v0.3.0-alpha-publish-readiness.md +39 -9
- package/docs/current/v0.3.0-external-tester-guide.md +59 -23
- package/package.json +1 -1
package/.persona/harness.jsonc
CHANGED
|
@@ -18,11 +18,12 @@ enforcement: inject_only
|
|
|
18
18
|
- 구현 전에 package structure plan을 작성한다. root package 바로 아래에 `global`과 `root/<domain>`을 같은 depth로 두고, `feature/features/module/modules` 같은 wrapper package를 추가하지 않는다.
|
|
19
19
|
- 도메인 package 내부는 presentation/application/domain/infrastructure 흐름을 기본으로 두고 `root/<domain>/presentation`, `root/<domain>/application`, `root/<domain>/domain`, `root/<domain>/infrastructure`로 배치한다.
|
|
20
20
|
- DTO는 파일 경계로 둔다. Presentation DTO는 `root/<domain>/presentation/dto/request`와 `root/<domain>/presentation/dto/response`, Application DTO는 `root/<domain>/application/dto/command`와 `root/<domain>/application/dto/result`에 둔다.
|
|
21
|
-
- 구현 중에는 package structure plan을 기준으로 Domain, Repository, Service, DTO, Controller 역할 파일을 만들고 주요 Java 파일을 다시 읽고 다음 역할로 넘어간다.
|
|
21
|
+
- 구현 중에는 package structure plan을 기준으로 Domain, Repository, Service, DTO, Controller 역할 파일을 만들고 주요 Java 파일을 다시 읽고 다음 역할로 넘어간다. Domain entity/aggregate가 static factory를 쓰면 public constructor가 아니라 private constructor로 생성 경로를 닫는다.
|
|
22
22
|
- presentation은 HTTP 요청/응답과 request/response DTO boundary를 담당하고, application service에 위임한다.
|
|
23
23
|
- Application Service는 use-case 흐름 조율만 담당하며 Service는 Map/List/AtomicLong/nextId/idCounter 같은 저장소 상태나 id sequence를 직접 소유하지 않는다.
|
|
24
24
|
- 저장소 상태와 id generation은 Repository/Store 같은 persistence/storage component 뒤로 위임한다.
|
|
25
25
|
- Repository interface는 domain 경계에 `root/<domain>/domain/<Domain>Repository`로 두고 구현체는 infrastructure 경계에 `Jdbc<Domain>Repository` 또는 `InMemory<Domain>Repository`로 둔다.
|
|
26
26
|
- Domain은 Spring, HTTP, DB, infrastructure 세부사항에 의존하지 않는다.
|
|
27
27
|
- Domain entity/aggregate는 record 데이터 홀더로 만들지 않는다. 자신의 필드로 판단할 수 있는 규칙은 `isOwner(name)`, `isReturned()`, `canLoan()` 같은 의미 있는 메서드로 Domain 객체가 직접 판단하고, Application Service가 getter/accessor로 필드를 꺼내 판단하지 않는다.
|
|
28
|
+
- Domain entity/aggregate가 `create`, `restore`, `of` 같은 static factory로 생성 경로를 제공하면 public constructor를 열지 않고 private constructor로 닫는다.
|
|
28
29
|
- frontend, infra, test-quality, generated app product-quality 보증은 현재 bootstrap injection 범위 밖이다.
|
|
@@ -14,6 +14,7 @@ enforcement: inject_only
|
|
|
14
14
|
|
|
15
15
|
- Entity/Aggregate는 record 데이터 홀더로 만들지 않고 class로 둔다. record는 Request/Response DTO, Command/Result DTO, 값 자체가 의미인 Value Object에만 제한한다.
|
|
16
16
|
- Entity는 setter를 열지 않는다.
|
|
17
|
+
- `create`, `restore`, `of` 같은 static factory를 쓰는 Entity/Aggregate는 public constructor를 열지 않고 private constructor로 생성 경로를 닫는다.
|
|
17
18
|
- 상태 변경은 의미 있는 메서드로만 한다.
|
|
18
19
|
- 도메인 불변식은 Entity나 Domain 객체 안에서 지킨다.
|
|
19
20
|
- 자신의 필드만으로 판단할 수 있는 규칙은 Entity/Domain 객체가 직접 판단한다. 예: `isOwner(name)`, `isReturned()`, `canLoan()` 같은 메서드를 두고, Service가 `entity.name()`/getter/accessor를 꺼내 같은 판단을 대신하지 않는다.
|
package/CHANGELOG.md
CHANGED
|
@@ -2,9 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
All notable Persona Harness changes are recorded here.
|
|
4
4
|
|
|
5
|
-
This project uses npm prerelease versions for tester-facing alpha builds.
|
|
5
|
+
This project uses npm prerelease versions for tester-facing alpha builds. During the alpha pilot, `latest` is kept on the current alpha build to avoid stale default installs. Stable support guarantees are still deferred.
|
|
6
6
|
|
|
7
|
-
## [0.3.0-alpha.
|
|
7
|
+
## [0.3.0-alpha.2] - Unreleased
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Promoted the P0 plan-first CLI, diagnostics, scope, and bearshell hardening line to the next alpha candidate because the published `0.3.0-alpha.1` package still printed the old implementation-first `ph init` guidance.
|
|
12
|
+
- Updated release automation so prerelease publishes also move the npm `latest` dist-tag to the same current alpha/beta version, avoiding stale default installs.
|
|
13
|
+
- Documented the full OpenCode prerequisite flow before Persona Harness setup.
|
|
14
|
+
- Added OpenCode provider/model connection steps using `opencode auth login`, `opencode auth list`, `/connect`, and `/models`.
|
|
15
|
+
- Clarified that Persona Harness planning files can be created without OpenCode, but plugin injection and evidence capture require OpenCode.
|
|
16
|
+
- Updated external tester docs to use the published `persona-harness@alpha` install path.
|
|
17
|
+
- Added GitHub Actions release automation for verify, npm publish on version tags, and generated GitHub release notes.
|
|
18
|
+
- Tightened workflow prompts and report templates to prefer `npx ph bearshell` for repo inspection, Gradle verification, and smoke commands.
|
|
19
|
+
- Clarified that clean project agents should call Persona Harness through `npx ph ...`, not a globally installed `ph`.
|
|
20
|
+
- Clarified Java backend bootstrap guidance so domain static factories close creation through private constructors.
|
|
21
|
+
- Changed `ph init` next steps to the plan-first flow: intake, policy, plan, accept or revise, then implementation.
|
|
22
|
+
- Narrowed default `enabledDomains` to the Java backend MVP surface: `backend` and `programming`.
|
|
23
|
+
- Added diagnostics-only reporting for malformed `.persona/harness.jsonc` instead of silently hiding the fallback.
|
|
24
|
+
- Added a default `ph bearshell` command timeout with `PH_BEARSHELL_TIMEOUT_MS` override, while keeping the command helper explicitly non-sandboxed.
|
|
25
|
+
|
|
26
|
+
## [0.3.0-alpha.1] - 2026-06-21
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- Published the first tester-facing alpha line after `0.3.0-alpha.0`.
|
|
31
|
+
- Added OpenCode prerequisite and provider/model setup documentation.
|
|
32
|
+
- Prepared release automation and external tester guidance, but the published package still had stale `ph init` implementation-first output.
|
|
33
|
+
|
|
34
|
+
## [0.3.0-alpha.0] - 2026-06-21
|
|
8
35
|
|
|
9
36
|
### Added
|
|
10
37
|
|
|
@@ -28,8 +55,7 @@ This project uses npm prerelease versions for tester-facing alpha builds. Stable
|
|
|
28
55
|
|
|
29
56
|
### Known Gaps
|
|
30
57
|
|
|
31
|
-
-
|
|
32
|
-
- `latest` dist-tag is intentionally deferred.
|
|
58
|
+
- The current alpha line still needs external tester feedback before stable support guarantees.
|
|
33
59
|
- Generated app product quality is not certified.
|
|
34
60
|
- Rule compliance is not enforced by AST, linter, or build failure gates.
|
|
35
61
|
- Frontend, infra, desktop, and full TDD workflows remain future tracks.
|
package/README.ja.md
CHANGED
|
@@ -9,9 +9,51 @@ Persona Harness は、エージェントが空のプロジェクトから始め
|
|
|
9
9
|
> 現在の範囲: Java/Spring backend MVP.
|
|
10
10
|
> frontend、infra、desktop app、AST/linter enforcement、完全な TDD workflow は今後の対象です。
|
|
11
11
|
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- Node.js 20+
|
|
15
|
+
- npm
|
|
16
|
+
- OpenCode terminal CLI
|
|
17
|
+
- OpenCode に設定済みの model/provider
|
|
18
|
+
|
|
12
19
|
## Quick Start
|
|
13
20
|
|
|
14
|
-
npm
|
|
21
|
+
まず OpenCode をインストールします。OpenCode 公式ドキュメントでは install script または npm global install が案内されています。
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
または:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g opencode-ai
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
確認:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
opencode --version
|
|
37
|
+
opencode
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
OpenCode に model provider を接続します。
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
opencode auth login
|
|
44
|
+
opencode auth list
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
または OpenCode TUI で実行します。
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/connect
|
|
51
|
+
/models
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Model ID は `provider/model` 形式です。例: `openai/gpt-5.4-mini-fast`.
|
|
55
|
+
|
|
56
|
+
次に Java/Spring backend project で Persona Harness をインストールします。
|
|
15
57
|
|
|
16
58
|
```bash
|
|
17
59
|
npm install -D persona-harness@alpha
|
|
@@ -21,7 +63,7 @@ npx ph policy init
|
|
|
21
63
|
npx ph plan
|
|
22
64
|
```
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
Persona Harness 自体を開発する場合は local install を使います。
|
|
25
67
|
|
|
26
68
|
```bash
|
|
27
69
|
npm install -D /absolute/path/to/persona-harness
|
|
@@ -35,7 +77,7 @@ npx ph plan
|
|
|
35
77
|
|
|
36
78
|
```bash
|
|
37
79
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
38
|
-
"
|
|
80
|
+
"$(npx ph plan --prompt)"
|
|
39
81
|
```
|
|
40
82
|
|
|
41
83
|
plan が十分なら accept します。
|
|
@@ -49,7 +91,7 @@ npx ph plan --accept
|
|
|
49
91
|
|
|
50
92
|
```bash
|
|
51
93
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
52
|
-
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.mdを読み、plan が accepted であることを確認してから Java/Spring Gradle
|
|
94
|
+
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.mdを読み、plan が accepted であることを確認してから Java/Spring Gradle ベースで要求全体を実装してください。コマンド実行は可能なら npx ph bearshell を使い、実装後に npx ph bearshell gradle test, npx ph bearshell gradle build, 実行可能な Spring Boot app なら npx ph bearshell --shell 'gradle bootRun --args=\"--server.port=<port>\"', HTTP happy path と failure path smoke を実行してください。.persona/workflow/implementation-report.md と .persona/workflow/review-report.md を記入し、npx ph plan --report-filled implementation と npx ph plan --report-filled review を実行してください。"
|
|
53
95
|
```
|
|
54
96
|
|
|
55
97
|
## 提供するもの
|
|
@@ -79,6 +121,7 @@ opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
|
79
121
|
- test sufficiency の証明
|
|
80
122
|
- frontend, infra, desktop workflow の productization
|
|
81
123
|
- 最終的な TDD workflow
|
|
124
|
+
- OpenCode なしの独立 agent workflow
|
|
82
125
|
|
|
83
126
|
## Docs
|
|
84
127
|
|
package/README.ko.md
CHANGED
|
@@ -9,9 +9,51 @@ Persona Harness는 에이전트가 빈 프로젝트에서 시작해 backend 맥
|
|
|
9
9
|
> 현재 범위: Java/Spring backend MVP.
|
|
10
10
|
> frontend, infra, desktop app, AST/linter enforcement, 완전한 TDD workflow는 후속 트랙입니다.
|
|
11
11
|
|
|
12
|
+
## 요구사항
|
|
13
|
+
|
|
14
|
+
- Node.js 20+
|
|
15
|
+
- npm
|
|
16
|
+
- OpenCode terminal CLI
|
|
17
|
+
- OpenCode에 연결된 model/provider
|
|
18
|
+
|
|
12
19
|
## 빠른 시작
|
|
13
20
|
|
|
14
|
-
npm
|
|
21
|
+
먼저 OpenCode를 설치합니다. OpenCode 공식 문서 기준으로 install script 또는 npm global install을 사용할 수 있습니다.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
또는:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g opencode-ai
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
설치 확인:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
opencode --version
|
|
37
|
+
opencode
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
OpenCode에 model provider를 연결합니다.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
opencode auth login
|
|
44
|
+
opencode auth list
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
또는 OpenCode TUI에서 실행합니다.
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/connect
|
|
51
|
+
/models
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
모델 ID는 `provider/model` 형식입니다. 예: `openai/gpt-5.4-mini-fast`.
|
|
55
|
+
|
|
56
|
+
그 다음 Java/Spring backend 프로젝트에서 Persona Harness를 설치합니다.
|
|
15
57
|
|
|
16
58
|
```bash
|
|
17
59
|
npm install -D persona-harness@alpha
|
|
@@ -21,7 +63,7 @@ npx ph policy init
|
|
|
21
63
|
npx ph plan
|
|
22
64
|
```
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
Persona Harness 자체를 개발 중이면 local install을 사용합니다.
|
|
25
67
|
|
|
26
68
|
```bash
|
|
27
69
|
npm install -D /absolute/path/to/persona-harness
|
|
@@ -35,7 +77,7 @@ npx ph plan
|
|
|
35
77
|
|
|
36
78
|
```bash
|
|
37
79
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
38
|
-
"
|
|
80
|
+
"$(npx ph plan --prompt)"
|
|
39
81
|
```
|
|
40
82
|
|
|
41
83
|
계획이 충분하면 수락합니다.
|
|
@@ -49,7 +91,7 @@ npx ph plan --accept
|
|
|
49
91
|
|
|
50
92
|
```bash
|
|
51
93
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
52
|
-
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md를 읽고 plan이 accepted 상태인지 확인한 뒤 Java/Spring Gradle 기반으로 요구사항 전체를 구현해줘. 구현 후 gradle test, gradle build, gradle bootRun, HTTP happy path와 failure path smoke를
|
|
94
|
+
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md를 읽고 plan이 accepted 상태인지 확인한 뒤 Java/Spring Gradle 기반으로 요구사항 전체를 구현해줘. 명령 실행은 가능하면 npx ph bearshell로 하고, 구현 후 npx ph bearshell gradle test, npx ph bearshell gradle build, 실행 가능한 Spring Boot 앱이면 npx ph bearshell --shell 'gradle bootRun --args=\"--server.port=<port>\"', HTTP happy path와 failure path smoke를 실행해줘. .persona/workflow/implementation-report.md와 .persona/workflow/review-report.md를 채우고 npx ph plan --report-filled implementation 및 npx ph plan --report-filled review를 실행해줘."
|
|
53
95
|
```
|
|
54
96
|
|
|
55
97
|
## 제공하는 것
|
|
@@ -79,6 +121,7 @@ opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
|
79
121
|
- 테스트 충분성 증명
|
|
80
122
|
- frontend, infra, desktop workflow productization
|
|
81
123
|
- 최종 TDD workflow
|
|
124
|
+
- OpenCode 없는 독립 agent workflow
|
|
82
125
|
|
|
83
126
|
## 문서
|
|
84
127
|
|
package/README.md
CHANGED
|
@@ -9,9 +9,51 @@ Persona Harness helps an agent start from a clean project, ask for backend conte
|
|
|
9
9
|
> Current scope: Java/Spring backend MVP.
|
|
10
10
|
> Frontend, infra, desktop app, AST/linter enforcement, and full TDD workflow are future tracks.
|
|
11
11
|
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- Node.js 20+
|
|
15
|
+
- npm
|
|
16
|
+
- OpenCode terminal CLI
|
|
17
|
+
- A model/provider configured in OpenCode
|
|
18
|
+
|
|
12
19
|
## Quick Start
|
|
13
20
|
|
|
14
|
-
|
|
21
|
+
Install OpenCode first. The official OpenCode docs recommend the install script, or a global npm install:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
or:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g opencode-ai
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Verify it:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
opencode --version
|
|
37
|
+
opencode
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Connect a model provider in OpenCode:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
opencode auth login
|
|
44
|
+
opencode auth list
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
You can also open the OpenCode TUI and run:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/connect
|
|
51
|
+
/models
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Use model IDs in `provider/model` format, for example `openai/gpt-5.4-mini-fast`.
|
|
55
|
+
|
|
56
|
+
Then install Persona Harness in your Java/Spring backend project:
|
|
15
57
|
|
|
16
58
|
```bash
|
|
17
59
|
npm install -D persona-harness@alpha
|
|
@@ -21,7 +63,7 @@ npx ph policy init
|
|
|
21
63
|
npx ph plan
|
|
22
64
|
```
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
If you are developing Persona Harness itself, use a local install instead:
|
|
25
67
|
|
|
26
68
|
```bash
|
|
27
69
|
npm install -D /absolute/path/to/persona-harness
|
|
@@ -35,7 +77,19 @@ Then ask OpenCode to plan first:
|
|
|
35
77
|
|
|
36
78
|
```bash
|
|
37
79
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
38
|
-
"
|
|
80
|
+
"$(npx ph plan --prompt)"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
If you prefer the OpenCode TUI, open it from the project root:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
opencode
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Then paste the output of:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npx ph plan --prompt
|
|
39
93
|
```
|
|
40
94
|
|
|
41
95
|
Accept the plan when it is good enough:
|
|
@@ -49,7 +103,7 @@ Then ask OpenCode to implement:
|
|
|
49
103
|
|
|
50
104
|
```bash
|
|
51
105
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
52
|
-
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md를 읽고 plan이 accepted 상태인지 확인한 뒤 Java/Spring Gradle 기반으로 요구사항 전체를 구현해줘. 구현 후 gradle test, gradle build, gradle bootRun, HTTP happy path와 failure path smoke를
|
|
106
|
+
"README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md를 읽고 plan이 accepted 상태인지 확인한 뒤 Java/Spring Gradle 기반으로 요구사항 전체를 구현해줘. 명령 실행은 가능하면 npx ph bearshell로 하고, 구현 후 npx ph bearshell gradle test, npx ph bearshell gradle build, 실행 가능한 Spring Boot 앱이면 npx ph bearshell --shell 'gradle bootRun --args=\"--server.port=<port>\"', HTTP happy path와 failure path smoke를 실행해줘. .persona/workflow/implementation-report.md와 .persona/workflow/review-report.md를 채우고 npx ph plan --report-filled implementation 및 npx ph plan --report-filled review를 실행해줘."
|
|
53
107
|
```
|
|
54
108
|
|
|
55
109
|
## What You Get
|
|
@@ -58,7 +112,7 @@ opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
|
58
112
|
- `ph intake --interactive`: asks backend project questions and writes `.persona/project-profile.jsonc`.
|
|
59
113
|
- `ph policy init`: creates company and personal backend policy overlay files.
|
|
60
114
|
- `ph plan`: creates `.persona/workflow/plan.md` for the `blackbear` planning role.
|
|
61
|
-
- `ph bearshell`: runs bounded shell commands through the Persona Harness command surface.
|
|
115
|
+
- `ph bearshell`: runs timeout-bounded and output-bounded shell commands through the Persona Harness command surface.
|
|
62
116
|
- `ph history`: snapshots used workflow artifacts into `.persona/workflow/history/`.
|
|
63
117
|
- OpenCode injection: adds Java/Spring backend Clean Code context when the agent reads relevant project files.
|
|
64
118
|
|
|
@@ -79,6 +133,8 @@ opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
|
79
133
|
- It does not prove tests are sufficient.
|
|
80
134
|
- It does not productize frontend, infra, or desktop workflows yet.
|
|
81
135
|
- It is not the final TDD workflow yet.
|
|
136
|
+
- It is not useful as a full agent workflow without OpenCode.
|
|
137
|
+
- `ph bearshell` is not a sandbox. It limits runtime and output size, but commands still run on your machine.
|
|
82
138
|
|
|
83
139
|
## For Humans
|
|
84
140
|
|
package/README.zh-cn.md
CHANGED
|
@@ -9,9 +9,51 @@ Persona Harness 帮助代理从空项目开始,先收集 backend 背景,生
|
|
|
9
9
|
> 当前范围: Java/Spring backend MVP.
|
|
10
10
|
> frontend、infra、desktop app、AST/linter enforcement、完整 TDD workflow 都是后续方向。
|
|
11
11
|
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- Node.js 20+
|
|
15
|
+
- npm
|
|
16
|
+
- OpenCode terminal CLI
|
|
17
|
+
- 已在 OpenCode 中配置的 model/provider
|
|
18
|
+
|
|
12
19
|
## 快速开始
|
|
13
20
|
|
|
14
|
-
npm
|
|
21
|
+
先安装 OpenCode。OpenCode 官方文档推荐 install script,也可以使用 npm global install。
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
或者:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g opencode-ai
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
确认安装:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
opencode --version
|
|
37
|
+
opencode
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
在 OpenCode 中连接 model provider。
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
opencode auth login
|
|
44
|
+
opencode auth list
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
也可以在 OpenCode TUI 中运行:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/connect
|
|
51
|
+
/models
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Model ID 使用 `provider/model` 格式,例如 `openai/gpt-5.4-mini-fast`.
|
|
55
|
+
|
|
56
|
+
然后在 Java/Spring backend 项目中安装 Persona Harness。
|
|
15
57
|
|
|
16
58
|
```bash
|
|
17
59
|
npm install -D persona-harness@alpha
|
|
@@ -21,7 +63,7 @@ npx ph policy init
|
|
|
21
63
|
npx ph plan
|
|
22
64
|
```
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
如果你正在开发 Persona Harness 本身,请使用 local install。
|
|
25
67
|
|
|
26
68
|
```bash
|
|
27
69
|
npm install -D /absolute/path/to/persona-harness
|
|
@@ -35,7 +77,7 @@ npx ph plan
|
|
|
35
77
|
|
|
36
78
|
```bash
|
|
37
79
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
38
|
-
"
|
|
80
|
+
"$(npx ph plan --prompt)"
|
|
39
81
|
```
|
|
40
82
|
|
|
41
83
|
计划足够清楚后接受它:
|
|
@@ -49,7 +91,7 @@ npx ph plan --accept
|
|
|
49
91
|
|
|
50
92
|
```bash
|
|
51
93
|
opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
52
|
-
"请阅读 README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md,确认 plan 是 accepted 状态,然后基于 Java/Spring Gradle
|
|
94
|
+
"请阅读 README.md, .persona/project-profile.jsonc, .persona/policies, .persona/workflow/plan.md,确认 plan 是 accepted 状态,然后基于 Java/Spring Gradle 实现全部需求。执行命令时尽量使用 npx ph bearshell;实现后运行 npx ph bearshell gradle test, npx ph bearshell gradle build;如果是可运行的 Spring Boot app,运行 npx ph bearshell --shell 'gradle bootRun --args=\"--server.port=<port>\"';再执行 HTTP happy path 和 failure path smoke。填写 .persona/workflow/implementation-report.md 与 .persona/workflow/review-report.md,并运行 npx ph plan --report-filled implementation 和 npx ph plan --report-filled review。"
|
|
53
95
|
```
|
|
54
96
|
|
|
55
97
|
## 提供内容
|
|
@@ -79,6 +121,7 @@ opencode run --dir . --model <model> --dangerously-skip-permissions \
|
|
|
79
121
|
- 测试充分性证明
|
|
80
122
|
- frontend, infra, desktop workflow productization
|
|
81
123
|
- 最终 TDD workflow
|
|
124
|
+
- 没有 OpenCode 的独立 agent workflow
|
|
82
125
|
|
|
83
126
|
## Docs
|
|
84
127
|
|
package/dist/cli/bearshell.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import process from "node:process";
|
|
3
3
|
const DEFAULT_BUDGET = 20_000;
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
4
5
|
const MIN_BUDGET = 80;
|
|
6
|
+
const MIN_TIMEOUT_MS = 1;
|
|
5
7
|
export function bearshellUsage(invocation = "ph") {
|
|
6
8
|
return [
|
|
7
9
|
`Usage: ${invocation} bearshell <command> [args...]`,
|
|
@@ -14,6 +16,7 @@ export function bearshellUsage(invocation = "ph") {
|
|
|
14
16
|
"Environment:",
|
|
15
17
|
"- PH_BEARSHELL_CONDENSE=0 disables output condensation.",
|
|
16
18
|
"- PH_BEARSHELL_CONDENSE_BUDGET overrides the default condensation budget.",
|
|
19
|
+
"- PH_BEARSHELL_TIMEOUT_MS overrides the default 30000ms command timeout.",
|
|
17
20
|
"- PH_BEARSHELL_SPARK=0 is accepted for OMO compatibility; this MVP uses deterministic condensation only.",
|
|
18
21
|
].join("\n");
|
|
19
22
|
}
|
|
@@ -33,22 +36,30 @@ export function runBearshell(args, options = {}) {
|
|
|
33
36
|
encoding: "utf8",
|
|
34
37
|
env: childEnv,
|
|
35
38
|
shell: true,
|
|
39
|
+
timeout: parsed.timeoutMs,
|
|
40
|
+
killSignal: "SIGTERM",
|
|
36
41
|
})
|
|
37
42
|
: spawnSync(parsed.command, [...parsed.args], {
|
|
38
43
|
cwd: options.cwd,
|
|
39
44
|
encoding: "utf8",
|
|
40
45
|
env: childEnv,
|
|
41
46
|
shell: false,
|
|
47
|
+
timeout: parsed.timeoutMs,
|
|
48
|
+
killSignal: "SIGTERM",
|
|
42
49
|
});
|
|
43
50
|
const status = spawned.status ?? signalExitCode(spawned.signal);
|
|
44
51
|
const stdout = maybeCondense(toOutputString(spawned.stdout), parsed.budget, env);
|
|
45
|
-
const stderr = maybeCondense(spawnErrorMessage(parsed.command, spawned.error) ?? toOutputString(spawned.stderr), parsed.budget, env);
|
|
52
|
+
const stderr = maybeCondense(spawnErrorMessage(parsed.command, spawned.error, parsed.timeoutMs) ?? toOutputString(spawned.stderr), parsed.budget, env);
|
|
46
53
|
return formatResult({ status, stdout, stderr }, parsed.json);
|
|
47
54
|
}
|
|
48
55
|
function parseBearshellArgs(args, env) {
|
|
49
56
|
let json = false;
|
|
50
57
|
let shell = false;
|
|
51
58
|
let budget = readBudget(env["PH_BEARSHELL_CONDENSE_BUDGET"]) ?? DEFAULT_BUDGET;
|
|
59
|
+
const timeoutMs = readTimeoutMs(env["PH_BEARSHELL_TIMEOUT_MS"]);
|
|
60
|
+
if (timeoutMs === null) {
|
|
61
|
+
return { kind: "invalid", json, message: "PH_BEARSHELL_TIMEOUT_MS requires a positive integer" };
|
|
62
|
+
}
|
|
52
63
|
const positional = [];
|
|
53
64
|
for (let index = 0; index < args.length; index += 1) {
|
|
54
65
|
const arg = args[index];
|
|
@@ -68,7 +79,7 @@ function parseBearshellArgs(args, env) {
|
|
|
68
79
|
if (command === undefined || command.length === 0) {
|
|
69
80
|
return { kind: "invalid", json, message: "--shell requires a command string" };
|
|
70
81
|
}
|
|
71
|
-
return { kind: "exec", json, shell: true, budget, command, args: [] };
|
|
82
|
+
return { kind: "exec", json, shell: true, budget, timeoutMs, command, args: [] };
|
|
72
83
|
}
|
|
73
84
|
if (arg === "--budget") {
|
|
74
85
|
const value = args[index + 1];
|
|
@@ -92,7 +103,7 @@ function parseBearshellArgs(args, env) {
|
|
|
92
103
|
if (command === undefined) {
|
|
93
104
|
return { kind: "help", json };
|
|
94
105
|
}
|
|
95
|
-
return { kind: "exec", json, shell: false, budget, command, args: positional.slice(1) };
|
|
106
|
+
return { kind: "exec", json, shell: false, budget, timeoutMs, command, args: positional.slice(1) };
|
|
96
107
|
}
|
|
97
108
|
function readBudget(value) {
|
|
98
109
|
if (value === undefined || value.trim().length === 0) {
|
|
@@ -104,6 +115,16 @@ function readBudget(value) {
|
|
|
104
115
|
}
|
|
105
116
|
return Math.max(parsed, MIN_BUDGET);
|
|
106
117
|
}
|
|
118
|
+
function readTimeoutMs(value) {
|
|
119
|
+
if (value === undefined || value.trim().length === 0) {
|
|
120
|
+
return DEFAULT_TIMEOUT_MS;
|
|
121
|
+
}
|
|
122
|
+
const parsed = Number(value);
|
|
123
|
+
if (!Number.isInteger(parsed) || parsed < MIN_TIMEOUT_MS) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return parsed;
|
|
127
|
+
}
|
|
107
128
|
function maybeCondense(output, budget, env) {
|
|
108
129
|
if (env["PH_BEARSHELL_CONDENSE"] === "0") {
|
|
109
130
|
return output;
|
|
@@ -137,12 +158,21 @@ function formatResult(result, json) {
|
|
|
137
158
|
function toOutputString(value) {
|
|
138
159
|
return typeof value === "string" ? value : "";
|
|
139
160
|
}
|
|
140
|
-
function spawnErrorMessage(command, error) {
|
|
161
|
+
function spawnErrorMessage(command, error, timeoutMs) {
|
|
141
162
|
if (error === undefined) {
|
|
142
163
|
return undefined;
|
|
143
164
|
}
|
|
165
|
+
if (errorCode(error) === "ETIMEDOUT") {
|
|
166
|
+
return `[bearshell] command timed out after ${timeoutMs}ms: ${command}\n`;
|
|
167
|
+
}
|
|
144
168
|
return `[bearshell] failed to launch ${command}: ${error.message}\n`;
|
|
145
169
|
}
|
|
170
|
+
function errorCode(error) {
|
|
171
|
+
if (!("code" in error)) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
return typeof error.code === "string" ? error.code : undefined;
|
|
175
|
+
}
|
|
146
176
|
function signalExitCode(signal) {
|
|
147
177
|
if (signal === null) {
|
|
148
178
|
return 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bearshell.js","sourceRoot":"","sources":["../../src/cli/bearshell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,OAAO,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"bearshell.js","sourceRoot":"","sources":["../../src/cli/bearshell.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/history.js
CHANGED
|
@@ -114,7 +114,7 @@ export function archiveWorkflowHistory(options = {}, archiveIdInput) {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
if (archivedFiles.length === 0) {
|
|
117
|
-
throw new WorkflowHistoryError(`No workflow artifacts found under ${WORKFLOW_DIR}. Run ph plan first.`);
|
|
117
|
+
throw new WorkflowHistoryError(`No workflow artifacts found under ${WORKFLOW_DIR}. Run npx ph plan first.`);
|
|
118
118
|
}
|
|
119
119
|
mkdirSync(archiveDir, { recursive: true });
|
|
120
120
|
for (const filename of archivedFiles) {
|
package/dist/cli/history.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/init.js
CHANGED
|
@@ -155,7 +155,19 @@ export function formatInitResult(result) {
|
|
|
155
155
|
...backupLines,
|
|
156
156
|
"",
|
|
157
157
|
"Next:",
|
|
158
|
-
|
|
158
|
+
"1. Run `npx ph intake --interactive`.",
|
|
159
|
+
"2. Run `npx ph policy init` if you want company or personal backend guidance.",
|
|
160
|
+
"3. Run `npx ph plan`.",
|
|
161
|
+
"4. Review `.persona/workflow/plan.md`, then run `npx ph plan --accept` or `npx ph plan --revise`.",
|
|
162
|
+
"",
|
|
163
|
+
"OpenCode TUI:",
|
|
164
|
+
"- Run `opencode` in this project.",
|
|
165
|
+
"- Ask it to read README.md and `.persona/workflow/plan.md` first.",
|
|
166
|
+
"- Paste `npx ph plan --prompt` if you want the plan-only prompt inside the TUI.",
|
|
167
|
+
"",
|
|
168
|
+
"OpenCode CLI:",
|
|
169
|
+
"- Plan first: `opencode run --dir . --model <model> --dangerously-skip-permissions \"$(npx ph plan --prompt)\"`",
|
|
170
|
+
"- Implement only after the plan is accepted.",
|
|
159
171
|
"",
|
|
160
172
|
"Scope:",
|
|
161
173
|
"- Java/Spring backend Clean Code injection",
|