specsmith 0.1.4.dev20__tar.gz → 0.1.4.dev22__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.
- {specsmith-0.1.4.dev20/src/specsmith.egg-info → specsmith-0.1.4.dev22}/PKG-INFO +1 -1
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/pyproject.toml +1 -1
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/updater.py +40 -8
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/LICENSE +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/README.md +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/setup.cfg +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/__init__.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/__main__.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/auditor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/cli.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/compressor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/config.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/differ.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/doctor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/exporter.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/importer.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/warp.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/ledger.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/plugins.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/releaser.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/requirements.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/session.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/pyproject.toml.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/tools.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/validator.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_auditor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_cli.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_compressor.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_importer.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_integrations.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_scaffolder.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_smoke.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_tools.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_validator.py +0 -0
- {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_vcs.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.1.4.
|
|
7
|
+
version = "0.1.4.dev22"
|
|
8
8
|
description = "Forge governed project scaffolds from the Agentic AI Development Workflow Specification."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -10,11 +10,25 @@ from pathlib import Path
|
|
|
10
10
|
from specsmith import __version__
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def
|
|
13
|
+
def get_update_channel() -> str:
|
|
14
|
+
"""Determine update channel from installed version.
|
|
15
|
+
|
|
16
|
+
Returns 'dev' if current version has .dev suffix, else 'stable'.
|
|
17
|
+
"""
|
|
18
|
+
return "dev" if ".dev" in __version__ else "stable"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def check_latest_version(
|
|
22
|
+
*, channel: str = "",
|
|
23
|
+
) -> tuple[str, str, str]:
|
|
14
24
|
"""Check PyPI for the latest specsmith version.
|
|
15
25
|
|
|
16
|
-
Returns (current_version, latest_version).
|
|
26
|
+
Returns (current_version, latest_version, channel).
|
|
27
|
+
Channel is auto-detected from installed version if not specified.
|
|
17
28
|
"""
|
|
29
|
+
if not channel:
|
|
30
|
+
channel = get_update_channel()
|
|
31
|
+
|
|
18
32
|
latest = ""
|
|
19
33
|
try:
|
|
20
34
|
import json
|
|
@@ -23,25 +37,43 @@ def check_latest_version() -> tuple[str, str]:
|
|
|
23
37
|
url = "https://pypi.org/pypi/specsmith/json"
|
|
24
38
|
resp = urllib.request.urlopen(url, timeout=10) # noqa: S310
|
|
25
39
|
data = json.loads(resp.read())
|
|
26
|
-
|
|
40
|
+
|
|
41
|
+
if channel == "dev":
|
|
42
|
+
# Find highest version including pre-releases
|
|
43
|
+
all_versions = sorted(data["releases"].keys())
|
|
44
|
+
if all_versions:
|
|
45
|
+
latest = all_versions[-1]
|
|
46
|
+
else:
|
|
47
|
+
# Stable: use the default (non-pre) version
|
|
48
|
+
latest = data["info"]["version"]
|
|
27
49
|
except Exception: # noqa: BLE001
|
|
28
50
|
pass
|
|
29
|
-
return __version__, latest
|
|
51
|
+
return __version__, latest, channel
|
|
30
52
|
|
|
31
53
|
|
|
32
54
|
def is_outdated() -> bool:
|
|
33
55
|
"""Check if current specsmith is outdated."""
|
|
34
|
-
current, latest = check_latest_version()
|
|
56
|
+
current, latest, _channel = check_latest_version()
|
|
35
57
|
if not latest:
|
|
36
58
|
return False
|
|
37
59
|
return current != latest
|
|
38
60
|
|
|
39
61
|
|
|
40
|
-
def run_self_update() -> tuple[bool, str]:
|
|
41
|
-
"""Update specsmith via pip.
|
|
62
|
+
def run_self_update(*, channel: str = "") -> tuple[bool, str]:
|
|
63
|
+
"""Update specsmith via pip.
|
|
64
|
+
|
|
65
|
+
Uses --pre flag for dev channel.
|
|
66
|
+
"""
|
|
67
|
+
if not channel:
|
|
68
|
+
channel = get_update_channel()
|
|
69
|
+
|
|
70
|
+
cmd = ["pip", "install", "--upgrade", "specsmith"]
|
|
71
|
+
if channel == "dev":
|
|
72
|
+
cmd.insert(2, "--pre")
|
|
73
|
+
|
|
42
74
|
try:
|
|
43
75
|
result = subprocess.run(
|
|
44
|
-
|
|
76
|
+
cmd,
|
|
45
77
|
capture_output=True,
|
|
46
78
|
text=True,
|
|
47
79
|
timeout=120,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/architecture.md.j2
RENAMED
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/requirements.md.j2
RENAMED
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/test-spec.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/roles.md.j2
RENAMED
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/rules.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/workflow.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/setup.cmd.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|