@sigitcodereview-old / sigit / commits / bc268d4
Fork 0

A modular local inference LLM coding agent. Core component of siGit Factory.

Release v1.5.8

Bump the crate to 1.5.8 and write the changelog entry. The permission mode selector was filed under 1.5.7 by a commit that landed after the tag, so it was documented as shipped when it had not been. Moved to 1.5.8, where it actually goes out. Co-Authored-By: siGit Code <noreply@sigit.si>

Seto Elkahfi committed Sep 10, 2026 at 19:26 UTC bc268d44626bd0fd50de70755fe409a044959937
3 files changed +71 -3
CHANGELOG.md
+69 -1
@@ -1,6 +1,6 @@
1 # Changelog
2
3 -## 1.5.7
3 +## 1.5.8
4
5 ### What changed
6
@@ -12,6 +12,74 @@
12 agent in research-only mode. The selector follows `/plan` and `/clear`, and
13 it is deliberately session-scoped so a risky Auto choice does not persist
14 into the next task
15 +- **Tool calls in the editor are worth opening now.** Zed only drew the
16 + disclosure arrow on the handful of cards siGit set `content` on — the model
17 + download and switch spinners — because everything else carried nothing but
18 + `rawInput` and `rawOutput`, fields ACP gives clients no display guidance for.
19 + Every tool call now gets a fenced content block: the pretty-printed arguments
20 + while it runs, then the tool's output once it finishes, with a `(no output)`
21 + placeholder for a silent command like `git add`. Cards are titled
22 + `<tool> · <arg>` rather than the bare tool name, path-bearing tools set
23 + `locations` so the editor can follow along, and a replayed session gets the
24 + same treatment as a live one
25 +- **The context window is visible before compaction fires.** Both model pickers
26 + show each model's window, and the TUI title bar has a gauge for how much of
27 + it the conversation is using. Cloud tiers report their own window instead of
28 + the compaction budget — the budget is when siGit Code summarizes history, not
29 + how much the model can hold, and labelling one with the other understated the
30 + window by an order of magnitude
31 +- **`write_todos` renders as a plan, not a tool card.** Zed and other clients
32 + have real progress UI for `session/update` plans, so the model's todo list
33 + goes there
34 +- **Picker changes read as status rather than chat.** Switching model or
35 + inference backend is UI state, so it renders as a completed think-kind tool
36 + call. The sign-in prompt stays an assistant message, since it needs the user
37 + to act on it
38 +
39 +### Fixed
40 +
41 +- **A reopened thread comes back with its history.** Clicking a saved thread in
42 + Zed sends `session/load`, and the client draws the thread purely from the
43 + `session/update` notifications the agent streams while that request is in
44 + flight. siGit restored the saved history into the backend, which is what
45 + makes the model remember, but sent the client nothing — so the thread opened
46 + empty and looked like a brand new conversation. The snapshot is now turned
47 + into updates before it is restored: user and assistant text as message chunks
48 + with reasoning stripped, each tool call completed with its result folded in,
49 + and `write_todos` as a plan the way it renders live. System messages stay
50 + out, since they seeded the model and were never on screen
51 +- **Compaction no longer fails in every session that ran a tool.**
52 + `compact_history` asked for the summary through `complete(None, None)`, which
53 + sends no tools array but left the live history in place. That history is
54 + thick with assistant `tool_calls` and `role: "tool"` messages, and an
55 + endpoint handed tool shapes with no schema to check them against rejects the
56 + request — Anthropic answers 400. So compaction failed on every attempt in any
57 + session that had run a single tool, however small the history was, and then
58 + retried on every prompt and tool round while that history kept growing. The
59 + conversation now goes as a flattened transcript in one user message, which
60 + keeps what the summary needs and drops the shapes that only mean anything
61 + next to a tool schema
62 +- **A tool call emitted as text is no longer dropped.** Qwen 3, GLM and
63 + DeepSeek write a call as `<tool_call>NAME<arg_key>…` in their chat template
64 + and rely on the serving stack to parse it back into `tool_calls`. When that
65 + doesn't happen the tag arrives as ordinary content, so it was rendered
66 + verbatim in the editor and the turn ended as though the model had chosen to
67 + answer in prose. Both the streaming and non-streaming paths now scan content
68 + for those blocks and turn well-formed ones back into real calls, typing
69 + argument values from the turn's own tool schemas. The streaming scanner holds
70 + back only enough text to catch a tag straddling a chunk boundary, so ordinary
71 + answers still stream token by token. A block that doesn't match the expected
72 + shape is left in the text untouched: reissuing a `run_command` is cheap, but
73 + guessing wrong at a half-parsed `edit_file` would write the wrong change to a
74 + file
75 +- **Tool-call content survives awkward output.** Whitespace-only output is
76 + preserved rather than collapsed, malformed arguments no longer get a
77 + misleading JSON fence, and fence language identifiers are sanitized
78 +
79 +## 1.5.7
80 +
81 +### What changed
82 +
83 - **`@smbcloud/sigit` gets releases again.** The npm scope moved to
84 `@getsigit` in 1.5.5 and the old package was left sitting on the registry at
85 1.5.2, so an install made before the rename went quiet — `npm update` had
Cargo.lock
+1 -1
@@ -5778,7 +5778,7 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
5778
5779 [[package]]
5780 name = "sigit"
5781 -version = "1.5.7"
5781 +version = "1.5.8"
5782 dependencies = [
5783 "agent-client-protocol",
5784 "anyhow",
Cargo.toml
+1 -1
@@ -1,6 +1,6 @@
1 [package]
2 name = "sigit"
3 -version = "1.5.7"
3 +version = "1.5.8"
4 edition = "2024"
5 description = "siGit Code — ACP-compatible AI coding agent. Sí, git."
6 documentation = "https://github.com/getsigit/sigit"