synartesis 0.6.10 → 0.6.12

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,6 +2,62 @@
2
2
 
3
3
  What changed, and why it mattered. Dates are release dates.
4
4
 
5
+ ## 0.6.12 — 2026-09-13
6
+
7
+ ### Security
8
+
9
+ - **Nine advisories, none of them ours, all of them shipped anyway.** Four
10
+ high and five moderate arrived through one dependency's dependencies --
11
+ `fast-uri`, `qs` and `hono`, by way of the MCP SDK. Nothing in the published
12
+ npm package contained them: that bundle imports the SDK rather than inlining
13
+ it, so a fresh install resolves patched versions on its own. The desktop
14
+ application is the opposite -- it bundles everything, so it was carrying
15
+ `fast-uri` 3.1.5 and its four high advisories into every installer. Pinned to
16
+ patched versions; `pnpm audit --prod` now reports nothing.
17
+
18
+ ### Fixed
19
+
20
+ - **Two lookups that ran while somebody was waiting were full table scans.**
21
+ Finding a standing approval happens twice on every call that needs one, and
22
+ listing what is held backs both `synartesis gates` and the console. Neither
23
+ had an index, so both read every row in the journal -- including the
24
+ snapshots, which are the largest column there. At fifty thousand actions with
25
+ two-kilobyte snapshots, measured: 61ms and 56ms, on every irreversible call,
26
+ growing with the journal.
27
+
28
+ Both are now indexed: **61ms to 0.01ms, and 56ms to nothing.**
29
+
30
+ Deliberately without a schema version bump. This build refuses to open a
31
+ journal written by a different schema, so bumping would have told everybody
32
+ with history to abandon it in exchange for an index. Adding an index changes
33
+ no row and no meaning, the statement is idempotent, and it runs on every
34
+ open -- so an existing journal gains both the next time it is opened, and an
35
+ older build opening the same file afterwards neither notices nor cares.
36
+
37
+ ## 0.6.11 — 2026-09-13
38
+
39
+ ### Fixed
40
+
41
+ - **A conversation with Gemini died on the round after its first tool call.**
42
+ Gemini 3 signs the reasoning behind every function call it makes, and
43
+ refuses the next request outright if that signature does not come back on
44
+ the part it arrived on: `Function call is missing a thought_signature in
45
+ functionCall parts`. Nothing here was keeping it. The signature is now
46
+ carried through the loop and handed back untouched -- opaque, unread, and
47
+ never shown to anybody.
48
+ - **The same failure was waiting in the Claude adapter.** Passing thinking
49
+ blocks back is required when tools are in play, and the adapter was
50
+ rebuilding each assistant turn out of its text and its tool calls alone --
51
+ so the first tool call would have worked and the round after it would have
52
+ been a 400. The thinking blocks are kept in the order they were produced,
53
+ signature intact, and go back at the front of the turn they belong to.
54
+ - The loop between the two is what actually lost them, and now has a test of
55
+ its own: the adapters were each correct in isolation.
56
+
57
+ Nothing changes for OpenAI-compatible endpoints -- Mistral, Ollama, LM Studio,
58
+ vLLM, OpenAI itself. That protocol asks for nothing back, and inventing
59
+ something to send would be worse than sending nothing.
60
+
5
61
  ## 0.6.10 — 2026-09-13
6
62
 
7
63
  ### Added
@@ -240,6 +240,23 @@ CREATE TABLE IF NOT EXISTS actions (
240
240
  );
241
241
 
242
242
  CREATE INDEX IF NOT EXISTS actions_by_run ON actions(run_id, seq);
243
+
244
+ -- Deliberately not a schema version bump. Adding an index changes no row and
245
+ -- no meaning, IF NOT EXISTS makes it idempotent, and the statement is run on
246
+ -- every open -- so a journal written months ago gains these the next time it
247
+ -- is opened, and an older build opening the same file afterwards neither
248
+ -- notices nor cares. A version bump would have been the opposite: this build
249
+ -- refuses to open a journal from a different schema, and telling somebody to
250
+ -- abandon everything an agent has ever done in order to gain an index would
251
+ -- be a poor trade.
252
+ --
253
+ -- Both of these sit in front of a person waiting. findApproval runs twice on
254
+ -- every gated call and findGated backs the gates command and the console;
255
+ -- without them each is a full scan over rows that carry the snapshots, which
256
+ -- is the largest thing in the table. Measured at fifty thousand actions with
257
+ -- two-kilobyte snapshots: 61ms to 0.01ms, and 56ms to 0.00ms.
258
+ CREATE INDEX IF NOT EXISTS actions_approved ON actions(server, tool, status, approved_at);
259
+ CREATE INDEX IF NOT EXISTS actions_gated ON actions(status, ts);
243
260
  `;
244
261
 
245
262
  // src/journal/journal.ts
@@ -1580,4 +1597,4 @@ export {
1580
1597
  observeState,
1581
1598
  connectStdioUpstream
1582
1599
  };
1583
- //# sourceMappingURL=chunk-DRDKIFD3.js.map
1600
+ //# sourceMappingURL=chunk-FUVEHRJP.js.map
package/dist/cli.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  toResolvedRead,
28
28
  verifyAgainstServers,
29
29
  wasRefused
30
- } from "./chunk-DRDKIFD3.js";
30
+ } from "./chunk-FUVEHRJP.js";
31
31
  import {
32
32
  DriftConflict,
33
33
  ManifestError,
package/dist/proxy.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  runRead,
20
20
  toPayload,
21
21
  verifyAgainstServers
22
- } from "./chunk-DRDKIFD3.js";
22
+ } from "./chunk-FUVEHRJP.js";
23
23
  import {
24
24
  SnapshotError,
25
25
  UpstreamError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synartesis",
3
- "version": "0.6.10",
3
+ "version": "0.6.12",
4
4
  "description": "An undo layer for AI agents.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -70,7 +70,12 @@
70
70
  "pnpm": {
71
71
  "neverBuiltDependencies": [
72
72
  "better-sqlite3"
73
- ]
73
+ ],
74
+ "overrides": {
75
+ "fast-uri": "^3.1.7",
76
+ "hono": "^4.13.7",
77
+ "qs": "^6.16.0"
78
+ }
74
79
  },
75
80
  "devDependencies": {
76
81
  "@anthropic-ai/sdk": "^0.125.0",