@zephyrdeng/pi-review 0.15.0 → 0.15.1
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 +17 -1
- package/README.zh-CN.md +17 -2
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +22 -0
- package/dist/args.js.map +1 -1
- package/dist/classify.d.ts +36 -0
- package/dist/classify.d.ts.map +1 -0
- package/dist/classify.js +171 -0
- package/dist/classify.js.map +1 -0
- package/dist/classify.test.d.ts +2 -0
- package/dist/classify.test.d.ts.map +1 -0
- package/dist/classify.test.js +76 -0
- package/dist/classify.test.js.map +1 -0
- package/dist/cli.js +34 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/jev.d.ts +100 -0
- package/dist/jev.d.ts.map +1 -0
- package/dist/jev.js +250 -0
- package/dist/jev.js.map +1 -0
- package/dist/jev.test.d.ts +2 -0
- package/dist/jev.test.d.ts.map +1 -0
- package/dist/jev.test.js +154 -0
- package/dist/jev.test.js.map +1 -0
- package/dist/loop.d.ts +18 -1
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +39 -0
- package/dist/loop.js.map +1 -1
- package/dist/loop.test.js +36 -0
- package/dist/loop.test.js.map +1 -1
- package/dist/matcher.d.ts +16 -3
- package/dist/matcher.d.ts.map +1 -1
- package/dist/matcher.js +31 -12
- package/dist/matcher.js.map +1 -1
- package/dist/matcher.test.js +30 -6
- package/dist/matcher.test.js.map +1 -1
- package/dist/meta-footer.d.ts.map +1 -1
- package/dist/meta-footer.js +6 -2
- package/dist/meta-footer.js.map +1 -1
- package/dist/panel-cli.test.js +145 -3
- package/dist/panel-cli.test.js.map +1 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +41 -4
- package/dist/panel.js.map +1 -1
- package/dist/pi-config.d.ts +7 -0
- package/dist/pi-config.d.ts.map +1 -1
- package/dist/pi-config.js +8 -0
- package/dist/pi-config.js.map +1 -1
- package/dist/round-compare.d.ts +23 -0
- package/dist/round-compare.d.ts.map +1 -0
- package/dist/round-compare.js +45 -0
- package/dist/round-compare.js.map +1 -0
- package/dist/round-compare.test.d.ts +2 -0
- package/dist/round-compare.test.d.ts.map +1 -0
- package/dist/round-compare.test.js +63 -0
- package/dist/round-compare.test.js.map +1 -0
- package/dist/types.d.ts +17 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/extensions/rv-config.ts +16 -0
- package/package.json +1 -1
- package/resources/providers/orcarouter.toml +11 -0
- package/skills/pi-review/SKILL.md +14 -1
- package/dist/extensions/review.d.ts +0 -2
- package/dist/extensions/review.js +0 -22
- package/dist/extensions/rv-prompts.d.ts +0 -19
- package/dist/extensions/rv-prompts.js +0 -132
package/README.md
CHANGED
|
@@ -199,6 +199,8 @@ Each round's `PI_REVIEW_META_JSON` line is the same enriched schema documented u
|
|
|
199
199
|
|
|
200
200
|
This is a **host-driven gate**: if findings remain, the host or human fixes only accepted in-scope findings and invokes `loop` again. For patch-by-patch agent closeout, `--max-rounds 1` gives the host a fix point after each review. For an explicit clean goal with a hard ceiling, use `--until clean` (default budget 10 when `--max-rounds` is omitted; never unlimited). Clean means no gate-blocking findings (single: no actionable findings; panel: no confirmed actionable clusters; advisories may remain). `loop` accepts normal review target/model/progress options but rejects `--keep-session`, `--continue`, and `--name` in v1.
|
|
201
201
|
|
|
202
|
+
**Cross-round comparison.** From round 2 onward each round is diffed against the previous round's actionable findings (`vs prev: =persisting · +new · -resolved` in the loop summary). Matching is deterministic first; with the Jev enhancement enabled, wording-drift pairs are adjudicated by Jev just like panel consensus. The comparison is advisory bookkeeping, never gate input, and a matcher failure degrades silently to no comparison. Under `--until clean`, when two consecutive rounds produce an identical actionable set (all persisting, nothing added or resolved), the loop stops early with `Stop: non_converging` — the tree does not change between rounds, so further rounds are dice rolls and the host should fix and re-invoke.
|
|
203
|
+
|
|
202
204
|
## Panel Review
|
|
203
205
|
|
|
204
206
|
Panel review runs multiple **independent** reviewers in isolated child sessions and aggregates their findings into one gate result. Reviewers cannot see one another's findings, so agreement represents independent discovery.
|
|
@@ -229,6 +231,18 @@ Singleton (uncorroborated) findings remain visible as **advisories** but do not
|
|
|
229
231
|
|
|
230
232
|
Two-phase matching: deterministic matching on stable anchors (path + normalized summary) first; only ambiguous same-path candidates go to a constrained **semantic adjudicator** (enabled with `--consensus-model`). The adjudicator clusters findings and may not invent findings, drop findings, add evidence, or act as another reviewer — it has no write tools. Low-confidence matches stay separate advisories so uncertain similarity cannot manufacture quorum.
|
|
231
233
|
|
|
234
|
+
**Adjudication engine (Jev enhancement mode).** When `TYPESAFE_API_KEY` is present (or `{ "jev": true }` is set in the config file), the adjudication decision is routed to [TypeSafe Jev](https://typesafe.ai) — a System One model that returns typed probabilities — instead of spawning a review-only Pi child. Each ambiguous finding pair becomes one Noul question ("same underlying issue?"), fanned out in a single call; the pair probability is used as the merge confidence and flows through the same threshold and provenance validation as LLM merges. This replaces a full child session with one ~100 ms typed call. Explicit `--consensus-model` keeps the Pi adjudicator; `PI_REVIEW_JEV=0` disables Jev for one run; any Jev failure falls back to the Pi adjudicator and is recorded as `adjudicationFallbackNote` in the meta. The aggregate meta carries `adjudicationEngine: "jev" | "pi"` whenever adjudication ran, and `/rv-config` shows the effective setting and key presence.
|
|
235
|
+
|
|
236
|
+
**Scope classification (`pi-review classify`).** The same Jev backend can classify a previous review's actionable findings against your frozen task baseline — the loop-closeout scope governor as a typed decision instead of a judgment call:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
pi-review classify --baseline "fix the login crash; UI polish is out of scope" --meta /tmp/last-review-meta.txt
|
|
240
|
+
# or pipe the review output directly:
|
|
241
|
+
pi-review -- @src 2>&1 | pi-review classify --baseline "..."
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Each actionable finding gets one Choice question (`in_scope_blocker` | `follow_up` | `stop_and_escalate`), all fanned out in a single call. Output is an ASCII summary plus a `PI_REVIEW_CLASSIFY_JSON` machine line on stderr; findings below confidence 0.5 are flagged as low-confidence. Classify is advisory and host-invoked — it never edits, never blocks a gate by itself, and requires `TYPESAFE_API_KEY` (exit 4 without it).
|
|
245
|
+
|
|
232
246
|
### Cost and failure
|
|
233
247
|
|
|
234
248
|
Reviewer runs = `--reviewers <n>` × `--max-rounds` (loop); one adjudication call may run per round when `--consensus-model` is set. Use `--concurrency <n>` to bound provider/machine pressure (default: reviewer count, never exceeds it). Reviewer runtime failure → `blocked`; unstructured dirty output or unresolved clarification → `needs_human`; never silently clean. Panel review rejects `--keep-session`, `--continue`, and `--name` (reviewers run `--no-session`); the host agent remains the only editor.
|
|
@@ -429,11 +443,12 @@ Session flags (`--keep-session`, `--continue`, `--name`) are unsupported by `loo
|
|
|
429
443
|
|
|
430
444
|
## Configuration
|
|
431
445
|
|
|
432
|
-
Persistent settings live in the review config file `~/.pi/pi-review/config.json` (override its location with `PI_REVIEW_CONFIG`). The config is advisory and forward-compatible: unknown keys are ignored, `null` counts as unset, and any other problem (wrong-typed value, invalid JSON) only prints a warning and falls back — the config never blocks core functionality, so a config written by a newer pi-review cannot brick an older one. In Pi, `/rv-config` shows the effective configuration (values, sources, warnings, resolved paths).
|
|
446
|
+
Persistent settings live in the review config file `~/.pi/pi-review/config.json` (override its location with `PI_REVIEW_CONFIG`). The config is advisory and forward-compatible: unknown keys are ignored, `null` counts as unset, and any other problem (wrong-typed value, invalid JSON) only prints a warning and falls back — the config never blocks core functionality, so a config written by a newer pi-review cannot brick an older one. In Pi, `/rv-config` shows the effective configuration (values, sources, warnings, resolved paths). There is deliberately no `/rv-config set` command — the preferred editor is your agent via the pi-review agent skill, which knows the config schema, keeps unknown keys, never overwrites invalid JSON, and never writes secrets (API keys stay environment variables, e.g. `TYPESAFE_API_KEY`; the config file holds flags only).
|
|
433
447
|
|
|
434
448
|
| Key | Type | Default | Description |
|
|
435
449
|
|-----|------|---------|-------------|
|
|
436
450
|
| `childExtensions` | boolean | `false` | Let review children load host Pi extensions so providers registered only through extensions are usable. Equivalent to per-run `PI_REVIEW_CHILD_EXTENSIONS=1`; `false` keeps children isolated with `--no-extensions` (issue #8). |
|
|
451
|
+
| `jev` | boolean | auto | Route panel consensus adjudication to TypeSafe Jev instead of a Pi adjudicator child. Default: enabled when `TYPESAFE_API_KEY` is set, disabled otherwise. Per-run override: `PI_REVIEW_JEV=1` / `=0`. An explicit `--consensus-model` always keeps the Pi adjudicator. |
|
|
437
452
|
|
|
438
453
|
Per-process overrides via environment variables (env wins over the config file):
|
|
439
454
|
|
|
@@ -446,6 +461,7 @@ Per-process overrides via environment variables (env wins over the config file):
|
|
|
446
461
|
| `PI_REVIEW_SYSTEM_PROMPT` | Path to system prompt file |
|
|
447
462
|
| `PI_REVIEW_SESSION_DIR` | Directory for persisted review sessions |
|
|
448
463
|
| `PI_REVIEW_META_STDOUT` | Set to `1`/`true` to print `PI_REVIEW_META_JSON` on stdout instead of stderr |
|
|
464
|
+
| `PI_REVIEW_JEV` | Per-run override for `jev`: `1`/`true`/`on` routes panel consensus adjudication to TypeSafe Jev, any other set value (e.g. `0`) keeps the Pi adjudicator. Connection: `TYPESAFE_API_KEY` (required), optional `TYPESAFE_BASE_URL` and `PI_REVIEW_JEV_MODEL` (default `jev-latest`) |
|
|
449
465
|
| `PI_REVIEW_CHILD_EXTENSIONS` | Per-run override for `childExtensions`: `1`/`true`/`keep` enables host extensions for this process, any other set value (e.g. `0`) forces isolation; an empty value counts as unset. Persistent equivalent: `{ "childExtensions": true }` in the config file. With an explicit `--provider`, pi-review first probes the model catalog and blocks with a hint if the provider only exists via extensions |
|
|
450
466
|
| `PI_REVIEW_CONFIG` | Path to the review config file (default: `~/.pi/pi-review/config.json`) |
|
|
451
467
|
|
package/README.zh-CN.md
CHANGED
|
@@ -131,6 +131,8 @@ pi-review loop --until clean --max-rounds 10 -- @src
|
|
|
131
131
|
|
|
132
132
|
`--until clean` 声明成功目标(clean gate),但仍有硬预算:省略 `--max-rounds` 时默认为 10,**不是无限循环**。Clean 定义:单审查无 actionable finding;面板审查无 confirmed actionable cluster;advisories 可保留;`needs_human`/`blocked` 绝不算 clean。
|
|
133
133
|
|
|
134
|
+
**跨轮对比。** 从第 2 轮起,每轮 actionable finding 会与上一轮做对比(loop 摘要里的 `vs prev: =persisting · +new · -resolved`)。匹配先走确定性匹配;启用 Jev 增强时,措辞漂移的对子由 Jev 裁决,与面板共识同一套机制。该对比只是记账,绝不参与门禁;匹配失败时静默降级为无对比。在 `--until clean` 下,若连续两轮的 actionable 集合完全一致(全部 persisting,无新增无消失),loop 会以 `Stop: non_converging` 提前停止——轮次之间代码树不变,继续掷骰没有意义,host 应先修复再重新调用。
|
|
135
|
+
|
|
134
136
|
`loop` 复用普通审查的 mode/model/progress/target 参数;v1 明确不支持 `--keep-session`、`--continue`、`--name`。
|
|
135
137
|
|
|
136
138
|
每轮审查各自在 stderr 输出一条 `PI_REVIEW_META_JSON`,即[输出格式](#输出格式)里的富化 finding schema(`metaVersion`、每条 finding 的 `details`/`recommendation`/`location`、panel 轮次的 `sourceFindings`);消费者按输出顺序逐轮读取该行即可拿到完整 finding 数据,无需刮取 Markdown,逐轮摘要(`LoopRoundSummary`)保持只含计数。
|
|
@@ -165,6 +167,18 @@ pi-review loop --reviewers 3 --consensus quorum --max-rounds 2 -- @src
|
|
|
165
167
|
|
|
166
168
|
两阶段匹配:先用稳定锚点(路径 + 归一化摘要)做确定性匹配;只有路径相同、措辞不同的模糊候选才交给受限的**语义仲裁器**(用 `--consensus-model` 启用)。仲裁器只能聚类,不得发明 finding、丢弃 finding、补充证据或充当额外审查者,且没有写工具。低置信匹配保持为独立 advisory,避免靠"相似"制造虚假共识。
|
|
167
169
|
|
|
170
|
+
**裁决引擎(Jev 增强模式)。** 当环境里存在 `TYPESAFE_API_KEY`(或配置文件里设置 `{ "jev": true }`)时,共识裁决交给 [TypeSafe Jev](https://typesafe.ai)——返回 typed 概率的 System One 模型——而不再 spawn 一个 review-only 的 Pi 子进程。每对模糊 finding 变成一个 Noul 问题("是否同一问题?"),在单次调用里并行 fan-out;概率直接作为合并置信度,走与 LLM 裁决相同的阈值与溯源校验。这把一次完整子会话换成了一次约 100ms 的 typed 调用。显式 `--consensus-model` 时仍走 Pi 仲裁器;`PI_REVIEW_JEV=0` 可单次关闭;Jev 失败会自动回退 Pi 仲裁器并在 meta 里记录 `adjudicationFallbackNote`。裁决发生时聚合 meta 带 `adjudicationEngine: "jev" | "pi"`,`/rv-config` 可查看当前生效值与 key 是否存在。
|
|
171
|
+
|
|
172
|
+
**范围分类(`pi-review classify`)。** 同一个 Jev 后端还能把上一次评审的 actionable findings 对照冻结的任务基线分类——把 loop 收尾协议里的 scope governor 从 host 的主观判断变成 typed 决策:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
pi-review classify --baseline "修登录崩溃;UI 调优不在本次范围" --meta /tmp/last-review-meta.txt
|
|
176
|
+
# 或直接管道:
|
|
177
|
+
pi-review -- @src 2>&1 | pi-review classify --baseline "..."
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
每个 actionable finding 对应一个 Choice 问题(`in_scope_blocker` | `follow_up` | `stop_and_escalate`),单次调用并行 fan-out。输出为 ASCII 摘要 + stderr 上的 `PI_REVIEW_CLASSIFY_JSON` 机器行;置信度低于 0.5 的标记为 low-confidence。classify 是 advisory、由 host 主动调用——不改文件、不单独卡门禁,且必须有 `TYPESAFE_API_KEY`(缺失时 exit 4)。
|
|
181
|
+
|
|
168
182
|
### 成本与失败
|
|
169
183
|
|
|
170
184
|
审查者运行数 = `--reviewers <n>` × `--max-rounds`(loop);启用 `--consensus-model` 时每轮最多再跑一次仲裁。用 `--concurrency <n>` 限制并发(默认等于审查者数,不超过)。审查者运行时失败 → `blocked`;无法解析的脏输出或未决澄清 → `needs_human`;绝不悄悄 clean。面板审查 v1 不支持 `--keep-session`、`--continue`、`--name`(审查者用 `--no-session`);宿主 Agent 仍是唯一可编辑者。
|
|
@@ -256,13 +270,14 @@ CLI 会在 reviewer 启动前把 `PI_REVIEW_UI_URL: http://127.0.0.1:<port>/run/
|
|
|
256
270
|
|
|
257
271
|
提交代码:`npm install` 后会启用 **Husky** 钩子(`.husky/` → `ai-commit` 的 prepare-commit-msg / commit-msg / pre-commit)。也可 `git add` 后直接 `ai-commit commit`。配置见 `.ai-commit.yaml`(英文、`ai_footer: off`,需本机安装 ai-commit ≥ v0.1.45)。
|
|
258
272
|
|
|
259
|
-
持久化设置在评审配置文件 `~/.pi/pi-review/config.json`(可用 `PI_REVIEW_CONFIG` 覆盖其位置)中。配置是建议性的、向前兼容的:未知键被忽略,`null` 视为未设置,其它任何问题(类型错误、无效 JSON)只打印警告并回落——配置绝不阻塞核心功能,新版本写的配置不会弄坏旧版本。在 Pi 中用 `/rv-config`
|
|
273
|
+
持久化设置在评审配置文件 `~/.pi/pi-review/config.json`(可用 `PI_REVIEW_CONFIG` 覆盖其位置)中。配置是建议性的、向前兼容的:未知键被忽略,`null` 视为未设置,其它任何问题(类型错误、无效 JSON)只打印警告并回落——配置绝不阻塞核心功能,新版本写的配置不会弄坏旧版本。在 Pi 中用 `/rv-config` 查看生效配置(取值、来源、警告、解析路径)。刻意不提供 `/rv-config set` 命令——推荐的编辑器是你的 agent(走 pi-review skill):它知道配置 schema、保留未知键、坏 JSON 不覆盖,且绝不写入机密(API key 只走环境变量,如 `TYPESAFE_API_KEY`;配置文件只放开关)。
|
|
260
274
|
|
|
261
275
|
| 键 | 类型 | 默认 | 说明 |
|
|
262
276
|
|-----|------|---------|-------------|
|
|
263
277
|
| `childExtensions` | boolean | `false` | 是否让评审子进程加载宿主 Pi 扩展,以使用仅由扩展注册的 provider。等价于单次运行 `PI_REVIEW_CHILD_EXTENSIONS=1`;`false` 保持子进程隔离(`--no-extensions`,issue #8)。 |
|
|
278
|
+
| `jev` | boolean | auto | 是否把面板共识裁决交给 TypeSafe Jev 而非 Pi 仲裁子进程。默认:检测到 `TYPESAFE_API_KEY` 即开启,否则关闭。单次覆盖:`PI_REVIEW_JEV=1` / `=0`。显式 `--consensus-model` 时始终走 Pi 仲裁器。 |
|
|
264
279
|
|
|
265
|
-
环境变量提供单次进程级覆盖(env 优先于配置文件):`PI_REVIEW_HOME`、`PI_REVIEW_PRESETS`、`PI_REVIEW_PANEL_PRESETS`、`PI_REVIEW_SYSTEM_PROMPT`、`PI_REVIEW_SESSION_DIR`、`PI_REVIEW_META_STDOUT`、`PI_REVIEW_CHILD_EXTENSIONS`(`1`/`true`/`keep` 开启、其它已设值如 `0` 强制隔离、空值视为未设置;持久化等价写法为配置文件里 `{ "childExtensions": true }`)、`PI_REVIEW_CONFIG`。预设与审查指令文件内容均为英文。
|
|
280
|
+
环境变量提供单次进程级覆盖(env 优先于配置文件):`PI_REVIEW_HOME`、`PI_REVIEW_PRESETS`、`PI_REVIEW_PANEL_PRESETS`、`PI_REVIEW_SYSTEM_PROMPT`、`PI_REVIEW_SESSION_DIR`、`PI_REVIEW_META_STDOUT`、`PI_REVIEW_JEV`(`1`/`true`/`on` 开启 Jev 裁决、其它已设值如 `0` 保持 Pi 仲裁;连接用 `TYPESAFE_API_KEY`,可选 `TYPESAFE_BASE_URL`、`PI_REVIEW_JEV_MODEL`)、`PI_REVIEW_CHILD_EXTENSIONS`(`1`/`true`/`keep` 开启、其它已设值如 `0` 强制隔离、空值视为未设置;持久化等价写法为配置文件里 `{ "childExtensions": true }`)、`PI_REVIEW_CONFIG`。预设与审查指令文件内容均为英文。
|
|
266
281
|
|
|
267
282
|
## 安全
|
|
268
283
|
|
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,KAAK,CAAC,QAAQ,SAAI,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,KAAK,CAAC,QAAQ,SAAI,GAAG,KAAK,CAoEzC;AAED,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,+FAA+F;AAC/F,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,gEAAgE;AAChE,eAAO,MAAM,eAAe,+HACkG,CAAC;AAE/H,qBAAa,cAAe,SAAQ,KAAK;IACV,QAAQ,CAAC,QAAQ;gBAAlC,OAAO,EAAE,MAAM,EAAW,QAAQ,SAAI;CAInD;AAoBD,wDAAwD;AACxD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAmK9D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAKpE;AAqED,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,OAAO,CAEvF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4BpD"}
|
package/dist/args.js
CHANGED
|
@@ -5,6 +5,7 @@ export function usage(exitCode = 0) {
|
|
|
5
5
|
pi-review models [search]
|
|
6
6
|
pi-review [review] [options] -- <@files|text...>
|
|
7
7
|
pi-review loop [options] -- <@files|text...>
|
|
8
|
+
pi-review classify --baseline <text|@file> [--meta <path>] Classify a previous review's findings against the frozen baseline (Jev required)
|
|
8
9
|
pi-review update Update package + agent skill content
|
|
9
10
|
pi-review install [options] Pi package + agent skills (one-shot)
|
|
10
11
|
pi-review install-skill [options] Install skill to AI agents only
|
|
@@ -348,6 +349,9 @@ export function parseArgs(argv) {
|
|
|
348
349
|
if (argv[0] === "update") {
|
|
349
350
|
return { command: "update", mode: "code", skills: [], payload: [], keepSession: false, stream: true };
|
|
350
351
|
}
|
|
352
|
+
if (argv[0] === "classify") {
|
|
353
|
+
return parseClassifyCommand(argv.slice(1));
|
|
354
|
+
}
|
|
351
355
|
try {
|
|
352
356
|
return parseReviewCommand(argv);
|
|
353
357
|
}
|
|
@@ -359,4 +363,22 @@ export function parseArgs(argv) {
|
|
|
359
363
|
usage(error.exitCode);
|
|
360
364
|
}
|
|
361
365
|
}
|
|
366
|
+
/** classify is a Jev-only post-processing command: --baseline + optional --meta, nothing else. */
|
|
367
|
+
function parseClassifyCommand(argv) {
|
|
368
|
+
const options = { command: "classify", mode: "code", skills: [], payload: [], keepSession: false, stream: true };
|
|
369
|
+
while (argv.length > 0) {
|
|
370
|
+
const arg = argv.shift();
|
|
371
|
+
switch (arg) {
|
|
372
|
+
case "--baseline":
|
|
373
|
+
options.baseline = requireValue(arg, argv);
|
|
374
|
+
break;
|
|
375
|
+
case "--meta":
|
|
376
|
+
options.metaFile = requireValue(arg, argv);
|
|
377
|
+
break;
|
|
378
|
+
default:
|
|
379
|
+
throw new ArgsParseError(`classify: unknown option ${arg}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return options;
|
|
383
|
+
}
|
|
362
384
|
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type JevConnection, type JevFetch } from "./jev.js";
|
|
2
|
+
import type { ParsedArgs, ReviewFinding } from "./types.js";
|
|
3
|
+
export declare const SCOPE_CLASSES: readonly ["in_scope_blocker", "follow_up", "stop_and_escalate"];
|
|
4
|
+
export type ScopeClass = (typeof SCOPE_CLASSES)[number];
|
|
5
|
+
/** Below this confidence the classification is advisory-only. */
|
|
6
|
+
export declare const CLASSIFY_CONFIDENCE_FLOOR = 0.5;
|
|
7
|
+
export interface ClassifiedFinding {
|
|
8
|
+
id: string;
|
|
9
|
+
summary: string;
|
|
10
|
+
classification: ScopeClass;
|
|
11
|
+
confidence: number;
|
|
12
|
+
/** True when confidence is below CLASSIFY_CONFIDENCE_FLOOR — treat as unclassified. */
|
|
13
|
+
uncertain: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ClassifyResult {
|
|
16
|
+
baselineChars: number;
|
|
17
|
+
findings: ClassifiedFinding[];
|
|
18
|
+
unclassified: string[];
|
|
19
|
+
model?: string;
|
|
20
|
+
usage?: {
|
|
21
|
+
inputTokens: number;
|
|
22
|
+
outputTokens: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Parse a meta file/stdin payload: a PI_REVIEW_META_JSON line or a bare meta JSON object. */
|
|
26
|
+
export declare function parseMetaFindings(text: string): ReviewFinding[];
|
|
27
|
+
/** Resolve the baseline text: @path reads the file, anything else is literal text. */
|
|
28
|
+
export declare function resolveBaseline(value: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* One Jev call: a Choice question per finding, all fanned out in parallel.
|
|
31
|
+
* The baseline is the judge's only notion of scope; Jev never sees the code.
|
|
32
|
+
*/
|
|
33
|
+
export declare function classifyFindings(connection: JevConnection, baseline: string, findings: ReviewFinding[], fetchImpl?: JevFetch): Promise<ClassifyResult>;
|
|
34
|
+
export declare function formatClassifyAscii(result: ClassifyResult): string;
|
|
35
|
+
export declare function runClassify(parsed: ParsedArgs, stdinText: string): Promise<never>;
|
|
36
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyC,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,eAAO,MAAM,aAAa,iEAAkE,CAAC;AAC7F,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,iEAAiE;AACjE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,UAAU,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAWD,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAc/D;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,aAAa,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,CAAC,EAAE,QAAQ,GACnB,OAAO,CAAC,cAAc,CAAC,CA4CzB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA4BlE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CA4CvF"}
|
package/dist/classify.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// pi-review classify: scope-governor classification of review findings.
|
|
2
|
+
//
|
|
3
|
+
// Given the frozen task baseline and the findings from a previous review's
|
|
4
|
+
// PI_REVIEW_META_JSON, classify each finding with Jev (TypeSafe System One)
|
|
5
|
+
// as in-scope blocker / follow-up / stop-and-escalate — the classification
|
|
6
|
+
// the host agent otherwise makes by judgment in the loop closeout protocol.
|
|
7
|
+
//
|
|
8
|
+
// This is a Jev-only feature: the typed classification is the entire value.
|
|
9
|
+
// Without a key it exits blocked with an actionable message rather than
|
|
10
|
+
// pretending to classify.
|
|
11
|
+
import fs from "node:fs";
|
|
12
|
+
import { evaluateChoices, resolveJevConnection } from "./jev.js";
|
|
13
|
+
import { expandMaybeHome, fail } from "./utils.js";
|
|
14
|
+
export const SCOPE_CLASSES = ["in_scope_blocker", "follow_up", "stop_and_escalate"];
|
|
15
|
+
/** Below this confidence the classification is advisory-only. */
|
|
16
|
+
export const CLASSIFY_CONFIDENCE_FLOOR = 0.5;
|
|
17
|
+
const CLASSIFY_CRITERIA = {
|
|
18
|
+
in_scope_blocker: "The finding is accepted, actionable, and required by the frozen task baseline; the host should fix it now before closeout.",
|
|
19
|
+
follow_up: "The finding is valid but outside the frozen baseline or not required for safe closeout; record it without drive-by edits.",
|
|
20
|
+
stop_and_escalate: "Ambiguous intent, architectural expansion, unsafe migration, blocked tooling, or anything requiring a human decision; stop rather than guess.",
|
|
21
|
+
};
|
|
22
|
+
/** Parse a meta file/stdin payload: a PI_REVIEW_META_JSON line or a bare meta JSON object. */
|
|
23
|
+
export function parseMetaFindings(text) {
|
|
24
|
+
const metaLine = text.split("\n").find((line) => line.startsWith("PI_REVIEW_META_JSON: "));
|
|
25
|
+
const raw = metaLine ? metaLine.slice("PI_REVIEW_META_JSON: ".length) : text.trim();
|
|
26
|
+
let meta;
|
|
27
|
+
try {
|
|
28
|
+
meta = JSON.parse(raw);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
fail("classify: could not parse meta JSON — pipe a review's PI_REVIEW_META_JSON line or pass --meta <file>");
|
|
32
|
+
}
|
|
33
|
+
const findings = meta.findings;
|
|
34
|
+
if (!Array.isArray(findings)) {
|
|
35
|
+
fail("classify: meta JSON has no findings array — is this a review meta record?");
|
|
36
|
+
}
|
|
37
|
+
return findings;
|
|
38
|
+
}
|
|
39
|
+
/** Resolve the baseline text: @path reads the file, anything else is literal text. */
|
|
40
|
+
export function resolveBaseline(value) {
|
|
41
|
+
if (value.startsWith("@")) {
|
|
42
|
+
const file = expandMaybeHome(value.slice(1));
|
|
43
|
+
try {
|
|
44
|
+
return fs.readFileSync(file, "utf8");
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
fail(`classify: cannot read baseline file ${file}: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* One Jev call: a Choice question per finding, all fanned out in parallel.
|
|
54
|
+
* The baseline is the judge's only notion of scope; Jev never sees the code.
|
|
55
|
+
*/
|
|
56
|
+
export async function classifyFindings(connection, baseline, findings, fetchImpl) {
|
|
57
|
+
const questions = {};
|
|
58
|
+
const byId = new Map();
|
|
59
|
+
findings.forEach((finding, index) => {
|
|
60
|
+
const id = finding.id ?? `F${index + 1}`;
|
|
61
|
+
byId.set(id, finding);
|
|
62
|
+
questions[id] = {
|
|
63
|
+
instructions: `Classify review finding ${id} against the frozen task baseline: is it an in-scope blocker, a follow-up, or stop-and-escalate? ` +
|
|
64
|
+
"Judge scope fit only — the finding's technical validity was already established by the reviewer.",
|
|
65
|
+
criteria: { ...CLASSIFY_CRITERIA },
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
const state = {
|
|
69
|
+
baseline,
|
|
70
|
+
findings: findings.map((finding, index) => ({
|
|
71
|
+
id: finding.id ?? `F${index + 1}`,
|
|
72
|
+
summary: finding.summary,
|
|
73
|
+
path: finding.path ?? null,
|
|
74
|
+
severity: finding.severity ?? null,
|
|
75
|
+
actionable: finding.actionable,
|
|
76
|
+
})),
|
|
77
|
+
};
|
|
78
|
+
const result = await evaluateChoices(connection, state, questions, fetchImpl);
|
|
79
|
+
const classified = [];
|
|
80
|
+
for (const [id, answer] of Object.entries(result.answers)) {
|
|
81
|
+
const finding = byId.get(id);
|
|
82
|
+
classified.push({
|
|
83
|
+
id,
|
|
84
|
+
summary: finding.summary,
|
|
85
|
+
classification: answer.choice,
|
|
86
|
+
confidence: answer.confidence,
|
|
87
|
+
uncertain: answer.confidence < CLASSIFY_CONFIDENCE_FLOOR,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
baselineChars: baseline.length,
|
|
92
|
+
findings: classified,
|
|
93
|
+
unclassified: result.missing,
|
|
94
|
+
...(result.model ? { model: result.model } : {}),
|
|
95
|
+
...(result.usage ? { usage: result.usage } : {}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function formatClassifyAscii(result) {
|
|
99
|
+
const lines = ["── pi-review classify " + "─".repeat(20)];
|
|
100
|
+
const buckets = {
|
|
101
|
+
in_scope_blocker: [],
|
|
102
|
+
follow_up: [],
|
|
103
|
+
stop_and_escalate: [],
|
|
104
|
+
};
|
|
105
|
+
for (const finding of result.findings)
|
|
106
|
+
buckets[finding.classification].push(finding);
|
|
107
|
+
const label = {
|
|
108
|
+
in_scope_blocker: "In-scope",
|
|
109
|
+
follow_up: "Follow-up",
|
|
110
|
+
stop_and_escalate: "Escalate",
|
|
111
|
+
};
|
|
112
|
+
lines.push(` Findings ${result.findings.length} classified${result.model ? ` (${result.model})` : ""}`);
|
|
113
|
+
for (const cls of SCOPE_CLASSES) {
|
|
114
|
+
const bucket = buckets[cls];
|
|
115
|
+
if (bucket.length > 0)
|
|
116
|
+
lines.push(` ${label[cls].padEnd(10)} ${bucket.map((f) => f.id).join(", ")}`);
|
|
117
|
+
}
|
|
118
|
+
if (result.unclassified.length > 0) {
|
|
119
|
+
lines.push(` Unclassified: ${result.unclassified.join(", ")} (missing from model response)`);
|
|
120
|
+
}
|
|
121
|
+
lines.push("");
|
|
122
|
+
for (const finding of result.findings) {
|
|
123
|
+
const flag = finding.uncertain ? " (low confidence)" : "";
|
|
124
|
+
lines.push(` ${finding.id} ${finding.classification.toUpperCase()} ${finding.confidence.toFixed(2)}${flag} ${finding.summary}`);
|
|
125
|
+
}
|
|
126
|
+
lines.push("─".repeat(41));
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
}
|
|
129
|
+
export async function runClassify(parsed, stdinText) {
|
|
130
|
+
const baselineRaw = parsed.baseline;
|
|
131
|
+
if (!baselineRaw) {
|
|
132
|
+
fail("classify: --baseline <text|@file> is required (the frozen task/scope)");
|
|
133
|
+
}
|
|
134
|
+
const metaText = parsed.metaFile
|
|
135
|
+
? (() => {
|
|
136
|
+
try {
|
|
137
|
+
return fs.readFileSync(expandMaybeHome(parsed.metaFile), "utf8");
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
fail(`classify: cannot read --meta file: ${error.message}`);
|
|
141
|
+
}
|
|
142
|
+
})()
|
|
143
|
+
: stdinText;
|
|
144
|
+
if (!metaText || !metaText.trim()) {
|
|
145
|
+
fail("classify: no meta input — pass --meta <file> or pipe a review's stderr/stdout in");
|
|
146
|
+
}
|
|
147
|
+
const findings = parseMetaFindings(metaText);
|
|
148
|
+
const actionable = findings.filter((finding) => finding.actionable);
|
|
149
|
+
if (actionable.length === 0) {
|
|
150
|
+
process.stdout.write("── pi-review classify " + "─".repeat(20) + "\n No actionable findings to classify.\n" + "─".repeat(41) + "\n");
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
153
|
+
const connection = resolveJevConnection(process.env);
|
|
154
|
+
if (!connection) {
|
|
155
|
+
process.stderr.write("pi-review: classify requires a TypeSafe API key: export TYPESAFE_API_KEY (see README — Jev enhancement mode).\n");
|
|
156
|
+
process.exit(4);
|
|
157
|
+
}
|
|
158
|
+
const baseline = resolveBaseline(baselineRaw);
|
|
159
|
+
let result;
|
|
160
|
+
try {
|
|
161
|
+
result = await classifyFindings(connection, baseline, actionable);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
process.stderr.write(`pi-review: classify failed: ${error.message}\n`);
|
|
165
|
+
process.exit(4);
|
|
166
|
+
}
|
|
167
|
+
process.stdout.write(`${formatClassifyAscii(result)}\n`);
|
|
168
|
+
process.stderr.write(`PI_REVIEW_CLASSIFY_JSON: ${JSON.stringify(result)}\n`);
|
|
169
|
+
process.exit(0);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.test.d.ts","sourceRoot":"","sources":["../src/classify.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { test } from "vitest";
|
|
3
|
+
import { classifyFindings, formatClassifyAscii, parseMetaFindings, CLASSIFY_CONFIDENCE_FLOOR, } from "./classify.js";
|
|
4
|
+
const CONN = { apiKey: "test-key", baseUrl: "https://example.test", model: "jev-test" };
|
|
5
|
+
function finding(id, summary) {
|
|
6
|
+
return { id, summary, actionable: true };
|
|
7
|
+
}
|
|
8
|
+
function choiceFetch(mapping) {
|
|
9
|
+
return (async (_url, init) => {
|
|
10
|
+
const body = JSON.parse(init.body);
|
|
11
|
+
const answers = {};
|
|
12
|
+
for (const id of Object.keys(body.questions)) {
|
|
13
|
+
const [choice, confidence] = mapping[id] ?? ["follow_up", 0.6];
|
|
14
|
+
answers[id] = { type: "choice", choice, confidence };
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
ok: true,
|
|
18
|
+
status: 200,
|
|
19
|
+
json: async () => ({ model: "jev-1.13.0", answers, usage: { input_tokens: 200, output_tokens: 12 } }),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
test("parseMetaFindings accepts a PI_REVIEW_META_JSON line", () => {
|
|
24
|
+
const line = `PI_REVIEW_META_JSON: ${JSON.stringify({ findings: [{ id: "F1", summary: "bug", actionable: true }] })}`;
|
|
25
|
+
const findings = parseMetaFindings(`some stderr\n${line}\nmore`);
|
|
26
|
+
assert.equal(findings.length, 1);
|
|
27
|
+
assert.equal(findings[0].id, "F1");
|
|
28
|
+
});
|
|
29
|
+
test("parseMetaFindings accepts a bare meta JSON object", () => {
|
|
30
|
+
const findings = parseMetaFindings(JSON.stringify({ findings: [{ summary: "bug", actionable: true }] }));
|
|
31
|
+
assert.equal(findings.length, 1);
|
|
32
|
+
});
|
|
33
|
+
test("classifyFindings fans out one Choice per finding and maps answers", async () => {
|
|
34
|
+
const result = await classifyFindings(CONN, "baseline: fix the login crash", [finding("F1", "login crash on empty password"), finding("F2", "sidebar color drift")], choiceFetch({ F1: ["in_scope_blocker", 0.93], F2: ["follow_up", 0.71] }));
|
|
35
|
+
assert.equal(result.findings.length, 2);
|
|
36
|
+
assert.equal(result.findings[0].classification, "in_scope_blocker");
|
|
37
|
+
assert.equal(result.findings[0].confidence, 0.93);
|
|
38
|
+
assert.equal(result.findings[0].uncertain, false);
|
|
39
|
+
assert.equal(result.findings[1].classification, "follow_up");
|
|
40
|
+
assert.equal(result.model, "jev-1.13.0");
|
|
41
|
+
assert.deepEqual(result.usage, { inputTokens: 200, outputTokens: 12 });
|
|
42
|
+
});
|
|
43
|
+
test("classifyFindings flags low confidence as uncertain", async () => {
|
|
44
|
+
const result = await classifyFindings(CONN, "baseline", [finding("F1", "murky one")], choiceFetch({ F1: ["stop_and_escalate", CLASSIFY_CONFIDENCE_FLOOR - 0.01] }));
|
|
45
|
+
assert.equal(result.findings[0].classification, "stop_and_escalate");
|
|
46
|
+
assert.equal(result.findings[0].uncertain, true);
|
|
47
|
+
});
|
|
48
|
+
test("classifyFindings rejects a choice outside the criteria (never invents a class)", async () => {
|
|
49
|
+
const badFetch = (async () => ({
|
|
50
|
+
ok: true,
|
|
51
|
+
status: 200,
|
|
52
|
+
json: async () => ({ answers: { F1: { type: "choice", choice: "made_up_class", confidence: 0.9 } } }),
|
|
53
|
+
}));
|
|
54
|
+
const result = await classifyFindings(CONN, "baseline", [finding("F1", "x")], badFetch);
|
|
55
|
+
assert.equal(result.findings.length, 0);
|
|
56
|
+
assert.deepEqual(result.unclassified, ["F1"]);
|
|
57
|
+
});
|
|
58
|
+
test("classifyFindings assigns fallback ids when findings lack them", async () => {
|
|
59
|
+
const result = await classifyFindings(CONN, "baseline", [{ summary: "no id", actionable: true }], choiceFetch({}));
|
|
60
|
+
assert.equal(result.findings[0].id, "F1");
|
|
61
|
+
});
|
|
62
|
+
test("formatClassifyAscii groups by class and marks uncertainty", () => {
|
|
63
|
+
const text = formatClassifyAscii({
|
|
64
|
+
baselineChars: 10,
|
|
65
|
+
findings: [
|
|
66
|
+
{ id: "F1", summary: "crash", classification: "in_scope_blocker", confidence: 0.9, uncertain: false },
|
|
67
|
+
{ id: "F2", summary: "murky", classification: "stop_and_escalate", confidence: 0.3, uncertain: true },
|
|
68
|
+
],
|
|
69
|
+
unclassified: [],
|
|
70
|
+
model: "jev-1.13.0",
|
|
71
|
+
});
|
|
72
|
+
assert.match(text, /In-scope\s+F1/);
|
|
73
|
+
assert.match(text, /Escalate\s+F2/);
|
|
74
|
+
assert.match(text, /F2 STOP_AND_ESCALATE 0\.30 \(low confidence\)/);
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=classify.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.test.js","sourceRoot":"","sources":["../src/classify.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAIvB,MAAM,IAAI,GAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAEvG,SAAS,OAAO,CAAC,EAAU,EAAE,OAAe;IAC1C,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,OAAyC;IAC5D,OAAO,CAAC,KAAK,EAAE,IAAY,EAAE,IAAsB,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC/D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;SACtG,CAAC;IACJ,CAAC,CAA4B,CAAC;AAChC,CAAC;AAED,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,IAAI,GAAG,wBAAwB,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACtH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;IACnF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,IAAI,EACJ,+BAA+B,EAC/B,CAAC,OAAO,CAAC,IAAI,EAAE,+BAA+B,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,EACtF,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CACzE,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IACpE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,IAAI,EACJ,UAAU,EACV,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAC5B,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,GAAG,IAAI,CAAC,EAAE,CAAC,CAC7E,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;IAChG,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7B,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;KACtG,CAAC,CAA4B,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACnH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,aAAa,EAAE,EAAE;QACjB,QAAQ,EAAE;YACR,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE;YACrG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;SACtG;QACD,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,YAAY;KACpB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iDAAiD,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -2,13 +2,18 @@
|
|
|
2
2
|
import { isInstallHelp } from "./install-args.js";
|
|
3
3
|
import { isPanelActive, parseArgs, usage } from "./args.js";
|
|
4
4
|
import { readReviewStdin, runModels, runReview, runReviewOnce } from "./review.js";
|
|
5
|
+
import { normalizePayloadRefs, splitPayload } from "./prompt.js";
|
|
6
|
+
import path from "node:path";
|
|
5
7
|
import { formatLoopSummary, runReviewLoop } from "./loop.js";
|
|
6
8
|
import { runPanelReview, runPanelReviewOnce, runPanelReviewWithUi } from "./panel.js";
|
|
7
9
|
import { resolveConfig } from "./config.js";
|
|
8
10
|
import { currentConfig } from "./pi-config.js";
|
|
11
|
+
import { DeterministicMatcher, SemanticMatcher } from "./matcher.js";
|
|
12
|
+
import { createJevAdjudicator, resolveJev, resolveJevConnection, withAdjudicationFallback } from "./jev.js";
|
|
9
13
|
import { installSkill, uninstallSkill } from "./skill.js";
|
|
10
14
|
import { runUpdate } from "./update.js";
|
|
11
15
|
import { runInstall } from "./install.js";
|
|
16
|
+
import { runClassify } from "./classify.js";
|
|
12
17
|
const parsed = parseArgs(process.argv.slice(2));
|
|
13
18
|
if (isInstallHelp(parsed))
|
|
14
19
|
usage(0);
|
|
@@ -18,6 +23,27 @@ if (isInstallHelp(parsed))
|
|
|
18
23
|
for (const warning of currentConfig().warnings) {
|
|
19
24
|
process.stderr.write(`pi-review: config warning: ${warning}\n`);
|
|
20
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Matcher for the loop's cross-round comparison. Jev when the enhancement is
|
|
28
|
+
* on and a key exists; a Jev failure degrades to deterministic-only matching
|
|
29
|
+
* (never an LLM adjudicator child — this is advisory bookkeeping, not a gate).
|
|
30
|
+
*/
|
|
31
|
+
function loopMatcher(parsed) {
|
|
32
|
+
const payload = normalizePayloadRefs(splitPayload(parsed.payload));
|
|
33
|
+
const baseDir = payload.pathTargets && payload.pathTargets.length === 1
|
|
34
|
+
? path.resolve(payload.pathTargets[0])
|
|
35
|
+
: undefined;
|
|
36
|
+
const options = baseDir ? { baseDir } : {};
|
|
37
|
+
const jevOn = resolveJev(process.env, currentConfig(process.env).config).enabled;
|
|
38
|
+
const connection = jevOn ? resolveJevConnection(process.env) : undefined;
|
|
39
|
+
if (!connection)
|
|
40
|
+
return new DeterministicMatcher(options);
|
|
41
|
+
const silentPiFallback = { adjudicate: async () => ({ merges: [] }) };
|
|
42
|
+
const wrapped = withAdjudicationFallback(createJevAdjudicator(connection), silentPiFallback, (message) => {
|
|
43
|
+
process.stderr.write(`pi-review: warning: ${message}\n`);
|
|
44
|
+
});
|
|
45
|
+
return new SemanticMatcher(wrapped.adjudicator, options);
|
|
46
|
+
}
|
|
21
47
|
if (parsed.command === "models") {
|
|
22
48
|
const config = resolveConfig();
|
|
23
49
|
runModels(config.piBin, parsed.search || []);
|
|
@@ -25,6 +51,9 @@ if (parsed.command === "models") {
|
|
|
25
51
|
else if (parsed.command === "update") {
|
|
26
52
|
runUpdate();
|
|
27
53
|
}
|
|
54
|
+
else if (parsed.command === "classify") {
|
|
55
|
+
await runClassify(parsed, readReviewStdin());
|
|
56
|
+
}
|
|
28
57
|
else if (parsed.command === "install") {
|
|
29
58
|
runInstall({
|
|
30
59
|
pi: parsed.installPi !== false,
|
|
@@ -43,7 +72,11 @@ else if (parsed.command === "loop") {
|
|
|
43
72
|
const runOne = isPanelActive(parsed)
|
|
44
73
|
? () => runPanelReviewOnce(parsed, stdinText)
|
|
45
74
|
: () => runReviewOnce(parsed, stdinText);
|
|
46
|
-
const result = await runReviewLoop({
|
|
75
|
+
const result = await runReviewLoop({
|
|
76
|
+
maxRounds: parsed.maxRounds,
|
|
77
|
+
...(parsed.until ? { until: parsed.until } : {}),
|
|
78
|
+
matcher: loopMatcher(parsed),
|
|
79
|
+
}, runOne);
|
|
47
80
|
process.stdout.write(`${formatLoopSummary(result)}\n`);
|
|
48
81
|
process.exit(result.exitCode);
|
|
49
82
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|