pilot-daemon 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pilot_daemon-0.9.0/.gitignore +0 -0
- pilot_daemon-0.9.0/PKG-INFO +128 -0
- pilot_daemon-0.9.0/README.md +38 -0
- pilot_daemon-0.9.0/benchmarks/react_latency.py +191 -0
- pilot_daemon-0.9.0/pilot/__init__.py +3 -0
- pilot_daemon-0.9.0/pilot/actions.py +1023 -0
- pilot_daemon-0.9.0/pilot/agents/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/agents/_code_preamble.py +78 -0
- pilot_daemon-0.9.0/pilot/agents/autonomous.py +388 -0
- pilot_daemon-0.9.0/pilot/agents/autonomous_healing.py +275 -0
- pilot_daemon-0.9.0/pilot/agents/background.py +272 -0
- pilot_daemon-0.9.0/pilot/agents/base_agent.py +253 -0
- pilot_daemon-0.9.0/pilot/agents/calendar_agent.py +223 -0
- pilot_daemon-0.9.0/pilot/agents/chain_planner.py +327 -0
- pilot_daemon-0.9.0/pilot/agents/circuit_breaker.py +108 -0
- pilot_daemon-0.9.0/pilot/agents/code_agent.py +118 -0
- pilot_daemon-0.9.0/pilot/agents/code_sanitizer.py +104 -0
- pilot_daemon-0.9.0/pilot/agents/comm_agent.py +107 -0
- pilot_daemon-0.9.0/pilot/agents/decomposer.py +208 -0
- pilot_daemon-0.9.0/pilot/agents/destructive_critic.py +366 -0
- pilot_daemon-0.9.0/pilot/agents/email_agent.py +608 -0
- pilot_daemon-0.9.0/pilot/agents/executor.py +2211 -0
- pilot_daemon-0.9.0/pilot/agents/forensics_agent.py +149 -0
- pilot_daemon-0.9.0/pilot/agents/git_agent.py +447 -0
- pilot_daemon-0.9.0/pilot/agents/monitor_agent.py +186 -0
- pilot_daemon-0.9.0/pilot/agents/multi_agent.py +241 -0
- pilot_daemon-0.9.0/pilot/agents/narrator.py +180 -0
- pilot_daemon-0.9.0/pilot/agents/orchestrator.py +741 -0
- pilot_daemon-0.9.0/pilot/agents/plan_differ.py +119 -0
- pilot_daemon-0.9.0/pilot/agents/planner.py +1572 -0
- pilot_daemon-0.9.0/pilot/agents/proactive.py +311 -0
- pilot_daemon-0.9.0/pilot/agents/prompt_improver.py +337 -0
- pilot_daemon-0.9.0/pilot/agents/reflector.py +260 -0
- pilot_daemon-0.9.0/pilot/agents/registry.py +85 -0
- pilot_daemon-0.9.0/pilot/agents/rss_agent.py +261 -0
- pilot_daemon-0.9.0/pilot/agents/sandbox.py +434 -0
- pilot_daemon-0.9.0/pilot/agents/screen_vision.py +633 -0
- pilot_daemon-0.9.0/pilot/agents/self_heal.py +270 -0
- pilot_daemon-0.9.0/pilot/agents/semantic_search_agent.py +140 -0
- pilot_daemon-0.9.0/pilot/agents/ssh_agent.py +304 -0
- pilot_daemon-0.9.0/pilot/agents/subconscious.py +418 -0
- pilot_daemon-0.9.0/pilot/agents/system_agent.py +214 -0
- pilot_daemon-0.9.0/pilot/agents/threat_containment.py +585 -0
- pilot_daemon-0.9.0/pilot/agents/user_supervision.py +181 -0
- pilot_daemon-0.9.0/pilot/agents/verifier.py +194 -0
- pilot_daemon-0.9.0/pilot/agents/voice_gesture_workflow.py +334 -0
- pilot_daemon-0.9.0/pilot/agents/web_agent.py +136 -0
- pilot_daemon-0.9.0/pilot/changelog.py +197 -0
- pilot_daemon-0.9.0/pilot/cognitive/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/cognitive/ambient_intelligence.py +417 -0
- pilot_daemon-0.9.0/pilot/cognitive/attention_scorer.py +273 -0
- pilot_daemon-0.9.0/pilot/cognitive/biometric_loop.py +447 -0
- pilot_daemon-0.9.0/pilot/cognitive/clipboard_manager.py +38 -0
- pilot_daemon-0.9.0/pilot/cognitive/cognitive_engine.py +489 -0
- pilot_daemon-0.9.0/pilot/cognitive/cognitive_handoff.py +461 -0
- pilot_daemon-0.9.0/pilot/cognitive/cognitive_offload.py +397 -0
- pilot_daemon-0.9.0/pilot/cognitive/evolving_persona.py +499 -0
- pilot_daemon-0.9.0/pilot/cognitive/hub.py +428 -0
- pilot_daemon-0.9.0/pilot/cognitive/intent_predictor.py +335 -0
- pilot_daemon-0.9.0/pilot/cognitive/neural_bridge.py +560 -0
- pilot_daemon-0.9.0/pilot/cognitive/quantum_cognitive.py +379 -0
- pilot_daemon-0.9.0/pilot/cognitive/stress_gate.py +265 -0
- pilot_daemon-0.9.0/pilot/config.py +1024 -0
- pilot_daemon-0.9.0/pilot/db/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/db/redis_adapter.py +210 -0
- pilot_daemon-0.9.0/pilot/db/sqlite_pool.py +147 -0
- pilot_daemon-0.9.0/pilot/export_logs.py +55 -0
- pilot_daemon-0.9.0/pilot/logger.py +19 -0
- pilot_daemon-0.9.0/pilot/memory/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/memory/context_compressor.py +198 -0
- pilot_daemon-0.9.0/pilot/memory/semantic.py +43 -0
- pilot_daemon-0.9.0/pilot/memory/sliding_window.py +160 -0
- pilot_daemon-0.9.0/pilot/memory/store.py +476 -0
- pilot_daemon-0.9.0/pilot/memory/workspace_index.py +229 -0
- pilot_daemon-0.9.0/pilot/models/CACHE.md +98 -0
- pilot_daemon-0.9.0/pilot/models/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/models/budget_tracker.py +341 -0
- pilot_daemon-0.9.0/pilot/models/cache.py +291 -0
- pilot_daemon-0.9.0/pilot/models/cloud.py +334 -0
- pilot_daemon-0.9.0/pilot/models/gpu_utils.py +235 -0
- pilot_daemon-0.9.0/pilot/models/llamacpp.py +100 -0
- pilot_daemon-0.9.0/pilot/models/ollama.py +198 -0
- pilot_daemon-0.9.0/pilot/models/rate_limiter.py +81 -0
- pilot_daemon-0.9.0/pilot/models/router.py +529 -0
- pilot_daemon-0.9.0/pilot/multimodal/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/multimodal/fusion.py +585 -0
- pilot_daemon-0.9.0/pilot/network/__init__.py +14 -0
- pilot_daemon-0.9.0/pilot/network/collab_executor.py +285 -0
- pilot_daemon-0.9.0/pilot/network/mesh.py +373 -0
- pilot_daemon-0.9.0/pilot/network/peer_connection.py +215 -0
- pilot_daemon-0.9.0/pilot/network/peer_discovery.py +262 -0
- pilot_daemon-0.9.0/pilot/network/skill_sync.py +129 -0
- pilot_daemon-0.9.0/pilot/plugins/__init__.py +534 -0
- pilot_daemon-0.9.0/pilot/plugins/developer/developer_plugin.py +154 -0
- pilot_daemon-0.9.0/pilot/plugins/developer/manifest.json +59 -0
- pilot_daemon-0.9.0/pilot/plugins/homeassistant/homeassistant_plugin.py +223 -0
- pilot_daemon-0.9.0/pilot/plugins/homeassistant/manifest.json +75 -0
- pilot_daemon-0.9.0/pilot/plugins/media/manifest.json +75 -0
- pilot_daemon-0.9.0/pilot/plugins/media/media_plugin.py +264 -0
- pilot_daemon-0.9.0/pilot/plugins/wasm_runtime.py +216 -0
- pilot_daemon-0.9.0/pilot/reasoning/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/reasoning/events.py +392 -0
- pilot_daemon-0.9.0/pilot/security/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/security/audit.py +135 -0
- pilot_daemon-0.9.0/pilot/security/gateway.py +437 -0
- pilot_daemon-0.9.0/pilot/security/gateway_audit.py +372 -0
- pilot_daemon-0.9.0/pilot/security/permission_audit.py +311 -0
- pilot_daemon-0.9.0/pilot/security/permissions.py +88 -0
- pilot_daemon-0.9.0/pilot/security/risk_gate.py +89 -0
- pilot_daemon-0.9.0/pilot/security/risk_gate_weights.npz +0 -0
- pilot_daemon-0.9.0/pilot/security/risk_model.py +180 -0
- pilot_daemon-0.9.0/pilot/security/risk_observation.py +90 -0
- pilot_daemon-0.9.0/pilot/security/risk_patterns.py +54 -0
- pilot_daemon-0.9.0/pilot/security/risk_safety.py +107 -0
- pilot_daemon-0.9.0/pilot/security/sandbox.py +222 -0
- pilot_daemon-0.9.0/pilot/security/sanitizer.py +317 -0
- pilot_daemon-0.9.0/pilot/security/validator.py +332 -0
- pilot_daemon-0.9.0/pilot/security/vault.py +282 -0
- pilot_daemon-0.9.0/pilot/server.py +5337 -0
- pilot_daemon-0.9.0/pilot/skills/__init__.py +11 -0
- pilot_daemon-0.9.0/pilot/skills/base.py +48 -0
- pilot_daemon-0.9.0/pilot/skills/bundled/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/skills/bundled/example_echo.py +31 -0
- pilot_daemon-0.9.0/pilot/skills/loader.py +191 -0
- pilot_daemon-0.9.0/pilot/swarm/__init__.py +17 -0
- pilot_daemon-0.9.0/pilot/swarm/swarm_manager.py +279 -0
- pilot_daemon-0.9.0/pilot/swarm/swarm_router_agent.py +169 -0
- pilot_daemon-0.9.0/pilot/system/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/system/api_client.py +316 -0
- pilot_daemon-0.9.0/pilot/system/apt.py +68 -0
- pilot_daemon-0.9.0/pilot/system/browser.py +743 -0
- pilot_daemon-0.9.0/pilot/system/browser_backend.py +52 -0
- pilot_daemon-0.9.0/pilot/system/clipboard.py +77 -0
- pilot_daemon-0.9.0/pilot/system/code_exec.py +354 -0
- pilot_daemon-0.9.0/pilot/system/context.py +249 -0
- pilot_daemon-0.9.0/pilot/system/daemon_manager.py +233 -0
- pilot_daemon-0.9.0/pilot/system/dbus_client.py +95 -0
- pilot_daemon-0.9.0/pilot/system/dom_diff.py +593 -0
- pilot_daemon-0.9.0/pilot/system/download.py +54 -0
- pilot_daemon-0.9.0/pilot/system/environment.py +83 -0
- pilot_daemon-0.9.0/pilot/system/file_intel.py +388 -0
- pilot_daemon-0.9.0/pilot/system/filesystem.py +241 -0
- pilot_daemon-0.9.0/pilot/system/gesture.py +232 -0
- pilot_daemon-0.9.0/pilot/system/git_conflict.py +151 -0
- pilot_daemon-0.9.0/pilot/system/gnome.py +66 -0
- pilot_daemon-0.9.0/pilot/system/hand_landmarker.task +0 -0
- pilot_daemon-0.9.0/pilot/system/http_client.py +47 -0
- pilot_daemon-0.9.0/pilot/system/input_control.py +218 -0
- pilot_daemon-0.9.0/pilot/system/input_hook.py +163 -0
- pilot_daemon-0.9.0/pilot/system/linux_syscall_guard.py +189 -0
- pilot_daemon-0.9.0/pilot/system/multimodal.py +133 -0
- pilot_daemon-0.9.0/pilot/system/network.py +99 -0
- pilot_daemon-0.9.0/pilot/system/package_mgr.py +160 -0
- pilot_daemon-0.9.0/pilot/system/platform_detect.py +135 -0
- pilot_daemon-0.9.0/pilot/system/plugins.py +338 -0
- pilot_daemon-0.9.0/pilot/system/pocket_tts.py +106 -0
- pilot_daemon-0.9.0/pilot/system/power.py +105 -0
- pilot_daemon-0.9.0/pilot/system/processes.py +146 -0
- pilot_daemon-0.9.0/pilot/system/pty_session.py +238 -0
- pilot_daemon-0.9.0/pilot/system/sandbox_exec.py +594 -0
- pilot_daemon-0.9.0/pilot/system/scheduler.py +174 -0
- pilot_daemon-0.9.0/pilot/system/screen.py +136 -0
- pilot_daemon-0.9.0/pilot/system/snapshots.py +201 -0
- pilot_daemon-0.9.0/pilot/system/sysinfo.py +241 -0
- pilot_daemon-0.9.0/pilot/system/systemctl.py +79 -0
- pilot_daemon-0.9.0/pilot/system/triggers.py +366 -0
- pilot_daemon-0.9.0/pilot/system/vad.py +108 -0
- pilot_daemon-0.9.0/pilot/system/vision.py +1103 -0
- pilot_daemon-0.9.0/pilot/system/voice.py +961 -0
- pilot_daemon-0.9.0/pilot/system/voice_calibration.py +210 -0
- pilot_daemon-0.9.0/pilot/system/volume.py +102 -0
- pilot_daemon-0.9.0/pilot/system/window_mgr.py +196 -0
- pilot_daemon-0.9.0/pilot/testing/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/testing/replay.py +357 -0
- pilot_daemon-0.9.0/pilot/tools/__init__.py +1 -0
- pilot_daemon-0.9.0/pilot/tools/forensics/__init__.py +18 -0
- pilot_daemon-0.9.0/pilot/tools/forensics/correlate_sessions.py +35 -0
- pilot_daemon-0.9.0/pilot/tools/forensics/detect_spikes.py +127 -0
- pilot_daemon-0.9.0/pilot/tools/forensics/extract_auth_events.py +88 -0
- pilot_daemon-0.9.0/pilot/tools/forensics/parse_syslog.py +140 -0
- pilot_daemon-0.9.0/pilot/workflows/__init__.py +0 -0
- pilot_daemon-0.9.0/pilot/workflows/checkpoints.py +252 -0
- pilot_daemon-0.9.0/pilot/workflows/voice_gesture_workflows.py +399 -0
- pilot_daemon-0.9.0/pilot-cli.py +252 -0
- pilot_daemon-0.9.0/pyproject.toml +139 -0
- pilot_daemon-0.9.0/requirements-lock.txt +616 -0
- pilot_daemon-0.9.0/ruff.toml +34 -0
- pilot_daemon-0.9.0/scripts/collect_risk_training_data.py +206 -0
- pilot_daemon-0.9.0/scripts/risk_dataset.jsonl +4200 -0
- pilot_daemon-0.9.0/scripts/train_risk_gate.py +163 -0
- pilot_daemon-0.9.0/test_8bit.py +14 -0
- pilot_daemon-0.9.0/test_fp16.py +17 -0
- pilot_daemon-0.9.0/test_hf.py +16 -0
- pilot_daemon-0.9.0/tests/__init__.py +0 -0
- pilot_daemon-0.9.0/tests/conftest.py +151 -0
- pilot_daemon-0.9.0/tests/demo_cache.py +291 -0
- pilot_daemon-0.9.0/tests/processes_test.py +335 -0
- pilot_daemon-0.9.0/tests/test_abort_rpc.py +138 -0
- pilot_daemon-0.9.0/tests/test_action_permissions.py +111 -0
- pilot_daemon-0.9.0/tests/test_async_audit_logger.py +52 -0
- pilot_daemon-0.9.0/tests/test_autonomous_daemon_speech.py +88 -0
- pilot_daemon-0.9.0/tests/test_autonomous_healing.py +228 -0
- pilot_daemon-0.9.0/tests/test_broadcast_notification.py +164 -0
- pilot_daemon-0.9.0/tests/test_budget_tracker.py +212 -0
- pilot_daemon-0.9.0/tests/test_budget_tracker_pool.py +45 -0
- pilot_daemon-0.9.0/tests/test_budget_tracker_tasks.py +138 -0
- pilot_daemon-0.9.0/tests/test_calendar_agent.py +81 -0
- pilot_daemon-0.9.0/tests/test_circuit_breaker.py +269 -0
- pilot_daemon-0.9.0/tests/test_cloud_client.py +120 -0
- pilot_daemon-0.9.0/tests/test_cognitive_engine.py +260 -0
- pilot_daemon-0.9.0/tests/test_config_paths.py +174 -0
- pilot_daemon-0.9.0/tests/test_context_compressor.py +163 -0
- pilot_daemon-0.9.0/tests/test_continuous_recorder.py +101 -0
- pilot_daemon-0.9.0/tests/test_cursor_handlers.py +68 -0
- pilot_daemon-0.9.0/tests/test_daemon_manager.py +162 -0
- pilot_daemon-0.9.0/tests/test_data_dir_validation.py +60 -0
- pilot_daemon-0.9.0/tests/test_decomposer.py +565 -0
- pilot_daemon-0.9.0/tests/test_destructive_critic.py +121 -0
- pilot_daemon-0.9.0/tests/test_deterministic_replay.py +132 -0
- pilot_daemon-0.9.0/tests/test_directory_summary.py +52 -0
- pilot_daemon-0.9.0/tests/test_dom_diff.py +652 -0
- pilot_daemon-0.9.0/tests/test_email_agent_mocked.py +109 -0
- pilot_daemon-0.9.0/tests/test_execute_tracked.py +194 -0
- pilot_daemon-0.9.0/tests/test_executor_batch_attribution.py +78 -0
- pilot_daemon-0.9.0/tests/test_executor_daemon_speech.py +121 -0
- pilot_daemon-0.9.0/tests/test_executor_narrator_wiring.py +249 -0
- pilot_daemon-0.9.0/tests/test_firecracker_sandbox.py +63 -0
- pilot_daemon-0.9.0/tests/test_fusion.py +255 -0
- pilot_daemon-0.9.0/tests/test_gateway_audit.py +183 -0
- pilot_daemon-0.9.0/tests/test_gateway_integration.py +158 -0
- pilot_daemon-0.9.0/tests/test_gateway_policy.py +172 -0
- pilot_daemon-0.9.0/tests/test_gateway_rpc_handlers.py +132 -0
- pilot_daemon-0.9.0/tests/test_gaze_event_rpc.py +51 -0
- pilot_daemon-0.9.0/tests/test_gaze_tracking_config.py +18 -0
- pilot_daemon-0.9.0/tests/test_gesture_workflow_config.py +53 -0
- pilot_daemon-0.9.0/tests/test_git_agent.py +210 -0
- pilot_daemon-0.9.0/tests/test_health_ready.py +178 -0
- pilot_daemon-0.9.0/tests/test_input_hook_buffer.py +142 -0
- pilot_daemon-0.9.0/tests/test_ipc_integration.py +251 -0
- pilot_daemon-0.9.0/tests/test_linux_syscall_guard.py +83 -0
- pilot_daemon-0.9.0/tests/test_memory_config.py +38 -0
- pilot_daemon-0.9.0/tests/test_memory_store.py +433 -0
- pilot_daemon-0.9.0/tests/test_narration_config.py +34 -0
- pilot_daemon-0.9.0/tests/test_narration_rpc.py +55 -0
- pilot_daemon-0.9.0/tests/test_narrator.py +221 -0
- pilot_daemon-0.9.0/tests/test_orchestrator_budget.py +179 -0
- pilot_daemon-0.9.0/tests/test_orchestrator_scope_override.py +72 -0
- pilot_daemon-0.9.0/tests/test_permission_escalation_audit.py +86 -0
- pilot_daemon-0.9.0/tests/test_plan_differ.py +139 -0
- pilot_daemon-0.9.0/tests/test_plugin_signatures.py +167 -0
- pilot_daemon-0.9.0/tests/test_pocket_tts.py +165 -0
- pilot_daemon-0.9.0/tests/test_proxy_config.py +55 -0
- pilot_daemon-0.9.0/tests/test_pty_session.py +140 -0
- pilot_daemon-0.9.0/tests/test_rate_limiter.py +148 -0
- pilot_daemon-0.9.0/tests/test_react_latency.py +59 -0
- pilot_daemon-0.9.0/tests/test_redis_adapter.py +300 -0
- pilot_daemon-0.9.0/tests/test_risk_gate.py +47 -0
- pilot_daemon-0.9.0/tests/test_risk_model.py +97 -0
- pilot_daemon-0.9.0/tests/test_risk_observation.py +23 -0
- pilot_daemon-0.9.0/tests/test_risk_patterns.py +68 -0
- pilot_daemon-0.9.0/tests/test_risk_safety.py +83 -0
- pilot_daemon-0.9.0/tests/test_risk_score_wiring.py +78 -0
- pilot_daemon-0.9.0/tests/test_router_budget_gating.py +109 -0
- pilot_daemon-0.9.0/tests/test_rss_agent.py +152 -0
- pilot_daemon-0.9.0/tests/test_sandbox_gateway_impacts.py +119 -0
- pilot_daemon-0.9.0/tests/test_sandbox_target_assessment.py +163 -0
- pilot_daemon-0.9.0/tests/test_sanitizer_security.py +54 -0
- pilot_daemon-0.9.0/tests/test_screen_vision_linux.py +125 -0
- pilot_daemon-0.9.0/tests/test_screen_vision_timeout.py +260 -0
- pilot_daemon-0.9.0/tests/test_self_healing_config.py +48 -0
- pilot_daemon-0.9.0/tests/test_self_healing_rpc.py +51 -0
- pilot_daemon-0.9.0/tests/test_sqlite_pool.py +104 -0
- pilot_daemon-0.9.0/tests/test_ssh_agent_schema.py +29 -0
- pilot_daemon-0.9.0/tests/test_stress_gate.py +88 -0
- pilot_daemon-0.9.0/tests/test_supervision_config.py +59 -0
- pilot_daemon-0.9.0/tests/test_supervision_rpc.py +216 -0
- pilot_daemon-0.9.0/tests/test_sysinfo.py +46 -0
- pilot_daemon-0.9.0/tests/test_threat_containment.py +484 -0
- pilot_daemon-0.9.0/tests/test_user_supervision.py +327 -0
- pilot_daemon-0.9.0/tests/test_utils.py +454 -0
- pilot_daemon-0.9.0/tests/test_vad.py +87 -0
- pilot_daemon-0.9.0/tests/test_validator_security.py +56 -0
- pilot_daemon-0.9.0/tests/test_vault_machine_id.py +192 -0
- pilot_daemon-0.9.0/tests/test_vision_backend_config.py +18 -0
- pilot_daemon-0.9.0/tests/test_voice_barge_in.py +105 -0
- pilot_daemon-0.9.0/tests/test_voice_calibration.py +148 -0
- pilot_daemon-0.9.0/tests/test_voice_command_dispatch.py +106 -0
- pilot_daemon-0.9.0/tests/test_voice_gesture_workflow_engine.py +416 -0
- pilot_daemon-0.9.0/tests/test_voice_gesture_workflow_rpc_handlers.py +217 -0
- pilot_daemon-0.9.0/tests/test_voice_gesture_workflow_store.py +191 -0
- pilot_daemon-0.9.0/tests/test_voice_pocket_tts_dispatch.py +119 -0
- pilot_daemon-0.9.0/tests/test_voice_supersede.py +137 -0
- pilot_daemon-0.9.0/tests/test_voice_vad_config.py +46 -0
- pilot_daemon-0.9.0/tests/test_voice_whisper_cache.py +66 -0
- pilot_daemon-0.9.0/tests/test_wasm_plugin.py +512 -0
- pilot_daemon-0.9.0/tests/test_workflow_checkpoints.py +130 -0
- pilot_daemon-0.9.0/tests/test_workspace_index.py +113 -0
|
Binary file
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pilot-daemon
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: AI-powered autonomous computer agent — full system control
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Requires-Dist: aiofiles>=24.1
|
|
8
|
+
Requires-Dist: aiosqlite>=0.20
|
|
9
|
+
Requires-Dist: caldav>=1.0.0
|
|
10
|
+
Requires-Dist: cryptography>=43.0
|
|
11
|
+
Requires-Dist: httpx>=0.27
|
|
12
|
+
Requires-Dist: icalendar>=5.0.0
|
|
13
|
+
Requires-Dist: keyring>=25.0
|
|
14
|
+
Requires-Dist: numpy==2.2.6
|
|
15
|
+
Requires-Dist: psutil>=5.9
|
|
16
|
+
Requires-Dist: pydantic>=2.6
|
|
17
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
18
|
+
Requires-Dist: tiktoken>=0.7
|
|
19
|
+
Requires-Dist: tomli-w>=1.0
|
|
20
|
+
Requires-Dist: tomli>=2.0; python_version < '3.12'
|
|
21
|
+
Requires-Dist: websockets>=13.0
|
|
22
|
+
Provides-Extra: all
|
|
23
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == 'all'
|
|
24
|
+
Requires-Dist: chromadb>=0.5; extra == 'all'
|
|
25
|
+
Requires-Dist: easyocr>=1.7; extra == 'all'
|
|
26
|
+
Requires-Dist: faiss-cpu>=1.7.0; extra == 'all'
|
|
27
|
+
Requires-Dist: mediapipe>=0.10.11; extra == 'all'
|
|
28
|
+
Requires-Dist: openai-whisper>=20231117; extra == 'all'
|
|
29
|
+
Requires-Dist: opencv-python>=4.9.0.80; extra == 'all'
|
|
30
|
+
Requires-Dist: openpyxl>=3.1; extra == 'all'
|
|
31
|
+
Requires-Dist: paramiko>=3.4; extra == 'all'
|
|
32
|
+
Requires-Dist: pillow>=10.0; extra == 'all'
|
|
33
|
+
Requires-Dist: playwright>=1.40; extra == 'all'
|
|
34
|
+
Requires-Dist: pocket-tts>=1.0; extra == 'all'
|
|
35
|
+
Requires-Dist: pyautogui>=0.9; extra == 'all'
|
|
36
|
+
Requires-Dist: pynput>=1.7; extra == 'all'
|
|
37
|
+
Requires-Dist: pypdf>=4.0; extra == 'all'
|
|
38
|
+
Requires-Dist: pyperclip>=1.8; extra == 'all'
|
|
39
|
+
Requires-Dist: python-docx>=1.0; extra == 'all'
|
|
40
|
+
Requires-Dist: secretstorage>=3.3; (sys_platform == 'linux') and extra == 'all'
|
|
41
|
+
Requires-Dist: sentence-transformers>=2.2.0; extra == 'all'
|
|
42
|
+
Requires-Dist: sounddevice>=0.4; extra == 'all'
|
|
43
|
+
Requires-Dist: wasmtime>=18.0; extra == 'all'
|
|
44
|
+
Requires-Dist: zeroconf>=0.131; extra == 'all'
|
|
45
|
+
Provides-Extra: automation
|
|
46
|
+
Requires-Dist: pillow>=10.0; extra == 'automation'
|
|
47
|
+
Requires-Dist: pyautogui>=0.9; extra == 'automation'
|
|
48
|
+
Requires-Dist: pyperclip>=1.8; extra == 'automation'
|
|
49
|
+
Provides-Extra: browser
|
|
50
|
+
Requires-Dist: playwright>=1.40; extra == 'browser'
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
|
|
53
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
54
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
55
|
+
Provides-Extra: documents
|
|
56
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == 'documents'
|
|
57
|
+
Requires-Dist: openpyxl>=3.1; extra == 'documents'
|
|
58
|
+
Requires-Dist: pypdf>=4.0; extra == 'documents'
|
|
59
|
+
Requires-Dist: python-docx>=1.0; extra == 'documents'
|
|
60
|
+
Provides-Extra: full
|
|
61
|
+
Requires-Dist: chromadb>=0.5; extra == 'full'
|
|
62
|
+
Requires-Dist: faiss-cpu>=1.7.0; extra == 'full'
|
|
63
|
+
Requires-Dist: pyperclip>=1.8; extra == 'full'
|
|
64
|
+
Requires-Dist: secretstorage>=3.3; (sys_platform == 'linux') and extra == 'full'
|
|
65
|
+
Requires-Dist: sentence-transformers>=2.2.0; extra == 'full'
|
|
66
|
+
Requires-Dist: zeroconf>=0.131; extra == 'full'
|
|
67
|
+
Provides-Extra: llamacpp
|
|
68
|
+
Requires-Dist: llama-cpp-python>=0.3; extra == 'llamacpp'
|
|
69
|
+
Requires-Dist: pynvml>=11.5; extra == 'llamacpp'
|
|
70
|
+
Provides-Extra: network
|
|
71
|
+
Requires-Dist: zeroconf>=0.131; extra == 'network'
|
|
72
|
+
Provides-Extra: pty
|
|
73
|
+
Requires-Dist: ptyprocess>=0.7; (sys_platform != 'win32') and extra == 'pty'
|
|
74
|
+
Provides-Extra: ssh
|
|
75
|
+
Requires-Dist: paramiko>=3.4; extra == 'ssh'
|
|
76
|
+
Provides-Extra: supervision
|
|
77
|
+
Requires-Dist: pynput>=1.7; extra == 'supervision'
|
|
78
|
+
Provides-Extra: vision
|
|
79
|
+
Requires-Dist: easyocr>=1.7; extra == 'vision'
|
|
80
|
+
Requires-Dist: mediapipe>=0.10.11; extra == 'vision'
|
|
81
|
+
Requires-Dist: opencv-python>=4.9.0.80; extra == 'vision'
|
|
82
|
+
Requires-Dist: pillow>=10.0; extra == 'vision'
|
|
83
|
+
Provides-Extra: voice
|
|
84
|
+
Requires-Dist: openai-whisper>=20231117; extra == 'voice'
|
|
85
|
+
Requires-Dist: pocket-tts>=1.0; extra == 'voice'
|
|
86
|
+
Requires-Dist: sounddevice>=0.4; extra == 'voice'
|
|
87
|
+
Provides-Extra: wasm
|
|
88
|
+
Requires-Dist: wasmtime>=18.0; extra == 'wasm'
|
|
89
|
+
Description-Content-Type: text/markdown
|
|
90
|
+
|
|
91
|
+
# Heliox OS Daemon
|
|
92
|
+
|
|
93
|
+
Python backend for the Heliox OS AI System Control Agent. Provides the agent system (Planner, Executor, Verifier, Code Sanitizer), security layer, and system interface modules.
|
|
94
|
+
|
|
95
|
+
See the [main README](../README.md) for full project documentation.
|
|
96
|
+
|
|
97
|
+
## SSH Agent (Remote Host Execution)
|
|
98
|
+
|
|
99
|
+
Heliox OS includes an optional `SshAgent` that can execute `ssh_command` / `ssh_script` actions on **pre-configured** remote hosts using Paramiko.
|
|
100
|
+
|
|
101
|
+
### Install
|
|
102
|
+
|
|
103
|
+
Install the optional SSH dependency set:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
pip install "pilot-daemon[ssh]"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Configure allowed hosts
|
|
110
|
+
|
|
111
|
+
In your `config.toml`, enable SSH and define allowed destinations (aliases only):
|
|
112
|
+
|
|
113
|
+
```toml
|
|
114
|
+
[ssh]
|
|
115
|
+
enabled = true
|
|
116
|
+
connect_timeout_seconds = 10
|
|
117
|
+
allowed_hosts = [
|
|
118
|
+
{ name = "prod-1", hostname = "10.0.0.10", port = 22, username = "ubuntu", private_key_provider = "ssh_prod_1_key", strict_host_key_checking = true },
|
|
119
|
+
]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Store SSH keys in the KeyVault
|
|
123
|
+
|
|
124
|
+
Store the private key PEM in the encrypted vault using the JSON-RPC method `store_api_key` with `provider=<private_key_provider>`.
|
|
125
|
+
|
|
126
|
+
Notes:
|
|
127
|
+
- The vault stores arbitrary provider→secret strings; SSH keys are treated the same as API keys.
|
|
128
|
+
- Keys/passphrases are never logged and are only decrypted at call time.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Heliox OS Daemon
|
|
2
|
+
|
|
3
|
+
Python backend for the Heliox OS AI System Control Agent. Provides the agent system (Planner, Executor, Verifier, Code Sanitizer), security layer, and system interface modules.
|
|
4
|
+
|
|
5
|
+
See the [main README](../README.md) for full project documentation.
|
|
6
|
+
|
|
7
|
+
## SSH Agent (Remote Host Execution)
|
|
8
|
+
|
|
9
|
+
Heliox OS includes an optional `SshAgent` that can execute `ssh_command` / `ssh_script` actions on **pre-configured** remote hosts using Paramiko.
|
|
10
|
+
|
|
11
|
+
### Install
|
|
12
|
+
|
|
13
|
+
Install the optional SSH dependency set:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pip install "pilot-daemon[ssh]"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Configure allowed hosts
|
|
20
|
+
|
|
21
|
+
In your `config.toml`, enable SSH and define allowed destinations (aliases only):
|
|
22
|
+
|
|
23
|
+
```toml
|
|
24
|
+
[ssh]
|
|
25
|
+
enabled = true
|
|
26
|
+
connect_timeout_seconds = 10
|
|
27
|
+
allowed_hosts = [
|
|
28
|
+
{ name = "prod-1", hostname = "10.0.0.10", port = 22, username = "ubuntu", private_key_provider = "ssh_prod_1_key", strict_host_key_checking = true },
|
|
29
|
+
]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Store SSH keys in the KeyVault
|
|
33
|
+
|
|
34
|
+
Store the private key PEM in the encrypted vault using the JSON-RPC method `store_api_key` with `provider=<private_key_provider>`.
|
|
35
|
+
|
|
36
|
+
Notes:
|
|
37
|
+
- The vault stores arbitrary provider→secret strings; SSH keys are treated the same as API keys.
|
|
38
|
+
- Keys/passphrases are never logged and are only decrypted at call time.
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"""Benchmark the non-LLM ReAct latency for a simple CPU usage request.
|
|
2
|
+
|
|
3
|
+
Run from ``daemon``:
|
|
4
|
+
python benchmarks/react_latency.py --iterations 10 --profile
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
import asyncio
|
|
11
|
+
import cProfile
|
|
12
|
+
import io
|
|
13
|
+
import os
|
|
14
|
+
import pstats
|
|
15
|
+
import statistics
|
|
16
|
+
import time
|
|
17
|
+
from dataclasses import dataclass
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
BENCH_STATE_DIR = Path(__file__).resolve().parent / ".bench-state"
|
|
22
|
+
BENCH_STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
23
|
+
os.environ.setdefault("XDG_CONFIG_HOME", str(BENCH_STATE_DIR / "config"))
|
|
24
|
+
os.environ.setdefault("XDG_DATA_HOME", str(BENCH_STATE_DIR / "data"))
|
|
25
|
+
os.environ.setdefault("XDG_STATE_HOME", str(BENCH_STATE_DIR / "state"))
|
|
26
|
+
os.environ.setdefault("XDG_RUNTIME_DIR", str(BENCH_STATE_DIR / "runtime"))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
CPU_PLAN_JSON = """{
|
|
30
|
+
"explanation": "Check current CPU usage.",
|
|
31
|
+
"actions": [
|
|
32
|
+
{
|
|
33
|
+
"action_type": "cpu_usage",
|
|
34
|
+
"target": "cpu",
|
|
35
|
+
"parameters": {},
|
|
36
|
+
"requires_root": false,
|
|
37
|
+
"destructive": false,
|
|
38
|
+
"reversible": true,
|
|
39
|
+
"rollback_action": null,
|
|
40
|
+
"use_previous_output": false
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class StubModelRouter:
|
|
47
|
+
def __init__(self) -> None:
|
|
48
|
+
self.generate_calls = 0
|
|
49
|
+
|
|
50
|
+
async def generate(self, *args: Any, **kwargs: Any) -> str: # noqa: ARG002
|
|
51
|
+
self.generate_calls += 1
|
|
52
|
+
return CPU_PLAN_JSON
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class FakeWebSocket:
|
|
56
|
+
def __init__(self) -> None:
|
|
57
|
+
self.messages: list[str] = []
|
|
58
|
+
|
|
59
|
+
async def send(self, message: str) -> None:
|
|
60
|
+
self.messages.append(message)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class NoopReasoning:
|
|
64
|
+
def reset(self) -> None:
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class NoopReflector:
|
|
69
|
+
async def get_improvement_context(self, query: str) -> str: # noqa: ARG002
|
|
70
|
+
return ""
|
|
71
|
+
|
|
72
|
+
async def reflect(self, *args: Any, **kwargs: Any) -> dict[str, Any]: # noqa: ARG002
|
|
73
|
+
return {}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class NoopMemory:
|
|
77
|
+
async def record(self, *args: Any, **kwargs: Any) -> None: # noqa: ARG002
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@dataclass
|
|
82
|
+
class BenchmarkHarness:
|
|
83
|
+
server: Any
|
|
84
|
+
model: StubModelRouter
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
async def build_harness() -> BenchmarkHarness:
|
|
88
|
+
from pilot.agents.executor import Executor
|
|
89
|
+
from pilot.agents.multi_agent import MultiAgentRouter
|
|
90
|
+
from pilot.agents.orchestrator import AgentOrchestrator
|
|
91
|
+
from pilot.agents.planner import Planner
|
|
92
|
+
from pilot.agents.system_agent import SystemAgent
|
|
93
|
+
from pilot.agents.verifier import Verifier
|
|
94
|
+
from pilot.config import PilotConfig
|
|
95
|
+
from pilot.memory.store import MemoryStore
|
|
96
|
+
from pilot.security.audit import AuditLogger
|
|
97
|
+
from pilot.security.permissions import PermissionChecker
|
|
98
|
+
from pilot.security.validator import ActionValidator
|
|
99
|
+
from pilot.server import PilotServer
|
|
100
|
+
|
|
101
|
+
config = PilotConfig()
|
|
102
|
+
model = StubModelRouter()
|
|
103
|
+
memory = MemoryStore()
|
|
104
|
+
await memory.initialize()
|
|
105
|
+
|
|
106
|
+
validator = ActionValidator(config)
|
|
107
|
+
permissions = PermissionChecker(config)
|
|
108
|
+
audit = AuditLogger(BENCH_STATE_DIR / "audit.jsonl")
|
|
109
|
+
executor = Executor(config, validator, permissions, audit)
|
|
110
|
+
verifier = Verifier(model) # type: ignore[arg-type]
|
|
111
|
+
|
|
112
|
+
orchestrator = AgentOrchestrator(model) # type: ignore[arg-type]
|
|
113
|
+
orchestrator.register_agent(SystemAgent(model, executor)) # type: ignore[arg-type]
|
|
114
|
+
|
|
115
|
+
server = PilotServer(config)
|
|
116
|
+
server._planner = Planner(model, memory) # noqa: SLF001
|
|
117
|
+
server._executor = executor # noqa: SLF001
|
|
118
|
+
server._verifier = verifier # noqa: SLF001
|
|
119
|
+
server._reflector = NoopReflector() # noqa: SLF001
|
|
120
|
+
server._multi_agent = MultiAgentRouter(model) # type: ignore[arg-type] # noqa: SLF001
|
|
121
|
+
server._orchestrator = orchestrator # noqa: SLF001
|
|
122
|
+
server._reasoning = None # noqa: SLF001
|
|
123
|
+
server._screen_vision = None # noqa: SLF001
|
|
124
|
+
server._memory = NoopMemory() # noqa: SLF001
|
|
125
|
+
return BenchmarkHarness(server=server, model=model)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
async def run_once(harness: BenchmarkHarness) -> float:
|
|
129
|
+
ws = FakeWebSocket()
|
|
130
|
+
start = time.perf_counter()
|
|
131
|
+
result = await harness.server._handle_execute( # noqa: SLF001
|
|
132
|
+
{"input": "What's my CPU usage?", "dry_run": False},
|
|
133
|
+
ws, # type: ignore[arg-type]
|
|
134
|
+
)
|
|
135
|
+
elapsed_ms = (time.perf_counter() - start) * 1000
|
|
136
|
+
if result.get("status") != "success":
|
|
137
|
+
raise RuntimeError(f"Unexpected benchmark result: {result}")
|
|
138
|
+
return elapsed_ms
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
async def benchmark(iterations: int) -> tuple[list[float], int]:
|
|
142
|
+
harness = await build_harness()
|
|
143
|
+
timings = []
|
|
144
|
+
for _ in range(iterations):
|
|
145
|
+
timings.append(await run_once(harness))
|
|
146
|
+
return timings, harness.model.generate_calls
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
async def benchmark_with_harness(harness: BenchmarkHarness, iterations: int) -> tuple[list[float], int]:
|
|
150
|
+
timings = []
|
|
151
|
+
generate_calls_before = harness.model.generate_calls
|
|
152
|
+
for _ in range(iterations):
|
|
153
|
+
timings.append(await run_once(harness))
|
|
154
|
+
return timings, harness.model.generate_calls - generate_calls_before
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def print_summary(timings: list[float], generate_calls: int) -> None:
|
|
158
|
+
print(f"iterations: {len(timings)}")
|
|
159
|
+
print(f"model_generate_calls: {generate_calls}")
|
|
160
|
+
print(f"mean_ms: {statistics.mean(timings):.2f}")
|
|
161
|
+
print(f"median_ms: {statistics.median(timings):.2f}")
|
|
162
|
+
print(f"min_ms: {min(timings):.2f}")
|
|
163
|
+
print(f"max_ms: {max(timings):.2f}")
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def main() -> None:
|
|
167
|
+
parser = argparse.ArgumentParser()
|
|
168
|
+
parser.add_argument("--iterations", type=int, default=10)
|
|
169
|
+
parser.add_argument("--profile", action="store_true")
|
|
170
|
+
parser.add_argument("--profile-limit", type=int, default=20)
|
|
171
|
+
args = parser.parse_args()
|
|
172
|
+
|
|
173
|
+
if args.profile:
|
|
174
|
+
harness = asyncio.run(build_harness())
|
|
175
|
+
profiler = cProfile.Profile()
|
|
176
|
+
profiler.enable()
|
|
177
|
+
timings, generate_calls = asyncio.run(benchmark_with_harness(harness, args.iterations))
|
|
178
|
+
profiler.disable()
|
|
179
|
+
print_summary(timings, generate_calls)
|
|
180
|
+
output = io.StringIO()
|
|
181
|
+
stats = pstats.Stats(profiler, stream=output).strip_dirs().sort_stats("cumtime")
|
|
182
|
+
stats.print_stats(args.profile_limit)
|
|
183
|
+
print("\n## cProfile cumulative time")
|
|
184
|
+
print(output.getvalue())
|
|
185
|
+
else:
|
|
186
|
+
timings, generate_calls = asyncio.run(benchmark(args.iterations))
|
|
187
|
+
print_summary(timings, generate_calls)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
if __name__ == "__main__":
|
|
191
|
+
main()
|