@softspark/ai-toolkit 4.3.0 → 4.3.2

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_run": "2026-05-12T19:04:22Z",
2
+ "last_run": "2026-05-21T08:27:23Z",
3
3
  "schema_version": 1,
4
4
  "tools": {
5
5
  "aider": {
@@ -24,17 +24,18 @@
24
24
  }
25
25
  },
26
26
  "augment": {
27
- "docs_hash": "ceaf27b7126f44dd",
27
+ "docs_hash": "8be23f4fb78816c3",
28
28
  "headings": [
29
- "Agent",
30
- "Chat",
29
+ "Code",
31
30
  "Documentation Index",
32
31
  "Introduction",
32
+ "On this page",
33
+ "Other automation",
34
+ "Review",
33
35
  "\u200bAuggie CLI",
34
- "\u200bGet started in minutes",
35
- "\u200bJetBrains IDEs",
36
- "\u200bLearn more",
37
- "\u200bVisual Studio Code"
36
+ "\u200bAutomate your SDLC",
37
+ "\u200bCosmos",
38
+ "\u200bGet started in minutes"
38
39
  ],
39
40
  "markers": {
40
41
  ".augment": true,
@@ -57,10 +58,11 @@
57
58
  }
58
59
  },
59
60
  "claude-code": {
60
- "docs_hash": "6ea2ec6ef023c1bd",
61
+ "docs_hash": "0518086bd4527849",
61
62
  "headings": [
62
- "Claude Code overview",
63
63
  "Documentation Index",
64
+ "On this page",
65
+ "Overview",
64
66
  "\u200bGet started",
65
67
  "\u200bNext steps",
66
68
  "\u200bUse Claude Code everywhere",
@@ -103,24 +105,27 @@
103
105
  "slash command": true,
104
106
  "sub-agent": true
105
107
  },
106
- "version": "2.1.139 (Claude Code)"
108
+ "version": "2.1.146 (Claude Code)"
107
109
  },
108
110
  "cline": {
109
- "docs_hash": "b59e8836b3217cdb",
111
+ "docs_hash": "c2ce2443743365fa",
110
112
  "headings": [
111
- "Cline CLI",
112
- "Cline Documentation",
113
- "Core Workflows",
114
- "Customization",
113
+ "API Reference",
114
+ "CLI",
115
+ "Cline Overview",
115
116
  "Documentation Index",
116
- "Features",
117
- "Install Cline",
118
- "MCP Servers",
119
- "Models & Providers",
120
- "Quick Start",
121
- "What is Cline?",
122
- "Your First Project",
123
- "\u200bExplore the Docs",
117
+ "JetBrains Plugin",
118
+ "Kanban",
119
+ "Observability",
120
+ "On this page",
121
+ "SDK",
122
+ "Security & Governance",
123
+ "Team Management",
124
+ "VS Code Extension",
125
+ "\u200bAgent Core (SDK)",
126
+ "\u200bApplications",
127
+ "\u200bEnterprise Solutions",
128
+ "\u200bOther IDE Supports",
124
129
  "\u200bWhat is Cline?"
125
130
  ],
126
131
  "markers": {
@@ -137,7 +142,7 @@
137
142
  }
138
143
  },
139
144
  "codex-cli": {
140
- "docs_hash": "c8fb328bf1954fc2",
145
+ "docs_hash": "70f184b6cdd1f765",
141
146
  "headings": [
142
147
  "About",
143
148
  "Contributing",
@@ -156,7 +161,7 @@
156
161
  "Packages 0",
157
162
  "Provide feedback",
158
163
  "Quickstart",
159
- "Releases 784",
164
+ "Releases 795",
160
165
  "Repository files navigation",
161
166
  "Resources",
162
167
  "Saved searches",
@@ -186,10 +191,10 @@
186
191
  "mcp_servers": false,
187
192
  "sandbox": true
188
193
  },
189
- "version": "codex-cli 0.130.0"
194
+ "version": "codex-cli 0.132.0"
190
195
  },
191
196
  "cursor": {
192
- "docs_hash": "787203a4eee076f7",
197
+ "docs_hash": "60edb30c9ddcdadd",
193
198
  "headings": [],
194
199
  "markers": {
195
200
  ".cursor/rules": false,
@@ -205,7 +210,7 @@
205
210
  }
206
211
  },
207
212
  "gemini-cli": {
208
- "docs_hash": "26555623f610ff8e",
213
+ "docs_hash": "c6aab087667f7717",
209
214
  "headings": [
210
215
  "Breadcrumbs",
211
216
  "Directory actions",
@@ -244,16 +249,16 @@
244
249
  }
245
250
  },
246
251
  "github-copilot": {
247
- "docs_hash": "1566c05f84f5c1a7",
252
+ "docs_hash": "ab274112faeec90f",
248
253
  "headings": [
249
254
  "About Copilot auto model selection",
250
255
  "About Copilot integrations",
251
256
  "About agent management",
252
257
  "About agent skills",
253
- "About agentic memory for GitHub Copilot",
254
258
  "About billing for GitHub Copilot in organizations and enterprises",
255
259
  "About billing for individual GitHub Copilot plans",
256
260
  "About custom agents",
261
+ "About customizing GitHub Copilot responses",
257
262
  "Articles",
258
263
  "Did you find what you needed?",
259
264
  "GitHub Copilot",
@@ -276,7 +281,7 @@
276
281
  }
277
282
  },
278
283
  "google-antigravity": {
279
- "docs_hash": "509c72e157ecb6f3",
284
+ "docs_hash": "2c48c702b9e592a7",
280
285
  "headings": [],
281
286
  "markers": {
282
287
  "AGENTS.md": false,
@@ -292,7 +297,7 @@
292
297
  }
293
298
  },
294
299
  "opencode": {
295
- "docs_hash": "c1c8ba8f6b2e7ddf",
300
+ "docs_hash": "5277673e235393f7",
296
301
  "headings": [
297
302
  "Add features",
298
303
  "Ask questions",
@@ -331,20 +336,19 @@
331
336
  }
332
337
  },
333
338
  "roo-code": {
334
- "docs_hash": "960b2e1caf562b43",
339
+ "docs_hash": "54908ae23136b646",
335
340
  "headings": [
336
341
  "A mindset for success\u200b",
337
342
  "Additional Resources\u200b",
338
343
  "Getting Started\u200b",
339
344
  "Roo Code Docs",
340
- "Tutorial & Feature Videos\u200b",
341
345
  "What can Roo Code do for you\u200b"
342
346
  ],
343
347
  "markers": {
344
348
  "Code Actions": false,
345
349
  "MCP": true,
346
350
  "Orchestrator mode": false,
347
- "custom modes": true,
351
+ "custom modes": false,
348
352
  "description": true,
349
353
  "groups": false,
350
354
  "roleDefinition": false,
@@ -353,7 +357,7 @@
353
357
  }
354
358
  },
355
359
  "windsurf": {
356
- "docs_hash": "7a8a7569f81eba1b",
360
+ "docs_hash": "fa29ba621f291d81",
357
361
  "headings": [
358
362
  "Advanced",
359
363
  "App Deploys",
@@ -362,6 +366,7 @@
362
366
  "Documentation Index",
363
367
  "MCP",
364
368
  "Memories",
369
+ "On this page",
365
370
  "Recommended Plugins",
366
371
  "Terminal",
367
372
  "Usage",
@@ -3,10 +3,10 @@ title: "SOP: Release Verification"
3
3
  category: procedures
4
4
  service: ai-toolkit
5
5
  tags: [sop, verification, release, smoke-test, install, update, qa, provenance, sarif]
6
- version: "1.4.2"
6
+ version: "1.4.3"
7
7
  created: "2026-04-08"
8
- last_updated: "2026-04-29"
9
- description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, install, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. Reflects the v2.8.0 supply-chain standard. v1.3.0 added the single-run npm test discipline; v1.4.0 adds v3.0.0 deep-coverage checks (--profile full, --codex-skills, breaking-change surfaces, idempotence, registry drift, live-JSON parse) and refreshes stale thresholds. v1.4.2 makes the Phase 9.4 idempotence check deterministic by sorting file paths before hashing."
8
+ last_updated: "2026-05-19"
9
+ description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, install, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. Reflects the v2.8.0 supply-chain standard. v1.3.0 added the single-run npm test discipline; v1.4.0 adds v3.0.0 deep-coverage checks (--profile full, --codex-skills, breaking-change surfaces, idempotence, registry drift, live-JSON parse) and refreshes stale thresholds. v1.4.2 makes the Phase 9.4 idempotence check deterministic by sorting file paths before hashing. v1.4.3 tightens the Phase 8.4 URL pin check so the success-message count includes only entries with a `url:` field, not local `path:` entries, and documents the `sources.json` envelope shape."
10
10
  ---
11
11
 
12
12
  # SOP: Release Verification
@@ -303,11 +303,13 @@ python3 scripts/audit_skills.py --permissions | head -40
303
303
 
304
304
  ### 8.4 URL-sourced rules/hooks are checksum-pinned
305
305
 
306
+ `sources.json` is an envelope of the form `{"schema_version": 1, "rules"|"hooks": {...}}`, so the jq filter must pick the nested map before piping into the pin assertion. The URL-count in the success message ignores local `path:`-only entries — only entries with a `url:` field are pinned and counted.
307
+
306
308
  ```bash
307
309
  jq '.rules // .hooks // {}' ~/.softspark/ai-toolkit/rules/sources.json 2>/dev/null \
308
- | python3 -c "import json, sys; d=json.load(sys.stdin) or {}; bad=[n for n,v in d.items() if v.get('url') and not v.get('sha256')]; assert not bad, f'UNPINNED: {bad}'; print(f'RULE PIN OK: {len(d)} URL rules, all with sha256')"
310
+ | python3 -c "import json, sys; d=json.load(sys.stdin) or {}; bad=[n for n,v in d.items() if v.get('url') and not v.get('sha256')]; assert not bad, f'UNPINNED: {bad}'; url_n=sum(1 for v in d.values() if v.get('url')); print(f'RULE PIN OK: {url_n} URL rules, all with sha256')"
309
311
  jq '.hooks // {}' ~/.softspark/ai-toolkit/hooks/external/sources.json 2>/dev/null \
310
- | python3 -c "import json, sys; d=json.load(sys.stdin) or {}; bad=[n for n,v in d.items() if v.get('url') and not v.get('sha256')]; assert not bad, f'UNPINNED: {bad}'; print(f'HOOK PIN OK: {len(d)} URL hooks, all with sha256')"
312
+ | python3 -c "import json, sys; d=json.load(sys.stdin) or {}; bad=[n for n,v in d.items() if v.get('url') and not v.get('sha256')]; assert not bad, f'UNPINNED: {bad}'; url_n=sum(1 for v in d.values() if v.get('url')); print(f'HOOK PIN OK: {url_n} URL hooks, all with sha256')"
311
313
  ```
312
314
 
313
315
  **Verify:**
@@ -3,9 +3,9 @@ title: "AI Toolkit - Codex CLI Compatibility"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [codex, compatibility, install, skills, hooks]
6
- version: "1.0.0"
6
+ version: "1.0.1"
7
7
  created: "2026-04-12"
8
- last_updated: "2026-04-13"
8
+ last_updated: "2026-05-21"
9
9
  description: "Reference for how ai-toolkit maps Claude-oriented skills, hooks, and plugin packs to Codex CLI."
10
10
  ---
11
11
 
@@ -110,6 +110,11 @@ This means Claude-only events such as `TaskCompleted`, `TeammateIdle`,
110
110
  `~/.codex/hooks.json` (global layer). Non-Codex events are silently skipped.
111
111
  `remove-hook` cleans both Claude and Codex targets.
112
112
 
113
+ Generated Codex hook commands include `AI_TOOLKIT_HOOK_QUIET=1`. This keeps
114
+ non-blocking reminders and startup context out of the visible Codex hook output
115
+ while preserving hook side effects and blocking decisions such as search-first
116
+ Stop enforcement.
117
+
113
118
  ## Behavioral Limits
114
119
 
115
120
  Codex wrappers preserve workflow intent, but not every Claude runtime behavior
@@ -120,6 +125,10 @@ Known limits:
120
125
  - No native Codex equivalent of tmux-backed Agent Teams lifecycle events
121
126
  - No separate task object model equivalent to Claude `Task*` APIs
122
127
  - Hook event coverage is narrower than Claude Code
128
+ - MCP search tool calls may not fire the shared `PostToolUse` search tracker,
129
+ so `stop-search-check.sh` also checks `~/.codex/log/codex-tui.log` for
130
+ `smart_query`, `hybrid_search_kb`, `crag_search`, `multi_hop_search`, and
131
+ `verify_answer` calls after the search-first flag timestamp before blocking.
123
132
 
124
133
  These are runtime platform limits, not installation defects.
125
134
 
@@ -3,9 +3,9 @@ title: "Hooks Catalog"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [hooks, quality, safety, enforcement, settings.json]
6
- version: "1.5.1"
6
+ version: "1.5.2"
7
7
  created: "2026-03-27"
8
- last_updated: "2026-05-12"
8
+ last_updated: "2026-05-21"
9
9
  description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
10
10
  ---
11
11
 
@@ -50,6 +50,11 @@ ai-toolkit update # re-copies scripts, re-merges (idempotent)
50
50
  3. Loads session context from `.claude/session-context.md` (if exists)
51
51
  4. Loads active instincts from `.claude/instincts/*.md` (if any)
52
52
 
53
+ When `AI_TOOLKIT_HOOK_QUIET=1`, the hook still performs session-state reset,
54
+ stale search-flag cleanup, and update notification side effects, but suppresses
55
+ all informational stdout so runtimes such as Codex do not show startup hook
56
+ context in the UI.
57
+
53
58
  ### Notification — `notify-waiting.sh`
54
59
 
55
60
  | Field | Value |
@@ -104,7 +109,10 @@ ai-toolkit update # re-copies scripts, re-merges (idempotent)
104
109
 
105
110
  **Action:** Adds a lightweight governance reminder: plan mode for architectural work, evidence-first debugging, KB-first research, and validation expectations.
106
111
 
107
- Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
112
+ Skipped when `TOOLKIT_HOOK_PROFILE=minimal`. The bundled `app/hooks.json`
113
+ registers this command with `AI_TOOLKIT_HOOK_QUIET=1`, so it still arms or
114
+ clears the per-session search-first flag but suppresses the informational
115
+ reminder output.
108
116
 
109
117
  ### UserPromptSubmit (usage tracking) — `track-usage.sh`
110
118
 
@@ -377,11 +385,11 @@ First-match-wins per file. Built-in runners: `bats`, `pytest`, `vitest`, `jest`.
377
385
  | Field | Value |
378
386
  |-------|-------|
379
387
  | Event | `PostToolUse` |
380
- | Matcher | `mcp__rag-mcp__smart_query\|mcp__rag-mcp__hybrid_search_kb\|mcp__rag-mcp__crag_search\|mcp__rag-mcp__multi_hop_search\|mcp__rag-mcp__verify_answer\|WebSearch\|WebFetch` |
388
+ | Matcher | `mcp__.*__(smart_query\|hybrid_search_kb\|crag_search\|multi_hop_search\|verify_answer)\|WebSearch\|WebFetch` |
381
389
  | Script | `~/.softspark/ai-toolkit/hooks/search-tracker.sh` |
382
390
  | Fires | After any search-style tool call |
383
391
 
384
- **Action:** Clears `~/.softspark/ai-toolkit/state/search-required.flag`. Pairs with `user-prompt-submit.sh` (sets flag on long technical prompts only when a search provider is detected or strict mode is enabled) and `stop-search-check.sh` (blocks Stop if flag still set). Together they enforce the global CLAUDE.md GOLDEN RULE without breaking offline/no-RAG installs.
392
+ **Action:** Clears `~/.softspark/ai-toolkit/state/search-required-<session_id>.flag` (per-session, keyed by `session_id` from the hook stdin payload, falling back to `transcript_path` basename, then `default`). Pairs with `user-prompt-submit.sh` (sets the flag on long technical prompts only when a search provider is detected or strict mode is enabled) and `stop-search-check.sh` (blocks Stop if the calling session's flag is still set). Search provider detection parses actual MCP server names from `mcpServers`, `mcp_servers`, or `mcp` config blocks; hook matchers and permission allowlists do not count as providers. Together the hooks enforce the global CLAUDE.md GOLDEN RULE without breaking offline/no-RAG installs and without cross-session interference when multiple Claude Code windows run in parallel.
385
393
 
386
394
  Non-blocking (exit 0). Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
387
395
 
@@ -394,7 +402,7 @@ Non-blocking (exit 0). Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
394
402
  | Script | `~/.softspark/ai-toolkit/hooks/stop-search-check.sh` |
395
403
  | Fires | When Claude finishes a response |
396
404
 
397
- **Action:** If `search-required.flag` is still present (no search tool ran during this turn) and a search provider is still detectable, emits `{"decision":"block","reason":"..."}` to continue the conversation with a search-first reminder. If no RAG/Web provider is detected, it clears the stale flag and exits 0, so offline/no-MCP users are not blocked.
405
+ **Action:** If `search-required-<session_id>.flag` for the calling session is still present (no search tool ran during this turn) and a search provider is still detectable, emits `{"decision":"block","reason":"..."}` to continue the conversation with a search-first reminder. If no RAG/Web provider is detected, it clears the stale flag and exits 0, so offline/no-MCP users are not blocked. On Codex, where MCP search tools may not trigger the shared `PostToolUse` tracker, the hook also checks `~/.codex/log/codex-tui.log` for search tool calls after the flag timestamp before blocking. Flags are scoped by `session_id` from the hook stdin payload so a Stop in session B never consumes session A's flag (and vice versa). Stale per-session flags older than 60 minutes are GC'd on the next `SessionStart`.
398
406
 
399
407
  **Overrides:** `CLAUDE_SKIP_SEARCH_FIRST=1`, `AI_TOOLKIT_SEARCH_FIRST=off`, or `AI_TOOLKIT_SEARCH_FIRST=strict` to force enforcement. Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
400
408
 
@@ -432,7 +440,7 @@ Non-blocking (exit 0). Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
432
440
  | `scripts/test_cohesion.py` | Resolves changed paths → test commands via cohesion map. First-match-wins. Stdlib-only. |
433
441
  | `app/hooks/test-cohesion-map.json` | Toolkit-default path → tests mapping (used when no project map exists). |
434
442
  | `app/hooks/_locate-toolkit.sh` | Shared bash helper that exports `$TOOLKIT_DIR` for hooks needing scripts/. |
435
- | `app/hooks/_hook-io.sh` | Shared bash helper that normalizes hook payloads across Claude, Augment, Gemini, Windsurf, and Cursor-style JSON. |
443
+ | `app/hooks/_hook-io.sh` | Shared bash helper that normalizes hook payloads across Claude, Augment, Gemini, Windsurf, and Cursor-style JSON. Honors `AI_TOOLKIT_HOOK_QUIET=1` for non-blocking context output. |
436
444
  | `app/hooks/_search-capability.sh` | Shared bash helper that enables search-first blocking only when RAG/Web is configured or strict mode is requested. |
437
445
 
438
446
  ## Runtime Profiles
@@ -449,6 +457,11 @@ Set in `.claude/settings.local.json`:
449
457
  | `standard` | All hooks (default) |
450
458
  | `strict` | Standard + mypy --strict on task completion |
451
459
 
460
+ Set `AI_TOOLKIT_HOOK_QUIET=1` on hook commands to suppress non-blocking
461
+ informational context while preserving side effects and blocking decisions.
462
+ Codex-generated hooks use this mode by default, and Claude's bundled
463
+ `UserPromptSubmit` entry uses it to avoid visible prompt hook context.
464
+
452
465
  ## Architecture
453
466
 
454
467
  ```
@@ -456,7 +469,7 @@ Set in `.claude/settings.local.json`:
456
469
  ├── rules/ # Registered rules (add-rule.sh)
457
470
  ├── state/ # Per-session runtime state (NEW)
458
471
  │ ├── session-edits.json # Append-only edit log per session
459
- │ ├── search-required.flag # Set by user-prompt-submit, cleared by search-tracker
472
+ │ ├── search-required-<sid>.flag # Per-session: set by user-prompt-submit, cleared by search-tracker/stop-search-check, GC'd at SessionStart (>60min)
460
473
  │ ├── loaded-instructions.log # Audit trail of which rules entered context
461
474
  │ └── test-cohesion-last.log # Last cohesion test command output
462
475
  └── hooks/ # Hook scripts (copied on install)