@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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "kcap",
3
- "version": "0.11.30",
3
+ "version": "0.11.32",
4
4
  "description": "Records and visualizes Claude Code sessions via kcap CLI hooks"
5
5
  }
@@ -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 `participant_stopped`** — that role's agent crashed or was stopped mid-round. The run stays **open**: address the same role again with `send_to_participant` and it relaunches automatically — the fresh agent has **no memory of prior rounds**, so restate any context it needs in your message; its earlier spend still counts against the run budget. No need to close and restart the flow. Other roles are unaffected and remain addressable in the meantime.
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 `participant_stopped`** — the reviewer crashed or was stopped mid-round. The run stays open: submit another round with `submit_review_round` and it relaunches automatically — the fresh reviewer has **no memory of prior rounds**, so restate any context it needs in your updated context; its earlier spend still counts against the run budget. No need to close and restart the flow.
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.30",
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.30",
18
- "@kurrent/kcap-linux-arm64": "0.11.30",
19
- "@kurrent/kcap-linux-musl-arm64": "0.11.30",
20
- "@kurrent/kcap-linux-musl-x64": "0.11.30",
21
- "@kurrent/kcap-linux-x64": "0.11.30",
22
- "@kurrent/kcap-win-x64": "0.11.30"
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": "73457022060d4d21d30052592425e1c1f020827c",
29
- "kcapReleaseTag": "v0.11.30"
28
+ "kcapReleaseCommit": "e5b1eae185076df2ed3d6fc5914ad5648ea91ab2",
29
+ "kcapReleaseTag": "v0.11.32"
30
30
  }