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.
Files changed (169) hide show
  1. {specsmith-0.4.0.dev223/src/specsmith.egg-info → specsmith-0.5.0.dev224}/PKG-INFO +1 -1
  2. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/pyproject.toml +1 -1
  3. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/cleanup.py +1 -0
  4. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/config.py +4 -1
  5. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/credits.py +1 -1
  6. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/__init__.py +22 -5
  7. specsmith-0.4.0.dev223/src/specsmith/integrations/warp.py → specsmith-0.5.0.dev224/src/specsmith/integrations/agent_skill.py +17 -7
  8. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/base.py +1 -1
  9. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/upgrader.py +4 -0
  10. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224/src/specsmith.egg-info}/PKG-INFO +1 -1
  11. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/SOURCES.txt +1 -1
  12. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_integrations.py +15 -5
  13. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/LICENSE +0 -0
  14. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/README.md +0 -0
  15. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/setup.cfg +0 -0
  16. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/__init__.py +0 -0
  17. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/belief.py +0 -0
  18. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/certainty.py +0 -0
  19. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/failure_graph.py +0 -0
  20. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/py.typed +0 -0
  21. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/recovery.py +0 -0
  22. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/session.py +0 -0
  23. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/stress_tester.py +0 -0
  24. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/epistemic/trace.py +0 -0
  25. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/__init__.py +0 -0
  26. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/__main__.py +0 -0
  27. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/__init__.py +0 -0
  28. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/broker.py +0 -0
  29. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/events.py +0 -0
  30. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/indexer.py +0 -0
  31. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/mcp.py +0 -0
  32. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/memory.py +0 -0
  33. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/orchestrator.py +0 -0
  34. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/repl.py +0 -0
  35. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/router.py +0 -0
  36. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/rules.py +0 -0
  37. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/safety.py +0 -0
  38. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/tools.py +0 -0
  39. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/agent/verifier.py +0 -0
  40. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/architect.py +0 -0
  41. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/auditor.py +0 -0
  42. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/auth.py +0 -0
  43. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/cli.py +0 -0
  44. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/commands/__init__.py +0 -0
  45. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/compressor.py +0 -0
  46. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/console_utils.py +0 -0
  47. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/credit_analyzer.py +0 -0
  48. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/differ.py +0 -0
  49. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/doctor.py +0 -0
  50. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/__init__.py +0 -0
  51. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/belief.py +0 -0
  52. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/certainty.py +0 -0
  53. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/failure_graph.py +0 -0
  54. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/recovery.py +0 -0
  55. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/epistemic/stress_tester.py +0 -0
  56. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/executor.py +0 -0
  57. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/exporter.py +0 -0
  58. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/__init__.py +0 -0
  59. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/app.py +0 -0
  60. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/main_window.py +0 -0
  61. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/session_tab.py +0 -0
  62. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/theme.py +0 -0
  63. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/__init__.py +0 -0
  64. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/chat_view.py +0 -0
  65. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/input_bar.py +0 -0
  66. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  67. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/token_meter.py +0 -0
  68. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  69. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/widgets/update_checker.py +0 -0
  70. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/gui/worker.py +0 -0
  71. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/importer.py +0 -0
  72. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/aider.py +0 -0
  73. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/claude_code.py +0 -0
  74. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/copilot.py +0 -0
  75. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/cursor.py +0 -0
  76. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/gemini.py +0 -0
  77. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/integrations/windsurf.py +0 -0
  78. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/languages.py +0 -0
  79. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/ledger.py +0 -0
  80. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/patent.py +0 -0
  81. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/phase.py +0 -0
  82. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/plugins.py +0 -0
  83. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/profiles.py +0 -0
  84. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/rate_limits.py +0 -0
  85. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/releaser.py +0 -0
  86. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/requirements.py +0 -0
  87. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/requirements_parser.py +0 -0
  88. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/retrieval.py +0 -0
  89. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/scaffolder.py +0 -0
  90. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/serve.py +0 -0
  91. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/session.py +0 -0
  92. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/agents.md.j2 +0 -0
  93. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  94. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  95. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  96. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  97. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  98. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  99. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  100. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/community/security.md.j2 +0 -0
  101. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  102. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  103. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  104. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  105. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  106. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/editorconfig.j2 +0 -0
  107. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/gitattributes.j2 +0 -0
  108. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/gitignore.j2 +0 -0
  109. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/go/go.mod.j2 +0 -0
  110. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/go/main.go.j2 +0 -0
  111. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  112. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  113. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  114. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  115. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  116. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  117. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  118. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  119. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  120. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  121. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  122. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/js/package.json.j2 +0 -0
  123. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/ledger.md.j2 +0 -0
  124. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/cli.py.j2 +0 -0
  125. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/init.py.j2 +0 -0
  126. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  127. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/readme.md.j2 +0 -0
  128. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  129. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  130. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  131. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  132. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  133. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  134. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  135. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  136. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  137. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/tool_installer.py +0 -0
  138. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/toolrules.py +0 -0
  139. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/tools.py +0 -0
  140. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/trace.py +0 -0
  141. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/updater.py +0 -0
  142. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/validator.py +0 -0
  143. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/__init__.py +0 -0
  144. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/base.py +0 -0
  145. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/bitbucket.py +0 -0
  146. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/github.py +0 -0
  147. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs/gitlab.py +0 -0
  148. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/vcs_commands.py +0 -0
  149. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/wireframes.py +0 -0
  150. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith/workspace.py +0 -0
  151. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/dependency_links.txt +0 -0
  152. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/entry_points.txt +0 -0
  153. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/requires.txt +0 -0
  154. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/src/specsmith.egg-info/top_level.txt +0 -0
  155. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_CMD_001.py +0 -0
  156. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_auditor.py +0 -0
  157. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_cli.py +0 -0
  158. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_compressor.py +0 -0
  159. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_e2e_nexus.py +0 -0
  160. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_epistemic.py +0 -0
  161. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_importer.py +0 -0
  162. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_nexus.py +0 -0
  163. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_phase1_4_new.py +0 -0
  164. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_rate_limits.py +0 -0
  165. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_scaffolder.py +0 -0
  166. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_smoke.py +0 -0
  167. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_tools.py +0 -0
  168. {specsmith-0.4.0.dev223 → specsmith-0.5.0.dev224}/tests/test_validator.py +0 -0
  169. {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.4.0.dev223
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.4.0.dev223"
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"
@@ -68,6 +68,7 @@ PROTECTED_PATHS = frozenset(
68
68
  ".repo-index",
69
69
  ".github",
70
70
  ".vscode",
71
+ ".agents",
71
72
  ".warp",
72
73
  ".editorconfig",
73
74
  ".gitignore",
@@ -198,7 +198,10 @@ class ProjectConfig(BaseModel):
198
198
  # Agent integrations
199
199
  integrations: list[str] = Field(
200
200
  default=["agents-md"],
201
- description="Agent integrations to generate (agents-md, warp, claude-code, cursor, etc.)",
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, warp, local
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
- WarpAdapter,
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
- cls = ADAPTER_REGISTRY.get(name)
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
- """Warp / Oz skill integration adapter."""
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 WarpAdapter(AgentAdapter):
14
- """Generate a Warp skill file for the project."""
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 "warp"
28
+ return "agent-skill"
19
29
 
20
30
  @property
21
31
  def description(self) -> str:
22
- return "Warp / Oz skill file (.warp/skills/)"
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 / ".warp" / "skills"
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. 'warp', 'claude-code')."""
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.4.0.dev223
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 "warp" in adapters
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, WarpAdapter)
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 TestWarpAdapter:
54
+ class TestAgentSkillAdapter:
48
55
  def test_generates_skill(self, config: ProjectConfig, tmp_path: Path) -> None:
49
- adapter = WarpAdapter()
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