specsmith 0.13.1.dev522__tar.gz → 0.13.1.dev534__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 (298) hide show
  1. {specsmith-0.13.1.dev522/src/specsmith.egg-info → specsmith-0.13.1.dev534}/PKG-INFO +34 -9
  2. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/README.md +32 -7
  3. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/pyproject.toml +2 -2
  4. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/cli.py +4 -3
  5. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/__init__.py +3 -1
  6. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/bridge.py +3 -1
  7. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/sqlite_store.py +2 -2
  8. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_logic.py +2 -1
  9. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534/src/specsmith.egg-info}/PKG-INFO +34 -9
  10. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/requires.txt +1 -1
  11. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_esdb_license.py +1 -1
  12. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_mcp_server.py +0 -6
  13. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/LICENSE +0 -0
  14. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/setup.cfg +0 -0
  15. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/__init__.py +0 -0
  16. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/belief.py +0 -0
  17. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/certainty.py +0 -0
  18. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/failure_graph.py +0 -0
  19. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/py.typed +0 -0
  20. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/recovery.py +0 -0
  21. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/session.py +0 -0
  22. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/stress_tester.py +0 -0
  23. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/trace.py +0 -0
  24. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/__init__.py +0 -0
  25. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/__main__.py +0 -0
  26. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/__init__.py +0 -0
  27. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/broker.py +0 -0
  28. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/chat_runner.py +0 -0
  29. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/cleanup.py +0 -0
  30. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/context_seed.py +0 -0
  31. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/core.py +0 -0
  32. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/__init__.py +0 -0
  33. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/_status.py +0 -0
  34. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/dag.py +0 -0
  35. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  36. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/events.py +0 -0
  37. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/result.py +0 -0
  38. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/endpoints.py +0 -0
  39. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/events.py +0 -0
  40. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/execution_profiles.py +0 -0
  41. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/fallback.py +0 -0
  42. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/hf_leaderboard.py +0 -0
  43. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/hf_sync.py +0 -0
  44. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/indexer.py +0 -0
  45. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/llm_client.py +0 -0
  46. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/mcp.py +0 -0
  47. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/memory.py +0 -0
  48. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/model_intelligence.py +0 -0
  49. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/model_profiles.py +0 -0
  50. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/orchestrator.py +0 -0
  51. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/permissions.py +0 -0
  52. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/profiles.py +0 -0
  53. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/provider_registry.py +0 -0
  54. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/repl.py +0 -0
  55. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/router.py +0 -0
  56. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/rules.py +0 -0
  57. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/runner.py +0 -0
  58. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/safety.py +0 -0
  59. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/spawner.py +0 -0
  60. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/suggester.py +0 -0
  61. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/teams.py +0 -0
  62. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/tools.py +0 -0
  63. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/verifier.py +0 -0
  64. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/voice.py +0 -0
  65. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/architect.py +0 -0
  66. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/auditor.py +0 -0
  67. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/auth.py +0 -0
  68. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/block_export.py +0 -0
  69. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/channel.py +0 -0
  70. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ci_manager.py +0 -0
  71. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/commands/__init__.py +0 -0
  72. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/commands/intelligence.py +0 -0
  73. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/__init__.py +0 -0
  74. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/_compat.py +0 -0
  75. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/checker.py +0 -0
  76. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/evidence.py +0 -0
  77. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/regulations.py +0 -0
  78. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/reporter.py +0 -0
  79. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compressor.py +0 -0
  80. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/config.py +0 -0
  81. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/console_utils.py +0 -0
  82. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/context_orchestrator.py +0 -0
  83. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/context_window.py +0 -0
  84. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/credit_analyzer.py +0 -0
  85. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/credits.py +0 -0
  86. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/__init__.py +0 -0
  87. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/base.py +0 -0
  88. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/citations.py +0 -0
  89. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/fpd.py +0 -0
  90. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/odp.py +0 -0
  91. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/patentsview.py +0 -0
  92. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/pfw.py +0 -0
  93. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/ppubs.py +0 -0
  94. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/ptab.py +0 -0
  95. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/differ.py +0 -0
  96. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/doctor.py +0 -0
  97. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/drive.py +0 -0
  98. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/editor.py +0 -0
  99. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/__init__.py +0 -0
  100. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/belief.py +0 -0
  101. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/certainty.py +0 -0
  102. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/failure_graph.py +0 -0
  103. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/recovery.py +0 -0
  104. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/stress_tester.py +0 -0
  105. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/_license.py +0 -0
  106. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/__init__.py +0 -0
  107. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/builtins.py +0 -0
  108. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/runner.py +0 -0
  109. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/executor.py +0 -0
  110. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/exporter.py +0 -0
  111. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_store.py +0 -0
  112. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_yaml.py +0 -0
  113. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/__init__.py +0 -0
  114. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/app.py +0 -0
  115. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/main_window.py +0 -0
  116. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/session_tab.py +0 -0
  117. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/theme.py +0 -0
  118. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/__init__.py +0 -0
  119. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/chat_view.py +0 -0
  120. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/input_bar.py +0 -0
  121. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  122. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/token_meter.py +0 -0
  123. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  124. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/update_checker.py +0 -0
  125. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/worker.py +0 -0
  126. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/history_search.py +0 -0
  127. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/importer.py +0 -0
  128. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/instinct.py +0 -0
  129. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/__init__.py +0 -0
  130. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/agent_skill.py +0 -0
  131. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/aider.py +0 -0
  132. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/base.py +0 -0
  133. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/claude_code.py +0 -0
  134. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/codity.py +0 -0
  135. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/copilot.py +0 -0
  136. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/cursor.py +0 -0
  137. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/gemini.py +0 -0
  138. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/windsurf.py +0 -0
  139. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/issue_reporter.py +0 -0
  140. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/languages.py +0 -0
  141. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ledger.py +0 -0
  142. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/mcp_generator.py +0 -0
  143. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/mcp_server.py +0 -0
  144. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/__init__.py +0 -0
  145. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  146. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  147. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  148. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  149. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  150. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m006_session_governance.py +0 -0
  151. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/runner.py +0 -0
  152. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ollama_cmds.py +0 -0
  153. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/patent.py +0 -0
  154. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/paths.py +0 -0
  155. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/phase.py +0 -0
  156. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/plugins.py +0 -0
  157. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/profiles.py +0 -0
  158. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/rate_limits.py +0 -0
  159. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/releaser.py +0 -0
  160. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/requirements.py +0 -0
  161. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/requirements_parser.py +0 -0
  162. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/retrieval.py +0 -0
  163. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/safe_write.py +0 -0
  164. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/scaffolder.py +0 -0
  165. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/serve.py +0 -0
  166. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session.py +0 -0
  167. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session_init.py +0 -0
  168. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session_store.py +0 -0
  169. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/__init__.py +0 -0
  170. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/ai_agents.py +0 -0
  171. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/cloud.py +0 -0
  172. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/corporate.py +0 -0
  173. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/cross_platform.py +0 -0
  174. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/data_engineering.py +0 -0
  175. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/devops.py +0 -0
  176. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/docs.py +0 -0
  177. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/embedded.py +0 -0
  178. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/governance.py +0 -0
  179. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/hardware.py +0 -0
  180. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/mobile.py +0 -0
  181. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/platform_engineering.py +0 -0
  182. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/productivity.py +0 -0
  183. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/software_engineering.py +0 -0
  184. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/specsmith_skills.py +0 -0
  185. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/ssh.py +0 -0
  186. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/web_backend.py +0 -0
  187. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills_builder.py +0 -0
  188. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/sync.py +0 -0
  189. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/agents.md.j2 +0 -0
  190. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  191. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  192. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  193. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  194. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  195. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  196. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  197. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/security.md.j2 +0 -0
  198. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  199. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  200. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  201. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  202. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  203. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/editorconfig.j2 +0 -0
  204. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/gitattributes.j2 +0 -0
  205. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/gitignore.j2 +0 -0
  206. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/go/go.mod.j2 +0 -0
  207. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/go/main.go.j2 +0 -0
  208. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  209. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  210. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  211. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  212. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  213. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  214. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  215. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  216. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  217. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  218. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  219. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/js/package.json.j2 +0 -0
  220. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/ledger.md.j2 +0 -0
  221. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/cli.py.j2 +0 -0
  222. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/init.py.j2 +0 -0
  223. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  224. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/readme.md.j2 +0 -0
  225. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  226. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  227. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  228. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  229. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  230. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  231. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  232. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  233. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  234. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/tool_installer.py +0 -0
  235. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/toolrules.py +0 -0
  236. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/tools.py +0 -0
  237. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/trace.py +0 -0
  238. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/updater.py +0 -0
  239. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/upgrader.py +0 -0
  240. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/validator.py +0 -0
  241. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/__init__.py +0 -0
  242. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/base.py +0 -0
  243. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/bitbucket.py +0 -0
  244. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/github.py +0 -0
  245. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/gitlab.py +0 -0
  246. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs_commands.py +0 -0
  247. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/wireframes.py +0 -0
  248. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/workspace.py +0 -0
  249. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/SOURCES.txt +0 -0
  250. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/dependency_links.txt +0 -0
  251. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/entry_points.txt +0 -0
  252. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/top_level.txt +0 -0
  253. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_CMD_001.py +0 -0
  254. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_profiles.py +0 -0
  255. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_run_feedback.py +0 -0
  256. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_runner_ready.py +0 -0
  257. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_ai_client.py +0 -0
  258. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_ai_intelligence.py +0 -0
  259. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_auditor.py +0 -0
  260. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_channel.py +0 -0
  261. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_diff_decision.py +0 -0
  262. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_runner_openai_compat.py +0 -0
  263. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_stdin_protocol.py +0 -0
  264. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_cli.py +0 -0
  265. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_cli_workflows_history_drive.py +0 -0
  266. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_compliance.py +0 -0
  267. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_compressor.py +0 -0
  268. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_dispatch.py +0 -0
  269. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_e2e_nexus.py +0 -0
  270. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_endpoints_cli.py +0 -0
  271. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_endpoints_store.py +0 -0
  272. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_epistemic.py +0 -0
  273. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_esdb_sqlite.py +0 -0
  274. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_fallback_chain.py +0 -0
  275. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_importer.py +0 -0
  276. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_integrations.py +0 -0
  277. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_integrations_codity.py +0 -0
  278. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_intelligence.py +0 -0
  279. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_issue_reporter.py +0 -0
  280. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_mcp_client.py +0 -0
  281. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_new_modules.py +0 -0
  282. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_nexus.py +0 -0
  283. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_permissions.py +0 -0
  284. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_phase1_4_new.py +0 -0
  285. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_phase34_completion.py +0 -0
  286. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_rate_limits.py +0 -0
  287. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_req_248_262.py +0 -0
  288. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_req_358_359.py +0 -0
  289. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_scaffolder.py +0 -0
  290. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_skill_marketplace.py +0 -0
  291. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_skills_mcp.py +0 -0
  292. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_smoke.py +0 -0
  293. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_suggester.py +0 -0
  294. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_tools.py +0 -0
  295. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_validator.py +0 -0
  296. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_vcs.py +0 -0
  297. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_warp_parity.py +0 -0
  298. {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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.13.1.dev522
3
+ Version: 0.13.1.dev534
4
4
  Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
5
5
  Author: Layer1Labs Silicon, Inc.
6
6
  License-Expression: MIT
@@ -40,7 +40,7 @@ Requires-Dist: pre-commit>=3.0; extra == "dev"
40
40
  Requires-Dist: types-pyyaml>=6.0; extra == "dev"
41
41
  Requires-Dist: cryptography>=42.0; extra == "dev"
42
42
  Provides-Extra: esdb
43
- Requires-Dist: chronomemory>=0.1.3; extra == "esdb"
43
+ Requires-Dist: chronomemory>=0.1.4; extra == "esdb"
44
44
  Requires-Dist: cryptography>=42.0; extra == "esdb"
45
45
  Provides-Extra: docs
46
46
  Requires-Dist: mkdocs>=1.6; extra == "docs"
@@ -204,18 +204,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
204
204
  command — not to library imports. Use this when you want the AEE belief-state machinery
205
205
  in your own application without managing a pipx environment.
206
206
 
207
- **ESDB ChronoStore (commercial, requires license):**
207
+ **ESDB Epistemic State Database**
208
+
209
+ | Tier | Package | License | What you get |
210
+ |------|---------|---------|-------------|
211
+ | **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
212
+ | **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
213
+
214
+ `pip install specsmith` always installs the **free SQLite backend** automatically.
215
+ No additional packages, no license key, no configuration — it works out of the box.
208
216
 
209
217
  ```bash
210
- pip install "specsmith[esdb]" # + chronomemory from PyPI (commercial requires license key)
218
+ specsmith esdb status # shows: SQLite (free, MIT)active by default
219
+ ```
220
+
221
+ **Upgrading to chronomemory ChronoStore (commercial):**
222
+
223
+ If you hold a chronomemory ESDB license, activate the commercial backend:
224
+
225
+ ```bash
226
+ # Step 1 — install the chronomemory package
227
+ pip install "specsmith[esdb]" # installs chronomemory from PyPI
228
+ # or if using pipx:
229
+ pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
230
+
231
+ # Step 2 — activate your license key
211
232
  specsmith esdb enable --key-file /path/to/your.esdb.key
212
- specsmith esdb status # confirms ChronoStore is active
233
+ # The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
234
+
235
+ # Step 3 — verify ChronoStore is active
236
+ specsmith esdb status
237
+ # ● ESDB — ChronoStore WAL (chronomemory commercial)
238
+ # ✔ License: your-org (expires YYYY-MM-DD)
213
239
  ```
214
240
 
215
- The default ESDB backend is SQLite (free, MIT, no license needed). ChronoStore
216
- (tamper-evident WAL, OEA fields, Rust acceleration) is a commercial add-on.
217
- Contact [licensing@layer1labs.com](mailto:licensing@layer1labs.com) to obtain a license.
218
- See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
241
+ To obtain a chronomemory ESDB license:
242
+ [licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
243
+ See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
219
244
 
220
245
  **Update:**
221
246
 
@@ -126,18 +126,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
126
126
  command — not to library imports. Use this when you want the AEE belief-state machinery
127
127
  in your own application without managing a pipx environment.
128
128
 
129
- **ESDB ChronoStore (commercial, requires license):**
129
+ **ESDB Epistemic State Database**
130
+
131
+ | Tier | Package | License | What you get |
132
+ |------|---------|---------|-------------|
133
+ | **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
134
+ | **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
135
+
136
+ `pip install specsmith` always installs the **free SQLite backend** automatically.
137
+ No additional packages, no license key, no configuration — it works out of the box.
130
138
 
131
139
  ```bash
132
- pip install "specsmith[esdb]" # + chronomemory from PyPI (commercial requires license key)
140
+ specsmith esdb status # shows: SQLite (free, MIT)active by default
141
+ ```
142
+
143
+ **Upgrading to chronomemory ChronoStore (commercial):**
144
+
145
+ If you hold a chronomemory ESDB license, activate the commercial backend:
146
+
147
+ ```bash
148
+ # Step 1 — install the chronomemory package
149
+ pip install "specsmith[esdb]" # installs chronomemory from PyPI
150
+ # or if using pipx:
151
+ pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
152
+
153
+ # Step 2 — activate your license key
133
154
  specsmith esdb enable --key-file /path/to/your.esdb.key
134
- specsmith esdb status # confirms ChronoStore is active
155
+ # The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
156
+
157
+ # Step 3 — verify ChronoStore is active
158
+ specsmith esdb status
159
+ # ● ESDB — ChronoStore WAL (chronomemory commercial)
160
+ # ✔ License: your-org (expires YYYY-MM-DD)
135
161
  ```
136
162
 
137
- The default ESDB backend is SQLite (free, MIT, no license needed). ChronoStore
138
- (tamper-evident WAL, OEA fields, Rust acceleration) is a commercial add-on.
139
- Contact [licensing@layer1labs.com](mailto:licensing@layer1labs.com) to obtain a license.
140
- See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
163
+ To obtain a chronomemory ESDB license:
164
+ [licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
165
+ See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
141
166
 
142
167
  **Update:**
143
168
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.13.1.dev522"
7
+ version = "0.13.1.dev534"
8
8
  description = "AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -60,7 +60,7 @@ dev = [
60
60
  # Install: pip install specsmith[esdb]
61
61
  # Activate: specsmith esdb enable --key-file /path/to/your.esdb.key
62
62
  esdb = [
63
- "chronomemory>=0.1.3", # proprietary commercial — see chronomemory LICENSE
63
+ "chronomemory>=0.1.4", # proprietary commercial — see chronomemory LICENSE
64
64
  "cryptography>=42.0",
65
65
  ]
66
66
  docs = [
@@ -4234,15 +4234,16 @@ def agent_ask_cmd(prompt: str, project_dir: str, as_json: bool) -> None:
4234
4234
  )
4235
4235
  action = "skills_hint"
4236
4236
  elif any(k in lower for k in ("esdb", "database", "backup", "export", "records")):
4237
- import specsmith.esdb as _esdb
4237
+ from specsmith.esdb import ESDB_BACKEND as _ESDB_BACKEND # noqa: PLC0415
4238
+ from specsmith.esdb import open_default_store as _open_default_store # noqa: PLC0415
4238
4239
 
4239
4240
  action = "esdb_status"
4240
4241
  try:
4241
- store = _esdb.open_default_store(project_dir, warn=False)
4242
+ store = _open_default_store(project_dir, warn=False)
4242
4243
  with store:
4243
4244
  count = store.record_count()
4244
4245
  chain_ok = store.chain_valid()
4245
- reply = f"ESDB: {_esdb.ESDB_BACKEND} | {count} records | chain_valid={chain_ok}"
4246
+ reply = f"ESDB: {_ESDB_BACKEND} | {count} records | chain_valid={chain_ok}"
4246
4247
  except Exception as exc: # noqa: BLE001
4247
4248
  reply = f"ESDB unavailable: {exc}"
4248
4249
  elif any(k in lower for k in ("mcp", "server", "tool server")):
@@ -98,7 +98,9 @@ except ImportError:
98
98
  """Stub module reference so 'from specsmith.esdb import query, metrics' works."""
99
99
 
100
100
  def __getattr__(self, name: str) -> "_Stub":
101
- raise ImportError(_INSTALL_HINT)
101
+ raise AttributeError( # noqa: TRY301
102
+ f"'{name}' is unavailable: {_INSTALL_HINT}"
103
+ )
102
104
 
103
105
  query = _StubModule() # type: ignore[assignment]
104
106
  metrics = _StubModule() # type: ignore[assignment]
@@ -44,7 +44,9 @@ except ImportError: # pragma: no cover
44
44
 
45
45
  class _StubModule: # noqa: F811
46
46
  def __getattr__(self, name: str) -> "_Stub":
47
- raise ImportError(_INSTALL_HINT)
47
+ raise AttributeError( # noqa: TRY301
48
+ f"'{name}' is unavailable: {_INSTALL_HINT}"
49
+ )
48
50
 
49
51
  EsdbBridge = EsdbRecord = EsdbStatus = ContextPackCompiler = DepGraph = _Stub # noqa: F811
50
52
  query = _StubModule() # noqa: F811
@@ -330,7 +330,7 @@ class SqliteStore:
330
330
  )
331
331
  counts["requirements"] += 1
332
332
  except (OSError, ValueError):
333
- pass
333
+ counts["skipped"] += 1 # file unreadable or invalid JSON
334
334
 
335
335
  test_path = state_dir / "testcases.json"
336
336
  if test_path.exists():
@@ -351,7 +351,7 @@ class SqliteStore:
351
351
  )
352
352
  counts["testcases"] += 1
353
353
  except (OSError, ValueError):
354
- pass
354
+ counts["skipped"] += 1 # file unreadable or invalid JSON
355
355
 
356
356
  return counts
357
357
 
@@ -71,7 +71,8 @@ def run_preflight(
71
71
  from specsmith import __version__
72
72
  from specsmith.agent.broker import Intent, classify_intent, infer_scope
73
73
 
74
- root = _safe_resolve(project_dir)
74
+ _safe_resolve(project_dir) # validate: reject null bytes and traversal sequences
75
+ root = Path(os.path.realpath(str(project_dir))) # CodeQL-visible sanitiser (py/path-injection)
75
76
  intent = classify_intent(utterance)
76
77
  # Requirements live at docs/REQUIREMENTS.md, not at the project root.
77
78
  # Falling back to root/REQUIREMENTS.md would always yield an empty list
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.13.1.dev522
3
+ Version: 0.13.1.dev534
4
4
  Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
5
5
  Author: Layer1Labs Silicon, Inc.
6
6
  License-Expression: MIT
@@ -40,7 +40,7 @@ Requires-Dist: pre-commit>=3.0; extra == "dev"
40
40
  Requires-Dist: types-pyyaml>=6.0; extra == "dev"
41
41
  Requires-Dist: cryptography>=42.0; extra == "dev"
42
42
  Provides-Extra: esdb
43
- Requires-Dist: chronomemory>=0.1.3; extra == "esdb"
43
+ Requires-Dist: chronomemory>=0.1.4; extra == "esdb"
44
44
  Requires-Dist: cryptography>=42.0; extra == "esdb"
45
45
  Provides-Extra: docs
46
46
  Requires-Dist: mkdocs>=1.6; extra == "docs"
@@ -204,18 +204,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
204
204
  command — not to library imports. Use this when you want the AEE belief-state machinery
205
205
  in your own application without managing a pipx environment.
206
206
 
207
- **ESDB ChronoStore (commercial, requires license):**
207
+ **ESDB Epistemic State Database**
208
+
209
+ | Tier | Package | License | What you get |
210
+ |------|---------|---------|-------------|
211
+ | **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
212
+ | **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
213
+
214
+ `pip install specsmith` always installs the **free SQLite backend** automatically.
215
+ No additional packages, no license key, no configuration — it works out of the box.
208
216
 
209
217
  ```bash
210
- pip install "specsmith[esdb]" # + chronomemory from PyPI (commercial requires license key)
218
+ specsmith esdb status # shows: SQLite (free, MIT)active by default
219
+ ```
220
+
221
+ **Upgrading to chronomemory ChronoStore (commercial):**
222
+
223
+ If you hold a chronomemory ESDB license, activate the commercial backend:
224
+
225
+ ```bash
226
+ # Step 1 — install the chronomemory package
227
+ pip install "specsmith[esdb]" # installs chronomemory from PyPI
228
+ # or if using pipx:
229
+ pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
230
+
231
+ # Step 2 — activate your license key
211
232
  specsmith esdb enable --key-file /path/to/your.esdb.key
212
- specsmith esdb status # confirms ChronoStore is active
233
+ # The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
234
+
235
+ # Step 3 — verify ChronoStore is active
236
+ specsmith esdb status
237
+ # ● ESDB — ChronoStore WAL (chronomemory commercial)
238
+ # ✔ License: your-org (expires YYYY-MM-DD)
213
239
  ```
214
240
 
215
- The default ESDB backend is SQLite (free, MIT, no license needed). ChronoStore
216
- (tamper-evident WAL, OEA fields, Rust acceleration) is a commercial add-on.
217
- Contact [licensing@layer1labs.com](mailto:licensing@layer1labs.com) to obtain a license.
218
- See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
241
+ To obtain a chronomemory ESDB license:
242
+ [licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
243
+ See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
219
244
 
220
245
  **Update:**
221
246
 
@@ -36,7 +36,7 @@ mkdocs>=1.6
36
36
  mkdocs-material>=9.5
37
37
 
38
38
  [esdb]
39
- chronomemory>=0.1.3
39
+ chronomemory>=0.1.4
40
40
  cryptography>=42.0
41
41
 
42
42
  [gemini]
@@ -159,7 +159,7 @@ def test_resolve_license_path_default(tmp_path: Path) -> None:
159
159
  specsmith_dir = tmp_path / ".specsmith"
160
160
  specsmith_dir.mkdir()
161
161
  _make_license_file(specsmith_dir, filename="esdb.key")
162
- import specsmith.esdb._license as lic_mod
162
+ from specsmith.esdb import _license as lic_mod # noqa: PLC0415
163
163
 
164
164
  def fake_home() -> Path:
165
165
  return tmp_path
@@ -634,8 +634,6 @@ class TestGovernanceReqListYamlMode:
634
634
 
635
635
  def test_yaml_mode_returns_new_req_despite_stale_cache(self, yaml_mode_project: Path) -> None:
636
636
  """REQ-364: governance_req_list in yaml_mode reads YAML, not JSON cache."""
637
- import specsmith.mcp_server as mcp_mod
638
-
639
637
  result = mcp_mod._handle_governance_req_list({"project_dir": str(yaml_mode_project)})
640
638
  req_ids = {r["id"] for r in result["reqs"]}
641
639
  assert "REQ-NEW" in req_ids, (
@@ -646,8 +644,6 @@ class TestGovernanceReqListYamlMode:
646
644
 
647
645
  def test_yaml_mode_coverage_from_yaml_tests(self, yaml_mode_project: Path) -> None:
648
646
  """Coverage is computed from YAML tests, not stale JSON cache."""
649
- import specsmith.mcp_server as mcp_mod
650
-
651
647
  result = mcp_mod._handle_governance_req_list({"project_dir": str(yaml_mode_project)})
652
648
  reqs_by_id = {r["id"]: r for r in result["reqs"]}
653
649
  # REQ-001 has a test in YAML → covered
@@ -657,8 +653,6 @@ class TestGovernanceReqListYamlMode:
657
653
 
658
654
  def test_legacy_mode_still_uses_json_cache(self, tmp_path: Path) -> None:
659
655
  """Non-yaml-mode projects still use the JSON cache (backward compat)."""
660
- import specsmith.mcp_server as mcp_mod
661
-
662
656
  state = tmp_path / ".specsmith"
663
657
  state.mkdir()
664
658
  # No governance-mode file → legacy mode