specsmith 0.3.0.dev132__py3-none-any.whl → 0.3.0.dev136__py3-none-any.whl

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.
@@ -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
+ ```
specsmith/updater.py CHANGED
@@ -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
@@ -32,7 +32,7 @@ specsmith/scaffolder.py,sha256=brtVoRXI41i5ttgAdsPtFy74FyD0iPnHdMVt8f85MYc,16909
32
32
  specsmith/session.py,sha256=Q3yN6ldDfcEOWUiMntvgpMdc9dB6yxUe52Vbb2Fd50Y,4481
33
33
  specsmith/tools.py,sha256=IZ8gVGGgDvbrU5ErG4QoUF3eI_Z3K5A4Qhlp58nGPwU,14010
34
34
  specsmith/trace.py,sha256=XuS-miv4WHt6yCniyytjZcIvgnjZj-DRxDQMHy6eNTc,10397
35
- specsmith/updater.py,sha256=egv6QmYswjb8bvlYTNG71SKCHf507_9haHR1VJXCtjc,5235
35
+ specsmith/updater.py,sha256=BWtXK47tIhmpw4zvy0UtlAoL314fZIZWbZ50FFOkBPo,6063
36
36
  specsmith/upgrader.py,sha256=Hvjowhg2leGHRQMdF0enHwvJhh8I45UFAX64YkL3jLM,12790
37
37
  specsmith/validator.py,sha256=nJDzD0a6JmShuZi0mADxNVhjN_n93Kpjj4WySbYlGco,10627
38
38
  specsmith/vcs_commands.py,sha256=xDJb6FsREPQ8waF1rq5_KMxc8P1Gh9YrIUSjCitMnAU,10245
@@ -82,7 +82,7 @@ specsmith/integrations/cursor.py,sha256=xEbdq2a8zHvbvmQmkvOWmAPFGxuTrn0V4Dkvoq3w
82
82
  specsmith/integrations/gemini.py,sha256=vmyOIJX8IYYEk7EWfBUmd8O7uo4DlPPKyqu8-ZlQpW4,1839
83
83
  specsmith/integrations/warp.py,sha256=szzCGP4RyqLGuBSHIAVuPjBrSvYmIrhA37xnqY5JhOA,3501
84
84
  specsmith/integrations/windsurf.py,sha256=dwSiYT_OrSo_SEzfXS2LvHeb5TEkSVzQ_XO15VN1SlU,1682
85
- specsmith/templates/agents.md.j2,sha256=oE9a7aM-7EKCjFNMXRIhdar7kvM3vK-k8_ICpasezkA,10312
85
+ specsmith/templates/agents.md.j2,sha256=z_tDaF-WtkAdnMRvyZURj_hAdg5lxIthwPlwRprh1FE,10591
86
86
  specsmith/templates/editorconfig.j2,sha256=nFpLLwwxfwg2AIJK029bvHHE4srhzen-Wn-oORF-iyo,1651
87
87
  specsmith/templates/gitattributes.j2,sha256=WlO0yV2aBrPiVWilH7L_EcfUiD0mMfn99AevjRRwWOM,2869
88
88
  specsmith/templates/gitignore.j2,sha256=ApiF5LwezoTqm20247rnGKMu1oRKp9Tf0z8PsQcZBF8,2501
@@ -132,9 +132,9 @@ specsmith/vcs/base.py,sha256=IzyC3xtO8npaNbGZoAzgQyc9iSKleJFnp4GA0otTJfU,4098
132
132
  specsmith/vcs/bitbucket.py,sha256=U5cGqpybuPngjpu5GDM8aTZPm9bvZf1099OSBwU_Lro,5014
133
133
  specsmith/vcs/github.py,sha256=OVTLs9egmM_Smrxm4-Lo525Pi59x0PDMOOwqNNiM7lA,11995
134
134
  specsmith/vcs/gitlab.py,sha256=fDYYoDBic0KBnD_QWYf_K3GmdZOEartLXhzNXf4D4-0,5136
135
- specsmith-0.3.0.dev132.dist-info/licenses/LICENSE,sha256=jCLkf20ZMVU47ykbfIxw-5eukhnaeIsxSflw07hVNlY,1074
136
- specsmith-0.3.0.dev132.dist-info/METADATA,sha256=CSGul2Uj3rMUg8F8BtYaPPs0MyDnOF1vAxkfz_TmYNo,13512
137
- specsmith-0.3.0.dev132.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
138
- specsmith-0.3.0.dev132.dist-info/entry_points.txt,sha256=X_zb8_KvBONFGgkQYKIbW1UtWd3Ck7E11l3SyHO7omA,49
139
- specsmith-0.3.0.dev132.dist-info/top_level.txt,sha256=wu2UpLt3wnh0TwSBmoox7kOMoGfzD6mUs22ihAcEx4E,20
140
- specsmith-0.3.0.dev132.dist-info/RECORD,,
135
+ specsmith-0.3.0.dev136.dist-info/licenses/LICENSE,sha256=jCLkf20ZMVU47ykbfIxw-5eukhnaeIsxSflw07hVNlY,1074
136
+ specsmith-0.3.0.dev136.dist-info/METADATA,sha256=1WL4iZ-FPyqziTQw-NiJTscbohO0ELhyAQm1exFY8T4,14116
137
+ specsmith-0.3.0.dev136.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
138
+ specsmith-0.3.0.dev136.dist-info/entry_points.txt,sha256=X_zb8_KvBONFGgkQYKIbW1UtWd3Ck7E11l3SyHO7omA,49
139
+ specsmith-0.3.0.dev136.dist-info/top_level.txt,sha256=wu2UpLt3wnh0TwSBmoox7kOMoGfzD6mUs22ihAcEx4E,20
140
+ specsmith-0.3.0.dev136.dist-info/RECORD,,