swarph-cli 0.72.22__tar.gz → 0.72.24__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.
- {swarph_cli-0.72.22/src/swarph_cli.egg-info → swarph_cli-0.72.24}/PKG-INFO +1 -1
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/pyproject.toml +1 -1
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/__init__.py +1 -1
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/orphan_daemons.py +36 -2
- {swarph_cli-0.72.22 → swarph_cli-0.72.24/src/swarph_cli.egg-info}/PKG-INFO +1 -1
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1206_offer_question.py +53 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_orphan_daemons.py +49 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/LICENSE +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/README.md +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/setup.cfg +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/__main__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/backends.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/claude_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/codex_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/pack.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/prices.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/providers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/quality.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/refresh_prices.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/rules.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/runner.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/signal_score.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/bench/validate.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/caller.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/harden.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/lineage.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/liveness.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/manifest.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/paths.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/capture/verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/cell.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/chain_token.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/channel.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/_content.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/_display.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/_gateway_client.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/add.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/bench.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/board.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/board_merge_check.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/brain.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/brain_ask.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/cell.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/cell_probe.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/cell_selfcheck.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/channel.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/chat.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/codegraph.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/codegraph_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/codex_hook_output.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/codex_waker.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/compress.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/daemon.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/dreaming.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/event.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/gateway.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/gh_route.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/group.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/guide.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/highlight.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/hook_interpreter.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/hook_output.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/hooks.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/import_session.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/init.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_codex_hooks.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_multiplexer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_opencode_plugin.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_postcompact_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_wake_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/lane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/mcp_server.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/memory.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/memory_emit_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/memory_sync.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/mesh.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/monitor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/okf_links.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/onboard.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/peer_reply_drain.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/postcompact_hook_output.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/protocol_handler.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/ratify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/roster.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/rowclear_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/schedule.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/security.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/service.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/spawn.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/sweep.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/timeline.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/triage.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/version.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/wake_hook_output.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/watchdog.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/compress/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/compress/levers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/compress/marker.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/compress/verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/console_safe.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/delivery_queue.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dm_frame.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/candidates.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/clone.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/enrich.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/index_check.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/notify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/organize.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/probes.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/report.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/run.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/slm.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/transcripts.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/dreaming/verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/feature_registry.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/lanes_control.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/schema.sql +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/server.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway/services_control.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gateway_default.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/gh_identity.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/guide/GUIDE.md +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/identity.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-codex-outbox.plist +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-codex-outbox.timer.plist +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-monitor.plist +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-watchdog.plist +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-watchdog.timer.plist +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd_render.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/main.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/multiplexer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/__main__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/api.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/config.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/operator/fmt.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/pane_probe.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/parsers/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/parsers/claude.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/opencode/plugin.js +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/_shim.cmd +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/postcompact-recall-grok.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/postcompact-recall.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-emit-antigravity.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-emit-claude.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-emit-grok.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-emit.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-recall.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/precompact-flag.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/preinvocation-recall-antigravity.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/sessionstart-recall.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_executor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_executor_windows.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_reconciliation.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_reply_outbox.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_service_host.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_service_payload.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_service_reply.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/peer_staging.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/query_filters.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/quota_sync.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/rowclear.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/dm_notify_filter.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/ensure_monitor.sh +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/install_codex_waker_windows.ps1 +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/install_monitor_task_windows.ps1 +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scripts/wake_watchdog.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/scrub.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/service/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/service/app.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/service/providers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/session_bridge.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/skills/i-have-adhd/LICENSE +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/skills/i-have-adhd/SKILL.md +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/source_text.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/stall_alert.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/codex-waker.default +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/peer-reply-drain.default +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-codex-outbox@.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-codex-outbox@.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-codex-waker@.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-codex-waker@.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-monitor-reexec.path +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-monitor-reexec.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-monitor@.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-peer-reply-drain@.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-peer-reply-drain@.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-stuck-sweep.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-stuck-sweep.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-triage.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-triage.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-watchdog.default +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-watchdog.service +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/systemd/swarph-watchdog.timer +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/timeline_paths.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/tokens.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/__init__.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/backend.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/job.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/owners.json +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/router.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/rows.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/triage/sensor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli.egg-info/SOURCES.txt +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli.egg-info/dependency_links.txt +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli.egg-info/entry_points.txt +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli.egg-info/requires.txt +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli.egg-info/top_level.txt +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1006_board_publisher.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1006_session_board.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1010_strand_only.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1013_spawn_channel.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1017_muse_tui.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1050_surrogate_wake.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1052_opencode_deaf.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1059_watchdog_unread_env.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1061_roster_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1064_stuck_sweep.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1065_release.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1066_quiet_wakes.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1068_structured_accept_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1071_quota_sync.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1073_triage.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1073_triage_board.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1073_wheel_install.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1075_task_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1083_openai_decisions.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1144_cell_yaml_github.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_1197_commander_taps.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_124_register_merge.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_126_pending_from_complete.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_132_ensure_monitor_state_dir.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_138_memory_navigate.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_139_tool_probe.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_183_card_anchor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_184_notify_honesty.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_201_win32_bash_refusal.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_243_onboard_per_peer_token.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_307_task4_ask_reply.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_312_codegraph_fuzzy_verb.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_319_refusal_exit_codes.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_323_mistral_backend.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_332_report_organize_findings.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_356_query_filters.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_397_gh_identity_router.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_397_router_preflight.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_402_one_identity_resolver.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_432_rowclear.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_467b_onboard_operator_credential.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_472_register_caller_binding.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_484_codex_queue_sink.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_523_guide.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_524_conftest_hermeticity.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_532_accept_flag.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_535_version_capability.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_538_signal_bench.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_546_default_gateway.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_547_verbs_from_registry.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_548_gateway_remainder.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_552_codegraph_gateway.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_555_relay_row_shape.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_556_relay_freshness.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_559_edges_truncated.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_564_bootstrap_first_peer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_578_no_machine_specific_host_defaults.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_579_register_bootstrap_message.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_591_cli_step_graph.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_644_monitor_supervision.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_648_install_unit.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_654_reexec.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_656_owned_slm.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_684_dreaming_verb.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_689_pkg_version_order.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_715_grok_wake.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_716_timeline_one_path.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_723_grok_0251.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_724_ps1_ascii_or_bom.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_725_stdio_reconfigure.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_726_grok_limit_screen.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_729_arm_check_delivery_gap.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_729_dm_once.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_729_wake_watchdog.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_734_dreaming_enrich_degrade.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_735_dm_mcp_tools.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_739_wake_writer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_740_edit_project.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_762_cards_edit_priority.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_764_enrich_collapse.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_801_confirm_flow_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_802_stage_history.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_825_codegraph_hook_noise.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_825_install_posttooluse_only.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_825_remaining_cap_shred_bind.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_829_counterfactual_column.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_830_hook_binding_version.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_84_cli_labels.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_866_doctrine_guide.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_872_identity_refuses_not_warns.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_874_source_text.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_888_opencode_data_dir_can_fail.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_937_dreaming_notify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_938_organize_line_limit.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_941_bench_backends.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_941_harness_342.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_945_same_line_pairing.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_955_prompt_audit.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_957_auth_http.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_959_venv_interpreter.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_960_channel.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_960_ensure_monitor_heartbeat.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_961_cursor_grok_footer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_961_loud_stop.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_963_plugin_manifest.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_964_channel_cell.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_965_mesh_wait.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_975_channel_hop.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_add_security_gate.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_add.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_hash.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_lib.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_mcp.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_skill.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_tool.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_artifact_uri.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_backends.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_claude_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_codex_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_pack.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_prices.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_quality.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_runner.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_bench_validate.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_board_card_thread.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_board_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_board_merge_check.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_board_obligation_close.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_brain_ask_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_brain_ask_env_diagnosis.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_brain_ask_identity_explicitness.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_brain_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_caller_meta_guard.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_capture_lineage.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_capture_liveness.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_capture_manifest.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_capture_paths.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_capture_security.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cell_command_dispatch.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cell_harden.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cell_loader.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cell_selfcheck.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cell_verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_chain_token.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_channel_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_channel_poll_never_breaks_dms.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_channel_post.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_channel_wake_policy_filter.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_chat_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_claude_parser.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_claude_tmux_template.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_codegraph_caller_scope.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_codegraph_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_codegraph_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_codegraph_mcp.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_codex_waker.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_compress_caller_convention.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_compress_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_compress_levers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_compress_marker.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_compress_verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_console_encoding_e2e.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_content_composition.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_copilot_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_copilot_pane_reader.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_cursor_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_daemon_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_daemon_console_encoding.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_daemon_delivery.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_delivery_queue.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_display_sanitize.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_ensure_monitor_no_peer_default.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_event_emit.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_feature_to_uri.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_gateway_brain.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_gateway_client.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_gateway_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_gateway_message_idempotency.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_gh_route_doctor_mesh_name.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_group_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_guide_commands_parse.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_guide_selfcheck.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_heartbeat_check.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_highlight_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hook_output.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_activity_marker.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_add.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_bundle.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_init.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_legacy_generation_removal.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_lifecycle.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_merge.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_win32_bash_wrapper.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_hooks_win32_command_path.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_import_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_inbox_identity_provenance.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_init_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_init_provider_menu.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_install_codex_hooks.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_install_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_install_multiplexer_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_install_postcompact_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_install_wake_hook.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_lane_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_launchd_units.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_main.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_main_unknown_verb_guard.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mcp_missing_hint.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mcp_server.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_memory_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_memory_emit_snippet.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_memory_gateway.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_memory_sync.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_memory_sync_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_inbox_mark_read.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_inbox_sanitize.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_originate_thread_623.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_send_unknown_peer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_sidecar.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_sidecar_cursor_decoupled.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_sidecar_muse_sink.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_mesh_sidecar_wake_survives_read.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_meta_edge_identity.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_monitor_channel_poll.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_monitor_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_monitor_daemon_collision.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_monitor_self_name_verification.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_monitor_state_split.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_multiplexer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_muse_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_muse_own_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_obligation_close_is_surfaced.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_okf_links.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_onboard_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_opencode_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_opencode_plugin.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_operator_me.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_packaged_artifacts_exist.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_packaged_skills.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_executor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_executor_windows.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_reply_drain_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_reply_drain_supervisor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_reply_outbox.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_reply_transport.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_service_e2e.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_service_host.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_service_payload.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_peer_service_reply.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_postcompact_recall.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_process_liveness.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_protocol_handler.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_providers_isolation.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_ratify_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_readme_claims_no_gateway_default.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_repl_caller_convention.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_schedule_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_schedule_create_contract.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_scrub.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_security.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_service_app.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_service_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_service_providers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_session_bridge_inject.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_session_bridge_probe.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_session_bridge_resolve.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_session_path_role_gate.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_shipped_units_match_the_cli.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_smoke_chat.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_smoke_one_shot.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_smoke_phase_5_5.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_base_hoist.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_identity_stamp.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_live_pin.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_mitosis_lineage.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_tmux_session.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_spawn_windows_relaunch.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_stall_alert.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_subprocess_decode_encoding.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_timeline_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_tmux_wake_runstate_defer.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_tmux_wake_session_reanchor.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_tmux_wake_stale.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_tmux_wake_submit_verify.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_token_file_one_parser.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_token_precedence_explicit_first.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_unified_token_resolver.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_version_command.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_version_consistency.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_vibe_membrane.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_dm_wake.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_dm_wake_cooldown.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_dm_wake_wiring.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_emit_health.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_install_flags.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_model_rung.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_watchdog_stale_peers.py +0 -0
- {swarph_cli-0.72.22 → swarph_cli-0.72.24}/tests/test_windows_waker_installer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: swarph-cli
|
|
3
|
-
Version: 0.72.
|
|
3
|
+
Version: 0.72.24
|
|
4
4
|
Summary: The `swarph` binary — a multi-LLM CLI and mesh-gateway client + bundled server (`swarph gateway`): one-shot prompts across providers, interactive `chat`, multi-provider `spawn` (claude/codex/antigravity via a ProviderMembrane with subprocess billing-scrub), `mesh` send/inbox/register, `brain-ask` over the swarph-brain (gbrain) semantic memory, git-backed `assisted_memory`, per-invocation `gh` identity routing, a silent DM-wake hook, session `import`, and a stranded-session `watchdog`.
|
|
5
5
|
Author: Pierre Samson, Claude Opus
|
|
6
6
|
License: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "swarph-cli"
|
|
7
|
-
version = "0.72.
|
|
7
|
+
version = "0.72.24"
|
|
8
8
|
description = "The `swarph` binary — a multi-LLM CLI and mesh-gateway client + bundled server (`swarph gateway`): one-shot prompts across providers, interactive `chat`, multi-provider `spawn` (claude/codex/antigravity via a ProviderMembrane with subprocess billing-scrub), `mesh` send/inbox/register, `brain-ask` over the swarph-brain (gbrain) semantic memory, git-backed `assisted_memory`, per-invocation `gh` identity routing, a silent DM-wake hook, session `import`, and a stranded-session `watchdog`."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -48,6 +48,9 @@ class DaemonReport:
|
|
|
48
48
|
rss_kb: int = 0
|
|
49
49
|
reason: str = ""
|
|
50
50
|
self_excluded: bool = False
|
|
51
|
+
# Scan-time /proc starttime (clock ticks). Reap compares this, not a
|
|
52
|
+
# snapshot taken at signal time, so a pid recycled after the scan is skipped.
|
|
53
|
+
starttime: Optional[int] = None
|
|
51
54
|
|
|
52
55
|
|
|
53
56
|
@dataclass
|
|
@@ -413,6 +416,7 @@ def scan_orphan_daemons(
|
|
|
413
416
|
rss_kb=rss,
|
|
414
417
|
reason=reason,
|
|
415
418
|
self_excluded=related,
|
|
419
|
+
starttime=read_starttime(pid, proc_root=proc_root),
|
|
416
420
|
)
|
|
417
421
|
)
|
|
418
422
|
return result
|
|
@@ -573,15 +577,45 @@ def reap_orphans(
|
|
|
573
577
|
poll_s: float = _DEFAULT_REAP_POLL_S,
|
|
574
578
|
sleeper: Callable[[float], None] = time.sleep,
|
|
575
579
|
) -> list[SignalReport]:
|
|
576
|
-
"""Signal only ORPHANED daemons and their trees. LIVE/UNKNOWN untouched.
|
|
580
|
+
"""Signal only ORPHANED daemons and their trees. LIVE/UNKNOWN untouched.
|
|
581
|
+
|
|
582
|
+
The daemon is re-verified against the identity the scan classified
|
|
583
|
+
(starttime, cmdline, scope on DaemonReport). A mismatch means the pid
|
|
584
|
+
was recycled after the scan: skip it and do not walk the reap-time
|
|
585
|
+
child tree. A child is signalled only when its ppid chain reaches that
|
|
586
|
+
verified daemon.
|
|
587
|
+
"""
|
|
577
588
|
reports: list[SignalReport] = []
|
|
578
589
|
seen: set[int] = set()
|
|
579
590
|
for daemon in result.orphans:
|
|
591
|
+
if daemon.pid in seen:
|
|
592
|
+
continue
|
|
593
|
+
scan_ident = ProcIdentity(
|
|
594
|
+
pid=daemon.pid,
|
|
595
|
+
starttime=daemon.starttime,
|
|
596
|
+
cmdline=daemon.cmdline,
|
|
597
|
+
scope=daemon.scope,
|
|
598
|
+
)
|
|
599
|
+
if not identities_match(
|
|
600
|
+
scan_ident, snapshot_identity(daemon.pid, proc_root=proc_root),
|
|
601
|
+
):
|
|
602
|
+
seen.add(daemon.pid)
|
|
603
|
+
reports.append(SignalReport(
|
|
604
|
+
daemon.pid, "skipped",
|
|
605
|
+
"scan identity mismatch (starttime/cmdline/scope) — pid recycle, not killed",
|
|
606
|
+
))
|
|
607
|
+
continue
|
|
580
608
|
for pid in reap_order(daemon.pid, proc_root=proc_root):
|
|
581
609
|
if pid in seen:
|
|
582
610
|
continue
|
|
583
611
|
seen.add(pid)
|
|
584
|
-
|
|
612
|
+
if pid != daemon.pid and daemon.pid not in ancestry_pids(pid, proc_root=proc_root):
|
|
613
|
+
reports.append(SignalReport(
|
|
614
|
+
pid, "skipped",
|
|
615
|
+
"ppid chain does not reach the verified daemon",
|
|
616
|
+
))
|
|
617
|
+
continue
|
|
618
|
+
ident = scan_ident if pid == daemon.pid else snapshot_identity(pid, proc_root=proc_root)
|
|
585
619
|
if ident is None:
|
|
586
620
|
reports.append(SignalReport(pid, "already-gone", "gone before snapshot"))
|
|
587
621
|
continue
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: swarph-cli
|
|
3
|
-
Version: 0.72.
|
|
3
|
+
Version: 0.72.24
|
|
4
4
|
Summary: The `swarph` binary — a multi-LLM CLI and mesh-gateway client + bundled server (`swarph gateway`): one-shot prompts across providers, interactive `chat`, multi-provider `spawn` (claude/codex/antigravity via a ProviderMembrane with subprocess billing-scrub), `mesh` send/inbox/register, `brain-ask` over the swarph-brain (gbrain) semantic memory, git-backed `assisted_memory`, per-invocation `gh` identity routing, a silent DM-wake hook, session `import`, and a stranded-session `watchdog`.
|
|
5
5
|
Author: Pierre Samson, Claude Opus
|
|
6
6
|
License: MIT
|
|
@@ -260,3 +260,56 @@ def test_2094_still_renders_extend_flip_kill():
|
|
|
260
260
|
assert [o["text"] for o in opts] == ["extend", "flip", "kill"]
|
|
261
261
|
assert [o["label"] for o in opts] == ["Extend", "Flip", "Kill"]
|
|
262
262
|
assert all(o["outcome"] == "pass" for o in opts)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
# Card note 74612, row #2140. Each option is 3-4 words and <= 24 characters.
|
|
266
|
+
TITLE_2140 = (
|
|
267
|
+
"Plan-review is the missing step in 23 of 26 blocked moves. "
|
|
268
|
+
"Keep it mandatory, make it optional, or allow a per-card waiver?"
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def test_2140_medium_phrases_render_three_taps():
|
|
273
|
+
pub = _load()
|
|
274
|
+
accept = "[commander] " + TITLE_2140 + " | PASS=the commander picks one"
|
|
275
|
+
rows = pub.commander_rows([_row(2140, accept)])
|
|
276
|
+
assert rows[0]["title"] == TITLE_2140
|
|
277
|
+
opts = pub.build_board._questions(rows)[0]["options"]
|
|
278
|
+
assert [o["text"] for o in opts] == [
|
|
279
|
+
"Keep it mandatory",
|
|
280
|
+
"make it optional",
|
|
281
|
+
"allow a per-card waiver",
|
|
282
|
+
]
|
|
283
|
+
assert [o["label"] for o in opts] == [
|
|
284
|
+
"Keep it mandatory",
|
|
285
|
+
"Make it optional",
|
|
286
|
+
"Allow a per-card waiver",
|
|
287
|
+
]
|
|
288
|
+
assert all(o["outcome"] == "pass" for o in opts)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
def test_three_part_stem_stays_display_only():
|
|
292
|
+
"""'hold it' and 'kill it' are two words, so this stem is not a choice list."""
|
|
293
|
+
pub = _load()
|
|
294
|
+
accept = "[commander] Should we ship it, hold it, or kill it? | PASS=the commander picks one"
|
|
295
|
+
rows = pub.commander_rows([_row(3, accept)])
|
|
296
|
+
_assert_display_only(pub.build_board._questions(rows)[0]["options"])
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
# Review #2144. The long branch turns these stems into taps at 0a7bc65.
|
|
300
|
+
STEMS_2144 = (
|
|
301
|
+
"Should we ship the release, hold the release, or kill the release?",
|
|
302
|
+
"Should we keep it mandatory, make it optional, or allow a waiver?",
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def test_2144_stem_titles_stay_display_only():
|
|
307
|
+
pub = _load()
|
|
308
|
+
for title in STEMS_2144:
|
|
309
|
+
accept = "[commander] " + title + " | PASS=the commander picks one"
|
|
310
|
+
rows = pub.commander_rows([_row(2144, accept)])
|
|
311
|
+
assert rows[0]["title"] == title
|
|
312
|
+
opts = pub.build_board._questions(rows)[0]["options"]
|
|
313
|
+
assert opts[0]["label"] == "Answer on the card", title
|
|
314
|
+
assert all(o["outcome"] is None for o in opts), title
|
|
315
|
+
assert [o["text"] for o in opts] != ["yes", "no"]
|
|
@@ -262,6 +262,55 @@ def test_identity_change_is_skipped_not_killed(tmp_path):
|
|
|
262
262
|
assert killed == []
|
|
263
263
|
|
|
264
264
|
|
|
265
|
+
def test_recycled_pid_between_scan_and_reap_is_skipped(tmp_path):
|
|
266
|
+
"""A pid recycled after the scan must not be signalled, nor its new children.
|
|
267
|
+
|
|
268
|
+
The scan classifies 5000 ORPHANED. Before reap, that pid is replaced by
|
|
269
|
+
sshd with a new starttime. reap_orphans must skip and send no signal.
|
|
270
|
+
"""
|
|
271
|
+
scope = "tmux-spawn-dead.scope"
|
|
272
|
+
orphan_cmd = (
|
|
273
|
+
"/home/u/.local/bin/claude daemon run --origin transient "
|
|
274
|
+
f"--spawned-by {json.dumps({'label': 'claude', 'pid': 700337})}"
|
|
275
|
+
)
|
|
276
|
+
_write_proc(
|
|
277
|
+
tmp_path, 5000, cmdline=orphan_cmd, ppid=1,
|
|
278
|
+
cgroup=f"0::/user.slice/{scope}",
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
def fake_run(cmd, **kwargs):
|
|
282
|
+
if cmd[:2] == ["tmux", "list-sessions"]:
|
|
283
|
+
return SimpleNamespace(returncode=0, stdout="lab-ovh\n", stderr="")
|
|
284
|
+
if cmd[:2] == ["tmux", "list-panes"]:
|
|
285
|
+
return SimpleNamespace(returncode=0, stdout="42\n", stderr="")
|
|
286
|
+
return SimpleNamespace(returncode=1, stdout="", stderr="")
|
|
287
|
+
|
|
288
|
+
result = scan_orphan_daemons(
|
|
289
|
+
proc_root=tmp_path, caller_pid=99999, run=fake_run,
|
|
290
|
+
)
|
|
291
|
+
assert len(result.orphans) == 1
|
|
292
|
+
assert result.orphans[0].pid == 5000
|
|
293
|
+
|
|
294
|
+
# Recycle the daemon pid. New starttime sits at stat field 22 (after[19]).
|
|
295
|
+
import shutil
|
|
296
|
+
shutil.rmtree(tmp_path / "5000")
|
|
297
|
+
_write_proc(tmp_path, 5000, cmdline="/usr/sbin/sshd -D", ppid=1)
|
|
298
|
+
(tmp_path / "5000" / "stat").write_text(
|
|
299
|
+
"5000 (sshd) S 1 " + ("0 " * 17) + "99\n"
|
|
300
|
+
)
|
|
301
|
+
_write_proc(tmp_path, 5001, cmdline="sshd: child", ppid=5000)
|
|
302
|
+
|
|
303
|
+
killed = []
|
|
304
|
+
reports = reap_orphans(
|
|
305
|
+
result, proc_root=tmp_path,
|
|
306
|
+
kill=lambda pid, sig: killed.append((pid, sig)),
|
|
307
|
+
wait_s=0.01, poll_s=0.001, sleeper=lambda _s: None,
|
|
308
|
+
)
|
|
309
|
+
assert killed == []
|
|
310
|
+
assert any(r.pid == 5000 and r.action == "skipped" for r in reports)
|
|
311
|
+
assert all(r.pid != 5001 for r in reports)
|
|
312
|
+
|
|
313
|
+
|
|
265
314
|
def test_reap_reports_every_pid_and_never_touches_live(tmp_path):
|
|
266
315
|
"""A4: every signalled pid is named. LIVE is not in the reap list."""
|
|
267
316
|
import json
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_opencode_plugin.py
RENAMED
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/install_postcompact_hook.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/commands/postcompact_hook_output.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-codex-outbox.timer.plist
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/launchd/swarph-watchdog.timer.plist
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/postcompact-recall.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-emit.sh
RENAMED
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/posttooluse-recall.sh
RENAMED
|
File without changes
|
{swarph_cli-0.72.22 → swarph_cli-0.72.24}/src/swarph_cli/payloads/postcompact/precompact-flag.sh
RENAMED
|
File without changes
|