specsmith 0.10.1.dev281__tar.gz → 0.10.1.dev282__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 (219) hide show
  1. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/PKG-INFO +228 -8
  2. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/README.md +227 -7
  3. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/pyproject.toml +1 -1
  4. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/PKG-INFO +228 -8
  5. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/LICENSE +0 -0
  6. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/setup.cfg +0 -0
  7. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/__init__.py +0 -0
  8. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/belief.py +0 -0
  9. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/certainty.py +0 -0
  10. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/failure_graph.py +0 -0
  11. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/py.typed +0 -0
  12. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/recovery.py +0 -0
  13. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/session.py +0 -0
  14. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/stress_tester.py +0 -0
  15. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/epistemic/trace.py +0 -0
  16. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/__init__.py +0 -0
  17. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/__main__.py +0 -0
  18. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/__init__.py +0 -0
  19. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/broker.py +0 -0
  20. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/chat_runner.py +0 -0
  21. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/cleanup.py +0 -0
  22. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/core.py +0 -0
  23. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/endpoints.py +0 -0
  24. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/events.py +0 -0
  25. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/execution_profiles.py +0 -0
  26. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/fallback.py +0 -0
  27. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/indexer.py +0 -0
  28. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/mcp.py +0 -0
  29. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/memory.py +0 -0
  30. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/model_intelligence.py +0 -0
  31. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/orchestrator.py +0 -0
  32. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/permissions.py +0 -0
  33. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/profiles.py +0 -0
  34. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/provider_registry.py +0 -0
  35. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/repl.py +0 -0
  36. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/router.py +0 -0
  37. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/rules.py +0 -0
  38. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/runner.py +0 -0
  39. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/safety.py +0 -0
  40. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/suggester.py +0 -0
  41. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/tools.py +0 -0
  42. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/verifier.py +0 -0
  43. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/agent/voice.py +0 -0
  44. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/architect.py +0 -0
  45. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/auditor.py +0 -0
  46. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/auth.py +0 -0
  47. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/block_export.py +0 -0
  48. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/cli.py +0 -0
  49. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/commands/__init__.py +0 -0
  50. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/commands/intelligence.py +0 -0
  51. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/compressor.py +0 -0
  52. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/config.py +0 -0
  53. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/console_utils.py +0 -0
  54. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/context_window.py +0 -0
  55. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/credit_analyzer.py +0 -0
  56. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/credits.py +0 -0
  57. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/__init__.py +0 -0
  58. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/base.py +0 -0
  59. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/citations.py +0 -0
  60. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/fpd.py +0 -0
  61. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/odp.py +0 -0
  62. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/patentsview.py +0 -0
  63. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/pfw.py +0 -0
  64. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/ppubs.py +0 -0
  65. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/datasources/ptab.py +0 -0
  66. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/differ.py +0 -0
  67. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/doctor.py +0 -0
  68. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/drive.py +0 -0
  69. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/editor.py +0 -0
  70. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/__init__.py +0 -0
  71. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/belief.py +0 -0
  72. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/certainty.py +0 -0
  73. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/failure_graph.py +0 -0
  74. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/recovery.py +0 -0
  75. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/stress_tester.py +0 -0
  76. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/executor.py +0 -0
  77. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/exporter.py +0 -0
  78. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/governance_logic.py +0 -0
  79. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/__init__.py +0 -0
  80. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/app.py +0 -0
  81. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/main_window.py +0 -0
  82. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/session_tab.py +0 -0
  83. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/theme.py +0 -0
  84. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/__init__.py +0 -0
  85. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/chat_view.py +0 -0
  86. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/input_bar.py +0 -0
  87. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  88. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/token_meter.py +0 -0
  89. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  90. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/update_checker.py +0 -0
  91. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/gui/worker.py +0 -0
  92. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/history_search.py +0 -0
  93. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/importer.py +0 -0
  94. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/instinct.py +0 -0
  95. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/__init__.py +0 -0
  96. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/agent_skill.py +0 -0
  97. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/aider.py +0 -0
  98. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/base.py +0 -0
  99. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/claude_code.py +0 -0
  100. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/copilot.py +0 -0
  101. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/cursor.py +0 -0
  102. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/gemini.py +0 -0
  103. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/integrations/windsurf.py +0 -0
  104. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/languages.py +0 -0
  105. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/ledger.py +0 -0
  106. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/patent.py +0 -0
  107. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/paths.py +0 -0
  108. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/phase.py +0 -0
  109. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/plugins.py +0 -0
  110. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/profiles.py +0 -0
  111. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/rate_limits.py +0 -0
  112. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/releaser.py +0 -0
  113. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/requirements.py +0 -0
  114. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/requirements_parser.py +0 -0
  115. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/retrieval.py +0 -0
  116. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/safe_write.py +0 -0
  117. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/scaffolder.py +0 -0
  118. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/serve.py +0 -0
  119. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/session.py +0 -0
  120. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/skills.py +0 -0
  121. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/sync.py +0 -0
  122. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/agents.md.j2 +0 -0
  123. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  124. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  125. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  126. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  127. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  128. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  129. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  130. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/security.md.j2 +0 -0
  131. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  132. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  133. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  134. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  135. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  136. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/editorconfig.j2 +0 -0
  137. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/gitattributes.j2 +0 -0
  138. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/gitignore.j2 +0 -0
  139. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/go/go.mod.j2 +0 -0
  140. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/go/main.go.j2 +0 -0
  141. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  142. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  143. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  144. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  145. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  146. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  147. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  148. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  149. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  150. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  151. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  152. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/js/package.json.j2 +0 -0
  153. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/ledger.md.j2 +0 -0
  154. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/cli.py.j2 +0 -0
  155. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/init.py.j2 +0 -0
  156. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  157. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/readme.md.j2 +0 -0
  158. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  159. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  160. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  161. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  162. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  163. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  164. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  165. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  166. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  167. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/tool_installer.py +0 -0
  168. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/toolrules.py +0 -0
  169. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/tools.py +0 -0
  170. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/trace.py +0 -0
  171. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/updater.py +0 -0
  172. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/upgrader.py +0 -0
  173. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/validator.py +0 -0
  174. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs/__init__.py +0 -0
  175. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs/base.py +0 -0
  176. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs/bitbucket.py +0 -0
  177. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs/github.py +0 -0
  178. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs/gitlab.py +0 -0
  179. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/vcs_commands.py +0 -0
  180. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/wireframes.py +0 -0
  181. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith/workspace.py +0 -0
  182. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/SOURCES.txt +0 -0
  183. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/dependency_links.txt +0 -0
  184. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/entry_points.txt +0 -0
  185. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/requires.txt +0 -0
  186. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/top_level.txt +0 -0
  187. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_CMD_001.py +0 -0
  188. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_agent_profiles.py +0 -0
  189. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_agent_runner_ready.py +0 -0
  190. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_auditor.py +0 -0
  191. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_chat_diff_decision.py +0 -0
  192. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_chat_runner_openai_compat.py +0 -0
  193. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_chat_stdin_protocol.py +0 -0
  194. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_cli.py +0 -0
  195. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_cli_workflows_history_drive.py +0 -0
  196. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_compliance.py +0 -0
  197. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_compressor.py +0 -0
  198. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_e2e_nexus.py +0 -0
  199. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_endpoints_cli.py +0 -0
  200. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_endpoints_store.py +0 -0
  201. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_epistemic.py +0 -0
  202. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_fallback_chain.py +0 -0
  203. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_importer.py +0 -0
  204. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_integrations.py +0 -0
  205. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_mcp_client.py +0 -0
  206. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_nexus.py +0 -0
  207. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_permissions.py +0 -0
  208. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_phase1_4_new.py +0 -0
  209. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_phase34_completion.py +0 -0
  210. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_rate_limits.py +0 -0
  211. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_scaffolder.py +0 -0
  212. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_skill_marketplace.py +0 -0
  213. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_smoke.py +0 -0
  214. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_suggester.py +0 -0
  215. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_tools.py +0 -0
  216. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_validator.py +0 -0
  217. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_vcs.py +0 -0
  218. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/tests/test_warp_parity.py +0 -0
  219. {specsmith-0.10.1.dev281 → specsmith-0.10.1.dev282}/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.dev281
3
+ Version: 0.10.1.dev282
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
@@ -78,6 +78,7 @@ Dynamic: license-file
78
78
  [![PyPI](https://img.shields.io/pypi/v/specsmith?label=stable&style=flat&color=blue&cacheSeconds=60)](https://pypi.org/project/specsmith/)
79
79
  [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
80
80
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
81
+
81
82
  **Applied Epistemic Engineering toolkit for AI-assisted development.**
82
83
 
83
84
  > Intelligence proposes. Constraints decide. The ledger remembers.
@@ -86,17 +87,19 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
86
87
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
87
88
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
88
89
 
89
- **0.10.1Governance REST API, machine-state sync, and least-privilege permissions.**
90
- Specsmith now serves as the governance backend for Kairos (the epistemically-governed
91
- Rust terminal) via `specsmith governance-serve`, keeps `.specsmith/` JSON in sync
92
- with `docs/` Markdown via `specsmith sync`, and gates every agent tool call via
93
- `specsmith agent permissions-check`. Multi-agent profiles, BYOE endpoints, and the
94
- AEE phase lifecycle are all fully wired.
90
+ **0.11.0EU AI Act / NIST AI RMF compliance, context window management, and governance tools panel.**
91
+ Specsmith now ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
92
+ and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
93
+ every AI-generated output is disclosed, context windows are GPU-aware and protected against
94
+ overflow, and a dedicated governance tools panel in Kairos surfaces compliance settings
95
+ per-session and per-project.
95
96
 
96
97
  ```bash
97
98
  specsmith governance-serve --port 7700 # Kairos governance REST API
98
99
  specsmith sync # sync .specsmith/ from docs/ markdown
99
- specsmith agent permissions-check git_push # check tool permission (REG-012)
100
+ specsmith agent permissions-check git_push # check tool permission (REQ-012)
101
+ specsmith ollama gpu # detect GPU VRAM, recommend context size
102
+ specsmith export # generate full compliance report
100
103
  ```
101
104
 
102
105
  It also co-installs the standalone `epistemic` Python library for direct use in any project:
@@ -241,6 +244,223 @@ agent:
241
244
 
242
245
  ---
243
246
 
247
+ ## AI Compliance & Governance
248
+
249
+ specsmith is designed from the ground up for **auditable, explainable, and human-overseen AI**.
250
+ It implements concrete compliance mechanisms mapped to the two major regulatory frameworks
251
+ that govern AI systems in production today.
252
+
253
+ ### Standards Coverage
254
+
255
+ **EU AI Act (Regulation 2024/1689)** — The world's first comprehensive legal framework for AI,
256
+ enforced across the European Union. High-risk AI systems must provide transparency, auditability,
257
+ human oversight, and robustness. specsmith implements:
258
+
259
+ | EU AI Act Requirement | specsmith Mechanism |
260
+ |---|---|
261
+ | Art. 9 — Risk Management System | AEE verification loop with confidence scoring and equilibrium checks |
262
+ | Art. 12 — Logging & Record-Keeping | `TraceVault` SHA-256 chained ledger (tamper-evident, append-only) |
263
+ | Art. 13 — Transparency & Explainability | `ai_disclosure` block in every preflight response; `/why` in Nexus REPL |
264
+ | Art. 14 — Human Oversight | Human escalation threshold (`--escalate-threshold`); kill-switch CLI |
265
+ | Art. 15 — Accuracy & Robustness | Bounded retry (max 3×), confidence gates, hard context ceiling (REQ-247) |
266
+ | Art. 53 — GPAI Model Transparency | Provider + model name emitted in every `ai_disclosure` block |
267
+
268
+ **NIST AI Risk Management Framework 1.0 (AI RMF)** — The US standard for managing AI risk
269
+ across the AI lifecycle. specsmith addresses all four core functions:
270
+
271
+ | NIST AI RMF Function | specsmith Mechanism |
272
+ |---|---|
273
+ | **GOVERN** — Policies & accountability | Governance rules (H1–H13), permissions profile, `scaffold.yml` policy |
274
+ | **MAP** — Risk identification | AEE stress-test, belief graph, contradictions and uncertainty metrics |
275
+ | **MEASURE** — Risk analysis | Confidence scoring, epistemic equilibrium, `specsmith epistemic-audit` |
276
+ | **MANAGE** — Risk treatment | Kill-switch, escalation, bounded retry, safe-write backup, permissions deny-list |
277
+
278
+ ### How Each Compliance Mechanism Works
279
+
280
+ #### 1. Tamper-Evident Audit Log — `TraceVault` (REQ-206)
281
+
282
+ Every agent action, decision, milestone, and audit gate is recorded as a JSONL entry in
283
+ `.specsmith/trace.jsonl`. Each entry contains a SHA-256 hash of its own content plus the
284
+ hash of the previous entry, forming a cryptographic chain:
285
+
286
+ ```jsonl
287
+ {"seq":1, "type":"DECISION", "description":"...", "hash":"a3f9...", "prev":"genesis"}
288
+ {"seq":2, "type":"MILESTONE", "description":"...", "hash":"7c2b...", "prev":"a3f9..."}
289
+ ```
290
+
291
+ Any modification to a past entry breaks every subsequent hash. `specsmith trace verify`
292
+ detects and reports the first corrupted entry. The file is append-only — overwrites are
293
+ blocked by `safe_write`. This satisfies **EU AI Act Art. 12** (logging and record-keeping)
294
+ and **NIST AI RMF GOVERN** (accountability trail).
295
+
296
+ #### 2. AI Disclosure — Every Response (REQ-207)
297
+
298
+ Every preflight response includes a mandatory `ai_disclosure` block:
299
+
300
+ ```json
301
+ {
302
+ "ai_disclosure": {
303
+ "governed_by": "specsmith",
304
+ "governance_gated": true,
305
+ "provider": "ollama",
306
+ "model": "qwen2.5:14b",
307
+ "spec_version": "0.11.0"
308
+ }
309
+ }
310
+ ```
311
+
312
+ This ensures every AI-generated output is traceable to its source model and version,
313
+ meeting **EU AI Act Art. 13** (transparency) and **Art. 53** (GPAI transparency).
314
+ It is impossible to suppress — the field is injected at the governance layer before
315
+ any response is returned to the client.
316
+
317
+ #### 3. Human Escalation — Configurable Threshold (REQ-209)
318
+
319
+ When an action's confidence is below the escalation threshold, specsmith sets
320
+ `escalation_required: true` and includes an `escalation_reason` in the preflight payload.
321
+ Kairos surfaces this as a confirmation dialog before execution proceeds.
322
+
323
+ ```bash
324
+ specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
325
+ # → escalation_required: true, escalation_reason: "confidence 0.71 < threshold 0.85"
326
+ ```
327
+
328
+ This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE**.
329
+
330
+ #### 4. Kill-Switch — Immediate Session Termination (REQ-210)
331
+
332
+ A `kill-session` CLI command and keyboard shortcut (surfaced in Kairos) immediately
333
+ terminates all active agent sessions and records a timestamped kill event in `LEDGER.md`:
334
+
335
+ ```bash
336
+ specsmith kill-session # terminate all sessions, log kill event
337
+ specsmith kill-session --session abc123 # terminate a specific session
338
+ ```
339
+
340
+ This satisfies **EU AI Act Art. 14 §4** (ability to intervene and stop the AI system)
341
+ and is required for certification of high-risk AI systems.
342
+
343
+ #### 5. Append-Only Safe Write — `safe_write` (REQ-213)
344
+
345
+ All governance file writes go through `safe_write`, which:
346
+ - **Appends** to `LEDGER.md` and `.specsmith/ledger.jsonl` — never truncates
347
+ - **Backs up** any file before overwriting it (timestamped `.bak` copy)
348
+ - **Prevents** accidental destruction of audit history
349
+
350
+ This satisfies **EU AI Act Art. 12** (records must be kept for the lifetime of the system)
351
+ and provides recovery capability per **NIST AI RMF MANAGE**.
352
+
353
+ #### 6. Least-Privilege Permissions (REQ-217, REQ-012)
354
+
355
+ Every agent tool call is gated through a permission profile. Tools outside the active
356
+ profile are denied with exit code 3 and a ledger entry:
357
+
358
+ ```bash
359
+ specsmith agent permissions-check git_push # exit 0 = allowed, exit 3 = denied
360
+ specsmith agent permissions # show active profile
361
+ ```
362
+
363
+ Four built-in presets (`read_only`, `standard`, `extended`, `admin`) plus full
364
+ custom allow/deny lists in `.specsmith/config.yml`. This implements **NIST AI RMF GOVERN**
365
+ (policy enforcement) and principle of least privilege per standard security practice.
366
+
367
+ #### 7. Policy Guardrails — `is_safe_command` (REQ-220)
368
+
369
+ Before any shell command is executed, `agent.safety.is_safe_command()` classifies it
370
+ against a deny list of destructive patterns (`rm -rf`, `git push origin main`,
371
+ `kubectl apply`, `cat .env`, etc.). Denied commands are blocked and logged.
372
+ This implements **NIST AI RMF MANAGE** (risk treatment at the action level).
373
+
374
+ #### 8. Compliance Export Report (REQ-208, REQ-215)
375
+
376
+ `specsmith export` generates a full compliance report containing:
377
+ - **AI System Inventory** — all providers, models, and versions used
378
+ - **Risk Classification** — AEE phase, confidence scores, open work items
379
+ - **Human Oversight Controls** — active permission profile, escalation settings, kill-switch state
380
+ - **Audit Trail Summary** — TraceVault chain length, last verification, any tampering
381
+
382
+ ```bash
383
+ specsmith export --format markdown > compliance-report.md
384
+ specsmith export --format json > compliance-report.json
385
+ ```
386
+
387
+ This report is suitable for submission to regulators, internal audit teams, or
388
+ SOC-2 / ISO-42001 reviewers.
389
+
390
+ ### Compliance per Session and per Project
391
+
392
+ Compliance settings are layered:
393
+
394
+ 1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
395
+ 2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
396
+ 3. **Per-session overrides** — Kairos Governance panel or CLI flags
397
+
398
+ The Kairos **Governance Tools Panel** (Settings → Governance) exposes all compliance
399
+ controls in a live UI: escalation threshold, permission profile, kill-switch, audit log
400
+ viewer, and context window settings. Changes take effect immediately for the active
401
+ session and can optionally be written back to the per-project `.specsmith/config.yml`.
402
+
403
+ ---
404
+
405
+ ## Context Window Management
406
+
407
+ specsmith enforces safe, efficient use of LLM context windows — especially critical
408
+ when running local models via Ollama where the context limit directly affects GPU VRAM.
409
+
410
+ ### GPU-Aware Context Sizing (REQ-244)
411
+
412
+ ```bash
413
+ specsmith ollama gpu # detect GPU VRAM (NVIDIA + AMD supported)
414
+ specsmith ollama available # show models within your VRAM budget
415
+ ```
416
+
417
+ VRAM tiers and recommended context sizes:
418
+
419
+ | VRAM | Recommended Context |
420
+ |---|---|
421
+ | < 6 GB (CPU or low-end GPU) | 4,096 tokens |
422
+ | 6–11 GB | 8,192 tokens |
423
+ | 12–19 GB | 16,384 tokens |
424
+ | 20 GB+ | 32,768 tokens |
425
+
426
+ Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.specsmith/config.yml`.
427
+
428
+ ### Live Context Fill Indicator (REQ-245)
429
+
430
+ The context fill tracker emits real-time JSONL events consumed by Kairos:
431
+
432
+ ```jsonl
433
+ {"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
434
+ ```
435
+
436
+ Kairos displays a compact fill bar in the agent footer. When fill reaches the
437
+ compression threshold (default 80%), specsmith signals that context summarization
438
+ should run before the next turn.
439
+
440
+ ### Auto Context Compression (REQ-246)
441
+
442
+ When fill reaches the compression threshold, specsmith automatically triggers
443
+ conversation summarization — the current context is condensed to a compact summary
444
+ that preserves key decisions and facts while freeing window space. This happens
445
+ transparently before the next agent turn.
446
+
447
+ Configure in `.specsmith/config.yml`:
448
+
449
+ ```yaml
450
+ context:
451
+ compression_threshold_pct: 80 # trigger summarization at 80% fill
452
+ auto_compress: true # enable automatic compression
453
+ ```
454
+
455
+ ### Hard Context Ceiling — Never 100% Full (REQ-247)
456
+
457
+ A hard reservation of **15% of the context window** (minimum 2,048 tokens) is always
458
+ held back for the governance layer. Attempts to fill beyond the effective ceiling raise
459
+ `ContextFullError` — making it impossible to reach a state where even a compression
460
+ request cannot be processed. This is a safety invariant, not a configuration option.
461
+
462
+ ---
463
+
244
464
  ## Kairos + Governance REST API
245
465
 
246
466
  **Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
@@ -6,6 +6,7 @@
6
6
  [![PyPI](https://img.shields.io/pypi/v/specsmith?label=stable&style=flat&color=blue&cacheSeconds=60)](https://pypi.org/project/specsmith/)
7
7
  [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
8
8
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
+
9
10
  **Applied Epistemic Engineering toolkit for AI-assisted development.**
10
11
 
11
12
  > Intelligence proposes. Constraints decide. The ledger remembers.
@@ -14,17 +15,19 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
14
15
  epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
15
16
  cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
16
17
 
17
- **0.10.1Governance REST API, machine-state sync, and least-privilege permissions.**
18
- Specsmith now serves as the governance backend for Kairos (the epistemically-governed
19
- Rust terminal) via `specsmith governance-serve`, keeps `.specsmith/` JSON in sync
20
- with `docs/` Markdown via `specsmith sync`, and gates every agent tool call via
21
- `specsmith agent permissions-check`. Multi-agent profiles, BYOE endpoints, and the
22
- AEE phase lifecycle are all fully wired.
18
+ **0.11.0EU AI Act / NIST AI RMF compliance, context window management, and governance tools panel.**
19
+ Specsmith now ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
20
+ and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
21
+ every AI-generated output is disclosed, context windows are GPU-aware and protected against
22
+ overflow, and a dedicated governance tools panel in Kairos surfaces compliance settings
23
+ per-session and per-project.
23
24
 
24
25
  ```bash
25
26
  specsmith governance-serve --port 7700 # Kairos governance REST API
26
27
  specsmith sync # sync .specsmith/ from docs/ markdown
27
- specsmith agent permissions-check git_push # check tool permission (REG-012)
28
+ specsmith agent permissions-check git_push # check tool permission (REQ-012)
29
+ specsmith ollama gpu # detect GPU VRAM, recommend context size
30
+ specsmith export # generate full compliance report
28
31
  ```
29
32
 
30
33
  It also co-installs the standalone `epistemic` Python library for direct use in any project:
@@ -169,6 +172,223 @@ agent:
169
172
 
170
173
  ---
171
174
 
175
+ ## AI Compliance & Governance
176
+
177
+ specsmith is designed from the ground up for **auditable, explainable, and human-overseen AI**.
178
+ It implements concrete compliance mechanisms mapped to the two major regulatory frameworks
179
+ that govern AI systems in production today.
180
+
181
+ ### Standards Coverage
182
+
183
+ **EU AI Act (Regulation 2024/1689)** — The world's first comprehensive legal framework for AI,
184
+ enforced across the European Union. High-risk AI systems must provide transparency, auditability,
185
+ human oversight, and robustness. specsmith implements:
186
+
187
+ | EU AI Act Requirement | specsmith Mechanism |
188
+ |---|---|
189
+ | Art. 9 — Risk Management System | AEE verification loop with confidence scoring and equilibrium checks |
190
+ | Art. 12 — Logging & Record-Keeping | `TraceVault` SHA-256 chained ledger (tamper-evident, append-only) |
191
+ | Art. 13 — Transparency & Explainability | `ai_disclosure` block in every preflight response; `/why` in Nexus REPL |
192
+ | Art. 14 — Human Oversight | Human escalation threshold (`--escalate-threshold`); kill-switch CLI |
193
+ | Art. 15 — Accuracy & Robustness | Bounded retry (max 3×), confidence gates, hard context ceiling (REQ-247) |
194
+ | Art. 53 — GPAI Model Transparency | Provider + model name emitted in every `ai_disclosure` block |
195
+
196
+ **NIST AI Risk Management Framework 1.0 (AI RMF)** — The US standard for managing AI risk
197
+ across the AI lifecycle. specsmith addresses all four core functions:
198
+
199
+ | NIST AI RMF Function | specsmith Mechanism |
200
+ |---|---|
201
+ | **GOVERN** — Policies & accountability | Governance rules (H1–H13), permissions profile, `scaffold.yml` policy |
202
+ | **MAP** — Risk identification | AEE stress-test, belief graph, contradictions and uncertainty metrics |
203
+ | **MEASURE** — Risk analysis | Confidence scoring, epistemic equilibrium, `specsmith epistemic-audit` |
204
+ | **MANAGE** — Risk treatment | Kill-switch, escalation, bounded retry, safe-write backup, permissions deny-list |
205
+
206
+ ### How Each Compliance Mechanism Works
207
+
208
+ #### 1. Tamper-Evident Audit Log — `TraceVault` (REQ-206)
209
+
210
+ Every agent action, decision, milestone, and audit gate is recorded as a JSONL entry in
211
+ `.specsmith/trace.jsonl`. Each entry contains a SHA-256 hash of its own content plus the
212
+ hash of the previous entry, forming a cryptographic chain:
213
+
214
+ ```jsonl
215
+ {"seq":1, "type":"DECISION", "description":"...", "hash":"a3f9...", "prev":"genesis"}
216
+ {"seq":2, "type":"MILESTONE", "description":"...", "hash":"7c2b...", "prev":"a3f9..."}
217
+ ```
218
+
219
+ Any modification to a past entry breaks every subsequent hash. `specsmith trace verify`
220
+ detects and reports the first corrupted entry. The file is append-only — overwrites are
221
+ blocked by `safe_write`. This satisfies **EU AI Act Art. 12** (logging and record-keeping)
222
+ and **NIST AI RMF GOVERN** (accountability trail).
223
+
224
+ #### 2. AI Disclosure — Every Response (REQ-207)
225
+
226
+ Every preflight response includes a mandatory `ai_disclosure` block:
227
+
228
+ ```json
229
+ {
230
+ "ai_disclosure": {
231
+ "governed_by": "specsmith",
232
+ "governance_gated": true,
233
+ "provider": "ollama",
234
+ "model": "qwen2.5:14b",
235
+ "spec_version": "0.11.0"
236
+ }
237
+ }
238
+ ```
239
+
240
+ This ensures every AI-generated output is traceable to its source model and version,
241
+ meeting **EU AI Act Art. 13** (transparency) and **Art. 53** (GPAI transparency).
242
+ It is impossible to suppress — the field is injected at the governance layer before
243
+ any response is returned to the client.
244
+
245
+ #### 3. Human Escalation — Configurable Threshold (REQ-209)
246
+
247
+ When an action's confidence is below the escalation threshold, specsmith sets
248
+ `escalation_required: true` and includes an `escalation_reason` in the preflight payload.
249
+ Kairos surfaces this as a confirmation dialog before execution proceeds.
250
+
251
+ ```bash
252
+ specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
253
+ # → escalation_required: true, escalation_reason: "confidence 0.71 < threshold 0.85"
254
+ ```
255
+
256
+ This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE**.
257
+
258
+ #### 4. Kill-Switch — Immediate Session Termination (REQ-210)
259
+
260
+ A `kill-session` CLI command and keyboard shortcut (surfaced in Kairos) immediately
261
+ terminates all active agent sessions and records a timestamped kill event in `LEDGER.md`:
262
+
263
+ ```bash
264
+ specsmith kill-session # terminate all sessions, log kill event
265
+ specsmith kill-session --session abc123 # terminate a specific session
266
+ ```
267
+
268
+ This satisfies **EU AI Act Art. 14 §4** (ability to intervene and stop the AI system)
269
+ and is required for certification of high-risk AI systems.
270
+
271
+ #### 5. Append-Only Safe Write — `safe_write` (REQ-213)
272
+
273
+ All governance file writes go through `safe_write`, which:
274
+ - **Appends** to `LEDGER.md` and `.specsmith/ledger.jsonl` — never truncates
275
+ - **Backs up** any file before overwriting it (timestamped `.bak` copy)
276
+ - **Prevents** accidental destruction of audit history
277
+
278
+ This satisfies **EU AI Act Art. 12** (records must be kept for the lifetime of the system)
279
+ and provides recovery capability per **NIST AI RMF MANAGE**.
280
+
281
+ #### 6. Least-Privilege Permissions (REQ-217, REQ-012)
282
+
283
+ Every agent tool call is gated through a permission profile. Tools outside the active
284
+ profile are denied with exit code 3 and a ledger entry:
285
+
286
+ ```bash
287
+ specsmith agent permissions-check git_push # exit 0 = allowed, exit 3 = denied
288
+ specsmith agent permissions # show active profile
289
+ ```
290
+
291
+ Four built-in presets (`read_only`, `standard`, `extended`, `admin`) plus full
292
+ custom allow/deny lists in `.specsmith/config.yml`. This implements **NIST AI RMF GOVERN**
293
+ (policy enforcement) and principle of least privilege per standard security practice.
294
+
295
+ #### 7. Policy Guardrails — `is_safe_command` (REQ-220)
296
+
297
+ Before any shell command is executed, `agent.safety.is_safe_command()` classifies it
298
+ against a deny list of destructive patterns (`rm -rf`, `git push origin main`,
299
+ `kubectl apply`, `cat .env`, etc.). Denied commands are blocked and logged.
300
+ This implements **NIST AI RMF MANAGE** (risk treatment at the action level).
301
+
302
+ #### 8. Compliance Export Report (REQ-208, REQ-215)
303
+
304
+ `specsmith export` generates a full compliance report containing:
305
+ - **AI System Inventory** — all providers, models, and versions used
306
+ - **Risk Classification** — AEE phase, confidence scores, open work items
307
+ - **Human Oversight Controls** — active permission profile, escalation settings, kill-switch state
308
+ - **Audit Trail Summary** — TraceVault chain length, last verification, any tampering
309
+
310
+ ```bash
311
+ specsmith export --format markdown > compliance-report.md
312
+ specsmith export --format json > compliance-report.json
313
+ ```
314
+
315
+ This report is suitable for submission to regulators, internal audit teams, or
316
+ SOC-2 / ISO-42001 reviewers.
317
+
318
+ ### Compliance per Session and per Project
319
+
320
+ Compliance settings are layered:
321
+
322
+ 1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
323
+ 2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
324
+ 3. **Per-session overrides** — Kairos Governance panel or CLI flags
325
+
326
+ The Kairos **Governance Tools Panel** (Settings → Governance) exposes all compliance
327
+ controls in a live UI: escalation threshold, permission profile, kill-switch, audit log
328
+ viewer, and context window settings. Changes take effect immediately for the active
329
+ session and can optionally be written back to the per-project `.specsmith/config.yml`.
330
+
331
+ ---
332
+
333
+ ## Context Window Management
334
+
335
+ specsmith enforces safe, efficient use of LLM context windows — especially critical
336
+ when running local models via Ollama where the context limit directly affects GPU VRAM.
337
+
338
+ ### GPU-Aware Context Sizing (REQ-244)
339
+
340
+ ```bash
341
+ specsmith ollama gpu # detect GPU VRAM (NVIDIA + AMD supported)
342
+ specsmith ollama available # show models within your VRAM budget
343
+ ```
344
+
345
+ VRAM tiers and recommended context sizes:
346
+
347
+ | VRAM | Recommended Context |
348
+ |---|---|
349
+ | < 6 GB (CPU or low-end GPU) | 4,096 tokens |
350
+ | 6–11 GB | 8,192 tokens |
351
+ | 12–19 GB | 16,384 tokens |
352
+ | 20 GB+ | 32,768 tokens |
353
+
354
+ Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.specsmith/config.yml`.
355
+
356
+ ### Live Context Fill Indicator (REQ-245)
357
+
358
+ The context fill tracker emits real-time JSONL events consumed by Kairos:
359
+
360
+ ```jsonl
361
+ {"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
362
+ ```
363
+
364
+ Kairos displays a compact fill bar in the agent footer. When fill reaches the
365
+ compression threshold (default 80%), specsmith signals that context summarization
366
+ should run before the next turn.
367
+
368
+ ### Auto Context Compression (REQ-246)
369
+
370
+ When fill reaches the compression threshold, specsmith automatically triggers
371
+ conversation summarization — the current context is condensed to a compact summary
372
+ that preserves key decisions and facts while freeing window space. This happens
373
+ transparently before the next agent turn.
374
+
375
+ Configure in `.specsmith/config.yml`:
376
+
377
+ ```yaml
378
+ context:
379
+ compression_threshold_pct: 80 # trigger summarization at 80% fill
380
+ auto_compress: true # enable automatic compression
381
+ ```
382
+
383
+ ### Hard Context Ceiling — Never 100% Full (REQ-247)
384
+
385
+ A hard reservation of **15% of the context window** (minimum 2,048 tokens) is always
386
+ held back for the governance layer. Attempts to fill beyond the effective ceiling raise
387
+ `ContextFullError` — making it impossible to reach a state where even a compression
388
+ request cannot be processed. This is a safety invariant, not a configuration option.
389
+
390
+ ---
391
+
172
392
  ## Kairos + Governance REST API
173
393
 
174
394
  **Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.10.1.dev281"
7
+ version = "0.10.1.dev282"
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"