prjct-cli 2.42.0 → 2.42.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/CHANGELOG.md CHANGED
@@ -2,20 +2,28 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
- LLM-first surface pass: everything an agent reads from prjct errors, hook context, MCP output, semantic recall — got sharper and cheaper.
5
+ Hot-path performance pass over the hooks that fire on every Claude turn.
6
6
 
7
- ### Added
8
- - **Subagent context digest.** Spawned subagents used to receive the persona block only and re-investigated facts the main session already knew. The `SubagentStart` hook now injects a compact digest: role + the active task for *this worktree* + the top 2 preventive traps, capped at 500 chars. Variable content is safe here because SubagentStart emits via `systemMessage`, outside the cached prompt prefix.
9
- - **One-line trap cue on prompts.** The per-turn state hook stays PULL-not-PUSH for decisions/learnings/facts, with one exception: when the prompt's keywords BM25-match a `gotcha`/`anti-pattern`, a single `> Trap on this topic:` line rides along with the state block — the same preventive class the pre-edit guard pushes, because a trap only helps *before* it's stepped in.
10
- - **Skill-miss feedback loop closed.** The Stop-hook detector already recorded "relevant but never referenced" knowledge as improvement-signals; now those signals act. Write side: each miss cancels the automatic `relates:` reference credit and nets the missed entry −0.3 usefulness (a miss is not usage). Read side: the cold-start digest gains a **Keeps being missed** slot for the entry flagged ≥2×, so chronically-missed knowledge gets pushed in front of the agent instead of accumulating silently.
7
+ ### Fixed
8
+ - **Session-end embedding backfill was a silent no-op.** The Stop hook passed the project *path* where `backfill` expects the project *id*, so every session end wrote vectors to a phantom database under `~/.prjct-cli/projects/Users/…` instead of the real project DB. Vectors now land where semantic search reads them.
11
9
 
12
- ### Changed
13
- - **No more truncated output for agents.** `out.fail`/`done`/`warn` truncated to 65–80 chars unconditionally; in non-TTY contexts (pipes, agents, CI) messages now pass through untruncated. Human TTY behavior unchanged.
14
- - **MCP server instructions trimmed ~3×.** The SDD canonical-sequence block duplicated the `prjct_spec_*` tool descriptions verbatim on every MCP turn and contradicted the skill's default-DIRECT routing; the instructions are back to the anti-harness shape (use-when + what's-here + gotchas). `prjct_task_set_status` now surfaces the real "unsupported transition" message instead of a generic no-active-task line.
10
+ ### Performance (per-turn hooks)
11
+ - **Stop hook reads the config once and the transcript once.** It read `prjct.config.json` 4–5× per turn (once per sub-service, plus once per `remember()` call) and read+parsed the session transcript JSONL 3× (transcript-learner, friction-detector, skill-miss-detector). The hook now reads each once and threads them through; the three detectors share one JSONL tokenizer (`transcript-jsonl.ts`), deduplicating three identical parsers.
12
+ - **`StorageManager.update` is one transaction.** The optimistic-CAS retry loop (up to 8 × [2 SELECTs + UPDATE]) is now a single `BEGIN IMMEDIATE` read-modify-write strictly stronger for multi-agent state (concurrent writers wait on the lock instead of looping), with 1 SELECT + 1 write per update.
13
+ - **Embedding backfill fetches only new entries.** A SQL anti-join replaces deserializing the whole memory corpus per Stop hook; noise-vector pruning (which needs the full corpus) is throttled to every 10th run.
14
+ - **Global config is stat-cached.** `resolveGlobalEmbeddings` did 7 `readFileSync`+parse of `global.json` per Stop hook; reads now revalidate against mtime+size, so a CLI write is still picked up by a long-lived daemon.
15
+ - **CLI cold-path reorder.** The hook fast path runs before the verb-registry import and the update/self-heal blocks (hooks need none of them); self-heal moved after the daemon fast path (SessionStart's own self-heal keeps coverage).
16
+
17
+ ## [2.42.1] - 2026-06-10
15
18
 
16
19
  ### Performance
17
- - **`recallForFile` is indexed.** The `prjct guard` / pre-edit lookup overfetched 500 recall rows and filtered by the `file` tag in JS. Migration 27 adds a virtual generated `file_tag` column (+ partial index) on `events`, so the lookup touches only file-tagged remember rows.
18
- - **Semantic search is bounded and norm-cached.** Migration 28 stores each vector's L2 norm at write time (backfilled), turning per-row cosine into a dot product; the scan is capped at the 2000 newest vectors per model. Still zero native deps — no sqlite-vec.
20
+
21
+ - hot paths Stop hook config/transcript once, CAS→txn, backfill anti-join + ghost-DB fix (#416)
22
+
23
+ ### Refactoring
24
+
25
+ - perf: hot paths — Stop hook config/transcript once, CAS→txn, backfill anti-join + ghost-DB fix (#416)
26
+
19
27
 
20
28
  ## [2.42.0] - 2026-06-10
21
29