@softspark/ai-toolkit 4.14.1 → 4.15.0

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +11 -10
  3. package/app/.claude-plugin/plugin.json +1 -1
  4. package/app/CLAUDE.md.template +3 -0
  5. package/app/hooks/_search-capability.sh +3 -2
  6. package/app/hooks/stop-search-check.sh +2 -1
  7. package/benchmarks/ecosystem-doctor-snapshot.json +73 -31
  8. package/kb/procedures/maintenance-sop.md +26 -13
  9. package/kb/procedures/release-verification-sop.md +41 -36
  10. package/kb/reference/architecture-overview.md +23 -7
  11. package/kb/reference/codex-cli-compatibility.md +96 -36
  12. package/kb/reference/extension-api.md +52 -9
  13. package/kb/reference/global-install-model.md +53 -21
  14. package/kb/reference/hooks-catalog.md +44 -8
  15. package/kb/reference/mcp-editor-compatibility.md +27 -6
  16. package/kb/reference/mcp-templates.md +12 -6
  17. package/kb/reference/opencode-compatibility.md +13 -7
  18. package/kb/reference/plugin-pack-conventions.md +7 -7
  19. package/kb/reference/skills-catalog.md +3 -3
  20. package/kb/reference/supported-tools-registry.md +19 -17
  21. package/kb/reference/windows-support.md +26 -3
  22. package/llms-full.txt +443 -180
  23. package/llms.txt +1 -1
  24. package/manifest.json +1 -1
  25. package/package.json +2 -2
  26. package/scripts/codex_skill_adapter.py +448 -198
  27. package/scripts/dir_rules_shared.py +2 -11
  28. package/scripts/ecosystem_tools.json +29 -8
  29. package/scripts/emission.py +5 -91
  30. package/scripts/generate_agents_md.py +4 -87
  31. package/scripts/generate_codex.py +5 -95
  32. package/scripts/generate_codex_agents.py +242 -0
  33. package/scripts/generate_codex_hooks.py +648 -55
  34. package/scripts/generate_codex_skills.py +15 -6
  35. package/scripts/generate_copilot.py +771 -74
  36. package/scripts/generate_copilot_hooks.py +606 -0
  37. package/scripts/generate_cursor_hooks.py +453 -121
  38. package/scripts/generate_opencode_commands.py +4 -6
  39. package/scripts/inject_hook_cli.py +770 -205
  40. package/scripts/injection.py +102 -23
  41. package/scripts/install_steps/ai_tools.py +123 -83
  42. package/scripts/instruction_core.py +95 -0
  43. package/scripts/mcp_editors.py +934 -80
  44. package/scripts/mcp_manager.py +46 -26
  45. package/scripts/plugin.py +291 -114
  46. package/scripts/secure_fs.py +538 -0
  47. package/scripts/uninstall.py +1279 -208
@@ -7,8 +7,9 @@ and Gemini pointer pattern, Codex benefits from having the full skill catalog
7
7
  on disk, so this generator syncs every skill in ``app/skills/`` into
8
8
  ``<target-dir>/.agents/skills/<name>/``.
9
9
 
10
- The mirror is **opt-in**: ``enable_codex_skills=False`` is the default.
11
- Bucket 4 wires a ``--codex-skills`` CLI flag that toggles this on.
10
+ The standalone generator keeps ``enable_codex_skills=False`` as a compatibility
11
+ default. Selecting Codex in the main installer installs this catalog
12
+ automatically; ``--codex-skills`` remains an explicit refresh option.
12
13
 
13
14
  Implementation:
14
15
  * Native Codex-compatible skills are symlinked to canonical ``app/skills``.
@@ -33,7 +34,12 @@ import sys
33
34
  from pathlib import Path
34
35
 
35
36
  sys.path.insert(0, str(Path(__file__).resolve().parent))
36
- from codex_skill_adapter import cleanup_codex_skills, sync_codex_skill
37
+ from codex_skill_adapter import (
38
+ cleanup_codex_skills,
39
+ prepare_codex_skills_dir,
40
+ sync_codex_skill,
41
+ unmanaged_codex_skill_names,
42
+ )
37
43
  from emission import skills_dir
38
44
 
39
45
 
@@ -94,15 +100,18 @@ def generate(target_dir: Path, enable_codex_skills: bool = False) -> None:
94
100
  if not enable_codex_skills:
95
101
  return
96
102
 
97
- codex_skills_dir = target_dir / ".agents" / "skills"
98
- codex_skills_dir.mkdir(parents=True, exist_ok=True)
103
+ codex_skills_dir = prepare_codex_skills_dir(target_dir)
99
104
 
100
105
  sources = _iter_source_skills()
106
+ user_names = unmanaged_codex_skill_names(codex_skills_dir, skills_dir)
101
107
 
102
108
  linked = 0
103
109
  adapted = 0
104
110
  skipped = 0
105
111
  for skill in sources:
112
+ if skill.name in user_names:
113
+ skipped += 1
114
+ continue
106
115
  mode = sync_codex_skill(skill, codex_skills_dir)
107
116
  if mode == "linked":
108
117
  linked += 1
@@ -111,7 +120,7 @@ def generate(target_dir: Path, enable_codex_skills: bool = False) -> None:
111
120
  else:
112
121
  skipped += 1
113
122
 
114
- cleanup_codex_skills(codex_skills_dir, skills_dir)
123
+ cleanup_codex_skills(codex_skills_dir, skills_dir, user_names)
115
124
 
116
125
  print(
117
126
  f" Codex skill mirror: {_count_entries(codex_skills_dir)} skills "