@softspark/ai-toolkit 1.3.2 → 1.3.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 +7 -0
- package/manifest.json +159 -0
- package/package.json +2 -1
- package/scripts/stats.py +27 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,13 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v1.3.3 — Patch (2026-04-07)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **manifest.json missing from npm package**: Added `manifest.json` to `package.json` `files` array. Without it, `--auto-detect` and `--modules` could not read module definitions from installed package.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
10
17
|
## v1.3.2 — Patch (2026-04-07)
|
|
11
18
|
|
|
12
19
|
### Fixed
|
package/manifest.json
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"components": {
|
|
4
|
+
"agents": {
|
|
5
|
+
"description": "44 specialized agents (orchestrator, backend, frontend, security, devops, etc.)",
|
|
6
|
+
"path": "app/agents",
|
|
7
|
+
"target": ".claude/agents",
|
|
8
|
+
"type": "symlink",
|
|
9
|
+
"tags": ["core", "agents"]
|
|
10
|
+
},
|
|
11
|
+
"skills": {
|
|
12
|
+
"description": "90 skills (28 task + 30 hybrid + 32 knowledge)",
|
|
13
|
+
"path": "app/skills",
|
|
14
|
+
"target": ".claude/skills",
|
|
15
|
+
"type": "symlink",
|
|
16
|
+
"tags": ["core", "skills", "commands"]
|
|
17
|
+
},
|
|
18
|
+
"hooks": {
|
|
19
|
+
"description": "21 global hook entries across 12 lifecycle events + 5 skill-scoped lifecycle hooks",
|
|
20
|
+
"path": "app/hooks.json + app/hooks/*.sh",
|
|
21
|
+
"target": "~/.claude/settings.json (merge) + ~/.ai-toolkit/hooks/ (copy)",
|
|
22
|
+
"type": "merge+copy",
|
|
23
|
+
"tags": ["core", "hooks", "quality"]
|
|
24
|
+
},
|
|
25
|
+
"plugin-packs": {
|
|
26
|
+
"description": "Experimental domain plugin packs and optional hook/policy modules",
|
|
27
|
+
"path": "app/plugins",
|
|
28
|
+
"target": "opt-in / not installed by default",
|
|
29
|
+
"type": "experimental",
|
|
30
|
+
"tags": ["plugins", "packs", "experimental"]
|
|
31
|
+
},
|
|
32
|
+
"constitution": {
|
|
33
|
+
"description": "5-article machine-enforced safety constitution",
|
|
34
|
+
"path": "app/constitution.md",
|
|
35
|
+
"target": ".claude/constitution.md",
|
|
36
|
+
"type": "symlink",
|
|
37
|
+
"tags": ["core", "safety", "constitution"]
|
|
38
|
+
},
|
|
39
|
+
"architecture": {
|
|
40
|
+
"description": "System architecture documentation",
|
|
41
|
+
"path": "app/ARCHITECTURE.md",
|
|
42
|
+
"target": ".claude/ARCHITECTURE.md",
|
|
43
|
+
"type": "symlink",
|
|
44
|
+
"tags": ["docs"]
|
|
45
|
+
},
|
|
46
|
+
"output-styles": {
|
|
47
|
+
"description": "System prompt output style overrides (e.g. Golden Rules enforcement)",
|
|
48
|
+
"path": "app/output-styles",
|
|
49
|
+
"target": ".claude/output-styles",
|
|
50
|
+
"type": "symlink",
|
|
51
|
+
"tags": ["core", "output-styles"]
|
|
52
|
+
},
|
|
53
|
+
"rules": {
|
|
54
|
+
"description": "Auto-injected rules for CLAUDE.md (jira, quality-gates, etc.)",
|
|
55
|
+
"path": "app/rules",
|
|
56
|
+
"target": "CLAUDE.md (injected)",
|
|
57
|
+
"type": "injection",
|
|
58
|
+
"tags": ["core", "rules"]
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"bundles": {
|
|
62
|
+
"minimal": {
|
|
63
|
+
"description": "Hooks and constitution only -- safety without agents",
|
|
64
|
+
"includes": ["hooks", "constitution"]
|
|
65
|
+
},
|
|
66
|
+
"standard": {
|
|
67
|
+
"description": "Full toolkit (recommended)",
|
|
68
|
+
"includes": ["agents", "skills", "hooks", "constitution", "rules"]
|
|
69
|
+
},
|
|
70
|
+
"agents-only": {
|
|
71
|
+
"description": "Agents without skills (for custom skill setup)",
|
|
72
|
+
"includes": ["agents", "hooks", "constitution"]
|
|
73
|
+
},
|
|
74
|
+
"skills-only": {
|
|
75
|
+
"description": "Skills without agents",
|
|
76
|
+
"includes": ["skills", "hooks", "constitution"]
|
|
77
|
+
},
|
|
78
|
+
"safety": {
|
|
79
|
+
"description": "Constitution + hooks only (zero agent overhead)",
|
|
80
|
+
"includes": ["hooks", "constitution"]
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"modules": {
|
|
84
|
+
"core": {
|
|
85
|
+
"description": "Core hooks and essential skills",
|
|
86
|
+
"required": true
|
|
87
|
+
},
|
|
88
|
+
"agents": {
|
|
89
|
+
"description": "44 specialized agents",
|
|
90
|
+
"default": true
|
|
91
|
+
},
|
|
92
|
+
"skills": {
|
|
93
|
+
"description": "90 skills (task, hybrid, knowledge)",
|
|
94
|
+
"default": true
|
|
95
|
+
},
|
|
96
|
+
"rules-common": {
|
|
97
|
+
"description": "Common coding rules (5 files)",
|
|
98
|
+
"default": true
|
|
99
|
+
},
|
|
100
|
+
"rules-typescript": {
|
|
101
|
+
"description": "TypeScript-specific rules",
|
|
102
|
+
"auto_detect": ["package.json", "tsconfig.json"]
|
|
103
|
+
},
|
|
104
|
+
"rules-python": {
|
|
105
|
+
"description": "Python-specific rules",
|
|
106
|
+
"auto_detect": ["requirements.txt", "pyproject.toml", "setup.py", "Pipfile"]
|
|
107
|
+
},
|
|
108
|
+
"rules-golang": {
|
|
109
|
+
"description": "Go-specific rules",
|
|
110
|
+
"auto_detect": ["go.mod"]
|
|
111
|
+
},
|
|
112
|
+
"rules-rust": {
|
|
113
|
+
"description": "Rust-specific rules",
|
|
114
|
+
"auto_detect": ["Cargo.toml"]
|
|
115
|
+
},
|
|
116
|
+
"rules-java": {
|
|
117
|
+
"description": "Java-specific rules",
|
|
118
|
+
"auto_detect": ["pom.xml", "build.gradle", "build.gradle.kts"]
|
|
119
|
+
},
|
|
120
|
+
"rules-kotlin": {
|
|
121
|
+
"description": "Kotlin-specific rules",
|
|
122
|
+
"auto_detect": ["build.gradle.kts"]
|
|
123
|
+
},
|
|
124
|
+
"rules-swift": {
|
|
125
|
+
"description": "Swift-specific rules",
|
|
126
|
+
"auto_detect": ["Package.swift", "*.xcodeproj"]
|
|
127
|
+
},
|
|
128
|
+
"rules-dart": {
|
|
129
|
+
"description": "Dart/Flutter-specific rules",
|
|
130
|
+
"auto_detect": ["pubspec.yaml"]
|
|
131
|
+
},
|
|
132
|
+
"rules-csharp": {
|
|
133
|
+
"description": "C#/.NET-specific rules",
|
|
134
|
+
"auto_detect": ["*.csproj", "*.sln"]
|
|
135
|
+
},
|
|
136
|
+
"rules-php": {
|
|
137
|
+
"description": "PHP-specific rules",
|
|
138
|
+
"auto_detect": ["composer.json"]
|
|
139
|
+
},
|
|
140
|
+
"rules-cpp": {
|
|
141
|
+
"description": "C++-specific rules",
|
|
142
|
+
"auto_detect": ["CMakeLists.txt", "Makefile", "*.cpp"]
|
|
143
|
+
},
|
|
144
|
+
"rules-ruby": {
|
|
145
|
+
"description": "Ruby-specific rules",
|
|
146
|
+
"auto_detect": ["Gemfile", "*.gemspec"]
|
|
147
|
+
},
|
|
148
|
+
"mcp-templates": {
|
|
149
|
+
"description": "25 MCP server config templates",
|
|
150
|
+
"default": false
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"profiles": {
|
|
154
|
+
"minimal": ["core"],
|
|
155
|
+
"standard": ["core", "agents", "skills", "rules-common"],
|
|
156
|
+
"strict": ["core", "agents", "skills", "rules-common", "mcp-templates"],
|
|
157
|
+
"full": ["core", "agents", "skills", "rules-common", "mcp-templates"]
|
|
158
|
+
}
|
|
159
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softspark/ai-toolkit",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
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",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"kb/",
|
|
63
63
|
"benchmarks/",
|
|
64
64
|
"action.yml",
|
|
65
|
+
"manifest.json",
|
|
65
66
|
"README.md",
|
|
66
67
|
"CHANGELOG.md",
|
|
67
68
|
"LICENSE",
|
package/scripts/stats.py
CHANGED
|
@@ -59,7 +59,31 @@ def main() -> None:
|
|
|
59
59
|
print("No invocations recorded.")
|
|
60
60
|
return
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
# Handle both formats: {skill: {count, last_used}} and {loop_runs: [...]}
|
|
63
|
+
if "loop_runs" in data:
|
|
64
|
+
runs = data["loop_runs"]
|
|
65
|
+
if not runs:
|
|
66
|
+
print("No invocations recorded.")
|
|
67
|
+
return
|
|
68
|
+
# Aggregate loop_runs by command
|
|
69
|
+
agg: dict[str, dict] = {}
|
|
70
|
+
for run in runs:
|
|
71
|
+
cmd = run.get("command", "unknown")
|
|
72
|
+
iters = run.get("iterations", [])
|
|
73
|
+
if cmd not in agg:
|
|
74
|
+
agg[cmd] = {"count": 0, "last_used": "unknown"}
|
|
75
|
+
agg[cmd]["count"] += len(iters) if iters else 1
|
|
76
|
+
started = run.get("started_at", "")
|
|
77
|
+
if started > agg[cmd]["last_used"]:
|
|
78
|
+
agg[cmd]["last_used"] = started
|
|
79
|
+
rows = sorted(agg.items(), key=lambda x: x[1]["count"], reverse=True)
|
|
80
|
+
else:
|
|
81
|
+
# Original format: {skill_name: {count, last_used}}
|
|
82
|
+
skill_data = {k: v for k, v in data.items() if isinstance(v, dict)}
|
|
83
|
+
if not skill_data:
|
|
84
|
+
print("No invocations recorded.")
|
|
85
|
+
return
|
|
86
|
+
rows = sorted(skill_data.items(), key=lambda x: x[1].get("count", 0), reverse=True)
|
|
63
87
|
|
|
64
88
|
print(f"{'Skill':<30} {'Count':>6} {'Last Used':<20}")
|
|
65
89
|
print("-" * 60)
|
|
@@ -68,10 +92,10 @@ def main() -> None:
|
|
|
68
92
|
last = info.get("last_used", "unknown")
|
|
69
93
|
print(f"{name:<30} {count:>6} {last:<20}")
|
|
70
94
|
|
|
71
|
-
total = sum(v.get("count", 0) for v in
|
|
95
|
+
total = sum(v.get("count", 0) for _, v in rows)
|
|
72
96
|
print()
|
|
73
97
|
print(f"Total invocations: {total}")
|
|
74
|
-
print(f"Unique skills: {len(
|
|
98
|
+
print(f"Unique skills: {len(rows)}")
|
|
75
99
|
print()
|
|
76
100
|
print(f"File: {STATS_FILE}")
|
|
77
101
|
print("Reset: ai-toolkit stats --reset")
|