specsmith 0.4.0.dev223__tar.gz → 0.5.0.dev224__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.
- {specsmith-0.4.0.dev223/src/specsmith.egg-info → specsmith-0.5.0.dev224}/PKG-INFO +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/pyproject.toml +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/cleanup.py +1 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/config.py +4 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/credits.py +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/__init__.py +22 -5
- specsmith-0.4.0.dev223/src/specsmith/integrations/warp.py → specsmith-0.5.0.dev224/src/specsmith/integrations/agent_skill.py +17 -7
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/base.py +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/upgrader.py +4 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/SOURCES.txt +1 -1
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_integrations.py +15 -5
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/LICENSE +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/README.md +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/setup.cfg +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/belief.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/certainty.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/py.typed +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/recovery.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/session.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/trace.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/__main__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/architect.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/auditor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/auth.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/cli.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/compressor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/differ.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/doctor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/executor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/exporter.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/importer.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/languages.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/ledger.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/patent.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/phase.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/plugins.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/profiles.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/releaser.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/requirements.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/serve.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/session.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/tools.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/trace.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/updater.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/validator.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/workspace.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_CMD_001.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_auditor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_cli.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_compressor.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_epistemic.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_importer.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_nexus.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_rate_limits.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_scaffolder.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_smoke.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_tools.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_validator.py +0 -0
- {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_vcs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0.dev224
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.5.0.dev224"
|
|
8
8
|
description = "Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -198,7 +198,10 @@ class ProjectConfig(BaseModel):
|
|
|
198
198
|
# Agent integrations
|
|
199
199
|
integrations: list[str] = Field(
|
|
200
200
|
default=["agents-md"],
|
|
201
|
-
description=
|
|
201
|
+
description=(
|
|
202
|
+
"Agent integrations to generate (agents-md, agent-skill, claude-code, "
|
|
203
|
+
"cursor, copilot, gemini, windsurf, aider)."
|
|
204
|
+
),
|
|
202
205
|
)
|
|
203
206
|
|
|
204
207
|
# Agent execution profile
|
|
@@ -17,7 +17,7 @@ class CreditEntry:
|
|
|
17
17
|
timestamp: str = ""
|
|
18
18
|
session_id: str = ""
|
|
19
19
|
model: str = ""
|
|
20
|
-
provider: str = "" # openai, anthropic, google,
|
|
20
|
+
provider: str = "" # openai, anthropic, google, local, ollama, etc.
|
|
21
21
|
tokens_in: int = 0
|
|
22
22
|
tokens_out: int = 0
|
|
23
23
|
estimated_cost_usd: float = 0.0
|
|
@@ -11,19 +11,30 @@ if TYPE_CHECKING:
|
|
|
11
11
|
|
|
12
12
|
ADAPTER_REGISTRY: dict[str, type[AgentAdapter]] = {}
|
|
13
13
|
|
|
14
|
+
# Legacy adapter names that have been superseded. Mapped to the current
|
|
15
|
+
# canonical name. Lookups for legacy keys still succeed (backward compat for
|
|
16
|
+
# existing scaffold.yml files) but only the canonical names are returned by
|
|
17
|
+
# ``list_adapters()``.
|
|
18
|
+
LEGACY_ALIASES: dict[str, str] = {
|
|
19
|
+
# Pre-0.5.0 the agent-skill adapter shipped under the name ``warp`` and
|
|
20
|
+
# wrote to ``.warp/skills/SKILL.md``. New scaffolds use ``agent-skill``
|
|
21
|
+
# and ``.agents/skills/SKILL.md``.
|
|
22
|
+
"warp": "agent-skill",
|
|
23
|
+
}
|
|
24
|
+
|
|
14
25
|
|
|
15
26
|
def _load_adapters() -> None:
|
|
16
27
|
"""Populate the adapter registry."""
|
|
28
|
+
from specsmith.integrations.agent_skill import AgentSkillAdapter
|
|
17
29
|
from specsmith.integrations.aider import AiderAdapter
|
|
18
30
|
from specsmith.integrations.claude_code import ClaudeCodeAdapter
|
|
19
31
|
from specsmith.integrations.copilot import CopilotAdapter
|
|
20
32
|
from specsmith.integrations.cursor import CursorAdapter
|
|
21
33
|
from specsmith.integrations.gemini import GeminiAdapter
|
|
22
|
-
from specsmith.integrations.warp import WarpAdapter
|
|
23
34
|
from specsmith.integrations.windsurf import WindsurfAdapter
|
|
24
35
|
|
|
25
36
|
for cls in (
|
|
26
|
-
|
|
37
|
+
AgentSkillAdapter,
|
|
27
38
|
ClaudeCodeAdapter,
|
|
28
39
|
CursorAdapter,
|
|
29
40
|
CopilotAdapter,
|
|
@@ -35,10 +46,16 @@ def _load_adapters() -> None:
|
|
|
35
46
|
|
|
36
47
|
|
|
37
48
|
def get_adapter(name: str) -> AgentAdapter:
|
|
38
|
-
"""Get an adapter instance by name.
|
|
49
|
+
"""Get an adapter instance by name.
|
|
50
|
+
|
|
51
|
+
Legacy names listed in :data:`LEGACY_ALIASES` are silently rewritten to
|
|
52
|
+
their canonical equivalent, so older ``scaffold.yml`` integration lists
|
|
53
|
+
keep working without manual migration.
|
|
54
|
+
"""
|
|
39
55
|
if not ADAPTER_REGISTRY:
|
|
40
56
|
_load_adapters()
|
|
41
|
-
|
|
57
|
+
resolved = LEGACY_ALIASES.get(name, name)
|
|
58
|
+
cls = ADAPTER_REGISTRY.get(resolved)
|
|
42
59
|
if cls is None:
|
|
43
60
|
available = ", ".join(sorted(ADAPTER_REGISTRY.keys()))
|
|
44
61
|
msg = f"Unknown integration '{name}'. Available: {available}"
|
|
@@ -47,7 +64,7 @@ def get_adapter(name: str) -> AgentAdapter:
|
|
|
47
64
|
|
|
48
65
|
|
|
49
66
|
def list_adapters() -> list[str]:
|
|
50
|
-
"""List available adapter names."""
|
|
67
|
+
"""List available adapter names (canonical only; legacy aliases hidden)."""
|
|
51
68
|
if not ADAPTER_REGISTRY:
|
|
52
69
|
_load_adapters()
|
|
53
70
|
return sorted(ADAPTER_REGISTRY.keys())
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# SPDX-License-Identifier: MIT
|
|
2
2
|
# Copyright (c) 2026 BitConcepts, LLC. All rights reserved.
|
|
3
|
-
"""
|
|
3
|
+
"""Agent skill integration adapter.
|
|
4
|
+
|
|
5
|
+
Generates a generic ``SKILL.md`` file under ``.agents/skills/`` for any
|
|
6
|
+
terminal-native AI agent that supports the SKILL.md convention.
|
|
7
|
+
|
|
8
|
+
This adapter previously shipped under the name ``warp`` and wrote to
|
|
9
|
+
``.warp/skills/SKILL.md``. The legacy name is still resolved as an alias
|
|
10
|
+
in :mod:`specsmith.integrations` so existing ``scaffold.yml`` configs
|
|
11
|
+
continue to work, but the canonical adapter name is ``agent-skill`` and
|
|
12
|
+
the canonical output path is ``.agents/skills/SKILL.md``.
|
|
13
|
+
"""
|
|
4
14
|
|
|
5
15
|
from __future__ import annotations
|
|
6
16
|
|
|
@@ -10,19 +20,19 @@ from specsmith.config import ProjectConfig
|
|
|
10
20
|
from specsmith.integrations.base import AgentAdapter
|
|
11
21
|
|
|
12
22
|
|
|
13
|
-
class
|
|
14
|
-
"""Generate a
|
|
23
|
+
class AgentSkillAdapter(AgentAdapter):
|
|
24
|
+
"""Generate a generic agent skill file (.agents/skills/SKILL.md)."""
|
|
15
25
|
|
|
16
26
|
@property
|
|
17
27
|
def name(self) -> str:
|
|
18
|
-
return "
|
|
28
|
+
return "agent-skill"
|
|
19
29
|
|
|
20
30
|
@property
|
|
21
31
|
def description(self) -> str:
|
|
22
|
-
return "
|
|
32
|
+
return "Agent skill file (.agents/skills/SKILL.md)"
|
|
23
33
|
|
|
24
34
|
def generate(self, config: ProjectConfig, target: Path) -> list[Path]:
|
|
25
|
-
skill_dir = target / ".
|
|
35
|
+
skill_dir = target / ".agents" / "skills"
|
|
26
36
|
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
27
37
|
|
|
28
38
|
skill_path = skill_dir / "SKILL.md"
|
|
@@ -87,7 +97,7 @@ Before marking any task complete, run: {verify_line}
|
|
|
87
97
|
## Credit Tracking
|
|
88
98
|
After completing tasks, record token usage:
|
|
89
99
|
```
|
|
90
|
-
specsmith credits record --model <model> --provider <provider>
|
|
100
|
+
specsmith credits record --model <model> --provider <provider> \\
|
|
91
101
|
--tokens-in <N> --tokens-out <N> --task "<desc>"
|
|
92
102
|
```
|
|
93
103
|
Check budget: `specsmith credits summary`
|
|
@@ -16,7 +16,7 @@ class AgentAdapter(ABC):
|
|
|
16
16
|
@property
|
|
17
17
|
@abstractmethod
|
|
18
18
|
def name(self) -> str:
|
|
19
|
-
"""Short identifier for this integration (e.g. '
|
|
19
|
+
"""Short identifier for this integration (e.g. 'agent-skill', 'claude-code')."""
|
|
20
20
|
|
|
21
21
|
@property
|
|
22
22
|
@abstractmethod
|
|
@@ -368,6 +368,10 @@ def _update_references(
|
|
|
368
368
|
"AGENTS.md",
|
|
369
369
|
"CLAUDE.md",
|
|
370
370
|
"GEMINI.md",
|
|
371
|
+
# Canonical post-0.5.0 path for the agent-skill adapter.
|
|
372
|
+
".agents/skills/SKILL.md",
|
|
373
|
+
# Legacy path for projects scaffolded before 0.5.0 (still patched
|
|
374
|
+
# so reference rewrites continue to work after rename).
|
|
371
375
|
".warp/skills/SKILL.md",
|
|
372
376
|
".cursor/rules/governance.mdc",
|
|
373
377
|
".windsurfrules",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0.dev224
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
@@ -91,13 +91,13 @@ src/specsmith/gui/widgets/token_meter.py
|
|
|
91
91
|
src/specsmith/gui/widgets/tool_panel.py
|
|
92
92
|
src/specsmith/gui/widgets/update_checker.py
|
|
93
93
|
src/specsmith/integrations/__init__.py
|
|
94
|
+
src/specsmith/integrations/agent_skill.py
|
|
94
95
|
src/specsmith/integrations/aider.py
|
|
95
96
|
src/specsmith/integrations/base.py
|
|
96
97
|
src/specsmith/integrations/claude_code.py
|
|
97
98
|
src/specsmith/integrations/copilot.py
|
|
98
99
|
src/specsmith/integrations/cursor.py
|
|
99
100
|
src/specsmith/integrations/gemini.py
|
|
100
|
-
src/specsmith/integrations/warp.py
|
|
101
101
|
src/specsmith/integrations/windsurf.py
|
|
102
102
|
src/specsmith/templates/agents.md.j2
|
|
103
103
|
src/specsmith/templates/editorconfig.j2
|
|
@@ -10,10 +10,10 @@ import pytest
|
|
|
10
10
|
|
|
11
11
|
from specsmith.config import ProjectConfig, ProjectType
|
|
12
12
|
from specsmith.integrations import get_adapter, list_adapters
|
|
13
|
+
from specsmith.integrations.agent_skill import AgentSkillAdapter
|
|
13
14
|
from specsmith.integrations.claude_code import ClaudeCodeAdapter
|
|
14
15
|
from specsmith.integrations.copilot import CopilotAdapter
|
|
15
16
|
from specsmith.integrations.cursor import CursorAdapter
|
|
16
|
-
from specsmith.integrations.warp import WarpAdapter
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@pytest.fixture
|
|
@@ -30,26 +30,36 @@ def config() -> ProjectConfig:
|
|
|
30
30
|
class TestAdapterRegistry:
|
|
31
31
|
def test_list_adapters(self) -> None:
|
|
32
32
|
adapters = list_adapters()
|
|
33
|
-
assert "
|
|
33
|
+
assert "agent-skill" in adapters
|
|
34
34
|
assert "claude-code" in adapters
|
|
35
35
|
assert "cursor" in adapters
|
|
36
36
|
assert "copilot" in adapters
|
|
37
|
+
# Legacy aliases are not surfaced as canonical names.
|
|
38
|
+
assert "warp" not in adapters
|
|
37
39
|
|
|
38
40
|
def test_get_adapter(self) -> None:
|
|
41
|
+
adapter = get_adapter("agent-skill")
|
|
42
|
+
assert isinstance(adapter, AgentSkillAdapter)
|
|
43
|
+
|
|
44
|
+
def test_get_adapter_legacy_alias(self) -> None:
|
|
45
|
+
# Existing scaffold.yml configs that still say `warp` keep working.
|
|
39
46
|
adapter = get_adapter("warp")
|
|
40
|
-
assert isinstance(adapter,
|
|
47
|
+
assert isinstance(adapter, AgentSkillAdapter)
|
|
41
48
|
|
|
42
49
|
def test_get_unknown_adapter(self) -> None:
|
|
43
50
|
with pytest.raises(ValueError, match="Unknown integration"):
|
|
44
51
|
get_adapter("nonexistent")
|
|
45
52
|
|
|
46
53
|
|
|
47
|
-
class
|
|
54
|
+
class TestAgentSkillAdapter:
|
|
48
55
|
def test_generates_skill(self, config: ProjectConfig, tmp_path: Path) -> None:
|
|
49
|
-
adapter =
|
|
56
|
+
adapter = AgentSkillAdapter()
|
|
50
57
|
files = adapter.generate(config, tmp_path)
|
|
51
58
|
assert len(files) == 1
|
|
52
59
|
assert files[0].name == "SKILL.md"
|
|
60
|
+
# Canonical generated path is .agents/skills/SKILL.md (rebrand from .warp/).
|
|
61
|
+
assert files[0].parent.name == "skills"
|
|
62
|
+
assert files[0].parent.parent.name == ".agents"
|
|
53
63
|
content = files[0].read_text(encoding="utf-8")
|
|
54
64
|
assert "test-project" in content
|
|
55
65
|
assert "AGENTS.md" in content
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/update_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/bug_report.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/license-MIT.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/security.md.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/architecture.md.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/mkdocs.yml.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/readthedocs.yaml.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/requirements.md.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/test-spec.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/lifecycle.md.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/roles.md.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/rules.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/js/package.json.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/pyproject.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/rust/Cargo.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.cmd.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.sh.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/run.cmd.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.cmd.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.sh.j2
RENAMED
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/workflows/release.yml.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|