termrender 1.0.1__tar.gz → 2.1.0__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 (54) hide show
  1. {termrender-1.0.1 → termrender-2.1.0}/.github/workflows/publish.yml +2 -3
  2. {termrender-1.0.1 → termrender-2.1.0}/CHANGELOG.md +70 -0
  3. {termrender-1.0.1 → termrender-2.1.0}/PKG-INFO +2 -2
  4. {termrender-1.0.1 → termrender-2.1.0}/pyproject.toml +6 -1
  5. termrender-2.1.0/scripts/build-mermaid-ascii.sh +36 -0
  6. termrender-2.1.0/src/termrender/CLAUDE.md +1 -0
  7. termrender-2.1.0/src/termrender/__main__.py +986 -0
  8. termrender-2.1.0/src/termrender/_bin/mermaid-ascii-darwin-arm64 +0 -0
  9. termrender-2.1.0/src/termrender/_mermaid_bin.py +41 -0
  10. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/layout.py +2 -1
  11. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/CLAUDE.md +2 -0
  12. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/borders.py +1 -1
  13. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/mermaid.py +2 -1
  14. termrender-2.1.0/tests/test_cli_contract.py +209 -0
  15. termrender-1.0.1/.git +0 -1
  16. termrender-1.0.1/src/termrender/CLAUDE.md +0 -15
  17. termrender-1.0.1/src/termrender/__main__.py +0 -479
  18. {termrender-1.0.1 → termrender-2.1.0}/.gitignore +0 -0
  19. {termrender-1.0.1 → termrender-2.1.0}/CLAUDE.md +0 -0
  20. {termrender-1.0.1 → termrender-2.1.0}/LICENSE +0 -0
  21. {termrender-1.0.1 → termrender-2.1.0}/README.md +0 -0
  22. {termrender-1.0.1 → termrender-2.1.0}/design.json +0 -0
  23. {termrender-1.0.1 → termrender-2.1.0}/requirements.json +0 -0
  24. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/__init__.py +0 -0
  25. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/blocks.py +0 -0
  26. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/emit.py +0 -0
  27. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/parser.py +0 -0
  28. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/py.typed +0 -0
  29. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/__init__.py +0 -0
  30. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/charts.py +0 -0
  31. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/code.py +0 -0
  32. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/columns.py +0 -0
  33. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/diff.py +0 -0
  34. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/divider.py +0 -0
  35. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/panel.py +0 -0
  36. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/quote.py +0 -0
  37. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/stat.py +0 -0
  38. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/table.py +0 -0
  39. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/text.py +0 -0
  40. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/timeline.py +0 -0
  41. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/renderers/tree.py +0 -0
  42. {termrender-1.0.1 → termrender-2.1.0}/src/termrender/style.py +0 -0
  43. {termrender-1.0.1 → termrender-2.1.0}/tests/__init__.py +0 -0
  44. {termrender-1.0.1 → termrender-2.1.0}/tests/test_charts.py +0 -0
  45. {termrender-1.0.1 → termrender-2.1.0}/tests/test_column_alignment.py +0 -0
  46. {termrender-1.0.1 → termrender-2.1.0}/tests/test_diff.py +0 -0
  47. {termrender-1.0.1 → termrender-2.1.0}/tests/test_inline_badge.py +0 -0
  48. {termrender-1.0.1 → termrender-2.1.0}/tests/test_linebreak.py +0 -0
  49. {termrender-1.0.1 → termrender-2.1.0}/tests/test_mermaid_compat.py +0 -0
  50. {termrender-1.0.1 → termrender-2.1.0}/tests/test_myst_gaps.py +0 -0
  51. {termrender-1.0.1 → termrender-2.1.0}/tests/test_stat.py +0 -0
  52. {termrender-1.0.1 → termrender-2.1.0}/tests/test_tasklist.py +0 -0
  53. {termrender-1.0.1 → termrender-2.1.0}/tests/test_timeline.py +0 -0
  54. {termrender-1.0.1 → termrender-2.1.0}/tests/test_variable_colons.py +0 -0
@@ -6,7 +6,6 @@ on:
6
6
 
7
7
  permissions:
8
8
  contents: write
9
- id-token: write
10
9
 
11
10
  jobs:
12
11
  release:
@@ -33,8 +32,6 @@ jobs:
33
32
  if: needs.release.outputs.released == 'true'
34
33
  runs-on: ubuntu-latest
35
34
  environment: pypi
36
- permissions:
37
- id-token: write
38
35
  steps:
39
36
  - uses: actions/checkout@v4
40
37
  with:
@@ -46,3 +43,5 @@ jobs:
46
43
  - run: pip install build
47
44
  - run: python -m build
48
45
  - uses: pypa/gh-action-pypi-publish@release/v1
46
+ with:
47
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -1,6 +1,76 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v2.1.0 (2026-05-16)
5
+
6
+ ### Documentation
7
+
8
+ - **claude-md**: Document mermaid-ascii vendoring and correct stale --maxWidth
9
+ ([`643e25a`](https://github.com/crouton-labs/termrender/commit/643e25a791de1f32591b245dee064f290221cfc2))
10
+
11
+ Note _mermaid_bin resolution, the pinned master binary, the no-width-flag reality, and the back-edge
12
+ panic in renderers/CLAUDE.md.
13
+
14
+ - **claude-md**: Note QUOTE +1 height only applies to author/by attrs
15
+ ([`3184d43`](https://github.com/crouton-labs/termrender/commit/3184d43e7293af735b82d559bc3253d7542cbf85))
16
+
17
+ ### Features
18
+
19
+ - **mermaid**: Vendor engine from upstream master, fix broken -w invocation
20
+ ([`d801de5`](https://github.com/crouton-labs/termrender/commit/d801de5bb22ba5205fe52ef65e80eda96590be93))
21
+
22
+ mermaid-ascii has no -w/width flag and never has; layout.py and mermaid.py passed `-w <width>`, so
23
+ every diagram exited non-zero and degraded to raw source text on the 1.2.0 wheel. Drop -w (call is
24
+ now `-f - -y 1`).
25
+
26
+ Resolve the binary via new _mermaid_bin.mermaid_ascii_bin(): prefer vendored
27
+ _bin/mermaid-ascii-<os>-<arch> (built from pinned upstream master 6fffb8e via
28
+ scripts/build-mermaid-ascii.sh), else fall back to `mermaid-ascii` on PATH (PyPI wheel, capped at
29
+ 1.2.0). pyproject ships the binary via hatch artifacts and bumps the fallback dep to >=1.2.
30
+
31
+ Caveats: only darwin-arm64 is vendored (other platforms fall back to the older PyPI engine); a
32
+ labeled back-edge in graph LR panics the binary on both 1.2.0 and master and degrades to source.
33
+ mermaid-ascii has no width control, so wide diagrams overflow (renderer pads, never truncates).
34
+
35
+
36
+ ## v2.0.0 (2026-05-16)
37
+
38
+ ### Continuous Integration
39
+
40
+ - **publish**: Authenticate PyPI upload with API token
41
+ ([`09e21c8`](https://github.com/crouton-labs/termrender/commit/09e21c8f58529f8c9ba9a383c24563e6ebaba2f3))
42
+
43
+ Trusted publishing has failed on every release since v0.8.0 (invalid-publisher: OIDC claims for
44
+ crouton-labs/termrender had no matching PyPI publisher), so 0.9.0-1.0.1 were tagged but never
45
+ reached PyPI. Switch the publish job to token auth via the pypi-environment secret PYPI_API_TOKEN
46
+ and drop the now-unused id-token permission.
47
+
48
+ ### Features
49
+
50
+ - **cli**: Redesign CLI to agent-oriented JSON-stdin contract
51
+ ([`ef70751`](https://github.com/crouton-labs/termrender/commit/ef7075103bc49d13cbd6bebdd01841454e5950ff))
52
+
53
+ Restructure the CLI as a noun-verb tree consumed by programs/agents: `termrender doc
54
+ {render,check,watch}` and `termrender pane {open,update}`. All parameters arrive as a single JSON
55
+ object on stdin; no flags except -h. Errors are structured JSON {error,message,next} on stdout
56
+ with stable codes and non-zero exit. `doc check` emits {ok,errors[]} JSON on stdout (was "ok" on
57
+ stderr). Per-node -h is a spec (input/output schema + Effects), not examples. The library render()
58
+ API is unchanged; rendered ANSI output for doc render/doc watch is intentionally preserved as the
59
+ product.
60
+
61
+ BREAKING CHANGE: the flag/positional CLI surface is removed. `termrender FILE`, -w/--width,
62
+ --no-color, --check, --cjk, --tmux, --pane, --tmux-new-window, --watch, and -V/--version no longer
63
+ exist. Callers must invoke a subcommand and pass parameters as a JSON object on stdin. Version is
64
+ shown in root -h.
65
+
66
+ ### Breaking Changes
67
+
68
+ - **cli**: The flag/positional CLI surface is removed. `termrender FILE`, -w/--width, --no-color,
69
+ --check, --cjk, --tmux, --pane, --tmux-new-window, --watch, and -V/--version no longer exist.
70
+ Callers must invoke a subcommand and pass parameters as a JSON object on stdin. Version is shown
71
+ in root -h.
72
+
73
+
4
74
  ## v1.0.1 (2026-04-28)
5
75
 
6
76
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: termrender
3
- Version: 1.0.1
3
+ Version: 2.1.0
4
4
  Summary: Rich terminal rendering of directive-flavored markdown
5
5
  Project-URL: Homepage, https://github.com/CaptainCrouton89/termrender
6
6
  Project-URL: Repository, https://github.com/CaptainCrouton89/termrender
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.13
21
21
  Classifier: Topic :: Terminals
22
22
  Classifier: Topic :: Text Processing :: Markup :: Markdown
23
23
  Requires-Python: >=3.10
24
- Requires-Dist: mermaid-ascii>=1.0
24
+ Requires-Dist: mermaid-ascii>=1.2
25
25
  Requires-Dist: mistune>=3.0
26
26
  Requires-Dist: pygments>=2.0
27
27
  Description-Content-Type: text/markdown
@@ -28,7 +28,7 @@ classifiers = [
28
28
  ]
29
29
  dependencies = [
30
30
  "mistune>=3.0",
31
- "mermaid-ascii>=1.0",
31
+ "mermaid-ascii>=1.2",
32
32
  "pygments>=2.0",
33
33
  ]
34
34
 
@@ -45,6 +45,11 @@ source = "vcs"
45
45
 
46
46
  [tool.hatch.build.targets.wheel]
47
47
  packages = ["src/termrender"]
48
+ # Ship the vendored mermaid-ascii binary (built from pinned upstream master;
49
+ # see scripts/build-mermaid-ascii.sh). It lives inside the package dir so the
50
+ # default file selection includes it; artifacts ensures it survives even if
51
+ # VCS-ignored, and hatchling preserves its 0o755 exec bit.
52
+ artifacts = ["src/termrender/_bin/*"]
48
53
 
49
54
  [tool.semantic_release]
50
55
  version_toml = []
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ # Build the vendored mermaid-ascii binary from pinned upstream master.
3
+ #
4
+ # Usage: scripts/build-mermaid-ascii.sh
5
+ #
6
+ # Produces src/termrender/_bin/mermaid-ascii-<os>-<arch> for the *host*
7
+ # platform. Run on each target platform (or with GOOS/GOARCH set) to refresh
8
+ # the vendored binaries. Requires a Go toolchain (>=1.21).
9
+ #
10
+ # Why vendored: the PyPI `mermaid-ascii` wheel only ships up to 1.2.0, which
11
+ # lacks the master-only flowchart fixes (multiline node labels, duplicate /
12
+ # bidirectional edge-label separation, subgraph titles, wide-rune label
13
+ # widths). termrender prefers this binary and falls back to the PyPI wheel's
14
+ # `mermaid-ascii` on PATH for platforms not vendored here.
15
+ set -euo pipefail
16
+
17
+ # Pinned upstream commit (github.com/AlexanderGrooff/mermaid-ascii master).
18
+ PIN="6fffb8e2714acab2c4cb41c78894fabbc62cee56"
19
+
20
+ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
21
+ workdir="$(mktemp -d)"
22
+ trap 'rm -rf "$workdir"' EXIT
23
+
24
+ git clone https://github.com/AlexanderGrooff/mermaid-ascii.git "$workdir/src"
25
+ git -C "$workdir/src" checkout --quiet "$PIN"
26
+
27
+ os="$(go env GOOS)"
28
+ arch="$(go env GOARCH)"
29
+ out="$repo_root/src/termrender/_bin/mermaid-ascii-${os}-${arch}"
30
+
31
+ mkdir -p "$(dirname "$out")"
32
+ ( cd "$workdir/src" && go build -trimpath -o "$out" . )
33
+ chmod 755 "$out"
34
+
35
+ echo "Built $out"
36
+ "$out" --help >/dev/null && echo "Smoke test OK (pin ${PIN:0:7})"
@@ -0,0 +1 @@
1
+ - **QUOTE** height gets `+1` only when `author` or `by` attr is set. Using any other key (`attribution`, `source`) silently omits the extra line — the renderer's attribution line is clipped.