boost-skill-cli 1.0.26__tar.gz → 1.0.28__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.26 → boost_skill_cli-1.0.28}/PKG-INFO +1 -1
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/discovery.py +4 -3
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/pkg.py +9 -1
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/output.py +34 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/PKG-INFO +1 -1
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/design-roadmap.html +2 -2
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_discovery.py +3 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_pkg.py +3 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_output.py +47 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/.gitignore +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/LICENSE +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/Makefile +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/README.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/cli.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/bmad.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/index.html +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/docs/roadmap.html +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/setup.cfg +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/style/README.md +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/style/boost.css +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/style/boost.js +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/style/demo.html +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_bmad.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.26 → boost_skill_cli-1.0.28}/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.28'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 28)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -716,7 +716,8 @@ def cmd_count(argv):
|
|
|
716
716
|
print(json.dumps({"installed": installed_n, "available": available_n,
|
|
717
717
|
"taps": taps_n, "discovery": discovery}))
|
|
718
718
|
return 0
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
719
|
+
summary = ("installed %d · available %d (across %d tap%s) · discovery index %s"
|
|
720
|
+
% (installed_n, available_n, taps_n, "" if taps_n == 1 else "s",
|
|
721
|
+
discovery if discovery is not None else "not built"))
|
|
722
|
+
print(out.panel(summary, title="inventory"))
|
|
722
723
|
return 0
|
|
@@ -140,7 +140,15 @@ def cmd_install(argv: List[str]) -> int:
|
|
|
140
140
|
if len(results) - new:
|
|
141
141
|
parts.append("Upgraded %s" % _plural(len(results) - new, "skill"))
|
|
142
142
|
avg = round(sum(r.score for r in results) / len(results))
|
|
143
|
-
|
|
143
|
+
summary = "%s; quality score %d/100" % ("; ".join(parts), avg)
|
|
144
|
+
lines = [summary]
|
|
145
|
+
if len(results) == 1:
|
|
146
|
+
r0 = results[0]
|
|
147
|
+
if r0.linked:
|
|
148
|
+
lines.append(out.c("%s → %s" % (r0.name, " · ".join(r0.linked)),
|
|
149
|
+
out.DIM))
|
|
150
|
+
lines.append(out.c("next: boost info %s" % r0.name, out.DIM))
|
|
151
|
+
print(out.panel(lines, title="installed", hue="green"))
|
|
144
152
|
return 1 if failed else 0
|
|
145
153
|
|
|
146
154
|
|
|
@@ -10,6 +10,7 @@ Conventions used across all commands:
|
|
|
10
10
|
from __future__ import annotations
|
|
11
11
|
|
|
12
12
|
import os
|
|
13
|
+
import re
|
|
13
14
|
import shutil
|
|
14
15
|
import sys
|
|
15
16
|
|
|
@@ -183,6 +184,39 @@ def badge(label: str, hue: str = "cyan") -> str:
|
|
|
183
184
|
return aurora("[" + label + "]", hue)
|
|
184
185
|
|
|
185
186
|
|
|
187
|
+
_ANSI_RE = re.compile(r"\033\[[0-9;]*m")
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def visible_len(s: str) -> int:
|
|
191
|
+
"""Length of a string ignoring ANSI color escapes — its column width."""
|
|
192
|
+
return len(_ANSI_RE.sub("", s))
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def panel(lines, title: str | None = None, hue: str = "cyan") -> str:
|
|
196
|
+
"""A rounded box around one or more lines, with an Aurora-tinted border and
|
|
197
|
+
an optional title set into the top rule — the terminal echo of the web
|
|
198
|
+
design system's .glass / .window surfaces. Plain box under NO_COLOR.
|
|
199
|
+
"""
|
|
200
|
+
if isinstance(lines, str):
|
|
201
|
+
lines = [lines]
|
|
202
|
+
widths = [visible_len(x) for x in lines]
|
|
203
|
+
tw = visible_len(title) if title else 0
|
|
204
|
+
inner = max(widths + [tw + 2]) # a titled rule needs a space each side
|
|
205
|
+
|
|
206
|
+
def b(s: str) -> str:
|
|
207
|
+
return aurora(s, hue)
|
|
208
|
+
|
|
209
|
+
rows = []
|
|
210
|
+
if title:
|
|
211
|
+
rows.append(b("╭─ ") + c(title, BOLD) + b(" " + "─" * (inner - tw - 1) + "╮"))
|
|
212
|
+
else:
|
|
213
|
+
rows.append(b("╭" + "─" * (inner + 2) + "╮"))
|
|
214
|
+
for x, xw in zip(lines, widths):
|
|
215
|
+
rows.append(b("│ ") + x + " " * (inner - xw) + b(" │"))
|
|
216
|
+
rows.append(b("╰" + "─" * (inner + 2) + "╯"))
|
|
217
|
+
return "\n".join(rows)
|
|
218
|
+
|
|
219
|
+
|
|
186
220
|
def meter(fraction: float, width: int = 4) -> str:
|
|
187
221
|
"""A tiny proportional bar for a 0..1 fraction — filled ▰ vs empty ▱.
|
|
188
222
|
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
</article>
|
|
287
287
|
|
|
288
288
|
<article class="ritem" data-track="layout" data-impact="med">
|
|
289
|
-
<div class="ritem-top"><span class="rid">BOOST-D06</span><span class="rstatus
|
|
289
|
+
<div class="ritem-top"><span class="rid">BOOST-D06</span><span class="rstatus done">Shipped</span></div>
|
|
290
290
|
<h4>Glass-panel box primitives</h4>
|
|
291
291
|
<p>The web system frames everything in rounded glass; the CLI frames nothing. Add rounded box-drawing primitives (<code>╭─╮ │ ╰─╯</code>) with dim <code>--line</code> borders and an optional title, mirroring the web <code>.glass</code>/<code>.window</code> surfaces. Reusable chrome for <code>doctor</code>, <code>info</code>, <code>snapshot</code> and success summaries.</p>
|
|
292
292
|
<div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
</article>
|
|
374
374
|
|
|
375
375
|
<article class="ritem" data-track="motion" data-impact="low">
|
|
376
|
-
<div class="ritem-top"><span class="rid">BOOST-D13</span><span class="rstatus
|
|
376
|
+
<div class="ritem-top"><span class="rid">BOOST-D13</span><span class="rstatus done">Shipped</span></div>
|
|
377
377
|
<h4>Framed success summary with next step</h4>
|
|
378
378
|
<p><code>ok()</code> prints a lone green check, then the command just ends. After <code>install</code>/<code>uninstall</code>, close with a small framed confirmation — what changed, where it landed, and the obvious next step (<code>boost info <skill></code>) — so a completed action feels finished, not dropped.</p>
|
|
379
379
|
<div class="rmeta"><span class="m-cat">ux</span><span>Complexity S</span><span class="m-imp low">Impact Low</span><span class="m-wow">★★★☆☆</span></div>
|
|
@@ -644,6 +644,9 @@ class TestCount:
|
|
|
644
644
|
r = boost("count")
|
|
645
645
|
assert ("installed 1 · available 5 (across 1 tap) · "
|
|
646
646
|
"discovery index not built") in r.out
|
|
647
|
+
# D06: framed inventory card
|
|
648
|
+
assert "╭─ inventory" in r.out
|
|
649
|
+
assert "╰" in r.out
|
|
647
650
|
|
|
648
651
|
def test_with_discovery_index_and_json(self, boost, installed):
|
|
649
652
|
_write_index(_ITEMS)
|
|
@@ -50,6 +50,9 @@ class TestInstall:
|
|
|
50
50
|
assert "linked → claude-code · windsurf · cursor" in r.out
|
|
51
51
|
assert "lock updated (.skill-lock.json)" in r.out
|
|
52
52
|
assert "Installed 1 new skill; quality score 95/100" in r.out
|
|
53
|
+
# D13: framed success card with a next-step hint
|
|
54
|
+
assert "╭─ installed" in r.out
|
|
55
|
+
assert "next: boost info brainstorming" in r.out
|
|
53
56
|
entry = _lock()["brainstorming"]
|
|
54
57
|
assert entry["version"] == "1.4.0"
|
|
55
58
|
assert entry["tap"] == "fixture-tap"
|
|
@@ -296,6 +296,53 @@ class TestBadge:
|
|
|
296
296
|
"\033[38;2;74;222;128m[installed]\033[0m")
|
|
297
297
|
|
|
298
298
|
|
|
299
|
+
class TestVisibleLen:
|
|
300
|
+
def test_plain_string(self):
|
|
301
|
+
assert output.visible_len("hello") == 5
|
|
302
|
+
|
|
303
|
+
def test_ignores_ansi_codes(self):
|
|
304
|
+
assert output.visible_len("\033[31mhi\033[0m") == 2
|
|
305
|
+
|
|
306
|
+
def test_truecolor_codes_stripped(self):
|
|
307
|
+
assert output.visible_len("\033[38;2;34;211;238m●\033[0m") == 1
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
class TestPanel:
|
|
311
|
+
def test_single_line_plain(self, monkeypatch):
|
|
312
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
313
|
+
assert output.panel("hi") == "╭────╮\n│ hi │\n╰────╯"
|
|
314
|
+
|
|
315
|
+
def test_pads_lines_to_widest(self, monkeypatch):
|
|
316
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
317
|
+
assert output.panel(["a", "bbb"]) == (
|
|
318
|
+
"╭─────╮\n│ a │\n│ bbb │\n╰─────╯")
|
|
319
|
+
|
|
320
|
+
def test_title_in_top_rule(self, monkeypatch):
|
|
321
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
322
|
+
# inner = max(len("hello")=5, len("x")+2=3) = 5
|
|
323
|
+
assert output.panel("hello", title="x") == (
|
|
324
|
+
"╭─ x ───╮\n│ hello │\n╰───────╯")
|
|
325
|
+
|
|
326
|
+
def test_wide_title_sets_inner_width(self, monkeypatch):
|
|
327
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
328
|
+
# title longer than content: inner = len("widetitle")+2 = 11
|
|
329
|
+
p = output.panel("hi", title="widetitle")
|
|
330
|
+
first, mid, last = p.split("\n")
|
|
331
|
+
assert output.visible_len(first) == output.visible_len(last)
|
|
332
|
+
assert output.visible_len(mid) == output.visible_len(last)
|
|
333
|
+
|
|
334
|
+
def test_border_is_aurora_tinted_when_truecolor(self, monkeypatch):
|
|
335
|
+
monkeypatch.setenv("COLORTERM", "truecolor")
|
|
336
|
+
monkeypatch.setenv("CLICOLOR_FORCE", "1")
|
|
337
|
+
# top-left corner painted cyan #22d3ee
|
|
338
|
+
assert output.panel("x").startswith("\033[38;2;34;211;238m╭")
|
|
339
|
+
|
|
340
|
+
def test_title_is_bold_when_forced(self, monkeypatch):
|
|
341
|
+
monkeypatch.setenv("COLORTERM", "truecolor")
|
|
342
|
+
monkeypatch.setenv("CLICOLOR_FORCE", "1")
|
|
343
|
+
assert "\033[1minventory\033[0m" in output.panel("x", title="inventory")
|
|
344
|
+
|
|
345
|
+
|
|
299
346
|
class TestMeter:
|
|
300
347
|
def test_full(self):
|
|
301
348
|
assert output.meter(1.0, 4) == "▰▰▰▰"
|
|
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.26 → boost_skill_cli-1.0.28}/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.26 → boost_skill_cli-1.0.28}/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
|