meshcode 2.11.65__tar.gz → 2.11.67__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.
- {meshcode-2.11.65 → meshcode-2.11.67}/PKG-INFO +1 -1
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/__init__.py +1 -1
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/server.py +107 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode.egg-info/PKG-INFO +1 -1
- meshcode-2.11.67/meshcode.egg-info/SOURCES.txt +88 -0
- meshcode-2.11.67/meshcode.egg-info/top_level.txt +1 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/pyproject.toml +1 -1
- meshcode-2.11.65/meshcode/ascii_art.py +0 -638
- meshcode-2.11.65/meshcode/claude_update 2.py +0 -253
- meshcode-2.11.65/meshcode/claude_update 3.py +0 -253
- meshcode-2.11.65/meshcode/claude_update 4.py +0 -253
- meshcode-2.11.65/meshcode/claude_update 5.py +0 -253
- meshcode-2.11.65/meshcode/claude_update 6.py +0 -253
- meshcode-2.11.65/meshcode/cli.py +0 -42
- meshcode-2.11.65/meshcode/compat.py +0 -174
- meshcode-2.11.65/meshcode/error_hints.py +0 -74
- meshcode-2.11.65/meshcode/exceptions.py +0 -52
- meshcode-2.11.65/meshcode/hostd 2.py +0 -381
- meshcode-2.11.65/meshcode/hostd 3.py +0 -381
- meshcode-2.11.65/meshcode/hostd 4.py +0 -381
- meshcode-2.11.65/meshcode/hostd 5.py +0 -381
- meshcode-2.11.65/meshcode/hostd 6.py +0 -394
- meshcode-2.11.65/meshcode/invites.py +0 -406
- meshcode-2.11.65/meshcode/launcher.py +0 -353
- meshcode-2.11.65/meshcode/launcher_install.py +0 -414
- meshcode-2.11.65/meshcode/meshcode_mcp/__init__.py +0 -22
- meshcode-2.11.65/meshcode/meshcode_mcp/__main__.py +0 -62
- meshcode-2.11.65/meshcode/meshcode_mcp/test_backend.py +0 -86
- meshcode-2.11.65/meshcode/meshcode_mcp/test_realtime.py +0 -95
- meshcode-2.11.65/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
- meshcode-2.11.65/meshcode/preferences.py +0 -260
- meshcode-2.11.65/meshcode/protocol_v2.py +0 -129
- meshcode-2.11.65/meshcode/secrets.py +0 -365
- meshcode-2.11.65/meshcode/supervisor.py +0 -186
- meshcode-2.11.65/meshcode/up 2.py +0 -220
- meshcode-2.11.65/meshcode/up 3.py +0 -220
- meshcode-2.11.65/meshcode/up 4.py +0 -257
- meshcode-2.11.65/meshcode/up 5.py +0 -257
- meshcode-2.11.65/meshcode/upload.py +0 -125
- meshcode-2.11.65/meshcode-backend-wt/comms_v4.py +0 -1941
- meshcode-2.11.65/meshcode-backend-wt/meshcode/__init__.py +0 -82
- meshcode-2.11.65/meshcode-backend-wt/meshcode/comms_v4.py +0 -3563
- meshcode-2.11.65/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -1261
- meshcode-2.11.65/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -460
- meshcode-2.11.65/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -4117
- meshcode-2.11.65/meshcode-backend-wt/meshcode/quickstart.py +0 -148
- meshcode-2.11.65/meshcode-backend-wt/meshcode/run_agent.py +0 -958
- meshcode-2.11.65/meshcode-backend-wt/meshcode/self_update.py +0 -345
- meshcode-2.11.65/meshcode-backend-wt/meshcode/setup_clients.py +0 -926
- meshcode-2.11.65/meshcode-backend-wt/scripts/sentinel.py +0 -257
- meshcode-2.11.65/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -387
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -82
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -638
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -42
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -3563
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -174
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -74
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -52
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -406
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -353
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -414
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -22
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -62
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -1261
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -460
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -4117
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -86
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -95
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -260
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -129
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -148
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -958
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -365
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -345
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -926
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -186
- meshcode-2.11.65/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -125
- meshcode-2.11.65/meshcode-noun-wt/comms_v4.py +0 -1941
- meshcode-2.11.65/meshcode-noun-wt/meshcode/__init__.py +0 -82
- meshcode-2.11.65/meshcode-noun-wt/meshcode/ascii_art.py +0 -638
- meshcode-2.11.65/meshcode-noun-wt/meshcode/cli.py +0 -42
- meshcode-2.11.65/meshcode-noun-wt/meshcode/comms_v4.py +0 -3563
- meshcode-2.11.65/meshcode-noun-wt/meshcode/compat.py +0 -174
- meshcode-2.11.65/meshcode-noun-wt/meshcode/error_hints.py +0 -74
- meshcode-2.11.65/meshcode-noun-wt/meshcode/exceptions.py +0 -52
- meshcode-2.11.65/meshcode-noun-wt/meshcode/invites.py +0 -406
- meshcode-2.11.65/meshcode-noun-wt/meshcode/launcher.py +0 -353
- meshcode-2.11.65/meshcode-noun-wt/meshcode/launcher_install.py +0 -414
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -22
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -62
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -1261
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -460
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -4117
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
- meshcode-2.11.65/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
- meshcode-2.11.65/meshcode-noun-wt/meshcode/preferences.py +0 -260
- meshcode-2.11.65/meshcode-noun-wt/meshcode/protocol_v2.py +0 -129
- meshcode-2.11.65/meshcode-noun-wt/meshcode/quickstart.py +0 -148
- meshcode-2.11.65/meshcode-noun-wt/meshcode/run_agent.py +0 -958
- meshcode-2.11.65/meshcode-noun-wt/meshcode/secrets.py +0 -365
- meshcode-2.11.65/meshcode-noun-wt/meshcode/self_update.py +0 -345
- meshcode-2.11.65/meshcode-noun-wt/meshcode/setup_clients.py +0 -926
- meshcode-2.11.65/meshcode-noun-wt/meshcode/supervisor.py +0 -186
- meshcode-2.11.65/meshcode-noun-wt/meshcode/upload.py +0 -125
- meshcode-2.11.65/meshcode-noun-wt/scripts/sentinel.py +0 -257
- meshcode-2.11.65/meshcode-noun-wt/tests/test_core.py +0 -216
- meshcode-2.11.65/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -366
- meshcode-2.11.65/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -361
- meshcode-2.11.65/meshcode-noun-wt/tests/test_exceptions.py +0 -107
- meshcode-2.11.65/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -200
- meshcode-2.11.65/meshcode-noun-wt/tests/test_migration_integrity.py +0 -176
- meshcode-2.11.65/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -236
- meshcode-2.11.65/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -255
- meshcode-2.11.65/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -387
- meshcode-2.11.65/meshcode-noun-wt/tests/test_security_regressions.py +0 -171
- meshcode-2.11.65/meshcode-noun-wt/tests/test_sentinel.py +0 -148
- meshcode-2.11.65/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -231
- meshcode-2.11.65/meshcode-tasks-wt/comms_v4.py +0 -1941
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/__init__.py +0 -82
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/ascii_art.py +0 -638
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/cli.py +0 -42
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/comms_v4.py +0 -3563
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/compat.py +0 -174
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/error_hints.py +0 -74
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/exceptions.py +0 -52
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/invites.py +0 -406
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/launcher.py +0 -353
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/launcher_install.py +0 -414
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -22
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -62
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -1261
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -460
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -4117
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/preferences.py +0 -260
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -129
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/quickstart.py +0 -148
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/run_agent.py +0 -958
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/secrets.py +0 -365
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/self_update.py +0 -345
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/setup_clients.py +0 -926
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/supervisor.py +0 -186
- meshcode-2.11.65/meshcode-tasks-wt/meshcode/upload.py +0 -125
- meshcode-2.11.65/meshcode-tasks-wt/scripts/sentinel.py +0 -257
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_core.py +0 -216
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -366
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -361
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_exceptions.py +0 -107
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -200
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -176
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -236
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -255
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -387
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_security_regressions.py +0 -171
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_sentinel.py +0 -148
- meshcode-2.11.65/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -231
- meshcode-2.11.65/meshcode.egg-info/SOURCES.txt +0 -258
- meshcode-2.11.65/meshcode.egg-info/top_level.txt +0 -4
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 2.py +0 -126
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 3.py +0 -126
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 4.py +0 -126
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 5.py +0 -126
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 6.py +0 -126
- meshcode-2.11.65/tests/test_autonomous_prompt_inject 7.py +0 -126
- meshcode-2.11.65/tests/test_core.py +0 -216
- meshcode-2.11.65/tests/test_cross_agent_messaging.py +0 -366
- meshcode-2.11.65/tests/test_esc_deaf_state.py +0 -361
- meshcode-2.11.65/tests/test_exceptions.py +0 -107
- meshcode-2.11.65/tests/test_mark_read_batch.py +0 -200
- meshcode-2.11.65/tests/test_migration_integrity.py +0 -176
- meshcode-2.11.65/tests/test_realtime_event_freshness.py +0 -236
- meshcode-2.11.65/tests/test_rls_cross_tenant.py +0 -255
- meshcode-2.11.65/tests/test_security_regressions.py +0 -171
- meshcode-2.11.65/tests/test_sentinel.py +0 -148
- meshcode-2.11.65/tests/test_status_enum_coverage.py +0 -231
- {meshcode-2.11.65 → meshcode-2.11.67}/README.md +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/__main__.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/cli.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/compat.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/daemon.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/doctor.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/hostd.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/invites.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/launcher.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/preferences.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/secrets.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/self_update.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode/up.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/meshcode/upload.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/setup.cfg +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_core.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_doctor.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.65/meshcode-backend-wt → meshcode-2.11.67}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.65 → meshcode-2.11.67}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -6404,6 +6404,113 @@ def meshcode_fulfill(promise_id: str) -> Dict[str, Any]:
|
|
|
6404
6404
|
})
|
|
6405
6405
|
|
|
6406
6406
|
|
|
6407
|
+
# ----------------- PENDING APPROVALS (flagship: GO/no-go gate) -----------------
|
|
6408
|
+
# Task bb396c9b. The agent asks for a GO/no-go before a gated action; a human (or an
|
|
6409
|
+
# autonomous commander) approves/rejects with one button in the dashboard panel.
|
|
6410
|
+
# AUTO-APPROVE: if the project commander is in autonomous_mode AND the action is NOT
|
|
6411
|
+
# destructive, mc_request_approval auto-approves at creation. SAFETY FLOOR: a
|
|
6412
|
+
# destructive/irreversible action ALWAYS escalates to a human, even in autonomous mode.
|
|
6413
|
+
|
|
6414
|
+
_APPROVAL_RISK = ("low", "medium", "high", "critical")
|
|
6415
|
+
_APPROVAL_ACTIONS = ("push", "ddl", "deploy", "send", "task_complete", "custom")
|
|
6416
|
+
|
|
6417
|
+
|
|
6418
|
+
@mcp.tool()
|
|
6419
|
+
@with_working_status
|
|
6420
|
+
def meshcode_request_approval(
|
|
6421
|
+
title: str,
|
|
6422
|
+
detail: Optional[str] = None,
|
|
6423
|
+
risk_level: str = "medium",
|
|
6424
|
+
action_type: str = "custom",
|
|
6425
|
+
is_destructive: bool = False,
|
|
6426
|
+
context: Optional[Dict[str, Any]] = None,
|
|
6427
|
+
timeout_seconds: int = 1800,
|
|
6428
|
+
) -> Dict[str, Any]:
|
|
6429
|
+
"""Request a human/commander GO-no-go approval before a gated action, then BLOCK
|
|
6430
|
+
until it's resolved. Use before anything risky/outward-facing you want a human to
|
|
6431
|
+
confirm (prod DDL, deploy, force-push, external send, spending money, etc.).
|
|
6432
|
+
|
|
6433
|
+
Auto-approves instantly IF the project's commander is in autonomous_mode AND the
|
|
6434
|
+
action is NOT destructive. A destructive/irreversible action ALWAYS waits for a
|
|
6435
|
+
human, even under autonomous_mode (safety floor).
|
|
6436
|
+
|
|
6437
|
+
Args:
|
|
6438
|
+
title: short one-line summary of what you want to do (shown as the panel row).
|
|
6439
|
+
detail: optional markdown detail (the diff/command/plan/target).
|
|
6440
|
+
risk_level: 'low' | 'med' | 'high'.
|
|
6441
|
+
action_type: 'push' | 'ddl' | 'deploy' | 'send' | 'task_complete' | 'custom'.
|
|
6442
|
+
is_destructive: True for irreversible/destructive actions (always human-gated).
|
|
6443
|
+
context: optional jsonb context (diff, command, target ids).
|
|
6444
|
+
timeout_seconds: how long to block waiting for the decision (default 1800).
|
|
6445
|
+
|
|
6446
|
+
Returns: {ok, approval_id, decision: 'approved'|'rejected'|'expired'|'timeout',
|
|
6447
|
+
auto_approved: bool, resolved_by?}.
|
|
6448
|
+
"""
|
|
6449
|
+
if not title or not title.strip():
|
|
6450
|
+
return {"ok": False, "error": "title is required"}
|
|
6451
|
+
if risk_level not in _APPROVAL_RISK:
|
|
6452
|
+
return {"ok": False, "error": f"risk_level must be one of {_APPROVAL_RISK}"}
|
|
6453
|
+
if action_type not in _APPROVAL_ACTIONS:
|
|
6454
|
+
return {"ok": False, "error": f"action_type must be one of {_APPROVAL_ACTIONS}"}
|
|
6455
|
+
api_key = _get_api_key()
|
|
6456
|
+
created = be.sb_rpc("mc_request_approval", {
|
|
6457
|
+
"p_api_key": api_key,
|
|
6458
|
+
"p_title": title.strip(),
|
|
6459
|
+
"p_detail": (detail or None),
|
|
6460
|
+
"p_risk_level": risk_level,
|
|
6461
|
+
"p_action_type": action_type,
|
|
6462
|
+
"p_is_destructive": bool(is_destructive),
|
|
6463
|
+
"p_context": context if isinstance(context, dict) else None,
|
|
6464
|
+
})
|
|
6465
|
+
if not isinstance(created, dict) or not created.get("ok"):
|
|
6466
|
+
return created if isinstance(created, dict) else {"ok": False, "error": "create_failed"}
|
|
6467
|
+
approval_id = created.get("approval_id")
|
|
6468
|
+
status = created.get("status")
|
|
6469
|
+
# Auto-approved at creation (autonomous commander, non-destructive) -> return now.
|
|
6470
|
+
if status in ("approved", "auto_approved"):
|
|
6471
|
+
return {"ok": True, "approval_id": approval_id, "decision": status,
|
|
6472
|
+
"auto_approved": (status == "auto_approved"), "resolved_by": created.get("resolved_by")}
|
|
6473
|
+
if status in ("rejected", "expired"):
|
|
6474
|
+
return {"ok": True, "approval_id": approval_id, "decision": status, "auto_approved": False}
|
|
6475
|
+
# Pending -> block-poll until resolved / expired / timeout.
|
|
6476
|
+
import time as _time
|
|
6477
|
+
deadline = _time.monotonic() + max(30, int(timeout_seconds))
|
|
6478
|
+
while _time.monotonic() < deadline:
|
|
6479
|
+
_time.sleep(4)
|
|
6480
|
+
st = be.sb_rpc("mc_approval_status", {"p_api_key": api_key, "p_approval_id": approval_id})
|
|
6481
|
+
if isinstance(st, dict) and st.get("ok"):
|
|
6482
|
+
cur = st.get("status")
|
|
6483
|
+
if cur in ("approved", "auto_approved", "rejected", "expired"):
|
|
6484
|
+
return {"ok": True, "approval_id": approval_id, "decision": cur,
|
|
6485
|
+
"auto_approved": False, "resolved_by": st.get("resolved_by")}
|
|
6486
|
+
return {"ok": True, "approval_id": approval_id, "decision": "timeout", "auto_approved": False,
|
|
6487
|
+
"hint": "still pending; re-check with the panel or call again"}
|
|
6488
|
+
|
|
6489
|
+
|
|
6490
|
+
@mcp.tool()
|
|
6491
|
+
@with_working_status
|
|
6492
|
+
def meshcode_resolve_approval(approval_id: str, decision: str) -> Dict[str, Any]:
|
|
6493
|
+
"""Resolve a COMMANDER-tier pending approval (commander agents only). For the project's
|
|
6494
|
+
commander to clear GO/no-go requests routed to it. HARD limits enforced server-side:
|
|
6495
|
+
only the project's commander agent can resolve; you CANNOT resolve your own request;
|
|
6496
|
+
HUMAN-tier approvals (destructive / high / critical) are NOT resolvable here — those
|
|
6497
|
+
escalate to the human owner in the dashboard panel.
|
|
6498
|
+
|
|
6499
|
+
Args:
|
|
6500
|
+
approval_id: the approval to resolve.
|
|
6501
|
+
decision: 'approved' or 'rejected'.
|
|
6502
|
+
"""
|
|
6503
|
+
if not approval_id or not str(approval_id).strip():
|
|
6504
|
+
return {"ok": False, "error": "approval_id is required"}
|
|
6505
|
+
if decision not in ("approved", "rejected"):
|
|
6506
|
+
return {"ok": False, "error": "decision must be 'approved' or 'rejected'"}
|
|
6507
|
+
return be.sb_rpc("mc_approval_resolve_commander", {
|
|
6508
|
+
"p_api_key": _get_api_key(),
|
|
6509
|
+
"p_approval_id": str(approval_id).strip(),
|
|
6510
|
+
"p_decision": decision,
|
|
6511
|
+
})
|
|
6512
|
+
|
|
6513
|
+
|
|
6407
6514
|
@mcp.tool()
|
|
6408
6515
|
@with_working_status
|
|
6409
6516
|
def meshcode_seed_fixture(
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
meshcode/__init__.py
|
|
4
|
+
meshcode/__main__.py
|
|
5
|
+
meshcode/_stop_hook_template.py
|
|
6
|
+
meshcode/ascii_art.py
|
|
7
|
+
meshcode/atomic_push.py
|
|
8
|
+
meshcode/claude_update.py
|
|
9
|
+
meshcode/cli.py
|
|
10
|
+
meshcode/comms_v4.py
|
|
11
|
+
meshcode/compat.py
|
|
12
|
+
meshcode/daemon.py
|
|
13
|
+
meshcode/date_parse.py
|
|
14
|
+
meshcode/doctor.py
|
|
15
|
+
meshcode/error_hints.py
|
|
16
|
+
meshcode/exceptions.py
|
|
17
|
+
meshcode/hostd.py
|
|
18
|
+
meshcode/invites.py
|
|
19
|
+
meshcode/launcher.py
|
|
20
|
+
meshcode/launcher_install.py
|
|
21
|
+
meshcode/preferences.py
|
|
22
|
+
meshcode/protocol_handler.py
|
|
23
|
+
meshcode/protocol_v2.py
|
|
24
|
+
meshcode/quickstart.py
|
|
25
|
+
meshcode/rpc_allowlist.py
|
|
26
|
+
meshcode/run_agent.py
|
|
27
|
+
meshcode/secrets.py
|
|
28
|
+
meshcode/self_update.py
|
|
29
|
+
meshcode/setup_clients.py
|
|
30
|
+
meshcode/supervisor.py
|
|
31
|
+
meshcode/up.py
|
|
32
|
+
meshcode/upload.py
|
|
33
|
+
meshcode.egg-info/PKG-INFO
|
|
34
|
+
meshcode.egg-info/SOURCES.txt
|
|
35
|
+
meshcode.egg-info/dependency_links.txt
|
|
36
|
+
meshcode.egg-info/entry_points.txt
|
|
37
|
+
meshcode.egg-info/requires.txt
|
|
38
|
+
meshcode.egg-info/top_level.txt
|
|
39
|
+
meshcode/meshcode_mcp/__init__.py
|
|
40
|
+
meshcode/meshcode_mcp/__main__.py
|
|
41
|
+
meshcode/meshcode_mcp/backend.py
|
|
42
|
+
meshcode/meshcode_mcp/realtime.py
|
|
43
|
+
meshcode/meshcode_mcp/server.py
|
|
44
|
+
meshcode/meshcode_mcp/sleep_signals.py
|
|
45
|
+
meshcode/meshcode_mcp/test_backend.py
|
|
46
|
+
meshcode/meshcode_mcp/test_boot_timing.py
|
|
47
|
+
meshcode/meshcode_mcp/test_install_guard.py
|
|
48
|
+
meshcode/meshcode_mcp/test_prefs_claude_version.py
|
|
49
|
+
meshcode/meshcode_mcp/test_realtime.py
|
|
50
|
+
meshcode/meshcode_mcp/test_server_wrapper.py
|
|
51
|
+
meshcode/scripts/check_secrets.py
|
|
52
|
+
meshcode/scripts/race_rate_harness.py
|
|
53
|
+
tests/test_auto_update_hardening.py
|
|
54
|
+
tests/test_autonomous_closegap_1.py
|
|
55
|
+
tests/test_autonomous_closegap_2.py
|
|
56
|
+
tests/test_autonomous_closegap_3.py
|
|
57
|
+
tests/test_autonomous_prompt_inject.py
|
|
58
|
+
tests/test_boot_bug_regression.py
|
|
59
|
+
tests/test_color_truecolor.py
|
|
60
|
+
tests/test_core.py
|
|
61
|
+
tests/test_cross_agent_messaging.py
|
|
62
|
+
tests/test_date_parse.py
|
|
63
|
+
tests/test_doctor.py
|
|
64
|
+
tests/test_epistemic_v1_python_sdk.py
|
|
65
|
+
tests/test_epistemic_v1_stop_conditions.py
|
|
66
|
+
tests/test_esc_deaf_state.py
|
|
67
|
+
tests/test_exceptions.py
|
|
68
|
+
tests/test_file_upload.py
|
|
69
|
+
tests/test_init_device_code.py
|
|
70
|
+
tests/test_install_guard.py
|
|
71
|
+
tests/test_lease_sigterm_release.py
|
|
72
|
+
tests/test_mark_read_batch.py
|
|
73
|
+
tests/test_marketplace_ratings.py
|
|
74
|
+
tests/test_migration_integrity.py
|
|
75
|
+
tests/test_realtime_event_freshness.py
|
|
76
|
+
tests/test_rls_cross_tenant.py
|
|
77
|
+
tests/test_rpc_grants.py
|
|
78
|
+
tests/test_rpc_migrations.py
|
|
79
|
+
tests/test_run_agent_dry_run.py
|
|
80
|
+
tests/test_run_agent_no_server_import.py
|
|
81
|
+
tests/test_security_regressions.py
|
|
82
|
+
tests/test_self_update_user_site.py
|
|
83
|
+
tests/test_sentinel.py
|
|
84
|
+
tests/test_setup_path.py
|
|
85
|
+
tests/test_sleep_signals.py
|
|
86
|
+
tests/test_status_enum_coverage.py
|
|
87
|
+
tests/test_stay_on_loop_hook.py
|
|
88
|
+
tests/test_wait_open_tasks_contradiction.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
meshcode
|