@softspark/ai-toolkit 1.6.0 → 1.7.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.
- package/CHANGELOG.md +28 -0
- package/README.md +20 -7
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/ARCHITECTURE.md +3 -0
- package/bin/ai-toolkit.js +3 -1
- package/kb/{planning/offline-slm-profile-plan.md → history/completed/offline-slm-profile-plan-20260411.md} +7 -5
- package/kb/reference/architecture-overview.md +3 -2
- package/kb/reference/skills-catalog.md +15 -0
- package/llms-full.txt +2792 -2774
- package/llms.txt +1 -1
- package/manifest.json +5 -4
- package/package.json +1 -1
- package/scripts/add_rule.py +5 -4
- package/scripts/compile_slm.py +1043 -0
- package/scripts/generate_aider_conf.py +2 -1
- package/scripts/generate_augment_rules.py +4 -4
- package/scripts/generate_cline_rules.py +11 -6
- package/scripts/install_steps/ai_tools.py +6 -7
|
@@ -18,8 +18,9 @@ def main() -> None:
|
|
|
18
18
|
print("# Use the architect mode for complex tasks, aligned with our 2-phase workflow")
|
|
19
19
|
print("architect: true")
|
|
20
20
|
print()
|
|
21
|
-
print("# Read
|
|
21
|
+
print("# Read project rules (loaded as read-only context)")
|
|
22
22
|
print("read:")
|
|
23
|
+
print(' - "CONVENTIONS.md"')
|
|
23
24
|
print(' - ".claude/CLAUDE.md"')
|
|
24
25
|
print(' - ".claude/constitution.md"')
|
|
25
26
|
print(' - "AGENTS.md"')
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
Augment supports per-file rules with frontmatter:
|
|
5
5
|
- type: always_apply — always in context
|
|
6
|
-
- type:
|
|
6
|
+
- type: agent_requested + globs — attached for matching files
|
|
7
7
|
|
|
8
8
|
The existing generate_augment.py creates a single always_apply file.
|
|
9
9
|
This generator adds granular per-category rules with appropriate types.
|
|
@@ -72,7 +72,7 @@ def _make_rules() -> dict[str, callable]:
|
|
|
72
72
|
f"{PREFIX}code-style.md": lambda: _augment_wrap(
|
|
73
73
|
rule_code_style(),
|
|
74
74
|
description="Code style conventions",
|
|
75
|
-
rule_type="
|
|
75
|
+
rule_type="agent_requested",
|
|
76
76
|
globs=["*.py", "*.ts", "*.tsx", "*.js", "*.jsx", "*.go", "*.rs",
|
|
77
77
|
"*.java", "*.kt", "*.swift", "*.dart", "*.cs", "*.php",
|
|
78
78
|
"*.cpp", "*.cc", "*.rb"],
|
|
@@ -80,7 +80,7 @@ def _make_rules() -> dict[str, callable]:
|
|
|
80
80
|
f"{PREFIX}testing.md": lambda: _augment_wrap(
|
|
81
81
|
rule_testing(),
|
|
82
82
|
description="Testing standards and patterns",
|
|
83
|
-
rule_type="
|
|
83
|
+
rule_type="agent_requested",
|
|
84
84
|
globs=["*.test.*", "*.spec.*", "test_*", "**/tests/**",
|
|
85
85
|
"**/test/**", "**/__tests__/**"],
|
|
86
86
|
),
|
|
@@ -107,7 +107,7 @@ def generate(target_dir: Path, *,
|
|
|
107
107
|
all_rules[filename] = (lambda fn, l, g: lambda: _augment_wrap(
|
|
108
108
|
fn(),
|
|
109
109
|
description=f"{l.title()} language rules",
|
|
110
|
-
rule_type="
|
|
110
|
+
rule_type="agent_requested",
|
|
111
111
|
globs=g,
|
|
112
112
|
))(content_fn, lang, globs)
|
|
113
113
|
else:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""Generate .
|
|
2
|
+
"""Generate .clinerules/*.md files for Cline.
|
|
3
3
|
|
|
4
|
-
Cline reads
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
Cline reads rules from the .clinerules/ directory (since Cline 3.7).
|
|
5
|
+
Each .md file inside .clinerules/ is automatically loaded.
|
|
6
|
+
The legacy .clinerules single-file format is replaced by this directory.
|
|
7
7
|
|
|
8
8
|
Usage:
|
|
9
9
|
python3 scripts/generate_cline_rules.py [target-dir]
|
|
@@ -25,11 +25,16 @@ from dir_rules_shared import (
|
|
|
25
25
|
def generate(target_dir: Path, *,
|
|
26
26
|
language_modules: list[str] | None = None,
|
|
27
27
|
rules_dir: Path | None = None) -> None:
|
|
28
|
-
"""Write .
|
|
28
|
+
"""Write .clinerules/*.md files to target_dir."""
|
|
29
|
+
# Migrate: if .clinerules exists as a single file, remove it
|
|
30
|
+
# so the directory can be created (Cline 3.7+ uses directory format)
|
|
31
|
+
clinerules = target_dir / ".clinerules"
|
|
32
|
+
if clinerules.is_file():
|
|
33
|
+
clinerules.unlink()
|
|
29
34
|
rules = dict(STANDARD_RULES)
|
|
30
35
|
rules.update(build_language_rules(language_modules))
|
|
31
36
|
rules.update(build_registered_rules(rules_dir))
|
|
32
|
-
write_rules(target_dir, rules, ".
|
|
37
|
+
write_rules(target_dir, rules, ".clinerules")
|
|
33
38
|
|
|
34
39
|
|
|
35
40
|
def main() -> None:
|
|
@@ -136,7 +136,6 @@ _EDITOR_MARKERS: dict[str, str] = {
|
|
|
136
136
|
".windsurfrules": "windsurf",
|
|
137
137
|
".windsurf/rules": "windsurf",
|
|
138
138
|
".clinerules": "cline",
|
|
139
|
-
".cline/rules": "cline",
|
|
140
139
|
".roomodes": "roo",
|
|
141
140
|
".roo/rules": "roo",
|
|
142
141
|
".aider.conf.yml": "aider",
|
|
@@ -309,7 +308,7 @@ def _install_local_dry_run(reset: bool, editors: list[str] | None = None) -> Non
|
|
|
309
308
|
"copilot": " Would inject: .github/copilot-instructions.md",
|
|
310
309
|
"cursor": " Would generate: .cursorrules + .cursor/rules/*.mdc",
|
|
311
310
|
"windsurf": " Would generate: .windsurfrules + .windsurf/rules/*.md",
|
|
312
|
-
"cline": " Would generate: .clinerules
|
|
311
|
+
"cline": " Would generate: .clinerules/*.md",
|
|
313
312
|
"roo": " Would generate: .roomodes + .roo/rules/*.md",
|
|
314
313
|
"aider": " Would generate: .aider.conf.yml + CONVENTIONS.md",
|
|
315
314
|
"augment": " Would generate: .augment/rules/ai-toolkit-*.md",
|
|
@@ -429,11 +428,11 @@ def _create_local_ai_tool_configs(cwd: Path, rules_dir: Path,
|
|
|
429
428
|
rules_dir=rules_dir)
|
|
430
429
|
|
|
431
430
|
if "cline" in eds:
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
431
|
+
# Migrate: remove legacy .clinerules single file (replaced by directory)
|
|
432
|
+
legacy_clinerules = cwd / ".clinerules"
|
|
433
|
+
if legacy_clinerules.is_file():
|
|
434
|
+
legacy_clinerules.unlink()
|
|
435
|
+
print(" Migrated: .clinerules file → .clinerules/ directory")
|
|
437
436
|
from generate_cline_rules import generate as gen_cline_rules
|
|
438
437
|
gen_cline_rules(cwd, language_modules=language_modules,
|
|
439
438
|
rules_dir=rules_dir)
|