@softspark/ai-toolkit 1.3.0 → 1.3.1

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,16 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v1.3.1 — Patch (2026-04-07)
11
+
12
+ ### Fixed
13
+ - **Orphaned symlinks**: `install` and `update` now auto-clean broken agent/skill symlinks when components are removed or merged. Previously required manual `doctor --fix`.
14
+ - **`--auto-detect` without `--local`**: Now auto-adds `--local` with warning instead of scanning `$HOME` for language markers.
15
+ - **Session hooks concurrency**: `session-context.sh` writes per-session file (`${SESSION_ID}.json`) instead of single `current-context.json`. `pre-compact-save.sh` includes session ID in filename to avoid collisions.
16
+ - **Language rules injection**: `install --local --auto-detect` now actually injects detected language rules into project `.claude/CLAUDE.md` via `<!-- TOOLKIT:language-rules -->` markers.
17
+
18
+ ---
19
+
10
20
  ## v1.3.0 — Competitive Features Release (2026-04-07)
11
21
 
12
22
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softspark/ai-toolkit",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Professional-grade AI coding toolkit: 90 skills, 44 agents, multi-platform support (Claude, Cursor, Windsurf, Copilot, Gemini, Cline, Roo Code, Aider, Augment), machine-enforced safety constitution, persona presets, skill security auditor, expanded lifecycle hooks, 11 plugin packs, and benchmark tooling.",
5
5
  "keywords": [
6
6
  "claude",
@@ -36,7 +36,17 @@ def install_agents(claude_dir: Path, only: str, skip: str, dry_run: bool) -> Non
36
36
  continue
37
37
  target.symlink_to(agent_file)
38
38
  linked += 1
39
+
40
+ # Clean orphaned symlinks (agents removed from toolkit)
41
+ orphaned = 0
42
+ for target in sorted(agents_dst.glob("*.md")):
43
+ if target.is_symlink() and not target.resolve().exists():
44
+ target.unlink()
45
+ orphaned += 1
46
+
39
47
  print(f" Linked: .claude/agents/ ({linked} files)")
48
+ if orphaned > 0:
49
+ print(f" Cleaned: {orphaned} orphaned agent symlink(s)")
40
50
  if skipped > 0:
41
51
  print(f" Kept: {skipped} user agent(s) (name conflict)")
42
52
 
@@ -73,7 +83,17 @@ def install_skills(claude_dir: Path, only: str, skip: str, dry_run: bool) -> Non
73
83
  continue
74
84
  target.symlink_to(skill_dir)
75
85
  linked += 1
86
+
87
+ # Clean orphaned symlinks (skills removed from toolkit)
88
+ orphaned = 0
89
+ for target in sorted(skills_dst.iterdir()):
90
+ if target.is_symlink() and not target.resolve().exists():
91
+ target.unlink()
92
+ orphaned += 1
93
+
76
94
  print(f" Linked: .claude/skills/ ({linked} directories)")
95
+ if orphaned > 0:
96
+ print(f" Cleaned: {orphaned} orphaned skill symlink(s)")
77
97
  if skipped > 0:
78
98
  print(f" Kept: {skipped} user skill(s) (name conflict)")
79
99