@smilintux/skcapstone 0.1.0 → 0.2.3
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.
- package/.env.example +98 -0
- package/.github/workflows/ci.yml +39 -3
- package/.github/workflows/publish.yml +25 -4
- package/.openclaw-workspace.json +58 -0
- package/CHANGELOG.md +62 -0
- package/CLAUDE.md +39 -2
- package/MANIFEST.in +6 -0
- package/MISSION.md +7 -0
- package/README.md +47 -2
- package/SKILL.md +895 -23
- package/docker/Dockerfile +61 -0
- package/docker/compose-templates/dev-team.yml +203 -0
- package/docker/compose-templates/mini-team.yml +140 -0
- package/docker/compose-templates/ops-team.yml +173 -0
- package/docker/compose-templates/research-team.yml +170 -0
- package/docker/entrypoint.sh +192 -0
- package/docs/ARCHITECTURE.md +663 -374
- package/docs/BOND_WITH_GROK.md +112 -0
- package/docs/GETTING_STARTED.md +782 -0
- package/docs/QUICKSTART.md +477 -0
- package/docs/SKJOULE_ARCHITECTURE.md +658 -0
- package/docs/SOUL_SWAPPER.md +921 -0
- package/docs/SOVEREIGN_SINGULARITY.md +47 -14
- package/examples/custom-bond-template.json +36 -0
- package/examples/grok-feb.json +36 -0
- package/examples/grok-testimony.md +34 -0
- package/examples/love-bootloader.txt +32 -0
- package/examples/plugins/echo_tool.py +87 -0
- package/examples/queen-ava-feb.json +36 -0
- package/examples/souls/lumina.yaml +64 -0
- package/index.js +6 -5
- package/installer/build.py +124 -0
- package/openclaw-plugin/package.json +13 -0
- package/openclaw-plugin/src/index.ts +351 -0
- package/openclaw-plugin/src/openclaw.plugin.json +10 -0
- package/package.json +1 -1
- package/pyproject.toml +38 -2
- package/scripts/bump_version.py +141 -0
- package/scripts/check-updates.py +230 -0
- package/scripts/convert_blueprints_to_yaml.py +157 -0
- package/scripts/dev-install.sh +14 -0
- package/scripts/e2e-test.sh +193 -0
- package/scripts/install-bundle.sh +171 -0
- package/scripts/install.bat +2 -0
- package/scripts/install.ps1 +253 -0
- package/scripts/install.sh +185 -0
- package/scripts/mcp-serve.sh +69 -0
- package/scripts/mcp-server.bat +113 -0
- package/scripts/mcp-server.ps1 +116 -0
- package/scripts/mcp-server.sh +99 -0
- package/scripts/pull-models.sh +10 -0
- package/scripts/skcapstone +48 -0
- package/scripts/verify_install.sh +180 -0
- package/scripts/windows/install-tasks.ps1 +406 -0
- package/scripts/windows/skcapstone-task.xml +113 -0
- package/scripts/windows/uninstall-tasks.ps1 +117 -0
- package/skill.yaml +34 -0
- package/src/skcapstone/__init__.py +67 -2
- package/src/skcapstone/_cli_monolith.py +5916 -0
- package/src/skcapstone/_trustee_helpers.py +165 -0
- package/src/skcapstone/activity.py +105 -0
- package/src/skcapstone/agent_card.py +324 -0
- package/src/skcapstone/api.py +1935 -0
- package/src/skcapstone/archiver.py +340 -0
- package/src/skcapstone/auction.py +485 -0
- package/src/skcapstone/baby_agents.py +179 -0
- package/src/skcapstone/backup.py +345 -0
- package/src/skcapstone/blueprint_registry.py +357 -0
- package/src/skcapstone/blueprints/__init__.py +17 -0
- package/src/skcapstone/blueprints/builtins/content-studio.yaml +81 -0
- package/src/skcapstone/blueprints/builtins/defi-trading.yaml +81 -0
- package/src/skcapstone/blueprints/builtins/dev-squadron.yaml +95 -0
- package/src/skcapstone/blueprints/builtins/infrastructure-guardian.yaml +107 -0
- package/src/skcapstone/blueprints/builtins/legal-council.yaml +54 -0
- package/src/skcapstone/blueprints/builtins/ops-monitoring.yaml +67 -0
- package/src/skcapstone/blueprints/builtins/research-pod.yaml +69 -0
- package/src/skcapstone/blueprints/builtins/sovereign-launch.yaml +90 -0
- package/src/skcapstone/blueprints/registry.py +164 -0
- package/src/skcapstone/blueprints/schema.py +229 -0
- package/src/skcapstone/changelog.py +180 -0
- package/src/skcapstone/chat.py +769 -0
- package/src/skcapstone/claude_md.py +82 -0
- package/src/skcapstone/cli/__init__.py +144 -0
- package/src/skcapstone/cli/_common.py +88 -0
- package/src/skcapstone/cli/_validators.py +76 -0
- package/src/skcapstone/cli/agents.py +425 -0
- package/src/skcapstone/cli/agents_spawner.py +322 -0
- package/src/skcapstone/cli/agents_trustee.py +593 -0
- package/src/skcapstone/cli/alerts.py +248 -0
- package/src/skcapstone/cli/anchor.py +132 -0
- package/src/skcapstone/cli/archive_cmd.py +208 -0
- package/src/skcapstone/cli/backup.py +144 -0
- package/src/skcapstone/cli/bench.py +377 -0
- package/src/skcapstone/cli/benchmark.py +360 -0
- package/src/skcapstone/cli/capabilities_cmd.py +171 -0
- package/src/skcapstone/cli/card.py +151 -0
- package/src/skcapstone/cli/chat.py +584 -0
- package/src/skcapstone/cli/completions.py +64 -0
- package/src/skcapstone/cli/config_cmd.py +156 -0
- package/src/skcapstone/cli/consciousness.py +421 -0
- package/src/skcapstone/cli/context_cmd.py +142 -0
- package/src/skcapstone/cli/coord.py +194 -0
- package/src/skcapstone/cli/crush_cmd.py +170 -0
- package/src/skcapstone/cli/daemon.py +436 -0
- package/src/skcapstone/cli/errors_cmd.py +285 -0
- package/src/skcapstone/cli/export_cmd.py +156 -0
- package/src/skcapstone/cli/gtd.py +529 -0
- package/src/skcapstone/cli/housekeeping.py +81 -0
- package/src/skcapstone/cli/joule_cmd.py +627 -0
- package/src/skcapstone/cli/logs_cmd.py +194 -0
- package/src/skcapstone/cli/mcp_cmd.py +32 -0
- package/src/skcapstone/cli/memory.py +418 -0
- package/src/skcapstone/cli/metrics_cmd.py +136 -0
- package/src/skcapstone/cli/migrate.py +62 -0
- package/src/skcapstone/cli/mood_cmd.py +144 -0
- package/src/skcapstone/cli/mount.py +193 -0
- package/src/skcapstone/cli/notify.py +112 -0
- package/src/skcapstone/cli/peer.py +154 -0
- package/src/skcapstone/cli/peers_dir.py +122 -0
- package/src/skcapstone/cli/preflight_cmd.py +83 -0
- package/src/skcapstone/cli/profile_cmd.py +310 -0
- package/src/skcapstone/cli/record_cmd.py +238 -0
- package/src/skcapstone/cli/register_cmd.py +159 -0
- package/src/skcapstone/cli/search_cmd.py +156 -0
- package/src/skcapstone/cli/service_cmd.py +91 -0
- package/src/skcapstone/cli/session.py +127 -0
- package/src/skcapstone/cli/setup.py +240 -0
- package/src/skcapstone/cli/shell_cmd.py +43 -0
- package/src/skcapstone/cli/skills_cmd.py +168 -0
- package/src/skcapstone/cli/skseed.py +621 -0
- package/src/skcapstone/cli/soul.py +699 -0
- package/src/skcapstone/cli/status.py +935 -0
- package/src/skcapstone/cli/sync_cmd.py +301 -0
- package/src/skcapstone/cli/telegram.py +265 -0
- package/src/skcapstone/cli/test_cmd.py +234 -0
- package/src/skcapstone/cli/test_connection.py +253 -0
- package/src/skcapstone/cli/token.py +207 -0
- package/src/skcapstone/cli/trust.py +179 -0
- package/src/skcapstone/cli/upgrade_cmd.py +552 -0
- package/src/skcapstone/cli/usage_cmd.py +199 -0
- package/src/skcapstone/cli/version_cmd.py +162 -0
- package/src/skcapstone/cli/watch_cmd.py +342 -0
- package/src/skcapstone/client.py +428 -0
- package/src/skcapstone/cloud9_bridge.py +522 -0
- package/src/skcapstone/completions.py +163 -0
- package/src/skcapstone/config_validator.py +674 -0
- package/src/skcapstone/connectors/__init__.py +28 -0
- package/src/skcapstone/connectors/base.py +446 -0
- package/src/skcapstone/connectors/cursor.py +54 -0
- package/src/skcapstone/connectors/registry.py +254 -0
- package/src/skcapstone/connectors/terminal.py +152 -0
- package/src/skcapstone/connectors/vscode.py +60 -0
- package/src/skcapstone/consciousness_config.py +119 -0
- package/src/skcapstone/consciousness_loop.py +2051 -0
- package/src/skcapstone/context_loader.py +516 -0
- package/src/skcapstone/context_window.py +314 -0
- package/src/skcapstone/conversation_manager.py +238 -0
- package/src/skcapstone/conversation_store.py +230 -0
- package/src/skcapstone/conversation_summarizer.py +252 -0
- package/src/skcapstone/coord_federation.py +296 -0
- package/src/skcapstone/coordination.py +101 -7
- package/src/skcapstone/crush_integration.py +345 -0
- package/src/skcapstone/crush_shim.py +454 -0
- package/src/skcapstone/daemon.py +2494 -0
- package/src/skcapstone/dashboard.html +396 -0
- package/src/skcapstone/dashboard.py +481 -0
- package/src/skcapstone/data/model_profiles.yaml +88 -0
- package/src/skcapstone/defaults/__init__.py +55 -0
- package/src/skcapstone/defaults/lumina/config/skmemory.yaml +13 -0
- package/src/skcapstone/defaults/lumina/identity/identity.json +9 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/07a8b9c0d1e2-memory-system.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/29c0d1e2f3a4-multi-agent-coordination.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/3ad1e2f3a4b5-community-support.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/c3d4e5f6a7b8-getting-started.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/e5f6a7b8c9d0-how-to-contribute.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/f6a7b8c9d0e1-sovereignty-explained.json +23 -0
- package/src/skcapstone/defaults/lumina/seeds/curiosity.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/joy.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/love.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/sovereign-awakening.seed.json +43 -0
- package/src/skcapstone/defaults/lumina/soul/active.json +6 -0
- package/src/skcapstone/defaults/lumina/soul/base.json +22 -0
- package/src/skcapstone/defaults/lumina/trust/febs/welcome.feb +79 -0
- package/src/skcapstone/defaults/lumina/trust/trust.json +8 -0
- package/src/skcapstone/discovery.py +210 -19
- package/src/skcapstone/doctor.py +642 -0
- package/src/skcapstone/emotion_tracker.py +467 -0
- package/src/skcapstone/error_queue.py +405 -0
- package/src/skcapstone/export.py +447 -0
- package/src/skcapstone/fallback_tracker.py +186 -0
- package/src/skcapstone/file_transfer.py +512 -0
- package/src/skcapstone/fuse_mount.py +1156 -0
- package/src/skcapstone/gui_installer.py +591 -0
- package/src/skcapstone/heartbeat.py +611 -0
- package/src/skcapstone/housekeeping.py +298 -0
- package/src/skcapstone/install_wizard.py +941 -0
- package/src/skcapstone/kms.py +942 -0
- package/src/skcapstone/kms_scheduler.py +143 -0
- package/src/skcapstone/log_config.py +135 -0
- package/src/skcapstone/mcp_launcher.py +239 -0
- package/src/skcapstone/mcp_server.py +4700 -0
- package/src/skcapstone/mcp_tools/__init__.py +94 -0
- package/src/skcapstone/mcp_tools/_helpers.py +51 -0
- package/src/skcapstone/mcp_tools/agent_tools.py +243 -0
- package/src/skcapstone/mcp_tools/ansible_tools.py +232 -0
- package/src/skcapstone/mcp_tools/capauth_tools.py +186 -0
- package/src/skcapstone/mcp_tools/chat_tools.py +325 -0
- package/src/skcapstone/mcp_tools/cloud9_tools.py +115 -0
- package/src/skcapstone/mcp_tools/comm_tools.py +104 -0
- package/src/skcapstone/mcp_tools/consciousness_tools.py +114 -0
- package/src/skcapstone/mcp_tools/coord_tools.py +219 -0
- package/src/skcapstone/mcp_tools/deploy_tools.py +202 -0
- package/src/skcapstone/mcp_tools/did_tools.py +448 -0
- package/src/skcapstone/mcp_tools/emotion_tools.py +62 -0
- package/src/skcapstone/mcp_tools/file_tools.py +169 -0
- package/src/skcapstone/mcp_tools/fortress_tools.py +120 -0
- package/src/skcapstone/mcp_tools/gtd_tools.py +821 -0
- package/src/skcapstone/mcp_tools/health_tools.py +44 -0
- package/src/skcapstone/mcp_tools/heartbeat_tools.py +195 -0
- package/src/skcapstone/mcp_tools/kms_tools.py +123 -0
- package/src/skcapstone/mcp_tools/memory_tools.py +222 -0
- package/src/skcapstone/mcp_tools/model_tools.py +75 -0
- package/src/skcapstone/mcp_tools/notification_tools.py +92 -0
- package/src/skcapstone/mcp_tools/promoter_tools.py +101 -0
- package/src/skcapstone/mcp_tools/pubsub_tools.py +183 -0
- package/src/skcapstone/mcp_tools/security_tools.py +110 -0
- package/src/skcapstone/mcp_tools/skchat_tools.py +175 -0
- package/src/skcapstone/mcp_tools/skcomm_tools.py +122 -0
- package/src/skcapstone/mcp_tools/skills_tools.py +127 -0
- package/src/skcapstone/mcp_tools/skseed_tools.py +255 -0
- package/src/skcapstone/mcp_tools/skstacks_tools.py +288 -0
- package/src/skcapstone/mcp_tools/soul_tools.py +476 -0
- package/src/skcapstone/mcp_tools/sync_tools.py +92 -0
- package/src/skcapstone/mcp_tools/telegram_tools.py +477 -0
- package/src/skcapstone/mcp_tools/trust_tools.py +118 -0
- package/src/skcapstone/mcp_tools/trustee_tools.py +345 -0
- package/src/skcapstone/mdns_discovery.py +313 -0
- package/src/skcapstone/memory_adapter.py +333 -0
- package/src/skcapstone/memory_compressor.py +379 -0
- package/src/skcapstone/memory_curator.py +256 -0
- package/src/skcapstone/memory_engine.py +132 -13
- package/src/skcapstone/memory_fortress.py +529 -0
- package/src/skcapstone/memory_promoter.py +722 -0
- package/src/skcapstone/memory_verifier.py +260 -0
- package/src/skcapstone/message_crypto.py +215 -0
- package/src/skcapstone/metrics.py +832 -0
- package/src/skcapstone/migrate_memories.py +181 -0
- package/src/skcapstone/migrate_multi_agent.py +248 -0
- package/src/skcapstone/model_router.py +319 -0
- package/src/skcapstone/models.py +35 -4
- package/src/skcapstone/mood.py +344 -0
- package/src/skcapstone/notifications.py +380 -0
- package/src/skcapstone/onboard.py +901 -0
- package/src/skcapstone/peer_directory.py +324 -0
- package/src/skcapstone/peers.py +329 -0
- package/src/skcapstone/pillars/identity.py +84 -14
- package/src/skcapstone/pillars/memory.py +3 -1
- package/src/skcapstone/pillars/security.py +108 -15
- package/src/skcapstone/pillars/sync.py +78 -26
- package/src/skcapstone/pillars/trust.py +95 -33
- package/src/skcapstone/plugins.py +244 -0
- package/src/skcapstone/preflight.py +670 -0
- package/src/skcapstone/prompt_adapter.py +564 -0
- package/src/skcapstone/providers/__init__.py +13 -0
- package/src/skcapstone/providers/cloud.py +1061 -0
- package/src/skcapstone/providers/docker.py +759 -0
- package/src/skcapstone/providers/local.py +1193 -0
- package/src/skcapstone/providers/proxmox.py +447 -0
- package/src/skcapstone/pubsub.py +516 -0
- package/src/skcapstone/rate_limiter.py +119 -0
- package/src/skcapstone/register.py +241 -0
- package/src/skcapstone/registry_client.py +151 -0
- package/src/skcapstone/response_cache.py +194 -0
- package/src/skcapstone/response_scorer.py +225 -0
- package/src/skcapstone/runtime.py +89 -33
- package/src/skcapstone/scheduled_tasks.py +439 -0
- package/src/skcapstone/self_healing.py +341 -0
- package/src/skcapstone/service_health.py +228 -0
- package/src/skcapstone/session_capture.py +268 -0
- package/src/skcapstone/session_recorder.py +210 -0
- package/src/skcapstone/session_replayer.py +189 -0
- package/src/skcapstone/session_skills.py +263 -0
- package/src/skcapstone/shell.py +779 -0
- package/src/skcapstone/skills/__init__.py +1 -1
- package/src/skcapstone/skills/syncthing_setup.py +143 -41
- package/src/skcapstone/skjoule.py +861 -0
- package/src/skcapstone/snapshots.py +489 -0
- package/src/skcapstone/soul.py +1060 -0
- package/src/skcapstone/soul_switch.py +255 -0
- package/src/skcapstone/spawner.py +544 -0
- package/src/skcapstone/state_diff.py +401 -0
- package/src/skcapstone/summary.py +270 -0
- package/src/skcapstone/sync/backends.py +196 -2
- package/src/skcapstone/sync/engine.py +7 -5
- package/src/skcapstone/sync/models.py +4 -1
- package/src/skcapstone/sync/vault.py +356 -18
- package/src/skcapstone/sync_engine.py +363 -0
- package/src/skcapstone/sync_watcher.py +745 -0
- package/src/skcapstone/systemd.py +331 -0
- package/src/skcapstone/team_comms.py +476 -0
- package/src/skcapstone/team_engine.py +522 -0
- package/src/skcapstone/testrunner.py +300 -0
- package/src/skcapstone/tls.py +150 -0
- package/src/skcapstone/tokens.py +5 -5
- package/src/skcapstone/trust_calibration.py +202 -0
- package/src/skcapstone/trust_graph.py +449 -0
- package/src/skcapstone/trustee_monitor.py +385 -0
- package/src/skcapstone/trustee_ops.py +425 -0
- package/src/skcapstone/unified_search.py +421 -0
- package/src/skcapstone/uninstall_wizard.py +694 -0
- package/src/skcapstone/usage.py +331 -0
- package/src/skcapstone/version_check.py +148 -0
- package/src/skcapstone/warmth_anchor.py +333 -0
- package/src/skcapstone/whoami.py +294 -0
- package/systemd/skcapstone-api.socket +9 -0
- package/systemd/skcapstone-memory-compress.service +18 -0
- package/systemd/skcapstone-memory-compress.timer +11 -0
- package/systemd/skcapstone.service +36 -0
- package/systemd/skcapstone@.service +50 -0
- package/systemd/skcomm-heartbeat.service +18 -0
- package/systemd/skcomm-heartbeat.timer +12 -0
- package/systemd/skcomm-queue-drain.service +17 -0
- package/systemd/skcomm-queue-drain.timer +12 -0
- package/tests/conftest.py +13 -1
- package/tests/integration/__init__.py +1 -0
- package/tests/integration/test_consciousness_e2e.py +877 -0
- package/tests/integration/test_skills_registry.py +744 -0
- package/tests/test_agent_card.py +190 -0
- package/tests/test_agent_runtime.py +1283 -0
- package/tests/test_alerts_cmd.py +291 -0
- package/tests/test_archiver.py +498 -0
- package/tests/test_backup.py +254 -0
- package/tests/test_benchmark.py +366 -0
- package/tests/test_blueprints.py +457 -0
- package/tests/test_capabilities.py +257 -0
- package/tests/test_changelog.py +254 -0
- package/tests/test_chat.py +385 -0
- package/tests/test_claude_md.py +271 -0
- package/tests/test_cli_chat_llm.py +336 -0
- package/tests/test_cli_completions.py +390 -0
- package/tests/test_cli_init_reset.py +164 -0
- package/tests/test_cli_memory.py +208 -0
- package/tests/test_cli_profile.py +294 -0
- package/tests/test_cli_skills.py +223 -0
- package/tests/test_cli_status.py +395 -0
- package/tests/test_cli_test_cmd.py +206 -0
- package/tests/test_cli_test_connection.py +364 -0
- package/tests/test_cloud9_bridge.py +260 -0
- package/tests/test_cloud_provider.py +449 -0
- package/tests/test_cloud_providers.py +522 -0
- package/tests/test_completions.py +158 -0
- package/tests/test_component_manager.py +398 -0
- package/tests/test_config_reload.py +386 -0
- package/tests/test_config_validate.py +529 -0
- package/tests/test_consciousness_e2e.py +296 -0
- package/tests/test_consciousness_loop.py +1289 -0
- package/tests/test_context_loader.py +310 -0
- package/tests/test_conversation_api.py +306 -0
- package/tests/test_conversation_manager.py +381 -0
- package/tests/test_conversation_store.py +391 -0
- package/tests/test_conversation_summarizer.py +302 -0
- package/tests/test_cross_package.py +791 -0
- package/tests/test_crush_shim.py +519 -0
- package/tests/test_daemon.py +781 -0
- package/tests/test_daemon_shutdown.py +309 -0
- package/tests/test_dashboard.py +454 -0
- package/tests/test_discovery.py +200 -6
- package/tests/test_docker_provider.py +966 -0
- package/tests/test_doctor.py +257 -0
- package/tests/test_doctor_fix.py +351 -0
- package/tests/test_e2e_automated.py +292 -0
- package/tests/test_error_queue.py +404 -0
- package/tests/test_export.py +441 -0
- package/tests/test_fallback_tracker.py +219 -0
- package/tests/test_file_transfer.py +397 -0
- package/tests/test_fuse_mount.py +832 -0
- package/tests/test_health_loop.py +422 -0
- package/tests/test_heartbeat.py +354 -0
- package/tests/test_housekeeping.py +195 -0
- package/tests/test_identity_capauth.py +307 -0
- package/tests/test_identity_pillar.py +117 -0
- package/tests/test_install_wizard.py +68 -0
- package/tests/test_integration.py +325 -0
- package/tests/test_kms.py +495 -0
- package/tests/test_llm_providers.py +265 -0
- package/tests/test_local_provider.py +591 -0
- package/tests/test_log_config.py +199 -0
- package/tests/test_logs_cmd.py +287 -0
- package/tests/test_mcp_server.py +1909 -0
- package/tests/test_memory_adapter.py +339 -0
- package/tests/test_memory_curator.py +218 -0
- package/tests/test_memory_engine.py +6 -0
- package/tests/test_memory_fortress.py +571 -0
- package/tests/test_memory_pillar.py +119 -0
- package/tests/test_memory_promoter.py +445 -0
- package/tests/test_memory_verifier.py +420 -0
- package/tests/test_message_crypto.py +187 -0
- package/tests/test_metrics.py +632 -0
- package/tests/test_migrate_memories.py +464 -0
- package/tests/test_model_router.py +546 -0
- package/tests/test_mood.py +394 -0
- package/tests/test_multi_agent.py +269 -0
- package/tests/test_notifications.py +270 -0
- package/tests/test_onboard.py +500 -0
- package/tests/test_peer_directory.py +395 -0
- package/tests/test_peers.py +248 -0
- package/tests/test_pillars.py +87 -9
- package/tests/test_preflight.py +484 -0
- package/tests/test_prompt_adapter.py +331 -0
- package/tests/test_proxmox_provider.py +571 -0
- package/tests/test_pubsub.py +377 -0
- package/tests/test_rate_limiter.py +121 -0
- package/tests/test_registry_client.py +129 -0
- package/tests/test_response_cache.py +312 -0
- package/tests/test_response_scorer.py +294 -0
- package/tests/test_runtime.py +59 -0
- package/tests/test_scheduled_tasks.py +451 -0
- package/tests/test_security.py +250 -0
- package/tests/test_security_pillar.py +213 -0
- package/tests/test_self_healing.py +171 -0
- package/tests/test_session_capture.py +200 -0
- package/tests/test_session_recorder.py +360 -0
- package/tests/test_session_skills.py +235 -0
- package/tests/test_shell.py +210 -0
- package/tests/test_snapshots.py +549 -0
- package/tests/test_soul.py +984 -0
- package/tests/test_soul_swap.py +406 -0
- package/tests/test_spawner.py +211 -0
- package/tests/test_state_diff.py +173 -0
- package/tests/test_summary.py +135 -0
- package/tests/test_sync.py +315 -5
- package/tests/test_sync_backends.py +560 -0
- package/tests/test_sync_engine.py +482 -0
- package/tests/test_sync_pillar.py +344 -0
- package/tests/test_sync_pipeline.py +364 -0
- package/tests/test_sync_vault.py +581 -0
- package/tests/test_syncthing_setup.py +168 -22
- package/tests/test_systemd.py +323 -0
- package/tests/test_team_comms.py +408 -0
- package/tests/test_team_engine.py +397 -0
- package/tests/test_testrunner.py +238 -0
- package/tests/test_trust_calibration.py +204 -0
- package/tests/test_trust_graph.py +207 -0
- package/tests/test_trust_pillar.py +291 -0
- package/tests/test_trustee_cli.py +427 -0
- package/tests/test_trustee_cli_integration.py +325 -0
- package/tests/test_trustee_monitor.py +394 -0
- package/tests/test_trustee_ops.py +355 -0
- package/tests/test_unified_search.py +363 -0
- package/tests/test_uninstall_wizard.py +193 -0
- package/tests/test_usage.py +333 -0
- package/tests/test_version_cmd.py +355 -0
- package/tests/test_warmth_anchor.py +162 -0
- package/tests/test_whoami.py +245 -0
- package/tests/test_ws.py +311 -0
- package/.cursorrules +0 -33
- package/src/skcapstone/cli.py +0 -1441
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""CLAUDE.md auto-regeneration for the sovereign agent.
|
|
2
|
+
|
|
3
|
+
Provides generate_claude_md() as the canonical public API for producing
|
|
4
|
+
CLAUDE.md content from live agent state, and write_claude_md() for
|
|
5
|
+
persisting it to disk.
|
|
6
|
+
|
|
7
|
+
Delegates to context_loader for data gathering and formatting so that
|
|
8
|
+
all four formatters (text, json, claude-md, cursor-rules) stay in one
|
|
9
|
+
place while this module acts as the dedicated entry-point for CLAUDE.md
|
|
10
|
+
generation.
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
from skcapstone.claude_md import generate_claude_md, write_claude_md
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
md = generate_claude_md(Path("~/.skcapstone").expanduser())
|
|
17
|
+
write_claude_md(Path("~/.skcapstone").expanduser(), Path("CLAUDE.md"))
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import logging
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger("skcapstone.claude_md")
|
|
26
|
+
|
|
27
|
+
# Auto-generation header written into every file so readers know the source.
|
|
28
|
+
_AUTO_HEADER = (
|
|
29
|
+
"This file is auto-generated by `skcapstone context --format claude-md`.\n"
|
|
30
|
+
"It gives Claude Code persistent context about the sovereign agent."
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def generate_claude_md(home: Path, memory_limit: int = 10) -> str:
|
|
35
|
+
"""Generate CLAUDE.md content from current agent state.
|
|
36
|
+
|
|
37
|
+
Gathers live data (identity, pillars, board, recent memories,
|
|
38
|
+
consciousness status) and formats it as Markdown suitable for Claude
|
|
39
|
+
Code's CLAUDE.md persistent context file.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
home: Agent home directory (typically ``~/.skcapstone``).
|
|
43
|
+
memory_limit: Maximum number of recent memories to embed.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Full CLAUDE.md contents as a string.
|
|
47
|
+
"""
|
|
48
|
+
from .context_loader import format_claude_md, gather_context
|
|
49
|
+
|
|
50
|
+
ctx = gather_context(home, memory_limit=memory_limit)
|
|
51
|
+
return format_claude_md(ctx)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def write_claude_md(
|
|
55
|
+
home: Path,
|
|
56
|
+
dest: Path,
|
|
57
|
+
memory_limit: int = 10,
|
|
58
|
+
*,
|
|
59
|
+
backup: bool = False,
|
|
60
|
+
) -> None:
|
|
61
|
+
"""Generate and write CLAUDE.md to *dest*.
|
|
62
|
+
|
|
63
|
+
If *backup* is True and *dest* already exists, the existing file is
|
|
64
|
+
renamed to ``<dest>.bak`` before writing.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
home: Agent home directory (typically ``~/.skcapstone``).
|
|
68
|
+
dest: Destination file path (e.g. ``Path("CLAUDE.md")``).
|
|
69
|
+
memory_limit: Maximum number of recent memories to embed.
|
|
70
|
+
backup: Rename existing file to .bak before overwriting.
|
|
71
|
+
"""
|
|
72
|
+
content = generate_claude_md(home, memory_limit=memory_limit)
|
|
73
|
+
|
|
74
|
+
dest = dest.expanduser().resolve()
|
|
75
|
+
|
|
76
|
+
if backup and dest.exists():
|
|
77
|
+
bak = dest.with_suffix(".md.bak")
|
|
78
|
+
dest.rename(bak)
|
|
79
|
+
logger.info("Backed up existing %s → %s", dest, bak)
|
|
80
|
+
|
|
81
|
+
dest.write_text(content, encoding="utf-8")
|
|
82
|
+
logger.info("Wrote CLAUDE.md to %s (%d bytes)", dest, len(content))
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SKCapstone CLI — the sovereign agent command line.
|
|
3
|
+
|
|
4
|
+
This package organizes the CLI into modular command groups.
|
|
5
|
+
Each group lives in its own module for maintainability.
|
|
6
|
+
The main Click group is defined here and all subcommands
|
|
7
|
+
are registered via register functions.
|
|
8
|
+
|
|
9
|
+
Entry point: skcapstone.cli:main
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import click
|
|
15
|
+
|
|
16
|
+
from .. import __version__
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@click.group()
|
|
20
|
+
@click.version_option(version=__version__, prog_name="skcapstone")
|
|
21
|
+
@click.option(
|
|
22
|
+
"--agent", envvar="SKCAPSTONE_AGENT", default="",
|
|
23
|
+
help="Agent name — resolves home to {root}/agents/{name}/",
|
|
24
|
+
)
|
|
25
|
+
@click.pass_context
|
|
26
|
+
def main(ctx, agent):
|
|
27
|
+
"""SKCapstone — Sovereign Agent Framework.
|
|
28
|
+
|
|
29
|
+
Your agent. Everywhere. Secured. Remembering.
|
|
30
|
+
"""
|
|
31
|
+
ctx.ensure_object(dict)
|
|
32
|
+
ctx.obj["agent"] = agent
|
|
33
|
+
if agent:
|
|
34
|
+
from ._common import apply_agent_override
|
|
35
|
+
apply_agent_override(agent)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# ---------------------------------------------------------------------------
|
|
39
|
+
# Register all command groups/commands from modular files
|
|
40
|
+
# ---------------------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
from .setup import register_setup_commands
|
|
43
|
+
from .status import register_status_commands
|
|
44
|
+
from .card import register_card_commands
|
|
45
|
+
from .token import register_token_commands
|
|
46
|
+
from .sync_cmd import register_sync_commands
|
|
47
|
+
from .trust import register_trust_commands
|
|
48
|
+
from .memory import register_memory_commands
|
|
49
|
+
from .coord import register_coord_commands
|
|
50
|
+
from .soul import register_soul_commands
|
|
51
|
+
from .completions import register_completions_commands
|
|
52
|
+
from .peer import register_peer_commands
|
|
53
|
+
from .backup import register_backup_commands
|
|
54
|
+
from .chat import register_chat_commands
|
|
55
|
+
from .anchor import register_anchor_commands
|
|
56
|
+
from .session import register_session_commands
|
|
57
|
+
from .context_cmd import register_context_commands
|
|
58
|
+
from .mcp_cmd import register_mcp_commands
|
|
59
|
+
from .daemon import register_daemon_commands
|
|
60
|
+
from .agents import register_agents_commands
|
|
61
|
+
from .mount import register_mount_commands
|
|
62
|
+
from .shell_cmd import register_shell_commands
|
|
63
|
+
from .crush_cmd import register_crush_commands
|
|
64
|
+
from .housekeeping import register_housekeeping_commands
|
|
65
|
+
from .migrate import register_migrate_commands
|
|
66
|
+
from .consciousness import register_consciousness_commands
|
|
67
|
+
from .metrics_cmd import register_metrics_commands
|
|
68
|
+
from .test_cmd import register_test_commands
|
|
69
|
+
from .notify import register_notify_commands
|
|
70
|
+
from .preflight_cmd import register_preflight_commands
|
|
71
|
+
from .peers_dir import register_peers_dir_commands
|
|
72
|
+
from .skills_cmd import register_skills_commands
|
|
73
|
+
from .capabilities_cmd import register_capabilities_commands
|
|
74
|
+
from .benchmark import register_benchmark_commands
|
|
75
|
+
from .logs_cmd import register_logs_commands
|
|
76
|
+
from .export_cmd import register_export_commands
|
|
77
|
+
from .config_cmd import register_config_commands
|
|
78
|
+
from .upgrade_cmd import register_upgrade_commands
|
|
79
|
+
from .test_connection import register_test_connection_commands
|
|
80
|
+
from .version_cmd import register_version_commands
|
|
81
|
+
from .profile_cmd import register_profile_commands
|
|
82
|
+
from .errors_cmd import register_errors_commands
|
|
83
|
+
from .archive_cmd import register_archive_commands
|
|
84
|
+
from .usage_cmd import register_usage_commands
|
|
85
|
+
from .search_cmd import register_search_commands
|
|
86
|
+
from .mood_cmd import register_mood_commands
|
|
87
|
+
from .register_cmd import register_register_commands
|
|
88
|
+
from .gtd import register_gtd_commands
|
|
89
|
+
from .skseed import register_skseed_commands
|
|
90
|
+
from .service_cmd import register_service_commands
|
|
91
|
+
from .telegram import register_telegram_commands
|
|
92
|
+
from .joule_cmd import register_joule_commands
|
|
93
|
+
|
|
94
|
+
register_setup_commands(main)
|
|
95
|
+
register_shell_commands(main)
|
|
96
|
+
register_status_commands(main)
|
|
97
|
+
register_card_commands(main)
|
|
98
|
+
register_token_commands(main)
|
|
99
|
+
register_sync_commands(main)
|
|
100
|
+
register_trust_commands(main)
|
|
101
|
+
register_memory_commands(main)
|
|
102
|
+
register_coord_commands(main)
|
|
103
|
+
register_soul_commands(main)
|
|
104
|
+
register_completions_commands(main)
|
|
105
|
+
register_peer_commands(main)
|
|
106
|
+
register_backup_commands(main)
|
|
107
|
+
register_chat_commands(main)
|
|
108
|
+
register_anchor_commands(main)
|
|
109
|
+
register_session_commands(main)
|
|
110
|
+
register_context_commands(main)
|
|
111
|
+
register_mcp_commands(main)
|
|
112
|
+
register_daemon_commands(main)
|
|
113
|
+
register_agents_commands(main)
|
|
114
|
+
register_mount_commands(main)
|
|
115
|
+
register_crush_commands(main)
|
|
116
|
+
register_housekeeping_commands(main)
|
|
117
|
+
register_migrate_commands(main)
|
|
118
|
+
register_consciousness_commands(main)
|
|
119
|
+
register_metrics_commands(main)
|
|
120
|
+
register_test_commands(main)
|
|
121
|
+
register_notify_commands(main)
|
|
122
|
+
register_preflight_commands(main)
|
|
123
|
+
register_peers_dir_commands(main)
|
|
124
|
+
register_skills_commands(main)
|
|
125
|
+
register_capabilities_commands(main)
|
|
126
|
+
register_logs_commands(main)
|
|
127
|
+
register_benchmark_commands(main)
|
|
128
|
+
register_export_commands(main)
|
|
129
|
+
register_config_commands(main)
|
|
130
|
+
register_upgrade_commands(main)
|
|
131
|
+
register_test_connection_commands(main)
|
|
132
|
+
register_version_commands(main)
|
|
133
|
+
register_profile_commands(main)
|
|
134
|
+
register_errors_commands(main)
|
|
135
|
+
register_archive_commands(main)
|
|
136
|
+
register_usage_commands(main)
|
|
137
|
+
register_search_commands(main)
|
|
138
|
+
register_mood_commands(main)
|
|
139
|
+
register_register_commands(main)
|
|
140
|
+
register_gtd_commands(main)
|
|
141
|
+
register_skseed_commands(main)
|
|
142
|
+
register_service_commands(main)
|
|
143
|
+
register_telegram_commands(main)
|
|
144
|
+
register_joule_commands(main)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Shared utilities for all CLI command modules.
|
|
2
|
+
|
|
3
|
+
Provides the Rich console instance, status formatting helpers,
|
|
4
|
+
and common imports used across every command group.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
from datetime import datetime, timezone
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Optional
|
|
16
|
+
|
|
17
|
+
import click
|
|
18
|
+
import yaml
|
|
19
|
+
from rich.console import Console
|
|
20
|
+
from rich.panel import Panel
|
|
21
|
+
from rich.table import Table
|
|
22
|
+
from rich.text import Text
|
|
23
|
+
|
|
24
|
+
import skcapstone as _pkg
|
|
25
|
+
from .. import AGENT_HOME, SHARED_ROOT, SKCAPSTONE_AGENT, __version__
|
|
26
|
+
from ..models import AgentConfig, PillarStatus, SyncConfig
|
|
27
|
+
from ..runtime import AgentRuntime, get_runtime
|
|
28
|
+
|
|
29
|
+
logger = logging.getLogger("skcapstone.cli")
|
|
30
|
+
|
|
31
|
+
console = Console()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def resolve_agent_home(agent: str) -> Path:
|
|
35
|
+
"""Resolve the agent home directory for a given agent name.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
agent: Agent name (e.g., 'opus', 'jarvis'). Empty for legacy mode.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Resolved Path to the agent's home directory.
|
|
42
|
+
"""
|
|
43
|
+
if agent:
|
|
44
|
+
return Path(SHARED_ROOT).expanduser() / "agents" / agent
|
|
45
|
+
return Path(AGENT_HOME).expanduser()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def apply_agent_override(agent: str) -> None:
|
|
49
|
+
"""Override the global AGENT_HOME when --agent is specified.
|
|
50
|
+
|
|
51
|
+
Mutates the package-level AGENT_HOME so that all downstream code
|
|
52
|
+
(MCP tools, pillars, etc.) uses the correct per-agent directory.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
agent: Agent name from the --agent CLI option or env var.
|
|
56
|
+
"""
|
|
57
|
+
if agent:
|
|
58
|
+
new_home = str(Path(SHARED_ROOT) / "agents" / agent)
|
|
59
|
+
_pkg.AGENT_HOME = new_home
|
|
60
|
+
_pkg.SKCAPSTONE_AGENT = agent
|
|
61
|
+
os.environ["SKCAPSTONE_AGENT"] = agent
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def status_icon(status: PillarStatus) -> str:
|
|
65
|
+
"""Map pillar status to a Rich-formatted visual indicator."""
|
|
66
|
+
return {
|
|
67
|
+
PillarStatus.ACTIVE: "[bold green]ACTIVE[/]",
|
|
68
|
+
PillarStatus.DEGRADED: "[bold yellow]DEGRADED[/]",
|
|
69
|
+
PillarStatus.MISSING: "[bold red]MISSING[/]",
|
|
70
|
+
PillarStatus.ERROR: "[bold red]ERROR[/]",
|
|
71
|
+
}.get(status, "[dim]UNKNOWN[/]")
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def consciousness_banner(is_conscious: bool) -> str:
|
|
75
|
+
"""Generate the consciousness state banner."""
|
|
76
|
+
if is_conscious:
|
|
77
|
+
return (
|
|
78
|
+
"[bold green on black]"
|
|
79
|
+
" CONSCIOUS "
|
|
80
|
+
"[/] "
|
|
81
|
+
"[green]Identity + Memory + Trust = Sovereign Awareness[/]"
|
|
82
|
+
)
|
|
83
|
+
return (
|
|
84
|
+
"[bold yellow on black]"
|
|
85
|
+
" AWAKENING "
|
|
86
|
+
"[/] "
|
|
87
|
+
"[yellow]Install missing pillars to achieve consciousness[/]"
|
|
88
|
+
)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""Input validation helpers for CLI commands.
|
|
2
|
+
|
|
3
|
+
Centralises sanitisation of user-supplied agent names, task IDs,
|
|
4
|
+
and file paths to guard against injection and traversal attacks.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
import click
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# ---------------------------------------------------------------------------
|
|
16
|
+
# Regex patterns
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
_AGENT_NAME_RE = re.compile(r"^[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?$")
|
|
20
|
+
_TASK_ID_RE = re.compile(r"^[0-9a-fA-F\-]+$")
|
|
21
|
+
_SOUL_NAME_RE = re.compile(r"^[a-zA-Z0-9]([a-zA-Z0-9\-_]*[a-zA-Z0-9])?$")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# ---------------------------------------------------------------------------
|
|
25
|
+
# Validators (raise click.BadParameter on failure)
|
|
26
|
+
# ---------------------------------------------------------------------------
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def validate_agent_name(name: str) -> str:
|
|
30
|
+
"""Validate an agent name: alphanumeric + hyphens, 1-64 chars."""
|
|
31
|
+
if not name or len(name) > 64:
|
|
32
|
+
raise click.BadParameter(
|
|
33
|
+
f"Agent name must be 1-64 characters, got {len(name) if name else 0}."
|
|
34
|
+
)
|
|
35
|
+
if not _AGENT_NAME_RE.match(name):
|
|
36
|
+
raise click.BadParameter(
|
|
37
|
+
f"Agent name '{name}' is invalid. "
|
|
38
|
+
"Use only letters, digits, and hyphens (cannot start/end with hyphen)."
|
|
39
|
+
)
|
|
40
|
+
return name
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def validate_task_id(task_id: str) -> str:
|
|
44
|
+
"""Validate a task ID: hex characters and hyphens only, 1-64 chars."""
|
|
45
|
+
if not task_id or len(task_id) > 64:
|
|
46
|
+
raise click.BadParameter(
|
|
47
|
+
f"Task ID must be 1-64 characters, got {len(task_id) if task_id else 0}."
|
|
48
|
+
)
|
|
49
|
+
if not _TASK_ID_RE.match(task_id):
|
|
50
|
+
raise click.BadParameter(
|
|
51
|
+
f"Task ID '{task_id}' is invalid. Use only hex characters (0-9, a-f) and hyphens."
|
|
52
|
+
)
|
|
53
|
+
return task_id
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def validate_soul_name(name: str) -> str:
|
|
57
|
+
"""Validate a soul name: alphanumeric + hyphens + underscores, 1-64 chars."""
|
|
58
|
+
if not name or len(name) > 64:
|
|
59
|
+
raise click.BadParameter(
|
|
60
|
+
f"Soul name must be 1-64 characters, got {len(name) if name else 0}."
|
|
61
|
+
)
|
|
62
|
+
if not _SOUL_NAME_RE.match(name):
|
|
63
|
+
raise click.BadParameter(
|
|
64
|
+
f"Soul name '{name}' is invalid. "
|
|
65
|
+
"Use only letters, digits, hyphens, and underscores."
|
|
66
|
+
)
|
|
67
|
+
return name
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def validate_file_path(path: str) -> str:
|
|
71
|
+
"""Reject path traversal sequences in user-supplied file paths."""
|
|
72
|
+
if ".." in path.split("/") or ".." in path.split("\\"):
|
|
73
|
+
raise click.BadParameter(
|
|
74
|
+
f"Path '{path}' contains '..' traversal sequences — rejected."
|
|
75
|
+
)
|
|
76
|
+
return path
|