@softspark/ai-toolkit 1.9.0 → 2.0.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +40 -14
  2. package/README.md +18 -18
  3. package/app/ARCHITECTURE.md +3 -3
  4. package/app/hooks/governance-capture.sh +1 -1
  5. package/app/hooks/pre-compact-save.sh +1 -1
  6. package/app/hooks/session-context.sh +1 -1
  7. package/app/hooks/track-usage.sh +2 -2
  8. package/app/hooks.json +20 -20
  9. package/app/plugins/memory-pack/README.md +1 -1
  10. package/app/plugins/memory-pack/hooks/observation-capture.sh +2 -2
  11. package/app/plugins/memory-pack/hooks/session-summary.sh +1 -1
  12. package/app/plugins/memory-pack/scripts/init_db.py +2 -2
  13. package/app/plugins/memory-pack/skills/mem-search/SKILL.md +3 -3
  14. package/app/skills/hook-creator/SKILL.md +2 -2
  15. package/app/skills/mem-search/SKILL.md +3 -3
  16. package/app/skills/repeat/SKILL.md +1 -1
  17. package/bin/ai-toolkit.js +9 -4
  18. package/kb/history/completed/enterprise-config-inheritance-plan-20260412.md +32 -34
  19. package/kb/history/completed/offline-slm-profile-plan-20260411.md +12 -12
  20. package/kb/planning/cloud-security-pack-plan.md +3 -3
  21. package/kb/procedures/maintenance-sop.md +3 -3
  22. package/kb/reference/architecture-overview.md +5 -5
  23. package/kb/reference/benchmark-config.md +1 -1
  24. package/kb/reference/competitive-features-implementation.md +2 -2
  25. package/kb/reference/enterprise-config-guide.md +9 -9
  26. package/kb/reference/extension-api.md +1 -1
  27. package/kb/reference/global-install-model.md +2 -2
  28. package/kb/reference/hooks-catalog.md +30 -30
  29. package/kb/reference/integrations.md +3 -3
  30. package/kb/reference/manifest-install.md +4 -4
  31. package/kb/reference/plugin-pack-conventions.md +5 -5
  32. package/kb/reference/stats.md +3 -3
  33. package/kb/reference/sync.md +3 -3
  34. package/llms-full.txt +118 -899
  35. package/llms.txt +0 -1
  36. package/manifest.json +3 -3
  37. package/package.json +1 -1
  38. package/scripts/add_rule.py +3 -2
  39. package/scripts/benchmark_config.py +3 -1
  40. package/scripts/compile_slm.py +9 -7
  41. package/scripts/config_cli.py +7 -7
  42. package/scripts/config_lock.py +12 -4
  43. package/scripts/config_merger.py +1 -1
  44. package/scripts/config_resolver.py +20 -7
  45. package/scripts/config_scaffold.py +4 -4
  46. package/scripts/config_validator.py +3 -3
  47. package/scripts/dir_rules_shared.py +1 -1
  48. package/scripts/doctor.py +3 -2
  49. package/scripts/install.py +12 -7
  50. package/scripts/install_git_hooks.py +1 -1
  51. package/scripts/install_steps/ai_tools.py +4 -4
  52. package/scripts/install_steps/hooks.py +1 -1
  53. package/scripts/install_steps/install_state.py +8 -6
  54. package/scripts/install_steps/project_registry.py +5 -5
  55. package/scripts/migrate.py +241 -0
  56. package/scripts/paths.py +50 -0
  57. package/scripts/plugin.py +8 -6
  58. package/scripts/remove_rule.py +5 -4
  59. package/scripts/stats.py +3 -2
  60. package/scripts/sync.py +3 -2
  61. package/scripts/update_projects.py +1 -1
  62. package/scripts/version_check.py +5 -2
  63. package/kb/planning/local-dashboard-plan.md +0 -773
@@ -15,7 +15,7 @@ $ARGUMENTS
15
15
 
16
16
  ## How It Works
17
17
 
18
- This skill queries the SQLite FTS5 full-text search index at `~/.ai-toolkit/memory.db` to find relevant observations from past sessions.
18
+ This skill queries the SQLite FTS5 full-text search index at `~/.softspark/ai-toolkit/memory.db` to find relevant observations from past sessions.
19
19
 
20
20
  ## Instructions
21
21
 
@@ -23,12 +23,12 @@ This skill queries the SQLite FTS5 full-text search index at `~/.ai-toolkit/memo
23
23
 
24
24
  2. **Initialize the database** if it does not exist:
25
25
  ```bash
26
- python3 "$HOME/.ai-toolkit/hooks/../plugins/memory-pack/scripts/init_db.py" 2>/dev/null || true
26
+ python3 "$HOME/.softspark/ai-toolkit/hooks/../plugins/memory-pack/scripts/init_db.py" 2>/dev/null || true
27
27
  ```
28
28
 
29
29
  3. **Run the FTS5 search** against the observations table:
30
30
  ```bash
31
- sqlite3 ~/.ai-toolkit/memory.db "
31
+ sqlite3 ~/.softspark/ai-toolkit/memory.db "
32
32
  SELECT o.id, o.session_id, o.tool_name, o.content, o.created_at,
33
33
  s.project_dir, s.summary
34
34
  FROM observations_fts fts
@@ -77,7 +77,7 @@ After loop ends:
77
77
 
78
78
  ## Stats Logging
79
79
 
80
- Each iteration MUST be logged to `~/.ai-toolkit/stats.json`:
80
+ Each iteration MUST be logged to `~/.softspark/ai-toolkit/stats.json`:
81
81
 
82
82
  ```json
83
83
  {
package/bin/ai-toolkit.js CHANGED
@@ -62,8 +62,8 @@ const COMMANDS = {
62
62
  status: 'Show installed modules, version, and profile from state.json',
63
63
  reset: 'Wipe and recreate project-local configs from scratch (requires --local)',
64
64
  uninstall: 'Remove ai-toolkit from ~/.claude/',
65
- 'add-rule': 'Register a rule file in ~/.ai-toolkit/rules/ (applied on every install/update)',
66
- 'remove-rule': 'Unregister a rule from ~/.ai-toolkit/rules/ and remove its block from CLAUDE.md',
65
+ 'add-rule': 'Register a rule file in ~/.softspark/ai-toolkit/rules/ (applied on every install/update)',
66
+ 'remove-rule': 'Unregister a rule from ~/.softspark/ai-toolkit/rules/ and remove its block from CLAUDE.md',
67
67
  'inject-hook': 'Inject external hooks into ~/.claude/settings.json (tagged with _source for idempotent updates)',
68
68
  'remove-hook': 'Remove injected hooks by source name from ~/.claude/settings.json',
69
69
  validate: 'Verify toolkit integrity',
@@ -427,7 +427,12 @@ function handleStatus(_args) {
427
427
  */
428
428
  function handleUpdate(args) {
429
429
  const isLocal = args.includes('--local');
430
- const statePath = path.join(process.env.HOME, '.ai-toolkit', 'state.json');
430
+ let statePath = path.join(process.env.HOME, '.softspark', 'ai-toolkit', 'state.json');
431
+ // Fallback to legacy path for first run after upgrade (before migration runs)
432
+ if (!fs.existsSync(statePath)) {
433
+ const legacyState = path.join(process.env.HOME, '.ai-toolkit', 'state.json');
434
+ if (fs.existsSync(legacyState)) statePath = legacyState;
435
+ }
431
436
  let stateArgs = [];
432
437
 
433
438
  if (fs.existsSync(statePath)) {
@@ -452,7 +457,7 @@ function handleUpdate(args) {
452
457
 
453
458
  // After global update (not --local), propagate to all registered projects
454
459
  if (!isLocal) {
455
- const registryPath = path.join(process.env.HOME, '.ai-toolkit', 'projects.json');
460
+ const registryPath = path.join(process.env.HOME, '.softspark', 'ai-toolkit', 'projects.json');
456
461
  if (fs.existsSync(registryPath)) {
457
462
  try {
458
463
  const registry = JSON.parse(fs.readFileSync(registryPath, 'utf8'));
@@ -53,10 +53,10 @@ Create a configuration inheritance system where projects can extend a shared bas
53
53
  | FR3 | Constitution immutability — Articles I-V cannot be modified | Must | 100% block rate on modification attempts |
54
54
  | FR4 | Override validation with `override: true` + `justification` | Must | Missing justification → error |
55
55
  | FR5 | `enforce` block constraints (minHookProfile, requiredPlugins, forbidOverride, requiredAgents) | Must | All 4 constraint types enforced |
56
- | FR6 | Install/update integration — resolve extends during install | Must | `install --local` detects `.ai-toolkit.json` |
56
+ | FR6 | Install/update integration — resolve extends during install | Must | `install --local` detects `.softspark-toolkit.json` |
57
57
  | FR7 | `config diff` command — show project vs base differences | Must | All merge layers visible |
58
58
  | FR8 | `config validate` command — schema + enforcement validation | Must | Exit 0/1 for pass/fail |
59
- | FR9 | `config init` — interactive project config setup | Should | Guided flow produces valid `.ai-toolkit.json` |
59
+ | FR9 | `config init` — interactive project config setup | Should | Guided flow produces valid `.softspark-toolkit.json` |
60
60
  | FR10 | `config create-base` — scaffold npm base config package | Should | Ready-to-publish package with `package.json` |
61
61
  | FR11 | Lock file for reproducible installs | Should | Identical resolved config across team members |
62
62
  | FR12 | Audit trail in `state.json` | Should | Resolved version + overrides recorded |
@@ -84,7 +84,7 @@ Project Level (per-repository):
84
84
  ══════════════════════════════
85
85
 
86
86
  my-service/
87
- ├── .ai-toolkit.json ← project config with "extends"
87
+ ├── .softspark-toolkit.json ← project config with "extends"
88
88
  ├── .claude/
89
89
  │ ├── CLAUDE.md ← generated (base + project merged)
90
90
  │ └── settings.json ← generated (base hooks + project hooks merged)
@@ -99,7 +99,7 @@ Merge Pipeline:
99
99
  ai-toolkit defaults (manifest.json) ← Layer 1: toolkit defaults
100
100
 
101
101
 
102
- .ai-toolkit.json ← Layer 2: project overrides
102
+ .softspark-toolkit.json ← Layer 2: project overrides
103
103
 
104
104
 
105
105
  Resolved Configuration ← Final: CLAUDE.md, settings.json, etc.
@@ -110,7 +110,7 @@ Merge Pipeline:
110
110
  ```
111
111
  1. Load base config from "extends" (npm package, git URL, or local path)
112
112
  2. Merge with ai-toolkit defaults (manifest.json profiles)
113
- 3. Apply project-level overrides from .ai-toolkit.json
113
+ 3. Apply project-level overrides from .softspark-toolkit.json
114
114
  4. Validate merged config (constitution immutability, schema validation)
115
115
  5. Generate output files (CLAUDE.md, settings.json, agent symlinks, etc.)
116
116
  ```
@@ -121,7 +121,7 @@ Merge Pipeline:
121
121
 
122
122
  | # | Feature | Priority | Status | Est. Time | Notes |
123
123
  |---|---------|----------|--------|-----------|-------|
124
- | 1.1 | `.ai-toolkit.json` schema definition | P0 | **Done** | 1d | `scripts/schemas/ai-toolkit-config.schema.json` |
124
+ | 1.1 | `.softspark-toolkit.json` schema definition | P0 | **Done** | 1d | `scripts/schemas/ai-toolkit-config.schema.json` |
125
125
  | 1.2 | Config resolver (npm, git, local path) | P0 | **Done** | 3d | `scripts/config_resolver.py` (~330 LOC) |
126
126
  | 1.3 | Merge engine (layered merge with override semantics) | P0 | **Done** | 3d | `scripts/config_merger.py` (~340 LOC) |
127
127
  | 1.4 | Constitution immutability guard | P0 | **Done** | 1d | In config_merger.py `_merge_constitution()` |
@@ -130,8 +130,8 @@ Merge Pipeline:
130
130
  | 2.3 | `ai-toolkit config validate` command | P0 | **Done** | 1d | `scripts/config_cli.py` `cmd_validate()` |
131
131
  | 2.4 | `ai-toolkit config init` command | P1 | **Done** | 1.5d | Interactive + flag-driven, validates extends |
132
132
  | 2.5 | `ai-toolkit config create-base` command | P1 | **Done** | 2d | `scripts/config_scaffold.py` — full npm package scaffold |
133
- | 3.1 | Audit trail in state.json | P1 | **Done** | 1d | `install_state.py` extends field + `.ai-toolkit-extends.json` |
134
- | 3.2 | Lock file (`.ai-toolkit.lock.json`) | P1 | **Done** | 1.5d | `scripts/config_lock.py` — generate/consume/staleness check |
133
+ | 3.1 | Audit trail in state.json | P1 | **Done** | 1d | `install_state.py` extends field + `.softspark-toolkit-extends.json` |
134
+ | 3.2 | Lock file (`.softspark-toolkit.lock.json`) | P1 | **Done** | 1.5d | `scripts/config_lock.py` — generate/consume/staleness check |
135
135
  | 3.3 | Base config scaffolder (npm package template) | P1 | **Done** | 1.5d | Part of `config_scaffold.py` `create_base_package()` |
136
136
  | 3.4 | CI enforcement (`ai-toolkit config check`) | P2 | **Done** | 1d | `config_cli.py` `cmd_check()` — JSON output, exit codes |
137
137
  | 4.1 | Tests | P1 | **Done** | 3d | 39 tests: resolver (7), merger (13), CLI (10), install integration (9) |
@@ -189,7 +189,7 @@ Audit trail (3.1) ──┐
189
189
 
190
190
  ### Phase 1: Core Engine (week 1-2)
191
191
 
192
- #### 1.1 Configuration Schema (`.ai-toolkit.json`)
192
+ #### 1.1 Configuration Schema (`.softspark-toolkit.json`)
193
193
 
194
194
  > **v1 scope:** The full schema below shows the target state. v1 implements only: `extends`, `profile`, `agents`, `rules`, `constitution`, and `enforce`. See section 6a for the v1/v2 field breakdown.
195
195
 
@@ -331,9 +331,9 @@ Audit trail (3.1) ──┐
331
331
  | Local path | `"extends": "../shared-config"` | Resolve relative to project root |
332
332
  | ~~Multiple bases~~ | ~~`"extends": ["@mycompany/base", "@mycompany/typescript-extra"]`~~ | Deferred to v2 — multi-base merge ordering is a complexity trap |
333
333
 
334
- **Cache directory:** `~/.ai-toolkit/config-cache/`
334
+ **Cache directory:** `~/.softspark/ai-toolkit/config-cache/`
335
335
  ```
336
- ~/.ai-toolkit/config-cache/
336
+ ~/.softspark/ai-toolkit/config-cache/
337
337
  @mycompany/
338
338
  ai-toolkit-config/
339
339
  2.1.0/
@@ -391,7 +391,7 @@ def resolve_extends(extends_value: str, project_root: str,
391
391
  **Max recursion depth:** 5 levels (prevent circular extends). Circular detection via visited set.
392
392
 
393
393
  **Offline handling:** If the npm/git source is unavailable:
394
- 1. Check cache (`~/.ai-toolkit/config-cache/`)
394
+ 1. Check cache (`~/.softspark/ai-toolkit/config-cache/`)
395
395
  2. If cached version found → use with warning: "Using cached config v2.1.0 (offline)"
396
396
  3. If not cached → error with instructions: "Run `ai-toolkit config update` when online"
397
397
 
@@ -532,7 +532,7 @@ def merge_constitution(base: dict, project: dict) -> dict:
532
532
 
533
533
  ```python
534
534
  # During install --local:
535
- # 1. Check for .ai-toolkit.json in project root
535
+ # 1. Check for .softspark-toolkit.json in project root
536
536
  # 2. If found and has "extends":
537
537
  # a. Resolve base config(s)
538
538
  # b. Merge base → project
@@ -543,7 +543,7 @@ def merge_constitution(base: dict, project: dict) -> dict:
543
543
 
544
544
  **CLI flags:**
545
545
  ```bash
546
- ai-toolkit install --local # auto-detect .ai-toolkit.json
546
+ ai-toolkit install --local # auto-detect .softspark-toolkit.json
547
547
  ai-toolkit install --local --config ./custom.json # explicit config file
548
548
  ai-toolkit update --local # re-resolve extends + update
549
549
  ai-toolkit update --local --refresh-base # force re-fetch base config
@@ -591,7 +591,7 @@ ai-toolkit config diff
591
591
  ai-toolkit config validate
592
592
 
593
593
  # Checks:
594
- # ✓ .ai-toolkit.json schema valid
594
+ # ✓ .softspark-toolkit.json schema valid
595
595
  # ✓ extends: @mycompany/ai-toolkit-config@2.1.0 resolved
596
596
  # ✓ No forbidden overrides
597
597
  # ✓ Required plugins installed: security-pack
@@ -616,12 +616,12 @@ ai-toolkit config init
616
616
  # Flow:
617
617
  # 1. "Does your organization have a shared ai-toolkit config? [y/n]"
618
618
  # → y: "npm package name or git URL:" → resolves + validates
619
- # → n: creates minimal .ai-toolkit.json without extends
619
+ # → n: creates minimal .softspark-toolkit.json without extends
620
620
  # 2. "Which profile? [minimal/standard/strict]" → default from base or standard
621
621
  # 3. "Which persona? [none/backend-lead/frontend-lead/devops-eng/junior-dev]"
622
622
  # 4. Auto-detect languages from project
623
623
  # 5. Auto-detect editors from project files
624
- # 6. Write .ai-toolkit.json
624
+ # 6. Write .softspark-toolkit.json
625
625
  # 7. Run ai-toolkit install --local
626
626
  ```
627
627
 
@@ -685,7 +685,7 @@ ai-toolkit config create-base @mycompany/ai-toolkit-config
685
685
 
686
686
  ---
687
687
 
688
- #### 3.2 Lock File (`.ai-toolkit.lock.json`)
688
+ #### 3.2 Lock File (`.softspark-toolkit.lock.json`)
689
689
 
690
690
  **Purpose:** Pin the exact resolved version of base configs for reproducible installs across team members and CI.
691
691
 
@@ -697,7 +697,7 @@ ai-toolkit config create-base @mycompany/ai-toolkit-config
697
697
  "version": "2.1.0",
698
698
  "resolved": "https://registry.npmjs.org/@mycompany/ai-toolkit-config/-/ai-toolkit-config-2.1.0.tgz",
699
699
  "integrity": "sha512-abc123...",
700
- "cached": "~/.ai-toolkit/config-cache/@mycompany/ai-toolkit-config/2.1.0/"
700
+ "cached": "~/.softspark/ai-toolkit/config-cache/@mycompany/ai-toolkit-config/2.1.0/"
701
701
  }
702
702
  },
703
703
  "generated_at": "2026-04-10T10:30:00Z",
@@ -709,7 +709,7 @@ ai-toolkit config create-base @mycompany/ai-toolkit-config
709
709
  - `ai-toolkit install --local` → uses lock file if present (like `npm ci`)
710
710
  - `ai-toolkit update --local` → re-resolves and updates lock file (like `npm install`)
711
711
  - `ai-toolkit update --local --refresh-base` → force re-fetch ignoring cache
712
- - `.ai-toolkit.lock.json` should be committed to git (team synchronization)
712
+ - `.softspark-toolkit.lock.json` should be committed to git (team synchronization)
713
713
 
714
714
  ---
715
715
 
@@ -723,7 +723,7 @@ ai-toolkit config check
723
723
  # Exit codes:
724
724
  # 0 — project complies with base config
725
725
  # 1 — violations found (missing required plugins, forbidden overrides, etc.)
726
- # 2 — .ai-toolkit.json not found
726
+ # 2 — .softspark-toolkit.json not found
727
727
  ```
728
728
 
729
729
  **GitHub Actions example:**
@@ -796,7 +796,7 @@ v1 ships with a minimal schema. Each additional field adds merge logic, validati
796
796
  | **Offline** | Cached configs used when registry unavailable, with clear warning. |
797
797
  | **Security** | No secret exposure in config files or audit trail. npm auth via `.npmrc` (user-managed). `execFile` for npm CLI (no shell injection). |
798
798
  | **Error messages** | Every validation error includes: what failed, which config layer caused it, and what to do (e.g., "Contact your team lead to request an exemption"). |
799
- | **Backward compatibility** | 100% — projects without `.ai-toolkit.json` work exactly as today. Zero behavioral changes for existing users. |
799
+ | **Backward compatibility** | 100% — projects without `.softspark-toolkit.json` work exactly as today. Zero behavioral changes for existing users. |
800
800
  | **Maintainability** | Each new schema field requires: merge logic, validation, diff output, test. Budget 0.5d per new field. |
801
801
  | **Quality gates** | `ruff check scripts/config_*.py` (0 errors), `mypy --strict scripts/config_*.py` (0 errors). Run before every commit. |
802
802
  | **Type safety** | 100% public API type hints (all function signatures). >60% internal. Use `TypedDict` for config schemas, `dataclass` for resolved configs. |
@@ -813,7 +813,7 @@ v1 ships with a minimal schema. Each additional field adds merge logic, validati
813
813
  | Constitution protection | 100% (Articles I-V immutable) |
814
814
  | Override justification | Required for all overrides |
815
815
  | Enforce constraints | 4 types (minHookProfile, requiredPlugins, forbidOverride, requiredAgents) |
816
- | Backward compatibility | 100% (projects without .ai-toolkit.json work as today) |
816
+ | Backward compatibility | 100% (projects without .softspark-toolkit.json work as today) |
817
817
  | CI enforcement | Exit code 0/1 for governance compliance |
818
818
  | Lock file | Reproducible installs across team members |
819
819
  | Scaffold command | Ready-to-publish npm package template |
@@ -839,7 +839,7 @@ v1 ships with a minimal schema. Each additional field adds merge logic, validati
839
839
 
840
840
  ## 9. Pre-Mortem
841
841
 
842
- 1. **"Config file fatigue"** — developers already have `.eslintrc`, `tsconfig.json`, `.prettierrc`. Another `.ai-toolkit.json` may feel like bloat. Mitigation: file is optional, all features work without it. The DX gain (organizational governance without per-repo updates) justifies the file.
842
+ 1. **"Config file fatigue"** — developers already have `.eslintrc`, `tsconfig.json`, `.prettierrc`. Another `.softspark-toolkit.json` may feel like bloat. Mitigation: file is optional, all features work without it. The DX gain (organizational governance without per-repo updates) justifies the file.
843
843
  2. **"Base config never gets updated"** — team lead creates base config, nobody maintains it. Mitigation: `ai-toolkit config check` in CI catches drift; lock file staleness warnings.
844
844
  3. **"Override justification is annoying"** — developers will write "needed" as justification. Mitigation: CI check can enforce minimum justification length (>20 chars); code review culture catches low-effort justifications.
845
845
  4. **"Merge semantics are confusing"** — "does project override or extend the base agent list?" Mitigation: explicit semantics documented in schema; `ai-toolkit config diff` shows exactly what happened.
@@ -865,7 +865,7 @@ v1 ships with a minimal schema. Each additional field adds merge logic, validati
865
865
 
866
866
  **MVP (ship first, ~3.5 weeks):**
867
867
  1. [x] Approve plan
868
- 2. [x] Define `.ai-toolkit.json` JSON Schema — v1 scope only (1.1)
868
+ 2. [x] Define `.softspark-toolkit.json` JSON Schema — v1 scope only (1.1)
869
869
  3. [x] Implement config resolver (npm, git, local) with caching (1.2)
870
870
  4. [x] Implement merge engine with override validation (1.3)
871
871
  5. [x] Implement constitution immutability guard (1.4)
@@ -902,17 +902,15 @@ v1 ships with a minimal schema. Each additional field adds merge logic, validati
902
902
 
903
903
  ## 13. Cross-Plan Dependencies
904
904
 
905
- This plan shares modification targets with two other proposed plans:
905
+ This plan shares modification targets with the Offline SLM plan:
906
906
 
907
- | Shared File | This Plan | Local Dashboard Plan | Offline SLM Plan |
908
- |-------------|-----------|---------------------|-----------------|
909
- | `scripts/install.py` | +80 LOC (extends resolution) | — | +30 LOC (offline-slm profile) |
910
- | `manifest.json` | +10 LOC (schema refs) | — | +5 LOC (offline-slm profile) |
911
- | `bin/ai-toolkit.js` | +40 LOC (config subcommands) | +15 LOC (ui command) | +10 LOC (compile-slm command) |
907
+ | Shared File | This Plan | Offline SLM Plan |
908
+ |-------------|-----------|-----------------|
909
+ | `scripts/install.py` | +80 LOC (extends resolution) | +30 LOC (offline-slm profile) |
910
+ | `manifest.json` | +10 LOC (schema refs) | +5 LOC (offline-slm profile) |
911
+ | `bin/ai-toolkit.js` | +40 LOC (config subcommands) | +10 LOC (compile-slm command) |
912
912
 
913
- **If implementing in parallel:** coordinate merge order for shared files. Recommended sequence: Offline SLM (smallest changes) → Enterprise Config → Dashboard (no install.py changes).
914
-
915
- **Dashboard integration note:** If this plan ships before the Dashboard plan, the Dashboard's Config page (2.6) should display `.ai-toolkit.json` / `extends` status and the `config diff` output.
913
+ **If implementing in parallel:** coordinate merge order for shared files. Recommended sequence: Offline SLM (smallest changes) → Enterprise Config.
916
914
 
917
915
  ---
918
916
 
@@ -88,8 +88,8 @@ ai-toolkit compile-slm [--budget 4096] [--persona backend-lead] [--lang typescri
88
88
  │ extended (16K) — near-full toolkit (for 32B+ models) │
89
89
  │ │
90
90
  │ Output Files: │
91
- │ ~/.ai-toolkit/compiled/slm-system-prompt.md │
92
- │ ~/.ai-toolkit/compiled/slm-skills-reference.md │
91
+ │ ~/.softspark/ai-toolkit/compiled/slm-system-prompt.md │
92
+ │ ~/.softspark/ai-toolkit/compiled/slm-skills-reference.md │
93
93
  │ CLAUDE.md (or equivalent) — auto-generated │
94
94
  │ │
95
95
  │ Integration Targets: │
@@ -429,7 +429,7 @@ ai-toolkit install --profile offline-slm
429
429
  # What happens:
430
430
  # 1. Standard install of core components
431
431
  # 2. Runs compile_slm.py with auto-detected settings
432
- # 3. Writes compiled output to ~/.ai-toolkit/compiled/
432
+ # 3. Writes compiled output to ~/.softspark/ai-toolkit/compiled/
433
433
  # 4. Generates integration instructions for detected local model tools
434
434
  # 5. state.json records profile as "offline-slm"
435
435
  ```
@@ -532,7 +532,7 @@ ollama run my-coder "implement the payment API"
532
532
  ```
533
533
  1. ai-toolkit compile-slm --model-size 14b
534
534
  2. Open LM Studio → Chat → System Prompt
535
- 3. Paste contents of ~/.ai-toolkit/compiled/slm-system-prompt.md
535
+ 3. Paste contents of ~/.softspark/ai-toolkit/compiled/slm-system-prompt.md
536
536
  ```
537
537
 
538
538
  **Aider:**
@@ -603,7 +603,7 @@ Post-compilation checks:
603
603
 
604
604
  ## 6b. Cache Invalidation & Recompile Triggers
605
605
 
606
- Compiled output (`~/.ai-toolkit/compiled/slm-system-prompt.md`) is a **derived artifact** — it must be recompiled when inputs change:
606
+ Compiled output (`~/.softspark/ai-toolkit/compiled/slm-system-prompt.md`) is a **derived artifact** — it must be recompiled when inputs change:
607
607
 
608
608
  | Trigger | Action |
609
609
  |---------|--------|
@@ -622,7 +622,7 @@ The offline-slm feature is purely additive — removing it is trivial:
622
622
  1. Delete `scripts/compile_slm.py`, `scripts/slm_token_counter.py`, `scripts/slm_compression.py`, `scripts/slm_integration.py`
623
623
  2. Remove `"offline-slm"` and `"offline-slm-extended"` from `manifest.json` profiles
624
624
  3. Remove `compile-slm` from `SCRIPT_COMMANDS` in `bin/ai-toolkit.js`
625
- 4. Delete `~/.ai-toolkit/compiled/` directory (user-side)
625
+ 4. Delete `~/.softspark/ai-toolkit/compiled/` directory (user-side)
626
626
  5. No hooks, no state files, no config entries to clean up
627
627
 
628
628
  ---
@@ -727,13 +727,13 @@ For teams needing enforcement, recommend `--profile offline-slm` combined with a
727
727
 
728
728
  ## 13. Cross-Plan Dependencies
729
729
 
730
- This plan shares modification targets with two other proposed plans:
730
+ This plan shares modification targets with the Enterprise Config plan:
731
731
 
732
- | Shared File | This Plan | Enterprise Config Plan | Local Dashboard Plan |
733
- |-------------|-----------|----------------------|---------------------|
734
- | `scripts/install.py` | +30 LOC (offline-slm profile) | +80 LOC (extends resolution) | — |
735
- | `manifest.json` | +5 LOC (offline-slm profile) | +10 LOC (schema refs) | — |
736
- | `bin/ai-toolkit.js` | +10 LOC (compile-slm command) | +40 LOC (config subcommands) | +15 LOC (ui command) |
732
+ | Shared File | This Plan | Enterprise Config Plan |
733
+ |-------------|-----------|----------------------|
734
+ | `scripts/install.py` | +30 LOC (offline-slm profile) | +80 LOC (extends resolution) |
735
+ | `manifest.json` | +5 LOC (offline-slm profile) | +10 LOC (schema refs) |
736
+ | `bin/ai-toolkit.js` | +10 LOC (compile-slm command) | +40 LOC (config subcommands) |
737
737
 
738
738
  **If implementing in parallel:** this plan has the smallest changes to shared files — merge first to minimize conflicts.
739
739
 
@@ -39,7 +39,7 @@ Create `cloud-security-pack` plugin pack that provides deterministic, read-only
39
39
  - **Deterministic** — reproducible results, no LLM-driven regex (same pattern as `hipaa_scan.py`)
40
40
  - **False positive aware** — context graph resolves "public endpoint behind gateway/App Check/WAF"
41
41
  - **CI-ready** — `--output json` + `--output sarif` (SARIF v2.1.0 for GitHub Advanced Security), exit code 1 on HIGH, 0 otherwise
42
- - **Credential isolation** — keys stored in `~/.ai-toolkit/credentials/`, accessible only by this pack's scripts
42
+ - **Credential isolation** — keys stored in `~/.softspark/ai-toolkit/credentials/`, accessible only by this pack's scripts
43
43
  - **Static-first** — static mode (no credentials) is the default, live mode is opt-in upgrade
44
44
  - **Incremental** — `--changed` flag scans only files modified since last commit (PR workflow)
45
45
  - **IaC via `terraform show -json`** — wraps Terraform's own JSON output instead of parsing HCL directly
@@ -200,7 +200,7 @@ ai-toolkit credentials test aws
200
200
 
201
201
  **Storage structure:**
202
202
  ```
203
- ~/.ai-toolkit/
203
+ ~/.softspark/ai-toolkit/
204
204
  credentials/
205
205
  gcp.json # SA key file (copied, chmod 0600)
206
206
  gcp.meta.json # { project_id, added_at, method: "file"|"gcloud" }
@@ -225,7 +225,7 @@ ai-toolkit credentials test aws
225
225
  - Connection works (GCP: `gcloud auth list`, AWS: `aws sts get-caller-identity`, Azure: `az account show`)
226
226
  - SA/role has **only read permissions** — **REFUSE to store** if write access detected (orchestration-review: warn-only is ignored by users). Override: `--force` flag with explicit acknowledgment
227
227
  - Project/subscription exists
228
- - `.gitignore`-proof — lives in `~/.ai-toolkit/`, never in project directory
228
+ - `.gitignore`-proof — lives in `~/.softspark/ai-toolkit/`, never in project directory
229
229
  - Scripts access credentials via `gcp_auth.py` helper — single entry point, no direct file reads
230
230
 
231
231
  **Files to create/modify:**
@@ -43,7 +43,7 @@ ai-toolkit install --local --lang python,typescript
43
43
  ai-toolkit install --local --lang python --editors all # language rules propagated to all editors
44
44
  ```
45
45
 
46
- When `--editors` is combined with `--lang` (or auto-detected languages), language rules are propagated to all configured editors as `ai-toolkit-lang-<lang>` files — not just Claude's `CLAUDE.md`. Similarly, registered custom rules (`~/.ai-toolkit/rules/`) are propagated to directory-based editor configs as `ai-toolkit-custom-<name>` files.
46
+ When `--editors` is combined with `--lang` (or auto-detected languages), language rules are propagated to all configured editors as `ai-toolkit-lang-<lang>` files — not just Claude's `CLAUDE.md`. Similarly, registered custom rules (`~/.softspark/ai-toolkit/rules/`) are propagated to directory-based editor configs as `ai-toolkit-custom-<name>` files.
47
47
 
48
48
  **Note:** Hooks are global-only — merged into `~/.claude/settings.json` by `ai-toolkit install`. Project-local `--local` does not install hooks; any legacy `.claude/hooks.json` is removed automatically.
49
49
 
@@ -121,7 +121,7 @@ Third-party repos (jira-mcp, rag-mcp, etc.) can register their own rules globall
121
121
 
122
122
  ```bash
123
123
  ai-toolkit add-rule ./my-project-rules.md
124
- # → copies to ~/.ai-toolkit/rules/my-project-rules.md
124
+ # → copies to ~/.softspark/ai-toolkit/rules/my-project-rules.md
125
125
 
126
126
  ai-toolkit update
127
127
  # → injects the rule into ~/.claude/CLAUDE.md and all global editor configs
@@ -209,7 +209,7 @@ Install copies hooks/scripts, verifies agents+skills are linked, merges hooks in
209
209
 
210
210
  Memory-pack auto-prunes observations older than 90 days on every session end (configurable via `MEMORY_RETENTION_DAYS`).
211
211
 
212
- State tracked in `~/.ai-toolkit/plugins.json`.
212
+ State tracked in `~/.softspark/ai-toolkit/plugins.json`.
213
213
 
214
214
  ## Adding a KB Document
215
215
 
@@ -33,7 +33,7 @@ ai-toolkit/
33
33
  agents/ # Agent definitions (.md + YAML frontmatter)
34
34
  skills/ # skills: task, hybrid, knowledge
35
35
  rules/ # Rules auto-injected into ~/.claude/CLAUDE.md
36
- hooks/ # Hook scripts (copied to ~/.ai-toolkit/hooks/)
36
+ hooks/ # Hook scripts (copied to ~/.softspark/ai-toolkit/hooks/)
37
37
  hooks.json # Hook definitions (merged into ~/.claude/settings.json)
38
38
  constitution.md # Immutable safety rules, 5 articles (marker-injected)
39
39
  ARCHITECTURE.md # System architecture reference (marker-injected)
@@ -80,7 +80,7 @@ All components use merge-friendly strategies — user content is never overwritt
80
80
  ```
81
81
  Machine (global) Project (local)
82
82
  ────────────────────────────────────────── ──────────────────────────────────────
83
- ~/.claude/ ~/.ai-toolkit/
83
+ ~/.claude/ ~/.softspark/ai-toolkit/
84
84
  agents/*.md → per-file symlinks rules/ ← registered rules
85
85
  skills/*/ → per-dir symlinks hooks/ ← hook scripts (copied)
86
86
  settings.json ← hooks merged here
@@ -120,8 +120,8 @@ Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.windsurf/rules
120
120
  | `update` | `~/.claude/` | Re-apply after npm update or after add-rule/remove-rule |
121
121
  | `update --local` | `./` | Re-apply + refresh project-local configs |
122
122
  | `uninstall` | `~/.claude/` | Strips toolkit components (preserves user content) |
123
- | `add-rule <file>` | `~/.ai-toolkit/rules/` | Register rule — auto-applied on every `update` |
124
- | `remove-rule <name>` | `~/.ai-toolkit/rules/` + `~/.claude/CLAUDE.md` | Unregister rule and remove its block |
123
+ | `add-rule <file>` | `~/.softspark/ai-toolkit/rules/` | Register rule — auto-applied on every `update` |
124
+ | `remove-rule <name>` | `~/.softspark/ai-toolkit/rules/` + `~/.claude/CLAUDE.md` | Unregister rule and remove its block |
125
125
  | `validate` | toolkit | Integrity check |
126
126
  | `doctor` | toolkit | Install health, hooks, benchmark freshness, and artifact drift diagnostics |
127
127
  | `benchmark-ecosystem` | toolkit | Benchmark snapshot for official Claude Code and external ecosystem repos |
@@ -251,7 +251,7 @@ Agents (code-reviewer, debugger, devops-implementer, ...)
251
251
  | PreCompact | Before compaction | `pre-compact-save.sh` | Timestamped context snapshot to audit trail |
252
252
  | SessionEnd | Session end | `session-end.sh` | Persist handoff note for the next session |
253
253
 
254
- Scripts at `~/.ai-toolkit/hooks/`. See [hooks-catalog.md](hooks-catalog.md) for details.
254
+ Scripts at `~/.softspark/ai-toolkit/hooks/`. See [hooks-catalog.md](hooks-catalog.md) for details.
255
255
 
256
256
  ## Constitution (5 Articles)
257
257
 
@@ -57,6 +57,6 @@ affaan-m/everything-claude-code 152 397 2
57
57
 
58
58
  ## Data Sources
59
59
 
60
- - User config: `~/.claude/agents/`, `~/.claude/skills/`, `~/.ai-toolkit/hooks/`
60
+ - User config: `~/.claude/agents/`, `~/.claude/skills/`, `~/.softspark/ai-toolkit/hooks/`
61
61
  - Toolkit: `app/agents/`, `app/skills/`, `app/hooks/`
62
62
  - Ecosystem: `benchmarks/ecosystem-dashboard.json`
@@ -347,7 +347,7 @@ All entries are tagged with "_source": "<source-name>" for idempotent updates.
347
347
  | `remove-rule <name>` | `~/.claude/CLAUDE.md` | Strip markers | Yes |
348
348
  | `inject-hook <file.json>` | `~/.claude/settings.json` | JSON `_source` tag | Yes |
349
349
  | `remove-hook <name>` | `~/.claude/settings.json` | Strip by `_source` | Yes |
350
- | `add-rule <file.md>` | `~/.ai-toolkit/rules/` | File copy + re-inject all | Yes |
350
+ | `add-rule <file.md>` | `~/.softspark/ai-toolkit/rules/` | File copy + re-inject all | Yes |
351
351
 
352
352
  **Success Criteria:**
353
353
  - [x] `inject-hook ./my-hooks.json` merges hooks with auto-derived `_source` tag
@@ -426,7 +426,7 @@ All entries are tagged with "_source": "<source-name>" for idempotent updates.
426
426
  }
427
427
  ```
428
428
 
429
- **State tracking (~/.ai-toolkit/state.json):**
429
+ **State tracking (~/.softspark/ai-toolkit/state.json):**
430
430
  ```json
431
431
  {
432
432
  "installed_version": "1.2.1",
@@ -18,7 +18,7 @@ description: "Comprehensive guide for setting up and using ai-toolkit configurat
18
18
 
19
19
  ## Overview
20
20
 
21
- Configuration inheritance enables organizations to define a shared base config published as an npm package, Git URL, or local path. Individual projects extend this base via an `extends` field in `.ai-toolkit.json`. Changes to the base propagate automatically on `ai-toolkit update --local`.
21
+ Configuration inheritance enables organizations to define a shared base config published as an npm package, Git URL, or local path. Individual projects extend this base via an `extends` field in `.softspark-toolkit.json`. Changes to the base propagate automatically on `ai-toolkit update --local`.
22
22
 
23
23
  **Pattern:** Mirrors ESLint's `extends`, TypeScript's `extends`, and Prettier's shared configs.
24
24
 
@@ -47,7 +47,7 @@ ai-toolkit config init --extends @mycompany/ai-toolkit-config
47
47
  ai-toolkit install --local
48
48
  ```
49
49
 
50
- Or manually create `.ai-toolkit.json`:
50
+ Or manually create `.softspark-toolkit.json`:
51
51
 
52
52
  ```json
53
53
  {
@@ -71,7 +71,7 @@ ai-toolkit config check # CI enforcement check
71
71
 
72
72
  ## Configuration Reference
73
73
 
74
- ### Project config (`.ai-toolkit.json`)
74
+ ### Project config (`.softspark-toolkit.json`)
75
75
 
76
76
  | Field | Type | Description |
77
77
  |-------|------|-------------|
@@ -195,7 +195,7 @@ Requirements:
195
195
 
196
196
  ### `ai-toolkit config validate [path]`
197
197
 
198
- Validates `.ai-toolkit.json` schema, resolves extends, checks enforcement.
198
+ Validates `.softspark-toolkit.json` schema, resolves extends, checks enforcement.
199
199
 
200
200
  ```bash
201
201
  ai-toolkit config validate
@@ -220,7 +220,7 @@ ai-toolkit config diff
220
220
 
221
221
  ### `ai-toolkit config init [flags]`
222
222
 
223
- Create `.ai-toolkit.json` interactively or with flags.
223
+ Create `.softspark-toolkit.json` interactively or with flags.
224
224
 
225
225
  ```bash
226
226
  ai-toolkit config init # interactive
@@ -261,12 +261,12 @@ GitHub Actions example:
261
261
 
262
262
  ## Lock File
263
263
 
264
- `.ai-toolkit.lock.json` pins exact resolved versions for reproducible installs.
264
+ `.softspark-toolkit.lock.json` pins exact resolved versions for reproducible installs.
265
265
 
266
266
  - `install --local` → creates/updates lock file
267
267
  - `update --local` → re-resolves and updates lock file
268
268
  - `update --local --refresh-base` → force re-fetch ignoring cache
269
- - Commit `.ai-toolkit.lock.json` to git for team synchronization
269
+ - Commit `.softspark-toolkit.lock.json` to git for team synchronization
270
270
 
271
271
  ```json
272
272
  {
@@ -275,7 +275,7 @@ GitHub Actions example:
275
275
  "@mycompany/ai-toolkit-config": {
276
276
  "version": "2.1.0",
277
277
  "integrity": "sha256:abc123...",
278
- "cached": "~/.ai-toolkit/config-cache/@mycompany/ai-toolkit-config/2.1.0/"
278
+ "cached": "~/.softspark/ai-toolkit/config-cache/@mycompany/ai-toolkit-config/2.1.0/"
279
279
  }
280
280
  }
281
281
  }
@@ -287,7 +287,7 @@ GitHub Actions example:
287
287
 
288
288
  When npm/git is unavailable:
289
289
 
290
- 1. Checks cache (`~/.ai-toolkit/config-cache/`)
290
+ 1. Checks cache (`~/.softspark/ai-toolkit/config-cache/`)
291
291
  2. If cached version found → uses with warning
292
292
  3. If not cached → error with instructions
293
293
 
@@ -25,7 +25,7 @@ This design is intentional: ai-toolkit is a generic toolkit. Consumers (MCP serv
25
25
  | `remove-rule <name>` | `~/.claude/CLAUDE.md` | Strip markers by block name | Yes |
26
26
  | `inject-hook <file.json>` | `~/.claude/settings.json` | JSON `_source` tag per entry | Yes |
27
27
  | `remove-hook <name>` | `~/.claude/settings.json` | Strip all entries with matching `_source` | Yes |
28
- | `add-rule <file.md>` | `~/.ai-toolkit/rules/` | File copy + re-inject all rules on next `update` | Yes |
28
+ | `add-rule <file.md>` | `~/.softspark/ai-toolkit/rules/` | File copy + re-inject all rules on next `update` | Yes |
29
29
  | `mcp add <name...>` | `.mcp.json` | Merge `mcpServers` block from template | Yes |
30
30
 
31
31
  ## inject-rule
@@ -27,8 +27,8 @@ That means one machine-level install provides agents, skills, hooks, and rules t
27
27
  | `ai-toolkit install --local --lang <lang>` | current project | explicit language selection for rules (e.g. `--lang typescript`, `--lang go,python`); auto-detected when omitted |
28
28
  | `ai-toolkit install --modules <list>` | `~/.claude/` | selective module install (e.g. `--modules core,agents,rules-typescript`) |
29
29
  | `ai-toolkit update --local` | current project | refresh project configs; auto-detects editors from existing files |
30
- | `ai-toolkit add-rule` | `~/.ai-toolkit/rules/` | register a global rule |
31
- | `ai-toolkit remove-rule` | `~/.ai-toolkit/rules/` | unregister a global rule |
30
+ | `ai-toolkit add-rule` | `~/.softspark/ai-toolkit/rules/` | register a global rule |
31
+ | `ai-toolkit remove-rule` | `~/.softspark/ai-toolkit/rules/` | unregister a global rule |
32
32
 
33
33
  ## Why global install is the default
34
34