sigit-code 1.2.1__tar.gz → 1.2.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 (47) hide show
  1. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/skills/sigit-code-release/SKILL.md +13 -0
  2. sigit_code-1.2.2/.claude/skills/run-sigit/SKILL.md +134 -0
  3. sigit_code-1.2.2/.claude/skills/run-sigit/driver.mjs +126 -0
  4. sigit_code-1.2.2/.claude/skills/run-sigit/tui-smoke.sh +41 -0
  5. {sigit_code-1.2.1 → sigit_code-1.2.2}/CHANGELOG.md +11 -0
  6. {sigit_code-1.2.1 → sigit_code-1.2.2}/Cargo.lock +1 -1
  7. {sigit_code-1.2.1 → sigit_code-1.2.2}/Cargo.toml +6 -3
  8. {sigit_code-1.2.1 → sigit_code-1.2.2}/PKG-INFO +1 -1
  9. {sigit_code-1.2.1 → sigit_code-1.2.2}/README.md +24 -13
  10. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/backend.rs +311 -6
  11. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/chat.rs +98 -103
  12. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/main.rs +130 -30
  13. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/AGENTS.md +0 -0
  14. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/skills/agent-client-protocol/SKILL.md +0 -0
  15. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/skills/ai-assisted-coding/SKILL.md +0 -0
  16. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/skills/branding/SKILL.md +0 -0
  17. {sigit_code-1.2.1 → sigit_code-1.2.2}/.agents/skills/tool-calling/SKILL.md +0 -0
  18. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/ci.yml +0 -0
  19. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/release-crates.yml +0 -0
  20. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/release-github.yml +0 -0
  21. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/release-homebrew.yml +0 -0
  22. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/release-npm.yml +0 -0
  23. {sigit_code-1.2.1 → sigit_code-1.2.2}/.github/workflows/release-pypi.yml +0 -0
  24. {sigit_code-1.2.1 → sigit_code-1.2.2}/.gitignore +0 -0
  25. {sigit_code-1.2.1 → sigit_code-1.2.2}/.nvmrc +0 -0
  26. {sigit_code-1.2.1 → sigit_code-1.2.2}/CLAUDE.md +0 -0
  27. {sigit_code-1.2.1 → sigit_code-1.2.2}/LICENSE +0 -0
  28. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/README.md.tmpl +0 -0
  29. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/package-main.json.tmpl +0 -0
  30. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/package.json.tmpl +0 -0
  31. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/scripts/render-main-package.cjs +0 -0
  32. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/scripts/render-platform-package.cjs +0 -0
  33. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/sigit/.gitignore +0 -0
  34. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/sigit/README.md +0 -0
  35. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/sigit/package.json +0 -0
  36. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/sigit/src/index.ts +0 -0
  37. {sigit_code-1.2.1 → sigit_code-1.2.2}/npm/sigit/tsconfig.json +0 -0
  38. {sigit_code-1.2.1 → sigit_code-1.2.2}/pypi/README.md +0 -0
  39. {sigit_code-1.2.1 → sigit_code-1.2.2}/pypi/pyproject.toml +0 -0
  40. {sigit_code-1.2.1 → sigit_code-1.2.2}/pyproject.toml +0 -0
  41. {sigit_code-1.2.1 → sigit_code-1.2.2}/rust-toolchain.toml +0 -0
  42. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/account.rs +0 -0
  43. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/credentials.rs +0 -0
  44. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/models.rs +0 -0
  45. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/provider.rs +0 -0
  46. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/setup.rs +0 -0
  47. {sigit_code-1.2.1 → sigit_code-1.2.2}/src/tools.rs +0 -0
@@ -32,6 +32,18 @@ Use this skill when preparing a release for this repository.
32
32
  - Release workflows are tag-driven. `release-github.yml`, `release-npm.yml`, `release-pypi.yml`, `release-crates.yml`, and `release-homebrew.yml` all derive `RELEASE_VERSION` from a `v*.*.*` tag or a manually supplied tag input.
33
33
  - The crate is published to crates.io (`release-crates.yml`) and the Homebrew tap is updated (`release-homebrew.yml`) as part of the tag-driven flow. Per the siGit release flow, Homebrew is auto-triggered — do not dispatch it manually.
34
34
 
35
+ ## Git release flow
36
+
37
+ Releases are cut from `development` and shipped on `main`. The published tags (`v1.2.0`, `v1.2.1`) point at the `main`-side merge commit, never at a release branch or at `development`. Follow this order:
38
+
39
+ 1. Branch `release/v<version>` off `development`.
40
+ 2. Apply the version bump and changelog edits, then commit (e.g. `Release v<version>`).
41
+ 3. Merge `release/v<version>` back into `development`.
42
+ 4. Merge `development` into `main` (commit message: `Merge development into main for v<version> release`).
43
+ 5. Tag `v<version>` on that `main` merge commit, then push `main` and the tag.
44
+
45
+ Pushing the `v*.*.*` tag is what fires every release workflow, so create and push it only after the merge into `main` has landed. Do not commit, tag, or push until the user explicitly asks — confirm the version and that they want the release to go out first.
46
+
35
47
  ## Typical files to inspect
36
48
 
37
49
  - `Cargo.toml`
@@ -52,6 +64,7 @@ Use this skill when preparing a release for this repository.
52
64
  - `npm/sigit/package.json` is left at `0.0.0-dev` unless the packaging flow itself changed.
53
65
  - `pypi/pyproject.toml` still uses dynamic versioning unless there is a deliberate packaging change.
54
66
  - Release workflows still derive their version from the tag as expected.
67
+ - Git flow followed: bump committed on `release/v<version>`, merged back to `development`, then `development` merged into `main`, with `v<version>` tagged on the `main` merge commit.
55
68
  - Release notes or changelog entries match the actual changes.
56
69
  - CI-equivalent local checks pass for the relevant platform or target.
57
70
  - Package names, install commands, and branding stay consistent.
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: run-sigit
3
+ description: Build, launch, and drive the sigit AI coding agent — run the ACP server, screenshot the interactive TUI, smoke-test the CLI. Use when asked to run sigit, start the agent, screenshot the chat UI, or verify a change to the binary.
4
+ ---
5
+
6
+ # Run sigit
7
+
8
+ `sigit` is a single Rust binary that picks its mode at startup from whether stdin
9
+ is a TTY:
10
+
11
+ - **ACP mode** (stdin not a TTY): newline-delimited JSON-RPC 2.0 over stdio — the
12
+ Agent Client Protocol surface that Zed / VS Code drive. This is the primary
13
+ programmatic handle. Drive it with **`.claude/skills/run-sigit/driver.mjs`**.
14
+ - **Interactive TUI** (stdin is a TTY): a full-screen ratatui chat, Unix-only.
15
+ Drive it under tmux with **`.claude/skills/run-sigit/tui-smoke.sh`**.
16
+ - **CLI subcommands**: `sigit login | logout | whoami`, handled before the split.
17
+
18
+ Both drivers avoid on-device inference: `initialize`, `session/new`, and slash
19
+ commands (`/whoami`, `/help`, `/status`) answer **without** loading a multi-GB
20
+ GGUF model, so they work on a clean machine with nothing cached and no network.
21
+
22
+ Paths below are relative to the repo root (`<unit>/`).
23
+
24
+ ## Prerequisites
25
+
26
+ - Rust toolchain (pinned in `rust-toolchain.toml`); `cargo` on PATH.
27
+ - Node ≥ 18 for the ACP driver (`driver.mjs`).
28
+ - `tmux` for the TUI smoke test only: `brew install tmux` (macOS) /
29
+ `apt-get install -y tmux` (Linux).
30
+
31
+ ## Build
32
+
33
+ ```bash
34
+ cargo build # debug binary at target/debug/sigit
35
+ ```
36
+
37
+ First build is slow (it compiles `onde` / mistralrs); incremental rebuilds are
38
+ sub-second. Use `cargo build --release` for `target/release/sigit` if you want
39
+ realistic inference speed — the drivers default to the debug binary.
40
+
41
+ ## Run (agent path)
42
+
43
+ ### ACP server — `driver.mjs`
44
+
45
+ Spawns the binary in ACP mode, runs `initialize` → `session/new` →
46
+ `session/prompt /whoami`, prints every frame, exits 0 on success:
47
+
48
+ ```bash
49
+ node .claude/skills/run-sigit/driver.mjs
50
+ # SIGIT_BIN=target/release/sigit node .claude/skills/run-sigit/driver.mjs
51
+ ```
52
+
53
+ Expected tail:
54
+
55
+ ```
56
+ <-- notify session/update "Signed in to siGit Code Cloud as demo@sigit.si."
57
+ "stopReason": "end_turn"
58
+ OK — ACP handshake, session, and /whoami round-tripped.
59
+ ```
60
+
61
+ The `/whoami` reply arrives as an `agent_message_chunk` notification — the same
62
+ streaming surface a real prompt fans out across many chunks. To drive real
63
+ streamed inference, send a `session/prompt` with ordinary text instead of a
64
+ slash command (needs a cached local model or a signed-in cloud tier).
65
+
66
+ ### Interactive TUI — `tui-smoke.sh`
67
+
68
+ Launches the TUI under tmux, types `/help`, writes the rendered screen to
69
+ `$TMPDIR/sigit-tui.txt` (the "screenshot" for a terminal app), then quits:
70
+
71
+ ```bash
72
+ .claude/skills/run-sigit/tui-smoke.sh
73
+ cat "${TMPDIR:-/tmp}/sigit-tui.txt" # view the captured screen
74
+ ```
75
+
76
+ To poke it by hand, the same tmux moves the script automates:
77
+
78
+ ```bash
79
+ tmux new-session -d -s sigit -x 120 -y 35
80
+ tmux send-keys -t sigit './target/debug/sigit' Enter
81
+ sleep 6
82
+ tmux capture-pane -t sigit -p # read the screen
83
+ tmux send-keys -t sigit '/help' Enter
84
+ tmux send-keys -t sigit C-c # Ctrl+C quits
85
+ tmux kill-session -t sigit
86
+ ```
87
+
88
+ ### CLI smoke
89
+
90
+ ```bash
91
+ ./target/debug/sigit whoami # prints the signed-in account, exit 0
92
+ ```
93
+
94
+ ## Run (human path)
95
+
96
+ ```bash
97
+ cargo run # stdin is your TTY → launches the TUI
98
+ ```
99
+
100
+ A full-screen chat opens; type a message or `/help`, Ctrl+C to quit. Useless
101
+ headless or with stdin piped — that path falls through to ACP mode instead.
102
+
103
+ ## Gotchas
104
+
105
+ - **The ACP server never exits on stdin EOF.** `printf '…' | sigit | head` hangs:
106
+ the process stays alive holding stdout open, so `head` blocks waiting for bytes
107
+ that only stop when you kill it. You must read the response frame and then
108
+ `kill` the child — that's the whole reason `driver.mjs` exists instead of a
109
+ one-line pipe.
110
+ - **Piping stdin forces ACP mode.** Any non-TTY stdin (a pipe, `</dev/null`)
111
+ routes to the JSON-RPC server, not the TUI. The TUI needs a real PTY, hence
112
+ tmux.
113
+ - **Handshake is intentionally model-free.** `initialize` / `session/new` defer
114
+ GGUF loading to the first real prompt, so they're fast and need no network. A
115
+ text `session/prompt` to an on-device model triggers a ~1–2 GB download on
116
+ first use.
117
+ - **The default model depends on sign-in state.** On a signed-in machine the
118
+ picker shows a cloud tier (e.g. `onde-cloud (onde-fast)`); logged out it
119
+ defaults to an on-device model. `sigit whoami` shows which.
120
+ - **Logs go to different places per mode.** ACP mode → stderr (the driver prefixes
121
+ them `[sigit]`). TUI mode redirects all stdout/stderr to `$TMPDIR/sigit.log` so
122
+ the ratatui surface stays clean — tail that file to debug the TUI.
123
+ - **macOS model cache is shared with the desktop app**, under
124
+ `~/Library/Group Containers/group.com.ondeinference.apps/models/`; other
125
+ platforms use `~/.cache/huggingface/`.
126
+
127
+ ## Troubleshooting
128
+
129
+ - `binary not found: target/debug/sigit` → run `cargo build` first.
130
+ - Driver hangs / times out on `initialize` → you're likely running a stale binary
131
+ or one that crashed at startup; check the `[sigit]` stderr lines it echoes.
132
+ - `tmux not installed` from `tui-smoke.sh` → `brew install tmux`.
133
+ - TUI capture is blank → increase the `sleep` before `capture-pane`; the banner
134
+ and (lazy) model selection take a few seconds on a cold start.
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+ // ACP driver for the `sigit` binary.
3
+ //
4
+ // `sigit` runs as an Agent Client Protocol server when stdin is NOT a TTY
5
+ // (newline-delimited JSON-RPC 2.0 over stdio — the same surface Zed / VS Code
6
+ // drive). This script spawns the binary in that mode, runs a scripted handshake,
7
+ // prints every request/response/notification, and exits non-zero on failure.
8
+ //
9
+ // It deliberately avoids triggering on-device inference: `initialize`,
10
+ // `session/new`, and slash commands like `/whoami` and `/status` answer without
11
+ // loading a multi-GB GGUF model, so the driver works on a clean machine with no
12
+ // model cached and no network.
13
+ //
14
+ // Usage:
15
+ // node driver.mjs [path-to-binary] # default: target/debug/sigit
16
+ // SIGIT_BIN=target/release/sigit node driver.mjs
17
+ //
18
+ // Exit code 0 = every step got a well-formed JSON-RPC result.
19
+
20
+ import { spawn } from "node:child_process";
21
+ import { createInterface } from "node:readline";
22
+ import { existsSync } from "node:fs";
23
+
24
+ const bin = process.argv[2] || process.env.SIGIT_BIN || "target/debug/sigit";
25
+ if (!existsSync(bin)) {
26
+ console.error(`binary not found: ${bin} — run \`cargo build\` first`);
27
+ process.exit(2);
28
+ }
29
+
30
+ // Force ACP mode regardless of how the driver itself was launched: pipe stdin so
31
+ // the child's stdin is not a TTY.
32
+ const child = spawn(bin, [], { stdio: ["pipe", "pipe", "pipe"] });
33
+
34
+ // Surface the agent's own logs (it writes them to stderr in ACP mode).
35
+ createInterface({ input: child.stderr }).on("line", (l) =>
36
+ console.error(`[sigit] ${l}`),
37
+ );
38
+
39
+ const pending = new Map(); // id -> {resolve, method}
40
+ const notifications = [];
41
+ let nextId = 1;
42
+ let failed = false;
43
+
44
+ createInterface({ input: child.stdout }).on("line", (line) => {
45
+ line = line.trim();
46
+ if (!line) return;
47
+ let msg;
48
+ try {
49
+ msg = JSON.parse(line);
50
+ } catch {
51
+ console.error(`<-- (non-JSON) ${line}`);
52
+ return;
53
+ }
54
+ if (msg.id !== undefined && (msg.result !== undefined || msg.error)) {
55
+ const waiter = pending.get(msg.id);
56
+ console.log(`<-- response #${msg.id} (${waiter?.method ?? "?"})`);
57
+ console.log(JSON.stringify(msg.result ?? msg.error, null, 2));
58
+ if (msg.error) failed = true;
59
+ waiter?.resolve(msg);
60
+ pending.delete(msg.id);
61
+ } else if (msg.method) {
62
+ // A notification or a server->client request. We only observe these.
63
+ notifications.push(msg);
64
+ const update = msg.params?.update;
65
+ let detail = "";
66
+ if (update?.sessionUpdate === "agent_message_chunk") {
67
+ // The streamed assistant text — one chunk per AgentMessageChunk. With the
68
+ // streaming backend a real prompt produces many of these.
69
+ detail = ` ${JSON.stringify(update.content?.text ?? update.content)}`;
70
+ } else if (update?.sessionUpdate) {
71
+ detail = ` (${update.sessionUpdate})`;
72
+ }
73
+ console.log(`<-- notify ${msg.method}${detail}`);
74
+ }
75
+ });
76
+
77
+ function send(method, params) {
78
+ const id = nextId++;
79
+ const req = { jsonrpc: "2.0", id, method, params };
80
+ console.log(`--> request #${id} ${method}`);
81
+ child.stdin.write(JSON.stringify(req) + "\n");
82
+ return new Promise((resolve, reject) => {
83
+ pending.set(id, { resolve, method });
84
+ setTimeout(() => {
85
+ if (pending.has(id)) {
86
+ pending.delete(id);
87
+ reject(new Error(`timeout waiting for ${method} (#${id})`));
88
+ }
89
+ }, 20_000);
90
+ });
91
+ }
92
+
93
+ async function main() {
94
+ // 1. Handshake.
95
+ await send("initialize", {
96
+ protocolVersion: 1,
97
+ clientCapabilities: {},
98
+ });
99
+
100
+ // 2. Open a session rooted at the repo. `cwd` must be absolute.
101
+ const sessionRes = await send("session/new", {
102
+ cwd: process.cwd(),
103
+ mcpServers: [],
104
+ });
105
+ const sessionId = sessionRes.result?.sessionId;
106
+ if (!sessionId) throw new Error("session/new returned no sessionId");
107
+
108
+ // 3. Drive a no-inference slash command through the prompt surface. `/whoami`
109
+ // reports the signed-in account; it never touches the model.
110
+ await send("session/prompt", {
111
+ sessionId,
112
+ prompt: [{ type: "text", text: "/whoami" }],
113
+ });
114
+
115
+ console.log("\nOK — ACP handshake, session, and /whoami round-tripped.");
116
+ }
117
+
118
+ main()
119
+ .catch((err) => {
120
+ console.error(`FAILED: ${err.message}`);
121
+ failed = true;
122
+ })
123
+ .finally(() => {
124
+ child.kill("SIGTERM");
125
+ setTimeout(() => process.exit(failed ? 1 : 0), 150);
126
+ });
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ # Drive the interactive ratatui TUI under tmux: launch it, type /help, dump the
3
+ # rendered screen to a file ("screenshot" for a terminal app), then quit cleanly.
4
+ #
5
+ # The TUI only starts when stdin is a real TTY, so it must run inside a terminal
6
+ # multiplexer — tmux gives us one plus `capture-pane` to read what it drew.
7
+ # Requires tmux (`brew install tmux`). Unix only (the TUI is #[cfg(unix)]).
8
+ #
9
+ # Usage: .claude/skills/run-sigit/tui-smoke.sh [path-to-binary]
10
+ set -euo pipefail
11
+
12
+ BIN="${1:-${SIGIT_BIN:-target/debug/sigit}}"
13
+ SESSION="sigit-smoke-$$"
14
+ OUT="${TMPDIR:-/tmp}/sigit-tui.txt"
15
+
16
+ if [[ ! -x "$BIN" ]]; then
17
+ echo "binary not found/executable: $BIN — run \`cargo build\` first" >&2
18
+ exit 2
19
+ fi
20
+ command -v tmux >/dev/null || { echo "tmux not installed (brew install tmux)" >&2; exit 2; }
21
+
22
+ cleanup() { tmux kill-session -t "$SESSION" 2>/dev/null || true; }
23
+ trap cleanup EXIT
24
+
25
+ tmux new-session -d -s "$SESSION" -x 120 -y 35
26
+ tmux send-keys -t "$SESSION" "$BIN" Enter
27
+ sleep 6 # banner + (lazy) model selection
28
+ tmux send-keys -t "$SESSION" '/help' Enter
29
+ sleep 2
30
+ tmux capture-pane -t "$SESSION" -p > "$OUT"
31
+ tmux send-keys -t "$SESSION" C-c # Ctrl+C quits
32
+ sleep 1
33
+
34
+ echo "Captured TUI screen -> $OUT"
35
+ if grep -q '/whoami' "$OUT"; then
36
+ echo "OK — TUI launched and /help rendered."
37
+ else
38
+ echo "FAILED — /help output not found in capture:" >&2
39
+ sed '/^$/d' "$OUT" | head -40 >&2
40
+ exit 1
41
+ fi
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.2
4
+
5
+ Streams assistant tokens as they arrive, on-device and over the cloud.
6
+
7
+ ### What changed
8
+
9
+ - Streamed assistant tokens live in the TUI and ACP sessions, both on-device and through siGit Code Cloud
10
+ - On-device inference streams only when a turn offers no tools, since `onde` can't stream and detect tool calls in the same pass; tool-capable turns still resolve in one shot
11
+ - Fixed the TUI so the latest message stays visible in long chats
12
+ - Put the cloud model-switch confirmation on its own line in ACP
13
+
3
14
  ## 1.2.1
4
15
 
5
16
  Stabilizes the Zed/ACP integration and finishes the cloud-tier wiring on top of 1.2.0.
@@ -5210,7 +5210,7 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
5210
5210
 
5211
5211
  [[package]]
5212
5212
  name = "sigit"
5213
- version = "1.2.1"
5213
+ version = "1.2.2"
5214
5214
  dependencies = [
5215
5215
  "agent-client-protocol",
5216
5216
  "anyhow",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sigit"
3
- version = "1.2.1"
3
+ version = "1.2.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"
@@ -30,7 +30,10 @@ tokio-util = { version = "0.7", features = ["compat"] }
30
30
  futures = "0.3"
31
31
 
32
32
  # TUI (interactive chat mode)
33
- ratatui = "0.29"
33
+ # `unstable-rendered-line-info` exposes `Paragraph::line_count`, which we use to
34
+ # pin the message view to the bottom using the exact wrapped-row count (the same
35
+ # WordWrapper that rendering uses) rather than a hand-rolled estimate.
36
+ ratatui = { version = "0.29", features = ["unstable-rendered-line-info"] }
34
37
  crossterm = { version = "0.29", features = ["event-stream"] }
35
38
 
36
39
  # Utilities
@@ -43,6 +46,6 @@ serde_json = "1"
43
46
  toml = "0.8"
44
47
  async-trait = "0.1"
45
48
  regex = "1"
46
- reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
49
+ reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls", "stream"] }
47
50
  uuid = { version = "1", features = ["v4"] }
48
51
  rpassword = "7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sigit-code
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -10,6 +10,8 @@
10
10
 
11
11
  siGit Code is a local coding agent. It runs on your machine, not someone else's. No API keys, no cloud round-trips, no subscription.
12
12
 
13
+ Its home is [code.sigit.si](https://code.sigit.si). You can run it yourself, as below, or use the hosted version (siGit Code Cloud) there if you would rather not run a model locally. [sigit.si](https://sigit.si) is Git hosting built for AI workflows.
14
+
13
15
  It works in any codebase. In smbCloud repos it is more useful out of the box because it already understands the Rust workspace layout, deploy flows, auth boundaries, and GresIQ.
14
16
 
15
17
  You can use it in two ways:
@@ -23,17 +25,6 @@ You can use it in two ways:
23
25
  | Linux | ✓ | ✓ |
24
26
  | Windows | ✓ | not yet |
25
27
 
26
- ## smbCloud context
27
-
28
- In an smbCloud repo, siGit Code already knows a few important things:
29
-
30
- - platform-user flows and tenant-app auth flows are different systems
31
- - `Project` is the umbrella workspace, while `FrontendApp`, `AuthApp`, and GresIQ are separate deployable units
32
- - Next.js SSR deploys are not the same thing as the generic git-push path
33
- - existing crate boundaries and workspace patterns are usually the right place to start
34
-
35
- In other repos it stays general and does not pretend everything is about smbCloud.
36
-
37
28
  ## Install
38
29
 
39
30
  ```sh
@@ -70,7 +61,27 @@ Add this to `~/.config/zed/settings.json`:
70
61
 
71
62
  Use the full absolute path. `~` does not expand here.
72
63
 
73
- ## VS Code with ACP Client
64
+ ## VS Code
65
+
66
+ ### With siGit Code Extension
67
+
68
+ Install from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=getsigit.sigit-code).
69
+
70
+ ```jsonc
71
+ {
72
+ "sigit.agents": {
73
+ "sigit": {
74
+ "name": "siGit (on-device)",
75
+ "command": "sigit",
76
+ "args": [],
77
+ "env": {}
78
+ },
79
+ },
80
+ "sigit.agent.default": "sigit"
81
+ }
82
+ ```
83
+
84
+ ### With ACP Client
74
85
 
75
86
  Install [ACP Client](https://marketplace.visualstudio.com/items?itemName=formulahendry.acp-client), then add:
76
87
 
@@ -106,4 +117,4 @@ Terminal mode currently needs Unix terminal behavior, so it works on macOS and L
106
117
 
107
118
  ## Copyright
108
119
 
109
- © 2026 [smbCloud](https://smbcloud.xyz/) (Splitfire AB).
120
+ © 2026 [smbCloud Platform](https://smbcloud.xyz/) (Splitfire AB).