specsmith 0.10.1.dev298__tar.gz → 0.11.3.dev418__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 (290) hide show
  1. {specsmith-0.10.1.dev298/src/specsmith.egg-info → specsmith-0.11.3.dev418}/PKG-INFO +290 -24
  2. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/README.md +289 -23
  3. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/pyproject.toml +36 -1
  4. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/__init__.py +1 -1
  5. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/broker.py +34 -5
  6. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/chat_runner.py +27 -0
  7. specsmith-0.11.3.dev418/src/specsmith/agent/context_seed.py +209 -0
  8. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/core.py +1 -1
  9. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/__init__.py +35 -0
  10. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/_status.py +18 -0
  11. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/dag.py +292 -0
  12. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/dispatcher.py +498 -0
  13. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/events.py +277 -0
  14. specsmith-0.11.3.dev418/src/specsmith/agent/dispatch/result.py +64 -0
  15. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/events.py +2 -2
  16. specsmith-0.11.3.dev418/src/specsmith/agent/hf_leaderboard.py +947 -0
  17. specsmith-0.11.3.dev418/src/specsmith/agent/llm_client.py +550 -0
  18. specsmith-0.11.3.dev418/src/specsmith/agent/model_profiles.py +494 -0
  19. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/orchestrator.py +117 -2
  20. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/provider_registry.py +307 -11
  21. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/repl.py +22 -0
  22. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/runner.py +32 -11
  23. specsmith-0.11.3.dev418/src/specsmith/agent/spawner.py +179 -0
  24. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/suggester.py +1 -1
  25. specsmith-0.11.3.dev418/src/specsmith/agent/tools.py +693 -0
  26. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/voice.py +13 -5
  27. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/auditor.py +408 -20
  28. specsmith-0.11.3.dev418/src/specsmith/channel.py +112 -0
  29. specsmith-0.11.3.dev418/src/specsmith/ci_manager.py +498 -0
  30. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/cli.py +2826 -111
  31. specsmith-0.11.3.dev418/src/specsmith/compliance/__init__.py +66 -0
  32. specsmith-0.10.1.dev298/src/specsmith/compliance.py → specsmith-0.11.3.dev418/src/specsmith/compliance/_compat.py +52 -3
  33. specsmith-0.11.3.dev418/src/specsmith/compliance/checker.py +311 -0
  34. specsmith-0.11.3.dev418/src/specsmith/compliance/evidence.py +497 -0
  35. specsmith-0.11.3.dev418/src/specsmith/compliance/regulations.py +798 -0
  36. specsmith-0.11.3.dev418/src/specsmith/compliance/reporter.py +259 -0
  37. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/compressor.py +19 -9
  38. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/config.py +112 -0
  39. specsmith-0.11.3.dev418/src/specsmith/context_orchestrator.py +290 -0
  40. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/differ.py +29 -0
  41. specsmith-0.11.3.dev418/src/specsmith/doctor.py +217 -0
  42. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/belief.py +31 -7
  43. specsmith-0.11.3.dev418/src/specsmith/eval/runner.py +208 -0
  44. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/governance_logic.py +192 -22
  45. specsmith-0.11.3.dev418/src/specsmith/governance_store.py +173 -0
  46. specsmith-0.11.3.dev418/src/specsmith/governance_yaml.py +544 -0
  47. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/importer.py +145 -4
  48. specsmith-0.11.3.dev418/src/specsmith/issue_reporter.py +373 -0
  49. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/languages.py +1 -1
  50. specsmith-0.11.3.dev418/src/specsmith/migrations/__init__.py +136 -0
  51. specsmith-0.11.3.dev418/src/specsmith/migrations/m001_governance_yaml.py +133 -0
  52. specsmith-0.11.3.dev418/src/specsmith/migrations/m002_agents_slim.py +106 -0
  53. specsmith-0.11.3.dev418/src/specsmith/migrations/m003_compliance_init.py +108 -0
  54. specsmith-0.11.3.dev418/src/specsmith/migrations/m004_ledger_esdb.py +91 -0
  55. specsmith-0.11.3.dev418/src/specsmith/migrations/m005_agent_run_tool.py +191 -0
  56. specsmith-0.11.3.dev418/src/specsmith/migrations/runner.py +116 -0
  57. specsmith-0.11.3.dev418/src/specsmith/ollama_cmds.py +409 -0
  58. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/phase.py +37 -7
  59. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/rate_limits.py +152 -3
  60. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/requirements_parser.py +0 -1
  61. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/retrieval.py +29 -1
  62. specsmith-0.11.3.dev418/src/specsmith/serve.py +808 -0
  63. specsmith-0.11.3.dev418/src/specsmith/session_store.py +144 -0
  64. specsmith-0.11.3.dev418/src/specsmith/skills/__init__.py +249 -0
  65. specsmith-0.11.3.dev418/src/specsmith/skills/cloud.py +457 -0
  66. specsmith-0.11.3.dev418/src/specsmith/skills/corporate.py +901 -0
  67. specsmith-0.11.3.dev418/src/specsmith/skills/cross_platform.py +291 -0
  68. specsmith-0.11.3.dev418/src/specsmith/skills/devops.py +525 -0
  69. specsmith-0.11.3.dev418/src/specsmith/skills/docs.py +1003 -0
  70. specsmith-0.11.3.dev418/src/specsmith/skills/embedded.py +884 -0
  71. specsmith-0.11.3.dev418/src/specsmith/skills/governance.py +168 -0
  72. specsmith-0.11.3.dev418/src/specsmith/skills/hardware.py +1442 -0
  73. specsmith-0.11.3.dev418/src/specsmith/skills/mobile.py +420 -0
  74. specsmith-0.11.3.dev418/src/specsmith/skills/productivity.py +336 -0
  75. specsmith-0.11.3.dev418/src/specsmith/skills/ssh.py +377 -0
  76. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/skills_builder.py +135 -22
  77. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/sync.py +188 -25
  78. specsmith-0.11.3.dev418/src/specsmith/templates/agents.md.j2 +47 -0
  79. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/python/pyproject.toml.j2 +1 -1
  80. specsmith-0.11.3.dev418/src/specsmith/templates/scripts/setup.cmd.j2 +46 -0
  81. specsmith-0.11.3.dev418/src/specsmith/templates/scripts/setup.sh.j2 +33 -0
  82. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/tools.py +46 -11
  83. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/updater.py +6 -3
  84. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/upgrader.py +93 -7
  85. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs/github.py +11 -11
  86. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418/src/specsmith.egg-info}/PKG-INFO +290 -24
  87. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith.egg-info/SOURCES.txt +49 -4
  88. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_agent_profiles.py +2 -1
  89. specsmith-0.11.3.dev418/tests/test_ai_client.py +206 -0
  90. specsmith-0.11.3.dev418/tests/test_ai_intelligence.py +601 -0
  91. specsmith-0.11.3.dev418/tests/test_channel.py +205 -0
  92. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_chat_stdin_protocol.py +1 -1
  93. specsmith-0.11.3.dev418/tests/test_dispatch.py +961 -0
  94. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_intelligence.py +9 -2
  95. specsmith-0.11.3.dev418/tests/test_issue_reporter.py +351 -0
  96. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_new_modules.py +2 -1
  97. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_nexus.py +10 -0
  98. specsmith-0.11.3.dev418/tests/test_req_248_262.py +749 -0
  99. specsmith-0.10.1.dev298/src/specsmith/agent/spawner.py +0 -92
  100. specsmith-0.10.1.dev298/src/specsmith/agent/tools.py +0 -343
  101. specsmith-0.10.1.dev298/src/specsmith/doctor.py +0 -124
  102. specsmith-0.10.1.dev298/src/specsmith/esdb/__init__.py +0 -20
  103. specsmith-0.10.1.dev298/src/specsmith/esdb/bridge.py +0 -137
  104. specsmith-0.10.1.dev298/src/specsmith/eval/runner.py +0 -102
  105. specsmith-0.10.1.dev298/src/specsmith/serve.py +0 -345
  106. specsmith-0.10.1.dev298/src/specsmith/skills.py +0 -199
  107. specsmith-0.10.1.dev298/src/specsmith/templates/agents.md.j2 +0 -256
  108. specsmith-0.10.1.dev298/src/specsmith/templates/scripts/setup.cmd.j2 +0 -23
  109. specsmith-0.10.1.dev298/src/specsmith/templates/scripts/setup.sh.j2 +0 -12
  110. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/LICENSE +0 -0
  111. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/setup.cfg +0 -0
  112. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/__init__.py +0 -0
  113. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/belief.py +0 -0
  114. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/certainty.py +0 -0
  115. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/failure_graph.py +0 -0
  116. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/py.typed +0 -0
  117. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/recovery.py +0 -0
  118. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/session.py +0 -0
  119. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/stress_tester.py +0 -0
  120. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/epistemic/trace.py +0 -0
  121. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/__main__.py +0 -0
  122. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/__init__.py +0 -0
  123. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/cleanup.py +0 -0
  124. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/endpoints.py +0 -0
  125. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/execution_profiles.py +0 -0
  126. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/fallback.py +0 -0
  127. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/hf_sync.py +0 -0
  128. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/indexer.py +0 -0
  129. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/mcp.py +0 -0
  130. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/memory.py +0 -0
  131. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/model_intelligence.py +0 -0
  132. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/permissions.py +0 -0
  133. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/profiles.py +0 -0
  134. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/router.py +0 -0
  135. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/rules.py +0 -0
  136. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/safety.py +0 -0
  137. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/teams.py +0 -0
  138. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/agent/verifier.py +0 -0
  139. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/architect.py +0 -0
  140. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/auth.py +0 -0
  141. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/block_export.py +0 -0
  142. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/commands/__init__.py +0 -0
  143. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/commands/intelligence.py +0 -0
  144. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/console_utils.py +0 -0
  145. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/context_window.py +0 -0
  146. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/credit_analyzer.py +0 -0
  147. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/credits.py +0 -0
  148. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/__init__.py +0 -0
  149. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/base.py +0 -0
  150. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/citations.py +0 -0
  151. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/fpd.py +0 -0
  152. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/odp.py +0 -0
  153. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/patentsview.py +0 -0
  154. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/pfw.py +0 -0
  155. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/ppubs.py +0 -0
  156. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/datasources/ptab.py +0 -0
  157. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/drive.py +0 -0
  158. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/editor.py +0 -0
  159. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/__init__.py +0 -0
  160. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/certainty.py +0 -0
  161. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/failure_graph.py +0 -0
  162. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/recovery.py +0 -0
  163. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/epistemic/stress_tester.py +0 -0
  164. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/eval/__init__.py +0 -0
  165. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/eval/builtins.py +0 -0
  166. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/executor.py +0 -0
  167. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/exporter.py +0 -0
  168. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/__init__.py +0 -0
  169. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/app.py +0 -0
  170. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/main_window.py +0 -0
  171. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/session_tab.py +0 -0
  172. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/theme.py +0 -0
  173. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/__init__.py +0 -0
  174. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/chat_view.py +0 -0
  175. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/input_bar.py +0 -0
  176. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  177. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/token_meter.py +0 -0
  178. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  179. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/widgets/update_checker.py +0 -0
  180. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/gui/worker.py +0 -0
  181. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/history_search.py +0 -0
  182. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/instinct.py +0 -0
  183. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/__init__.py +0 -0
  184. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/agent_skill.py +0 -0
  185. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/aider.py +0 -0
  186. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/base.py +0 -0
  187. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/claude_code.py +0 -0
  188. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/copilot.py +0 -0
  189. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/cursor.py +0 -0
  190. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/gemini.py +0 -0
  191. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/integrations/windsurf.py +0 -0
  192. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/ledger.py +0 -0
  193. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/mcp_generator.py +0 -0
  194. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/patent.py +0 -0
  195. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/paths.py +0 -0
  196. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/plugins.py +0 -0
  197. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/profiles.py +0 -0
  198. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/releaser.py +0 -0
  199. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/requirements.py +0 -0
  200. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/safe_write.py +0 -0
  201. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/scaffolder.py +0 -0
  202. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/session.py +0 -0
  203. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/session_init.py +0 -0
  204. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  205. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  206. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  207. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  208. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  209. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  210. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  211. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/community/security.md.j2 +0 -0
  212. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  213. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  214. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  215. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  216. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  217. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/editorconfig.j2 +0 -0
  218. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/gitattributes.j2 +0 -0
  219. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/gitignore.j2 +0 -0
  220. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/go/go.mod.j2 +0 -0
  221. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/go/main.go.j2 +0 -0
  222. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  223. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  224. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  225. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  226. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  227. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  228. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  229. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  230. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  231. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  232. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  233. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/js/package.json.j2 +0 -0
  234. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/ledger.md.j2 +0 -0
  235. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/python/cli.py.j2 +0 -0
  236. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/python/init.py.j2 +0 -0
  237. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/readme.md.j2 +0 -0
  238. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  239. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  240. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  241. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  242. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  243. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  244. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  245. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/tool_installer.py +0 -0
  246. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/toolrules.py +0 -0
  247. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/trace.py +0 -0
  248. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/validator.py +0 -0
  249. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs/__init__.py +0 -0
  250. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs/base.py +0 -0
  251. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs/bitbucket.py +0 -0
  252. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs/gitlab.py +0 -0
  253. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/vcs_commands.py +0 -0
  254. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/wireframes.py +0 -0
  255. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith/workspace.py +0 -0
  256. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith.egg-info/dependency_links.txt +0 -0
  257. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith.egg-info/entry_points.txt +0 -0
  258. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith.egg-info/requires.txt +0 -0
  259. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/src/specsmith.egg-info/top_level.txt +0 -0
  260. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_CMD_001.py +0 -0
  261. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_agent_runner_ready.py +0 -0
  262. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_auditor.py +0 -0
  263. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_chat_diff_decision.py +0 -0
  264. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_chat_runner_openai_compat.py +0 -0
  265. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_cli.py +0 -0
  266. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_cli_workflows_history_drive.py +0 -0
  267. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_compliance.py +0 -0
  268. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_compressor.py +0 -0
  269. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_e2e_nexus.py +0 -0
  270. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_endpoints_cli.py +0 -0
  271. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_endpoints_store.py +0 -0
  272. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_epistemic.py +0 -0
  273. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_fallback_chain.py +0 -0
  274. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_importer.py +0 -0
  275. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_integrations.py +0 -0
  276. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_mcp_client.py +0 -0
  277. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_permissions.py +0 -0
  278. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_phase1_4_new.py +0 -0
  279. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_phase34_completion.py +0 -0
  280. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_rate_limits.py +0 -0
  281. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_scaffolder.py +0 -0
  282. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_skill_marketplace.py +0 -0
  283. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_skills_mcp.py +0 -0
  284. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_smoke.py +0 -0
  285. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_suggester.py +0 -0
  286. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_tools.py +0 -0
  287. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_validator.py +0 -0
  288. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_vcs.py +0 -0
  289. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/tests/test_warp_parity.py +0 -0
  290. {specsmith-0.10.1.dev298 → specsmith-0.11.3.dev418}/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.dev298
3
+ Version: 0.11.3.dev418
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
@@ -72,8 +72,8 @@ Dynamic: license-file
72
72
 
73
73
  # specsmith
74
74
 
75
- [![CI](https://github.com/BitConcepts/specsmith/actions/workflows/ci.yml/badge.svg)](https://github.com/BitConcepts/specsmith/actions/workflows/ci.yml)
76
- [![Sponsor](https://img.shields.io/badge/sponsor-%E2%9D%A4-ea4aaa?logo=github)](https://github.com/sponsors/BitConcepts)
75
+ [![CI](https://github.com/layer1labs/specsmith/actions/workflows/ci.yml/badge.svg)](https://github.com/layer1labs/specsmith/actions/workflows/ci.yml)
76
+ [![Sponsor](https://img.shields.io/badge/sponsor-%E2%9D%A4-ea4aaa?logo=github)](https://github.com/sponsors/layer1labs)
77
77
  [![Docs](https://readthedocs.org/projects/specsmith/badge/?version=stable)](https://specsmith.readthedocs.io/en/stable/)
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/)
@@ -96,10 +96,35 @@ per-session and per-project.
96
96
 
97
97
  ```bash
98
98
  specsmith governance-serve --port 7700 # Kairos governance REST API
99
- specsmith sync # sync .specsmith/ from docs/ markdown
99
+ specsmith sync # sync YAML JSON → MD (YAML-first mode)
100
+ specsmith generate docs # regenerate REQUIREMENTS.md + TESTS.md from YAML
101
+ specsmith validate --strict # YAML schema checks: dup IDs, orphans, coverage
100
102
  specsmith agent permissions-check git_push # check tool permission (REQ-012)
101
103
  specsmith ollama gpu # detect GPU VRAM, recommend context size
102
104
  specsmith export # generate full compliance report
105
+
106
+ # Update channel management (REQ-248)
107
+ specsmith channel set stable # pin to stable releases
108
+ specsmith channel set dev # opt in to dev/pre-release builds
109
+ specsmith channel get --json # show current channel + source
110
+
111
+ # ESDB extended lifecycle (REQ-249..253)
112
+ specsmith esdb export --json # dump all records to JSON snapshot
113
+ specsmith esdb import backup.json # validate + stage an import
114
+ specsmith esdb backup # create timestamped snapshot
115
+ specsmith esdb rollback --steps 2 # report WAL rollback (stub)
116
+ specsmith esdb compact # request WAL compaction
117
+
118
+ # Skills lifecycle (REQ-254..255)
119
+ specsmith skills deactivate <skill-id> # set active=false in skill.json
120
+ specsmith skills delete <skill-id> --yes # permanently remove skill
121
+
122
+ # MCP config generation (REQ-256)
123
+ specsmith mcp generate "Search USPTO patents" --json # JSON config stub
124
+
125
+ # Agent ask dispatcher — no LLM required (REQ-257)
126
+ specsmith agent ask "show esdb status" --json-output
127
+ specsmith agent ask "build skill for summarizing"
103
128
  ```
104
129
 
105
130
  It also co-installs the standalone `epistemic` Python library for direct use in any project:
@@ -213,17 +238,47 @@ specsmith phase --project-dir ./my-project
213
238
 
214
239
  ---
215
240
 
216
- ## Machine State Sync
241
+ ## Machine State Sync + YAML Governance
217
242
 
218
- `.specsmith/` always mirrors the human-readable `docs/` governance files.
219
- Run `specsmith sync` after any change to `docs/REQUIREMENTS.md` or `docs/TESTS.md`:
243
+ As of v0.12, specsmith uses **YAML-first governance**: `docs/requirements/*.yml`
244
+ and `docs/tests/*.yml` are the canonical sources. `REQUIREMENTS.md` and `TESTS.md`
245
+ are **generated artifacts** — do not hand-edit them.
220
246
 
221
247
  ```bash
222
- specsmith sync # regenerate .specsmith/requirements.json + testcases.json
223
- specsmith sync --check # CI mode: exits 1 if out of sync without writing
224
- specsmith sync --json # emit sync result as JSON
248
+ # YAML-first pipeline (v0.12+)
249
+ specsmith sync # YAML .specsmith/*.json docs/*.md (all in one)
250
+ specsmith generate docs # regenerate only the Markdown artifacts from YAML
251
+ specsmith generate docs --check # dry-run: report what would change
252
+ specsmith validate --strict # enforce schema: dup IDs, orphans, missing fields
253
+ specsmith validate --strict --json # machine-readable validation result
254
+
255
+ # CI guard (already in .github/workflows/ci.yml)
256
+ specsmith sync --check # exits 1 if JSON cache is out of sync with YAML
225
257
  ```
226
258
 
259
+ **To add a new requirement**, edit the appropriate `docs/requirements/<domain>.yml`
260
+ file and run `specsmith sync`. **Never** hand-edit `docs/REQUIREMENTS.md` — it will
261
+ be overwritten by the next sync.
262
+
263
+ **Domain files:**
264
+
265
+ | File | REQ range | Domain |
266
+ |---|---|---|
267
+ | `docs/requirements/governance.yml` | REQ-001..064 | Core AEE governance |
268
+ | `docs/requirements/agent.yml` | REQ-065..129 | Nexus + CI |
269
+ | `docs/requirements/harness.yml` | REQ-130..160 | Slash commands + subagents |
270
+ | `docs/requirements/intelligence.yml` | REQ-161..220 | Instinct, eval, memory |
271
+ | `docs/requirements/context.yml` | REQ-244..247 | Context window |
272
+ | `docs/requirements/esdb.yml` | REQ-248..262 | ESDB + skills + MCP |
273
+ | `docs/requirements/ai_intelligence.yml` | REQ-263..299 | AI model intelligence |
274
+ | `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
275
+ | `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
276
+ | `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
277
+
278
+ **Migration from Markdown-primary:** Run
279
+ `scripts/migrate_governance_to_yaml.py` once to convert an existing project.
280
+ Idempotent — safe to re-run.
281
+
227
282
  ## Least-Privilege Agent Permissions (REG-012)
228
283
 
229
284
  ```bash
@@ -269,11 +324,11 @@ human oversight, and robustness. specsmith implements:
269
324
  across the AI lifecycle. specsmith addresses all four core functions:
270
325
 
271
326
  | 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 |
327
+ ||---|
328
+ || **GOVERN** — Policies & accountability | Governance rules (H1–H22), permissions profile, `scaffold.yml` policy |
329
+ || **MAP** — Risk identification | AEE stress-test, belief graph, contradictions and uncertainty metrics |
330
+ || **MEASURE** — Risk analysis | Confidence scoring, epistemic equilibrium, `specsmith epistemic-audit` |
331
+ || **MANAGE** — Risk treatment | Kill-switch, escalation, bounded retry, safe-write backup, permissions deny-list |
277
332
 
278
333
  ### How Each Compliance Mechanism Works
279
334
 
@@ -526,6 +581,177 @@ requirement, test, and work-item identifiers Specsmith assigned.
526
581
 
527
582
  ---
528
583
 
584
+ ## AI Model Intelligence
585
+
586
+ specsmith ships a complete AI model intelligence layer for tracking, scoring, and routing
587
+ to the best available LLM for each task type.
588
+
589
+ ### HF Open LLM Leaderboard Sync (REQ-263..REQ-269)
590
+
591
+ Syncs benchmark data from the HuggingFace Open LLM Leaderboard and computes three
592
+ task-specific bucket scores — **reasoning**, **conversational**, and **longform** — for
593
+ every model. A 40+ model static fallback ensures scores are always available even without
594
+ network access.
595
+
596
+ ```bash
597
+ specsmith model-intel sync # sync from HF leaderboard (static fallback if offline)
598
+ specsmith model-intel scores # list all cached bucket scores
599
+ specsmith model-intel scores --model gpt-4o # show scores for a specific model
600
+ specsmith model-intel recommendations # top-10 models for reasoning bucket
601
+ specsmith model-intel recommendations --bucket conversational # or longform
602
+ specsmith model-intel connection # test HF API connectivity + token status
603
+ ```
604
+
605
+ Set `SPECSMITH_HF_TOKEN` for authenticated access (1000 req/5min instead of 500).
606
+ Scores persist to `~/.specsmith/model_scores.json`. Background sync runs 15s after startup
607
+ then daily.
608
+
609
+ **Bucket formulas (normalised 0-100):**
610
+ - Reasoning = 0.35×MATH + 0.30×GPQA + 0.25×BBH + 0.10×IFEval
611
+ - Conversational = 0.40×IFEval + 0.35×MMLU-PRO + 0.25×BBH
612
+ - Longform = 0.35×MUSR + 0.35×IFEval + 0.30×MMLU-PRO
613
+
614
+ ### Model Capability Profiles (REQ-270..REQ-271)
615
+
616
+ 40+ pre-built model profiles cover all major providers (OpenAI, Anthropic, Google, Mistral,
617
+ Meta Llama, Qwen, DeepSeek, and local Ollama variants). Each profile specifies:
618
+ `max_tokens`, `prompt_style` (sections/xml/markdown), `supports_vision`,
619
+ `supports_tool_calls`, `reasoning_mode`, and `context_window`.
620
+
621
+ Context-aware history trimming preserves system messages while summarising older turns when
622
+ the token budget is exceeded:
623
+
624
+ ```python
625
+ from specsmith.agent.model_profiles import get_profile, trim_history
626
+
627
+ profile = get_profile("qwen2.5:14b") # exact or prefix match; returns default if unknown
628
+ messages = trim_history(messages, budget_chars=12000)
629
+ ```
630
+
631
+ ### LLM Client with Provider Fallback (REQ-275..REQ-277)
632
+
633
+ `LLMClient` wraps multiple providers with automatic fallback on 429 / 401 errors,
634
+ O-series parameter translation (`max_completion_tokens`, temperature=1, developer role),
635
+ and vLLM guided-JSON payload injection:
636
+
637
+ ```python
638
+ from specsmith.agent.llm_client import LLMClient
639
+
640
+ client = LLMClient([
641
+ {"provider_type": "cloud", "model": "gpt-4o", ...},
642
+ {"provider_type": "ollama", "model": "qwen2.5:14b", ...}, # local fallback
643
+ ])
644
+ result = client.chat([{"role": "user", "content": "hello"}])
645
+ ```
646
+
647
+ ### Endpoint Presets + Suggest Profiles (REQ-278..REQ-280)
648
+
649
+ A registry of 10+ pre-configured endpoint presets for common cloud and local LLM providers:
650
+
651
+ ```bash
652
+ specsmith agent endpoint-presets # list all presets (vllm, lm_studio, openrouter, etc.)
653
+ specsmith agent endpoint-presets --json # machine-readable output
654
+ specsmith agent suggest-profiles # suggest optimal profiles based on env (API keys, hardware)
655
+ specsmith agent suggest-profiles --json # structured suggestions with bucket/role annotations
656
+ ```
657
+
658
+ Suggestions are read-only (never persisted) and inspect `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`,
659
+ `GOOGLE_API_KEY`, and local Ollama availability.
660
+
661
+ ### Kairos AI Providers — Bucket Score Columns (REQ-281)
662
+
663
+ The Kairos **Agents > AI Providers** table gained three new columns — **R** (reasoning),
664
+ **C** (conversational), **L** (longform) — showing each provider's HF bucket scores inline.
665
+ A **Sync Scores** button triggers a background sync from the HF leaderboard without
666
+ interrupting the active session.
667
+
668
+ ---
669
+
670
+ ## Multi-Agent DAG Dispatcher (REQ-321..334)
671
+
672
+ The `specsmith dispatch` command group decomposes a task into a **Directed Acyclic Graph** of
673
+ agent work items and executes them concurrently, with fail-forward BLOCKED propagation and
674
+ ESDB context injection between nodes.
675
+
676
+ ```bash
677
+ # Run a task through the DAG dispatcher (default: up to 4 concurrent workers)
678
+ specsmith dispatch run "add API endpoint with tests" --max-workers 4
679
+
680
+ # Stream JSONL events while the run is in progress
681
+ specsmith dispatch run "refactor auth module" --json
682
+
683
+ # Check status of a saved run
684
+ specsmith dispatch status --dag-id abc123def456
685
+
686
+ # List all saved runs
687
+ specsmith dispatch list
688
+
689
+ # Retry a single failed node from a checkpoint
690
+ specsmith dispatch retry --node impl --dag-id abc123def456
691
+ ```
692
+
693
+ The dispatcher is also available programmatically:
694
+
695
+ ```python
696
+ from specsmith.agent.orchestrator import Orchestrator
697
+
698
+ orchestrator = Orchestrator()
699
+
700
+ # Use the DAG path (falls back to GroupChat on cycle detection)
701
+ result = orchestrator.run_task("add feature X", use_dag=True)
702
+
703
+ # Always use DAG — returns DispatchSummary with per-node outcomes
704
+ summary = orchestrator.run_dispatch(
705
+ "add feature X",
706
+ planner_output=[
707
+ {"id": "arch", "title": "Design", "role": "architect", "depends_on": []},
708
+ {"id": "impl", "title": "Implement", "role": "coder", "depends_on": ["arch"]},
709
+ {"id": "test", "title": "Write tests", "role": "tester", "depends_on": ["arch"]},
710
+ ],
711
+ max_workers=3,
712
+ )
713
+ print(f"{len(summary.completed)} completed, {len(summary.failed)} failed")
714
+ ```
715
+
716
+ Events are persisted to `.specsmith/dispatch/<dag_id>/events.jsonl` for resume and replay.
717
+ Kairos renders the live dispatch view — see `app/` for build instructions.
718
+
719
+ ---
720
+
721
+ ## Compiler and Tool Support
722
+
723
+ All agent roles can invoke compiler, linter, and formatter tools. These are registered in
724
+ `AVAILABLE_TOOLS` and wired into `ROLE_TOOLS` for the `coder`, `reviewer`, `tester`, `architect`,
725
+ and `embedded-coder` roles.
726
+
727
+ | Tool | Function | Default binary |
728
+ |------|----------|-|
729
+ | GCC / G++ | `run_gcc(args, compiler='gcc')` | `gcc` / `g++` |
730
+ | ARM bare-metal | `run_arm_gcc(args, compiler='arm-none-eabi-gcc')` | `arm-none-eabi-gcc` |
731
+ | AArch64 Linux | `run_aarch64_gcc(args, compiler='aarch64-linux-gnu-gcc')` | `aarch64-linux-gnu-gcc` |
732
+ | IAR Embedded | `run_iar_compiler(project_file, executable='IarBuild')` | `IarBuild` |
733
+ | Intel oneAPI | `run_intel_compiler(args, compiler='icx')` | `icx` / `icpx` / `icc` |
734
+ | clang-format | `run_clang_format(files, style='file', in_place=False)` | `clang-format` |
735
+ | clang-tidy | `run_clang_tidy(files, checks='', fix=False)` | `clang-tidy` |
736
+ | VSG (VHDL) | `run_vsg(files, rules=None, fix=False)` | `vsg` |
737
+
738
+ All tools are usable directly in the agentic REPL and in `specsmith dispatch` worker nodes:
739
+
740
+ ```python
741
+ from specsmith.agent.tools import run_arm_gcc, run_clang_tidy, run_vsg
742
+
743
+ # Cross-compile for ARM bare-metal
744
+ result = run_arm_gcc("-Wall -O2 main.c -o firmware.elf", compiler="arm-none-eabi-gcc")
745
+
746
+ # Lint C/C++ with clang-tidy
747
+ result = run_clang_tidy("src/", checks="modernize-*,readability-*")
748
+
749
+ # Style-check VHDL files
750
+ result = run_vsg("rtl/top.vhd", rules="vsg_rules.yaml")
751
+ ```
752
+
753
+ ---
754
+
529
755
  ## Kairos — Flagship Terminal Client
530
756
 
531
757
  **[Kairos](https://github.com/BitConcepts/kairos)** is the recommended terminal client for specsmith.
@@ -538,7 +764,14 @@ specsmith status, version, and one-click update.
538
764
  specsmith governance-serve --port 7700 --project-dir .
539
765
  ```
540
766
 
541
- The VS Code extension (`specsmith-vscode`) has been **deprecated** in favour of Kairos.
767
+ The Kairos **Dispatch Panel** (`app/` Rust, egui/eframe) renders the multi-agent DAG live:
768
+ - SVG DAG graph with nodes coloured by status (grey/blue/green/red/amber)
769
+ - Gantt timeline strip showing parallelism
770
+ - Per-node Retry (FAILED/BLOCKED) and Abort (RUNNING) buttons
771
+ - Subscribes to `GET /api/dispatch/events?dag_id=` SSE from `specsmith serve`
772
+
773
+ Build Kairos dispatch panel: `cd app && cargo build --release`
774
+
542
775
  Use `pipx install specsmith` for standalone CLI usage from any terminal.
543
776
 
544
777
  ---
@@ -605,7 +838,11 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
605
838
 
606
839
  **Workflow:** `phase show/set/next/list` `ledger add/list` `req list/add/gaps/trace`
607
840
 
608
- **Agent:** `run` `agent run/plan/status/verify/improve/reports` `agent providers/tools/skills`
841
+ **Agent:** `run` `agent run/plan/status/verify/improve/reports` `agent providers/tools/skills` `agent suggest-profiles` `agent endpoint-presets`
842
+
843
+ **Dispatch:** `dispatch run` `dispatch status` `dispatch list` `dispatch retry`
844
+
845
+ **Model Intel:** `model-intel sync` `model-intel scores` `model-intel recommendations` `model-intel connection`
609
846
 
610
847
  **Ollama:** `ollama list/available/gpu/pull/suggest`
611
848
 
@@ -658,13 +895,42 @@ Use cases: linguistics research, compliance pipelines, AI alignment, patent pros
658
895
 
659
896
  ---
660
897
 
661
- ## Governance Rules (H1–H13)
662
-
663
- 13 hard rules enforced by `specsmith validate`:
664
-
665
- - **H11** — Every loop or blocking wait must have a timeout, fallback exit, and diagnostic message.
666
- - **H12**Windows multi-step automation goes into `.cmd` files, not inline shell invocations.
667
- - **H13** — Agent tools must declare epistemic contracts (what they claim and what they cannot detect).
898
+ ## Governance Rules (H1–H22)
899
+
900
+ 22 hard rules enforced by `specsmith validate` and `specsmith audit`.
901
+ Full rule text: [`docs/governance/RULES.md`](docs/governance/RULES.md)
902
+
903
+ **H1–H14Core engineering and traceability rules:**
904
+ - **H1** — No ledger entry = work not done.
905
+ - **H2** — No proposal = no execution.
906
+ - **H3** — All work must consider every target platform.
907
+ - **H4** — No system-dependent assumptions; virtual environments required.
908
+ - **H5** — No hidden service logic.
909
+ - **H6** — If the task grows beyond the proposal, stop and re-propose.
910
+ - **H7** — Every state change must be traceable and recorded.
911
+ - **H8** — Architecture changes MUST update docs in the same work cycle.
912
+ - **H9** — Every agent command must have a timeout.
913
+ - **H10** — No hardcoded version strings outside `pyproject.toml`.
914
+ - **H11** — Every loop must have a deadline; no unbounded blocking I/O.
915
+ - **H12** — Platform-aware automation: sh/bash on Unix, `.cmd`/`.ps1` on Windows.
916
+ - **H13** — Every proposal must declare its epistemic boundaries and assumptions.
917
+ - **H14** — Documentation must be updated in the same work cycle as code changes.
918
+
919
+ **H15–H22 — Anti-hallucination and epistemic stability (OEA framework):**
920
+
921
+ Rules H15–H22 are derived from the *"Ontology-Epistemic-Agentic (OEA) Recursive
922
+ Generative Stability"* study (BitConcepts Research, 2026), which empirically validated
923
+ the primary control mechanisms for preventing hallucination and semantic drift in
924
+ production LLM systems:
925
+
926
+ - **H15** — Epistemic scope bounding: no claims outside verified knowledge; say "unknown" rather than fabricate.
927
+ - **H16** — Anti-drift recursion guard: max 5 autonomous generation steps before a human checkpoint.
928
+ - **H17** — Calibration direction: express uncertainty, not false confidence.
929
+ - **H18** — RAG retrieval filtering: validate context relevance (similarity ≥ 0.6) before injection.
930
+ - **H19** — Synthetic contamination prevention: never mix synthetic and real data silently.
931
+ - **H20** — Falsifiability required: cite sources or flag claims as `[HYPOTHESIS]`.
932
+ - **H21** — Disclose all model-specific assumptions (context window, format, temperature).
933
+ - **H22** — Cross-platform CI: green on one OS ≠ cross-platform coverage.
668
934
 
669
935
  ---
670
936