@softspark/ai-toolkit 4.32.2 → 4.32.3
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 +20 -0
- package/README.md +24 -19
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/hooks/user-prompt-submit.sh +21 -0
- package/app/surface.json +5 -0
- package/manifest.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v4.32.3 — Search-first stops firing on things nobody asked (2026-09-04)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **A background task finishing no longer demands a KB search.**
|
|
15
|
+
`user-prompt-submit.sh` set the search-required flag on any stdin longer
|
|
16
|
+
than 30 characters. The harness delivers background-task notifications, CI
|
|
17
|
+
events and replayed slash-command output on the same channel as a prompt, so
|
|
18
|
+
a task completing blocked `Stop` and asked for a search over text nobody
|
|
19
|
+
wrote. Harness event envelopes no longer set the flag.
|
|
20
|
+
- **A pasted credential no longer becomes a search query.** A 43-character API
|
|
21
|
+
key on its own line cleared the length gate, and the block message names the
|
|
22
|
+
prompt as the thing to search for — so the enforcement path asked for a live
|
|
23
|
+
secret to be sent to a retrieval service. Single-token prompts no longer set
|
|
24
|
+
the flag; a genuine one-word prompt is under the length gate anyway, so
|
|
25
|
+
nothing that was enforced before stops being enforced. Prose that merely
|
|
26
|
+
mentions a task notification still sets it, and that case is now a test.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
10
30
|
## v4.32.2 - Plugin exports land where you run the command (2026-09-04)
|
|
11
31
|
|
|
12
32
|
### Fixed
|
package/README.md
CHANGED
|
@@ -6,25 +6,30 @@
|
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](app/skills/)
|
|
8
8
|
[](app/agents/)
|
|
9
|
-
[](tests/)
|
|
10
|
+
|
|
11
|
+
## What's New in v4.32.3
|
|
12
|
+
|
|
13
|
+
**v4.32.3** stops search-first enforcement firing on things nobody asked:
|
|
14
|
+
|
|
15
|
+
- **A background task finishing no longer blocks `Stop`.** The search-required
|
|
16
|
+
flag was set on any stdin over 30 characters, and the harness delivers
|
|
17
|
+
background-task notifications, CI events and replayed slash-command output
|
|
18
|
+
on the same channel as a prompt. Event envelopes no longer set it.
|
|
19
|
+
- **A pasted credential no longer becomes a search query.** A 43-character API
|
|
20
|
+
key on its own line cleared the length gate, and the block message names the
|
|
21
|
+
prompt as the thing to search for — so the enforcement path asked for a live
|
|
22
|
+
secret to be sent to a retrieval service. Single-token prompts no longer set
|
|
23
|
+
the flag.
|
|
24
|
+
- Nothing that was enforced before stops being enforced: a genuine one-word
|
|
25
|
+
prompt is under the length gate anyway, and prose that merely mentions a task
|
|
26
|
+
notification still sets the flag. That case is now a test.
|
|
27
|
+
- Still in this train: exports land in the directory you ran the command in
|
|
28
|
+
(v4.32.2); `plugin remove` leaves nothing behind, every skill script answers
|
|
29
|
+
`--help` (v4.32.1); path-scoped common rules, project-scoped language skills,
|
|
30
|
+
`doctor` context-budget and permission checks, one strict frontmatter parser,
|
|
31
|
+
`git-team` for `--profile strict` (v4.32.0). Test count: 1974 -> 1978 bats +
|
|
32
|
+
348 pytest.
|
|
28
33
|
|
|
29
34
|
See [CHANGELOG.md](CHANGELOG.md) for full history.
|
|
30
35
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "ai-toolkit",
|
|
4
4
|
"displayName": "AI Toolkit",
|
|
5
5
|
"description": "Professional-grade engineering skills, agents, rules, and lifecycle guardrails for Claude Code, Claude Chat, and Cowork.",
|
|
6
|
-
"version": "4.32.
|
|
6
|
+
"version": "4.32.3",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "SoftSpark",
|
|
9
9
|
"url": "https://github.com/softspark"
|
|
@@ -29,7 +29,28 @@ PROMPT_LEN=${#PROMPT_TEXT}
|
|
|
29
29
|
STATE_DIR="$HOME/.softspark/ai-toolkit/state"
|
|
30
30
|
FLAG="$STATE_DIR/search-required-$(hook_session_id).flag"
|
|
31
31
|
mkdir -p "$STATE_DIR" 2>/dev/null
|
|
32
|
+
|
|
33
|
+
# The flag means "somebody asked a question the KB might answer". Length alone
|
|
34
|
+
# does not establish that. The harness delivers background-task notifications,
|
|
35
|
+
# CI events and replayed slash-command output on the same channel as a prompt,
|
|
36
|
+
# and a 43-character API key pasted on its own line clears the length gate too.
|
|
37
|
+
# Both were observed in one session: the first demanded a KB search for text
|
|
38
|
+
# nobody asked about, the second would have sent a live credential to a
|
|
39
|
+
# retrieval service as the query. Neither is a prompt.
|
|
40
|
+
PROMPT_HEAD="${PROMPT_TEXT#"${PROMPT_TEXT%%[![:space:]]*}"}"
|
|
41
|
+
PROMPT_IS_QUESTION=1
|
|
42
|
+
case "$PROMPT_HEAD" in
|
|
43
|
+
'<task-notification'*|'<ci-monitor-event'*|'<system-reminder'*|\
|
|
44
|
+
'<local-command-'*|'<command-name'*|'<command-message'*) PROMPT_IS_QUESTION=0 ;;
|
|
45
|
+
esac
|
|
46
|
+
# A single opaque token — API key, hash, URL, path — carries no question. A
|
|
47
|
+
# genuine one-word prompt is under the length gate anyway, so nothing is lost.
|
|
48
|
+
if [ "$(printf '%s' "$PROMPT_TEXT" | wc -w | tr -d ' ')" -le 1 ]; then
|
|
49
|
+
PROMPT_IS_QUESTION=0
|
|
50
|
+
fi
|
|
51
|
+
|
|
32
52
|
if [ "$PROMPT_LEN" -gt 30 ] && \
|
|
53
|
+
[ "$PROMPT_IS_QUESTION" -eq 1 ] && \
|
|
33
54
|
[ "${CLAUDE_SKIP_SEARCH_FIRST:-0}" != "1" ] && \
|
|
34
55
|
ai_toolkit_has_search_provider; then
|
|
35
56
|
{ printf '%s\n%s\n' "$(date -u +%s)" "$PROMPT_TEXT" > "$FLAG"; } 2>/dev/null
|
package/app/surface.json
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"chaos",
|
|
17
17
|
"ci",
|
|
18
18
|
"ci-cd-patterns",
|
|
19
|
+
"claude-toolkit-rules",
|
|
19
20
|
"clean-code",
|
|
20
21
|
"command-creator",
|
|
21
22
|
"commit",
|
|
@@ -36,12 +37,14 @@
|
|
|
36
37
|
"docs",
|
|
37
38
|
"documentation-standards",
|
|
38
39
|
"ecommerce-patterns",
|
|
40
|
+
"edit-discipline",
|
|
39
41
|
"evaluate",
|
|
40
42
|
"evolve",
|
|
41
43
|
"explain",
|
|
42
44
|
"explore",
|
|
43
45
|
"fix",
|
|
44
46
|
"flutter-patterns",
|
|
47
|
+
"git-conventions",
|
|
45
48
|
"git-mastery",
|
|
46
49
|
"golang-rules",
|
|
47
50
|
"grill-me",
|
|
@@ -68,6 +71,7 @@
|
|
|
68
71
|
"observability-patterns",
|
|
69
72
|
"onboard",
|
|
70
73
|
"orchestrate",
|
|
74
|
+
"output-mode",
|
|
71
75
|
"panic",
|
|
72
76
|
"performance-profiling",
|
|
73
77
|
"persona",
|
|
@@ -81,6 +85,7 @@
|
|
|
81
85
|
"prompt-caching-patterns",
|
|
82
86
|
"python-rules",
|
|
83
87
|
"qa-session",
|
|
88
|
+
"quality-gates",
|
|
84
89
|
"rag-patterns",
|
|
85
90
|
"refactor",
|
|
86
91
|
"refactor-plan",
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softspark/ai-toolkit",
|
|
3
|
-
"version": "4.32.
|
|
3
|
+
"version": "4.32.3",
|
|
4
4
|
"description": "AI coding toolkit: 109 skills, 44 agents, 14 developer-tool integrations, recoverable native tool-output filtering, Claude Chat/Cowork export, safety constitution, SARIF audit, and signed npm provenance.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|