boost-skill-cli 1.0.34__tar.gz → 1.0.36__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 (108) hide show
  1. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/output.py +20 -10
  4. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. boost_skill_cli-1.0.36/docs/demo.gif +0 -0
  6. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/demo.tape +1 -1
  7. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/design-roadmap.html +5 -5
  8. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_output.py +23 -0
  9. boost_skill_cli-1.0.34/docs/demo.gif +0 -0
  10. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/.gitignore +0 -0
  11. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/CLAUDE.md +0 -0
  12. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/CONTRIBUTING.md +0 -0
  13. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/LICENSE +0 -0
  14. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/MANIFEST.in +0 -0
  15. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/Makefile +0 -0
  16. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/README.md +0 -0
  17. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/SECURITY.md +0 -0
  18. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost +0 -0
  19. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/__init__.py +0 -0
  20. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/__main__.py +0 -0
  21. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/cli.py +0 -0
  22. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/cliparse.py +0 -0
  23. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/__init__.py +0 -0
  24. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/bmad.py +0 -0
  25. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/configuration.py +0 -0
  26. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/discovery.py +0 -0
  27. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/hooks.py +0 -0
  28. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/info.py +0 -0
  29. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/intelligence.py +0 -0
  30. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/pkg.py +0 -0
  31. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/quality.py +0 -0
  32. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/taps.py +0 -0
  33. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/commands/team.py +0 -0
  34. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/__init__.py +0 -0
  35. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/agents.py +0 -0
  36. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/ai.py +0 -0
  37. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/catalog.py +0 -0
  38. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/claude_settings.py +0 -0
  39. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/config.py +0 -0
  40. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/dense.py +0 -0
  41. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/embed.py +0 -0
  42. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/frontmatter.py +0 -0
  43. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/gitutil.py +0 -0
  44. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/journal.py +0 -0
  45. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/lockfile.py +0 -0
  46. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/logs.py +0 -0
  47. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/paths.py +0 -0
  48. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/policy.py +0 -0
  49. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/rag.py +0 -0
  50. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/registry.py +0 -0
  51. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/store.py +0 -0
  52. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/core/util.py +0 -0
  53. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/data/registries.json +0 -0
  54. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_cli/errors.py +0 -0
  55. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  56. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  57. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  58. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/requires.txt +0 -0
  59. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/boost_skill_cli.egg-info/top_level.txt +0 -0
  60. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/.claude/settings.local.json +0 -0
  61. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/DEBUGGING.md +0 -0
  62. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/index.html +0 -0
  63. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/rag-architecture.md +0 -0
  64. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/docs/roadmap.html +0 -0
  65. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/pyproject.toml +0 -0
  66. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/scripts/build_registries.py +0 -0
  67. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/scripts/mutation_gate.py +0 -0
  68. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/setup.cfg +0 -0
  69. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/style/README.md +0 -0
  70. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/style/boost.css +0 -0
  71. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/style/boost.js +0 -0
  72. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/style/demo.html +0 -0
  73. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/conftest.py +0 -0
  74. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_bmad.py +0 -0
  75. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_configuration.py +0 -0
  76. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_discovery.py +0 -0
  77. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_hooks.py +0 -0
  78. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_info.py +0 -0
  79. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_intelligence.py +0 -0
  80. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_pkg.py +0 -0
  81. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_quality.py +0 -0
  82. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_taps.py +0 -0
  83. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_cli_team.py +0 -0
  84. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/functional/test_everyday_loop.py +0 -0
  85. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/make_fixture.py +0 -0
  86. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/smoke.sh +0 -0
  87. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_agents.py +0 -0
  88. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_ai.py +0 -0
  89. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_catalog.py +0 -0
  90. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_claude_settings.py +0 -0
  91. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_cliparse.py +0 -0
  92. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_config.py +0 -0
  93. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_dense.py +0 -0
  94. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_embed.py +0 -0
  95. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_errors_and_cli_table.py +0 -0
  96. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_frontmatter.py +0 -0
  97. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_gitutil.py +0 -0
  98. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_journal.py +0 -0
  99. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_lockfile.py +0 -0
  100. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_logs.py +0 -0
  101. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_mutation_hardening.py +0 -0
  102. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_paths.py +0 -0
  103. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_policy.py +0 -0
  104. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_rag.py +0 -0
  105. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_registry.py +0 -0
  106. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_store.py +0 -0
  107. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_util.py +0 -0
  108. {boost_skill_cli-1.0.34 → boost_skill_cli-1.0.36}/tests/unit/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.34
3
+ Version: 1.0.36
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.34'
22
- __version_tuple__ = version_tuple = (1, 0, 34)
21
+ __version__ = version = '1.0.36'
22
+ __version_tuple__ = version_tuple = (1, 0, 36)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -67,20 +67,30 @@ def rgb(r: int, g: int, b: int) -> str:
67
67
  return "\033[38;2;%d;%d;%dm" % (r, g, b)
68
68
 
69
69
 
70
- # Each Aurora token pairs its exact truecolor value with a 16-color fallback,
71
- # so the brand still reads on terminals without truecolor. Hexes mirror
72
- # style/boost.css: --cyan #22d3ee, --violet #a855f7, --pink #f472d0,
73
- # --green #4ade80, --yellow #facc15.
70
+ # Aurora palette — the single source of truth for boost's terminal colors.
71
+ # These RGB triples mirror the web design system's :root tokens in
72
+ # style/boost.css and must be kept in lockstep with it; everything else here
73
+ # (the gradient, brand tints, badges) is derived from them, never re-typed.
74
+ TOKENS = {
75
+ "cyan": (0x22, 0xd3, 0xee), # --cyan #22d3ee
76
+ "violet": (0xa8, 0x55, 0xf7), # --violet #a855f7
77
+ "pink": (0xf4, 0x72, 0xd0), # --pink #f472d0
78
+ "green": (0x4a, 0xde, 0x80), # --green #4ade80
79
+ "yellow": (0xfa, 0xcc, 0x15), # --yellow #facc15
80
+ }
81
+
82
+ # Each Aurora token pairs its truecolor value with a 16-color fallback, so the
83
+ # brand still reads on terminals without truecolor.
74
84
  _AURORA = {
75
- "cyan": ((0x22, 0xd3, 0xee), CYAN),
76
- "violet": ((0xa8, 0x55, 0xf7), MAGENTA),
77
- "pink": ((0xf4, 0x72, 0xd0), MAGENTA),
78
- "green": ((0x4a, 0xde, 0x80), GREEN),
79
- "yellow": ((0xfa, 0xcc, 0x15), YELLOW),
85
+ "cyan": (TOKENS["cyan"], CYAN),
86
+ "violet": (TOKENS["violet"], MAGENTA),
87
+ "pink": (TOKENS["pink"], MAGENTA),
88
+ "green": (TOKENS["green"], GREEN),
89
+ "yellow": (TOKENS["yellow"], YELLOW),
80
90
  }
81
91
 
82
92
  # The signature cyan -> violet -> pink gradient (style/boost.css --grad).
83
- _GRAD_STOPS = ((0x22, 0xd3, 0xee), (0xa8, 0x55, 0xf7), (0xf4, 0x72, 0xd0))
93
+ _GRAD_STOPS = (TOKENS["cyan"], TOKENS["violet"], TOKENS["pink"])
84
94
 
85
95
 
86
96
  def aurora(text: str, name: str, stream=None) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.34
3
+ Version: 1.0.36
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
Binary file
@@ -11,7 +11,7 @@ Set TypingSpeed 35ms
11
11
  Set Theme "Dracula"
12
12
 
13
13
  Hide
14
- Type "export HOME=$(mktemp -d); python3 tests/make_fixture.py /tmp/boost-demo-tap >/dev/null 2>&1; clear"
14
+ Type "export HOME=$(mktemp -d) COLORTERM=truecolor; python3 tests/make_fixture.py /tmp/boost-demo-tap >/dev/null 2>&1; clear"
15
15
  Enter
16
16
  Show
17
17
 
@@ -467,15 +467,15 @@
467
467
  </article>
468
468
 
469
469
  <article class="ritem" data-track="system" data-impact="med">
470
- <div class="ritem-top"><span class="rid">BOOST-D20</span><span class="rstatus proposed">Proposed</span></div>
470
+ <div class="ritem-top"><span class="rid">BOOST-D20</span><span class="rstatus progress">In progress</span></div>
471
471
  <h4>Single source of design tokens (web ↔ CLI)</h4>
472
- <p>The palette lives only in CSS; the CLI would hard-code its own copy of the same hexes — guaranteeing drift. Emit both from one <code>tokens.json</code>: generate the CSS custom properties <em>and</em> the Python ANSI map from it, so a brand change updates the site and the terminal in lockstep. Fits the repo's existing "generate, never hand-edit" pattern (cf. <code>build_registries.py</code>).</p>
472
+ <p><b>Done:</b> the CLI palette is now single-sourced — one <code>output.TOKENS</code> dict holds every Aurora RGB triple, and the gradient, brand tints and badges all <em>derive</em> from it (previously cyan/violet/pink were re-typed across <code>_AURORA</code> and <code>_GRAD_STOPS</code>). A test locks the contract so a stray hex can't drift. <b>Remaining:</b> lift <code>TOKENS</code> into a shared <code>tokens.json</code> and generate <em>both</em> the CSS custom properties and this map from it, so the site and the terminal move in lockstep (the repo's "generate, never hand-edit" pattern, cf. <code>build_registries.py</code>).</p>
473
473
  <div class="rmeta"><span class="m-cat">system</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
474
- <div class="rref"><code>scripts/ · new build_tokens.py</code></div>
474
+ <div class="rref"><code>core/output.py TOKENS · style/boost.css · future build_tokens.py</code></div>
475
475
  </article>
476
476
 
477
477
  <article class="ritem" data-track="system" data-impact="med">
478
- <div class="ritem-top"><span class="rid">BOOST-D21</span><span class="rstatus proposed">Proposed</span></div>
478
+ <div class="ritem-top"><span class="rid">BOOST-D21</span><span class="rstatus done">Shipped</span></div>
479
479
  <h4>Scripted demo recording (VHS / asciinema)</h4>
480
480
  <p>There's a <code>docs/demo.tape</code> + <code>demo.gif</code>, but no repeatable way to re-record once the aesthetic changes — and <code>tmux</code> isn't even installed in the dev box. Add a <code>make demo</code> that drives a scripted session (VHS tape or asciinema, optionally split-pane via tmux) and refreshes the GIF, so the README and portfolio always show the current look.</p>
481
481
  <div class="rmeta"><span class="m-cat">tooling</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
@@ -483,7 +483,7 @@
483
483
  </article>
484
484
 
485
485
  <article class="ritem" data-track="system" data-impact="med">
486
- <div class="ritem-top"><span class="rid">BOOST-D22</span><span class="rstatus proposed">Proposed</span></div>
486
+ <div class="ritem-top"><span class="rid">BOOST-D22</span><span class="rstatus progress">In progress</span></div>
487
487
  <h4>README / portfolio terminal parity</h4>
488
488
  <p>The web <code>.window</code> mock shows an <em>idealized</em> boost session — gradient prompt, clean checks — that the real CLI doesn't yet produce. Once D01–D15 land, update the mock (and README code blocks) to mirror the true output 1:1, so every screenshot is honest and the brand reads identically across web, README and terminal.</p>
489
489
  <div class="rmeta"><span class="m-cat">system</span><span>Complexity S</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
@@ -139,6 +139,29 @@ class TestAurora:
139
139
  output.MAGENTA + "x" + output.RESET)
140
140
 
141
141
 
142
+ class TestTokens:
143
+ def test_known_hexes(self):
144
+ assert output.TOKENS["cyan"] == (0x22, 0xd3, 0xee)
145
+ assert output.TOKENS["violet"] == (0xa8, 0x55, 0xf7)
146
+ assert output.TOKENS["pink"] == (0xf4, 0x72, 0xd0)
147
+ assert output.TOKENS["green"] == (0x4a, 0xde, 0x80)
148
+ assert output.TOKENS["yellow"] == (0xfa, 0xcc, 0x15)
149
+
150
+ def test_aurora_derives_from_tokens(self, monkeypatch):
151
+ # every brand color resolves to rgb() of its TOKENS triple — proving
152
+ # TOKENS is the single source, not a re-typed copy.
153
+ monkeypatch.setenv("COLORTERM", "truecolor")
154
+ monkeypatch.setenv("CLICOLOR_FORCE", "1")
155
+ for name, (r, g, b) in output.TOKENS.items():
156
+ assert output.aurora("x", name) == (
157
+ output.rgb(r, g, b) + "x" + output.RESET)
158
+
159
+ def test_gradient_stops_are_tokens(self):
160
+ assert output._GRAD_STOPS == (output.TOKENS["cyan"],
161
+ output.TOKENS["violet"],
162
+ output.TOKENS["pink"])
163
+
164
+
142
165
  class TestGradient:
143
166
  def test_plain_when_no_color(self, monkeypatch):
144
167
  monkeypatch.setenv("NO_COLOR", "1")
Binary file
File without changes