specsmith 0.10.1.dev297__tar.gz → 0.10.1.dev299__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 (234) hide show
  1. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/PKG-INFO +1 -1
  2. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/pyproject.toml +1 -1
  3. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/cli.py +289 -0
  4. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/esdb/bridge.py +1 -1
  5. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/PKG-INFO +1 -1
  6. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/LICENSE +0 -0
  7. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/README.md +0 -0
  8. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/setup.cfg +0 -0
  9. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/__init__.py +0 -0
  10. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/belief.py +0 -0
  11. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/certainty.py +0 -0
  12. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/failure_graph.py +0 -0
  13. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/py.typed +0 -0
  14. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/recovery.py +0 -0
  15. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/session.py +0 -0
  16. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/stress_tester.py +0 -0
  17. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/epistemic/trace.py +0 -0
  18. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/__init__.py +0 -0
  19. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/__main__.py +0 -0
  20. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/__init__.py +0 -0
  21. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/broker.py +0 -0
  22. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/chat_runner.py +0 -0
  23. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/cleanup.py +0 -0
  24. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/core.py +0 -0
  25. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/endpoints.py +0 -0
  26. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/events.py +0 -0
  27. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/execution_profiles.py +0 -0
  28. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/fallback.py +0 -0
  29. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/hf_sync.py +0 -0
  30. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/indexer.py +0 -0
  31. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/mcp.py +0 -0
  32. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/memory.py +0 -0
  33. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/model_intelligence.py +0 -0
  34. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/orchestrator.py +0 -0
  35. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/permissions.py +0 -0
  36. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/profiles.py +0 -0
  37. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/provider_registry.py +0 -0
  38. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/repl.py +0 -0
  39. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/router.py +0 -0
  40. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/rules.py +0 -0
  41. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/runner.py +0 -0
  42. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/safety.py +0 -0
  43. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/spawner.py +0 -0
  44. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/suggester.py +0 -0
  45. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/teams.py +0 -0
  46. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/tools.py +0 -0
  47. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/verifier.py +0 -0
  48. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/agent/voice.py +0 -0
  49. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/architect.py +0 -0
  50. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/auditor.py +0 -0
  51. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/auth.py +0 -0
  52. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/block_export.py +0 -0
  53. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/commands/__init__.py +0 -0
  54. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/commands/intelligence.py +0 -0
  55. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/compliance.py +0 -0
  56. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/compressor.py +0 -0
  57. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/config.py +0 -0
  58. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/console_utils.py +0 -0
  59. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/context_window.py +0 -0
  60. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/credit_analyzer.py +0 -0
  61. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/credits.py +0 -0
  62. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/__init__.py +0 -0
  63. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/base.py +0 -0
  64. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/citations.py +0 -0
  65. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/fpd.py +0 -0
  66. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/odp.py +0 -0
  67. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/patentsview.py +0 -0
  68. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/pfw.py +0 -0
  69. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/ppubs.py +0 -0
  70. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/datasources/ptab.py +0 -0
  71. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/differ.py +0 -0
  72. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/doctor.py +0 -0
  73. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/drive.py +0 -0
  74. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/editor.py +0 -0
  75. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/__init__.py +0 -0
  76. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/belief.py +0 -0
  77. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/certainty.py +0 -0
  78. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/failure_graph.py +0 -0
  79. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/recovery.py +0 -0
  80. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/epistemic/stress_tester.py +0 -0
  81. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/esdb/__init__.py +0 -0
  82. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/eval/__init__.py +0 -0
  83. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/eval/builtins.py +0 -0
  84. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/eval/runner.py +0 -0
  85. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/executor.py +0 -0
  86. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/exporter.py +0 -0
  87. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/governance_logic.py +0 -0
  88. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/__init__.py +0 -0
  89. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/app.py +0 -0
  90. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/main_window.py +0 -0
  91. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/session_tab.py +0 -0
  92. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/theme.py +0 -0
  93. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/__init__.py +0 -0
  94. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/chat_view.py +0 -0
  95. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/input_bar.py +0 -0
  96. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  97. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/token_meter.py +0 -0
  98. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  99. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/widgets/update_checker.py +0 -0
  100. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/gui/worker.py +0 -0
  101. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/history_search.py +0 -0
  102. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/importer.py +0 -0
  103. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/instinct.py +0 -0
  104. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/__init__.py +0 -0
  105. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/agent_skill.py +0 -0
  106. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/aider.py +0 -0
  107. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/base.py +0 -0
  108. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/claude_code.py +0 -0
  109. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/copilot.py +0 -0
  110. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/cursor.py +0 -0
  111. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/gemini.py +0 -0
  112. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/integrations/windsurf.py +0 -0
  113. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/languages.py +0 -0
  114. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/ledger.py +0 -0
  115. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/mcp_generator.py +0 -0
  116. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/patent.py +0 -0
  117. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/paths.py +0 -0
  118. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/phase.py +0 -0
  119. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/plugins.py +0 -0
  120. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/profiles.py +0 -0
  121. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/rate_limits.py +0 -0
  122. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/releaser.py +0 -0
  123. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/requirements.py +0 -0
  124. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/requirements_parser.py +0 -0
  125. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/retrieval.py +0 -0
  126. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/safe_write.py +0 -0
  127. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/scaffolder.py +0 -0
  128. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/serve.py +0 -0
  129. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/session.py +0 -0
  130. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/session_init.py +0 -0
  131. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/skills.py +0 -0
  132. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/skills_builder.py +0 -0
  133. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/sync.py +0 -0
  134. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/agents.md.j2 +0 -0
  135. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  136. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  137. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  138. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  139. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  140. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  141. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  142. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/community/security.md.j2 +0 -0
  143. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  144. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  145. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  146. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  147. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  148. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/editorconfig.j2 +0 -0
  149. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/gitattributes.j2 +0 -0
  150. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/gitignore.j2 +0 -0
  151. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/go/go.mod.j2 +0 -0
  152. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/go/main.go.j2 +0 -0
  153. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  154. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  155. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  156. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  157. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  158. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  159. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  160. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  161. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  162. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  163. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  164. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/js/package.json.j2 +0 -0
  165. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/ledger.md.j2 +0 -0
  166. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/python/cli.py.j2 +0 -0
  167. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/python/init.py.j2 +0 -0
  168. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  169. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/readme.md.j2 +0 -0
  170. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  171. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  172. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  173. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  174. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  175. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  176. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  177. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  178. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  179. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/tool_installer.py +0 -0
  180. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/toolrules.py +0 -0
  181. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/tools.py +0 -0
  182. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/trace.py +0 -0
  183. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/updater.py +0 -0
  184. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/upgrader.py +0 -0
  185. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/validator.py +0 -0
  186. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs/__init__.py +0 -0
  187. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs/base.py +0 -0
  188. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs/bitbucket.py +0 -0
  189. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs/github.py +0 -0
  190. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs/gitlab.py +0 -0
  191. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/vcs_commands.py +0 -0
  192. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/wireframes.py +0 -0
  193. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith/workspace.py +0 -0
  194. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/SOURCES.txt +0 -0
  195. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/dependency_links.txt +0 -0
  196. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/entry_points.txt +0 -0
  197. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/requires.txt +0 -0
  198. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/src/specsmith.egg-info/top_level.txt +0 -0
  199. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_CMD_001.py +0 -0
  200. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_agent_profiles.py +0 -0
  201. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_agent_runner_ready.py +0 -0
  202. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_auditor.py +0 -0
  203. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_chat_diff_decision.py +0 -0
  204. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_chat_runner_openai_compat.py +0 -0
  205. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_chat_stdin_protocol.py +0 -0
  206. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_cli.py +0 -0
  207. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_cli_workflows_history_drive.py +0 -0
  208. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_compliance.py +0 -0
  209. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_compressor.py +0 -0
  210. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_e2e_nexus.py +0 -0
  211. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_endpoints_cli.py +0 -0
  212. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_endpoints_store.py +0 -0
  213. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_epistemic.py +0 -0
  214. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_fallback_chain.py +0 -0
  215. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_importer.py +0 -0
  216. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_integrations.py +0 -0
  217. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_intelligence.py +0 -0
  218. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_mcp_client.py +0 -0
  219. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_new_modules.py +0 -0
  220. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_nexus.py +0 -0
  221. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_permissions.py +0 -0
  222. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_phase1_4_new.py +0 -0
  223. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_phase34_completion.py +0 -0
  224. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_rate_limits.py +0 -0
  225. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_scaffolder.py +0 -0
  226. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_skill_marketplace.py +0 -0
  227. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_skills_mcp.py +0 -0
  228. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_smoke.py +0 -0
  229. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_suggester.py +0 -0
  230. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_tools.py +0 -0
  231. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_validator.py +0 -0
  232. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_vcs.py +0 -0
  233. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_warp_parity.py +0 -0
  234. {specsmith-0.10.1.dev297 → specsmith-0.10.1.dev299}/tests/test_warp_parity_followup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.10.1.dev297
3
+ Version: 0.10.1.dev299
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.10.1.dev297"
7
+ version = "0.10.1.dev299"
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"
@@ -7983,5 +7983,294 @@ except Exception: # noqa: BLE001
7983
7983
  pass # graceful degradation if commands module has issues
7984
7984
 
7985
7985
 
7986
+ # ---------------------------------------------------------------------------
7987
+ # specsmith skills — AI Skills Builder (Phase A)
7988
+ # ---------------------------------------------------------------------------
7989
+
7990
+
7991
+ @main.group(name="skills")
7992
+ def skills_group() -> None:
7993
+ """Build, list, test, and activate AI agent skills."""
7994
+
7995
+
7996
+ @skills_group.command(name="build")
7997
+ @click.argument("description")
7998
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
7999
+ @click.option("--tag", "tags", multiple=True, help="Tags for the skill.")
8000
+ def skills_build_cmd(description: str, project_dir: str, tags: tuple[str, ...]) -> None:
8001
+ """Generate a new skill from a natural-language description."""
8002
+ from specsmith.skills_builder import build_skill
8003
+
8004
+ spec = build_skill(description, project_dir=project_dir, tags=list(tags))
8005
+ console.print(f"[green]\u2713[/green] Skill created: [bold]{spec.name}[/bold] ({spec.id})")
8006
+ console.print(f" [dim]{spec.purpose}[/dim]")
8007
+
8008
+
8009
+ @skills_group.command(name="list")
8010
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8011
+ @click.option("--json", "as_json", is_flag=True, default=False)
8012
+ def skills_list_cmd(project_dir: str, as_json: bool) -> None:
8013
+ """List available skills."""
8014
+ import json as _json
8015
+
8016
+ from specsmith.skills_builder import list_skills
8017
+
8018
+ skills = list_skills(project_dir)
8019
+ if as_json:
8020
+ click.echo(_json.dumps({"skills": [s.to_dict() for s in skills]}, indent=2))
8021
+ return
8022
+ if not skills:
8023
+ console.print("[dim]No skills found. Use `specsmith skills build` to create one.[/dim]")
8024
+ return
8025
+ console.print(f"[bold]Skills[/bold] ({len(skills)})\n")
8026
+ for s in skills:
8027
+ badge = "[green]\u2714[/green]" if s.active else "[dim]\u25cb[/dim]"
8028
+ console.print(f" {badge} [bold]{s.id}[/bold] {s.name}")
8029
+
8030
+
8031
+ @skills_group.command(name="test")
8032
+ @click.argument("skill_id")
8033
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8034
+ def skills_test_cmd(skill_id: str, project_dir: str) -> None:
8035
+ """Dry-run a skill to verify its spec."""
8036
+ from specsmith.skills_builder import list_skills
8037
+
8038
+ skills = {s.id: s for s in list_skills(project_dir)}
8039
+ if skill_id not in skills:
8040
+ console.print(f"[red]Skill not found:[/red] {skill_id}")
8041
+ raise SystemExit(1)
8042
+ spec = skills[skill_id]
8043
+ console.print(f"[bold]Testing:[/bold] {spec.name}")
8044
+ console.print(f" Purpose: {spec.purpose}")
8045
+ console.print(f" Tools: {', '.join(spec.tools_used) or 'none'}")
8046
+ console.print(f" Stop conditions: {len(spec.stop_conditions)}")
8047
+ console.print("[green]\u2713[/green] Skill spec is valid (dry-run).")
8048
+
8049
+
8050
+ @skills_group.command(name="activate")
8051
+ @click.argument("skill_id")
8052
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8053
+ def skills_activate_cmd(skill_id: str, project_dir: str) -> None:
8054
+ """Activate a skill for agent use."""
8055
+ from specsmith.skills_builder import activate_skill
8056
+
8057
+ if activate_skill(skill_id, project_dir):
8058
+ console.print(f"[green]\u2713[/green] Skill [bold]{skill_id}[/bold] activated.")
8059
+ else:
8060
+ console.print(f"[red]Skill not found:[/red] {skill_id}")
8061
+ raise SystemExit(1)
8062
+
8063
+
8064
+ main.add_command(skills_group)
8065
+
8066
+
8067
+ # ---------------------------------------------------------------------------
8068
+ # specsmith eval — Eval-Driven Development framework (Phase P3)
8069
+ # ---------------------------------------------------------------------------
8070
+
8071
+
8072
+ @main.group(name="eval")
8073
+ def eval_group() -> None:
8074
+ """Run eval suites to benchmark AI model capabilities."""
8075
+
8076
+
8077
+ @eval_group.command(name="list")
8078
+ @click.option("--json", "as_json", is_flag=True, default=False)
8079
+ def eval_list_cmd(as_json: bool) -> None:
8080
+ """List available eval suites."""
8081
+ import json as _json
8082
+
8083
+ from specsmith.eval.builtins import list_suites
8084
+
8085
+ suites = list_suites()
8086
+ if as_json:
8087
+ click.echo(_json.dumps({"suites": [s.to_dict() for s in suites]}, indent=2))
8088
+ return
8089
+ if not suites:
8090
+ console.print("[dim]No eval suites available.[/dim]")
8091
+ return
8092
+ console.print(f"[bold]Eval Suites[/bold] ({len(suites)})\n")
8093
+ for s in suites:
8094
+ console.print(f" [bold]{s.id}[/bold] {s.name} ({len(s.cases)} cases)")
8095
+ console.print(f" [dim]{s.description}[/dim]")
8096
+
8097
+
8098
+ @eval_group.command(name="run")
8099
+ @click.argument("suite_id", default="core")
8100
+ @click.option("--json", "as_json", is_flag=True, default=False)
8101
+ def eval_run_cmd(suite_id: str, as_json: bool) -> None:
8102
+ """Run an eval suite (stub mode — no real LLM calls)."""
8103
+ import json as _json
8104
+
8105
+ from specsmith.eval.builtins import get_suite
8106
+ from specsmith.eval.runner import run_suite
8107
+
8108
+ suite = get_suite(suite_id)
8109
+ if suite is None:
8110
+ console.print(f"[red]Suite not found:[/red] {suite_id}")
8111
+ raise SystemExit(1)
8112
+ report = run_suite(suite, stub=True)
8113
+ if as_json:
8114
+ click.echo(_json.dumps(report.to_dict(), indent=2))
8115
+ return
8116
+ icon = "[green]\u2714[/green]" if report.failed == 0 else "[red]\u2717[/red]"
8117
+ console.print(
8118
+ f"{icon} [bold]{suite_id}[/bold] "
8119
+ f"{report.passed}/{report.total} passed "
8120
+ f"avg score {report.avg_score:.0%} "
8121
+ f"avg latency {report.avg_latency_ms:.0f}ms"
8122
+ )
8123
+ for r in report.results:
8124
+ ri = "[green]\u2713[/green]" if r.passed else "[red]\u2717[/red]"
8125
+ console.print(f" {ri} {r.case_id} score={r.score:.0%} {r.latency_ms:.0f}ms")
8126
+
8127
+
8128
+ @eval_group.command(name="report")
8129
+ @click.argument("suite_id", default="core")
8130
+ @click.option("--output", type=click.Path(), default=None, help="Write markdown report to file.")
8131
+ def eval_report_cmd(suite_id: str, output: str | None) -> None:
8132
+ """Generate a markdown eval report."""
8133
+ from specsmith.eval.builtins import get_suite
8134
+ from specsmith.eval.runner import generate_markdown_report, run_suite
8135
+
8136
+ suite = get_suite(suite_id)
8137
+ if suite is None:
8138
+ console.print(f"[red]Suite not found:[/red] {suite_id}")
8139
+ raise SystemExit(1)
8140
+ report = run_suite(suite, stub=True)
8141
+ md = generate_markdown_report(report)
8142
+ if output:
8143
+ Path(output).write_text(md, encoding="utf-8")
8144
+ console.print(f"[green]\u2713[/green] Report written to {output}")
8145
+ else:
8146
+ click.echo(md)
8147
+
8148
+
8149
+ main.add_command(eval_group)
8150
+
8151
+
8152
+ # ---------------------------------------------------------------------------
8153
+ # specsmith teams — Multi-agent team coordination (Phase P4)
8154
+ # ---------------------------------------------------------------------------
8155
+
8156
+
8157
+ @main.group(name="teams")
8158
+ def teams_group() -> None:
8159
+ """List and run multi-agent teams."""
8160
+
8161
+
8162
+ @teams_group.command(name="list")
8163
+ @click.option("--json", "as_json", is_flag=True, default=False)
8164
+ def teams_list_cmd(as_json: bool) -> None:
8165
+ """List predefined agent teams."""
8166
+ import json as _json
8167
+
8168
+ from specsmith.agent.teams import list_teams
8169
+
8170
+ teams = list_teams()
8171
+ if as_json:
8172
+ click.echo(_json.dumps({"teams": [t.to_dict() for t in teams]}, indent=2))
8173
+ return
8174
+ console.print(f"[bold]Agent Teams[/bold] ({len(teams)})\n")
8175
+ for t in teams:
8176
+ roles = ", ".join(m.role for m in t.members)
8177
+ console.print(f" [bold]{t.id}[/bold] {t.name} [{roles}]")
8178
+ console.print(f" [dim]{t.description}[/dim]")
8179
+
8180
+
8181
+ @teams_group.command(name="run")
8182
+ @click.argument("team_id")
8183
+ @click.argument("task")
8184
+ def teams_run_cmd(team_id: str, task: str) -> None:
8185
+ """Spawn a team to execute a task (stub — prints team plan)."""
8186
+ from specsmith.agent.teams import get_team
8187
+
8188
+ team = get_team(team_id)
8189
+ if team is None:
8190
+ console.print(f"[red]Team not found:[/red] {team_id}")
8191
+ raise SystemExit(1)
8192
+ console.print(f"[bold]Spawning team:[/bold] {team.name}")
8193
+ for m in team.members:
8194
+ console.print(f" \u2192 {m.role} ({'required' if m.required else 'optional'})")
8195
+ console.print(f"[dim]Task: {task}[/dim]")
8196
+ console.print(
8197
+ "[yellow]\u26a0[/yellow] Team execution is in stub mode (no real agents spawned)."
8198
+ )
8199
+
8200
+
8201
+ main.add_command(teams_group)
8202
+
8203
+
8204
+ # ---------------------------------------------------------------------------
8205
+ # specsmith esdb — ChronoMemory ESDB management (Phase ESDB)
8206
+ # ---------------------------------------------------------------------------
8207
+
8208
+
8209
+ @main.group(name="esdb")
8210
+ def esdb_group() -> None:
8211
+ """Manage the ChronoMemory Epistemic State Database."""
8212
+
8213
+
8214
+ @esdb_group.command(name="status")
8215
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8216
+ @click.option("--json", "as_json", is_flag=True, default=False)
8217
+ def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
8218
+ """Show ESDB status and record counts."""
8219
+ import json as _json
8220
+
8221
+ from specsmith.esdb.bridge import EsdbBridge
8222
+
8223
+ bridge = EsdbBridge(project_dir)
8224
+ st = bridge.status()
8225
+ counts = bridge.record_counts()
8226
+ if as_json:
8227
+ click.echo(_json.dumps({"status": st.to_dict(), "counts": counts}, indent=2))
8228
+ return
8229
+ icon = "[green]\u25cf[/green]" if st.available else "[red]\u25cf[/red]"
8230
+ console.print(f"{icon} ESDB — {st.backend}")
8231
+ console.print(f" Records: {st.record_count}")
8232
+ for kind, count in counts.items():
8233
+ console.print(f" {kind}: {count}")
8234
+ if st.chain_valid:
8235
+ console.print(" [green]\u2714[/green] WAL chain integrity OK")
8236
+
8237
+
8238
+ @esdb_group.command(name="migrate")
8239
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8240
+ def esdb_migrate_cmd(project_dir: str) -> None:
8241
+ """Migrate .specsmith/ flat JSON to ESDB (stub — validates data)."""
8242
+ from specsmith.esdb.bridge import EsdbBridge
8243
+
8244
+ bridge = EsdbBridge(project_dir)
8245
+ reqs = bridge.requirements()
8246
+ tests = bridge.testcases()
8247
+ console.print("[bold]Migration scan:[/bold]")
8248
+ console.print(f" Requirements: {len(reqs)}")
8249
+ console.print(f" Test cases: {len(tests)}")
8250
+ console.print("[green]\u2713[/green] Data validated. Full Rust ESDB migration not yet active.")
8251
+ console.print(
8252
+ "[dim]When ChronoMemory native engine is linked, run this again to migrate.[/dim]"
8253
+ )
8254
+
8255
+
8256
+ @esdb_group.command(name="replay")
8257
+ @click.option("--project-dir", type=click.Path(exists=True), default=".")
8258
+ def esdb_replay_cmd(project_dir: str) -> None:
8259
+ """Replay ESDB WAL to verify state integrity (stub)."""
8260
+ from specsmith.esdb.bridge import EsdbBridge
8261
+
8262
+ bridge = EsdbBridge(project_dir)
8263
+ st = bridge.status()
8264
+ console.print(f"[bold]Replay check:[/bold] {st.backend}")
8265
+ console.print(f" Records: {st.record_count}")
8266
+ if st.chain_valid:
8267
+ console.print("[green]\u2714[/green] WAL chain valid — state consistent.")
8268
+ else:
8269
+ console.print("[red]\u2717[/red] WAL chain integrity failure detected.")
8270
+
8271
+
8272
+ main.add_command(esdb_group)
8273
+
8274
+
7986
8275
  if __name__ == "__main__":
7987
8276
  main()
@@ -69,7 +69,7 @@ class EsdbBridge:
69
69
  tests = self._load_testcases()
70
70
  return EsdbStatus(
71
71
  available=True,
72
- backend="json-fallback",
72
+ backend=".specsmith/ JSON (ChronoMemory native pending)",
73
73
  record_count=len(reqs) + len(tests),
74
74
  )
75
75
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.10.1.dev297
3
+ Version: 0.10.1.dev299
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