specsmith 0.3.0.dev132__tar.gz → 0.3.0.dev136__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 (158) hide show
  1. {specsmith-0.3.0.dev132/src/specsmith.egg-info → specsmith-0.3.0.dev136}/PKG-INFO +24 -4
  2. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/README.md +23 -3
  3. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/pyproject.toml +16 -1
  4. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/agents.md.j2 +13 -0
  5. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/updater.py +34 -8
  6. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136/src/specsmith.egg-info}/PKG-INFO +24 -4
  7. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/LICENSE +0 -0
  8. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/setup.cfg +0 -0
  9. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/__init__.py +0 -0
  10. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/belief.py +0 -0
  11. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/certainty.py +0 -0
  12. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/failure_graph.py +0 -0
  13. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/py.typed +0 -0
  14. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/recovery.py +0 -0
  15. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/session.py +0 -0
  16. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/stress_tester.py +0 -0
  17. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/epistemic/trace.py +0 -0
  18. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/__init__.py +0 -0
  19. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/__main__.py +0 -0
  20. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/__init__.py +0 -0
  21. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/core.py +0 -0
  22. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/hooks.py +0 -0
  23. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/optimizer.py +0 -0
  24. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/profiles/epistemic-auditor.md +0 -0
  25. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/profiles/planner.md +0 -0
  26. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/profiles/verifier.md +0 -0
  27. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/__init__.py +0 -0
  28. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/anthropic.py +0 -0
  29. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/gemini.py +0 -0
  30. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/mistral.py +0 -0
  31. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/ollama.py +0 -0
  32. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/providers/openai.py +0 -0
  33. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/runner.py +0 -0
  34. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/skills.py +0 -0
  35. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/agent/tools.py +0 -0
  36. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/architect.py +0 -0
  37. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/auditor.py +0 -0
  38. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/auth.py +0 -0
  39. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/cli.py +0 -0
  40. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/commands/__init__.py +0 -0
  41. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/compressor.py +0 -0
  42. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/config.py +0 -0
  43. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/credit_analyzer.py +0 -0
  44. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/credits.py +0 -0
  45. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/differ.py +0 -0
  46. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/doctor.py +0 -0
  47. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/__init__.py +0 -0
  48. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/belief.py +0 -0
  49. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/certainty.py +0 -0
  50. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/failure_graph.py +0 -0
  51. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/recovery.py +0 -0
  52. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/epistemic/stress_tester.py +0 -0
  53. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/executor.py +0 -0
  54. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/exporter.py +0 -0
  55. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/__init__.py +0 -0
  56. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/app.py +0 -0
  57. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/main_window.py +0 -0
  58. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/session_tab.py +0 -0
  59. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/theme.py +0 -0
  60. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/__init__.py +0 -0
  61. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/chat_view.py +0 -0
  62. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/input_bar.py +0 -0
  63. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  64. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/token_meter.py +0 -0
  65. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  66. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/widgets/update_checker.py +0 -0
  67. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/gui/worker.py +0 -0
  68. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/importer.py +0 -0
  69. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/__init__.py +0 -0
  70. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/aider.py +0 -0
  71. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/base.py +0 -0
  72. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/claude_code.py +0 -0
  73. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/copilot.py +0 -0
  74. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/cursor.py +0 -0
  75. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/gemini.py +0 -0
  76. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/warp.py +0 -0
  77. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/integrations/windsurf.py +0 -0
  78. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/ledger.py +0 -0
  79. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/patent.py +0 -0
  80. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/plugins.py +0 -0
  81. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/rate_limits.py +0 -0
  82. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/releaser.py +0 -0
  83. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/requirements.py +0 -0
  84. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/scaffolder.py +0 -0
  85. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/session.py +0 -0
  86. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  87. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  88. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  89. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  90. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  91. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  92. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  93. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/community/security.md.j2 +0 -0
  94. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  95. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  96. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  97. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  98. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  99. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
  100. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/editorconfig.j2 +0 -0
  101. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/gitattributes.j2 +0 -0
  102. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/gitignore.j2 +0 -0
  103. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/go/go.mod.j2 +0 -0
  104. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/go/main.go.j2 +0 -0
  105. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  106. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  107. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  108. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  109. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  110. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  111. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  112. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  113. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  114. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
  115. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/js/package.json.j2 +0 -0
  116. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/ledger.md.j2 +0 -0
  117. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/python/cli.py.j2 +0 -0
  118. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/python/init.py.j2 +0 -0
  119. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  120. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/readme.md.j2 +0 -0
  121. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  122. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  123. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  124. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  125. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  126. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  127. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  128. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  129. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  130. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/tools.py +0 -0
  131. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/trace.py +0 -0
  132. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/upgrader.py +0 -0
  133. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/validator.py +0 -0
  134. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs/__init__.py +0 -0
  135. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs/base.py +0 -0
  136. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs/bitbucket.py +0 -0
  137. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs/github.py +0 -0
  138. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs/gitlab.py +0 -0
  139. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/vcs_commands.py +0 -0
  140. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith/workspace.py +0 -0
  141. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith.egg-info/SOURCES.txt +0 -0
  142. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith.egg-info/dependency_links.txt +0 -0
  143. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith.egg-info/entry_points.txt +0 -0
  144. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith.egg-info/requires.txt +0 -0
  145. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/src/specsmith.egg-info/top_level.txt +0 -0
  146. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_auditor.py +0 -0
  147. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_cli.py +0 -0
  148. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_compressor.py +0 -0
  149. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_epistemic.py +0 -0
  150. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_importer.py +0 -0
  151. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_integrations.py +0 -0
  152. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_optimizer.py +0 -0
  153. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_rate_limits.py +0 -0
  154. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_scaffolder.py +0 -0
  155. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_smoke.py +0 -0
  156. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_tools.py +0 -0
  157. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_validator.py +0 -0
  158. {specsmith-0.3.0.dev132 → specsmith-0.3.0.dev136}/tests/test_vcs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.3.0.dev132
3
+ Version: 0.3.0.dev136
4
4
  Summary: Applied Epistemic Engineering toolkit — forge epistemically-governed scaffolds, stress-test belief systems, and run AEE pipelines.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -141,10 +141,30 @@ Every governed project follows: **propose → check → execute → verify → r
141
141
 
142
142
  ## Install
143
143
 
144
+ **Recommended — global install via [pipx](https://pipx.pypa.io) (isolated, no dependency conflicts):**
145
+
146
+ ```bash
147
+ pipx install specsmith # core CLI + epistemic library
148
+ pipx inject specsmith anthropic # + Claude support
149
+ pipx inject specsmith openai # + GPT / O-series support
150
+ pipx inject specsmith google-generativeai # + Gemini support
151
+ pipx inject specsmith PySide6 # + GUI (specsmith gui)
152
+ ```
153
+
154
+ **Or with pip (into your active environment):**
155
+
156
+ ```bash
157
+ pip install specsmith # core
158
+ pip install "specsmith[anthropic]" # + Claude
159
+ pip install "specsmith[openai]" # + GPT/O-series
160
+ pip install "specsmith[gui]" # + GUI
161
+ ```
162
+
163
+ **Update:**
164
+
144
165
  ```bash
145
- pip install specsmith # core + epistemic library
146
- pip install specsmith[anthropic] # + Claude support (specsmith run)
147
- pip install specsmith[openai] # + GPT/O-series support
166
+ pipx upgrade specsmith # pipx install
167
+ specsmith self-update # pip install
148
168
  ```
149
169
 
150
170
  ## Quick Start
@@ -76,10 +76,30 @@ Every governed project follows: **propose → check → execute → verify → r
76
76
 
77
77
  ## Install
78
78
 
79
+ **Recommended — global install via [pipx](https://pipx.pypa.io) (isolated, no dependency conflicts):**
80
+
81
+ ```bash
82
+ pipx install specsmith # core CLI + epistemic library
83
+ pipx inject specsmith anthropic # + Claude support
84
+ pipx inject specsmith openai # + GPT / O-series support
85
+ pipx inject specsmith google-generativeai # + Gemini support
86
+ pipx inject specsmith PySide6 # + GUI (specsmith gui)
87
+ ```
88
+
89
+ **Or with pip (into your active environment):**
90
+
91
+ ```bash
92
+ pip install specsmith # core
93
+ pip install "specsmith[anthropic]" # + Claude
94
+ pip install "specsmith[openai]" # + GPT/O-series
95
+ pip install "specsmith[gui]" # + GUI
96
+ ```
97
+
98
+ **Update:**
99
+
79
100
  ```bash
80
- pip install specsmith # core + epistemic library
81
- pip install specsmith[anthropic] # + Claude support (specsmith run)
82
- pip install specsmith[openai] # + GPT/O-series support
101
+ pipx upgrade specsmith # pipx install
102
+ specsmith self-update # pip install
83
103
  ```
84
104
 
85
105
  ## Quick Start
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.3.0.dev132"
7
+ version = "0.3.0.dev136"
8
8
  description = "Applied Epistemic Engineering toolkit — forge epistemically-governed scaffolds, stress-test belief systems, and run AEE pipelines."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -105,5 +105,20 @@ warn_unused_configs = true
105
105
  # environment. Exclude it from type-checking to avoid false positives.
106
106
  exclude = ["src/specsmith/gui"]
107
107
 
108
+ # Optional extras — installed by the user, not in the dev environment.
109
+ # Ignore missing stubs rather than failing type-check for absent packages.
110
+ [[tool.mypy.overrides]]
111
+ module = [
112
+ "anthropic",
113
+ "anthropic.*",
114
+ "openai",
115
+ "openai.*",
116
+ "google.generativeai",
117
+ "google.generativeai.*",
118
+ "keyring",
119
+ "keyring.*",
120
+ ]
121
+ ignore_missing_imports = true
122
+
108
123
  [tool.pytest.ini_options]
109
124
  testpaths = ["tests"]
@@ -215,3 +215,16 @@ Stop condition (H13): P1 requirement with confidence below MEDIUM = work stops.
215
215
  | `pr` | `specsmith pr` (create PR with governance) |
216
216
  | `update` | `specsmith update` (check + install + migrate) |
217
217
  | `session-end` | `specsmith session-end` (end checklist) |
218
+
219
+ **specsmith install / update:**
220
+
221
+ ```bash
222
+ # Recommended — global isolated install
223
+ pipx install specsmith
224
+ pipx inject specsmith anthropic openai # add LLM providers
225
+ pipx upgrade specsmith # update
226
+
227
+ # Or with pip
228
+ pip install specsmith
229
+ specsmith self-update
230
+ ```
@@ -60,24 +60,50 @@ def is_outdated() -> bool:
60
60
  return current != latest
61
61
 
62
62
 
63
+ def is_pipx_install() -> bool:
64
+ """Return True if specsmith was installed via pipx.
65
+
66
+ Checks sys.executable path and PIPX_HOME / PIPX_LOCAL_VENVS env vars.
67
+ """
68
+ import os
69
+ import sys
70
+
71
+ exe = sys.executable.replace("\\", "/").lower()
72
+ return (
73
+ "pipx" in exe
74
+ or bool(os.environ.get("PIPX_HOME"))
75
+ or bool(os.environ.get("PIPX_LOCAL_VENVS"))
76
+ )
77
+
78
+
63
79
  def run_self_update(
64
80
  *,
65
81
  channel: str = "",
66
82
  target_version: str = "",
67
83
  ) -> tuple[bool, str]:
68
- """Update specsmith via pip.
84
+ """Update specsmith.
85
+
86
+ Detects whether running under pipx and uses the appropriate command:
87
+ - pipx: ``pipx upgrade specsmith`` (or ``pipx install specsmith==X.Y.Z``)
88
+ - pip: ``pip install --upgrade specsmith``
69
89
 
70
90
  If target_version is set, installs that exact version.
71
91
  Otherwise uses --pre flag for dev channel, plain upgrade for stable.
72
92
  """
73
- if target_version:
74
- cmd = ["pip", "install", f"specsmith=={target_version}"]
93
+ if is_pipx_install():
94
+ if target_version:
95
+ cmd = ["pipx", "install", f"specsmith=={target_version}", "--force"]
96
+ else:
97
+ cmd = ["pipx", "upgrade", "specsmith"]
75
98
  else:
76
- if not channel:
77
- channel = get_update_channel()
78
- cmd = ["pip", "install", "--upgrade", "specsmith"]
79
- if channel == "dev":
80
- cmd.insert(2, "--pre")
99
+ if target_version:
100
+ cmd = ["pip", "install", f"specsmith=={target_version}"]
101
+ else:
102
+ if not channel:
103
+ channel = get_update_channel()
104
+ cmd = ["pip", "install", "--upgrade", "specsmith"]
105
+ if channel == "dev":
106
+ cmd.insert(2, "--pre")
81
107
 
82
108
  try:
83
109
  result = subprocess.run(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.3.0.dev132
3
+ Version: 0.3.0.dev136
4
4
  Summary: Applied Epistemic Engineering toolkit — forge epistemically-governed scaffolds, stress-test belief systems, and run AEE pipelines.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -141,10 +141,30 @@ Every governed project follows: **propose → check → execute → verify → r
141
141
 
142
142
  ## Install
143
143
 
144
+ **Recommended — global install via [pipx](https://pipx.pypa.io) (isolated, no dependency conflicts):**
145
+
146
+ ```bash
147
+ pipx install specsmith # core CLI + epistemic library
148
+ pipx inject specsmith anthropic # + Claude support
149
+ pipx inject specsmith openai # + GPT / O-series support
150
+ pipx inject specsmith google-generativeai # + Gemini support
151
+ pipx inject specsmith PySide6 # + GUI (specsmith gui)
152
+ ```
153
+
154
+ **Or with pip (into your active environment):**
155
+
156
+ ```bash
157
+ pip install specsmith # core
158
+ pip install "specsmith[anthropic]" # + Claude
159
+ pip install "specsmith[openai]" # + GPT/O-series
160
+ pip install "specsmith[gui]" # + GUI
161
+ ```
162
+
163
+ **Update:**
164
+
144
165
  ```bash
145
- pip install specsmith # core + epistemic library
146
- pip install specsmith[anthropic] # + Claude support (specsmith run)
147
- pip install specsmith[openai] # + GPT/O-series support
166
+ pipx upgrade specsmith # pipx install
167
+ specsmith self-update # pip install
148
168
  ```
149
169
 
150
170
  ## Quick Start