@kurrent/kcap 0.11.30 → 0.11.32
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.
|
@@ -163,7 +163,7 @@ The server enforces per-run budgets; watch for these in tool error responses:
|
|
|
163
163
|
- **`400` starting `daemon_outdated:`** — the daemon's kcap is too old to host flow participants. Relay the server error's remediation verbatim — it names the outdated daemon; the fix: update kcap (`npm i -g @kurrent/kcap`), then `kcap daemon restart --name <its-name>` (works for detached and service-managed daemons alike — a raw `daemon stop` deliberately refuses a service-managed one; `kcap daemon status` lists names, and `--when-idle` defers the restart if the daemon is busy).
|
|
164
164
|
- **`409` containing `participant_unreachable`** — that role's agent is in an ambiguous liveness state (its daemon disconnected or is restarting) or a possibly-live prior agent was spotted and the server is refusing to relaunch until its absence is proven, so it won't guess whether it's still alive rather than risk a duplicate launch. This is retryable — do not close the flow. Retry the send shortly; the server relaunches automatically once absence is proven, or ask the user to stop the participant (dashboard/API) and then re-send to force a fresh relaunch.
|
|
165
165
|
- **Reserved-alias reviewer-model errors** (only when you passed `model`): `reviewer_model_protocol_required` — the server/daemon doesn't support a model override yet; drop `model` and retry, or tell the user to update. `reviewer_model_unavailable` — no resolver for that vendor recognizes the model; ask for a different one or drop the override. `model_vendor_mismatch` — the model belongs to a different vendor than the one selected; ask the user which vendor they meant. `reviewer_model_safe_settlement_required` — the server can't safely reapply this model on a heal/relaunch; close the flow and start a new one. `reviewer_model_unpriceable` — the model has no resolvable pricing to budget-check; ask for a differently-named/priced model.
|
|
166
|
-
- **A round result of `unclear` whose text is exactly `participant_died` or `
|
|
166
|
+
- **A round result of `unclear` whose text is exactly `participant_died`, `participant_stopped`, or `participant_parked`** — that role's agent crashed, was stopped, or was parked for resume mid-round. In every case the run stays **open** and you address the same role again with `send_to_participant` to continue. The difference is what the next round gets: for `participant_died`/`participant_stopped` a **fresh** agent relaunches with **no memory of prior rounds**, so restate any context it needs; for `participant_parked` the same agent **resumes with its prior context intact** (a resumable park frees the slot between rounds). Earlier spend still counts against the run budget. No need to close and restart the flow; other roles are unaffected and remain addressable. (An older server reports a park as `participant_stopped` — still a resubmit trigger, so this works across the rollout.)
|
|
167
167
|
|
|
168
168
|
## Workflow
|
|
169
169
|
|
|
@@ -148,7 +148,7 @@ After applying the role-surface safety gate, if `start_review_flow` / `submit_re
|
|
|
148
148
|
- **`client_upgrade_required`, `flow_client_protocol_required`, or `flow_client_protocol_unsupported`** — update kcap; reserved review aliases fail closed on stale clients.
|
|
149
149
|
- **`reserved_review_alias_shape`** — an admin changed a reserved alias to an invalid participant shape; restore exactly one participant named `reviewer`.
|
|
150
150
|
- **`409` containing `participant_unreachable`** — the reviewer's liveness is ambiguous right now: either its daemon disconnected/is restarting, or the server positively spotted a possibly-live prior agent and is refusing to relaunch until its absence is proven (never launching a duplicate reviewer beside a possibly-live one). This is retryable — **do not close the flow.** Submit the round again shortly with `submit_review_round`; the server relaunches the reviewer automatically once absence is proven (via the daemon reconnecting/reporting, or the agent's death being confirmed). If it keeps failing across many retries, that points at the daemon itself needing attention, not at the flow needing to be restarted — ask the user to check daemon status, or stop the reviewer (dashboard/API) to force a fresh relaunch.
|
|
151
|
-
- **A round result of `unclear` whose text is exactly `participant_died` or `
|
|
151
|
+
- **A round result of `unclear` whose text is exactly `participant_died`, `participant_stopped`, or `participant_parked`** — the reviewer crashed, was stopped, or was parked for resume mid-round. In every case the run stays open and you **submit another round** with `submit_review_round` to continue — no need to close and restart the flow. The difference is what the next round gets: for `participant_died`/`participant_stopped` a **fresh** reviewer relaunches with **no memory of prior rounds**, so restate any context it needs; for `participant_parked` the same reviewer **resumes with its prior context intact** (a resumable park frees the slot between rounds). Earlier spend still counts against the run budget. (An older server that predates the park signal reports a park as `participant_stopped` — still a resubmit trigger, so this works across the rollout.)
|
|
152
152
|
|
|
153
153
|
## Workflow
|
|
154
154
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: suggest-review-flow
|
|
3
|
+
description: >-
|
|
4
|
+
Use this skill when implementation is complete — a feature or bugfix is functionally
|
|
5
|
+
finished, tests pass, or you are about to commit / open a PR / merge — or when a spec is
|
|
6
|
+
finalized. At that moment, proactively OFFER an independent second-harness review even if
|
|
7
|
+
the user did not ask, because a fresh, separate reviewer catches what the author's own model
|
|
8
|
+
misses. It calls list_reviewer_vendors to recommend a reviewer that will actually run for
|
|
9
|
+
this repo, offers a spec-review or code-review flow, and hands off to the review-flows skill
|
|
10
|
+
only after the user accepts — it never starts a flow itself. Do NOT use it when the user
|
|
11
|
+
asks you to review something yourself ("review this", "code review this", "look over my
|
|
12
|
+
spec"), or mid-task before the work is finished.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Suggest a review flow
|
|
16
|
+
|
|
17
|
+
You have reached a milestone where an **independent** review adds real value: a
|
|
18
|
+
separate coding-agent session, with none of this session's context, reviews the
|
|
19
|
+
work — and a different model catches what the author's own model glossed over.
|
|
20
|
+
Most people never think to do this. Your job here is to **offer** it at the
|
|
21
|
+
right moment, recommend a reviewer that will actually run, and — only if the
|
|
22
|
+
user says yes — hand off to the `review-flows` skill. **This skill never starts
|
|
23
|
+
a review flow itself.**
|
|
24
|
+
|
|
25
|
+
## When to offer (and when not to)
|
|
26
|
+
|
|
27
|
+
Offer at exactly two milestones:
|
|
28
|
+
|
|
29
|
+
- **Spec complete** — you just produced AND presented a finalized spec/design
|
|
30
|
+
this session → offer a `spec-review` flow.
|
|
31
|
+
- **Implementation complete** — the change is functionally finished (you say so,
|
|
32
|
+
or you are about to commit / open a PR / merge) → offer a `code-review` flow.
|
|
33
|
+
|
|
34
|
+
Do NOT offer (stay silent) when:
|
|
35
|
+
|
|
36
|
+
- The user asked you to **review something yourself** ("review this", "code
|
|
37
|
+
review this", "look over the spec"). Just perform that review locally — no
|
|
38
|
+
offer, no flow.
|
|
39
|
+
- You are only part-way through: rough mid-stream brainstorming, a partial plan,
|
|
40
|
+
a routine edit, or work whose known checks are still failing.
|
|
41
|
+
- A review flow for this artifact is already engaged, active, or just completed.
|
|
42
|
+
- Another skill (brainstorming, writing-plans, finishing-a-development-branch,
|
|
43
|
+
requesting-code-review) is mid-flow — let it finish; offer at the seam.
|
|
44
|
+
|
|
45
|
+
**Offer at most once per artifact.** Key the offer on (milestone type + the
|
|
46
|
+
target's identity + its revision): the same spec or the same change never gets
|
|
47
|
+
offered twice, but a materially revised artifact may be offered again, and a
|
|
48
|
+
second, different artifact of the same kind may be offered on its own. If the
|
|
49
|
+
user declines or moves on, stay silent for that artifact. A failed availability
|
|
50
|
+
lookup counts as the one prompt for that artifact — do not re-prompt.
|
|
51
|
+
|
|
52
|
+
## How to recommend a reviewer
|
|
53
|
+
|
|
54
|
+
1. Call **`list_reviewer_vendors`** (read-only; safe to call before offering).
|
|
55
|
+
It returns `reviewers[]` (vendors that can actually run for this repo now),
|
|
56
|
+
`driver_vendor` (the harness you are running in, or absent if unknown), and
|
|
57
|
+
`diagnostics`.
|
|
58
|
+
2. **Prefer a reviewer different from the driver.** A different model is the
|
|
59
|
+
highest-value review. If one non-driver reviewer is available, recommend it;
|
|
60
|
+
if several, offer a short choice — never assert one vendor is "better".
|
|
61
|
+
3. **If the only available reviewer is your own vendor, still offer it** —
|
|
62
|
+
framed as an independent, context-free reviewer session. The value is the
|
|
63
|
+
clean second look, not necessarily a different model.
|
|
64
|
+
4. **If `driver_vendor` is absent (unknown)**, do NOT claim "a different model";
|
|
65
|
+
frame the offer as "a separate, independent reviewer session" and offer a
|
|
66
|
+
choice from `reviewers[]`.
|
|
67
|
+
5. **If `reviewers[]` is empty**, read `diagnostics.reason` and give one line of
|
|
68
|
+
guidance instead of a dead end:
|
|
69
|
+
- `no_daemons_connected` → start a daemon (`kcap daemon start -d`).
|
|
70
|
+
- `no_repo_hosting_daemon` → run a daemon on a machine that has this repo.
|
|
71
|
+
- `no_unattended_reviewer` → install/certify a second harness as a reviewer.
|
|
72
|
+
- `repo_unresolved` → the current directory isn't a recognized repo.
|
|
73
|
+
- `lookup_failed` → couldn't reach the server; suggest checking `kcap status`.
|
|
74
|
+
- `schema_skew` → the kcap client/server is out of date; suggest updating.
|
|
75
|
+
|
|
76
|
+
## Handing off (only after the user accepts)
|
|
77
|
+
|
|
78
|
+
- You MAY run the read-only `list_reviewer_vendors` lookup automatically, but you
|
|
79
|
+
**MUST NOT start a review flow until the user affirmatively accepts THIS
|
|
80
|
+
offer.**
|
|
81
|
+
- On acceptance, invoke the **`review-flows`** skill to run it, preserving the
|
|
82
|
+
chosen `kind` (spec-review / code-review), the target, and the chosen reviewer
|
|
83
|
+
vendor.
|
|
84
|
+
- If the reviewer vendor turns out to be unavailable at start (a snapshot race),
|
|
85
|
+
`review-flows` surfaces the reason — do not silently substitute another vendor;
|
|
86
|
+
re-recommend and get fresh consent.
|
|
87
|
+
|
|
88
|
+
## If `list_reviewer_vendors` is not available
|
|
89
|
+
|
|
90
|
+
Your harness caches the kcap MCP tool list when it connects. If kcap was
|
|
91
|
+
upgraded mid-session, `list_reviewer_vendors` may be missing from this session.
|
|
92
|
+
Do NOT guess availability and do NOT shell out as a workaround — tell the user
|
|
93
|
+
to restart the harness (or reconnect the `kcap-flows` MCP server) so the tool
|
|
94
|
+
appears, then offer again.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kurrent/kcap",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.32",
|
|
4
4
|
"description": "CLI companion for Kurrent Capacitor — records and visualizes Claude Code sessions",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"repository": {
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
"postinstall": "node bin/postinstall.js"
|
|
15
15
|
},
|
|
16
16
|
"optionalDependencies": {
|
|
17
|
-
"@kurrent/kcap-darwin-arm64": "0.11.
|
|
18
|
-
"@kurrent/kcap-linux-arm64": "0.11.
|
|
19
|
-
"@kurrent/kcap-linux-musl-arm64": "0.11.
|
|
20
|
-
"@kurrent/kcap-linux-musl-x64": "0.11.
|
|
21
|
-
"@kurrent/kcap-linux-x64": "0.11.
|
|
22
|
-
"@kurrent/kcap-win-x64": "0.11.
|
|
17
|
+
"@kurrent/kcap-darwin-arm64": "0.11.32",
|
|
18
|
+
"@kurrent/kcap-linux-arm64": "0.11.32",
|
|
19
|
+
"@kurrent/kcap-linux-musl-arm64": "0.11.32",
|
|
20
|
+
"@kurrent/kcap-linux-musl-x64": "0.11.32",
|
|
21
|
+
"@kurrent/kcap-linux-x64": "0.11.32",
|
|
22
|
+
"@kurrent/kcap-win-x64": "0.11.32"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"bin/",
|
|
26
26
|
"kcap/"
|
|
27
27
|
],
|
|
28
|
-
"kcapReleaseCommit": "
|
|
29
|
-
"kcapReleaseTag": "v0.11.
|
|
28
|
+
"kcapReleaseCommit": "e5b1eae185076df2ed3d6fc5914ad5648ea91ab2",
|
|
29
|
+
"kcapReleaseTag": "v0.11.32"
|
|
30
30
|
}
|