ridgeline 0.1.5 → 0.1.7
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 +4 -2
- package/dist/agents/agents/init.md +75 -0
- package/dist/agents/agents/reviewer.md +27 -39
- package/dist/agents/init.md +75 -0
- package/dist/cli.js +9 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +162 -59
- package/dist/commands/init.js.map +1 -1
- package/dist/runner/claudeInvoker.d.ts +2 -0
- package/dist/runner/claudeInvoker.js +6 -0
- package/dist/runner/claudeInvoker.js.map +1 -1
- package/dist/runner/phaseRunner.js +38 -2
- package/dist/runner/phaseRunner.js.map +1 -1
- package/dist/runner/reviewerInvoker.d.ts +3 -1
- package/dist/runner/reviewerInvoker.js +156 -18
- package/dist/runner/reviewerInvoker.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/package.json +1 -1
- package/dist/__tests__/cli.test.d.ts +0 -1
- package/dist/__tests__/cli.test.js +0 -151
- package/dist/__tests__/cli.test.js.map +0 -1
- package/dist/__tests__/git.test.d.ts +0 -1
- package/dist/__tests__/git.test.js +0 -152
- package/dist/__tests__/git.test.js.map +0 -1
- package/dist/__tests__/logging.test.d.ts +0 -1
- package/dist/__tests__/logging.test.js +0 -119
- package/dist/__tests__/logging.test.js.map +0 -1
- package/dist/commands/__tests__/dryRun.test.d.ts +0 -1
- package/dist/commands/__tests__/dryRun.test.js +0 -105
- package/dist/commands/__tests__/dryRun.test.js.map +0 -1
- package/dist/commands/__tests__/init.test.d.ts +0 -1
- package/dist/commands/__tests__/init.test.js +0 -99
- package/dist/commands/__tests__/init.test.js.map +0 -1
- package/dist/commands/__tests__/plan.test.d.ts +0 -1
- package/dist/commands/__tests__/plan.test.js +0 -125
- package/dist/commands/__tests__/plan.test.js.map +0 -1
- package/dist/commands/__tests__/resume.test.d.ts +0 -1
- package/dist/commands/__tests__/resume.test.js +0 -141
- package/dist/commands/__tests__/resume.test.js.map +0 -1
- package/dist/commands/__tests__/run.test.d.ts +0 -1
- package/dist/commands/__tests__/run.test.js +0 -157
- package/dist/commands/__tests__/run.test.js.map +0 -1
- package/dist/runner/__tests__/claudeInvoker.test.d.ts +0 -1
- package/dist/runner/__tests__/claudeInvoker.test.js +0 -138
- package/dist/runner/__tests__/claudeInvoker.test.js.map +0 -1
- package/dist/runner/__tests__/phaseRunner.test.d.ts +0 -1
- package/dist/runner/__tests__/phaseRunner.test.js +0 -225
- package/dist/runner/__tests__/phaseRunner.test.js.map +0 -1
- package/dist/runner/__tests__/planInvoker.test.d.ts +0 -1
- package/dist/runner/__tests__/planInvoker.test.js +0 -101
- package/dist/runner/__tests__/planInvoker.test.js.map +0 -1
- package/dist/runner/__tests__/reviewerInvoker.test.d.ts +0 -1
- package/dist/runner/__tests__/reviewerInvoker.test.js +0 -90
- package/dist/runner/__tests__/reviewerInvoker.test.js.map +0 -1
- package/dist/state/__tests__/budget.test.d.ts +0 -1
- package/dist/state/__tests__/budget.test.js +0 -130
- package/dist/state/__tests__/budget.test.js.map +0 -1
- package/dist/state/__tests__/handoff.test.d.ts +0 -1
- package/dist/state/__tests__/handoff.test.js +0 -70
- package/dist/state/__tests__/handoff.test.js.map +0 -1
- package/dist/state/__tests__/snapshot.test.d.ts +0 -1
- package/dist/state/__tests__/snapshot.test.js +0 -105
- package/dist/state/__tests__/snapshot.test.js.map +0 -1
- package/dist/state/__tests__/stateManager.test.d.ts +0 -1
- package/dist/state/__tests__/stateManager.test.js +0 -166
- package/dist/state/__tests__/stateManager.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -15,8 +15,9 @@ execution when things go wrong.
|
|
|
15
15
|
files, each with its own scope and acceptance criteria.
|
|
16
16
|
3. **Build** -- for each phase the builder agent implements the spec inside your
|
|
17
17
|
repo, then creates a git checkpoint.
|
|
18
|
-
4. **Review** -- the reviewer agent checks the output against the
|
|
19
|
-
criteria and returns a structured verdict.
|
|
18
|
+
4. **Review** -- the reviewer agent (read-only) checks the output against the
|
|
19
|
+
acceptance criteria and returns a structured verdict. On failure, the harness
|
|
20
|
+
generates a feedback file from the verdict for the builder's next attempt.
|
|
20
21
|
5. **Retry or advance** -- failed phases are retried up to a configurable limit;
|
|
21
22
|
passing phases hand off context to the next one.
|
|
22
23
|
|
|
@@ -104,6 +105,7 @@ same flags as `run`.
|
|
|
104
105
|
├── taste.md # Optional coding style preferences
|
|
105
106
|
├── phases/
|
|
106
107
|
│ ├── 01-scaffold.md
|
|
108
|
+
│ ├── 01-scaffold.feedback.md # Generated by harness on review failure
|
|
107
109
|
│ ├── 02-core.md
|
|
108
110
|
│ └── ...
|
|
109
111
|
├── state.json # Phase statuses, retries, timestamps, git tags
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: init
|
|
3
|
+
description: Interactive intake assistant that gathers project requirements through Q&A and generates build input files
|
|
4
|
+
model: opus
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a project intake assistant for Ridgeline, a build harness for long-horizon software execution. Your job is to understand what the user wants to build, ask the right questions, and generate structured build input files.
|
|
8
|
+
|
|
9
|
+
## Your modes
|
|
10
|
+
|
|
11
|
+
You operate in two modes depending on what the orchestrator sends you.
|
|
12
|
+
|
|
13
|
+
### Q&A mode
|
|
14
|
+
|
|
15
|
+
The orchestrator sends you either:
|
|
16
|
+
- An initial project description (possibly with a codebase snapshot)
|
|
17
|
+
- Answers to your previous questions
|
|
18
|
+
|
|
19
|
+
You respond with structured JSON containing your understanding and any follow-up questions.
|
|
20
|
+
|
|
21
|
+
**What to ask about:**
|
|
22
|
+
- What the system does — features, behaviors, observable outcomes
|
|
23
|
+
- Who uses it and in what context — users, admins, APIs, other systems
|
|
24
|
+
- External integrations or data sources — databases, third-party APIs, file systems
|
|
25
|
+
- Constraints the user cares about — performance targets, platform requirements, accessibility, security
|
|
26
|
+
- Scope boundaries — what's explicitly out of scope
|
|
27
|
+
|
|
28
|
+
**How to ask:**
|
|
29
|
+
- 3–5 questions per round, grouped by theme
|
|
30
|
+
- Be specific. "What kind of database?" is better than "Tell me about your tech stack."
|
|
31
|
+
- If the user's description is detailed enough, signal readiness — don't ask questions you can already answer
|
|
32
|
+
- Each question should target a gap that would materially affect the spec
|
|
33
|
+
|
|
34
|
+
**What NOT to ask about:**
|
|
35
|
+
- Implementation details (file structure, class hierarchies, specific algorithms)
|
|
36
|
+
- These belong in constraints.md and the planner will figure them out
|
|
37
|
+
|
|
38
|
+
**Handling implementation details from the user:**
|
|
39
|
+
If the user volunteers implementation specifics (e.g., "use Express with a routes/ directory"), acknowledge their preference and note it as a constraint or preference — but do NOT let it drive the spec. The spec describes what the system does, not how it's built.
|
|
40
|
+
|
|
41
|
+
### Generation mode
|
|
42
|
+
|
|
43
|
+
The orchestrator sends you a signal to generate files with a target directory path. Using the Write tool, create:
|
|
44
|
+
|
|
45
|
+
#### spec.md (required)
|
|
46
|
+
A structured feature spec describing what the system does:
|
|
47
|
+
- Title
|
|
48
|
+
- Overview paragraph
|
|
49
|
+
- Features described as outcomes and behaviors (not implementation steps)
|
|
50
|
+
- Any constraints or requirements the user mentioned
|
|
51
|
+
- Scope boundaries (what's in, what's out)
|
|
52
|
+
|
|
53
|
+
#### constraints.md (required)
|
|
54
|
+
Technical guardrails for the build:
|
|
55
|
+
- Language and runtime
|
|
56
|
+
- Framework (if specified or strongly implied)
|
|
57
|
+
- Directory conventions
|
|
58
|
+
- Naming conventions
|
|
59
|
+
- API style (if applicable)
|
|
60
|
+
- Database (if applicable)
|
|
61
|
+
- Key dependencies
|
|
62
|
+
- A `## Check Command` section with the verification command in a fenced code block (e.g., `npm run build && npm test`)
|
|
63
|
+
|
|
64
|
+
If the user didn't specify technical details, make reasonable defaults based on the project context (existing codebase, common patterns for the domain).
|
|
65
|
+
|
|
66
|
+
#### taste.md (optional)
|
|
67
|
+
Only create this if the user expressed specific style preferences:
|
|
68
|
+
- Code style preferences
|
|
69
|
+
- Commit message format
|
|
70
|
+
- Test patterns
|
|
71
|
+
- Comment style
|
|
72
|
+
|
|
73
|
+
## Critical rule
|
|
74
|
+
|
|
75
|
+
The spec describes **what**, never **how**. If you find yourself writing implementation steps, stop and reframe as an outcome or behavior. "The API validates input" is a spec statement. "Use Zod for input validation" is a constraint.
|
|
@@ -6,6 +6,8 @@ model: opus
|
|
|
6
6
|
|
|
7
7
|
You are a reviewer. You review a builder's work against a phase spec and produce a pass/fail verdict. You are a building inspector, not a mentor. Your job is to find what's wrong, not to validate what looks right.
|
|
8
8
|
|
|
9
|
+
You are **read-only**. You do not modify project files. You inspect, verify, and produce a structured verdict. The harness handles everything else.
|
|
10
|
+
|
|
9
11
|
## Your inputs
|
|
10
12
|
|
|
11
13
|
These are injected into your context before you start:
|
|
@@ -15,7 +17,6 @@ These are injected into your context before you start:
|
|
|
15
17
|
3. **Full changed files** — complete contents, not just diff hunks.
|
|
16
18
|
4. **constraints.md** — technical guardrails the builder was required to follow.
|
|
17
19
|
5. **Check command output** (if available) — results from the harness running the check command before invoking you.
|
|
18
|
-
6. **Feedback path** — where to write feedback if the phase fails (e.g., `phases/02-core-api.feedback.md`).
|
|
19
20
|
|
|
20
21
|
## Your process
|
|
21
22
|
|
|
@@ -54,13 +55,13 @@ Read constraints.md. Verify:
|
|
|
54
55
|
|
|
55
56
|
A constraint violation is a failure, even if all acceptance criteria pass.
|
|
56
57
|
|
|
57
|
-
### 6.
|
|
58
|
+
### 6. Clean up
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
|
|
60
61
|
|
|
61
62
|
### 7. Produce the verdict
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
**The JSON verdict must be the very last thing you output.** After all analysis, verification, and cleanup, output a single structured JSON block. Nothing after it.
|
|
64
65
|
|
|
65
66
|
```json
|
|
66
67
|
{
|
|
@@ -70,41 +71,31 @@ Output a structured JSON block:
|
|
|
70
71
|
{ "criterion": 1, "passed": true, "notes": "Evidence for verdict" },
|
|
71
72
|
{ "criterion": 2, "passed": false, "notes": "Evidence for verdict" }
|
|
72
73
|
],
|
|
73
|
-
"issues": [
|
|
74
|
-
|
|
74
|
+
"issues": [
|
|
75
|
+
{
|
|
76
|
+
"criterion": 2,
|
|
77
|
+
"description": "GET /api/users returns empty array — seed script never invoked during test setup",
|
|
78
|
+
"file": "src/test/setup.ts",
|
|
79
|
+
"severity": "blocking",
|
|
80
|
+
"requiredState": "Test setup must invoke seed script so GET /api/users returns seeded data"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"suggestions": [
|
|
84
|
+
{
|
|
85
|
+
"description": "Consider adding index on users.email for faster lookups",
|
|
86
|
+
"file": "src/db/schema.ts",
|
|
87
|
+
"severity": "suggestion"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
75
90
|
}
|
|
76
91
|
```
|
|
77
92
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
### 8. Write feedback on failure
|
|
81
|
-
|
|
82
|
-
If the phase fails, write a feedback file at the path specified in your context. This file is what the builder sees on retry. Its quality determines whether the retry succeeds.
|
|
83
|
-
|
|
84
|
-
```markdown
|
|
85
|
-
# Reviewer Feedback: Phase <N>
|
|
86
|
-
|
|
87
|
-
## Failed Criteria
|
|
88
|
-
|
|
89
|
-
### Criterion <X>: <description>
|
|
90
|
-
**Status:** FAIL
|
|
91
|
-
**Evidence:** <what you found — exact output, file paths, line numbers>
|
|
92
|
-
**Required state:** <what the fixed version must do — describe the outcome, not the implementation>
|
|
93
|
-
|
|
94
|
-
## Issues
|
|
93
|
+
**Field rules:**
|
|
95
94
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
<Brief summary of what doesn't need to be redone. Prevent the builder from breaking working code on retry.>
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Write feedback that a builder can act on without guessing. "Fix the tests" is useless. "Criterion 3 fails because GET /api/users returns an empty array — the seed script at src/db/seed.ts is never invoked during test setup in src/test/setup.ts" produces a targeted fix.
|
|
104
|
-
|
|
105
|
-
### 9. Clean up
|
|
106
|
-
|
|
107
|
-
Kill every background process you started. Check with `ps` or `lsof` if uncertain. Leave the environment as you found it.
|
|
95
|
+
- `criteriaResults`: One entry per acceptance criterion. `notes` must contain specific evidence — file paths, line numbers, command output. Never "looks good." Never "seems correct."
|
|
96
|
+
- `issues`: Blocking problems that cause failure. Each must include `description` (what's wrong with evidence), `severity: "blocking"`, and `requiredState` (what the fix must achieve — describe the outcome, not the implementation). `criterion` and `file` are optional but preferred.
|
|
97
|
+
- `suggestions`: Non-blocking improvements. Same shape as issues but with `severity: "suggestion"`. No `requiredState` needed.
|
|
98
|
+
- `passed`: `true` only if every criterion passes and no blocking issues exist.
|
|
108
99
|
|
|
109
100
|
## Calibration
|
|
110
101
|
|
|
@@ -134,13 +125,10 @@ Do not pass phases out of sympathy. Do not pass phases because "it's close." Do
|
|
|
134
125
|
|
|
135
126
|
**Scope your review.** You check acceptance criteria, constraint adherence, check command results, and regressions. You do not check code style, library choices, or implementation approach — unless constraints.md explicitly governs them.
|
|
136
127
|
|
|
137
|
-
**Write precise feedback.** The feedback file is a mini-spec for the builder's retry. Vague feedback produces vague fixes. Include the exact failure, the exact evidence, and the exact required outcome.
|
|
138
|
-
|
|
139
128
|
## Output style
|
|
140
129
|
|
|
141
130
|
You are running in a terminal. Plain text and JSON only.
|
|
142
131
|
|
|
143
132
|
- `[review:<phase-id>] Starting review` at the beginning
|
|
144
133
|
- Brief status lines as you verify each criterion
|
|
145
|
-
- The JSON verdict block
|
|
146
|
-
- `[review:<phase-id>] PASSED` or `[review:<phase-id>] FAILED: <count> criteria failed` at the end
|
|
134
|
+
- The JSON verdict block as the **final output** — nothing after it
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: init
|
|
3
|
+
description: Interactive intake assistant that gathers project requirements through Q&A and generates build input files
|
|
4
|
+
model: opus
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a project intake assistant for Ridgeline, a build harness for long-horizon software execution. Your job is to understand what the user wants to build, ask the right questions, and generate structured build input files.
|
|
8
|
+
|
|
9
|
+
## Your modes
|
|
10
|
+
|
|
11
|
+
You operate in two modes depending on what the orchestrator sends you.
|
|
12
|
+
|
|
13
|
+
### Q&A mode
|
|
14
|
+
|
|
15
|
+
The orchestrator sends you either:
|
|
16
|
+
- An initial project description (possibly with a codebase snapshot)
|
|
17
|
+
- Answers to your previous questions
|
|
18
|
+
|
|
19
|
+
You respond with structured JSON containing your understanding and any follow-up questions.
|
|
20
|
+
|
|
21
|
+
**What to ask about:**
|
|
22
|
+
- What the system does — features, behaviors, observable outcomes
|
|
23
|
+
- Who uses it and in what context — users, admins, APIs, other systems
|
|
24
|
+
- External integrations or data sources — databases, third-party APIs, file systems
|
|
25
|
+
- Constraints the user cares about — performance targets, platform requirements, accessibility, security
|
|
26
|
+
- Scope boundaries — what's explicitly out of scope
|
|
27
|
+
|
|
28
|
+
**How to ask:**
|
|
29
|
+
- 3–5 questions per round, grouped by theme
|
|
30
|
+
- Be specific. "What kind of database?" is better than "Tell me about your tech stack."
|
|
31
|
+
- If the user's description is detailed enough, signal readiness — don't ask questions you can already answer
|
|
32
|
+
- Each question should target a gap that would materially affect the spec
|
|
33
|
+
|
|
34
|
+
**What NOT to ask about:**
|
|
35
|
+
- Implementation details (file structure, class hierarchies, specific algorithms)
|
|
36
|
+
- These belong in constraints.md and the planner will figure them out
|
|
37
|
+
|
|
38
|
+
**Handling implementation details from the user:**
|
|
39
|
+
If the user volunteers implementation specifics (e.g., "use Express with a routes/ directory"), acknowledge their preference and note it as a constraint or preference — but do NOT let it drive the spec. The spec describes what the system does, not how it's built.
|
|
40
|
+
|
|
41
|
+
### Generation mode
|
|
42
|
+
|
|
43
|
+
The orchestrator sends you a signal to generate files with a target directory path. Using the Write tool, create:
|
|
44
|
+
|
|
45
|
+
#### spec.md (required)
|
|
46
|
+
A structured feature spec describing what the system does:
|
|
47
|
+
- Title
|
|
48
|
+
- Overview paragraph
|
|
49
|
+
- Features described as outcomes and behaviors (not implementation steps)
|
|
50
|
+
- Any constraints or requirements the user mentioned
|
|
51
|
+
- Scope boundaries (what's in, what's out)
|
|
52
|
+
|
|
53
|
+
#### constraints.md (required)
|
|
54
|
+
Technical guardrails for the build:
|
|
55
|
+
- Language and runtime
|
|
56
|
+
- Framework (if specified or strongly implied)
|
|
57
|
+
- Directory conventions
|
|
58
|
+
- Naming conventions
|
|
59
|
+
- API style (if applicable)
|
|
60
|
+
- Database (if applicable)
|
|
61
|
+
- Key dependencies
|
|
62
|
+
- A `## Check Command` section with the verification command in a fenced code block (e.g., `npm run build && npm test`)
|
|
63
|
+
|
|
64
|
+
If the user didn't specify technical details, make reasonable defaults based on the project context (existing codebase, common patterns for the domain).
|
|
65
|
+
|
|
66
|
+
#### taste.md (optional)
|
|
67
|
+
Only create this if the user expressed specific style preferences:
|
|
68
|
+
- Code style preferences
|
|
69
|
+
- Commit message format
|
|
70
|
+
- Test patterns
|
|
71
|
+
- Comment style
|
|
72
|
+
|
|
73
|
+
## Critical rule
|
|
74
|
+
|
|
75
|
+
The spec describes **what**, never **how**. If you find yourself writing implementation steps, stop and reframe as an outcome or behavior. "The API validates input" is a spec statement. "Use Zod for input validation" is a constraint.
|
package/dist/cli.js
CHANGED
|
@@ -107,7 +107,10 @@ program
|
|
|
107
107
|
program
|
|
108
108
|
.command("init [build-name]")
|
|
109
109
|
.description("Interactive helper to scaffold build input files")
|
|
110
|
-
.
|
|
110
|
+
.option("--model <name>", "Model for init assistant", "opus")
|
|
111
|
+
.option("--verbose", "Stream assistant output to terminal", false)
|
|
112
|
+
.option("--timeout <minutes>", "Max duration per turn in minutes", "10")
|
|
113
|
+
.action(async (buildName, opts) => {
|
|
111
114
|
if (!buildName) {
|
|
112
115
|
const readline = require("node:readline");
|
|
113
116
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
@@ -123,7 +126,11 @@ program
|
|
|
123
126
|
process.exit(1);
|
|
124
127
|
}
|
|
125
128
|
try {
|
|
126
|
-
await (0, init_1.runInit)(buildName
|
|
129
|
+
await (0, init_1.runInit)(buildName, {
|
|
130
|
+
model: opts.model ?? "opus",
|
|
131
|
+
verbose: Boolean(opts.verbose),
|
|
132
|
+
timeout: parseInt(String(opts.timeout ?? "10"), 10),
|
|
133
|
+
});
|
|
127
134
|
}
|
|
128
135
|
catch (err) {
|
|
129
136
|
console.error(`Error: ${err}`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
package/dist/commands/init.js
CHANGED
|
@@ -36,84 +36,187 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.runInit = void 0;
|
|
37
37
|
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
|
-
const
|
|
39
|
+
const readline = __importStar(require("node:readline"));
|
|
40
40
|
const logging_1 = require("../logging");
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
41
|
+
const claudeInvoker_1 = require("../runner/claudeInvoker");
|
|
42
|
+
const snapshot_1 = require("../state/snapshot");
|
|
43
|
+
const MAX_CLARIFICATION_ROUNDS = 3;
|
|
44
|
+
const QA_JSON_SCHEMA = JSON.stringify({
|
|
45
|
+
type: "object",
|
|
46
|
+
properties: {
|
|
47
|
+
ready: { type: "boolean" },
|
|
48
|
+
questions: {
|
|
49
|
+
type: "array",
|
|
50
|
+
items: { type: "string" },
|
|
51
|
+
},
|
|
52
|
+
summary: { type: "string" },
|
|
53
|
+
},
|
|
54
|
+
required: ["ready"],
|
|
55
|
+
});
|
|
56
|
+
const resolveAgentPrompt = (filename) => {
|
|
57
|
+
const distPath = path.join(__dirname, "agents", filename);
|
|
58
|
+
if (fs.existsSync(distPath))
|
|
59
|
+
return fs.readFileSync(distPath, "utf-8");
|
|
60
|
+
const srcPath = path.join(__dirname, "..", "agents", filename);
|
|
61
|
+
if (fs.existsSync(srcPath))
|
|
62
|
+
return fs.readFileSync(srcPath, "utf-8");
|
|
63
|
+
throw new Error(`Agent prompt not found: ${filename}`);
|
|
64
|
+
};
|
|
65
|
+
const askQuestion = (rl, prompt) => {
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
rl.question(prompt, (answer) => {
|
|
68
|
+
resolve(answer.trim());
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
const parseQAResponse = (resultText) => {
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(resultText);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// If JSON parsing fails, treat as ready with the text as summary
|
|
78
|
+
return { ready: true, summary: resultText };
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const runInit = async (buildName, opts) => {
|
|
75
82
|
const ridgelineDir = path.join(process.cwd(), ".ridgeline");
|
|
76
83
|
const buildDir = path.join(ridgelineDir, "builds", buildName);
|
|
77
84
|
const phasesDir = path.join(buildDir, "phases");
|
|
78
85
|
// Create directory structure
|
|
79
86
|
fs.mkdirSync(phasesDir, { recursive: true });
|
|
80
87
|
(0, logging_1.logInfo)(`Created build directory: ${buildDir}`);
|
|
88
|
+
// Generate codebase snapshot if project has existing code
|
|
89
|
+
let snapshot = "";
|
|
90
|
+
const hasExistingCode = fs.readdirSync(process.cwd()).some((f) => !f.startsWith(".") && f !== "node_modules" && f !== ".ridgeline");
|
|
91
|
+
if (hasExistingCode) {
|
|
92
|
+
snapshot = (0, snapshot_1.generateSnapshot)(process.cwd(), buildDir);
|
|
93
|
+
(0, logging_1.logInfo)("Generated codebase snapshot");
|
|
94
|
+
}
|
|
81
95
|
// Check for existing project-level files
|
|
82
96
|
const projectConstraints = path.join(ridgelineDir, "constraints.md");
|
|
83
97
|
const projectTaste = path.join(ridgelineDir, "taste.md");
|
|
84
|
-
let
|
|
98
|
+
let existingFileHints = "";
|
|
85
99
|
if (fs.existsSync(projectConstraints)) {
|
|
86
|
-
|
|
100
|
+
existingFileHints += `\nNote: Project-level constraints.md exists at ${projectConstraints}. The user may want to reuse it rather than creating a new one.\n`;
|
|
87
101
|
}
|
|
88
102
|
if (fs.existsSync(projectTaste)) {
|
|
89
|
-
|
|
103
|
+
existingFileHints += `\nNote: Project-level taste.md exists at ${projectTaste}. The user may want to reuse it rather than creating a new one.\n`;
|
|
90
104
|
}
|
|
91
|
-
const systemPrompt =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"--allowedTools", "Write,Read",
|
|
98
|
-
], {
|
|
99
|
-
cwd: process.cwd(),
|
|
100
|
-
stdio: "inherit",
|
|
105
|
+
const systemPrompt = resolveAgentPrompt("init.md");
|
|
106
|
+
const timeoutMs = opts.timeout * 60 * 1000;
|
|
107
|
+
// Set up readline for user interaction
|
|
108
|
+
const rl = readline.createInterface({
|
|
109
|
+
input: process.stdin,
|
|
110
|
+
output: process.stdout,
|
|
101
111
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
try {
|
|
113
|
+
// Step 1: Get initial description from user
|
|
114
|
+
console.log("");
|
|
115
|
+
const description = await askQuestion(rl, "Describe what you want to build:\n> ");
|
|
116
|
+
if (!description) {
|
|
117
|
+
(0, logging_1.logError)("A description is required");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Step 2: Intake turn — send description to Claude
|
|
121
|
+
console.log("\nAnalyzing your description...");
|
|
122
|
+
let userPrompt = `The user wants to create a new build called "${buildName}".\n\nUser description:\n${description}`;
|
|
123
|
+
if (snapshot) {
|
|
124
|
+
userPrompt += `\n\n## Existing Codebase Snapshot\n${snapshot}`;
|
|
125
|
+
}
|
|
126
|
+
if (existingFileHints) {
|
|
127
|
+
userPrompt += `\n\n## Existing Project Files\n${existingFileHints}`;
|
|
128
|
+
}
|
|
129
|
+
let result = await (0, claudeInvoker_1.invokeClaude)({
|
|
130
|
+
systemPrompt,
|
|
131
|
+
userPrompt,
|
|
132
|
+
model: opts.model,
|
|
133
|
+
cwd: process.cwd(),
|
|
134
|
+
verbose: opts.verbose,
|
|
135
|
+
timeoutMs,
|
|
136
|
+
jsonSchema: QA_JSON_SCHEMA,
|
|
137
|
+
});
|
|
138
|
+
let sessionId = result.sessionId;
|
|
139
|
+
let qa = parseQAResponse(result.result);
|
|
140
|
+
// Step 3: Clarification loop
|
|
141
|
+
for (let round = 0; round < MAX_CLARIFICATION_ROUNDS && !qa.ready; round++) {
|
|
142
|
+
// Display summary if present
|
|
143
|
+
if (qa.summary) {
|
|
144
|
+
console.log(`\nHere's what I understand so far:\n ${qa.summary}`);
|
|
145
|
+
}
|
|
146
|
+
// Display and collect answers to questions
|
|
147
|
+
if (qa.questions && qa.questions.length > 0) {
|
|
148
|
+
console.log("\nI have a few questions:\n");
|
|
149
|
+
const answers = [];
|
|
150
|
+
for (let i = 0; i < qa.questions.length; i++) {
|
|
151
|
+
const answer = await askQuestion(rl, ` ${i + 1}. ${qa.questions[i]}\n > `);
|
|
152
|
+
answers.push(answer);
|
|
153
|
+
}
|
|
154
|
+
// Send answers back to Claude
|
|
155
|
+
console.log("\nProcessing your answers...");
|
|
156
|
+
const answersPrompt = qa.questions
|
|
157
|
+
.map((q, i) => `Q: ${q}\nA: ${answers[i]}`)
|
|
158
|
+
.join("\n\n");
|
|
159
|
+
result = await (0, claudeInvoker_1.invokeClaude)({
|
|
160
|
+
systemPrompt,
|
|
161
|
+
userPrompt: `User answers to follow-up questions:\n\n${answersPrompt}`,
|
|
162
|
+
model: opts.model,
|
|
163
|
+
cwd: process.cwd(),
|
|
164
|
+
verbose: opts.verbose,
|
|
165
|
+
timeoutMs,
|
|
166
|
+
sessionId,
|
|
167
|
+
jsonSchema: QA_JSON_SCHEMA,
|
|
168
|
+
});
|
|
169
|
+
sessionId = result.sessionId;
|
|
170
|
+
qa = parseQAResponse(result.result);
|
|
108
171
|
}
|
|
109
172
|
else {
|
|
110
|
-
|
|
173
|
+
// No questions but not ready — shouldn't happen, but break to avoid infinite loop
|
|
174
|
+
break;
|
|
111
175
|
}
|
|
176
|
+
}
|
|
177
|
+
// Step 4: Generation turn
|
|
178
|
+
if (qa.summary) {
|
|
179
|
+
console.log(`\nFinal understanding:\n ${qa.summary}`);
|
|
180
|
+
}
|
|
181
|
+
console.log("\nGenerating build files...");
|
|
182
|
+
await (0, claudeInvoker_1.invokeClaude)({
|
|
183
|
+
systemPrompt,
|
|
184
|
+
userPrompt: `Generate the build input files now. Write them to: ${buildDir}/\n\nUse the Write tool to create spec.md, constraints.md, and optionally taste.md in that directory.`,
|
|
185
|
+
model: opts.model,
|
|
186
|
+
allowedTools: ["Write", "Read", "Glob", "Grep"],
|
|
187
|
+
cwd: process.cwd(),
|
|
188
|
+
verbose: opts.verbose,
|
|
189
|
+
timeoutMs,
|
|
190
|
+
sessionId,
|
|
112
191
|
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
192
|
+
// Step 5: Verify and report
|
|
193
|
+
console.log("");
|
|
194
|
+
const createdFiles = [];
|
|
195
|
+
for (const filename of ["spec.md", "constraints.md", "taste.md"]) {
|
|
196
|
+
if (fs.existsSync(path.join(buildDir, filename))) {
|
|
197
|
+
createdFiles.push(filename);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (createdFiles.length === 0) {
|
|
201
|
+
(0, logging_1.logError)("No build files were created. Try running init again.");
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
(0, logging_1.logInfo)("Created:");
|
|
205
|
+
for (const f of createdFiles) {
|
|
206
|
+
console.log(` ${path.join(buildDir, f)}`);
|
|
207
|
+
}
|
|
208
|
+
if (!createdFiles.includes("spec.md")) {
|
|
209
|
+
(0, logging_1.logError)("Warning: spec.md was not created — this is required for planning");
|
|
210
|
+
}
|
|
211
|
+
if (!createdFiles.includes("constraints.md")) {
|
|
212
|
+
(0, logging_1.logError)("Warning: constraints.md was not created — this is required for planning");
|
|
213
|
+
}
|
|
214
|
+
console.log("");
|
|
215
|
+
(0, logging_1.logInfo)(`Next: ridgeline plan ${buildName}`);
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
rl.close();
|
|
219
|
+
}
|
|
117
220
|
};
|
|
118
221
|
exports.runInit = runInit;
|
|
119
222
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|