agent-bober 0.11.3 → 0.11.5
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-bober",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.5",
|
|
4
4
|
"description": "Multi-agent harness for building applications autonomously with any LLM. Researcher, Planner, Curator, Generator, Evaluator pipeline. Supports Claude, GPT, Gemini, Ollama. MCP server for Cursor/Windsurf.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -189,6 +189,18 @@ Respond with EXACTLY this JSON structure (no other text):
|
|
|
189
189
|
{"event":"eval-completed","contractId":"...","evalId":"...","result":"pass|fail","timestamp":"..."}
|
|
190
190
|
```
|
|
191
191
|
|
|
192
|
+
4. **If `overallResult` is `"pass"`:**
|
|
193
|
+
- Update the contract: set `status` to `"completed"`, `completedAt` to current ISO-8601 timestamp. Save to `.bober/contracts/<contractId>.json`.
|
|
194
|
+
- Update `.bober/progress.md` — change the sprint line to `[completed]`.
|
|
195
|
+
- **Check if the plan is now fully complete.** Read the PlanSpec's `sprints` array to get the total count. Count how many of those contracts now have `status: "completed"`. If ALL sprints are completed (N/N):
|
|
196
|
+
- Update the PlanSpec: set `status` to `"completed"` and `completedAt` to current ISO-8601 timestamp. Save to `.bober/specs/<specId>.json`. **The `status` field MUST remain in the first 10 lines of the JSON** so future runs can skip it with a partial read.
|
|
197
|
+
- Update `.bober/progress.md` — change the plan's status line to `completed (N/N sprints)`.
|
|
198
|
+
- Log event: `{"event":"plan-completed","specId":"...","sprintsCompleted":N,"timestamp":"..."}`
|
|
199
|
+
|
|
200
|
+
5. **If `overallResult` is `"fail"`:**
|
|
201
|
+
- Update the contract: set `status` to `"needs-rework"`, `lastEvalId` to the eval ID. Save to `.bober/contracts/<contractId>.json`.
|
|
202
|
+
- Update `.bober/progress.md` — change the sprint line to `[needs-rework]`.
|
|
203
|
+
|
|
192
204
|
If the subagent crashed or returned a malformed response, report the error clearly and suggest the user retry.
|
|
193
205
|
|
|
194
206
|
## Step 5: Output Report
|
|
@@ -91,11 +91,17 @@ If it fails, report the missing prerequisites and stop.
|
|
|
91
91
|
|
|
92
92
|
### 1c. Check for Existing Plans
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
List all spec files in `.bober/specs/`. For each spec, read only the **first 5 lines** of the JSON file. The `status` field is near the top — if it says `"completed"`, skip that spec entirely (do not load its contracts or read further).
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
96
|
+
Collect only the specs where `status` is NOT `"completed"` (i.e. `"planned"` or `"in-progress"`). These are the **actionable specs**.
|
|
97
|
+
|
|
98
|
+
- **No actionable specs + user provided a new task:** Create a new plan (go to Step 2).
|
|
99
|
+
- **No actionable specs + no task provided:** Tell the user all plans are complete. Stop.
|
|
100
|
+
- **Exactly one actionable spec:** Resume from its next incomplete sprint (skip to Step 3).
|
|
101
|
+
- **Multiple actionable specs + user provided a task:** Match it to the most relevant actionable spec, or create a new plan if none match.
|
|
102
|
+
- **Multiple actionable specs + no task:** Pick the most recently created actionable spec.
|
|
103
|
+
|
|
104
|
+
Log your decision but do NOT ask the user — autonomous mode means you decide and move forward.
|
|
99
105
|
|
|
100
106
|
Log event:
|
|
101
107
|
```json
|
|
@@ -501,13 +507,17 @@ When done, respond with EXACTLY this JSON structure (no other text):
|
|
|
501
507
|
### 3g. Process the Evaluation Result
|
|
502
508
|
|
|
503
509
|
**On PASS:**
|
|
504
|
-
1. Update contract status to `completed` and save to `.bober/contracts/`.
|
|
505
|
-
2. Update `.bober/progress.md`.
|
|
510
|
+
1. Update contract status to `completed`, set `completedAt` to current ISO-8601 timestamp, and save to `.bober/contracts/`.
|
|
511
|
+
2. Update `.bober/progress.md` — change the sprint line to `[completed]`.
|
|
506
512
|
3. Log event:
|
|
507
513
|
```json
|
|
508
514
|
{"event":"sprint-completed","contractId":"...","specId":"...","iteration":N,"timestamp":"..."}
|
|
509
515
|
```
|
|
510
|
-
4.
|
|
516
|
+
4. **Check if the plan is now fully complete.** Read the PlanSpec's `sprints` array to get the total sprint count. Count how many of those contracts now have `status: "completed"`. If ALL sprints are completed (N/N):
|
|
517
|
+
- Update the PlanSpec: set `status` to `"completed"` and `completedAt` to current ISO-8601 timestamp. Save to `.bober/specs/<specId>.json`. **The `status` field MUST remain in the first 10 lines of the JSON** so future runs can skip it with a partial read.
|
|
518
|
+
- Update `.bober/progress.md` — change the plan's status line to `completed (N/N sprints)`.
|
|
519
|
+
- Log event: `{"event":"plan-completed","specId":"...","sprintsCompleted":N,"timestamp":"..."}`
|
|
520
|
+
5. Print milestone:
|
|
511
521
|
```
|
|
512
522
|
=== Sprint <N>/<total> PASSED ===
|
|
513
523
|
Title: <title>
|
|
@@ -515,7 +525,8 @@ When done, respond with EXACTLY this JSON structure (no other text):
|
|
|
515
525
|
Progress: [=====> ] <N>/<total> sprints complete
|
|
516
526
|
Next: <next sprint title>
|
|
517
527
|
```
|
|
518
|
-
|
|
528
|
+
If all sprints are done, print `=== PLAN COMPLETE ===` instead of "Next:".
|
|
529
|
+
6. Move to next sprint.
|
|
519
530
|
|
|
520
531
|
**On FAIL with retries remaining:**
|
|
521
532
|
1. Check if iteration < `evaluator.maxIterations` (default: 3).
|
|
@@ -30,13 +30,15 @@ Also read `.bober/principles.md` if it exists. You will include the principles t
|
|
|
30
30
|
|
|
31
31
|
## Step 1: Identify the Target Sprint
|
|
32
32
|
|
|
33
|
+
**Find the active PlanSpec.** List all specs in `.bober/specs/`. For each spec, read only the **first 5 lines** — the `status` field is near the top. Skip any spec where `status` is `"completed"`. From the remaining specs, pick the most recent one (sort by `createdAt` descending).
|
|
34
|
+
|
|
35
|
+
If all specs are `completed` and no sprint number was provided, tell the user all plans are complete.
|
|
36
|
+
|
|
33
37
|
**If a sprint number was provided as an argument:**
|
|
34
|
-
- Load the most recent PlanSpec from `.bober/specs/` (sort by `createdAt` descending)
|
|
35
38
|
- Find the contract for that sprint number: `.bober/contracts/sprint-<specId>-<N>.json`
|
|
36
39
|
- Verify it exists and its status is `proposed`, `in-progress`, or `needs-rework`
|
|
37
40
|
|
|
38
41
|
**If no sprint number was provided:**
|
|
39
|
-
- Load the most recent PlanSpec
|
|
40
42
|
- Find the first sprint contract with status `proposed` or `needs-rework`
|
|
41
43
|
- If all sprints are `completed`, tell the user all sprints are done
|
|
42
44
|
- If a sprint is `in-progress`, resume it
|
|
@@ -362,7 +364,12 @@ Respond with EXACTLY this JSON structure (no other text):
|
|
|
362
364
|
{"event":"sprint-completed","contractId":"...","specId":"...","iteration":N,"timestamp":"..."}
|
|
363
365
|
```
|
|
364
366
|
|
|
365
|
-
4. **
|
|
367
|
+
4. **Check if the plan is now fully complete.** Read the PlanSpec's `sprints` array to get the total count. Count how many of those contracts now have `status: "completed"`. If ALL sprints are completed (N/N):
|
|
368
|
+
- Update the PlanSpec: set `status` to `"completed"` and `completedAt` to current ISO-8601 timestamp. Save to `.bober/specs/<specId>.json`. **The `status` field MUST remain in the first 10 lines of the JSON** so future runs can skip it with a partial read.
|
|
369
|
+
- Update `.bober/progress.md` — change the plan's status line to `completed (N/N sprints)`.
|
|
370
|
+
- Log event: `{"event":"plan-completed","specId":"...","sprintsCompleted":N,"timestamp":"..."}`
|
|
371
|
+
|
|
372
|
+
5. **Report success to the user:**
|
|
366
373
|
```
|
|
367
374
|
=== Sprint <N> PASSED on iteration <M> ===
|
|
368
375
|
|
|
@@ -374,6 +381,7 @@ Respond with EXACTLY this JSON structure (no other text):
|
|
|
374
381
|
|
|
375
382
|
Next sprint: <next sprint title> (run /bober-sprint to continue)
|
|
376
383
|
```
|
|
384
|
+
If all sprints are done, report `=== PLAN COMPLETE (N/N sprints) ===` instead of "Next sprint".
|
|
377
385
|
|
|
378
386
|
### If the sprint FAILS and retries remain:
|
|
379
387
|
|