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.
- brachio-0.0.0/.changenote/README.md +10 -0
- brachio-0.0.0/.changenote/agent-grouping.md +5 -0
- brachio-0.0.0/.changenote/config.json +19 -0
- brachio-0.0.0/.github/workflows/changenote.yml +27 -0
- brachio-0.0.0/.github/workflows/check.yml +37 -0
- brachio-0.0.0/.github/workflows/publish.yml +156 -0
- brachio-0.0.0/.gitignore +29 -0
- brachio-0.0.0/AGENTS.md +14 -0
- brachio-0.0.0/Cargo.lock +726 -0
- brachio-0.0.0/Cargo.toml +20 -0
- brachio-0.0.0/LICENSE +21 -0
- brachio-0.0.0/PKG-INFO +206 -0
- brachio-0.0.0/README.md +195 -0
- brachio-0.0.0/docs/plans/2026-11-14_pr-10-feedback-plan.md +46 -0
- brachio-0.0.0/docs/publishing.md +156 -0
- brachio-0.0.0/docs/rex-compatibility.md +172 -0
- brachio-0.0.0/pyproject.toml +28 -0
- brachio-0.0.0/src/lib.rs +5 -0
- brachio-0.0.0/src/main.rs +409 -0
- brachio-0.0.0/src/model.rs +294 -0
- brachio-0.0.0/src/process.rs +983 -0
- brachio-0.0.0/src/rex.rs +671 -0
- brachio-0.0.0/src/tui/list.rs +524 -0
- brachio-0.0.0/src/tui/presentation.rs +681 -0
- brachio-0.0.0/src/tui/tests.rs +2965 -0
- brachio-0.0.0/src/tui.rs +1023 -0
- brachio-0.0.0/src/worker.rs +217 -0
- brachio-0.0.0/tests/fixtures/actions.json +17 -0
- brachio-0.0.0/tests/fixtures/blocks-a-moved.json +58 -0
- brachio-0.0.0/tests/fixtures/blocks-a-removed.json +51 -0
- brachio-0.0.0/tests/fixtures/blocks-a.json +58 -0
- brachio-0.0.0/tests/fixtures/blocks-b.json +11 -0
- brachio-0.0.0/tests/fixtures/clients-multiple.json +18 -0
- brachio-0.0.0/tests/fixtures/clients-none.json +3 -0
- brachio-0.0.0/tests/fixtures/clients.json +18 -0
- brachio-0.0.0/tests/fixtures/process-claude.json +8 -0
- brachio-0.0.0/tests/fixtures/process-exited.json +5 -0
- brachio-0.0.0/tests/fixtures/process-node.json +9 -0
- brachio-0.0.0/tests/fixtures/process-pi.json +8 -0
- brachio-0.0.0/tests/fixtures/rex.sh +81 -0
- brachio-0.0.0/tests/fixtures/sessions.json +12 -0
- brachio-0.0.0/tests/fixtures/status-codex.json +8 -0
- brachio-0.0.0/tests/fixtures/status-done.json +8 -0
- brachio-0.0.0/tests/fixtures/status-empty.json +3 -0
- brachio-0.0.0/tests/fixtures/status-pi-updated.json +8 -0
- brachio-0.0.0/tests/fixtures/status-pi.json +14 -0
- brachio-0.0.0/tests/fixtures/view-a-moved.json +48 -0
- brachio-0.0.0/tests/fixtures/view-a-removed.json +45 -0
- brachio-0.0.0/tests/fixtures/view-a.json +48 -0
- brachio-0.0.0/tests/fixtures/view-b.json +22 -0
- brachio-0.0.0/tests/rex_integration.rs +657 -0
- brachio-0.0.0/tests/terminal_smoke.rs +609 -0
- 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/*
|
brachio-0.0.0/.gitignore
ADDED
|
@@ -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/
|
brachio-0.0.0/AGENTS.md
ADDED
|
@@ -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.
|