@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.
@@ -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 global rules ")
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: auto_attached + globs — attached for matching files
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="auto_attached",
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="auto_attached",
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="auto_attached",
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 .cline/rules/*.md files for Cline.
2
+ """Generate .clinerules/*.md files for Cline.
3
3
 
4
- Cline reads directory-based rules from .cline/rules/*.md (since Q1 2025).
5
- The legacy .clinerules single-file format is still generated separately
6
- by generate_cline.py for backwards compatibility.
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 .cline/rules/*.md files to target_dir."""
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, ".cline/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 + .cline/rules/*.md",
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
- inject_with_rules(
433
- "generate-cline.sh",
434
- cwd / ".clinerules",
435
- rules_dir,
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)