@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 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: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
7
7
  [![Skills](https://img.shields.io/badge/skills-114-brightgreen)](app/skills/)
8
8
  [![Agents](https://img.shields.io/badge/agents-44-blue)](app/agents/)
9
- [![Tests](https://img.shields.io/badge/tests-1974%20passing-success)](tests/)
10
-
11
- ## What's New in v4.32.2
12
-
13
- **v4.32.2** makes plugin exports land where you run the command:
14
-
15
- - `ai-toolkit claude-app export`, `codex-plugin export`, and
16
- `antigravity-plugin export` write their ZIP (and the sibling
17
- `*-global-instructions.md`) to the directory you typed the command in. They
18
- used to appear inside `node_modules/@softspark/ai-toolkit` because the CLI
19
- runs them with its own working directory; the wrapper now hands the shell's
20
- directory to the exporters. Absolute `--output` paths are unchanged.
21
- - Root-level `*.zip` and `*-global-instructions.md` are gitignored so an
22
- export run from the repository is never committed.
23
- - Still in this train: `plugin remove` leaves nothing behind, every skill
24
- script answers `--help` (v4.32.1); path-scoped common rules, project-scoped
25
- language skills, `doctor` context-budget and permission checks, one strict
26
- frontmatter parser, `git-team` for `--profile strict` (v4.32.0). Test
27
- count: 1972 -> 1974 bats + 348 pytest.
9
+ [![Tests](https://img.shields.io/badge/tests-1978%20passing-success)](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.2",
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
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.32.2",
2
+ "version": "4.32.3",
3
3
  "components": {
4
4
  "agents": {
5
5
  "description": "44 specialized agents (orchestrator, backend, frontend, security, devops, etc.)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softspark/ai-toolkit",
3
- "version": "4.32.2",
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",