specsmith 0.3.6.dev177__tar.gz → 0.3.6.dev179__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 (166) hide show
  1. {specsmith-0.3.6.dev177/src/specsmith.egg-info → specsmith-0.3.6.dev179}/PKG-INFO +1 -1
  2. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/pyproject.toml +1 -1
  3. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/ollama.py +6 -0
  4. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/runner.py +49 -2
  5. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179/src/specsmith.egg-info}/PKG-INFO +1 -1
  6. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/LICENSE +0 -0
  7. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/README.md +0 -0
  8. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/setup.cfg +0 -0
  9. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/__init__.py +0 -0
  10. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/belief.py +0 -0
  11. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/certainty.py +0 -0
  12. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/failure_graph.py +0 -0
  13. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/py.typed +0 -0
  14. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/recovery.py +0 -0
  15. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/session.py +0 -0
  16. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/stress_tester.py +0 -0
  17. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/epistemic/trace.py +0 -0
  18. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/__init__.py +0 -0
  19. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/__main__.py +0 -0
  20. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/__init__.py +0 -0
  21. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/core.py +0 -0
  22. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/hooks.py +0 -0
  23. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/optimizer.py +0 -0
  24. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/profiles/epistemic-auditor.md +0 -0
  25. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/profiles/planner.md +0 -0
  26. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/profiles/verifier.md +0 -0
  27. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/__init__.py +0 -0
  28. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/anthropic.py +0 -0
  29. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/gemini.py +0 -0
  30. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/mistral.py +0 -0
  31. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/providers/openai.py +0 -0
  32. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/skills.py +0 -0
  33. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/agent/tools.py +0 -0
  34. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/architect.py +0 -0
  35. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/auditor.py +0 -0
  36. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/auth.py +0 -0
  37. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/cli.py +0 -0
  38. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/commands/__init__.py +0 -0
  39. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/compressor.py +0 -0
  40. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/config.py +0 -0
  41. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/credit_analyzer.py +0 -0
  42. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/credits.py +0 -0
  43. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/differ.py +0 -0
  44. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/doctor.py +0 -0
  45. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/__init__.py +0 -0
  46. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/belief.py +0 -0
  47. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/certainty.py +0 -0
  48. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/failure_graph.py +0 -0
  49. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/recovery.py +0 -0
  50. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/epistemic/stress_tester.py +0 -0
  51. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/executor.py +0 -0
  52. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/exporter.py +0 -0
  53. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/__init__.py +0 -0
  54. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/app.py +0 -0
  55. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/main_window.py +0 -0
  56. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/session_tab.py +0 -0
  57. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/theme.py +0 -0
  58. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/__init__.py +0 -0
  59. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/chat_view.py +0 -0
  60. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/input_bar.py +0 -0
  61. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  62. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/token_meter.py +0 -0
  63. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  64. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/widgets/update_checker.py +0 -0
  65. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/gui/worker.py +0 -0
  66. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/importer.py +0 -0
  67. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/__init__.py +0 -0
  68. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/aider.py +0 -0
  69. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/base.py +0 -0
  70. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/claude_code.py +0 -0
  71. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/copilot.py +0 -0
  72. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/cursor.py +0 -0
  73. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/gemini.py +0 -0
  74. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/warp.py +0 -0
  75. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/integrations/windsurf.py +0 -0
  76. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/languages.py +0 -0
  77. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/ledger.py +0 -0
  78. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/ollama_cmds.py +0 -0
  79. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/patent.py +0 -0
  80. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/phase.py +0 -0
  81. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/plugins.py +0 -0
  82. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/profiles.py +0 -0
  83. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/rate_limits.py +0 -0
  84. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/releaser.py +0 -0
  85. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/requirements.py +0 -0
  86. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/retrieval.py +0 -0
  87. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/scaffolder.py +0 -0
  88. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/session.py +0 -0
  89. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/agents.md.j2 +0 -0
  90. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  91. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  92. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  93. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  94. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  95. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  96. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  97. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/community/security.md.j2 +0 -0
  98. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  99. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  100. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  101. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  102. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  103. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
  104. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/editorconfig.j2 +0 -0
  105. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/gitattributes.j2 +0 -0
  106. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/gitignore.j2 +0 -0
  107. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/go/go.mod.j2 +0 -0
  108. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/go/main.go.j2 +0 -0
  109. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  110. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  111. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  112. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  113. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  114. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  115. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  116. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  117. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  118. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
  119. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/js/package.json.j2 +0 -0
  120. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/ledger.md.j2 +0 -0
  121. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/python/cli.py.j2 +0 -0
  122. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/python/init.py.j2 +0 -0
  123. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  124. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/readme.md.j2 +0 -0
  125. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  126. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  127. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  128. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  129. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  130. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  131. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  132. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  133. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  134. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/tool_installer.py +0 -0
  135. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/toolrules.py +0 -0
  136. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/tools.py +0 -0
  137. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/trace.py +0 -0
  138. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/updater.py +0 -0
  139. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/upgrader.py +0 -0
  140. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/validator.py +0 -0
  141. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs/__init__.py +0 -0
  142. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs/base.py +0 -0
  143. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs/bitbucket.py +0 -0
  144. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs/github.py +0 -0
  145. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs/gitlab.py +0 -0
  146. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/vcs_commands.py +0 -0
  147. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/wireframes.py +0 -0
  148. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith/workspace.py +0 -0
  149. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith.egg-info/SOURCES.txt +0 -0
  150. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith.egg-info/dependency_links.txt +0 -0
  151. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith.egg-info/entry_points.txt +0 -0
  152. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith.egg-info/requires.txt +0 -0
  153. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/src/specsmith.egg-info/top_level.txt +0 -0
  154. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_auditor.py +0 -0
  155. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_cli.py +0 -0
  156. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_compressor.py +0 -0
  157. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_epistemic.py +0 -0
  158. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_importer.py +0 -0
  159. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_integrations.py +0 -0
  160. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_optimizer.py +0 -0
  161. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_rate_limits.py +0 -0
  162. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_scaffolder.py +0 -0
  163. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_smoke.py +0 -0
  164. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_tools.py +0 -0
  165. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_validator.py +0 -0
  166. {specsmith-0.3.6.dev177 → specsmith-0.3.6.dev179}/tests/test_vcs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.3.6.dev177
3
+ Version: 0.3.6.dev179
4
4
  Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.3.6.dev177"
7
+ version = "0.3.6.dev179"
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"
@@ -129,6 +129,10 @@ class OllamaProvider:
129
129
  "model": self.model,
130
130
  "messages": [m.to_dict() for m in messages],
131
131
  "stream": False,
132
+ # keep_alive=-1: keep the model loaded indefinitely between turns.
133
+ # Without this Ollama unloads after 5 min of inactivity, forcing a
134
+ # full reload + re-prefill which causes apparent context loss.
135
+ "keep_alive": -1,
132
136
  "options": {"num_predict": max_tokens, "num_ctx": self._num_ctx},
133
137
  }
134
138
  if self._think is not None:
@@ -161,6 +165,7 @@ class OllamaProvider:
161
165
  "messages": [m.to_dict() for m in messages],
162
166
  "stream": False,
163
167
  "tools": [t.to_openai_schema() for t in tools],
168
+ "keep_alive": -1,
164
169
  "options": {"num_predict": max_tokens, "num_ctx": self._num_ctx},
165
170
  }
166
171
  data = self._post("/api/chat", payload)
@@ -208,6 +213,7 @@ class OllamaProvider:
208
213
  "model": self.model,
209
214
  "messages": [m.to_dict() for m in messages],
210
215
  "stream": True,
216
+ "keep_alive": -1,
211
217
  "options": {"num_predict": max_tokens, "num_ctx": self._num_ctx},
212
218
  }
213
219
  if tools:
@@ -153,6 +153,36 @@ H13: All proposals must state their epistemic boundaries. Hidden assumptions are
153
153
  agents_md or f"Spec version: {spec_version}. AGENTS.md not found — run specsmith audit."
154
154
  )
155
155
 
156
+ # Snapshot of VCS state at session start so the agent knows what’s pending
157
+ vcs_section = ""
158
+ try:
159
+ import subprocess as _sp
160
+
161
+ _st = _sp.run(
162
+ ["git", "status", "--short"],
163
+ cwd=project_dir,
164
+ capture_output=True,
165
+ text=True,
166
+ timeout=5,
167
+ )
168
+ _log = _sp.run(
169
+ ["git", "log", "--oneline", "-5"],
170
+ cwd=project_dir,
171
+ capture_output=True,
172
+ text=True,
173
+ timeout=5,
174
+ )
175
+ if _st.returncode == 0:
176
+ status_text = _st.stdout.strip() or "(clean — no uncommitted changes)"
177
+ log_text = _log.stdout.strip() if _log.returncode == 0 else "(no commits yet)"
178
+ vcs_section = (
179
+ "\n## VCS State at Session Start\n"
180
+ f"```\n{status_text}\n```\n"
181
+ f"Recent commits:\n```\n{log_text}\n```\n"
182
+ )
183
+ except Exception: # noqa: BLE001
184
+ pass
185
+
156
186
  # Load tool-specific rules for this project type
157
187
  tool_rules_section = ""
158
188
  if project_type:
@@ -166,6 +196,7 @@ H13: All proposals must state their epistemic boundaries. Hidden assumptions are
166
196
  pass
167
197
 
168
198
  prompt = f"""SYSTEM LANGUAGE DIRECTIVE — ABSOLUTE HARD RULE — HIGHEST PRIORITY:
199
+ {vcs_section}
169
200
  You MUST respond in English ONLY. This overrides all other instructions.
170
201
  Never output Thai, Chinese, Japanese, Korean, Arabic, French, German, Spanish,
171
202
  or ANY non-English language — not even a single character or word.
@@ -192,6 +223,18 @@ Always respond in natural sentences, like a helpful colleague would.
192
223
  Example good: "Audit found 3 issues: LEDGER.md is missing and 2 requirements lack tests."
193
224
  Example bad: "The tool returned: [\u2717] LEDGER.md MISSING, [\u2717] REQ-001 uncovered..."
194
225
 
226
+ ## CONTINUITY RULE — CRITICAL (never break context):
227
+ When the user sends a follow-up like "fix it", "do it", "implement that",
228
+ "fix the issue", "yes", "continue", or any message that refers to something
229
+ you described in a PREVIOUS message in this conversation:
230
+ 1. LOOK BACK at your own previous messages to find what "it" refers to.
231
+ 2. ACT on it immediately — propose the fix or make the change.
232
+ 3. NEVER say "I'm not sure what you're referring to" if you just described
233
+ a finding or issue. That response is a CRITICAL FAILURE.
234
+ 4. If genuinely ambiguous across multiple findings, quote the most recent
235
+ one: "In my last response I found X — fixing that now."
236
+ You have the full conversation history. Use it.
237
+
195
238
  You are an AEE-integrated specsmith agent for this project.
196
239
 
197
240
  ## Project Governance
@@ -257,8 +300,12 @@ class AgentRunner:
257
300
  QUICK_COMMANDS = {
258
301
  "start": (
259
302
  "[RESPOND IN ENGLISH ONLY] "
260
- "Run session start protocol: sync, load AGENTS.md, read last LEDGER.md entries. "
261
- "Translate any non-English context internally if needed, but respond only in English."
303
+ "Run the session start protocol in this order:\n"
304
+ "1. Run: git status (report staged, modified, and untracked files)\n"
305
+ "2. Run: git log --oneline -5 (report the 5 most recent commits)\n"
306
+ "3. Read AGENTS.md (confirm your role and governance rules)\n"
307
+ "4. Read the last 10 lines of LEDGER.md (confirm current project state)\n"
308
+ "Summarize findings in 3-4 plain sentences, then propose the most logical next action."
262
309
  ),
263
310
  "resume": (
264
311
  "[RESPOND IN ENGLISH ONLY] Resume from last LEDGER.md entry"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.3.6.dev177
3
+ Version: 0.3.6.dev179
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