mini-coder 0.0.12 → 0.0.13

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/docs/configs.md CHANGED
@@ -65,7 +65,7 @@ Custom subagents are configured in `.agents`:
65
65
  - `./.agents/agents/*.md`
66
66
  - `~/.agents/agents/*.md`
67
67
 
68
- (There is no `.claude` compatibility path for agents.)
68
+ (There is no `.claude` compatibility path for agents. Claude doesn't have custom subagents)
69
69
 
70
70
  ## Precedence and conflicts
71
71
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mini-coder",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "description": "A small, fast CLI coding agent",
5
5
  "module": "src/index.ts",
6
6
  "type": "module",
package/hanging-bug.md DELETED
@@ -1,79 +0,0 @@
1
- # Hanging Bug Investigation
2
-
3
- ## Symptoms
4
-
5
- After a shell tool call completes successfully, **SOMETIMES** the app hangs indefinitely instead of
6
- returning to the prompt. Two observed states:
7
-
8
- ```
9
- $ $ rm src/session/db.ts && bun run test
10
- ⠇ shell
11
- ```
12
-
13
- Stayed spinning with shell label for well over the timeout time. I had to kill the app.
14
-
15
- Another example with a different shell command:
16
- ```
17
- $ $ git diff
18
- ✔ 0
19
- │ diff --git a/src/cli/tool-render.ts b/src/cli/tool-render.ts
20
- │ index f8d33af..e224932 100644
21
- │ --- a/src/cli/tool-render.ts
22
- │ +++ b/src/cli/tool-render.ts
23
- │ @@ -148,21 +148,25 @@ export function renderToolResultInline(
24
- │ }
25
-
26
- │ if (toolName === "glob") {
27
- │ - const r = result as { files: string[]; truncated: boolean };
28
- │ - const n = r.files.length;
29
- │ - writeln(
30
- │ - `${indent}${G.info} ${c.dim(n === 0 ? "no matches" : `${n} file${n === 1 ? "" : "s"}${r.truncated ? " (capped)" : ""}`)}`,
31
- │ - );
32
- │ - return;
33
- │ + const r = result as { files?: string[]; truncated?: boolean };
34
- │ + if (Array.isArray(r.files)) {
35
- │ + const n = r.files.length;
36
- │ + writeln(
37
- │ + `${indent}${G.info} ${c.dim(n === 0 ? "no matches" : `${n} file${n === 1 ? "" : "s"}${r.truncated ? " (capped)" : ""}`)}`,
38
- │ + );
39
- │ … +150 lines
40
- ⠦ thinking
41
- ```
42
- User also had to kill the app.
43
-
44
- Only seen with Gemini/Google models.
45
- Only happens after shell tool calls.
46
- Other tools calls worked just fine during the same session with the same model and mini-coder version.
47
- There are no shell tool related hooks configured anywhere.
48
-
49
- The expectation was the turn to continue as normal since the tool calls succeded.
50
-
51
- Find the root cause, show proof.
52
-
53
- ## Findings:
54
-
55
- Here is the concrete proof I just ran, no edits:
56
- - I executed renderTurn with an event stream that does:
57
- 1) tool-call-start(shell)
58
- 2) tool-result(shell success)
59
- 3) then never yields again
60
- - Result: the promise did not resolve within 700ms (timed_out_700ms).
61
- Then I ran the same sequence but added turn-complete:
62
- - Result: it resolved immediately (resolved).
63
- So this is now proven in your codepath:
64
- - renderTurn waits forever when the upstream async stream goes silent after a shell tool result.
65
- - This exactly matches the visible hang states.
66
-
67
- ### Root Cause 1: Hangs spinning on `"shell"`
68
- **Proof in code:** `src/tools/shell.ts`
69
- * When a command times out, `proc.kill("SIGTERM")` only kills the parent process (e.g., `bash`). Any child processes (e.g., `bun`) become orphaned but stay alive, holding the write end of the `stdout`/`stderr` pipes open.
70
- * Because the pipe never closes, `await reader.read()` inside `collectStream()` hangs indefinitely.
71
- * Because `collectStream()` never resolves, the tool execution never finishes, `tool-result` is never yielded, and the stream goes completely silent while the spinner stays stuck on "shell".
72
- - **FIXED**
73
-
74
- ### Root Cause 2: Hangs spinning on `"thinking"`
75
- **Proof in code:** `src/llm-api/turn.ts`
76
- * After `git diff` completes, the tool resolves and `renderTurn` switches the spinner to `"thinking"`.
77
- * The AI SDK automatically makes a new HTTP request to the Gemini API containing the tool result to generate the next step.
78
- * Gemini's API occasionally hangs indefinitely or silently drops connections when receiving certain payloads (like large tool outputs or ANSI color codes, which `git diff` outputs).
79
- * Because there is no timeout configured on the `streamText` call in `runTurn` (unless the user manually aborts), the underlying fetch request waits forever. The `result.fullStream` never yields the next chunk, but also never closes or errors.