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.
This commit is contained in:
2026-08-16 23:15:24 +09:00
parent 971f14ad3f
commit b4821fafa8
21 changed files with 904 additions and 531 deletions
+1 -23
View File
@@ -293,31 +293,9 @@ d['herdr_sessions'] = [{
# ==============================================================================
# FEATURE 3: Stop Session (5 Test Cases)
# FEATURE 3: Stop Session (4 Test Cases)
# ==============================================================================
def test_comp_stop_safe_path_checking(mam_sandbox):
"""Verify path guards block directory deletion if isolation path check fails."""
# Mock a terminated session where isolation root is set outside .mam folder
mutation = """
d['herdr_sessions'] = [{
'name': 'test-purge-guard-creator-claude',
'status': 'running',
'pane': {'cwd': 'WS_PLACEHOLDER'},
'isolation': {
'uuid': 'some-uuid',
'root': '/tmp/unauthorized_path_outside_mam'
}
}]
""".replace("WS_PLACEHOLDER", str(mam_sandbox))
run_mutation(mam_sandbox, mutation)
script_path = mam_sandbox / ".agents" / "skills" / "multi-agent-mux-stop" / "scripts" / "stop_session.sh"
# Attempt to purge. The python script should print "WARN: isolated home path check failed" and NOT crash
res = subprocess.run(["bash", str(script_path), "--session", "test-purge-guard-creator-claude", "--purge-conversation", "--yes"], capture_output=True, text=True)
assert res.returncode == 0
assert "WARN: isolated home path check failed" in res.stdout
def test_comp_stop_sqlite_state_update(mam_sandbox):
"""Verify that stop_session.sh updates state in SQLite to stopped."""
mutation = """