brachio 0.0.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 (53) hide show
  1. brachio-0.0.0/.changenote/README.md +10 -0
  2. brachio-0.0.0/.changenote/agent-grouping.md +5 -0
  3. brachio-0.0.0/.changenote/config.json +19 -0
  4. brachio-0.0.0/.github/workflows/changenote.yml +27 -0
  5. brachio-0.0.0/.github/workflows/check.yml +37 -0
  6. brachio-0.0.0/.github/workflows/publish.yml +156 -0
  7. brachio-0.0.0/.gitignore +29 -0
  8. brachio-0.0.0/AGENTS.md +14 -0
  9. brachio-0.0.0/Cargo.lock +726 -0
  10. brachio-0.0.0/Cargo.toml +20 -0
  11. brachio-0.0.0/LICENSE +21 -0
  12. brachio-0.0.0/PKG-INFO +206 -0
  13. brachio-0.0.0/README.md +195 -0
  14. brachio-0.0.0/docs/plans/2026-11-14_pr-10-feedback-plan.md +46 -0
  15. brachio-0.0.0/docs/publishing.md +156 -0
  16. brachio-0.0.0/docs/rex-compatibility.md +172 -0
  17. brachio-0.0.0/pyproject.toml +28 -0
  18. brachio-0.0.0/src/lib.rs +5 -0
  19. brachio-0.0.0/src/main.rs +409 -0
  20. brachio-0.0.0/src/model.rs +294 -0
  21. brachio-0.0.0/src/process.rs +983 -0
  22. brachio-0.0.0/src/rex.rs +671 -0
  23. brachio-0.0.0/src/tui/list.rs +524 -0
  24. brachio-0.0.0/src/tui/presentation.rs +681 -0
  25. brachio-0.0.0/src/tui/tests.rs +2965 -0
  26. brachio-0.0.0/src/tui.rs +1023 -0
  27. brachio-0.0.0/src/worker.rs +217 -0
  28. brachio-0.0.0/tests/fixtures/actions.json +17 -0
  29. brachio-0.0.0/tests/fixtures/blocks-a-moved.json +58 -0
  30. brachio-0.0.0/tests/fixtures/blocks-a-removed.json +51 -0
  31. brachio-0.0.0/tests/fixtures/blocks-a.json +58 -0
  32. brachio-0.0.0/tests/fixtures/blocks-b.json +11 -0
  33. brachio-0.0.0/tests/fixtures/clients-multiple.json +18 -0
  34. brachio-0.0.0/tests/fixtures/clients-none.json +3 -0
  35. brachio-0.0.0/tests/fixtures/clients.json +18 -0
  36. brachio-0.0.0/tests/fixtures/process-claude.json +8 -0
  37. brachio-0.0.0/tests/fixtures/process-exited.json +5 -0
  38. brachio-0.0.0/tests/fixtures/process-node.json +9 -0
  39. brachio-0.0.0/tests/fixtures/process-pi.json +8 -0
  40. brachio-0.0.0/tests/fixtures/rex.sh +81 -0
  41. brachio-0.0.0/tests/fixtures/sessions.json +12 -0
  42. brachio-0.0.0/tests/fixtures/status-codex.json +8 -0
  43. brachio-0.0.0/tests/fixtures/status-done.json +8 -0
  44. brachio-0.0.0/tests/fixtures/status-empty.json +3 -0
  45. brachio-0.0.0/tests/fixtures/status-pi-updated.json +8 -0
  46. brachio-0.0.0/tests/fixtures/status-pi.json +14 -0
  47. brachio-0.0.0/tests/fixtures/view-a-moved.json +48 -0
  48. brachio-0.0.0/tests/fixtures/view-a-removed.json +45 -0
  49. brachio-0.0.0/tests/fixtures/view-a.json +48 -0
  50. brachio-0.0.0/tests/fixtures/view-b.json +22 -0
  51. brachio-0.0.0/tests/rex_integration.rs +657 -0
  52. brachio-0.0.0/tests/terminal_smoke.rs +609 -0
  53. brachio-0.0.0/uv.lock +7 -0
@@ -0,0 +1,10 @@
1
+ # Change notes
2
+
3
+ Package `brachio` uses `Cargo.toml` as its version source for crates.io and PyPI.
4
+
5
+ Read [the change-note policy and commands](../docs/publishing.md#change-notes) before adding a note or preparing a release.
6
+ Run `changenote status` after adding or changing notes.
7
+
8
+ Keep pending notes in this directory.
9
+ Do not create empty notes or edit generated release files by hand.
10
+ `changenote version` consumes notes only during an authorized release.
@@ -0,0 +1,5 @@
1
+ ---
2
+ brachio: minor
3
+ ---
4
+
5
+ Add optional Agent, Status, CWD, and Session grouping while keeping None and the original sort as the default. Use g/G to cycle modes and Tab/Shift+Tab to jump between groups. Show foldable headers with filtered counts only for multiple groups; preserve selected IDs through folds and expand without navigation on Enter. Add incremental case-insensitive AND filtering with agent:/cwd:/session:/status: terms, Blocked/Error attention jumps, and scrollable help and diagnostics. Use compact content-measured Status/Agent/CWD/Session/Tab/Pane columns with two-cell gaps and fit-based visibility, display-only HOME abbreviation, status symbols, and a compact bounded footer. Keep selected Idle statuses visible and preserve whitespace-separated pasted filter terms. Keep reported status meanings and exact-ID navigation unchanged.
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/narumiruna/changenote/f4423760122463bf03a8d161c6f0bc4173afb6e0/schema.json",
3
+ "base_branch": "origin/main",
4
+ "changed_file_patterns": [
5
+ "src/**",
6
+ "Cargo.toml",
7
+ "Cargo.lock",
8
+ "pyproject.toml",
9
+ "uv.lock",
10
+ ".github/workflows/publish.yml"
11
+ ],
12
+ "packages": {
13
+ "brachio": {
14
+ "path": ".",
15
+ "version_file": "Cargo.toml",
16
+ "tag_prefix": "v"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,27 @@
1
+ name: Change notes
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, reopened, labeled, unlabeled]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ notes:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
15
+ with:
16
+ fetch-depth: 0
17
+ persist-credentials: false
18
+ - uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
19
+ - name: Install changenote
20
+ run: cargo install --git https://github.com/narumiruna/changenote --rev f4423760122463bf03a8d161c6f0bc4173afb6e0 --locked
21
+ - name: Check PR notes
22
+ uses: narumiruna/changenote/check@f4423760122463bf03a8d161c6f0bc4173afb6e0
23
+ with:
24
+ since: refs/remotes/origin/${{ github.base_ref }}
25
+ coverage: package
26
+ skip-release: ${{ contains(github.event.pull_request.labels.*.name, 'skip-changenote') }}
27
+ reason: ${{ contains(github.event.pull_request.labels.*.name, 'skip-changenote') && 'Maintainer approved a note exemption; see the PR description.' || '' }}
@@ -0,0 +1,37 @@
1
+ name: Checks
2
+ on:
3
+ push:
4
+ pull_request:
5
+ permissions:
6
+ contents: read
7
+ jobs:
8
+ rust:
9
+ strategy:
10
+ matrix:
11
+ os: [ubuntu-latest, macos-latest]
12
+ runs-on: ${{ matrix.os }}
13
+ steps:
14
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
15
+ with:
16
+ persist-credentials: false
17
+ - uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
18
+ with:
19
+ components: rustfmt, clippy
20
+ - run: cargo fmt --all -- --check
21
+ - run: cargo clippy --locked --all-targets -- -D warnings
22
+ - run: cargo test --locked --all-targets
23
+ - run: cargo build --locked --release
24
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
25
+ with:
26
+ python-version: "3.12"
27
+ enable-cache: false
28
+ - run: uv lock --check
29
+ - name: Build Python source distribution and wheel
30
+ run: uv build
31
+ - name: Check installed wheel
32
+ shell: bash
33
+ run: |
34
+ expected=$(uv run --no-project python -c 'import tomllib; print(tomllib.load(open("Cargo.toml", "rb"))["package"]["version"])')
35
+ actual=$(uvx --isolated --no-index --find-links dist brachio --version)
36
+ test "$actual" = "brachio $expected"
37
+ uvx --isolated --no-index --find-links dist brachio --help
@@ -0,0 +1,156 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*.*.*"]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: publish-${{ github.ref }}
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ validate:
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ version: ${{ steps.version.outputs.version }}
20
+ steps:
21
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
22
+ with:
23
+ persist-credentials: false
24
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
25
+ with:
26
+ python-version: "3.12"
27
+ enable-cache: false
28
+ - name: Validate release tag and version
29
+ id: version
30
+ env:
31
+ RELEASE_REF_TYPE: ${{ github.ref_type }}
32
+ RELEASE_TAG: ${{ github.ref_name }}
33
+ run: |
34
+ uv run --no-project python - <<'PY'
35
+ import os
36
+ import re
37
+ import tomllib
38
+ from pathlib import Path
39
+
40
+ package = tomllib.loads(Path("Cargo.toml").read_text())["package"]
41
+ version = package["version"]
42
+ if not re.fullmatch(r"(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)", version):
43
+ raise SystemExit("Publication requires a stable SemVer version")
44
+ if os.environ["RELEASE_REF_TYPE"] != "tag" or os.environ["RELEASE_TAG"] != f"v{version}":
45
+ raise SystemExit("Publication requires a tag matching Cargo.toml: v" + version)
46
+ locked = [
47
+ entry for entry in tomllib.loads(Path("Cargo.lock").read_text())["package"]
48
+ if entry["name"] == "brachio" and "source" not in entry
49
+ ]
50
+ if len(locked) != 1 or locked[0]["version"] != version:
51
+ raise SystemExit("Cargo.lock must match Cargo.toml")
52
+ with open(os.environ["GITHUB_OUTPUT"], "a") as output:
53
+ output.write(f"version={version}\n")
54
+ PY
55
+ - uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
56
+ with:
57
+ components: rustfmt, clippy
58
+ - run: uv lock --check
59
+ - run: cargo fmt --all -- --check
60
+ - run: cargo clippy --locked --all-targets -- -D warnings
61
+ - run: cargo test --locked --all-targets
62
+ - run: cargo build --locked --release
63
+ - run: cargo publish --locked --dry-run
64
+
65
+ wheels:
66
+ needs: validate
67
+ strategy:
68
+ fail-fast: false
69
+ matrix:
70
+ include:
71
+ - runner: ubuntu-latest
72
+ target: x86_64-unknown-linux-gnu
73
+ - runner: ubuntu-24.04-arm
74
+ target: aarch64-unknown-linux-gnu
75
+ - runner: macos-15-intel
76
+ target: x86_64-apple-darwin
77
+ - runner: macos-14
78
+ target: aarch64-apple-darwin
79
+ runs-on: ${{ matrix.runner }}
80
+ steps:
81
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
82
+ with:
83
+ persist-credentials: false
84
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
85
+ with:
86
+ python-version: "3.12"
87
+ enable-cache: false
88
+ - name: Build platform wheel
89
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
90
+ with:
91
+ maturin-version: v1.15.0
92
+ target: ${{ matrix.target }}
93
+ manylinux: 2_28
94
+ args: --release --locked --out dist --compatibility pypi
95
+ - name: Check installed wheel
96
+ shell: bash
97
+ env:
98
+ EXPECTED_VERSION: ${{ needs.validate.outputs.version }}
99
+ run: |
100
+ actual=$(uvx --isolated --no-index --find-links dist brachio --version)
101
+ test "$actual" = "brachio $EXPECTED_VERSION"
102
+ uvx --isolated --no-index --find-links dist brachio --help
103
+ - name: Build source distribution
104
+ if: matrix.target == 'x86_64-unknown-linux-gnu'
105
+ uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
106
+ with:
107
+ maturin-version: v1.15.0
108
+ command: sdist
109
+ args: --out dist
110
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
111
+ with:
112
+ name: python-${{ matrix.target }}
113
+ path: dist/*
114
+ if-no-files-found: error
115
+
116
+ crates-io:
117
+ needs: [validate, wheels]
118
+ runs-on: ubuntu-latest
119
+ environment:
120
+ name: crates-io
121
+ url: https://crates.io/crates/brachio
122
+ permissions:
123
+ contents: read
124
+ id-token: write
125
+ steps:
126
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
127
+ with:
128
+ persist-credentials: false
129
+ - uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
130
+ - name: Authenticate with crates.io
131
+ id: auth
132
+ uses: rust-lang/crates-io-auth-action@3268eb413133e2960fa4ae0e963ca76380c54cd9 # v1.0.6
133
+ - name: Publish to crates.io
134
+ env:
135
+ CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
136
+ run: cargo publish --locked
137
+
138
+ pypi:
139
+ needs: [validate, wheels]
140
+ runs-on: ubuntu-latest
141
+ environment:
142
+ name: pypi
143
+ url: https://pypi.org/project/brachio/
144
+ steps:
145
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
146
+ with:
147
+ pattern: python-*
148
+ merge-multiple: true
149
+ path: dist
150
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
151
+ with:
152
+ enable-cache: false
153
+ - name: Publish to PyPI
154
+ env:
155
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
156
+ run: uv publish --trusted-publishing never --check-url https://pypi.org/simple/ dist/*
@@ -0,0 +1,29 @@
1
+ # Python packaging
2
+ .venv/
3
+ dist/
4
+ __pycache__/
5
+
6
+ # Generated by Cargo
7
+ # will have compiled files and executables
8
+ debug
9
+ target
10
+
11
+ # These are backup files generated by rustfmt
12
+ **/*.rs.bk
13
+
14
+ # MSVC Windows builds of rustc generate these, which store debugging information
15
+ *.pdb
16
+
17
+ # Generated by cargo mutants
18
+ # Contains mutation testing data
19
+ **/mutants.out*/
20
+
21
+ # rustc will dump stack traces when hitting an internal compiler error to PWD
22
+ rustc-ice-*.txt
23
+
24
+ # RustRover
25
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
26
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
27
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
28
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
29
+ #.idea/
@@ -0,0 +1,14 @@
1
+ # Repository instructions
2
+
3
+ ## Documentation
4
+
5
+ - [UNREVIEWED] Read `docs/publishing.md` before changing release tooling, change notes, or release outputs.
6
+
7
+ ## Boundaries
8
+
9
+ - [UNREVIEWED] Run `changenote version`, `changenote tag`, tag pushes, GitHub Releases, or registry uploads only when the user explicitly requests that specific release action.
10
+
11
+ ## Git and commits
12
+
13
+ - [UNREVIEWED] Before committing a release-relevant change, add or update a `brachio` note in `.changenote/` under the policy in `docs/publishing.md#change-notes` and validate it with `changenote status`.
14
+ - [UNREVIEWED] For changes that need no release, create no note and state the reason in the completion report.