@allansantos-dev/smart-tool 0.9.33 → 0.9.34

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
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.34 - beta
4
+
5
+ - The shell rewrite of a redirected search coexists with other PreToolUse hooks on Bash. Hooks of one call run in
6
+ parallel on the same original input and the host documents no order between their `updatedInput`, so the Smart Tool
7
+ rewrite is a constant (`true` / `$null`), carries no permission decision, applies only to a content search and leaves
8
+ an already rewritten call alone; whichever rewrite wins, the PostToolUse still swaps the output for the answer.
9
+ Rule and evidence in the README and `docs/research/2026-10-19-hook-redirect-transparente.md`; test
10
+ `test_the_shell_rewrite_coexists_with_other_hooks_that_rewrite_the_same_call`.
11
+
3
12
  ## 0.9.33 - beta
4
13
 
5
14
  - Recommended models prefer the Vertex route. When the gateway lists a model on several routes, `model_defaults` now
package/README.md CHANGED
@@ -16,7 +16,7 @@ registered as the `playwright` server where this machine lets a browser be drive
16
16
  An optional hook routes the agent's native Grep/Glob/Read/Bash/WebSearch/WebFetch calls to these tools when they
17
17
  are cheaper, or just tells the agent what Smart Tool would do.
18
18
 
19
- **Status:** 0.9.33 beta. Windows only. What changed in each version: [CHANGELOG.md](CHANGELOG.md).
19
+ **Status:** 0.9.34 beta. Windows only. What changed in each version: [CHANGELOG.md](CHANGELOG.md).
20
20
 
21
21
  ## How it works
22
22
 
@@ -146,7 +146,12 @@ Redirects) and Maintenance (Setup audit, Startup).
146
146
  (without `allowed_domains`/`blocked_domains`). In Claude Code a PostToolUse entry swaps the output (WebFetch and
147
147
  WebSearch still run natively, their result is replaced); a shell search whose answer is ready within 10 s runs as a
148
148
  no-op instead, so a grep with no match does not end in exit 1. In Codex the shell search is rewritten to print the
149
- answer from a file. When the Smart Tool call fails or is late, the native call and its output stay as they are; a
149
+ answer from a file. Coexistence with other PreToolUse hooks on Bash: they run in parallel on the same original
150
+ input and the host documents no order between their `updatedInput`. The Smart Tool rewrite is a constant (`true` /
151
+ `$null`, whatever the search), carries no permission decision (a rival `deny`/`ask` still wins) and only applies to a
152
+ content search, so a hook that rewrites other commands never meets it; if a rival rewrite of the same search wins,
153
+ its command runs and the PostToolUse still swaps the output for the answer. Two other hooks rewriting the same command
154
+ must be resolved in the plugin that owns them (the setup audit lists them). When the Smart Tool call fails or is late, the native call and its output stay as they are; a
150
155
  deny, with the exact call to make, is left only for a search whose query cannot be read from the command. The
151
156
  decision is a fixed rule, under a millisecond and the same every time: a content search over a project folder (`grep -r`,
152
157
  `rg`, `git grep`, the Grep tool on a folder) or over more than 20 listed files goes to `smart_search`, in Bash and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allansantos-dev/smart-tool",
3
- "version": "0.9.33",
3
+ "version": "0.9.34",
4
4
  "description": "Local MCP server that gives coding agents (Claude Code, Codex) cheaper, sharper tools than their built-in search. Windows.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Allan Santos",
package/version.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """Single source of the Smart Tool version and of the User-Agent sent to public APIs."""
2
2
  import re
3
3
 
4
- VERSION = "0.9.33"
4
+ VERSION = "0.9.34"
5
5
  _CONTACT_RE = re.compile(r"^(?:[^\s@()<>;]+@[^\s@()<>;]+\.[^\s@()<>;]+|https?://[^\s()<>;]+)$")
6
6
 
7
7