brindle 0.0.1__tar.gz → 0.0.2__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.
- {brindle-0.0.1 → brindle-0.0.2}/PKG-INFO +1 -1
- {brindle-0.0.1 → brindle-0.0.2}/pyproject.toml +1 -1
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/watch.py +26 -10
- {brindle-0.0.1 → brindle-0.0.2}/.gitignore +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/LICENSE +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/README.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/SCHEDULE-A +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/__init__.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/__main__.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/account.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/agents.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/airgap.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/antigravity.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/autopilot.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/__init__.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/developer-codex.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/developer-heavy.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/developer-local.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/developer.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/reviewer-codex.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/reviewer-local.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/reviewer.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/subagent.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/builtin_agents/supervisor.md +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/ci.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/cli.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/codemap.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/codex_hook.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/config.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/cull.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/db.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/demo.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/detect.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/doctor.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/events.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/gates.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/git.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/history.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/inbox.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/learning.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/legacy.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/mcp_server.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/__init__.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/client.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/loop.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/permissions.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/runner.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/serve.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/native/tools.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/permissions.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pipeline.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/plugins.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/policy.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pool.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/__init__.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/_files.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/account.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/audit_chain.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/auth.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/credentials.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/features.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/keys.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/learning.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/license.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/loopback.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/orgkey.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/settings_sync.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/team_events.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/pro/team_policy.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/procs.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/profiles.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/providers.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/quota.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/savings.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/scratch.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/services.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/sessions.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/sidebar_follow.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/status_cache.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/tasks.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/tmux.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/usage.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/view.py +0 -0
- {brindle-0.0.1 → brindle-0.0.2}/src/brindle/workspaces.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brindle
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Run coding agents in parallel, each on its own git branch, with a supervisor that delegates, reviews, and merges
|
|
5
5
|
Project-URL: Homepage, https://pawdelta.com/brindle/
|
|
6
6
|
Project-URL: Documentation, https://pawdelta.com/brindle/docs/recommended-use
|
|
@@ -700,19 +700,35 @@ def _peek(stdscr, agent: dict, styles: dict[str, int]) -> None:
|
|
|
700
700
|
stdscr.timeout(int(REFRESH_SECONDS * 1000))
|
|
701
701
|
|
|
702
702
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
703
|
+
# The paw as pixels, one cell wide and two tall: X is a toe, P the pad, . empty.
|
|
704
|
+
PAW = [
|
|
705
|
+
"...XX.XX...",
|
|
706
|
+
"...XX.XX...",
|
|
707
|
+
"XX.......XX",
|
|
708
|
+
"XX..PPP..XX",
|
|
709
|
+
"...PPPPP...",
|
|
710
|
+
"..PPPPPPP..",
|
|
711
|
+
"..PPPPPPP..",
|
|
712
|
+
"...PP.PP...",
|
|
709
713
|
]
|
|
714
|
+
HALF_BLOCKS = {(False, False): " ", (True, False): "▀", (False, True): "▄", (True, True): "█"}
|
|
715
|
+
WORDMARK_ROW = 2 # the wordmark sits beside this terminal row of the paw
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
def _paw_row(y: int) -> str:
|
|
719
|
+
"""Terminal row y of the paw: pixel rows 2y and 2y+1 as half blocks."""
|
|
720
|
+
top, bottom = PAW[2 * y], PAW[2 * y + 1]
|
|
721
|
+
return "".join(HALF_BLOCKS[(t != ".", b != ".")] for t, b in zip(top, bottom))
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
LOGO = [(_paw_row(y), "brindle" if y == WORDMARK_ROW else "") for y in range(len(PAW) // 2)]
|
|
710
725
|
COMPACT_LOGO = "▀▄▀" # two toes over the pad, for one-line headers
|
|
711
726
|
|
|
712
727
|
|
|
713
728
|
def _coat(x: int, y: int) -> str:
|
|
714
|
-
"""Brindle: a fawn coat, with dark stripes down the pad."""
|
|
715
|
-
|
|
729
|
+
"""Brindle: a fawn coat, with dark stripes down every other column of the pad."""
|
|
730
|
+
pad = "P" in (PAW[2 * y][x], PAW[2 * y + 1][x])
|
|
731
|
+
return "streak" if pad and x % 2 == 1 else "coat"
|
|
716
732
|
|
|
717
733
|
|
|
718
734
|
def _draw_logo(stdscr, w: int, styles: dict[str, int]) -> int:
|
|
@@ -722,8 +738,8 @@ def _draw_logo(stdscr, w: int, styles: dict[str, int]) -> int:
|
|
|
722
738
|
for x, ch in enumerate(paw):
|
|
723
739
|
if ch != " " and x < w - 2:
|
|
724
740
|
stdscr.addstr(y, 1 + x, ch, styles.get(_coat(x, y), styles["accent"]))
|
|
725
|
-
if word and w > len(paw) + len(word) +
|
|
726
|
-
stdscr.addnstr(y,
|
|
741
|
+
if word and w > len(paw) + len(word) + 4:
|
|
742
|
+
stdscr.addnstr(y, 3 + len(paw), word, len(word), styles["bold"])
|
|
727
743
|
if w > len(clock) + 16:
|
|
728
744
|
stdscr.addnstr(0, w - 1 - len(clock), clock, len(clock), styles["dim"])
|
|
729
745
|
stdscr.addnstr(len(LOGO), 1, "─" * max(0, w - 3), w - 2, styles["dim"])
|
|
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
|
|
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
|