specsmith 0.13.1.dev535__tar.gz → 0.14.0__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.dev535/src/specsmith.egg-info → specsmith-0.14.0}/PKG-INFO +21 -8
  2. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/README.md +19 -6
  3. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/pyproject.toml +2 -2
  4. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/__init__.py +1 -1
  5. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/governance_logic.py +22 -17
  6. {specsmith-0.13.1.dev535 → specsmith-0.14.0/src/specsmith.egg-info}/PKG-INFO +21 -8
  7. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith.egg-info/requires.txt +1 -1
  8. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/LICENSE +0 -0
  9. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/setup.cfg +0 -0
  10. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/__init__.py +0 -0
  11. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/belief.py +0 -0
  12. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/certainty.py +0 -0
  13. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/failure_graph.py +0 -0
  14. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/py.typed +0 -0
  15. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/recovery.py +0 -0
  16. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/session.py +0 -0
  17. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/stress_tester.py +0 -0
  18. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/epistemic/trace.py +0 -0
  19. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/__main__.py +0 -0
  20. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/__init__.py +0 -0
  21. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/broker.py +0 -0
  22. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/chat_runner.py +0 -0
  23. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/cleanup.py +0 -0
  24. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/context_seed.py +0 -0
  25. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/core.py +0 -0
  26. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/__init__.py +0 -0
  27. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/_status.py +0 -0
  28. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/dag.py +0 -0
  29. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  30. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/events.py +0 -0
  31. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/dispatch/result.py +0 -0
  32. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/endpoints.py +0 -0
  33. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/events.py +0 -0
  34. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/execution_profiles.py +0 -0
  35. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/fallback.py +0 -0
  36. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/hf_leaderboard.py +0 -0
  37. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/hf_sync.py +0 -0
  38. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/indexer.py +0 -0
  39. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/llm_client.py +0 -0
  40. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/mcp.py +0 -0
  41. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/memory.py +0 -0
  42. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/model_intelligence.py +0 -0
  43. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/model_profiles.py +0 -0
  44. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/orchestrator.py +0 -0
  45. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/permissions.py +0 -0
  46. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/profiles.py +0 -0
  47. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/provider_registry.py +0 -0
  48. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/repl.py +0 -0
  49. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/router.py +0 -0
  50. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/rules.py +0 -0
  51. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/runner.py +0 -0
  52. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/safety.py +0 -0
  53. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/spawner.py +0 -0
  54. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/suggester.py +0 -0
  55. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/teams.py +0 -0
  56. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/tools.py +0 -0
  57. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/verifier.py +0 -0
  58. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/agent/voice.py +0 -0
  59. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/architect.py +0 -0
  60. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/auditor.py +0 -0
  61. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/auth.py +0 -0
  62. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/block_export.py +0 -0
  63. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/channel.py +0 -0
  64. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/ci_manager.py +0 -0
  65. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/cli.py +0 -0
  66. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/commands/__init__.py +0 -0
  67. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/commands/intelligence.py +0 -0
  68. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/__init__.py +0 -0
  69. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/_compat.py +0 -0
  70. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/checker.py +0 -0
  71. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/evidence.py +0 -0
  72. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/regulations.py +0 -0
  73. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compliance/reporter.py +0 -0
  74. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/compressor.py +0 -0
  75. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/config.py +0 -0
  76. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/console_utils.py +0 -0
  77. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/context_orchestrator.py +0 -0
  78. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/context_window.py +0 -0
  79. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/credit_analyzer.py +0 -0
  80. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/credits.py +0 -0
  81. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/__init__.py +0 -0
  82. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/base.py +0 -0
  83. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/citations.py +0 -0
  84. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/fpd.py +0 -0
  85. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/odp.py +0 -0
  86. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/patentsview.py +0 -0
  87. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/pfw.py +0 -0
  88. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/ppubs.py +0 -0
  89. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/datasources/ptab.py +0 -0
  90. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/differ.py +0 -0
  91. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/doctor.py +0 -0
  92. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/drive.py +0 -0
  93. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/editor.py +0 -0
  94. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/__init__.py +0 -0
  95. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/belief.py +0 -0
  96. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/certainty.py +0 -0
  97. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/failure_graph.py +0 -0
  98. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/recovery.py +0 -0
  99. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/epistemic/stress_tester.py +0 -0
  100. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/esdb/__init__.py +0 -0
  101. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/esdb/_license.py +0 -0
  102. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/esdb/bridge.py +0 -0
  103. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/esdb/sqlite_store.py +0 -0
  104. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/eval/__init__.py +0 -0
  105. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/eval/builtins.py +0 -0
  106. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/eval/runner.py +0 -0
  107. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/executor.py +0 -0
  108. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/exporter.py +0 -0
  109. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/governance_store.py +0 -0
  110. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/governance_yaml.py +0 -0
  111. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/__init__.py +0 -0
  112. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/app.py +0 -0
  113. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/main_window.py +0 -0
  114. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/session_tab.py +0 -0
  115. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/theme.py +0 -0
  116. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/__init__.py +0 -0
  117. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/chat_view.py +0 -0
  118. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/input_bar.py +0 -0
  119. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  120. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/token_meter.py +0 -0
  121. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  122. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/widgets/update_checker.py +0 -0
  123. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/gui/worker.py +0 -0
  124. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/history_search.py +0 -0
  125. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/importer.py +0 -0
  126. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/instinct.py +0 -0
  127. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/__init__.py +0 -0
  128. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/agent_skill.py +0 -0
  129. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/aider.py +0 -0
  130. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/base.py +0 -0
  131. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/claude_code.py +0 -0
  132. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/codity.py +0 -0
  133. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/copilot.py +0 -0
  134. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/cursor.py +0 -0
  135. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/gemini.py +0 -0
  136. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/integrations/windsurf.py +0 -0
  137. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/issue_reporter.py +0 -0
  138. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/languages.py +0 -0
  139. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/ledger.py +0 -0
  140. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/mcp_generator.py +0 -0
  141. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/mcp_server.py +0 -0
  142. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/__init__.py +0 -0
  143. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  144. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  145. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  146. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  147. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  148. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/m006_session_governance.py +0 -0
  149. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/migrations/runner.py +0 -0
  150. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/ollama_cmds.py +0 -0
  151. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/patent.py +0 -0
  152. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/paths.py +0 -0
  153. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/phase.py +0 -0
  154. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/plugins.py +0 -0
  155. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/profiles.py +0 -0
  156. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/rate_limits.py +0 -0
  157. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/releaser.py +0 -0
  158. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/requirements.py +0 -0
  159. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/requirements_parser.py +0 -0
  160. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/retrieval.py +0 -0
  161. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/safe_write.py +0 -0
  162. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/scaffolder.py +0 -0
  163. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/serve.py +0 -0
  164. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/session.py +0 -0
  165. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/session_init.py +0 -0
  166. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/session_store.py +0 -0
  167. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/__init__.py +0 -0
  168. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/ai_agents.py +0 -0
  169. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/cloud.py +0 -0
  170. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/corporate.py +0 -0
  171. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/cross_platform.py +0 -0
  172. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/data_engineering.py +0 -0
  173. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/devops.py +0 -0
  174. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/docs.py +0 -0
  175. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/embedded.py +0 -0
  176. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/governance.py +0 -0
  177. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/hardware.py +0 -0
  178. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/mobile.py +0 -0
  179. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/platform_engineering.py +0 -0
  180. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/productivity.py +0 -0
  181. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/software_engineering.py +0 -0
  182. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/specsmith_skills.py +0 -0
  183. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/ssh.py +0 -0
  184. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills/web_backend.py +0 -0
  185. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/skills_builder.py +0 -0
  186. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/sync.py +0 -0
  187. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/agents.md.j2 +0 -0
  188. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  189. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  190. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  191. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  192. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  193. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  194. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  195. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/community/security.md.j2 +0 -0
  196. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  197. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  198. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  199. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  200. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  201. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/editorconfig.j2 +0 -0
  202. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/gitattributes.j2 +0 -0
  203. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/gitignore.j2 +0 -0
  204. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/go/go.mod.j2 +0 -0
  205. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/go/main.go.j2 +0 -0
  206. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  207. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  208. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  209. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  210. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  211. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  212. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  213. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  214. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  215. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  216. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  217. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/js/package.json.j2 +0 -0
  218. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/ledger.md.j2 +0 -0
  219. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/python/cli.py.j2 +0 -0
  220. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/python/init.py.j2 +0 -0
  221. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  222. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/readme.md.j2 +0 -0
  223. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  224. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  225. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  226. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  227. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  228. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  229. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  230. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  231. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  232. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/tool_installer.py +0 -0
  233. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/toolrules.py +0 -0
  234. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/tools.py +0 -0
  235. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/trace.py +0 -0
  236. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/updater.py +0 -0
  237. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/upgrader.py +0 -0
  238. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/validator.py +0 -0
  239. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs/__init__.py +0 -0
  240. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs/base.py +0 -0
  241. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs/bitbucket.py +0 -0
  242. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs/github.py +0 -0
  243. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs/gitlab.py +0 -0
  244. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/vcs_commands.py +0 -0
  245. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/wireframes.py +0 -0
  246. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith/workspace.py +0 -0
  247. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith.egg-info/SOURCES.txt +0 -0
  248. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith.egg-info/dependency_links.txt +0 -0
  249. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith.egg-info/entry_points.txt +0 -0
  250. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/src/specsmith.egg-info/top_level.txt +0 -0
  251. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_CMD_001.py +0 -0
  252. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_agent_profiles.py +0 -0
  253. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_agent_run_feedback.py +0 -0
  254. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_agent_runner_ready.py +0 -0
  255. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_ai_client.py +0 -0
  256. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_ai_intelligence.py +0 -0
  257. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_auditor.py +0 -0
  258. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_channel.py +0 -0
  259. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_chat_diff_decision.py +0 -0
  260. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_chat_runner_openai_compat.py +0 -0
  261. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_chat_stdin_protocol.py +0 -0
  262. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_cli.py +0 -0
  263. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_cli_workflows_history_drive.py +0 -0
  264. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_compliance.py +0 -0
  265. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_compressor.py +0 -0
  266. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_dispatch.py +0 -0
  267. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_e2e_nexus.py +0 -0
  268. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_endpoints_cli.py +0 -0
  269. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_endpoints_store.py +0 -0
  270. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_epistemic.py +0 -0
  271. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_esdb_license.py +0 -0
  272. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_esdb_sqlite.py +0 -0
  273. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_fallback_chain.py +0 -0
  274. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_importer.py +0 -0
  275. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_integrations.py +0 -0
  276. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_integrations_codity.py +0 -0
  277. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_intelligence.py +0 -0
  278. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_issue_reporter.py +0 -0
  279. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_mcp_client.py +0 -0
  280. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_mcp_server.py +0 -0
  281. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_new_modules.py +0 -0
  282. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_nexus.py +0 -0
  283. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_permissions.py +0 -0
  284. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_phase1_4_new.py +0 -0
  285. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_phase34_completion.py +0 -0
  286. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_rate_limits.py +0 -0
  287. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_req_248_262.py +0 -0
  288. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_req_358_359.py +0 -0
  289. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_scaffolder.py +0 -0
  290. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_skill_marketplace.py +0 -0
  291. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_skills_mcp.py +0 -0
  292. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_smoke.py +0 -0
  293. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_suggester.py +0 -0
  294. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_tools.py +0 -0
  295. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_validator.py +0 -0
  296. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_vcs.py +0 -0
  297. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/tests/test_warp_parity.py +0 -0
  298. {specsmith-0.13.1.dev535 → specsmith-0.14.0}/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.dev535
3
+ Version: 0.14.0
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.5; extra == "esdb"
43
+ Requires-Dist: chronomemory>=0.1.6; 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"
@@ -93,7 +93,7 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
93
93
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
94
94
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
95
95
 
96
- **v0.13.0 — 16 new project types (LLM apps, MCP servers, Kubernetes operators, game dev, Web3, desktop, JVM and more), 131 built-in skills across 16 domains, EU AI Act / NIST AI RMF compliance, native Warp/Oz MCP governance server, multi-agent DAG dispatch, and context window management.**
96
+ **v0.14.0 — two-tier ESDB (free SQLite built-in + commercial ChronoStore via `specsmith[esdb]`), ESDB license gate, full ESDB CLI group, 10 CodeQL security fixes, chronomemory v0.1.6 support, and comprehensive ESDB documentation.**
97
97
  specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
98
98
  and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
99
99
  every AI-generated output is disclosed, context windows are GPU-aware and protected against
@@ -187,12 +187,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
187
187
  **Recommended — via pipx (CLI + CI):**
188
188
 
189
189
  ```bash
190
- pipx install specsmith # core CLI + epistemic library
191
- pipx inject specsmith anthropic # + Claude support
192
- pipx inject specsmith openai # + GPT / O-series support
193
- pipx inject specsmith google-generativeai # + Gemini support
190
+ pipx install specsmith
194
191
  ```
195
192
 
193
+ That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
194
+ and all governance commands work immediately with no additional packages.
195
+
196
+ > **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
197
+ > the built-in agentic REPL with a cloud API key:
198
+ >
199
+ > ```bash
200
+ > pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
201
+ > pipx inject specsmith openai # if you set OPENAI_API_KEY
202
+ > pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
203
+ > ```
204
+ >
205
+ > Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
206
+ > For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
207
+ > no injection needed.
208
+
196
209
  **Library-only use (venv / conda / any Python environment):**
197
210
 
198
211
  ```bash
@@ -226,7 +239,7 @@ If you hold a chronomemory ESDB license, activate the commercial backend:
226
239
  # Step 1 — install the chronomemory package
227
240
  pip install "specsmith[esdb]" # installs chronomemory from PyPI
228
241
  # or if using pipx:
229
- pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
242
+ pipx inject specsmith "chronomemory>=0.1.6" # inject into the specsmith pipx venv
230
243
 
231
244
  # Step 2 — activate your license key
232
245
  specsmith esdb enable --key-file /path/to/your.esdb.key
@@ -15,7 +15,7 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
15
15
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
16
16
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
17
17
 
18
- **v0.13.0 — 16 new project types (LLM apps, MCP servers, Kubernetes operators, game dev, Web3, desktop, JVM and more), 131 built-in skills across 16 domains, EU AI Act / NIST AI RMF compliance, native Warp/Oz MCP governance server, multi-agent DAG dispatch, and context window management.**
18
+ **v0.14.0 — two-tier ESDB (free SQLite built-in + commercial ChronoStore via `specsmith[esdb]`), ESDB license gate, full ESDB CLI group, 10 CodeQL security fixes, chronomemory v0.1.6 support, and comprehensive ESDB documentation.**
19
19
  specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
20
20
  and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
21
21
  every AI-generated output is disclosed, context windows are GPU-aware and protected against
@@ -109,12 +109,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
109
109
  **Recommended — via pipx (CLI + CI):**
110
110
 
111
111
  ```bash
112
- pipx install specsmith # core CLI + epistemic library
113
- pipx inject specsmith anthropic # + Claude support
114
- pipx inject specsmith openai # + GPT / O-series support
115
- pipx inject specsmith google-generativeai # + Gemini support
112
+ pipx install specsmith
116
113
  ```
117
114
 
115
+ That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
116
+ and all governance commands work immediately with no additional packages.
117
+
118
+ > **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
119
+ > the built-in agentic REPL with a cloud API key:
120
+ >
121
+ > ```bash
122
+ > pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
123
+ > pipx inject specsmith openai # if you set OPENAI_API_KEY
124
+ > pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
125
+ > ```
126
+ >
127
+ > Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
128
+ > For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
129
+ > no injection needed.
130
+
118
131
  **Library-only use (venv / conda / any Python environment):**
119
132
 
120
133
  ```bash
@@ -148,7 +161,7 @@ If you hold a chronomemory ESDB license, activate the commercial backend:
148
161
  # Step 1 — install the chronomemory package
149
162
  pip install "specsmith[esdb]" # installs chronomemory from PyPI
150
163
  # or if using pipx:
151
- pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
164
+ pipx inject specsmith "chronomemory>=0.1.6" # inject into the specsmith pipx venv
152
165
 
153
166
  # Step 2 — activate your license key
154
167
  specsmith esdb enable --key-file /path/to/your.esdb.key
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.13.1.dev535"
7
+ version = "0.14.0"
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.5", # proprietary commercial — see chronomemory LICENSE
63
+ "chronomemory>=0.1.6", # proprietary commercial — see chronomemory LICENSE
64
64
  "cryptography>=42.0",
65
65
  ]
66
66
  docs = [
@@ -8,4 +8,4 @@ from importlib.metadata import version as _pkg_version
8
8
  try:
9
9
  __version__: str = _pkg_version("specsmith")
10
10
  except PackageNotFoundError: # running from source without install
11
- __version__ = "0.13.1" # fallback: keep in sync with pyproject.toml
11
+ __version__ = "0.14.0" # fallback: keep in sync with pyproject.toml
@@ -72,24 +72,29 @@ def run_preflight(
72
72
  from specsmith.agent.broker import Intent, classify_intent, infer_scope
73
73
 
74
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
+ # os.path.realpath breaks the taint chain and returns a clean plain str.
76
+ # ALL subsequent path construction uses os.path.join on _root_str — never
77
+ # the Path / operator on root — so CodeQL never re-acquires the taint from
78
+ # project_dir through a Path object.
79
+ _root_str: str = os.path.realpath(str(project_dir))
76
80
  intent = classify_intent(utterance)
77
81
  # Requirements live at docs/REQUIREMENTS.md, not at the project root.
78
82
  # Falling back to root/REQUIREMENTS.md would always yield an empty list
79
83
  # on standard projects, causing preflight to always return
80
84
  # needs_clarification (GitHub issue #197).
81
- _req_md = root / "docs" / "REQUIREMENTS.md"
85
+ _req_md = Path(os.path.realpath(os.path.join(_root_str, "docs", "REQUIREMENTS.md")))
82
86
  if not _req_md.exists():
83
- _req_md = root / "REQUIREMENTS.md" # legacy fallback
87
+ _req_md = Path(os.path.realpath(os.path.join(_root_str, "REQUIREMENTS.md"))) # legacy
88
+ _repo_idx = Path(os.path.realpath(os.path.join(_root_str, ".repo-index", "files.json")))
84
89
  scope = infer_scope(
85
90
  utterance,
86
91
  _req_md,
87
- repo_index_path=root / ".repo-index" / "files.json",
92
+ repo_index_path=_repo_idx,
88
93
  )
89
94
 
90
95
  requirement_ids = [r.req_id for r in scope.matched_requirements]
91
96
 
92
- # ── Direct ID extraction (fix #166) ──────────────────────────────────────
97
+ # ── Direct ID extraction (fix #166) ───────────────────────────────────────────
93
98
  # If the utterance contains explicit REQ-*/TEST-* IDs, look them up in the
94
99
  # JSON machine state and merge them in — this handles project-prefixed IDs
95
100
  # (e.g. REQ-NN-001, TEST-NN-002a) that token overlap may not catch.
@@ -98,12 +103,10 @@ def run_preflight(
98
103
  explicit_req_ids = [m.upper() for m in _EXPLICIT_REQ.findall(utterance)]
99
104
  explicit_test_ids = [m.upper() for m in _EXPLICIT_TEST.findall(utterance)]
100
105
 
101
- # Read requirements machine-state inline so CodeQL can trace the full
102
- # sanitisation chain from _safe_resolve root literal child path.
103
- # (Helper functions with a root: Path parameter are analysed conservatively
104
- # by CodeQL and can re-introduce py/path-injection alerts.)
106
+ # Read requirements machine-state using os.path.join on the clean _root_str
107
+ # so CodeQL traces the full sanitisation chain without re-tainting via Path.
105
108
  rq_records: list[Any] = []
106
- rq_path = (root / ".specsmith" / "requirements.json").resolve()
109
+ rq_path = Path(os.path.realpath(os.path.join(_root_str, ".specsmith", "requirements.json")))
107
110
  if rq_path.is_file():
108
111
  try:
109
112
  _rq = _json.loads(rq_path.read_text(encoding="utf-8"))
@@ -117,10 +120,10 @@ def run_preflight(
117
120
  if eid in known_req_ids and eid not in requirement_ids:
118
121
  requirement_ids.append(eid)
119
122
 
120
- # Read test-case machine-state inline (same rationale as above).
123
+ # Read test-case machine-state (same rationale as above).
121
124
  test_case_ids: list[str] = []
122
125
  tc_records: list[Any] = []
123
- tc_path = (root / ".specsmith" / "testcases.json").resolve()
126
+ tc_path = Path(os.path.realpath(os.path.join(_root_str, ".specsmith", "testcases.json")))
124
127
  if tc_path.is_file():
125
128
  try:
126
129
  _tc = _json.loads(tc_path.read_text(encoding="utf-8"))
@@ -187,8 +190,9 @@ def run_preflight(
187
190
  )
188
191
  confidence_target = 0.7
189
192
 
190
- # Config floor (REQ-098)
191
- cfg_threshold = _read_confidence_threshold(root)
193
+ # Config floor (REQ-098) — pass _root_str so the helper never receives
194
+ # a tainted Path object derived from project_dir.
195
+ cfg_threshold = _read_confidence_threshold(_root_str)
192
196
  if cfg_threshold is not None and cfg_threshold > confidence_target:
193
197
  confidence_target = cfg_threshold
194
198
 
@@ -1015,9 +1019,10 @@ def _resolve_provider_name() -> str:
1015
1019
  return "byoe"
1016
1020
 
1017
1021
 
1018
- def _read_confidence_threshold(root: Path) -> float | None:
1019
- # .resolve() clears CodeQL py/path-injection taint; path has a constant suffix.
1020
- cfg = (root / ".specsmith" / "config.yml").resolve()
1022
+ def _read_confidence_threshold(root: Path | str) -> float | None:
1023
+ # Use os.path.join + os.path.realpath on the plain-string form so CodeQL
1024
+ # sees the sanitiser inline and does not flag cfg.is_file() or cfg.read_text().
1025
+ cfg = Path(os.path.realpath(os.path.join(str(root), ".specsmith", "config.yml")))
1021
1026
  if not cfg.is_file():
1022
1027
  return None
1023
1028
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.13.1.dev535
3
+ Version: 0.14.0
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.5; extra == "esdb"
43
+ Requires-Dist: chronomemory>=0.1.6; 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"
@@ -93,7 +93,7 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
93
93
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
94
94
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
95
95
 
96
- **v0.13.0 — 16 new project types (LLM apps, MCP servers, Kubernetes operators, game dev, Web3, desktop, JVM and more), 131 built-in skills across 16 domains, EU AI Act / NIST AI RMF compliance, native Warp/Oz MCP governance server, multi-agent DAG dispatch, and context window management.**
96
+ **v0.14.0 — two-tier ESDB (free SQLite built-in + commercial ChronoStore via `specsmith[esdb]`), ESDB license gate, full ESDB CLI group, 10 CodeQL security fixes, chronomemory v0.1.6 support, and comprehensive ESDB documentation.**
97
97
  specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
98
98
  and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
99
99
  every AI-generated output is disclosed, context windows are GPU-aware and protected against
@@ -187,12 +187,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
187
187
  **Recommended — via pipx (CLI + CI):**
188
188
 
189
189
  ```bash
190
- pipx install specsmith # core CLI + epistemic library
191
- pipx inject specsmith anthropic # + Claude support
192
- pipx inject specsmith openai # + GPT / O-series support
193
- pipx inject specsmith google-generativeai # + Gemini support
190
+ pipx install specsmith
194
191
  ```
195
192
 
193
+ That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
194
+ and all governance commands work immediately with no additional packages.
195
+
196
+ > **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
197
+ > the built-in agentic REPL with a cloud API key:
198
+ >
199
+ > ```bash
200
+ > pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
201
+ > pipx inject specsmith openai # if you set OPENAI_API_KEY
202
+ > pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
203
+ > ```
204
+ >
205
+ > Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
206
+ > For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
207
+ > no injection needed.
208
+
196
209
  **Library-only use (venv / conda / any Python environment):**
197
210
 
198
211
  ```bash
@@ -226,7 +239,7 @@ If you hold a chronomemory ESDB license, activate the commercial backend:
226
239
  # Step 1 — install the chronomemory package
227
240
  pip install "specsmith[esdb]" # installs chronomemory from PyPI
228
241
  # or if using pipx:
229
- pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
242
+ pipx inject specsmith "chronomemory>=0.1.6" # inject into the specsmith pipx venv
230
243
 
231
244
  # Step 2 — activate your license key
232
245
  specsmith esdb enable --key-file /path/to/your.esdb.key
@@ -36,7 +36,7 @@ mkdocs>=1.6
36
36
  mkdocs-material>=9.5
37
37
 
38
38
  [esdb]
39
- chronomemory>=0.1.5
39
+ chronomemory>=0.1.6
40
40
  cryptography>=42.0
41
41
 
42
42
  [gemini]
File without changes
File without changes