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.
Files changed (81) hide show
  1. {specsmith-0.1.4.dev20/src/specsmith.egg-info → specsmith-0.1.4.dev22}/PKG-INFO +1 -1
  2. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/pyproject.toml +1 -1
  3. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/updater.py +40 -8
  4. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22/src/specsmith.egg-info}/PKG-INFO +1 -1
  5. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/LICENSE +0 -0
  6. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/README.md +0 -0
  7. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/setup.cfg +0 -0
  8. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/__init__.py +0 -0
  9. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/__main__.py +0 -0
  10. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/auditor.py +0 -0
  11. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/cli.py +0 -0
  12. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/commands/__init__.py +0 -0
  13. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/compressor.py +0 -0
  14. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/config.py +0 -0
  15. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/differ.py +0 -0
  16. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/doctor.py +0 -0
  17. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/exporter.py +0 -0
  18. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/importer.py +0 -0
  19. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/__init__.py +0 -0
  20. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/aider.py +0 -0
  21. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/base.py +0 -0
  22. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/claude_code.py +0 -0
  23. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/copilot.py +0 -0
  24. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/cursor.py +0 -0
  25. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/gemini.py +0 -0
  26. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/warp.py +0 -0
  27. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/integrations/windsurf.py +0 -0
  28. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/ledger.py +0 -0
  29. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/plugins.py +0 -0
  30. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/releaser.py +0 -0
  31. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/requirements.py +0 -0
  32. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/scaffolder.py +0 -0
  33. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/session.py +0 -0
  34. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/agents.md.j2 +0 -0
  35. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  36. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  37. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  38. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/docs/workflow.md.j2 +0 -0
  39. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/gitattributes.j2 +0 -0
  40. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/gitignore.j2 +0 -0
  41. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  42. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  43. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  44. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  45. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  46. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/governance/workflow.md.j2 +0 -0
  47. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/ledger.md.j2 +0 -0
  48. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/pyproject.toml.j2 +0 -0
  49. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/python/cli.py.j2 +0 -0
  50. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/python/init.py.j2 +0 -0
  51. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/readme.md.j2 +0 -0
  52. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  53. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  54. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  55. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  56. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  57. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  58. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/tools.py +0 -0
  59. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/upgrader.py +0 -0
  60. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/validator.py +0 -0
  61. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/__init__.py +0 -0
  62. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/base.py +0 -0
  63. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/bitbucket.py +0 -0
  64. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/github.py +0 -0
  65. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs/gitlab.py +0 -0
  66. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith/vcs_commands.py +0 -0
  67. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/SOURCES.txt +0 -0
  68. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/dependency_links.txt +0 -0
  69. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/entry_points.txt +0 -0
  70. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/requires.txt +0 -0
  71. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/src/specsmith.egg-info/top_level.txt +0 -0
  72. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_auditor.py +0 -0
  73. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_cli.py +0 -0
  74. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_compressor.py +0 -0
  75. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_importer.py +0 -0
  76. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_integrations.py +0 -0
  77. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_scaffolder.py +0 -0
  78. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_smoke.py +0 -0
  79. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_tools.py +0 -0
  80. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_validator.py +0 -0
  81. {specsmith-0.1.4.dev20 → specsmith-0.1.4.dev22}/tests/test_vcs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.1.4.dev20
3
+ Version: 0.1.4.dev22
4
4
  Summary: Forge governed project scaffolds from the Agentic AI Development Workflow Specification.
5
5
  Author: BitConcepts
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.1.4.dev20"
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 check_latest_version() -> tuple[str, str]:
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
- latest = data["info"]["version"]
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
- ["pip", "install", "--upgrade", "specsmith"],
76
+ cmd,
45
77
  capture_output=True,
46
78
  text=True,
47
79
  timeout=120,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.1.4.dev20
3
+ Version: 0.1.4.dev22
4
4
  Summary: Forge governed project scaffolds from the Agentic AI Development Workflow Specification.
5
5
  Author: BitConcepts
6
6
  License: MIT
File without changes