@jefuriiij/synthra 0.1.22 → 0.1.24

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
@@ -7,6 +7,82 @@ For older versions, see [GitHub Releases](https://github.com/jefuriiij/synthra/r
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.1.24] — 2026-06-06
11
+
12
+ ### Added
13
+
14
+ - **`syn doctor [path]` — setup and environment health check (issue #9).** New
15
+ read-only CLI subcommand that runs a one-shot checklist and exits. Checks: Node
16
+ version, `jq` availability (bash Stop/Prime hooks silently no-op without it),
17
+ `claude` CLI on PATH, graph freshness (symbol count, schema version, scan age),
18
+ `.mcp.json` project-scope registration (required for Synthra tools to appear in
19
+ the Claude Code IDE), CLAUDE.md policy-block version, and hook installation
20
+ status. Warnings surface with the exact `syn .` command needed to resolve them.
21
+ The command mutates nothing — safe to run at any time.
22
+
23
+ - **Graph-tool usage metric on the dashboard (issue #2).** The MCP server now
24
+ appends a record to `.synthra-graph/tool_log.jsonl` on every Synthra tool call
25
+ (`graph_continue`, `graph_read`, `graph_register_edit`, etc.). `delta.ts`
26
+ aggregates per-tool call counts into `ProjectStats.tool_calls` (per-project) and
27
+ `global.tool_calls` (cross-project totals). The dashboard shows a new "Graph
28
+ tools used" card in the right column with per-tool counts. This is a positive
29
+ signal complementing the Moat's blocked-Grep count: it captures Synthra pivots
30
+ that happen before a Grep fires, which the block counter misses entirely.
31
+
32
+ - **Session-aware routing — `graph_continue` seeds retrieval with the session's
33
+ touched files (issue #14).** Files the human recently saved (last 15 min) and
34
+ files the AI registered via `graph_register_edit` now get a ranking boost in
35
+ `graph_continue` results, so the returned context tracks what you're actually
36
+ working on. Mirrors the `/pack` route, which already seeded retrieval this way.
37
+
38
+ ---
39
+
40
+ ## [0.1.23] — 2026-06-06
41
+
42
+ ### Added
43
+
44
+ - **Dashboard token-log dedupe can now be disabled via `SYN_DASHBOARD_DEDUPE=0`.**
45
+ By default, `delta.ts` deduplicates `token_log.jsonl` entries that share the
46
+ same project, usage totals, and second-rounded timestamp — collapsing the
47
+ duplicate writes that a co-installed AI tool's Stop hook may produce. Set
48
+ `SYN_DASHBOARD_DEDUPE=0` (also accepts `off` or `false`) to see every raw
49
+ entry. Useful when debugging multi-tool coexistence or auditing raw log data.
50
+
51
+ - **Graph schema-migration check on load.** A new `SCHEMA_VERSION` constant is
52
+ exported from `src/graph/types.ts` and stamped into `info_graph.json` by
53
+ `buildGraph`. On server start, `http.ts` compares the stored graph's
54
+ `schema_version` to the current constant; if they differ it triggers an
55
+ automatic one-time rescan instead of serving an incompatible graph. No
56
+ behavior change today — all graphs are v1 and schema_version matches — but
57
+ this is the forward-safety mechanism for future schema bumps so existing
58
+ graphs are never silently misread.
59
+
60
+ ### Fixed
61
+
62
+ - **JS/TS parser now captures member-assigned functions** (`exports.handler = fn`,
63
+ `module.exports.route = () => {}`, `this.x = () => {}`). Previously these
64
+ CommonJS/member-export patterns were invisible to the query, so modules that
65
+ exclusively use this style extracted zero symbols and degraded to whole-file
66
+ reads via `graph_read`. A member-assignment capture has been added to both
67
+ `JS_QUERY` and `TS_QUERY` in `src/scanner/parsers/typescript.ts`. Note: a
68
+ pure-wiring `server.js` whose only structure is anonymous inline-callback
69
+ arguments (e.g. `io.use(...)` / `socket.on(event, fn)`) is genuinely
70
+ symbol-less — that is correct, and the gate's symbol-hit guard already
71
+ prevents blocking such files.
72
+
73
+ ### Changed
74
+
75
+ - **Policy block v4 → v5.** Adds a "large file — pull the symbol, don't
76
+ chunk" nudge to address recurring dogfood friction: on large files Claude
77
+ was reading successive line-range chunks instead of fetching the specific
78
+ symbol via `graph_read("file::symbol")`. The v5 block now explicitly
79
+ instructs: when a file is large, use `graph_read("file/path.ts::SymbolName")`
80
+ to pull the symbol directly rather than reading successive line-range chunks.
81
+ `POLICY_VERSION` bumped `4 → 5`; existing v4 blocks auto-upgrade on the
82
+ next `syn .` run.
83
+
84
+ ---
85
+
10
86
  ## [0.1.22] — 2026-06-06
11
87
 
12
88
  ### Fixed