ai-forge-cli 0.1.2__tar.gz → 0.1.4__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 (32) hide show
  1. {ai_forge_cli-0.1.2/src/ai_forge_cli.egg-info → ai_forge_cli-0.1.4}/PKG-INFO +1 -1
  2. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/README.md +9 -5
  3. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/pyproject.toml +1 -1
  4. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4/src/ai_forge_cli.egg-info}/PKG-INFO +1 -1
  5. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/__init__.py +1 -1
  6. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/init.py +4 -1
  7. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/forge.py +1 -1
  8. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_cli.py +17 -0
  9. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_init.py +15 -0
  10. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/LICENSE +0 -0
  11. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/setup.cfg +0 -0
  12. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/ai_forge_cli.egg-info/SOURCES.txt +0 -0
  13. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/ai_forge_cli.egg-info/dependency_links.txt +0 -0
  14. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/ai_forge_cli.egg-info/entry_points.txt +0 -0
  15. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/ai_forge_cli.egg-info/requires.txt +0 -0
  16. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/ai_forge_cli.egg-info/top_level.txt +0 -0
  17. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/__main__.py +0 -0
  18. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/bundle.py +0 -0
  19. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/__init__.py +0 -0
  20. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/base.py +0 -0
  21. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/context.py +0 -0
  22. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/find.py +0 -0
  23. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/inspect.py +0 -0
  24. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/list_cmd.py +0 -0
  25. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/commands/update.py +0 -0
  26. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/common.py +0 -0
  27. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/index.py +0 -0
  28. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/src/cli/walker.py +0 -0
  29. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_find.py +0 -0
  30. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_index.py +0 -0
  31. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_update.py +0 -0
  32. {ai_forge_cli-0.1.2 → ai_forge_cli-0.1.4}/tests/test_walker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-forge-cli
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Context walker for the Forge L0-L5 spec system
5
5
  Requires-Python: >=3.11
6
6
  License-File: LICENSE
@@ -21,7 +21,7 @@ The agent drives the interview. The specs drive the code.
21
21
 
22
22
  ## What it is
23
23
 
24
- A six-layer YAML spec system, a Python CLI for context assembly, and **ten agent skills** that take a human from a vague product idea to working, audited, hardened, validated code — with the agent asking questions and the human answering, not the reverse.
24
+ A six-layer YAML spec system, a Python CLI for context assembly, and **eleven agent skills** that take a human from a vague product idea to working, audited, hardened, validated code — with the agent asking questions and the human answering, not the reverse.
25
25
 
26
26
  Built on the premise that **people explain systems well under questioning but poorly when cold-prompted**. forge inverts the default "human prompts agent → agent implements" loop into "agent interviews human → structured spec emerges → agent implements from spec".
27
27
 
@@ -42,6 +42,8 @@ Runs in **Claude Code**, **OpenAI Codex CLI**, and any **agentskills.io-compatib
42
42
 
43
43
  forge-compose → L4 composition (flows + journeys from completed atoms)
44
44
 
45
+ forge-cast → repo hydration (existing codebase → draft Forge corpus + uncertainty report)
46
+
45
47
  forge-audit → quality gate (seven audit passes, severity-ranked findings)
46
48
 
47
49
  forge-armour → security hardening (trust model, policies, abuse-case review)
@@ -68,7 +70,7 @@ uv venv --python 3.13 .venv && uv pip install -e . pytest
68
70
  ./scripts/install-skills.sh install
69
71
  ```
70
72
 
71
- This wires the `forge` binary into `~/.local/bin/` and symlinks the ten skills into `~/.claude/skills/`, `~/.codex/skills/`, and `~/.agents/skills/` — discoverable by every supported client.
73
+ This wires the `forge` binary into `~/.local/bin/` and symlinks the eleven skills into `~/.claude/skills/`, `~/.codex/skills/`, and `~/.agents/skills/` — discoverable by every supported client.
72
74
 
73
75
  ### Verify
74
76
 
@@ -110,7 +112,7 @@ forge init
110
112
  ✓ .forge/
111
113
  ✓ 6 spec subdirectories
112
114
  ✓ 12 schema templates → .forge/templates/
113
- 30/30 skill symlinks → .claude/skills/, .codex/skills/, .agents/skills/
115
+ 33/33 skill symlinks → .claude/skills/, .codex/skills/, .agents/skills/
114
116
 
115
117
  ───── Next steps ─────
116
118
 
@@ -149,7 +151,7 @@ Full CLI guide: [`docs/cli-guide.md`](docs/cli-guide.md).
149
151
 
150
152
  ---
151
153
 
152
- ## The ten skills
154
+ ## The eleven skills
153
155
 
154
156
  | Skill | Role | Input | Output |
155
157
  |---|---|---|---|
@@ -157,6 +159,7 @@ Full CLI guide: [`docs/cli-guide.md`](docs/cli-guide.md).
157
159
  | **forge-decompose** | Structural extractor | One bounded module | Exhaustive atom stubs (four-pass extraction) |
158
160
  | **forge-atom** | Contract specifier | One atom stub | Complete L3 spec + L0 cascades + module completions |
159
161
  | **forge-compose** | Composition specifier | Completed atoms + project decisions | L4 flow/journey specs with explicit boundary/retry/compensation/idempotency decisions |
162
+ | **forge-cast** | Hydration specifier | Existing non-Forge codebase | Draft Forge corpus plus evidence-backed uncertainty report and clarification questions |
160
163
  | **forge-audit** | Challenger / reviewer | Completed specs | Severity-ranked findings with inline edits; seven audit passes |
161
164
  | **forge-armour** | Security challenger | Audited specs | Security hardening pass, trust-model capture, approved project/module/atom security edits |
162
165
  | **forge-implement** | Orchestrator | Audited spec corpus | Code + tests, dep-graph parallel, test-before-impl isolation |
@@ -196,11 +199,12 @@ forge/
196
199
  │ ├── cli/ Python CLI package (the forge command)
197
200
  │ ├── templates/ L0-L5 schema templates (symlinked into projects by forge init)
198
201
  │ └── example/ Working example spec corpus (used by tests)
199
- ├── .agents/skills/ The 10 forge skills (installed into agent clients)
202
+ ├── .agents/skills/ The 11 forge skills (installed into agent clients)
200
203
  │ ├── forge-discover/
201
204
  │ ├── forge-decompose/
202
205
  │ ├── forge-atom/
203
206
  │ ├── forge-compose/
207
+ │ ├── forge-cast/
204
208
  │ ├── forge-audit/
205
209
  │ ├── forge-armour/
206
210
  │ ├── forge-implement/
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ai-forge-cli"
7
- version = "0.1.2"
7
+ version = "0.1.4"
8
8
  description = "Context walker for the Forge L0-L5 spec system"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = ["pyyaml>=6.0"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-forge-cli
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Context walker for the Forge L0-L5 spec system
5
5
  Requires-Python: >=3.11
6
6
  License-File: LICENSE
@@ -1,2 +1,2 @@
1
1
  """Forge CLI — context walker for the L0-L5 spec system."""
2
- __version__ = "0.1.0"
2
+ __version__ = "0.1.4"
@@ -125,6 +125,7 @@ SKILL_NAMES = (
125
125
  "forge-decompose",
126
126
  "forge-atom",
127
127
  "forge-compose",
128
+ "forge-cast",
128
129
  "forge-audit",
129
130
  "forge-armour",
130
131
  "forge-implement",
@@ -158,7 +159,7 @@ _FORGE_GITHUB_ARCHIVE = "https://codeload.github.com/GreyFlames07/forge/tar.gz/r
158
159
 
159
160
  def _installed_cli_version() -> str | None:
160
161
  """Return the installed distribution version for this CLI."""
161
- for dist_name in ("forge-ai-cli", "forge-cli"):
162
+ for dist_name in ("ai-forge-cli", "forge-ai-cli", "forge-cli"):
162
163
  try:
163
164
  return metadata.version(dist_name)
164
165
  except metadata.PackageNotFoundError:
@@ -341,6 +342,7 @@ def run(args: argparse.Namespace) -> int:
341
342
  print(f" {_bold('\"I want to build a tool that does X\"')}")
342
343
  print(f" {_bold('\"Decompose the PAY module into atoms\"')}")
343
344
  print(f" {_bold('\"Compose flows and journeys from completed atoms\"')}")
345
+ print(f" {_bold('\"Cast this existing repo into Forge docs\"')}")
344
346
  print(f" {_bold('\"Audit the specs before implementation\"')}")
345
347
  print(f" {_bold('\"Harden the specs for security before implementation\"')}")
346
348
  print(f" {_bold('\"Validate the implementation against specs\"')}")
@@ -350,6 +352,7 @@ def run(args: argparse.Namespace) -> int:
350
352
  + _color(_FIRE_PRIMARY, "/forge-decompose") + " "
351
353
  + _color(_FIRE_PRIMARY, "/forge-atom") + " "
352
354
  + _color(_FIRE_PRIMARY, "/forge-compose") + " "
355
+ + _color(_FIRE_PRIMARY, "/forge-cast") + " "
353
356
  + _color(_FIRE_PRIMARY, "/forge-audit") + " "
354
357
  + _color(_FIRE_PRIMARY, "/forge-armour") + " "
355
358
  + _color(_FIRE_PRIMARY, "/forge-implement") + " "
@@ -17,7 +17,7 @@ from cli.commands import ALL_COMMANDS
17
17
 
18
18
  def _version_string() -> str:
19
19
  """Return the installed forge-cli package version."""
20
- for dist_name in ("forge-ai-cli", "forge-cli"):
20
+ for dist_name in ("ai-forge-cli", "forge-ai-cli", "forge-cli"):
21
21
  try:
22
22
  return metadata.version(dist_name)
23
23
  except metadata.PackageNotFoundError:
@@ -3,10 +3,12 @@
3
3
  import io
4
4
  import sys
5
5
  from contextlib import redirect_stderr, redirect_stdout
6
+ from importlib import metadata
6
7
  from pathlib import Path
7
8
 
8
9
  import pytest
9
10
 
11
+ from cli import forge as forge_mod
10
12
  from cli.forge import main
11
13
 
12
14
  EXAMPLE = str(Path(__file__).resolve().parent.parent / "src" / "example")
@@ -28,6 +30,21 @@ def test_version_flag_prints_version_and_exits_0():
28
30
  assert err.getvalue() == ""
29
31
 
30
32
 
33
+ def test_version_string_prefers_ai_forge_cli_distribution(monkeypatch):
34
+ versions = {
35
+ "ai-forge-cli": "0.1.4",
36
+ "forge-ai-cli": "0.1.1",
37
+ }
38
+
39
+ def fake_version(name: str) -> str:
40
+ if name in versions:
41
+ return versions[name]
42
+ raise metadata.PackageNotFoundError
43
+
44
+ monkeypatch.setattr(forge_mod.metadata, "version", fake_version)
45
+ assert forge_mod._version_string() == "0.1.4"
46
+
47
+
31
48
  # ---------- context ----------
32
49
 
33
50
  def test_context_success_rc0_for_fully_resolved_module():
@@ -139,3 +139,18 @@ def test_resolve_forge_sources_uses_cached_repo_when_local_skills_missing(monkey
139
139
  repo, skills = init_cmd._resolve_forge_sources()
140
140
  assert repo == cached_repo
141
141
  assert skills == cached_skills
142
+
143
+
144
+ def test_installed_cli_version_prefers_ai_forge_cli_distribution(monkeypatch):
145
+ versions = {
146
+ "ai-forge-cli": "0.1.4",
147
+ "forge-ai-cli": "0.1.1",
148
+ }
149
+
150
+ def fake_version(name: str) -> str:
151
+ if name in versions:
152
+ return versions[name]
153
+ raise init_cmd.metadata.PackageNotFoundError
154
+
155
+ monkeypatch.setattr(init_cmd.metadata, "version", fake_version)
156
+ assert init_cmd._installed_cli_version() == "0.1.4"
File without changes
File without changes