sigit-code 1.3.0__tar.gz → 1.3.2__tar.gz

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.
Files changed (57) hide show
  1. {sigit_code-1.3.0 → sigit_code-1.3.2}/CHANGELOG.md +38 -1
  2. {sigit_code-1.3.0 → sigit_code-1.3.2}/CLAUDE.md +66 -11
  3. {sigit_code-1.3.0 → sigit_code-1.3.2}/Cargo.lock +1 -1
  4. {sigit_code-1.3.0 → sigit_code-1.3.2}/Cargo.toml +1 -1
  5. {sigit_code-1.3.0 → sigit_code-1.3.2}/LICENSE +1 -1
  6. {sigit_code-1.3.0 → sigit_code-1.3.2}/PKG-INFO +2 -2
  7. {sigit_code-1.3.0 → sigit_code-1.3.2}/README.md +1 -1
  8. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/sigit/README.md +1 -1
  9. {sigit_code-1.3.0 → sigit_code-1.3.2}/pypi/README.md +1 -1
  10. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/backend.rs +394 -6
  11. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/chat.rs +311 -6
  12. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/instructions.rs +20 -0
  13. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/main.rs +410 -26
  14. sigit_code-1.3.2/src/mcp.rs +954 -0
  15. sigit_code-1.3.2/src/permissions.rs +337 -0
  16. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/provider.rs +5 -5
  17. sigit_code-1.3.2/src/session_store.rs +167 -0
  18. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/settings.rs +134 -5
  19. sigit_code-1.3.2/src/tools.rs +3403 -0
  20. sigit_code-1.3.2/tests/acp_permissions.rs +353 -0
  21. sigit_code-1.3.0/src/tools.rs +0 -1453
  22. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/AGENTS.md +0 -0
  23. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/skills/agent-client-protocol/SKILL.md +0 -0
  24. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/skills/ai-assisted-coding/SKILL.md +0 -0
  25. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/skills/branding/SKILL.md +0 -0
  26. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/skills/sigit-code-release/SKILL.md +0 -0
  27. {sigit_code-1.3.0 → sigit_code-1.3.2}/.agents/skills/tool-calling/SKILL.md +0 -0
  28. {sigit_code-1.3.0 → sigit_code-1.3.2}/.claude/skills/run-sigit/SKILL.md +0 -0
  29. {sigit_code-1.3.0 → sigit_code-1.3.2}/.claude/skills/run-sigit/driver.mjs +0 -0
  30. {sigit_code-1.3.0 → sigit_code-1.3.2}/.claude/skills/run-sigit/tui-smoke.sh +0 -0
  31. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/ci.yml +0 -0
  32. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/release-crates.yml +0 -0
  33. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/release-github.yml +0 -0
  34. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/release-homebrew.yml +0 -0
  35. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/release-npm.yml +0 -0
  36. {sigit_code-1.3.0 → sigit_code-1.3.2}/.github/workflows/release-pypi.yml +0 -0
  37. {sigit_code-1.3.0 → sigit_code-1.3.2}/.gitignore +0 -0
  38. {sigit_code-1.3.0 → sigit_code-1.3.2}/.nvmrc +0 -0
  39. {sigit_code-1.3.0 → sigit_code-1.3.2}/examples/skills/README.md +0 -0
  40. {sigit_code-1.3.0 → sigit_code-1.3.2}/examples/skills/commit-message/SKILL.md +0 -0
  41. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/README.md.tmpl +0 -0
  42. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/package-main.json.tmpl +0 -0
  43. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/package.json.tmpl +0 -0
  44. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/scripts/render-main-package.cjs +0 -0
  45. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/scripts/render-platform-package.cjs +0 -0
  46. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/sigit/.gitignore +0 -0
  47. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/sigit/package.json +0 -0
  48. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/sigit/src/index.ts +0 -0
  49. {sigit_code-1.3.0 → sigit_code-1.3.2}/npm/sigit/tsconfig.json +0 -0
  50. {sigit_code-1.3.0 → sigit_code-1.3.2}/pypi/pyproject.toml +0 -0
  51. {sigit_code-1.3.0 → sigit_code-1.3.2}/pyproject.toml +0 -0
  52. {sigit_code-1.3.0 → sigit_code-1.3.2}/rust-toolchain.toml +0 -0
  53. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/account.rs +0 -0
  54. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/credentials.rs +0 -0
  55. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/models.rs +0 -0
  56. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/setup.rs +0 -0
  57. {sigit_code-1.3.0 → sigit_code-1.3.2}/src/skills.rs +0 -0
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.2
4
+
5
+ Adds a tool permission system with plan mode, durable sessions with context
6
+ compaction, background command execution, a subagent research tool, and commit
7
+ co-author attribution.
8
+
9
+ ### What changed
10
+
11
+ - Every tool call now passes a permission policy before executing. Read-only tools always run; mutating tools (and all MCP or unknown tools) are governed by, in order: plan mode, session grants, per-tool overrides, and a default mode from `[permissions]` in `settings.toml` (`allow`/`ask`/`deny`, default `ask`). On `ask`, editors get a native ACP permission dialog (allow once / allow for this session / deny) and the TUI pauses on a y/a/n prompt showing the tool and its arguments. `SIGIT_PERMISSIONS` overrides the default mode for headless runs and clients without permission support
12
+ - New `/plan [on|off]` command: plan mode blocks mutating tools and asks the model to present a plan while research tools keep working. `/permissions` prints the effective policy
13
+ - Sessions are durable: conversation history is saved per session under `~/.config/sigit/sessions/` after every turn. ACP `session/load` actually restores it, the TUI gets `/resume`, and `/clear` deletes the saved file
14
+ - Context compaction: `/compact` compresses the conversation on demand, and the agent compacts automatically once the history approaches a 24k-token budget, summarizing older turns and keeping the recent ones. The tool-round cap rises from 10 to 24 now that long sessions have a defense other than the cap
15
+ - `run_command` can run work in the background: pass `run_in_background` and the tool returns a task id immediately, so builds, test suites, and dev servers are no longer killed by the 120 second foreground timeout. Poll with the new `command_output` tool (read-only, never prompts) and stop with `kill_command`
16
+ - New `task` tool: delegate research to a fresh subagent conversation that only gets the read-only tools and returns its final answer, keeping the main context small. Available on OpenAI-compatible backends; on-device returns a clear fallback until onde supports a second context
17
+ - Commits created by the agent are co-authored: commit messages end with `Co-Authored-By: siGit Code <sigit@sigit.si>` (the [sigitc](https://github.com/sigitc) account), which GitHub renders next to the human author. If the model forgets the trailer, siGit amends it in, never rewriting commits that already exist on a remote
18
+ - ACP mode now honors the `OPENAI_BASE_URL`/`OPENAI_API_KEY` provider override at startup, matching the interactive client
19
+
20
+ ## 1.3.1
21
+
22
+ Adds [Model Context Protocol](https://modelcontextprotocol.io) (MCP) client
23
+ support with the official siGit Code MCP server baked in, a set of agent tools
24
+ that close parity gaps in the tool layer, and refreshed branding and licensing.
25
+
26
+ ### What changed
27
+
28
+ - siGit Code is now an MCP client: it connects to MCP servers over the Streamable HTTP transport (a single JSON-RPC endpoint), discovers the tools they expose, and offers them to the model alongside the built-in tools. When the model calls one, the call is forwarded to the owning server and the result fed back into the agent loop
29
+ - Bakes in the official siGit Code MCP server at `https://sigit.si/api/v1/mcp` (follows `SIGIT_CLOUD_URL`). When you are signed in (`sigit login`), the cloud session token is sent as the bearer credential
30
+ - Configure additional servers in `mcp.toml` — global (`~/.config/sigit/mcp.toml`) or project-local (`.sigit/mcp.toml`). Each `[[server]]` has a `name`, `url`, optional `enabled`, and optional `[server.headers]`; set `official = false` to opt out of the baked-in server
31
+ - MCP tools are namespaced `mcp__<server>__<tool>` so they never collide with built-in tools or across servers; tool output is capped to protect the model's context
32
+ - Discovery is best-effort at startup and bounded by a per-server timeout, so an unreachable server never blocks startup — it just contributes no tools
33
+ - Added a `/mcp` slash command (TUI and ACP) that lists configured servers, their connection status, and the tools each exposes
34
+ - Disable MCP entirely with `SIGIT_MCP=off`, or just the official server with `SIGIT_MCP_OFFICIAL=off`
35
+ - New agent tools that close parity gaps in the tool layer: `multi_edit` (apply a batch of exact-substring edits to one file atomically — written only if every edit matches), `glob` (locate files by name pattern with `**`/`*`/`?`/`{a,b}`, most-recently-modified first), `write_todos` (render a live task checklist through the tool result for multi-step work), and `remember` (append durable notes to the nearest `AGENTS.md`/`CLAUDE.md`)
36
+ - `edit_file` now supports `replace_all` and returns actionable failure context — naming the line whose trimmed text matches when only whitespace differs — so the model self-corrects in one round
37
+ - `search_files` gained a `file_glob` filter and a `max_results` cap (default 50, hard-capped at 1000) that also bounds the directory walk
38
+ - Refreshed branding and legal: updated `LICENSE`, `README`, and the npm/PyPI package descriptions
39
+
3
40
  ## 1.3.0
4
41
 
5
42
  Adds a Local Inference on/off toggle, the open [Agent Skills](https://agentskills.io)
@@ -212,4 +249,4 @@ ACP and editor mode work on Windows. The part that is still missing is the inter
212
249
 
213
250
  ---
214
251
 
215
- *© 2026 [smbCloud](https://smbcloud.xyz/) (Splitfire AB).*
252
+ *© 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).*
@@ -1,6 +1,6 @@
1
1
  # CLAUDE.md
2
2
 
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
3
+ This file provides guidance to AI coding agents when working with code in this repository.
4
4
 
5
5
  ## What this is
6
6
 
@@ -17,6 +17,33 @@ is a TTY:
17
17
  Before the TTY/ACP split, `main` also dispatches the account subcommands `sigit login`,
18
18
  `sigit logout`, `sigit whoami` (see `src/main.rs` `main()`).
19
19
 
20
+ ## Working in this repo
21
+
22
+ **IMPORTANT — branch naming:** Prefix every working branch with `feature/` (new functionality)
23
+ or `fix/` (bug fixes) — never a tool- or agent-name prefix like `claude/`. Name the branch after
24
+ the *changes it contains*, as a short, descriptive, kebab-case slug that is self-explanatory
25
+ from the name alone (e.g. `feature/tool-permission-system`, `fix/glob-mtime-sort`), never after
26
+ a task, ticket, or session id (not `feature/task-q003hm`).
27
+
28
+ **IMPORTANT — pull request target:** Always open pull requests against the `development` branch,
29
+ never `main`. `main` is release-only; `development` is where day-to-day work integrates.
30
+
31
+ **IMPORTANT — branch off `development`:** Start every working branch from the latest
32
+ `origin/development`. Exception: when new work *depends on* a feature branch that has not merged
33
+ yet (e.g. it builds on tools or APIs that branch introduces), it may be stacked on top of that
34
+ branch instead. When stacking: merge the base PR into `development` first, then rebase the
35
+ stacked branch onto `development` before opening its pull request, so each PR shows only its own
36
+ commits.
37
+
38
+ **IMPORTANT — run CI before pushing:** Run the full CI gate locally and confirm it is green
39
+ *before* pushing a branch or opening a pull request — never push work that fails these:
40
+
41
+ ```sh
42
+ cargo fmt -- --check # formatting
43
+ cargo clippy --tests -- -D warnings # lint (warnings are errors)
44
+ cargo test --locked # tests
45
+ ```
46
+
20
47
  ## Build / test / lint
21
48
 
22
49
  ```sh
@@ -36,10 +63,10 @@ Run a single test: `cargo test <test_name>`.
36
63
 
37
64
  ## Critical platform constraint: `#[cfg(unix)]` dead code
38
65
 
39
- The interactive client, the `InferenceBackend` seam (`backend.rs`), and provider resolution
40
- (`provider.rs`) are wired up **only** through `#[cfg(unix)]` code paths. On Windows the binary
41
- runs ACP-only and drives `onde` directly, so much of `backend.rs` and `provider.rs` is
42
- legitimately unused there and the dead-code lint is suppressed *on non-Unix targets only*.
66
+ The interactive client is `#[cfg(unix)]`-only. The `InferenceBackend` seam (`backend.rs`) and
67
+ provider resolution (`provider.rs`) are consumed by both the interactive client and the ACP
68
+ server, but several of their items are reached only through the Unix-only interactive paths, so
69
+ the dead-code lint is suppressed *on non-Unix targets only*.
43
70
 
44
71
  Consequence: code can pass clippy on macOS/Linux but fail on the Windows target (or vice versa).
45
72
  When touching `backend.rs`, `provider.rs`, or the interactive path, keep the `cfg` gates intact —
@@ -62,8 +89,12 @@ feeds results back. Neither the loop nor ACP/TUI surfaces depend on a concrete b
62
89
  wins: (1) override via `OPENAI_BASE_URL`+`OPENAI_API_KEY` or active profile in
63
90
  `~/.config/sigit/providers.toml`; (2) siGit Code Cloud when logged in; (3) on-device.
64
91
  - **`src/tools.rs`** — agent tool schemas + execution: `read_file`, `create_directory`,
65
- `list_directory`, `search_files`, `read_website`, `create_file`, `edit_file`, `delete_file`,
66
- `run_command`. Add a tool in both the spec list and the execute `match`.
92
+ `list_directory`, `search_files`, `glob`, `read_website`, `create_file`, `edit_file`,
93
+ `multi_edit`, `delete_file`, `run_command`, `write_todos`, `remember`. Add a tool in both the
94
+ spec list (`all_tools`) and the execute `match` (`execute_tool`). `run_command` also enforces
95
+ commit attribution: when a command creates a new commit that lacks the
96
+ `Co-Authored-By: siGit Code` trailer (`COMMIT_CO_AUTHOR_TRAILER`), it amends the trailer in —
97
+ unless the commit already exists on a remote, which is never rewritten.
67
98
  - **`src/skills.rs`** — [Agent Skills](https://agentskills.io) support. Discovers skill
68
99
  folders (each with a `SKILL.md`: YAML frontmatter `name` + `description`, then Markdown
69
100
  instructions) from `.sigit/skills/` and `.claude/skills/` in the cwd, `$SIGIT_CONFIG_DIR/skills/`,
@@ -72,6 +103,27 @@ feeds results back. Neither the loop nor ACP/TUI surfaces depend on a concrete b
72
103
  calls `skill` with a name) loads the full `SKILL.md` body. The `skill` tool is appended in the
73
104
  `*_as_specs`/`build_tool_specs` layer (not in `all_tools()`) so its description can be dynamic,
74
105
  and only when at least one skill exists.
106
+ - **`src/mcp.rs`** — [Model Context Protocol](https://modelcontextprotocol.io) *client*. Connects to
107
+ MCP servers over the **Streamable HTTP** transport (one JSON-RPC POST endpoint; replies are
108
+ `application/json` or SSE), runs the `initialize`/`tools/list` handshake, and forwards `tools/call`.
109
+ Discovery is best-effort at startup (`mcp::init`, called from both branches of `main()`) and cached
110
+ in a process-global so the synchronous spec builders (`mcp::tool_specs`) and the async dispatch
111
+ (`mcp::call_tool`) can both read it. Tools are namespaced `mcp__<server>__<tool>`, appended in the
112
+ `*_as_specs`/`build_tool_specs` layer and routed in `tools::execute_tool` via `mcp::is_mcp_tool`. The
113
+ official server (`<cloud>/mcp`, default `https://sigit.si/api/v1/mcp`) is baked in and authed with the
114
+ cloud session token; extra servers live in `mcp.toml` (global `$SIGIT_CONFIG_DIR/mcp.toml` and
115
+ project-local `.sigit/mcp.toml`). stdio transport is not supported.
116
+ - **`src/permissions.rs`** — tool permission policy. Every tool call passes through
117
+ `decision_for` before executing: read-only tools always run; mutating tools (and all
118
+ `mcp__*`/unknown tools) are governed by, in order: per-session plan mode (`/plan` — deny all
119
+ mutating tools with a present-a-plan message), session "always allow" grants, per-tool
120
+ overrides and the default mode from `[permissions]` in `settings.toml` (`allow`/`ask`/`deny`,
121
+ default `ask`; `SIGIT_PERMISSIONS` env overrides the default). On `ask`, the ACP path sends
122
+ `session/request_permission` (allow once / allow for session / deny) and the TUI pauses the
123
+ inference task on a y/a/n prompt. Note: ACP turn-affecting handlers run in `cx.spawn`ed tasks
124
+ serialized by `SiGitAgent::turn_lock` so the dispatch loop can route the client's permission
125
+ answer mid-turn — don't move them back inline, and don't await client requests from inline
126
+ handlers (deadlock).
75
127
  - **`src/instructions.rs`** — project instruction files, the always-on counterpart to skills.
76
128
  Reads `AGENTS.md` (the cross-tool [agents.md](https://agents.md) standard) and `CLAUDE.md`,
77
129
  walking from the session cwd up to the repo root (nearest ancestor with `.git`, never above it),
@@ -89,9 +141,9 @@ feeds results back. Neither the loop nor ACP/TUI surfaces depend on a concrete b
89
141
  - **`src/credentials.rs`** — local session-token store (TOML, `0600` on Unix).
90
142
  - **`src/models.rs`** — model-picker types shared across platforms.
91
143
 
92
- Slash commands (`/help`, `/models`, `/skills`, `/login`, `/logout`, `/whoami`, `/reload`,
93
- `/clear`, `/status`) are advertised via `advertise_commands` in `main.rs` and handled in both the
94
- TUI and ACP sessions.
144
+ Slash commands (`/help`, `/models`, `/skills`, `/mcp`, `/login`, `/logout`, `/whoami`, `/reload`,
145
+ `/plan`, `/permissions`, `/clear`, `/status`) are advertised via `advertise_commands` in `main.rs`
146
+ and handled in both the TUI and ACP sessions.
95
147
 
96
148
  ## Model cache (macOS)
97
149
 
@@ -111,7 +163,10 @@ verbosity with `RUST_LOG`.
111
163
 
112
164
  `OPENAI_BASE_URL` / `OPENAI_API_KEY` (provider override), `SIGIT_API_URL` (account API base,
113
165
  default `https://sigit.si`), `SIGIT_CLOUD_URL`, `SIGIT_CONFIG_DIR` (default `~/.config/sigit`),
114
- `SIGIT_MODEL`, `HF_HOME` / `HF_HUB_CACHE`, `RUST_LOG`.
166
+ `SIGIT_MODEL`, `SIGIT_MCP` (`off` disables MCP), `SIGIT_MCP_OFFICIAL` (`off` drops the baked-in
167
+ server), `SIGIT_PERMISSIONS` (`allow`/`ask`/`deny` — overrides the default permission mode for
168
+ mutating tools; the escape hatch for clients without permission-request support),
169
+ `HF_HOME` / `HF_HUB_CACHE`, `RUST_LOG`.
115
170
 
116
171
  ## Releasing
117
172
 
@@ -5200,7 +5200,7 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
5200
5200
 
5201
5201
  [[package]]
5202
5202
  name = "sigit"
5203
- version = "1.3.0"
5203
+ version = "1.3.2"
5204
5204
  dependencies = [
5205
5205
  "agent-client-protocol",
5206
5206
  "anyhow",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sigit"
3
- version = "1.3.0"
3
+ version = "1.3.2"
4
4
  edition = "2024"
5
5
  description = "siGit Code — ACP-compatible AI coding agent. Sí, git."
6
6
  documentation = "https://github.com/getsigit/sigit"
@@ -175,7 +175,7 @@
175
175
  that a file or directory name be given on the same line as the
176
176
  copyright notice for easier identification within third-party archives.
177
177
 
178
- Copyright 2026 smbCloud (Splitfire AB)
178
+ Copyright 2026 Splitfire AB (siGit Code & Deploy)
179
179
 
180
180
  Licensed under the Apache License, Version 2.0 (the "License");
181
181
  you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sigit-code
3
- Version: 1.3.0
3
+ Version: 1.3.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -111,5 +111,5 @@ This package ships a prebuilt binary. The source code lives at [github.com/getsi
111
111
 
112
112
  ## Copyright
113
113
 
114
- © 2026 [smbCloud](https://smbcloud.xyz/) (Splitfire AB).
114
+ © 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).
115
115
 
@@ -117,4 +117,4 @@ Terminal mode currently needs Unix terminal behavior, so it works on macOS and L
117
117
 
118
118
  ## Copyright
119
119
 
120
- © 2026 [smbCloud Platform](https://smbcloud.xyz/) (Splitfire AB).
120
+ © 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).
@@ -101,4 +101,4 @@ Install [ACP Client](https://marketplace.visualstudio.com/items?itemName=formula
101
101
 
102
102
  ## Copyright
103
103
 
104
- © 2026 [smbCloud](https://smbcloud.xyz/) (Splitfire AB).
104
+ © 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).
@@ -84,4 +84,4 @@ This package ships a prebuilt binary. The source code lives at [github.com/getsi
84
84
 
85
85
  ## Copyright
86
86
 
87
- © 2026 [smbCloud](https://smbcloud.xyz/) (Splitfire AB).
87
+ © 2026 [Splitfire AB](https://5mb.app) ([siGit Code & Deploy](https://sigit.si)).