brigade-cli 0.10.2__tar.gz → 0.10.3__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.
- {brigade_cli-0.10.2/src/brigade_cli.egg-info → brigade_cli-0.10.3}/PKG-INFO +3 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/QUICKSTART.md +16 -4
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/README.md +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/pyproject.toml +13 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/__init__.py +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/__main__.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/aboyeur.py +16 -19
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/actionqueue.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/add.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/agents.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/budgets.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/budgets_cmd.py +2 -4
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/center_cmd.py +920 -131
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/chat_cmd.py +82 -17
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/cli.py +2908 -908
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/config.py +2 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/context_cmd.py +78 -13
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/daily_cmd.py +860 -171
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/doctor.py +44 -45
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/dogfood_cmd.py +10 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/fragments.py +4 -10
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/handoff.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/handoff_cmd.py +145 -78
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/hermes_adapter.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/ingest.py +2 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/install.py +87 -80
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/learn_cmd.py +99 -22
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/localio.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/managed.py +71 -31
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/memory_cmd.py +104 -30
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/notifications_cmd.py +18 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/operator_cmd.py +376 -99
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/pantry_cmd.py +4 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/phases_cmd.py +1220 -205
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/proc.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/projects_cmd.py +49 -9
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/prompt.py +2 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/reconfigure.py +3 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/registry.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/release_cmd.py +669 -158
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/reportstore.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/repos_cmd.py +1439 -280
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/config.py +10 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/engine.py +64 -32
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/extract.py +26 -12
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/handoff.py +3 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/llm.py +13 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/registry.py +50 -12
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/report.py +26 -8
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/cli.py +13 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/local.py +23 -7
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/web.py +18 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/types.py +13 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research_cmd.py +137 -58
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roadmap_cmd.py +22 -26
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roster.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roster_cmd.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/runbook_cmd.py +48 -11
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/runs_cmd.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/scrub.py +22 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/security_cmd.py +217 -50
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/selection.py +6 -15
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/skills_cmd.py +168 -44
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/station.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/status.py +2 -4
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/memory-handoff.harness.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/model-lanes.harness.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/workspace.harness.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/chat-memory-sweep.example.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/memory-care.example.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/personal.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/public-content.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/public-repo.json +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/toml_compat.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/tools_cmd.py +485 -128
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/untrusted.py +3 -4
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/untrusted_cmd.py +2 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/config.py +117 -27
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/helpers.py +9 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/ledger.py +28 -20
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/services.py +308 -164
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/session.py +256 -88
- {brigade_cli-0.10.2 → brigade_cli-0.10.3/src/brigade_cli.egg-info}/PKG-INFO +3 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/requires.txt +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_add.py +0 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_agents.py +24 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_budgets.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_config.py +1 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_doctor.py +10 -9
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_dogfood_cmd.py +1 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_fragments.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_gitignore.py +7 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_handoff.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_handoff_cmd.py +197 -144
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_ingest.py +16 -10
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_init.py +29 -13
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_install.py +5 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_managed.py +14 -13
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_memory_cmd.py +92 -17
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_notifications_cmd.py +27 -27
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_operator_cmd.py +283 -113
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_pantry_cmd.py +9 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase100_cmd.py +6 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase101_cmd.py +183 -33
- brigade_cli-0.10.3/tests/test_phase165_cmd.py +3030 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase36_cmd.py +88 -28
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase37_cmd.py +54 -8
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase38_cmd.py +105 -20
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase39_cmd.py +60 -9
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase40_cmd.py +53 -10
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase41_cmd.py +30 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase42_cmd.py +70 -13
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase43_cmd.py +92 -15
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase44_cmd.py +148 -37
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase45_cmd.py +49 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase46_50_cmd.py +26 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase51_55_cmd.py +82 -10
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase56_60_cmd.py +146 -50
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase97_cmd.py +44 -30
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_registry.py +1 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_release_cmd.py +92 -25
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_repos_cmd.py +4 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_cmd.py +18 -12
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_config.py +5 -2
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_engine.py +29 -12
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_extract.py +21 -7
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_handoff.py +12 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_llm.py +21 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_local_sources.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_registry.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_report.py +11 -7
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_types.py +3 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_web.py +19 -5
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roadmap_cmd.py +1 -3
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roster.py +1 -4
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_run_cli.py +3 -1
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_scrub.py +9 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_security_cmd.py +62 -17
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_selection.py +9 -6
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_skills_cmd.py +90 -18
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_untrusted.py +3 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_work_cmd.py +323 -88
- brigade_cli-0.10.2/tests/test_phase165_cmd.py +0 -1294
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/LICENSE +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/MANIFEST.in +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/setup.cfg +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/py.typed +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/__init__.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/__init__.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/adal/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/aider/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/antigravity/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/continue/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/copilot/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/cursor/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/depth/repo.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/depth/workspace.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/generic/harness-adapter-checklist.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/generic/memory-contract.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/goose/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/handoff/handoff-sources.example.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/handoff/openclaw-ingest-receipt.example.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/adal.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/aider.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/antigravity.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/claude.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/codex.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/continue.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/copilot.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/cursor.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/goose.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/hermes.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/kimi.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/openclaw.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/opencode.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/openhands.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/pi.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/qwen.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/README.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hooks/pre-push +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/includes/publisher.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/kimi/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/backup-restic.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/chat-surface-crawlers.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/content-safety.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/handoff-flow.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-architecture.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-care-staleness.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-scanner.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/obsidian-notes.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/pipeline-standups.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/tokenjuice-output-compaction.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/README.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/acp-escalation.openclaw.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/memory-sweep-cron.openclaw.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/model-aliases.openclaw.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/opencode/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openhands/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/pi/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/qwen/memory-handoffs/TEMPLATE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/scripts/backup-restic.sh +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/skills/note/SKILL.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/AGENTS.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/CLAUDE.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/HEARTBEAT.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/IDENTITY.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/MEMORY.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/SAFETY_RULES.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/SOUL.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/TOOLS.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/USER.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/rules/acceptance-driven-work.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/rules/issue-tdd-loop.md +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/__init__.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/constants.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/SOURCES.txt +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/dependency_links.txt +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/entry_points.txt +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/top_level.txt +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_aboyeur.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_cli_alias.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_cli_help.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_neutrality.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase96_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase98_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase99_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_privacy_regression.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_proc.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_prompt.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_reconfigure.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_cli_sources.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roster_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_runbook_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_runs_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_station.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_status.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_toml_compat.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_untrusted_cmd.py +0 -0
- {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_work_cmd_facade.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brigade-cli
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.3
|
|
4
4
|
Summary: AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw.
|
|
5
5
|
Author-email: Solomon Neas <srneas@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -23,6 +23,7 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: pytest>=7; extra == "dev"
|
|
26
|
+
Requires-Dist: ruff>=0.15; extra == "dev"
|
|
26
27
|
Provides-Extra: research
|
|
27
28
|
Requires-Dist: playwright>=1.40; extra == "research"
|
|
28
29
|
Dynamic: license-file
|
|
@@ -117,7 +118,7 @@ brigade handoff lint --target ./my-repo
|
|
|
117
118
|
brigade handoff doctor --target ./my-repo
|
|
118
119
|
```
|
|
119
120
|
|
|
120
|
-
New here? Start with [docs/first-10-minutes.md](docs/first-10-minutes.md). Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
|
|
121
|
+
New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
|
|
121
122
|
|
|
122
123
|
## Harness support
|
|
123
124
|
|
|
@@ -31,8 +31,20 @@ $ brigade init --target ~/agent-kitchen
|
|
|
31
31
|
Which harnesses do you use? (type numbers separated by space/comma to toggle, enter to confirm)
|
|
32
32
|
[x] 1. Claude Code
|
|
33
33
|
[ ] 2. Codex
|
|
34
|
-
[ ] 3.
|
|
35
|
-
[ ] 4.
|
|
34
|
+
[ ] 3. OpenCode
|
|
35
|
+
[ ] 4. Antigravity
|
|
36
|
+
[ ] 5. Pi
|
|
37
|
+
[ ] 6. Cursor
|
|
38
|
+
[ ] 7. Aider
|
|
39
|
+
[ ] 8. Goose
|
|
40
|
+
[ ] 9. Continue
|
|
41
|
+
[ ] 10. GitHub Copilot CLI
|
|
42
|
+
[ ] 11. Qwen Code
|
|
43
|
+
[ ] 12. Kimi Code
|
|
44
|
+
[ ] 13. AdaL
|
|
45
|
+
[ ] 14. OpenHands
|
|
46
|
+
[ ] 15. OpenClaw
|
|
47
|
+
[ ] 16. Hermes (experimental)
|
|
36
48
|
|
|
37
49
|
Depth? (type a number, enter for default)
|
|
38
50
|
* 1. repo (handoff flow + publish guard)
|
|
@@ -103,6 +115,6 @@ See the [Solo Cookbook](https://github.com/escoffier-labs/solos-cookbook) for th
|
|
|
103
115
|
- Read [the cookbook](https://github.com/escoffier-labs/solos-cookbook) for the deep version of every concept here.
|
|
104
116
|
- Customize `USER.md` and `TOOLS.md` with your real preferences and runbooks (kept private; do not commit personal details).
|
|
105
117
|
- Wire the ingester on a cron or a manual end-of-day workflow.
|
|
106
|
-
- Add a memory-care staleness scan when your card set starts to matter. See
|
|
107
|
-
- If you use TokenJuice, wire Claude Code and Codex hooks deliberately and tell agents what the wrapper means. See
|
|
118
|
+
- Add a memory-care staleness scan when your card set starts to matter. See [docs/memory-care.md](docs/memory-care.md).
|
|
119
|
+
- If you use TokenJuice, wire Claude Code and Codex hooks deliberately and tell agents what the wrapper means. See the tokens station in [docs/technical-guide.md](docs/technical-guide.md#managed-stations).
|
|
108
120
|
- Run `brigade work bootstrap` inside active repos when you want the dogfood-backed daily work loop, scanner inbox, and local evidence receipts.
|
|
@@ -88,7 +88,7 @@ brigade handoff lint --target ./my-repo
|
|
|
88
88
|
brigade handoff doctor --target ./my-repo
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
New here? Start with [docs/first-10-minutes.md](docs/first-10-minutes.md). Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
|
|
91
|
+
New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
|
|
92
92
|
|
|
93
93
|
## Harness support
|
|
94
94
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "brigade-cli"
|
|
7
|
-
version = "0.10.
|
|
7
|
+
version = "0.10.3"
|
|
8
8
|
description = "AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -22,7 +22,7 @@ classifiers = [
|
|
|
22
22
|
dependencies = []
|
|
23
23
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
|
-
dev = ["pytest>=7"]
|
|
25
|
+
dev = ["pytest>=7", "ruff>=0.15"]
|
|
26
26
|
research = ["playwright>=1.40"]
|
|
27
27
|
|
|
28
28
|
[project.urls]
|
|
@@ -47,3 +47,14 @@ brigade = ["py.typed", "templates/**/*"]
|
|
|
47
47
|
[tool.pytest.ini_options]
|
|
48
48
|
testpaths = ["tests"]
|
|
49
49
|
addopts = "-ra"
|
|
50
|
+
|
|
51
|
+
[tool.ruff]
|
|
52
|
+
line-length = 120
|
|
53
|
+
src = ["src", "tests"]
|
|
54
|
+
|
|
55
|
+
[tool.ruff.lint]
|
|
56
|
+
# Pragmatic initial gate: ruff's default rule set (pyflakes plus the
|
|
57
|
+
# E4/E7/E9 pycodestyle errors). Deferred for later, separate passes:
|
|
58
|
+
# import sorting (I), pyupgrade (UP), bugbear (B), the full pycodestyle
|
|
59
|
+
# E/W set, and any type checking (mypy/pyright).
|
|
60
|
+
select = ["E4", "E7", "E9", "F"]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Bounded cross-model orchestration for `brigade run`."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
|
|
4
5
|
import json
|
|
@@ -36,9 +37,7 @@ def build_plan_prompt(
|
|
|
36
37
|
corrective_note: str | None = None,
|
|
37
38
|
read_only: bool = False,
|
|
38
39
|
) -> str:
|
|
39
|
-
worker_lines = "\n".join(
|
|
40
|
-
f"- {agent.name}: cli={agent.cli}; role={agent.role}" for agent in workers(roster)
|
|
41
|
-
)
|
|
40
|
+
worker_lines = "\n".join(f"- {agent.name}: cli={agent.cli}; role={agent.role}" for agent in workers(roster))
|
|
42
41
|
if not worker_lines:
|
|
43
42
|
worker_lines = "- no workers configured"
|
|
44
43
|
|
|
@@ -139,14 +138,18 @@ def write_run_handoff(
|
|
|
139
138
|
timestamp = (now or datetime.now(timezone.utc)).strftime("%Y-%m-%d-%H%M")
|
|
140
139
|
safe_task = _one_line(task)
|
|
141
140
|
path = inbox / f"{timestamp}-brigade-run-{_slug(safe_task)}.md"
|
|
142
|
-
worker_summary =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
)
|
|
141
|
+
worker_summary = (
|
|
142
|
+
"\n".join(
|
|
143
|
+
f"- {result.worker}: {'ok' if result.ok else 'failed'}"
|
|
144
|
+
+ (f" ({_one_line(result.detail)})" if result.detail else "")
|
|
145
|
+
for result in worker_results
|
|
146
|
+
)
|
|
147
|
+
or "- no workers dispatched"
|
|
148
|
+
)
|
|
149
|
+
assignment_summary = (
|
|
150
|
+
"\n".join(f"- {assignment.worker}: {_one_line(assignment.task)}" for assignment in assignments)
|
|
151
|
+
or "- no worker assignments"
|
|
152
|
+
)
|
|
150
153
|
artifact_line = f"- artifacts: `{output_dir}`" if output_dir is not None else "- artifacts: none"
|
|
151
154
|
cwd_line = f"- cwd: `{cwd}`" if cwd is not None else "- cwd: not set"
|
|
152
155
|
mode_line = "- mode: read-only" if read_only else "- mode: normal"
|
|
@@ -404,10 +407,7 @@ def dispatch(
|
|
|
404
407
|
results_by_index: dict[int, WorkerResult] = {}
|
|
405
408
|
max_workers = min(roster.max_workers, len(assignments))
|
|
406
409
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
407
|
-
future_to_index = {
|
|
408
|
-
executor.submit(run_one, assignment): index
|
|
409
|
-
for index, assignment in enumerate(assignments)
|
|
410
|
-
}
|
|
410
|
+
future_to_index = {executor.submit(run_one, assignment): index for index, assignment in enumerate(assignments)}
|
|
411
411
|
for future in as_completed(future_to_index):
|
|
412
412
|
index = future_to_index[future]
|
|
413
413
|
try:
|
|
@@ -474,10 +474,7 @@ def _print_worker_status(results: list[WorkerResult]) -> None:
|
|
|
474
474
|
|
|
475
475
|
|
|
476
476
|
def _assignment_payload(assignments: list[Assignment]) -> list[dict[str, str]]:
|
|
477
|
-
return [
|
|
478
|
-
{"worker": assignment.worker, "task": assignment.task}
|
|
479
|
-
for assignment in assignments
|
|
480
|
-
]
|
|
477
|
+
return [{"worker": assignment.worker, "task": assignment.task} for assignment in assignments]
|
|
481
478
|
|
|
482
479
|
|
|
483
480
|
def _worker_payload(results: list[WorkerResult]) -> list[dict[str, object]]:
|
|
@@ -11,6 +11,7 @@ The phase-ledger queue in phases_cmd stays local: it stores one JSON file
|
|
|
11
11
|
per action and stamps `reviewed_at`/`review_reason` instead of the
|
|
12
12
|
`started_at`/`completed_at`/`deferred_at` lifecycle fields below.
|
|
13
13
|
"""
|
|
14
|
+
|
|
14
15
|
from __future__ import annotations
|
|
15
16
|
|
|
16
17
|
import json
|
|
@@ -10,6 +10,7 @@ Satellite tools (bootstrap-doctor, memory-doctor) are intended to depend on
|
|
|
10
10
|
brigade and consume these definitions rather than redeclaring them, so updating
|
|
11
11
|
a budget here updates every downstream consumer.
|
|
12
12
|
"""
|
|
13
|
+
|
|
13
14
|
from __future__ import annotations
|
|
14
15
|
|
|
15
16
|
from pathlib import Path
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""CLI helpers for Brigade's canonical operator budgets."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
|
|
4
5
|
import json
|
|
@@ -77,8 +78,5 @@ def check(*, target: Path, json_output: bool = False) -> int:
|
|
|
77
78
|
|
|
78
79
|
print(f"budget check: {target}")
|
|
79
80
|
for row in checks:
|
|
80
|
-
print(
|
|
81
|
-
f"[{row['status']}] {row['name']}: "
|
|
82
|
-
f"{row['size_bytes']}/{row['budget_bytes']} bytes"
|
|
83
|
-
)
|
|
81
|
+
print(f"[{row['status']}] {row['name']}: {row['size_bytes']}/{row['budget_bytes']} bytes")
|
|
84
82
|
return 0 if payload["valid"] else 1
|