boost-skill-cli 1.0.44__tar.gz → 1.0.45__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.
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/output.py +9 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/design-roadmap.html +1 -1
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_output.py +30 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/.gitignore +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/LICENSE +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/Makefile +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/README.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/index.html +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/setup.cfg +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/style/README.md +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/style/boost.css +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/style/boost.js +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/style/demo.html +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/unit/test_version.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.45'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 45)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -26,6 +26,15 @@ CYAN = "\033[36m"
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
def use_color(stream=None) -> bool:
|
|
29
|
+
# BOOST_COLOR is boost's own explicit override and wins over everything
|
|
30
|
+
# else (most-specific-wins): always/never force it on/off regardless of
|
|
31
|
+
# NO_COLOR, CLICOLOR_FORCE or the TTY check. Anything else (incl. "auto")
|
|
32
|
+
# falls through to the standard detection below.
|
|
33
|
+
override = os.environ.get("BOOST_COLOR", "").lower()
|
|
34
|
+
if override in ("never", "off", "0"):
|
|
35
|
+
return False
|
|
36
|
+
if override in ("always", "force", "1"):
|
|
37
|
+
return True
|
|
29
38
|
if os.environ.get("NO_COLOR"):
|
|
30
39
|
return False
|
|
31
40
|
if os.environ.get("CLICOLOR_FORCE"):
|
|
@@ -239,7 +239,7 @@
|
|
|
239
239
|
</article>
|
|
240
240
|
|
|
241
241
|
<article class="ritem" data-track="color" data-impact="high">
|
|
242
|
-
<div class="ritem-top"><span class="rid">BOOST-D02</span><span class="rstatus
|
|
242
|
+
<div class="ritem-top"><span class="rid">BOOST-D02</span><span class="rstatus done">Shipped</span></div>
|
|
243
243
|
<h4>Terminal capability detection & graceful degradation</h4>
|
|
244
244
|
<p><code>use_color()</code> is binary — color or nothing. Add a tier ladder: <b>truecolor</b> (<code>COLORTERM=truecolor/24bit</code>) → <b>256</b> → <b>16</b> → <b>none</b>, so the Aurora tokens snap to the nearest available color instead of vanishing. Keep the existing <code>NO_COLOR</code> honor, add a <code>BOOST_COLOR=always/auto/never</code> override, and treat <code>TERM=dumb</code> as none.</p>
|
|
245
245
|
<div class="rmeta"><span class="m-cat">color</span><span>Complexity M</span><span class="m-imp high">Impact High</span><span class="m-wow">★★★☆☆</span></div>
|
|
@@ -14,6 +14,7 @@ def clean_env(monkeypatch):
|
|
|
14
14
|
"""Neutral color/confirm environment; each test opts in explicitly."""
|
|
15
15
|
monkeypatch.delenv("NO_COLOR", raising=False)
|
|
16
16
|
monkeypatch.delenv("CLICOLOR_FORCE", raising=False)
|
|
17
|
+
monkeypatch.delenv("BOOST_COLOR", raising=False)
|
|
17
18
|
monkeypatch.delenv("BOOST_ASSUME_YES", raising=False)
|
|
18
19
|
monkeypatch.setattr(sys, "argv", ["boost"])
|
|
19
20
|
|
|
@@ -46,6 +47,35 @@ class TestUseColor:
|
|
|
46
47
|
def test_tty_true(self):
|
|
47
48
|
assert output.use_color(FakeStream(tty=True)) is True
|
|
48
49
|
|
|
50
|
+
def test_boost_color_never_beats_clicolor_force(self, monkeypatch):
|
|
51
|
+
monkeypatch.setenv("BOOST_COLOR", "never")
|
|
52
|
+
monkeypatch.setenv("CLICOLOR_FORCE", "1")
|
|
53
|
+
assert output.use_color(FakeStream(tty=True)) is False
|
|
54
|
+
|
|
55
|
+
def test_boost_color_always_beats_no_color(self, monkeypatch):
|
|
56
|
+
monkeypatch.setenv("BOOST_COLOR", "always")
|
|
57
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
58
|
+
assert output.use_color(FakeStream(tty=False)) is True
|
|
59
|
+
|
|
60
|
+
def test_boost_color_off_alias(self, monkeypatch):
|
|
61
|
+
monkeypatch.setenv("BOOST_COLOR", "off")
|
|
62
|
+
assert output.use_color(FakeStream(tty=True)) is False
|
|
63
|
+
|
|
64
|
+
def test_boost_color_auto_falls_through_to_tty(self, monkeypatch):
|
|
65
|
+
monkeypatch.setenv("BOOST_COLOR", "auto")
|
|
66
|
+
assert output.use_color(FakeStream(tty=True)) is True
|
|
67
|
+
assert output.use_color(FakeStream(tty=False)) is False
|
|
68
|
+
|
|
69
|
+
def test_boost_color_all_off_aliases(self, monkeypatch):
|
|
70
|
+
for val in ("never", "off", "0"):
|
|
71
|
+
monkeypatch.setenv("BOOST_COLOR", val)
|
|
72
|
+
assert output.use_color(FakeStream(tty=True)) is False, val
|
|
73
|
+
|
|
74
|
+
def test_boost_color_all_on_aliases(self, monkeypatch):
|
|
75
|
+
for val in ("always", "force", "1"):
|
|
76
|
+
monkeypatch.setenv("BOOST_COLOR", val)
|
|
77
|
+
assert output.use_color(FakeStream(tty=False)) is True, val
|
|
78
|
+
|
|
49
79
|
def test_stream_without_isatty_false(self):
|
|
50
80
|
assert output.use_color(object()) is False
|
|
51
81
|
|
|
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
|
|
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
|
{boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/boost_skill_cli.egg-info/dependency_links.txt
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
|
{boost_skill_cli-1.0.44 → boost_skill_cli-1.0.45}/tests/functional/test_cli_configuration.py
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
|
|
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
|