@polycode-projects/the-mechanical-code-talker 0.8.1 → 0.9.0

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 CHANGED
@@ -42,6 +42,20 @@ is refused outright). Reversible-passive questions traverse the right direction:
42
42
  "what is imported by Y" and "what does Y import" are understood as opposite
43
43
  edges, not the same one.
44
44
 
45
+ **Finding by description.** "find me the payment class" searches by type and a
46
+ fuzzy match against the entity's own properties, instead of making you name it
47
+ exactly. It checks the type itself and its subclasses first. Only if nothing
48
+ matches there does it widen to a related type, and when it does, it says so
49
+ plainly rather than presenting the looser match as exact.
50
+
51
+ **Synonyms and everyday phrasing.** tmct matches many of the words people
52
+ actually use for the same idea, from a curated synonym list plus a filtered
53
+ ConceptNet slice. A slightly different word for the same concept still
54
+ resolves. It also follows a few common sentence shapes: clauses starting with
55
+ *because/although/while*, and conditionals ("if X were removed, what
56
+ breaks"). It flags a question whose premise doesn't hold, too: "why does X
57
+ still import Y" when it no longer does.
58
+
45
59
  **Response finishing.** Before an answer is printed it is segmented into typed
46
60
  spans — prose versus *protected* entities, paths, numbers, code, provenance, and
47
61
  receipts — and a small data-driven grammar pass runs on the prose spans only,
package/ROADMAP.md CHANGED
@@ -12,43 +12,98 @@ mapped into them (item numbers retained for traceability); the seven sketches
12
12
  formerly held in `code-talker-ideas.txt` are folded into items 8–11 below and
13
13
  the file has been deleted.
14
14
 
15
- ## Where we are now (2026-07-06)
16
-
17
- **Built: v0.8.1 Phase 11 deepened (0.8.0 shipped + published; 0.8.1 push held for the operator).**
18
- `npm test` green (**916**). 0.8.1 hardened the router with real *reasoning* measurement and closed the
19
- frontier stages, all under the same demonstrated-vs-designed honesty discipline:
20
-
21
- - **AGENTBENCH now grades the executed composed RESULT, not just the call-plan** (retires the headline
22
- 0.8.0 caveat). Under result-grading the resolver is **97% plan / 91% result / 0% hallucination**; the
23
- honest gap lands exactly where reasoning is hard (C1, C2).
24
- - **Stage 5 the C2 goal-reasoner** (BDI + Goal-Driven Autonomy) genuinely lifts result-completion.
25
- The honest, **like-for-like** figure is the *driver swap on the identical 39-case ladder*
26
- (`AGENTBENCH_0.8.1_001`): resolver **85% goal-reasoner 95% result** (+10pp, purely the driver, 0%
27
- hallucination). C2 is **cleared for one declared coverage-invariant goal-rule** — real and
28
- phrasing-robust (validated by held-out phrasings graded blind, no request-string literals), but
29
- **thinly sampled, not rule-general**; the open-world case is honestly **refused**. *(NB: the
30
- cross-release "0→83% C2" reads on a grown 6-case C2 ladder whose 4 new cases exercise the
31
- goal-reasoner — not a like-for-like rate; the same-basket win is one case fixed, 0→50% original C2.)*
32
- - **Stage 2 imperative intent frames + ACE reach** (`AGENTBENCH_0.8.1_002`, goal driver): **100% plan
33
- / 95% result / 0% hallucination**. `tmct_calls` is now **genuinely NL-reachable** via a distinct
34
- edge-dump frame (not by un-tagging bidirectional conformance enforces it; `NOT_NL_REACHABLE` is now
35
- `{}`). ACE is wired **async** into the interpret pipeline so the synchronous CHATBENCH parse spine is
36
- **byte-identical** ACE is inert in the shipped product path (`interpret()` is called nowhere in
37
- chat/ask/server/bin), reach without regression.
38
- - **Chat surface (CHATBENCH_0.8.1):** quick wins (singular "what is a test", friendly commit-author
39
- refs, "No tests cover X" honest-empty, the chatbench discourse-count flake root-caused + scrubbed) +
40
- two playtests (coverage-survey + authorship routing; **6 frozen `chatflow-*` transcripts** total).
41
- Joint deterministic CHATBENCH (both new frame tables together): **no tier-1 regression vs 0.7.1.**
42
- Judged tags touched by the text changes were re-judged (not blanket-reused) — see `CHATBENCH_0.8.1`.
43
-
44
- **Shipped earlier in v0.8.0 (published):** all five Phase-11 tracks — the `/v1/messages` shim + Stage-0
45
- registry + resolver/guardrail/planner (`AGENTBENCH_0.8.0_001`: 96% *plan* completion, 0% hallucination,
46
- closed-world C1); the three chat levers (`CHATBENCH_0.8.0`: tier-1 331→333); the `../bedrock-meter` `$0`
47
- rung (rank 0 below nova-micro, £0 metered e2e); the playtest; and the Stage-2/Stage-5 research notes.
48
-
49
- **Next:** grow the thin C2/coverage sampling to a second goal-rule; author→commit querying (a dead-end
50
- the friendly-commit-ref quick win opened); AGENTBENCH ladder depth; the tier-4/tier-5 Phase LATER long
51
- tail. See Phase 11 below and `HANDOVER.md` for the full open-follow-up list.
15
+ ## Where we are now (2026-07-07)
16
+
17
+ `npm test` green (**1033**). A version bump to reflect this session's wave is imminent; see
18
+ `HANDOVER.md` for the exact release status.
19
+
20
+ ### Now: shipped this session
21
+
22
+ - **5 bugs fixed.** Recall half-match replay + staple-onto-wall; 4 wall-kindness gaps (orientation
23
+ blurb repeat, "thanks, `<clause>`" walls, a reexports vocabulary leak, `/describe` not surfacing
24
+ taught facts); grain-aware entity resolution (fixes the fuzzy-entity false-empty and a
25
+ function/module coverage contradiction); module-grain overview gap. Full list in `HANDOVER.md`.
26
+ - **A new feature: predicate-based "find" queries.** "find me the payment class" now works:
27
+ type-filtered, fuzzy property-surface matching, with a narrow-then-broaden inheritance-aware
28
+ cascade and a boolean-fold generalization for compositional predicate queries. Design:
29
+ `PLAN_PREDICATE_QUERIES.md`.
30
+ - **Two research tracks landed as code.** The ontology plan's two inert synonym resources
31
+ (ConceptNet synonym/similar-to rows, phrasebook synonym families) are now wired into query-time
32
+ matching, and the disjointness premise set plus numeric vocabulary grew
33
+ (`PLAN_ontology-hierarchies.md`). The advanced-grammar plan's closed-frame subordination and
34
+ conditional support, plus presupposition honest-nudges, landed (`PLAN_ADVANCED_GRAMMAR.md`); the
35
+ graded pool grew 925 to 1075 cases across 6 new construction families (`chatbench/GRADED.md`).
36
+ - **A new benchmark: infbench.** A 6-band classical-logic ladder (INF-A1..C2), mechanically
37
+ generated, first baseline in `INFBENCH_0.8.2.md`. Kernel A1/A2 clean; chat A1 100%, A2 exactly
38
+ 50% (the cax-sco gap, now measured). The ladder gates at B1 (33%) because the disjointness proof
39
+ rule doesn't exist yet.
40
+ - **A new demo** (`demo/agentic-loop-demo.mjs`) shows the zero-LLM deduce-plan-execute-compose loop
41
+ end to end, and surfaced a real goal-reasoner honesty gap (Bug 8, below).
42
+ - **A session-loop fix.** A throwing turn no longer aborts a piped/non-interactive session.
43
+ - **4 new plan docs.** `PLAN_ontology-hierarchies.md`, `PLAN_INFERENCE_TESTING.md` (revised so
44
+ infbench generation is mechanical, not hand-authored), `PLAN_PREDICATE_QUERIES.md`, and
45
+ `PLAN_CODE.md` (new, program synthesis over tmct's closed DSLs, gated on explicit operator
46
+ sign-off per track, not built yet).
47
+
48
+ ### Next: the open follow-ups
49
+
50
+ In priority order (full detail and measured targets in `HANDOVER.md`):
51
+
52
+ 1. **Bug 8.** The goal-reasoner's global-mode deduction answers requests unrelated to any deduced
53
+ goal with false confidence, once no focus entity binds (`src/router/goal-reasoner.mjs:226`).
54
+ The most serious open issue: a genuine confident-wrong failure in the flagship
55
+ zero-hallucination capability. Needs a real semantic gate.
56
+ 2. **Bug 6.** Scoped listing false-empty: "list modules in `<pkg>`" returns empty though the
57
+ unscoped lister shows matches. Found dogfooding a 191k-entity monorepo graph.
58
+ 3. **Bug 7.** A modal auxiliary ("should") survives the fuzzy-correction cascade and misreads as
59
+ "hold". The diagnosed fix is adding modals to `STOPWORDS`.
60
+ 4. **`PLAN_TMCT_ECOSYSTEM_INTEGRATION.md`.** A separate concurrent session is drafting this
61
+ 3-part tmct/bedrock-meter/marginalia integration plan. Check for completion and finalize.
62
+ 5. **`PLAN_CODE.md`'s sign-off decision.** Track 1 (rule/frame synthesis) is the lowest-risk
63
+ candidate; decide with the operator whether to greenlight it.
64
+ 6. Smaller chat-feel residuals from the 0.8.2 confirmation playtest, the Track-1 trio (pronoun,
65
+ temporal, discourse-count, measured red sets), `edgesOfKind` memoization for monorepo-scale
66
+ latency, and the version bump plus push.
67
+
68
+ ### Later: deferred by design, staged inside each plan
69
+
70
+ Each plan doc stages its own later phases; this list just points to them rather than repeating
71
+ their tables.
72
+
73
+ - **infbench stages 1-5** (`PLAN_INFERENCE_TESTING.md` §4). The disjointness proof rule (unlocks
74
+ B1), proof-chain materialization, cardinality entailment, consistency checking.
75
+ - **Advanced-grammar tracks b/d/e** (`PLAN_ADVANCED_GRAMMAR.md`). The constructions not landed
76
+ this wave: stacked modality/passive, implicit arguments, and the rest of the CEFR inventory
77
+ audit table.
78
+ - **Ontology stage 3+** (`PLAN_ontology-hierarchies.md`). Beyond the synonym-wiring and
79
+ disjointness growth landed this wave.
80
+ - **`PLAN_CODE.md` tracks 2/3.** Small JS-function synthesis and HTML/CSS-fragment synthesis, both
81
+ via a Playwright-sandboxed headless browser. Explicitly staged well behind Track 1, each gated
82
+ on its own operator sign-off.
83
+
84
+ ### History — what shipped in earlier releases
85
+
86
+ **v0.8.2** (the chat-feel wave + rule-general C2): tier-1 CHATBENCH 334/334 (draw A) + 285/285
87
+ (draw B), zero regressions; the cycle-1 hard-fail `gq-functions-call-fnalpha` flipped green.
88
+ Landed recall hygiene, preamble/politeness frames, calls∪callsSymbol + grain/meta fallbacks, the
89
+ author lane, wall kindness + honest capability nudges, teach-lane widening, receipt tails
90
+ prose→detail, plus a live-found scale hotfix (`edgesOfKind` argument-spread overflow past ~100k
91
+ edges). AGENTBENCH ladder grew 43→56 cases; goal driver 100% plan / 98% result / 0% hallucination,
92
+ all rungs gate-PASS; resolver floor clean A0–C1 100/100; C2 became rule-general (two declared
93
+ goal-rules, pure `applicableRules` selection). Full detail: `CHATBENCH_0.8.2.md`,
94
+ `AGENTBENCH_0.8.2.md`.
95
+
96
+ **v0.8.1** (published): AGENTBENCH grades the executed composed result, not just the call-plan.
97
+ Resolver 97% plan / 91% result / 0% hallucination. Stage 5 (the C2 goal-reasoner, BDI + Goal-Driven
98
+ Autonomy) lifted result-completion +10pp on a like-for-like driver swap. Stage 2 (imperative intent
99
+ frames + ACE reach) shipped at 100% plan / 95% result / 0% hallucination, `tmct_calls` genuinely
100
+ NL-reachable. Chat surface: quick wins + two frozen playtest transcripts, no tier-1 regression vs
101
+ 0.7.1. Full detail: `CHATBENCH_0.8.1.md`, `AGENTBENCH_0.8.1.md`.
102
+
103
+ **v0.8.0** (published): all five Phase-11 tracks. The `/v1/messages` shim + Stage-0 registry +
104
+ resolver/guardrail/planner (96% plan completion, 0% hallucination, closed-world C1); three chat
105
+ levers; the `../bedrock-meter` $0 rung; the playtest; Stage-2/Stage-5 research notes. Full detail:
106
+ `CHATBENCH_0.8.0.md`, `AGENTBENCH_0.8.0.md`.
52
107
 
53
108
  ## The umbrella product definition (item 1)
54
109
 
@@ -635,7 +690,7 @@ you toward precision" promise on the conversational surface.
635
690
  with new graded cells for the miss / empty-graph / concept-touch surfaces so these become
636
691
  regression-protected levers, not one-off polish.
637
692
 
638
- ## Phase 11 — The capability router & the agentic bench (0.8.0 shipped · 0.8.1 deepened)
693
+ ## Phase 11 — The capability router & the agentic bench (0.8.0 shipped · 0.8.1 deepened · 0.8.2 feel + rule-general C2)
639
694
 
640
695
  *(Operator-directed 2026-07-06; built the same day across five concurrent tracks.)* tmct as a **deterministic, no-LLM
641
696
  tool router** behind an Anthropic-compatible API — the workstream specified in
@@ -657,6 +712,14 @@ real deliverable. The five tracks below are all built; the two research-agent st
657
712
  remain designed-not-built by intent.
658
713
 
659
714
  ### Track 1 — chat-surface levers (next CHATBENCH; all three)
715
+
716
+ > **STATUS (0.8.2):** the surrounding feel surface landed — PLAN_CHAT_FEEL items **1–5, 7, 8**
717
+ > (recall hygiene, preamble frames, call-relation self-consistency, author lane, wall kindness,
718
+ > teach-lane widening, honest nudges) shipped and gate-verified deterministically. **The trio
719
+ > below is DEFERRED post-release with measured targets** (advisor tick-4): pronoun red set = 18
720
+ > g-b1-pron ids; temporal = g-b1-temp ×5 + g-c1-temp ×9; discourse-count re-measure first — it
721
+ > sampled 0/5 red and is likely already green. See HANDOVER follow-up #3.
722
+
660
723
  The three levers `CHATBENCH_0.7.1` measured + ranked — which **double as router prerequisites** (they
661
724
  gate the A2→B1→C1 rungs, per Phase B of the router plan):
662
725
  1. **Pronoun / focus binding** — the "it → Commit" mis-bind (`B1 pron 1.24`); biggest movable mass.
@@ -666,6 +729,12 @@ gate the A2→B1→C1 rungs, per Phase B of the router plan):
666
729
  Land all three (not just #1); they raise the chat floor *and* the router's floor at once.
667
730
 
668
731
  ### Track 2 — the router build (the within-horizon slice, in order)
732
+
733
+ > **STATUS (0.8.2):** the C1 composition gap closed — the **member-filter HTN method + per-member
734
+ > callees hop** flips the standing C1 red in both drivers (resolver floor A0–C1 all 100/100); the
735
+ > ladder grew 43→56 fixture-linted cases; the bench-import smell is inverted
736
+ > (`src/router/call-validator.mjs` + `set-algebra.mjs`).
737
+
669
738
  Buildable now with a frontier model as co-author (see PLAN §"solved vs unsolved"):
670
739
  - **Phase A — the shim.** An Anthropic Messages API endpoint (`/v1/messages`, `tool_use`/`tool_result`
671
740
  blocks). **Extended:** also present as a **`bedrock-meter`-compatible routing target** (see below).
@@ -704,6 +773,12 @@ critical build path:
704
773
  - **Stage 5 — goal-reasoner, closed-world C2** — BDI + Goal-Driven Autonomy: deduce-goals (long-chain
705
774
  deduction) → plan-each (C1) → threat-aware, *persistent* first-step arbitration.
706
775
 
776
+ > **STATUS (0.8.2):** both research stages are now BUILT and measured. Stage 2 landed in 0.8.1_002;
777
+ > Stage 5's 0.8.1 "one thin rule" caveat is retired — **C2 is rule-general**: two declared
778
+ > goal-rules (`coverage-invariant`, `cochange-risk-invariant`) selected by pure `applicableRules`
779
+ > deduction with honest refusals at both failure modes (0 applicable = open-world, >1 = ambiguous),
780
+ > zero request keywords. Goal driver: 100% plan / 98% result / 0% hallucination over 56 cases.
781
+
707
782
  ## Phase LATER — recognized, deferred, not now
708
783
 
709
784
  Features we have deliberately shaped seams for but will not build until the phases above have
@@ -236,3 +236,45 @@
236
236
  {"start":"/c/en/memory_graph","rel":"/r/HasA","end":"/c/en/fact","weight":2}
237
237
  {"start":"/c/en/fact","rel":"/r/PartOf","end":"/c/en/memory_graph","weight":2}
238
238
  {"start":"/c/en/seon","rel":"/r/IsA","end":"/c/en/ontology","weight":2}
239
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/interface","weight":2}
240
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
241
+ {"start":"/c/en/interface","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
242
+ {"start":"/c/en/structure","rel":"/r/DistinctFrom","end":"/c/en/interface","weight":2}
243
+ {"start":"/c/en/structure","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
244
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/structure","weight":2}
245
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/destructor","weight":2}
246
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/getter","weight":2}
247
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
248
+ {"start":"/c/en/destructor","rel":"/r/DistinctFrom","end":"/c/en/getter","weight":2}
249
+ {"start":"/c/en/destructor","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
250
+ {"start":"/c/en/getter","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
251
+ {"start":"/c/en/controller","rel":"/r/DistinctFrom","end":"/c/en/model","weight":2}
252
+ {"start":"/c/en/controller","rel":"/r/DistinctFrom","end":"/c/en/view","weight":2}
253
+ {"start":"/c/en/model","rel":"/r/DistinctFrom","end":"/c/en/view","weight":2}
254
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/number","weight":2}
255
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/object","weight":2}
256
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
257
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
258
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/object","weight":2}
259
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
260
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
261
+ {"start":"/c/en/object","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
262
+ {"start":"/c/en/object","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
263
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/linter","weight":2}
264
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/formatter","weight":2}
265
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
266
+ {"start":"/c/en/linter","rel":"/r/DistinctFrom","end":"/c/en/formatter","weight":2}
267
+ {"start":"/c/en/linter","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
268
+ {"start":"/c/en/formatter","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
269
+ {"start":"/c/en/constant","rel":"/r/DistinctFrom","end":"/c/en/attribute","weight":2}
270
+ {"start":"/c/en/constant","rel":"/r/DistinctFrom","end":"/c/en/parameter","weight":2}
271
+ {"start":"/c/en/attribute","rel":"/r/DistinctFrom","end":"/c/en/parameter","weight":2}
272
+ {"start":"/c/en/field","rel":"/r/DistinctFrom","end":"/c/en/property","weight":2}
273
+ {"start":"/c/en/loop","rel":"/r/DistinctFrom","end":"/c/en/expression","weight":2}
274
+ {"start":"/c/en/assertion","rel":"/r/DistinctFrom","end":"/c/en/loop","weight":2}
275
+ {"start":"/c/en/header","rel":"/r/DistinctFrom","end":"/c/en/script","weight":2}
276
+ {"start":"/c/en/client","rel":"/r/DistinctFrom","end":"/c/en/server","weight":2}
277
+ {"start":"/c/en/request","rel":"/r/DistinctFrom","end":"/c/en/response","weight":2}
278
+ {"start":"/c/en/question","rel":"/r/DistinctFrom","end":"/c/en/answer","weight":2}
279
+ {"start":"/c/en/bug","rel":"/r/DistinctFrom","end":"/c/en/feature","weight":2}
280
+ {"start":"/c/en/issue","rel":"/r/DistinctFrom","end":"/c/en/requirement","weight":2}
@@ -60,7 +60,7 @@
60
60
  {"id":"conversational-greeting-good-evening","class":"conversational","register":"friendly","template":"Good evening. Ask me about this codebase, or /help."}
61
61
  {"id":"conversational-thanks","class":"conversational","register":"friendly","template":"Any time. Ask another, or /help for what I can do."}
62
62
  {"id":"conversational-farewell","class":"conversational","register":"friendly","template":"Bye — flushing the session log. Come back with a question any time."}
63
- {"id":"orientation-friendly","class":"orientation","register":"friendly","template":"I answer questions about THIS codebase's structure — imports, calls, definitions,\nhistory and counts. For example:\n which modules import walk.mjs\n what calls buildContextBundle\n how many classes are there\n/help for commands, /stats for an overview of the graph."}
63
+ {"id":"orientation-friendly","class":"orientation","register":"friendly","template":"I answer questions about THIS codebase's structure — imports, calls, definitions,\nhistory and counts. For example:\n which modules import {example1}\n what calls {example2}\n how many classes are there\n/help for commands, /stats for an overview of the graph."}
64
64
  {"id":"miss-no-previous-answer","class":"miss","register":"friendly","template":"No previous answer to expand yet — ask me a question first, then say \"why\" or \"say more\"."}
65
65
  {"id":"conversational-greeting-empty","class":"conversational","register":"friendly","template":"Hi. There's no code graph loaded here — for code structure (imports, calls, definitions) I need a `.tmct/graph.json`: point me at one with `--repo <path>`, or try the shipped example `npm run example:mini`. (tmct reads graphs; it doesn't index code itself.) For general vocabulary, `tmct init` seeds concepts — try \"what is a cache\". /help for commands."}
66
66
  {"id":"orientation-empty","class":"orientation","register":"friendly","template":"There's no code graph loaded here, so I can't answer structure questions (imports, calls, definitions) yet.\nFor those I need a `.tmct/graph.json` produced by a graph producer — point me at one with `--repo <path>`, or try the shipped example `npm run example:mini`. tmct reads graphs; it doesn't index code itself.\nFor general vocabulary, `tmct init` seeds concepts — try \"what is a cache\". /help for commands, /memory for what I remember."}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polycode-projects/the-mechanical-code-talker",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The Mechanical Code Talker (tmct) — a tolerant, offline, $0 chat surface that guides you toward precision queries about a software repository. ELIZA/PARRY-style but domain-obsessed with code. No model calls; no codebase index of its own.",
@@ -87,6 +87,7 @@
87
87
  "chatbench:judge": "node chatbench/judge.mjs",
88
88
  "serve": "node bin/tmct.mjs serve",
89
89
  "agentbench:run": "node agentbench/run.mjs",
90
+ "infbench": "node infbench/generate-cases.mjs && node infbench/run.mjs",
90
91
  "audit": "npm audit --audit-level=high",
91
92
  "audit:fix": "npm audit fix"
92
93
  },