ai-forge-cli 3.0.0__tar.gz → 3.0.1__tar.gz

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 (43) hide show
  1. {ai_forge_cli-3.0.0/src/ai_forge_cli.egg-info → ai_forge_cli-3.0.1}/PKG-INFO +1 -1
  2. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/pyproject.toml +1 -1
  3. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1/src/ai_forge_cli.egg-info}/PKG-INFO +1 -1
  4. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/init.py +7 -26
  5. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/tests/test_context.py +10 -8
  6. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/tests/test_crawler.py +2 -2
  7. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/MANIFEST.in +0 -0
  8. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/README.md +0 -0
  9. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/setup.cfg +0 -0
  10. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/setup.py +0 -0
  11. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/ai_forge_cli.egg-info/SOURCES.txt +0 -0
  12. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/ai_forge_cli.egg-info/dependency_links.txt +0 -0
  13. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/ai_forge_cli.egg-info/entry_points.txt +0 -0
  14. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/ai_forge_cli.egg-info/requires.txt +0 -0
  15. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/ai_forge_cli.egg-info/top_level.txt +0 -0
  16. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/__init__.py +0 -0
  17. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/__main__.py +0 -0
  18. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/assets/audit_template.html +0 -0
  19. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/assets/forge_full_logo.drawio.svg +0 -0
  20. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/assets/forge_white_small.drawio.svg +0 -0
  21. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/__init__.py +0 -0
  22. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/audit.py +0 -0
  23. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/base.py +0 -0
  24. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/context.py +0 -0
  25. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/commands/crawl.py +0 -0
  26. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/common.py +0 -0
  27. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/crawler.py +0 -0
  28. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/forge.py +0 -0
  29. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/FRAMEWORK_V4.md +0 -0
  30. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/SCHEMA_REFERENCE_V4.md +0 -0
  31. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-build/SKILL.md +0 -0
  32. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-build/agents/openai.yaml +0 -0
  33. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-business/SKILL.md +0 -0
  34. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-business/agents/openai.yaml +0 -0
  35. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-hydrate/SKILL.md +0 -0
  36. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-hydrate/agents/openai.yaml +0 -0
  37. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-review/SKILL.md +0 -0
  38. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-review/agents/openai.yaml +0 -0
  39. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-schema/SKILL.md +0 -0
  40. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-schema/agents/openai.yaml +0 -0
  41. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-security/SKILL.md +0 -0
  42. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/resources/skills/forge-security/agents/openai.yaml +0 -0
  43. {ai_forge_cli-3.0.0 → ai_forge_cli-3.0.1}/src/cli/yaml_io.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-forge-cli
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Forge V4 architecture context CLI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ai-forge-cli"
7
- version = "3.0.0"
7
+ version = "3.0.1"
8
8
  description = "Forge V4 architecture context CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-forge-cli
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Forge V4 architecture context CLI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -25,6 +25,7 @@ SKILL_SURFACES = [
25
25
  ".claude/skills",
26
26
  ".codex/skills",
27
27
  ".agents/skills",
28
+ ".copilot/skills",
28
29
  ]
29
30
 
30
31
  DOC_FILES = [
@@ -227,10 +228,13 @@ def _rewrite_skill_references(forge_root: Path) -> None:
227
228
  for skill_name in SKILL_DIRS:
228
229
  skill_path = forge_root / "skills" / skill_name / "SKILL.md"
229
230
  text = skill_path.read_text(encoding="utf-8")
230
- if "Read before starting:" in text and "../../USING_FORGE.md" not in text:
231
+ text = text.replace("../../SCHEMA_REFERENCE_V4.md", "forge/SCHEMA_REFERENCE_V4.md")
232
+ text = text.replace("../../FRAMEWORK_V4.md", "forge/FRAMEWORK_V4.md")
233
+ text = text.replace("../../USING_FORGE.md", "forge/USING_FORGE.md")
234
+ if "Read before starting:" in text and "forge/USING_FORGE.md" not in text:
231
235
  text = text.replace(
232
236
  "Read before starting:\n",
233
- "Read before starting:\n\n- `../../USING_FORGE.md`\n",
237
+ "Read before starting:\n\n- `forge/USING_FORGE.md`\n",
234
238
  1,
235
239
  )
236
240
  skill_path.write_text(text, encoding="utf-8")
@@ -253,30 +257,7 @@ def _create_surface_skill(surface_root: Path, forge_root: Path, skill_name: str)
253
257
  target_skill.unlink()
254
258
  else:
255
259
  shutil.rmtree(target_skill)
256
- target_skill.mkdir(parents=True, exist_ok=True)
257
-
258
- for child in source_skill.iterdir():
259
- if child.name == "SKILL.md":
260
- continue
261
- target_child = target_skill / child.name
262
- if target_child.exists() or target_child.is_symlink():
263
- if target_child.is_symlink() or target_child.is_file():
264
- target_child.unlink()
265
- else:
266
- shutil.rmtree(target_child)
267
- target_child.symlink_to(_relative_symlink_target(target_skill, child), target_is_directory=child.is_dir())
268
-
269
- surfaced_skill = _surface_skill_text(source_skill / "SKILL.md")
270
- (target_skill / "SKILL.md").write_text(surfaced_skill, encoding="utf-8")
271
-
272
-
273
- def _surface_skill_text(skill_path: Path) -> str:
274
- text = skill_path.read_text(encoding="utf-8")
275
- return (
276
- text.replace("../../SCHEMA_REFERENCE_V4.md", "../../../forge/SCHEMA_REFERENCE_V4.md")
277
- .replace("../../FRAMEWORK_V4.md", "../../../forge/FRAMEWORK_V4.md")
278
- .replace("../../USING_FORGE.md", "../../../forge/USING_FORGE.md")
279
- )
260
+ target_skill.symlink_to(_relative_symlink_target(surface_root, source_skill), target_is_directory=True)
280
261
 
281
262
 
282
263
  def _relative_symlink_target(link_parent: Path, destination: Path) -> Path:
@@ -117,20 +117,22 @@ def test_init_scaffolds_traversable_repo(tmp_path: Path, capsys) -> None:
117
117
  assert "*.egg-info/" in (root / ".gitignore").read_text(encoding="utf-8")
118
118
  codex_skill = root / ".codex" / "skills" / "forge-build"
119
119
  assert codex_skill.is_dir()
120
- assert not codex_skill.is_symlink()
120
+ assert codex_skill.is_symlink()
121
+ assert codex_skill.resolve() == forge_root / "skills" / "forge-build"
121
122
  assert (codex_skill / "SKILL.md").exists()
122
123
  assert (codex_skill / "agents" / "openai.yaml").exists()
123
124
  assert not (codex_skill / "coding_agent_skills_reference").exists()
124
125
  surfaced_skill = (codex_skill / "SKILL.md").read_text(encoding="utf-8")
125
- assert "../../../forge/USING_FORGE.md" in surfaced_skill
126
+ assert "forge/USING_FORGE.md" in surfaced_skill
126
127
  assert "../forge-schema/SKILL.md" in surfaced_skill
127
- assert (root / ".claude" / "skills" / "forge-business" / "SKILL.md").exists()
128
- assert (root / ".claude" / "skills" / "forge-schema" / "SKILL.md").exists()
129
- assert (root / ".claude" / "skills" / "forge-hydrate" / "SKILL.md").exists()
130
- assert (root / ".agents" / "skills" / "forge-review" / "SKILL.md").exists()
128
+ assert (root / ".claude" / "skills" / "forge-business").is_symlink()
129
+ assert (root / ".claude" / "skills" / "forge-schema").is_symlink()
130
+ assert (root / ".claude" / "skills" / "forge-hydrate").is_symlink()
131
+ assert (root / ".agents" / "skills" / "forge-review").is_symlink()
132
+ assert (root / ".copilot" / "skills" / "forge-security").is_symlink()
131
133
  rewritten_skill = (forge_root / "skills" / "forge-schema" / "SKILL.md").read_text(encoding="utf-8")
132
- assert "../../SCHEMA_REFERENCE_V4.md" in rewritten_skill
133
- assert "../../USING_FORGE.md" in rewritten_skill
134
+ assert "forge/SCHEMA_REFERENCE_V4.md" in rewritten_skill
135
+ assert "forge/USING_FORGE.md" in rewritten_skill
134
136
  usage_doc = (forge_root / "USING_FORGE.md").read_text(encoding="utf-8")
135
137
  assert "Forge is **skills-first**." in usage_doc
136
138
  assert "Use Forge In This Order" in usage_doc
@@ -436,8 +436,8 @@ def test_init_scaffolds_v4_project(tmp_path: Path, capsys) -> None:
436
436
  assert (forge_root / "skills" / "forge-schema" / "SKILL.md").exists()
437
437
  assert (forge_root / "skills" / "forge-hydrate" / "SKILL.md").exists()
438
438
  skill_text = (forge_root / "skills" / "forge-schema" / "SKILL.md").read_text(encoding="utf-8")
439
- assert "../../FRAMEWORK_V4.md" in skill_text
440
- assert "../../SCHEMA_REFERENCE_V4.md" in skill_text
439
+ assert "forge/FRAMEWORK_V4.md" in skill_text
440
+ assert "forge/SCHEMA_REFERENCE_V4.md" in skill_text
441
441
  capsys.readouterr()
442
442
  assert main(["crawl", "--project-dir", str(root)]) == 0
443
443
  payload = json.loads(capsys.readouterr().out)
File without changes
File without changes
File without changes
File without changes