firekeep-client 1.7.1__tar.gz → 1.7.2__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.
- {firekeep_client-1.7.1/firekeep_client.egg-info → firekeep_client-1.7.2}/PKG-INFO +1 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/__init__.py +1 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/cli.py +13 -9
- {firekeep_client-1.7.1 → firekeep_client-1.7.2/firekeep_client.egg-info}/PKG-INFO +1 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/pyproject.toml +1 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_hands.py +21 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_package.py +1 -1
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/LICENSE +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/NOTICE +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/README.md +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/__init__.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/base.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/claude.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/claude_desktop.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/codex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/generic.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/kiro.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/opencode.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/adapters/pi.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/autoupdate.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/background.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/backups.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/childenv.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/config_write.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/connect.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/contract/__init__.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/contract/matrix.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/decision/__init__.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/decision/board.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/decision/server.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/dexes.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/docdexsync.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/gateway.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooklog.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/__init__.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/__main__.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/_git.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/_mcp.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/destructive.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/post_tool.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/pre_tool.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/precompact.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/prompt.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/runbooks.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/session_end.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/session_start.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/hooks/stop.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/jobobject.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/join.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/joincode.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/maildexsync.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/migrate.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/nightshift.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/nightshiftdrain.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/pathenv.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/promptrecall.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/report.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/resolver.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/serverinit.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/serverupdate.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/shim.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/sidecar.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/signing.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/state.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/stdio.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/symdexindex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/transport.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/updater.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/wizard.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client/worktree_snapshot.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/SOURCES.txt +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/dependency_links.txt +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/entry_points.txt +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/requires.txt +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/top_level.txt +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/setup.cfg +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_attribution_headers.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_autoupdate.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_background.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bash_layer_retired.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_consent_pty.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_docdex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_maildex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_ps1.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_reinstall.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_sh.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_symdex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_bootstrap_venv_provisioning.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_ci_publishes_symdex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_backup.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_dex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_docdex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_doctor.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_doctor_generic.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_doctor_report.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_entry.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_generic_install.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_install.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_maildex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_onboarding.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_personal.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_uninstall.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_uninstall_generic.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_cli_update.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_config_migration.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_connect.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_decision_board_html.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_decision_bypass.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_decision_poll_ceiling.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_decision_registration.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_decision_server.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_dexes.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_docdexsync.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_docs_reference_client_kit.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_doctor_credential_expiry.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_doctor_embeddings.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_doctor_no_server.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_e2e_bootstrap.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_gateway.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_gateway_child_env.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_gateway_schema_slimming.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_gateway_toolset.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_generic_config.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_hooklog.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_import_boundary.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_init_self_enroll.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_init_stale_bundle.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_install_skill_contract.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_instruction_budget.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_jobobject.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_join.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_join_config_write.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_joincode.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_kit_smoke.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_maildexsync.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_make_release.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_memory_instructions.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_migration_entrypoints.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_nightshift.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_nightshiftdrain.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_pathenv.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_promptrecall.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_bootstrap_enums.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_capture.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_consent.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_consent_surfaces.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_flush_points.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_integration.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_schema.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_report_spool.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_resolver.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_resolver_bypass.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_resolver_single_connection.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_runbook_match_parity.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_runbook_state.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_scratch_ttl.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_serverinit.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_serverupdate.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_bridge.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_bypass.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_eof_exit.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_fail_loud.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_identity.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_recovery.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_shim_skeleton.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_sidecar.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_sidecar_robustness.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_signing.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_state.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_stdio_encoding.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_symdexindex.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_transport.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_transport_sse.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_twin_removed.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_updater.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_wizard.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_wizard_generic.py +0 -0
- {firekeep_client-1.7.1 → firekeep_client-1.7.2}/tests/test_worktree_snapshot.py +0 -0
|
@@ -159,10 +159,11 @@ EMPTY_REGISTRY_HINT = (
|
|
|
159
159
|
# §3.1), so this is the one place in the kit that names the wheel's source.
|
|
160
160
|
HANDS_WHEEL_SPEC = "firekeep-hands>=0.1,<0.2"
|
|
161
161
|
|
|
162
|
-
#
|
|
163
|
-
# `pypi-hands` trusted publisher
|
|
164
|
-
# firekeep-hands` could
|
|
165
|
-
|
|
162
|
+
# True since client 1.7.2: firekeep-hands 0.1.0 was published through the
|
|
163
|
+
# `pypi-hands` trusted publisher on 2026-10-06. While it was False, a bare
|
|
164
|
+
# `pip install firekeep-hands` could have resolved to whoever registered the
|
|
165
|
+
# name first, so `enable` refused without `--from`.
|
|
166
|
+
HANDS_PYPI_PUBLISHED = True
|
|
166
167
|
|
|
167
168
|
|
|
168
169
|
def _current_link(home: Path | None = None) -> Path:
|
|
@@ -2212,9 +2213,11 @@ def cmd_hands(args) -> int:
|
|
|
2212
2213
|
is a translator onto `firekeep_hands.cli.main`, imported lazily so a kit
|
|
2213
2214
|
without the wheel keeps every other command working.
|
|
2214
2215
|
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2216
|
+
Source: `--from` (a checkout dir, wheel path or pip spec) when given,
|
|
2217
|
+
otherwise the published PyPI wheel (`HANDS_WHEEL_SPEC`). PyPI squat guard
|
|
2218
|
+
(2026-09-05 ruling): while `HANDS_PYPI_PUBLISHED` is False, `enable`
|
|
2219
|
+
without `--from` refuses rather than `pip install`-ing a name a third
|
|
2220
|
+
party could still claim.
|
|
2218
2221
|
"""
|
|
2219
2222
|
action = getattr(args, "action", None) or "status"
|
|
2220
2223
|
manifest = dexes.KNOWN_DEXES["hands"]
|
|
@@ -2222,7 +2225,7 @@ def cmd_hands(args) -> int:
|
|
|
2222
2225
|
if action == "enable":
|
|
2223
2226
|
source = (getattr(args, "source", None) or "").strip()
|
|
2224
2227
|
if not source:
|
|
2225
|
-
if
|
|
2228
|
+
if HANDS_PYPI_PUBLISHED:
|
|
2226
2229
|
source = HANDS_WHEEL_SPEC
|
|
2227
2230
|
else:
|
|
2228
2231
|
print("firekeep: firekeep-hands is not yet published to PyPI — install from a "
|
|
@@ -3224,7 +3227,8 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
3224
3227
|
p_hands.add_argument("--from", dest="source", default=None,
|
|
3225
3228
|
help="wheel source for enable: a local checkout dir or a pip spec")
|
|
3226
3229
|
p_hands.add_argument("--pypi", action="store_true",
|
|
3227
|
-
help="enable: install the published wheel from PyPI (
|
|
3230
|
+
help="enable: install the published wheel from PyPI (the default "
|
|
3231
|
+
"without --from; kept for scripts that pass it)")
|
|
3228
3232
|
p_hands.add_argument("--no-autostart", action="store_true")
|
|
3229
3233
|
p_hands.add_argument("--purge", action="store_true", help="with disable: delete ~/.firekeep/hands")
|
|
3230
3234
|
p_hands.set_defaults(func=cmd_hands)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "firekeep-client"
|
|
7
|
-
version = "1.7.
|
|
7
|
+
version = "1.7.2"
|
|
8
8
|
description = "Client for Firekeep, the self-hosted operating layer for connected AI agents."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -35,7 +35,27 @@ def _args(**kw):
|
|
|
35
35
|
return types.SimpleNamespace(**base)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def
|
|
38
|
+
def test_firekeep_hands_is_published_on_pypi():
|
|
39
|
+
# Flipped in client 1.7.2: firekeep-hands 0.1.0 was published through the
|
|
40
|
+
# `pypi-hands` trusted publisher on 2026-10-06, byte-identical to the wheel
|
|
41
|
+
# on the dist host (sha256 7358bdda...). The squat guard below still
|
|
42
|
+
# protects any kit built with the flag off.
|
|
43
|
+
assert cli.HANDS_PYPI_PUBLISHED is True
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_bare_enable_installs_from_pypi_once_published(registry_home, monkeypatch):
|
|
47
|
+
calls = []
|
|
48
|
+
monkeypatch.setattr(cli, "_pip_install", lambda python, spec: calls.append(("pip", spec)))
|
|
49
|
+
monkeypatch.setattr(dexes, "is_installed", lambda m: True)
|
|
50
|
+
monkeypatch.setattr(cli, "_run_hands_broker", lambda argv: calls.append(("broker", tuple(argv))) or 0)
|
|
51
|
+
monkeypatch.setattr(cli, "HANDS_PYPI_PUBLISHED", True)
|
|
52
|
+
assert cli.cmd_hands(_args(action="enable")) == 0
|
|
53
|
+
assert calls == [("pip", cli.HANDS_WHEEL_SPEC), ("broker", ("install-autostart",))]
|
|
54
|
+
assert dexes.read_registry()["hands"]["source"] == "pypi"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_enable_with_no_source_and_pypi_not_published_refuses(registry_home, monkeypatch, capsys):
|
|
58
|
+
monkeypatch.setattr(cli, "HANDS_PYPI_PUBLISHED", False)
|
|
39
59
|
assert cli.cmd_hands(_args(action="enable")) == 2
|
|
40
60
|
err = capsys.readouterr().err
|
|
41
61
|
assert "not yet published to PyPI" in err
|
|
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
|
{firekeep_client-1.7.1 → firekeep_client-1.7.2}/firekeep_client.egg-info/dependency_links.txt
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
|
|
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
|