boost-skill-cli 1.0.22__tar.gz → 1.0.23__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.22 → boost_skill_cli-1.0.23}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/info.py +19 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/output.py +6 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/design-roadmap.html +1 -1
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_info.py +4 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_output.py +18 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/.gitignore +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/LICENSE +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/Makefile +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/README.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/index.html +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/setup.cfg +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/style/README.md +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/style/boost.css +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/style/boost.js +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/style/demo.html +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.22 → boost_skill_cli-1.0.23}/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.23'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 23)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -175,6 +175,25 @@ def cmd_info(argv):
|
|
|
175
175
|
return 0
|
|
176
176
|
|
|
177
177
|
out.heading(name)
|
|
178
|
+
# Identity-card badges: a scannable status strip beneath the name, echoing
|
|
179
|
+
# the web .badge pills. The detailed kv rows below still carry the specifics.
|
|
180
|
+
badges = []
|
|
181
|
+
if lock:
|
|
182
|
+
badges.append(out.badge("installed", "green"))
|
|
183
|
+
if lock.get("pinned"):
|
|
184
|
+
badges.append(out.badge("pinned", "yellow"))
|
|
185
|
+
if lock.get("quarantined"):
|
|
186
|
+
badges.append(out.badge("quarantined", "pink"))
|
|
187
|
+
latest = str((cat or {}).get("version") or "")
|
|
188
|
+
if cat and latest != str(lock.get("version", "?")):
|
|
189
|
+
badges.append(out.badge("update available", "yellow"))
|
|
190
|
+
else:
|
|
191
|
+
badges.append(out.badge("not installed", "cyan"))
|
|
192
|
+
tapname = (lock or cat or {}).get("tap")
|
|
193
|
+
if tapname:
|
|
194
|
+
badges.append(out.badge(str(tapname), "violet"))
|
|
195
|
+
if badges:
|
|
196
|
+
out.info(" ".join(badges))
|
|
178
197
|
if desc:
|
|
179
198
|
lines = textwrap.wrap(desc, width=62)
|
|
180
199
|
out.kv("description", lines[0])
|
|
@@ -177,6 +177,12 @@ def truncate(text: str, width: int, ellipsis: str = "…") -> str:
|
|
|
177
177
|
return text[:width - len(ellipsis)] + ellipsis
|
|
178
178
|
|
|
179
179
|
|
|
180
|
+
def badge(label: str, hue: str = "cyan") -> str:
|
|
181
|
+
"""A compact status pill for identity cards — an Aurora-tinted [label]
|
|
182
|
+
(plain under NO_COLOR), echoing the web design system's .badge pills."""
|
|
183
|
+
return aurora("[" + label + "]", hue)
|
|
184
|
+
|
|
185
|
+
|
|
180
186
|
def kv(key: str, value: str, width: int = 14) -> None:
|
|
181
187
|
print(" " + c(key.ljust(width), DIM) + str(value))
|
|
182
188
|
|
|
@@ -404,7 +404,7 @@
|
|
|
404
404
|
</article>
|
|
405
405
|
|
|
406
406
|
<article class="ritem" data-track="commands" data-impact="low">
|
|
407
|
-
<div class="ritem-top"><span class="rid">BOOST-D17</span><span class="rstatus
|
|
407
|
+
<div class="ritem-top"><span class="rid">BOOST-D17</span><span class="rstatus done">Shipped</span></div>
|
|
408
408
|
<h4><code>list</code> polish — chips & aligned counts</h4>
|
|
409
409
|
<p><code>list</code> already uses a nice <code>·</code> agent separator; take it further. Color the agent names as small chips, right-align the count footer with tabular figures, and add a dim header rule so the table reads as a designed object rather than raw columns.</p>
|
|
410
410
|
<div class="rmeta"><span class="m-cat">commands</span><span>Complexity S</span><span class="m-imp low">Impact Low</span><span class="m-wow">★★★☆☆</span></div>
|
|
@@ -83,6 +83,9 @@ class TestInfo:
|
|
|
83
83
|
assert "claude-code, windsurf, cursor" in r.out
|
|
84
84
|
assert re.search(r"pinned\s+no", r.out)
|
|
85
85
|
assert re.search(r"quarantined\s+no", r.out)
|
|
86
|
+
# D17: identity-card badges beneath the name
|
|
87
|
+
assert "[installed]" in r.out
|
|
88
|
+
assert "[fixture-tap]" in r.out
|
|
86
89
|
|
|
87
90
|
def test_tap_only_skill(self, boost, tapped):
|
|
88
91
|
r = boost("info", "jira-integration")
|
|
@@ -90,6 +93,7 @@ class TestInfo:
|
|
|
90
93
|
assert re.search(r"tap\s+fixture-tap", r.out)
|
|
91
94
|
assert re.search(r"source\s+skills/jira-integration", r.out)
|
|
92
95
|
assert "~/.agents/skills" not in r.out # no store line
|
|
96
|
+
assert "[not installed]" in r.out # D17 badge for tap-only
|
|
93
97
|
assert re.search(r"quality\s+\d+/100", r.out)
|
|
94
98
|
|
|
95
99
|
def test_json_pure(self, boost, installed):
|
|
@@ -278,6 +278,24 @@ class TestTruncate:
|
|
|
278
278
|
assert output.truncate("abcdef", 1) == "…"
|
|
279
279
|
|
|
280
280
|
|
|
281
|
+
class TestBadge:
|
|
282
|
+
def test_plain_when_no_color(self, monkeypatch):
|
|
283
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
284
|
+
assert output.badge("installed", "green") == "[installed]"
|
|
285
|
+
|
|
286
|
+
def test_default_hue_is_cyan(self, monkeypatch):
|
|
287
|
+
monkeypatch.setenv("COLORTERM", "truecolor")
|
|
288
|
+
monkeypatch.setenv("CLICOLOR_FORCE", "1")
|
|
289
|
+
assert output.badge("x") == "\033[38;2;34;211;238m[x]\033[0m"
|
|
290
|
+
|
|
291
|
+
def test_truecolor_wraps_label_in_brackets(self, monkeypatch):
|
|
292
|
+
monkeypatch.setenv("COLORTERM", "truecolor")
|
|
293
|
+
monkeypatch.setenv("CLICOLOR_FORCE", "1")
|
|
294
|
+
# green #4ade80
|
|
295
|
+
assert output.badge("installed", "green") == (
|
|
296
|
+
"\033[38;2;74;222;128m[installed]\033[0m")
|
|
297
|
+
|
|
298
|
+
|
|
281
299
|
class TestHelpers:
|
|
282
300
|
@pytest.fixture(autouse=True)
|
|
283
301
|
def plain(self, monkeypatch):
|
|
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.22 → boost_skill_cli-1.0.23}/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.22 → boost_skill_cli-1.0.23}/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
|