Rename project from SmartTools to CmdForge

Major rename operation:
- Rename Python package: smarttools -> cmdforge
- Update CLI entry point: smarttools -> cmdforge
- Update all imports and module references
- Update pyproject.toml with new name, URLs, entry point
- Update all HTML templates with new branding
- Update documentation (CLAUDE.md, README.md, docs/*, wiki/*)
- Update environment variables:
  - SMARTTOOLS_ENV -> CMDFORGE_ENV
  - SMARTTOOLS_REGISTRY_DB -> CMDFORGE_REGISTRY_DB
  - SMARTTOOLS_TOKEN -> CMDFORGE_TOKEN
  - SMARTTOOLS_REGISTRY_* -> CMDFORGE_REGISTRY_*
- Update Dockerfile and docker-compose.yml
- Update tests to use new package name
- Update scripts and examples
- Update package.json and tailwind.config.js

All 158 unit tests pass. The CLI is working correctly with the
new cmdforge command.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
This commit is contained in:
rob
2026-01-02 22:15:55 -04:00
co-authored by Claude Opus 4.5
parent 2939dd806b
commit 497fe87fc5
113 changed files with 822 additions and 822 deletions
+12 -12
View File
@@ -3,15 +3,15 @@
import pytest
from unittest.mock import patch, MagicMock
from smarttools.runner import (
from cmdforge.runner import (
substitute_variables,
execute_prompt_step,
execute_code_step,
run_tool,
create_argument_parser
)
from smarttools.tool import Tool, ToolArgument, PromptStep, CodeStep
from smarttools.providers import ProviderResult
from cmdforge.tool import Tool, ToolArgument, PromptStep, CodeStep
from cmdforge.providers import ProviderResult
class TestSubstituteVariables:
@@ -96,7 +96,7 @@ Line 3: {var1} again"""
class TestExecutePromptStep:
"""Tests for prompt step execution."""
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_successful_prompt(self, mock_call):
mock_call.return_value = ProviderResult(
text="This is the response",
@@ -119,7 +119,7 @@ class TestExecutePromptStep:
call_args = mock_call.call_args
assert "Some text to summarize" in call_args[0][1]
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_failed_prompt(self, mock_call):
mock_call.return_value = ProviderResult(
text="",
@@ -133,7 +133,7 @@ class TestExecutePromptStep:
assert success is False
assert output == ""
@patch('smarttools.runner.mock_provider')
@patch('cmdforge.runner.mock_provider')
def test_mock_provider_used(self, mock_mock):
mock_mock.return_value = ProviderResult(text="mock response", success=True)
@@ -143,7 +143,7 @@ class TestExecutePromptStep:
assert success is True
mock_mock.assert_called_once()
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_provider_override(self, mock_call):
mock_call.return_value = ProviderResult(text="response", success=True)
@@ -277,7 +277,7 @@ class TestRunTool:
output, exit_code = run_tool(tool, "", {"name": "Alice"})
assert output == "Hello, Alice!"
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_tool_with_prompt_step(self, mock_call):
mock_call.return_value = ProviderResult(text="Summarized!", success=True)
@@ -315,7 +315,7 @@ class TestRunTool:
assert exit_code == 0
assert output == "Words: 4"
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_tool_with_multiple_steps(self, mock_call):
mock_call.return_value = ProviderResult(text="AI response", success=True)
@@ -334,7 +334,7 @@ class TestRunTool:
assert exit_code == 0
assert "Result: AI response" in output
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_tool_dry_run(self, mock_call):
tool = Tool(
name="test",
@@ -351,7 +351,7 @@ class TestRunTool:
assert exit_code == 0
assert "DRY RUN" in output
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_tool_provider_override(self, mock_call):
mock_call.return_value = ProviderResult(text="response", success=True)
@@ -368,7 +368,7 @@ class TestRunTool:
# Should use override
assert mock_call.call_args[0][0] == "gpt4"
@patch('smarttools.runner.call_provider')
@patch('cmdforge.runner.call_provider')
def test_tool_prompt_failure(self, mock_call):
mock_call.return_value = ProviderResult(text="", success=False, error="API error")