Commit Graph
157 Commits
Author SHA1 Message Date
GodopuandClaude Opus 5 78cb9ecfa9 feat(issue-5): DelegationService, cli router, ensure_subscriber_daemon; lib.sh helpers delegate to python
Adds the python side of the delegation helpers and switches lib.sh over to it.

  daemon.py   port of start_watchdog. Same monitor path, same pgrep pattern, so
              a daemon started by either implementation is found by the other;
              same stderr wording and exit 1 when reconcile.sh is missing; same
              "print the PID" contract, multiple pgrep matches included, since
              the shell echoed them all and trimming would be a silent change.
              start_new_session detaches it, and SIGHUP is ignored across the
              exec so it outlives its parent exactly as nohup did.
  cli.py      thin router. submit/publish forward to the existing main() of the
              module that already owned the behaviour, so exit codes, stdout
              shape and side effects cannot drift between the shell path and
              the script path. Only ensure-daemon carries logic of its own.
  service.py  DelegationService facade, with an optional persistent connection
              for the phase 2a engine. CLI and shell always use one-shot.

lib.sh keeps the three legacy bodies verbatim as _*_legacy behind
MAM_DELEGATION_PY=0, which is the instant rollback switch. PYTHONPATH is passed
explicitly so `-m` resolves lib_py from the tree this lib.sh belongs to, which
is what makes a frozen loop run frozen delegation code. start_watchdog survives
as an alias for ensure_subscriber_daemon.

The wrapper and run_loop.sh are untouched; reconcile.sh gains only the
ensure_env_loaded line from the previous commit.

Verified: C-01..C-09 pass against both the legacy and the python bodies, the
daemon dedups and survives its parent, the cli reproduces the legacy failure
line exactly, and publish failure semantics (status synced, seq consumed,
audit records published=false) are identical through the shim and the cli.
tier1+tier2 109 passed; bash -n clean on all six shell files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UrDNJkHmm18uu7n7JwV5Qd
2026-09-06 15:42:09 +09:00
Godopu 76f10b2096 feat(agent): add full codex agent support (v4.2.0)
- Implement CodexAdapter in lib_py/agents/adapters/codex.py with safe flags and TUI readiness
- Extend create_session, resume_session, stop_session, and reconcile for codex CLI
- Support codex agent delegation and loop integration across all multi-agent skills
- Add unit, component, and contract test suites for codex integration
- Verify all 462 tests passing cleanly
2026-09-05 23:02:29 +09:00
Godopu de0a9c2e81 fix(herdr): guard idle-pane env wrapping on explicit env_flags in new-session
- Prevent injecting 'env HERDR_WORKSPACE_ID=...' into final_cmd when caller passed no environment variables
- Avoid argument parse errors in real agent binaries (e.g. grok, agy) when reusing an idle pane in new-session
2026-09-05 21:01:18 +09:00
Godopu 85a46ef98b chore(release): bump framework and 8 skills to v4.1.3 (PATCH — herdr daemon isolation & Class A 0-turn resume reliability fixes) 2026-08-31 11:25:07 +09:00
Godopu c49ee3bdd8 fix(herdr): detach daemon bootstrap into own process group via python spawner
- Replace 'nohup ... server & disown' with portable Python 'Popen(..., start_new_session=True)' in lib.sh shim generator
- Isolate headless herdr server in its own SID/PGID to protect against parent process-group signal broadcast (SIGTERM/SIGINT)
- Add regression test test_h26_daemon_spawn_uses_process_group_detachment to verify child PGID detachment (Closes #3 Item 1)
2026-08-31 10:30:42 +09:00
Godopu b327bc7132 fix(herdr): prevent pane misattribution and prioritize idle-pane reuse in new-session
- Restrict generic agent_kind fallback in _resolve_herdr_pane_id to bare-kind searches
- Exclude 'agent' key from exact-match loop to enforce R-1 fail-closed contract
- Prioritize reusing existing idle pane on new-session to prevent unbounded pane proliferation
- Wrap final_cmd with env prefix to preserve env_flags when reusing idle pane
2026-08-30 11:02:50 +09:00
Godopu eb8057b031 chore(release): bump framework and 8 skills to v4.1.1 (PATCH — agent creation & runtime reliability fixes) 2026-08-30 06:08:15 +09:00
Godopu 6de15350c0 chore(release): bump framework and 8 skills to v4.1.0 (MINOR — OpenCode AI agent integration) 2026-08-29 23:20:53 +09:00
Godopu 94af7f6b8a feat(opencode): wire 29-point CLI lifecycle scripts, drift-C reconciler, and skill docs 2026-08-29 14:59:01 +09:00
Godopu 6c0b8b0084 chore(release): bump framework and 8 skills to v4.0.0 (MAJOR — cline removal & hermes modernization)
- Bump MAM_VERSION to 4.0.0 in lib.sh
- Bump all 8 skill frontmatter versions to 4.0.0 in 3-way lockstep
- Update VERSIONS.md with v4.0.0 changelog, migration guide (B-1..B-5), and skill matrix
- Archive multi-agent version upgrade consensus and peer review reports (439 passed, 0 failures)
2026-08-28 23:31:31 +09:00
Godopu f57cd5cdde feat(agent): deprecate and completely remove cline agent support
- Delete adapters/cline.py and unregister from registry.py
- Remove cline branches from lib.sh and all 8 skill scripts (create, resume, stop, status, reconcile, update_yaml_resumed, resolve_session_id, orc_onboard)
- Narrow own-key mapping dictionaries across lib_py core modules to 4 supported agents
- Delete cline-exclusive tests and retarget shared fixtures to grok/hermes/claude
- Update skills documentation and installation guides (439 passed, 0 failures)
- Archive cline deprecation consensus and review reports
2026-08-28 22:38:48 +09:00
Godopu 4a3328d0b7 chore(release): bump framework and 8 skills to v3.1.0 (MINOR)
- Define immutable MAM_VERSION="3.1.0" runtime constant in lib.sh
- Bump YAML frontmatter version to 3.1.0 across all 8 skill packages
- Document v3.1.0 changelog, 2-tier TUI readiness architecture, and migration guide in VERSIONS.md
- Document new tuning knobs (MAM_KILL_ON_READY_TIMEOUT, MAM_DIALOG_TAIL_LINES, MAM_READY_EMPTY_GIVEUP) in .mam.env.example
- Add 3-way lockstep and immutability test suite in tests/test_version_consistency.py
2026-08-28 18:25:14 +09:00
Godopu 17edf90676 fix(tui): establish 2-tier readiness model, modal/hint token separation, and adapter modal contracts
- Separate TUI dialog detection into blocking gate layer (_MAM_MODAL_TOKENS) and recovery layer (_MAM_HINT_TOKENS) to eliminate idle dialog starvation
- Add modal_tokens contract across agent adapters (claude, cline) with dynamic scope facts resolution in send_keys_safe
- Implement fail-closed resolution for ambiguous same-kind panes (R-1) and enforce WORKSPACE_ROOT export (R-2)
- Preserve session on TUI readiness timeout when PID is alive for diagnostics
- Add comprehensive test suite in tests/test_c1_tui_readiness.py and adapter contract assertions in test_a4
2026-08-28 15:21:10 +09:00
Godopu c3631e2aa1 fix(herdr): resolve shim routing defects, add workspace scoping, and bump to v3.0.1
- Resolve Herdr shim 5 routing & paste defects (ISSUE-1 ~ ISSUE-5):
  * paste-buffer: use pane send-text without auto-enter, propagate rc=3 to send_keys_safe
  * exact-match pane resolution: remove substring matching ('in tn') across all branches
  * workspace scoping: introduce HERDR_WORKSPACE_ID and .mam/herdr_workspace_id persistence
  * unified resolver: single _resolve_herdr_pane_id helper across shim commands
- Resolve dialog token false-positive on 'Yes, try it' tip and isolate fullscreen modal rejection
- Sync mock Herdr CLI contracts in tests/conftest.py
- Add contract tests H-15~H-23 and regression tests D-4~D-7 (412 tests, 100% PASS)
- Add multi-agent loop plans, review reports, and bug report
- Update framework and skill packages to v3.0.1
2026-08-27 21:42:37 +09:00
Godopu 4bbd03bf2d fix(lib): handle agent_not_ready startup state and reject claude fullscreen upsell modal
- Accept agent_not_ready from herdr agent start to allow startup dialog handling without premature rollback, while preserving fail-closed behavior on dead process timeouts.
- Match Claude fullscreen renderer upsell modal via 'Yes, try it' and dismiss with Escape to avoid dropping permission flags or deadlocking on idle /tui tips.
- Add behavioral test suite in test_b19_headless_reconcile_fixes.py and cross-agent review reports.
2026-08-27 10:17:53 +09:00
Godopu 050baed640 fix(lib): enhance target agent resolution and import fallback in herdr shim 2026-08-26 15:41:50 +09:00
Godopu 80d2f7f068 feat(layout): implement deterministic 2xK grid engine with single decision table
- Change N=1->2 split policy from down to right to establish 2 full-height columns
- Share single decision table across GUI and headless modes
- Add _full_height_pane guard to prevent half-height column splits
- Quadruple-wire default max_columns=2 and max_rows=2 across layout.py, lib.sh, and .mam.env.example
- Update unit and integration tests to enforce deterministic 2x2 grid trajectory
2026-08-26 15:10:06 +09:00
Godopu 80c9e37b77 fix(create): support --name alias, default workspace, and grok onboarding dispatch 2026-08-26 10:59:36 +09:00
Godopu ad8201d706 feat(agent): add Grok Build TUI adapter, runtime dispatch, and skill support 2026-08-26 10:49:34 +09:00
Godopu f3ac68f36d feat(layout): relax MAM_MIN_PANE_COLS to 15 and remove vertical height constraints for scrollable terminal split 2026-08-26 09:44:02 +09:00
Godopu b72412be95 feat(layout): reduce default MAM_MIN_PANE_COLS to 40 for single workspace 2xK multi-pane tiling 2026-08-24 15:06:02 +09:00
Godopu fc8ca88107 fix(herdr-workspace): synchronize herdr runtime workspace label on spawn and resume 2026-08-24 13:17:34 +09:00
Godopu d2cdc3f8cd fix(claude-adapter): add modern Claude Code banner tokens to ready_tokens 2026-08-24 13:02:53 +09:00
Godopu e6e70dbb21 feat(cli,registry): introduce --herdr-workspace option and decouple socket fallback chains 2026-08-24 12:50:09 +09:00
Godopu f7e1513585 refactor: standardize --agent option usage, improve YAML registry fallback, and fix layout falsy-zero trap (J-1)
- In stop_session.sh and update_yaml_resumed.sh: standardize explicit --agent option and use resolve_agent_type_from_registry to read agent type from YAML/DB state rather than brittle suffix-only regex inference.
- Update multi-agent-mux-stop/SKILL.md, multi-agent-mux-resume/SKILL.md, multi-agent-mux-create/SKILL.md, and deploy/INSTALL.md to standardize passing --agent explicitly.
- Fix J-1 in layout.py: refactor _env_int(*names, default=None) to take an explicit default parameter, eliminating the falsy-zero trap so MAM_MIN_PANE_COLS=0 is respected.
- Add regression and contract tests: test_j1_env_zero_min_cols_matches_flag_zero, test_j1_env_zero_min_rows_matches_flag_zero, test_comp_stop_agent_fallback_*, test_comp_docs_stop_examples_pass_agent.
- Verified 100% UNANIMOUS PASS from Planner claude and Reviewers claude and cline.
2026-08-24 10:08:27 +09:00
Godopu 31b2d70ffe fix(lib,reconcile,test): address Claude review findings and verify 100% PASS
- lib.sh: distinguish unobservable/headless (rc=2) from unsettled panes in _pane_quiescent; restore 10s quiescence window with early giveup (SKS_EMPTY_GIVEUP)
- reconcile.sh: fix SKILLS_DIR command substitution logic (&& pwd instead of || pwd)
- tests/test_b19_headless_reconcile_fixes.py: implement mutation-proven regression tests for headless prompt bypass, slow-settling panes with persistent counters, and real reconcile.sh SKILLS_DIR evaluation
- deploy/ & IMPROVEMENTS.md: document nats submodule access notes and B-19/B-20 evolution
- Promoted Reviewer Claude's final 100% PASS report (report-119b9f57.md)
2026-08-23 20:57:38 +09:00
Godopu 6e2e9b1161 feat(layout): implement right-growth 2xK grid layout engine in lib_py.layout and refactor lib.sh (B-20) 2026-08-23 19:54:03 +09:00
Godopu 82eecfda24 fix(skills): resolve headless layout overflow, reconcile SKILLS_DIR scope, and prompt-injection fast-path gating (B-19) 2026-08-23 17:49:45 +09:00
Godopu 3523b9b1ea docs(broker): establish remote Docker deployment plan for nats-server with networking/security guides and add D-15~D-21 freshness guards 2026-08-22 23:47:29 +09:00
Godopu 40576c44ab refactor(uuid): resolve B-10 by deprecating agent_identities and removing PyYAML dependency
- Remove dead agent_identities read path and PyYAML import from workspace_uuid.py
- Defer eager PyYAML import in verify_session.py to lazy YAML fallback branch
- Simplify UUID resolution to 2-tier model (tier-1 own row ID -> tier-2 adapter scan)
- Clean up unused Drift D and ghost cache clearing in reconcile.sh and stop_session.sh
- Add 3 regression guards in tests/test_tier1_unit.py (266/266 PASS)
- Update IMPROVEMENTS.md, VERSIONS.md, and SKILL.md files
2026-08-17 10:59:03 +09:00
Godopu 5ed39f899b fix(agents): harden shell adapter bridge and address double-check review feedback
- create_session.sh: add explicit case fallback for delegate_agent (R1)
- lib_py.agents: add spawn-spec, resume-spec, exit-key argv CLI subcommands (R2)
- resume_session.sh, stop_session.sh: replace python string interpolation with safe argv subcommands (R2)
- stop_session.sh: dynamically iterate adapter.identity_cache_fields (R3)
- verify_session.py, workspace_uuid.py: remove dead imports (R9/N4)
- tests/test_a4_adapter_contract.py: add CLI bridge subcommand, clean-env PYTHONPATH safety, and fallback contract tests (R12/N1)
- SKILL.md, docs, logs: synchronize IMPROVEMENTS.md, LOG.md, and resolve_session_id wording (R8/R10/R11)
- promote verified peer review reports for cline (e7b9812b) and claude (31730364)
2026-08-17 08:54:57 +09:00
Godopu b4821fafa8 feat(a4,c3b): complete A-4 Phase 2 agent knowledge migration & Option B isolation removal
- Option B / C-3b: Deprecate isolation.root and remove its 4 legacy consumers in lib.sh, workspace_uuid.py, verify_session.py, and stop_session.sh.
- M2~M7 Migration: Implement artifact_path, verify_artifact, purge_artifacts, spawn_spec, resume_spec, auth_ok, discover, ready_tokens, exit_key, and delegate_agent_key across BaseAgentAdapter and all 4 adapters (Claude, Agy, Hermes, Cline).
- Migrate shell duplications in lib.sh, create_session.sh, resume_session.sh, stop_session.sh, and reconcile.sh to python -m lib_py.agents facts.
- Hardening & Corrections: Fix Cline resume_spec flag to '-i --id', apply shlex.quote across all facts variables with MAM_ prefix, add safe fallback in wait_for_tui_ready.
- Add comprehensive contract tests in tests/test_a4_adapter_contract.py and sync IMPROVEMENTS.md / LOG.md.
- Verified: 100% PASS across unit, component, contract, and integration tests.
2026-08-16 23:15:24 +09:00
Godopu 971f14ad3f fix(cleanup): remove empty isolation stubs and dead symbols (P2-2 / C-3a / C-4) 2026-08-16 10:26:36 +09:00
Godopu 14b9de14fc fix(herdr): ensure unique agent name via sha1 truncation and align mock errors
- Replace legacy s[:16]-s[-15:] truncation with 8-char SHA-1 hash suffix in sanitize.py and lib.sh to prevent workspace name collisions
- Align mock Herdr error messages in tests/conftest.py to real Herdr 0.8.0 output format
- Add missing required/invalid_agent_name to early abort regex in lib.sh
- Remove legacy heuristics in lib.sh has-session and unify mock agent lookups
- Add unit tests in tests/test_sanitize_and_mock_errors.py (256/256 passed)
2026-08-15 09:00:48 +09:00
Godopu 301ff5bb1f feat(herdr): complete Herdr 0.8.0 adaptation and sanitize module 2026-08-14 23:09:08 +09:00
Godopu 1c24732be0 fix(lib): expose _sanitize_herdr_agent_name at top-level and handle agent prompt in herdr shim 2026-08-14 10:58:11 +09:00
Godopu 6699159c76 fix(lib): strip leading agent binary path unconditionally before herdr agent start 2026-08-14 10:52:43 +09:00
Godopu a7f3fc3242 fix(herdr): support Herdr 0.8.0 pane allocation, agent prompt, and length limits 2026-08-14 10:49:29 +09:00
Godopu 720f8ad224 fix(lib): resolve B-8 send_keys_safe agy verification bypass and add submission retry test 2026-08-14 09:35:17 +09:00
Godopu caffd04f36 feat(lib): implement A-4 M0~M1 BaseAgentAdapter pattern and resolve_home contract 2026-08-14 08:44:36 +09:00
Godopu e10db8966e refactor(lib): extract large inline python blocks to lib_py package and optimize abstraction layer 2026-08-13 22:57:11 +09:00
Godopu 657a749f43 fix(lib): finalize herdr 0.7.4 contract refactor and layout policy 2026-08-13 20:50:03 +09:00
Godopu 2bd59fce9b fix(lib): prevent set -u unbound variable error for final_cmd in kind detection and harden test fixtures 2026-08-13 09:36:07 +09:00
Godopu db6b064b62 fix(lib): restore env_flags and final_cmd initialization before kind detection in herdr new-session shim 2026-08-13 09:09:55 +09:00
Godopu b0c2c08519 fix(lib): strip duplicate binary path in final_cmd to fix Go flag parsing and add dual herdr agent start syntax fallback 2026-08-13 09:04:42 +09:00
Godopu 20e2e9bd2d fix(lib): resolve workspace CWD mismatch in herdr new-session shim and enforce target workspace slug priority 2026-08-13 08:37:51 +09:00
Godopu 6be1b6aecb feat(skill): implement multi-agent-mux-orc-onboard skill and orchestrator_uuids exclusion gate (40/40 PASS) 2026-08-12 12:49:33 +09:00
Godopu 245abe62c8 feat(create/monitor): implement automatic UUID materialization, auto-pinning, and drift-C2 resolution (13/13 PASS) 2026-08-09 10:24:32 +09:00
Godopu fbf275a8bc fix(b4): restore dynamic POSIX timestamp in herdr ls shim and reconcile.sh (100% PASS) 2026-08-08 23:36:50 +09:00
Godopu 68f43349be fix(e2e): finalize sqlite concurrency locking, mock_herdr atomic state, and e2e test suite (100% PASS) 2026-08-07 22:39:23 +09:00