agent-pbx 2.2.0__tar.gz → 2.3.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.
- {agent_pbx-2.2.0/src/agent_pbx.egg-info → agent_pbx-2.3.0}/PKG-INFO +378 -19
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/README.md +377 -18
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/pyproject.toml +4 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/__init__.py +1 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/agent.py +20 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/api.py +2202 -25
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/cli.py +52 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/event_bridge.py +58 -21
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/models.py +3 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/runtime.py +135 -21
- agent_pbx-2.3.0/src/agent_pbx/codex_launch.py +121 -0
- agent_pbx-2.3.0/src/agent_pbx/config.py +160 -0
- agent_pbx-2.3.0/src/agent_pbx/demo/capture.py +218 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/contract.py +3 -2
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/fake_codex.py +6 -2
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/fixtures.py +32 -3
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/policy.py +10 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/session.py +347 -27
- agent_pbx-2.3.0/src/agent_pbx/demo/web.py +937 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/doctor.py +458 -2
- agent_pbx-2.3.0/src/agent_pbx/git_broker.py +3405 -0
- agent_pbx-2.3.0/src/agent_pbx/git_worktree.py +806 -0
- agent_pbx-2.3.0/src/agent_pbx/host_process_evidence.py +251 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/joplin.py +254 -4
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/lifecycle.py +217 -7
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/managed_runtime.py +144 -9
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/mcp_daemon.py +206 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/mcp_tools.py +358 -27
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/migration.py +1 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/operator.py +1245 -43
- agent_pbx-2.3.0/src/agent_pbx/operator_actions.py +182 -0
- agent_pbx-2.3.0/src/agent_pbx/operator_authority.py +1036 -0
- agent_pbx-2.3.0/src/agent_pbx/operator_broker.py +690 -0
- agent_pbx-2.3.0/src/agent_pbx/operator_delegation.py +447 -0
- agent_pbx-2.3.0/src/agent_pbx/project_spawn.py +189 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/runtime_tmux.py +33 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/schemas.py +416 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/setup_assistant.py +8 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/store.py +3844 -193
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/widget.py +18 -3
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/tmux.py +81 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/tui.py +10193 -698
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/runtime.py +47 -3
- agent_pbx-2.3.0/src/agent_pbx/workerbee_access.py +423 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_controlled_run.py +772 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_controlled_run_executor.py +485 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_direct_bind.py +794 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_gateway.py +1221 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_materializer.py +413 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/workerbee_mcp.py +26 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_modes.py +474 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_policy.py +834 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_runtime.py +243 -0
- agent_pbx-2.3.0/src/agent_pbx/workerbee_snapshot_policy.py +904 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/workerbee_switcher.py +331 -28
- agent_pbx-2.3.0/src/agent_pbx/workerbee_workspace.py +1101 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0/src/agent_pbx.egg-info}/PKG-INFO +378 -19
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx.egg-info/SOURCES.txt +37 -0
- agent_pbx-2.3.0/src/agent_pbx.egg-info/entry_points.txt +7 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_agent_instructions.py +2 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_event_bridge.py +67 -1
- agent_pbx-2.3.0/tests/test_codex_launch.py +56 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_profiles.py +109 -0
- agent_pbx-2.3.0/tests/test_demo_capture.py +114 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_docs.py +27 -0
- agent_pbx-2.3.0/tests/test_doctor.py +462 -0
- agent_pbx-2.3.0/tests/test_git_broker.py +2202 -0
- agent_pbx-2.3.0/tests/test_git_worktree.py +1097 -0
- agent_pbx-2.3.0/tests/test_host_process_evidence.py +297 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_joplin.py +490 -1
- agent_pbx-2.3.0/tests/test_lifecycle.py +654 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_managed_runtime.py +57 -2
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_mcp_daemon.py +129 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_mcp_tools.py +328 -1
- agent_pbx-2.3.0/tests/test_migration.py +361 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_operator.py +621 -1
- agent_pbx-2.3.0/tests/test_operator_authority.py +546 -0
- agent_pbx-2.3.0/tests/test_operator_broker.py +641 -0
- agent_pbx-2.3.0/tests/test_operator_delegation.py +640 -0
- agent_pbx-2.3.0/tests/test_project_spawn.py +115 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_public_demo_fixtures.py +29 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_public_demo_policy.py +50 -0
- agent_pbx-2.3.0/tests/test_public_demo_session.py +327 -0
- agent_pbx-2.3.0/tests/test_public_demo_web.py +350 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_remote.py +2 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_runtime_tmux.py +56 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_runtime_ux.py +125 -1
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_setup_assistant.py +27 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_store.py +170 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_terminal.py +23 -2
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_tmux.py +87 -2
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_tui.py +7231 -750
- agent_pbx-2.3.0/tests/test_workerbee_access.py +150 -0
- agent_pbx-2.3.0/tests/test_workerbee_controlled_run.py +782 -0
- agent_pbx-2.3.0/tests/test_workerbee_gateway.py +1965 -0
- agent_pbx-2.3.0/tests/test_workerbee_materializer.py +172 -0
- agent_pbx-2.3.0/tests/test_workerbee_modes.py +254 -0
- agent_pbx-2.3.0/tests/test_workerbee_policy.py +243 -0
- agent_pbx-2.3.0/tests/test_workerbee_runtime.py +58 -0
- agent_pbx-2.3.0/tests/test_workerbee_snapshot_policy.py +215 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_workerbee_switcher.py +224 -7
- agent_pbx-2.3.0/tests/test_workerbee_workspace.py +1134 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_workflow.py +257 -0
- agent_pbx-2.2.0/src/agent_pbx/config.py +0 -58
- agent_pbx-2.2.0/src/agent_pbx/demo/web.py +0 -353
- agent_pbx-2.2.0/src/agent_pbx/project_spawn.py +0 -61
- agent_pbx-2.2.0/src/agent_pbx.egg-info/entry_points.txt +0 -3
- agent_pbx-2.2.0/tests/test_doctor.py +0 -198
- agent_pbx-2.2.0/tests/test_lifecycle.py +0 -247
- agent_pbx-2.2.0/tests/test_migration.py +0 -176
- agent_pbx-2.2.0/tests/test_project_spawn.py +0 -39
- agent_pbx-2.2.0/tests/test_public_demo_session.py +0 -94
- agent_pbx-2.2.0/tests/test_public_demo_web.py +0 -171
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/LICENSE +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/setup.cfg +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/__main__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/agent_adoption.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/auth.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/client.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/__init__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/adapter.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/capabilities.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/profiles.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/protocol.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/sessions.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/skills.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex/state.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex_cli.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex_config.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex_sessions.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/codex_theme.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/compat.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/contracts.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/debug_smoke.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/__init__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/fake_github.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/fake_joplin.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/demo/fake_workerbee.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/dev_harness.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/envfile.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/events.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/files.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/issues.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/pairing.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/paths.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/polling.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/pull_requests.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/remote.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/security.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/sim_agent.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/sim_client.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/skill_packs/agent-pbx-base/SKILL.md +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/skill_packs/agent-role/SKILL.md +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/skill_packs/operator-role/SKILL.md +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/skill_packs/review-role/SKILL.md +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/skill_packs/roses-architect/SKILL.md +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/__init__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/conformance.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/keys.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/pty.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal/screen.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/terminal_editor.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/tmux_binary.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/transcript.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/tui_cli.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/uat.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/__init__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/actions.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/async_jobs.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/focus.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/navigation.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/palette_history.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/panels/__init__.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/panels/editor.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/panels/joplin.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/panels/operators.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/ui/theme.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/wiki_publish.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/workerbee.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx/workerbee_harness.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx.egg-info/dependency_links.txt +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx.egg-info/requires.txt +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/src/agent_pbx.egg-info/top_level.txt +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_agent_adoption.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_auth_pairing.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_adapter.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_cli.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_config.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_sessions.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_codex_theme.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_compat.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_contracts.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_debug_smoke.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_demo_codex.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_dev_harness.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_events.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_health.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_issues.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_navigation.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_palette_history.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_polling.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_pull_requests.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_readme.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_release_packaging.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_release_validation.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_terminal_editor.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_tmux_binary.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_tui_cli.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_uat.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_ui_controllers.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_wiki_publish.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_workerbee.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_workerbee_harness.py +0 -0
- {agent_pbx-2.2.0 → agent_pbx-2.3.0}/tests/test_workerbee_mcp.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-pbx
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Runtime-grounded control plane for durable Codex Agent and Operator sessions.
|
|
5
5
|
Author: Agent PBX contributors
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -109,7 +109,7 @@ origin policy, and versioned product-site contract.
|
|
|
109
109
|
|
|
110
110
|
See [the architecture overview](https://github.com/m4xx3d0ut/agent-pbx/blob/dev/docs/architecture.md),
|
|
111
111
|
[the project wiki](https://github.com/m4xx3d0ut/agent-pbx/wiki),
|
|
112
|
-
[the v2.
|
|
112
|
+
[the v2.3.0 release notes](https://github.com/m4xx3d0ut/agent-pbx/blob/dev/docs/releases/v2.3.0.md), and
|
|
113
113
|
[the accepted architecture decisions](https://github.com/m4xx3d0ut/agent-pbx/blob/dev/docs/adr/README.md) for the complete
|
|
114
114
|
control-plane and compatibility boundaries.
|
|
115
115
|
|
|
@@ -471,7 +471,9 @@ Campaign state is stored in dedicated SQLite tables for fast TUI/API queries:
|
|
|
471
471
|
`operator_campaign_events`. Fork state and optional planning DAG links are
|
|
472
472
|
stored in `operator_forks` and `operator_fork_edges`. Knowledge-link context is
|
|
473
473
|
stored in `operator_knowledge_links` and `operator_knowledge_turns`; executable
|
|
474
|
-
operator-to-operator handoffs are stored in `operator_handoffs
|
|
474
|
+
operator-to-operator handoffs are stored in `operator_handoffs`; durable
|
|
475
|
+
source-addressed terminal receipts are stored in
|
|
476
|
+
`operator_handoff_completion_deliveries`. Handoffs track
|
|
475
477
|
approval, required target fork launch, delivery evidence, receiver
|
|
476
478
|
acknowledgement, started/running state, TTL expiry, artifact summaries, and
|
|
477
479
|
terminal status without creating fork edges or changing source-session
|
|
@@ -524,16 +526,67 @@ should provide needed domain context through the first prompt, KB context, or a
|
|
|
524
526
|
knowledge handoff. Set `AGENT_PBX_TUI_REVIEW_FORK_LAUNCH_MODE=fresh_context`
|
|
525
527
|
to skip transcript continuation for new review forks.
|
|
526
528
|
|
|
529
|
+
Linked Git worktrees receive one additional launch preflight for trusted
|
|
530
|
+
default/edit forks. Agent PBX validates the canonical checkout, `.git`
|
|
531
|
+
indirection and reverse backpointer, per-worktree admin directory, common object
|
|
532
|
+
database, attached local branch, ownership, symlink posture, and approved-root
|
|
533
|
+
boundary. A qualifying branch must use a dedicated namespace such as
|
|
534
|
+
`pbx-operator-N/<fork-id>` with no sibling refs in that namespace. For a simple
|
|
535
|
+
compatible base profile, the generated Codex permission profile adds write
|
|
536
|
+
access only to the active worktree admin directory, shared object database, and
|
|
537
|
+
that branch's dedicated ref/reflog directories. These are sandbox filesystem
|
|
538
|
+
grants, never Codex workspace roots or `--add-dir` inputs. The profile never
|
|
539
|
+
grants the common `.git` root, sibling worktree admin directories,
|
|
540
|
+
configuration, or hooks. Standalone repositories and non-Git projects retain
|
|
541
|
+
their existing behavior; review/read-only forks never receive this profile.
|
|
542
|
+
|
|
543
|
+
Codex 0.166 cannot safely compose those direct writes with a base profile that
|
|
544
|
+
contains split secret/read/deny filesystem rules. Agent PBX does not flatten or
|
|
545
|
+
weaken that policy. Instead, a stopped, inactive edit fork can use the local
|
|
546
|
+
TUI's root-confirmed `/operator git commit` action. The broker accepts an exact
|
|
547
|
+
enumerated leaf subset—never add-all—shows each leaf's state, mode, raw SHA-256,
|
|
548
|
+
raw Git blob OID, and prior index identity, then binds confirmation to the
|
|
549
|
+
transaction, branch, HEAD/tree/index, upstream, ref, and reflog receipt. It
|
|
550
|
+
commits the approved raw bytes without clean filters while leaving unapproved
|
|
551
|
+
dirty paths unenumerated and unopened. The fork remains stopped after commit.
|
|
552
|
+
|
|
553
|
+
The broker uses a private crash journal and object quarantine. Ref, index, and
|
|
554
|
+
reflog changes are compare-and-swap guarded and exactly completed or restored
|
|
555
|
+
when their recorded identities still match. A failed transaction can leave
|
|
556
|
+
only the journaled immutable Git objects derived from the approved blobs, tree,
|
|
557
|
+
and commit; they remain unreachable and are left for normal Git garbage
|
|
558
|
+
collection because deleting shared objects during rollback is unsafe. Use
|
|
559
|
+
`/operator git recover` after a TUI/process interruption. Ambiguous, detached,
|
|
560
|
+
bare, malformed, symlinked, unapproved, partial-clone/promisor, object-alternate,
|
|
561
|
+
external-config-include, staged, sparse/split-index, or unmerged topologies fail
|
|
562
|
+
before mutation. Broker execution is unavailable through HTTP, API, or MCP and
|
|
563
|
+
is never an alternate commit path for direct-compatible forks.
|
|
564
|
+
|
|
565
|
+
The broker validates Git indexes structurally rather than scanning arbitrary
|
|
566
|
+
index bytes for extension names. It parses supported `DIRC` v2-v4 entries using
|
|
567
|
+
the repository's SHA-1 or SHA-256 object-ID width, verifies pathname and padding
|
|
568
|
+
boundaries plus the trailing checksum, and then parses the actual extension
|
|
569
|
+
table. Ordinary path or object data containing `link` or `sdir` is safe; real
|
|
570
|
+
split/sparse extensions, unknown mandatory extensions, malformed layouts, and
|
|
571
|
+
ambiguous boundaries still fail closed.
|
|
572
|
+
|
|
527
573
|
Review forks should treat the source checkout as read-only and write only under
|
|
528
574
|
their configured `work_root`. If a finding requires edits in the source repo,
|
|
529
575
|
route it with `pbx_operator_route_review_escalation` so the root operator or an
|
|
530
576
|
idle default/edit fork can handle it. If review work needs a new sibling
|
|
531
577
|
project, call `pbx_operator_request_project_spawn` with the project name,
|
|
532
578
|
instructions, and `mode` of `empty` or `clone_source`. The TUI/root operator
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
the
|
|
579
|
+
inspects the oldest pending request with `/operator project spawn inspect`, can
|
|
580
|
+
cancel it without launching through `/operator project spawn cancel`, and
|
|
581
|
+
approves it with `Spawn P` or `/operator project spawn`. Agent PBX validates the
|
|
582
|
+
source and target before accepting the request and revalidates immediately
|
|
583
|
+
before approval. A non-empty target is never copied over or initialized; select
|
|
584
|
+
another empty sibling target or use the managed workspace launcher for an
|
|
585
|
+
existing canonical Git repository. `clone_source` requires the review source to
|
|
586
|
+
be the canonical Git root, and an explicit `metadata.repo_root` must match it.
|
|
587
|
+
After validation, Agent PBX creates the sibling project, starts a normal tmux
|
|
588
|
+
caller Codex session there, records its exact runtime mapping, and attaches it
|
|
589
|
+
to the Agents pane when it registers.
|
|
537
590
|
|
|
538
591
|
If review work needs to transfer domain context to another operator, the review
|
|
539
592
|
fork can call `pbx_operator_propose_knowledge_handoff` with the source review
|
|
@@ -549,7 +602,16 @@ The root operator/TUI uses
|
|
|
549
602
|
`/operator handoffs` to inspect pending handoffs and
|
|
550
603
|
`/operator handoff preflight` to dry-run pane readiness, queue/nohup routing,
|
|
551
604
|
required target-fork state, and attached KB context without sending anything.
|
|
552
|
-
Use `/operator handoff approve` to
|
|
605
|
+
Use `/operator handoff approve` to open the durable handoff approval center.
|
|
606
|
+
It lists pending requests by immutable handoff ID, preflights the selected IDs,
|
|
607
|
+
and requires an explicit confirmation before delivery. `Cancel selected`
|
|
608
|
+
withdraws source-owned `proposed`, `approved`, or `pending_launch` requests
|
|
609
|
+
without deleting their records. Cancellation requires a reason, records the
|
|
610
|
+
prior state and actor in handoff metadata and the event journal, and requires
|
|
611
|
+
replacement handoff IDs when the reason is `superseded`. It fails closed once
|
|
612
|
+
delivery, acknowledgement, or execution has started. The top banner reports
|
|
613
|
+
`APPROVALS N` until the underlying records leave a pending state; reading the
|
|
614
|
+
Operator's latest report does not clear this approval alert. If the
|
|
553
615
|
target operator needs a caller fork that has not been launched, the handoff
|
|
554
616
|
moves to `pending_launch`; use `/operator handoff launch` to launch the
|
|
555
617
|
required fork and retry delivery. Agent PBX then sends a normal `send_input`
|
|
@@ -566,6 +628,76 @@ success by itself. Tmux evidence records the resolved pane, target command,
|
|
|
566
628
|
paste/send-key steps, and whether the target looked Codex-like; `submitted` is
|
|
567
629
|
only true for a Codex-like target.
|
|
568
630
|
|
|
631
|
+
A terminal handoff update creates one idempotent completion receipt for the
|
|
632
|
+
exact source root Operator or source fork. The Operators pane keeps semantic
|
|
633
|
+
`State` and `Flow` separate from tmux `Live`; pending results appear as
|
|
634
|
+
`⇠ REVIEW` with an `RCPT` marker. The top banner reports `RECEIPTS N`, and F8
|
|
635
|
+
opens the completion center after pending approvals and before guarded actions.
|
|
636
|
+
Reviewing and acknowledging a receipt stops retry/attention state without
|
|
637
|
+
changing the completed, failed, blocked, or canceled handoff. Nohup recipients
|
|
638
|
+
receive an exact queued command. Report-mode terminal injection requires an
|
|
639
|
+
exact managed runtime mapping or recorded pane; otherwise the durable receipt
|
|
640
|
+
remains pending rather than using global pane discovery.
|
|
641
|
+
|
|
642
|
+
New executable handoffs should also include a machine-readable
|
|
643
|
+
`execution_scope`. It records an `action_class`, `mutation_mode`, campaign and
|
|
644
|
+
workspace-set identity, allowed roots, exact paths, and explicit denied actions.
|
|
645
|
+
The `exact_git_commit_broker` class additionally requires the expected Git
|
|
646
|
+
parent and exact commit subject. An optional ordered `expected_git_parents`
|
|
647
|
+
list supports an exact merge commit; its first entry must equal the stopped
|
|
648
|
+
fork's HEAD, every entry must be a complete unique commit object ID, and the
|
|
649
|
+
broker verifies the order before and after writing the commit. Multi-parent
|
|
650
|
+
requests also require an `expected_git_tree`; the broker reconstructs that tree
|
|
651
|
+
from the approved raw-byte path set and refuses a mismatch before changing the
|
|
652
|
+
index or branch. Active merge, cherry-pick, revert, rebase, bisect, or sequencer
|
|
653
|
+
state is rejected. Requests that omit the list retain the original
|
|
654
|
+
single-parent behavior. Absolute or parent-traversing path entries are rejected.
|
|
655
|
+
The legacy free-form
|
|
656
|
+
`allowed_mutation_scope` remains readable but is never sufficient for delegated
|
|
657
|
+
approval.
|
|
658
|
+
|
|
659
|
+
The public/default broker flow remains guided: the TUI exposes one reviewed
|
|
660
|
+
stop, broker, resume, or validation step at a time. A dedicated single-user
|
|
661
|
+
host may enable root-supervised checkpoints. A root Operator can then create a
|
|
662
|
+
durable request for its own activated Trusted Workbench edit fork. The local
|
|
663
|
+
TUI revalidates the exact handoff and campaign, stops the managed fork, commits
|
|
664
|
+
only the pinned paths with the pinned parent and subject, resumes the same Codex
|
|
665
|
+
session, and returns an auditable receipt. Root validation remains a separate
|
|
666
|
+
step. Edit and review forks are not given the request tools, remote observers
|
|
667
|
+
cannot control it, and the executor endpoints accept only loopback clients.
|
|
668
|
+
The normal controller bearer remains an administrator credential and must not
|
|
669
|
+
be exposed to untrusted processes.
|
|
670
|
+
|
|
671
|
+
```bash
|
|
672
|
+
export AGENT_PBX_OPERATOR_BROKER_MODE="guided" # guided|root_operator|disabled
|
|
673
|
+
export AGENT_PBX_OPERATOR_BROKER_CONTROL_MODE="editable" # editable|read_only|hidden
|
|
674
|
+
export AGENT_PBX_OPERATOR_BROKER_REQUEST_TTL_SECONDS="900"
|
|
675
|
+
export AGENT_PBX_OPERATOR_BROKER_MAX_IN_FLIGHT="1"
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
`root_operator` is intentionally a local administrator choice; it is not the
|
|
679
|
+
committed default. Requests survive TUI replacement, use a bounded executor
|
|
680
|
+
lease, recover commit evidence from durable action receipts, and fail closed on
|
|
681
|
+
scope, workspace, session, pane, Git parent, or path drift.
|
|
682
|
+
|
|
683
|
+
The committed default remains manual approval. On a trusted local workstation,
|
|
684
|
+
the approval center's `Trust & approve` action can grant a one-hour,
|
|
685
|
+
use-limited campaign lease and approve the selected structured handoffs. Source
|
|
686
|
+
and target Operators must share the same activated `trusted-workbench`
|
|
687
|
+
workspace-set digest. The lease is pinned to the selected source-owned
|
|
688
|
+
campaigns, targets, action classes, roots, and exact paths. Matching future
|
|
689
|
+
handoffs may then pass preflight and deliver without another modal. Legacy or
|
|
690
|
+
unstructured handoffs are rejected before the lease confirmation and remain
|
|
691
|
+
eligible for one-time `Approve selected`; create a structured successor when
|
|
692
|
+
future automatic approval is required. Agent PBX preflights every selected
|
|
693
|
+
handoff before creating the lease and revokes or rejects an incomplete lease
|
|
694
|
+
when activation fails.
|
|
695
|
+
Credentials, provider/cloud operations, deployment, publication, push, tag,
|
|
696
|
+
release, repository/worktree/fork creation, workspace expansion, authority
|
|
697
|
+
elevation, destructive mutation, and unstructured legacy requests always stay
|
|
698
|
+
manual. Leases are audited, expire automatically, have a bounded use count,
|
|
699
|
+
and can be revoked through the controller API.
|
|
700
|
+
|
|
569
701
|
When a knowledge link or handoff produces reusable operating guidance, review
|
|
570
702
|
forks and operators can propose KB entries with `pbx_operator_kb_propose` or
|
|
571
703
|
`pbx_operator_kb_propose_from_link`. Proposed entries stay scoped to the
|
|
@@ -646,6 +778,11 @@ not receive a review task during creation. When the review fork requests a
|
|
|
646
778
|
sibling project, select the operator and use
|
|
647
779
|
`Spawn P` or `/operator project spawn`; the spawned project should then appear
|
|
648
780
|
as a normal caller in the Agents pane after its Codex session registers. When a
|
|
781
|
+
request is obsolete or points at pre-existing work, use
|
|
782
|
+
`/operator project spawn inspect` followed by
|
|
783
|
+
`/operator project spawn cancel`; cancellation is idempotent and does not touch
|
|
784
|
+
the target. Existing-workspace adoption remains the `F10` managed-launch path
|
|
785
|
+
rather than a project-spawn mode in this release candidate. When a
|
|
649
786
|
review fork proposes a knowledge handoff, select the logical operator and run
|
|
650
787
|
`/operator handoffs` to inspect workflow state, `/operator handoff preflight`
|
|
651
788
|
to verify the target route, `/operator handoff approve` to approve delivery,
|
|
@@ -767,14 +904,182 @@ export AGENT_PBX_WORKERBEE_SWITCHER_STATUS_BIN="$HOME/.local/bin/wb-mcp-status"
|
|
|
767
904
|
export AGENT_PBX_WORKERBEE_SWITCHER_BIN="$HOME/.local/bin/wb-mcp-switch"
|
|
768
905
|
```
|
|
769
906
|
|
|
907
|
+
Agent PBX treats backend selection, access policy, workspace placement, and
|
|
908
|
+
appliance snapshot content as separate controls. Exactly one backend is
|
|
909
|
+
selected at a time:
|
|
910
|
+
|
|
911
|
+
| Backend | Workspace domain | Current posture |
|
|
912
|
+
|---|---|---|
|
|
913
|
+
| `oss` | The exact host Git root | Supported |
|
|
914
|
+
| `platform_debug` | A content-addressed import under the debug appliance workspace | Supported |
|
|
915
|
+
| `user_appliance` | A separate managed appliance volume | Contract reserved; live image qualification deferred |
|
|
916
|
+
|
|
917
|
+
Every TUI-launched or resumed Agent, Operator, edit fork, and review fork gets a
|
|
918
|
+
private gateway lease bound to the selected backend fingerprint, generation,
|
|
919
|
+
project, and workspace receipt. A backend change invalidates the old lease;
|
|
920
|
+
restart or resume the affected Codex session through Agent PBX to materialize
|
|
921
|
+
and verify a fresh binding. The daemon does not merge host OSS status into an
|
|
922
|
+
appliance-backed session.
|
|
923
|
+
|
|
924
|
+
Platform-debug needs the repository-installed materializer plus the private
|
|
925
|
+
WorkerBee staging contract:
|
|
926
|
+
|
|
927
|
+
```bash
|
|
928
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_HELPER_BIN="$(command -v agent-pbx-workerbee-workspace)"
|
|
929
|
+
export AGENT_PBX_WORKERBEE_DEBUG_STAGE_PYTHON="/path/to/k1s-workerbee-private/.venv/bin/python"
|
|
930
|
+
export AGENT_PBX_WORKERBEE_DEBUG_STAGE_SCRIPT="/path/to/k1s-workerbee-private/scripts/dev/stage_platform_debug_workspace.py"
|
|
931
|
+
export AGENT_PBX_WORKERBEE_DEBUG_CONTAINER="workerbee-mcp-debug"
|
|
932
|
+
export AGENT_PBX_WORKERBEE_DEBUG_IMPORT_ROOT="/workspace/imports"
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
Tracked files, including initialized submodule trees, are staged automatically.
|
|
936
|
+
If a session deliberately needs dirty or untracked submodule content, approve
|
|
937
|
+
only the required paths in private host configuration. The policy is bound to
|
|
938
|
+
both Agent ID and exact source root and is never read from Agent-controlled
|
|
939
|
+
registration metadata:
|
|
940
|
+
|
|
941
|
+
```bash
|
|
942
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_INCLUDES_JSON='{"agent-id":{"source_root":"/absolute/project","include_paths":["business-site/product-pages/agent-pbx","business-site/docs/agent-pbx-product-site.md"]}}'
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
The snapshot rejects `.git`, secret-sensitive paths, escaping links, special
|
|
946
|
+
files, commit-mismatched or nested submodules, and paths outside that explicit
|
|
947
|
+
allowlist. Ordinary tracked repository content requires no include policy.
|
|
948
|
+
|
|
949
|
+
The three access profiles are `observe-local`, `review-readonly`, and
|
|
950
|
+
`local-deploy`. Deployment authority requires durable entity metadata that
|
|
951
|
+
explicitly sets `workerbee_mcp_profile=local-deploy`; a launch candidate cannot
|
|
952
|
+
self-select that profile. Review forks always receive the read-only profile.
|
|
953
|
+
Gateway bearer tokens are passed only in the child process environment and are
|
|
954
|
+
not stored in Agent or Operator metadata.
|
|
955
|
+
|
|
956
|
+
Use `Access` in the WorkerBee tab or `/workerbee access` to select inspect-only
|
|
957
|
+
or bounded local build/deploy authority for one Agent or Operator. The change
|
|
958
|
+
is durable but takes effect only after a safe Agent PBX restart/resume. This
|
|
959
|
+
keeps authority changes explicit and prevents a running process from broadening
|
|
960
|
+
its own lease.
|
|
961
|
+
|
|
962
|
+
Operator coordination role is separate from execution authority. The
|
|
963
|
+
`/operator authority` palette command manages four server-enforced profiles:
|
|
964
|
+
|
|
965
|
+
| Profile | Intended use |
|
|
966
|
+
|---|---|
|
|
967
|
+
| `scoped-edit` | Safe public default for one working checkout |
|
|
968
|
+
| `trusted-workbench` | Exact, versioned multi-project workspace set with LAN network access and bounded WorkerBee local deployment |
|
|
969
|
+
| `full-access` | Exceptional local-only profile, available only when the administrator ceiling permits it |
|
|
970
|
+
| `review-readonly` | Immutable profile for review forks |
|
|
971
|
+
|
|
972
|
+
Trusted Workbench sets contain canonical Git toplevels. A collection such as
|
|
973
|
+
`~/git/k1s-wt` may discover candidate repositories, including linked
|
|
974
|
+
worktrees, but the reviewed snapshot stores each selected checkout explicitly.
|
|
975
|
+
The collection itself never becomes a wildcard writable root. Agent PBX
|
|
976
|
+
qualifies linked-worktree Git metadata, rejects shared branch collisions,
|
|
977
|
+
deduplicates exact administration paths, and resumes the Codex thread before
|
|
978
|
+
recording the new profile as active. Edit forks inherit the root Operator's
|
|
979
|
+
profile; review forks never do.
|
|
980
|
+
|
|
981
|
+
The public default remains `scoped-edit`. Dedicated single-user workstations
|
|
982
|
+
can select `trusted-workbench` as their local default while retaining an
|
|
983
|
+
administrator root ceiling:
|
|
984
|
+
|
|
985
|
+
```bash
|
|
986
|
+
export AGENT_PBX_OPERATOR_AUTHORITY_CONTROL_MODE="editable"
|
|
987
|
+
export AGENT_PBX_OPERATOR_AUTHORITY_PROFILE_CEILING="trusted-workbench"
|
|
988
|
+
export AGENT_PBX_OPERATOR_AUTHORITY_DEFAULT_PROFILE="trusted-workbench"
|
|
989
|
+
export AGENT_PBX_OPERATOR_AUTHORITY_ROOT_CEILING_JSON='["/home/user/git"]'
|
|
990
|
+
export AGENT_PBX_OPERATOR_AUTHORITY_WORKFLOW_LABEL="Trusted Workbench"
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
The complete profile, workspace-set, inheritance, and rollback contract is in
|
|
994
|
+
the [Operator authority wiki guide](https://github.com/m4xx3d0ut/agent-pbx/wiki/Operator-Authority-and-Workspace-Sets).
|
|
995
|
+
|
|
996
|
+
Workspace mobility is a separate daemon policy. The committed default is
|
|
997
|
+
`pinned` with controller approval: an Agent may refresh the content of its
|
|
998
|
+
current checkout but cannot silently bind WorkerBee to another repository.
|
|
999
|
+
The WorkerBee tab's `Workspace` action and `/workerbee workspace` palette
|
|
1000
|
+
command show the effective policy, preview a canonical Git root and subpath,
|
|
1001
|
+
apply an approved binding, review pending requests, and revert the latest
|
|
1002
|
+
applicable transition.
|
|
1003
|
+
|
|
1004
|
+
| Policy | Allowed target |
|
|
1005
|
+
|---|---|
|
|
1006
|
+
| `pinned` | Current Git checkout only |
|
|
1007
|
+
| `same-repository` | Worktrees and subdirectories sharing the same Git common directory |
|
|
1008
|
+
| `scoped-workbench` | Git checkouts and subdirectories beneath controller-approved roots |
|
|
1009
|
+
|
|
1010
|
+
Request mode is independently `approval`, `automatic`, or `disabled`.
|
|
1011
|
+
Changing a workspace never changes the lease token, selected WorkerBee
|
|
1012
|
+
backend, generation, or tool profile. A `review-readonly` fork therefore
|
|
1013
|
+
remains read-only after a move, while `local-deploy` remains limited to its
|
|
1014
|
+
existing bounded tool allowlist. A supplied scenario label becomes a
|
|
1015
|
+
deterministic, namespaced WorkerBee project.
|
|
1016
|
+
|
|
1017
|
+
Administrators can constrain or remove this UI without trusting client-side
|
|
1018
|
+
settings:
|
|
1019
|
+
|
|
1020
|
+
```bash
|
|
1021
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_CONTROL_MODE="read_only" # editable|read_only|hidden
|
|
1022
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_POLICY_CEILING="same-repository"
|
|
1023
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_ROOT_CEILING_JSON='["/srv/engineering"]'
|
|
1024
|
+
export AGENT_PBX_WORKERBEE_WORKSPACE_REQUEST_MODE="approval"
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
The environment values are hard ceilings. A TUI or Agent cannot expand them.
|
|
1028
|
+
Allowed roots and transition paths are stored by the daemon and are omitted
|
|
1029
|
+
from ordinary status events. `agent-pbx doctor` reports the effective policy
|
|
1030
|
+
without printing its host paths.
|
|
1031
|
+
|
|
1032
|
+
For appliance-backed sessions, `Content` or `/workerbee content` independently
|
|
1033
|
+
selects `tracked`, explicit `approved-paths`, or a bounded
|
|
1034
|
+
`safe-working-tree` snapshot. Safe working tree excludes common secret paths,
|
|
1035
|
+
keys, links, special files, virtual environments, dependency caches, and
|
|
1036
|
+
oversized content. It is intended for trusted single-user workstations;
|
|
1037
|
+
high-assurance environments should use tracked or explicitly approved paths.
|
|
1038
|
+
OSS direct-host sessions do not use appliance snapshot policy.
|
|
1039
|
+
|
|
1040
|
+
The setup assistant can install reviewed workflow defaults without selecting a
|
|
1041
|
+
backend or granting deployment tools:
|
|
1042
|
+
|
|
1043
|
+
```bash
|
|
1044
|
+
agent-pbx setup plan \
|
|
1045
|
+
--project-root "$HOME/git" \
|
|
1046
|
+
--workerbee-preset trusted-platform-workbench
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
Committed new-user behavior remains observe-only, pinned plus approval, and
|
|
1050
|
+
tracked content. Administrators may independently constrain or hide Access,
|
|
1051
|
+
Workspace, and Content controls. The complete preset and environment reference
|
|
1052
|
+
is in the [WorkerBee wiki guide](https://github.com/m4xx3d0ut/agent-pbx/wiki/WorkerBee-Integration).
|
|
1053
|
+
|
|
770
1054
|
`/workerbee switch oss` and `/workerbee switch debug` always begin with the
|
|
771
1055
|
switcher's real non-mutating `--dry-run` result. Apply requires an unexpired
|
|
772
1056
|
private transaction, unchanged backend evidence, exact typed confirmation, and
|
|
773
1057
|
an additional privileged confirmation for platform-debug. Agent PBX verifies
|
|
774
1058
|
both backend provenance and WorkerBee MCP capabilities after apply, attempts
|
|
775
1059
|
automatic restoration on failure, and provides `/workerbee switch rollback`
|
|
776
|
-
for the last verified transaction.
|
|
777
|
-
|
|
1060
|
+
for the last verified transaction. Switching is blocked while a gateway
|
|
1061
|
+
mutation is active. Existing generation-bound sessions fail closed with a
|
|
1062
|
+
rebind diagnostic after a completed switch; Agent PBX never silently retargets
|
|
1063
|
+
a running session to the new backend.
|
|
1064
|
+
|
|
1065
|
+
Platform-debug posture is a separate, host-owned setting. The committed
|
|
1066
|
+
default remains loopback-only. A workstation whose qualified debug appliance
|
|
1067
|
+
owns local LAN DNS and HTTPS may opt in explicitly:
|
|
1068
|
+
|
|
1069
|
+
```bash
|
|
1070
|
+
export AGENT_PBX_WORKERBEE_PLATFORM_DEBUG_POSTURE="native_lan"
|
|
1071
|
+
```
|
|
1072
|
+
|
|
1073
|
+
The setting is included in preview and rollback evidence and must agree with
|
|
1074
|
+
the source-owned switcher's durable platform-debug profile. The normal
|
|
1075
|
+
`switch-debug` transaction consumes that profile, and the observed posture must
|
|
1076
|
+
match before Agent PBX marks the switch verified. Selecting the same backend no
|
|
1077
|
+
longer hides a loopback/native-LAN posture drift.
|
|
1078
|
+
|
|
1079
|
+
This is an Agent PBX host-control setting. It does not select a different
|
|
1080
|
+
WorkerBee appliance for clients, alter the OSS/PaaS protocol, or affect PaaS
|
|
1081
|
+
users that do not run Agent PBX. A user-appliance rollout remains a separate
|
|
1082
|
+
WorkerBee release decision.
|
|
778
1083
|
|
|
779
1084
|
## Pull Request Review
|
|
780
1085
|
|
|
@@ -866,8 +1171,10 @@ after writes, enable `AGENT_PBX_JOPLIN_SYNC_ON_WRITE=1` and provide a Joplin CLI
|
|
|
866
1171
|
path/profile. After each create, edit, delete, COPY note, or LOG append, Agent
|
|
867
1172
|
PBX records a durable SQLite sync job and a background worker runs
|
|
868
1173
|
`joplin --profile <profile> sync`. Note writes return before WebDAV sync
|
|
869
|
-
finishes.
|
|
870
|
-
|
|
1174
|
+
finishes. In managed-profile mode the status surface reports the queued sync
|
|
1175
|
+
before the worker briefly stops the Data API, preserves the locally saved note
|
|
1176
|
+
in the Joplin tab, and restores the API after success or failure. Leave this off
|
|
1177
|
+
if a separate Joplin client or background process already syncs the profile.
|
|
871
1178
|
If WebDAV sync uses E2EE, the dedicated profile must have its master key loaded;
|
|
872
1179
|
otherwise Joplin may exit successfully while reporting `Master key is not
|
|
873
1180
|
loaded`, and Agent PBX will surface that as a sync failure.
|
|
@@ -896,7 +1203,10 @@ validation, for example `Writes: ok | Profile: E2EE locked 17`. Press
|
|
|
896
1203
|
`Validate` or use `/joplin validate profile` to run the strict whole-profile
|
|
897
1204
|
check. `/joplin sync` remains a compatibility alias. Historical failures remain
|
|
898
1205
|
in Agent PBX status/events for audit; they do not roll back a note write that
|
|
899
|
-
completed successfully.
|
|
1206
|
+
completed successfully. After correcting a remote write failure, use
|
|
1207
|
+
`/joplin retry write` to requeue the selected Agent or Operator's latest failed
|
|
1208
|
+
targeted write without creating a duplicate note or invoking strict
|
|
1209
|
+
whole-profile E2EE validation.
|
|
900
1210
|
|
|
901
1211
|
Encrypted items are shown as `🔒 decryption pending`, never as empty notes.
|
|
902
1212
|
Agent PBX does not return encrypted payloads through its API and blocks edit,
|
|
@@ -990,6 +1300,15 @@ never stops an ambiguous or foreign process. Unrelated encrypted items remain
|
|
|
990
1300
|
visible as a separate profile-health warning without failing a verified targeted
|
|
991
1301
|
write.
|
|
992
1302
|
|
|
1303
|
+
At daemon startup, `managed_cli` also verifies the configured profile's Data API
|
|
1304
|
+
process and starts it when the recorded process is absent and the API is not
|
|
1305
|
+
reachable. This restores Joplin after a host restart without a competing service
|
|
1306
|
+
manager. An already-live server must pass the same PID, owner, executable,
|
|
1307
|
+
command, and profile checks; an unverified listener or process fails closed and
|
|
1308
|
+
does not block the rest of Agent PBX from starting. Do not run an independent
|
|
1309
|
+
restart loop against the same managed profile because it could relaunch the Data
|
|
1310
|
+
API server during Agent PBX's exclusive CLI sync window.
|
|
1311
|
+
|
|
993
1312
|
The managed decrypt pass uses only Joplin's own cached master-key credential.
|
|
994
1313
|
Agent PBX does not receive or persist the E2EE password. If the credential is
|
|
995
1314
|
missing or Joplin's crypto worker fails, the validated API server is restored
|
|
@@ -1052,8 +1371,10 @@ an optimistic lock using the loaded file hash or mtime and reports a conflict if
|
|
|
1052
1371
|
the file changed on disk. Returning from Neovim to a clean Textual buffer
|
|
1053
1372
|
refetches the file, so native-editor writes do not leave a stale editable copy.
|
|
1054
1373
|
A dirty Textual buffer must be saved or reverted before its project can open in
|
|
1055
|
-
the native editor. `F9
|
|
1056
|
-
|
|
1374
|
+
the native editor. `F9`, `Full F9`, or `/view fullscreen` toggles the complete
|
|
1375
|
+
active right-side workspace full width while keeping the TUI title and footer
|
|
1376
|
+
visible. The selected right tab and its terminal/editor state are preserved;
|
|
1377
|
+
the compatibility command `/editor fullscreen` invokes the same layout action.
|
|
1057
1378
|
|
|
1058
1379
|
`Native` or `/editor terminal` starts or attaches a project-rooted managed
|
|
1059
1380
|
editor without requiring a file to be staged in Textual. `/editor workspace`
|
|
@@ -1265,7 +1586,9 @@ commands such as `/detail`, `/ping`, `/esc`, `/ctrlc`, `/restart`, `/tmux`,
|
|
|
1265
1586
|
`/operator kb`, `/operator kb detail`, `/operator kb proposed`,
|
|
1266
1587
|
`/operator kb proposed detail`, `/operator kb seed`, `/operator kb compile`,
|
|
1267
1588
|
`/operator kb reindex`, `/operator kb promote`, `/operator kb reject`,
|
|
1268
|
-
`/operator kb retire`, `/operator project spawn`,
|
|
1589
|
+
`/operator kb retire`, `/operator project spawn`,
|
|
1590
|
+
`/operator project spawn inspect`, `/operator project spawn cancel`,
|
|
1591
|
+
`/codex update`, `/pr`, `/pr refresh`,
|
|
1269
1592
|
`/pr review`, `/pr validate`, `/pr url`, `/pr merge`, `/issue`, `/issue refresh`, `/issue mitigate`,
|
|
1270
1593
|
`/issue url`, `/issue clear`, configured `/joplin`, `/joplin new`,
|
|
1271
1594
|
`/joplin rename`, `/joplin delete`, `/joplin copy`,
|
|
@@ -1291,7 +1614,22 @@ explicit restart creates a fresh pane on the configured managed tmux server,
|
|
|
1291
1614
|
resumes the preserved Codex session, registers and verifies the new mapping,
|
|
1292
1615
|
and leaves the stale or absent pane reference behind. Agent PBX refuses to
|
|
1293
1616
|
create a pane when the daemon cannot verify mapping state, preventing an
|
|
1294
|
-
unreachable runtime from being duplicated.
|
|
1617
|
+
unreachable runtime from being duplicated. Existing-pane stop, purge, restart,
|
|
1618
|
+
and resume actions require an exact executable/socket/server/session/window/pane
|
|
1619
|
+
match and never fall back to the process-default tmux server; colliding pane IDs
|
|
1620
|
+
therefore fail safely. For a canceled, inactive edit fork, a durable mapping in
|
|
1621
|
+
`missing` state is treated as historical local evidence only after a fresh
|
|
1622
|
+
daemon probe agrees with the Agent's recorded server mode/ID, tmux session and
|
|
1623
|
+
pane, and Codex session; the writer lease is empty; and the recorded process is
|
|
1624
|
+
conclusively absent. A fresh local/outer tmux listing must also contain no pane
|
|
1625
|
+
owned by that Agent. A same-number pane on another tmux server does not revive
|
|
1626
|
+
that stale mapping. Unreadable process evidence, missing provenance, a live
|
|
1627
|
+
process with matching start identity, an active writer, embedded-terminal
|
|
1628
|
+
state, and every
|
|
1629
|
+
non-missing runtime state continue to block reconciliation. A readable PID with
|
|
1630
|
+
different start ticks proves that the registered process identity is gone;
|
|
1631
|
+
an existing but unreadable or malformed `/proc/<pid>` remains ambiguous. Use
|
|
1632
|
+
`/codex update` to ask the Agent
|
|
1295
1633
|
PBX daemon to run the allowlisted npm update for
|
|
1296
1634
|
`@openai/codex`, then use `/restart` or `/codex restart` to move long-lived
|
|
1297
1635
|
caller, root-operator, and fork panes onto the updated executable. TUI-owned
|
|
@@ -1449,6 +1787,22 @@ default edit fork. `/agent launch` remains an alias for the same picker, while
|
|
|
1449
1787
|
caller. Plain `F10` remains PBX-owned under embedded-terminal focus;
|
|
1450
1788
|
`Shift+F10` sends F10 to Codex.
|
|
1451
1789
|
|
|
1790
|
+
Managed caller launch now includes a deterministic, audited registration
|
|
1791
|
+
bootstrap in the initial Codex command. It disables the startup update check so
|
|
1792
|
+
an upgrade interstitial cannot consume that prompt, exposes only the caller
|
|
1793
|
+
registration/report Agent PBX tools, auto-approves those explicitly enabled
|
|
1794
|
+
tools, and leaves unrelated approval escalation disallowed by the caller's
|
|
1795
|
+
normal launch policy. Retries with the same Agent, repository, profile, runtime
|
|
1796
|
+
mode, and source Codex session return the existing ready mapping rather than
|
|
1797
|
+
creating a second pane. The source session identifier and bootstrap digest are
|
|
1798
|
+
retained as launch provenance.
|
|
1799
|
+
|
|
1800
|
+
TUI-created root Operators, edit forks, and review forks launch on the selected
|
|
1801
|
+
runtime tmux server and immediately register the exact server socket, session,
|
|
1802
|
+
window, pane, process, Codex-session evidence, and outer-client provenance.
|
|
1803
|
+
This avoids a manual reconciliation window before handoff preflight can address
|
|
1804
|
+
the new pane.
|
|
1805
|
+
|
|
1452
1806
|
Agent PBX v2 enables the native local tmux path by default when the TUI uses a
|
|
1453
1807
|
loopback daemon and `tmux` is available. `Latest` embeds a PTY-backed normal
|
|
1454
1808
|
tmux client attached to the selected PBX-managed runtime. Codex keeps its native
|
|
@@ -1483,9 +1837,14 @@ terminal access; the WSS client is the observer/control path.
|
|
|
1483
1837
|
|
|
1484
1838
|
Plain configured function keys remain global PBX navigation even under terminal
|
|
1485
1839
|
focus: `F1` Agents, `F2` Events, `F3` view, `F4` input, `F5` Operators,
|
|
1486
|
-
`F6/F7` fork navigation, `F8` next alert, `F9`
|
|
1840
|
+
`F6/F7` fork navigation, `F8` next alert, `F9` right-pane fullscreen, `F10` workspace launch,
|
|
1487
1841
|
and `F11/F12` navigation back/forward. Repeated F8 presses
|
|
1488
|
-
focus and acknowledge one displayed Agent/Operator alert at a time.
|
|
1842
|
+
focus and acknowledge one displayed Agent/Operator alert at a time. Approval
|
|
1843
|
+
centers are single-flight: F8 never stacks duplicate modals. Pressing F8 while
|
|
1844
|
+
the approval center is frontmost closes that reviewed center and advances to
|
|
1845
|
+
the next unreviewed approval or report alert. An unresolved approval remains
|
|
1846
|
+
durable and can be reopened after the alert cycle; a nested confirmation must
|
|
1847
|
+
be completed or dismissed before cycling.
|
|
1489
1848
|
Shift+F1–F12 is translated to unmodified child F1–F12. Thus F2
|
|
1490
1849
|
always focuses Events while Shift+F2 opens Codex warnings. The input layer also
|
|
1491
1850
|
recognizes xterm F13–F24 aliases, and the key probe documents terminal-specific
|