@smilintux/skcapstone 0.1.0 → 0.2.4
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 +880 -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 +191 -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 +398 -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 +357 -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 +264 -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,171 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SKCapstone Complete Bundle Installer
|
|
3
|
+
# Installs skcapstone + skmemory + sksecurity + cloud9-protocol as a unified package
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
REPO_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
9
|
+
|
|
10
|
+
echo "🚀 SKCapstone Complete Bundle Installer"
|
|
11
|
+
echo "========================================"
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# Colors for output
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
YELLOW='\033[1;33m'
|
|
18
|
+
NC='\033[0m' # No Color
|
|
19
|
+
|
|
20
|
+
# Function to print colored output
|
|
21
|
+
print_status() {
|
|
22
|
+
echo -e "${GREEN}[INFO]${NC} $1"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
print_warning() {
|
|
26
|
+
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
print_error() {
|
|
30
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Check Python version
|
|
34
|
+
print_status "Checking Python version..."
|
|
35
|
+
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
|
|
36
|
+
REQUIRED_VERSION="3.10"
|
|
37
|
+
|
|
38
|
+
if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$PYTHON_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
|
|
39
|
+
print_error "Python 3.10+ required. Found: $PYTHON_VERSION"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
print_status "✓ Python $PYTHON_VERSION detected"
|
|
43
|
+
|
|
44
|
+
# Check pip
|
|
45
|
+
print_status "Checking pip..."
|
|
46
|
+
if ! command -v pip3 &> /dev/null; then
|
|
47
|
+
print_error "pip3 not found. Please install pip."
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
print_status "✓ pip3 available"
|
|
51
|
+
|
|
52
|
+
# Define package paths
|
|
53
|
+
SKMEMORY_PATH="${REPO_ROOT}/../skcapstone-repos/skmemory"
|
|
54
|
+
SKSECURITY_PATH="${REPO_ROOT}/../skcapstone-repos/sksecurity"
|
|
55
|
+
CLOUD9_PATH="${REPO_ROOT}/../skcapstone-repos/cloud9-python"
|
|
56
|
+
SKCAPSTONE_PATH="${REPO_ROOT}"
|
|
57
|
+
|
|
58
|
+
# Check if repos exist
|
|
59
|
+
print_status "Checking SK repositories..."
|
|
60
|
+
for repo_path in "$SKMEMORY_PATH" "$SKSECURITY_PATH" "$CLOUD9_PATH"; do
|
|
61
|
+
if [ ! -d "$repo_path" ]; then
|
|
62
|
+
print_error "Repository not found: $repo_path"
|
|
63
|
+
print_error "Please clone all SK repositories first:"
|
|
64
|
+
print_error " git clone https://github.com/smilinTux/skmemory.git"
|
|
65
|
+
print_error " git clone https://github.com/smilinTux/sksecurity.git"
|
|
66
|
+
print_error " git clone https://github.com/smilinTux/cloud9-python.git"
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
done
|
|
70
|
+
print_status "✓ All repositories found"
|
|
71
|
+
|
|
72
|
+
# Install in dependency order
|
|
73
|
+
print_status "Installing packages in dependency order..."
|
|
74
|
+
print_status "Order: cloud9 → skmemory → sksecurity → skcapstone"
|
|
75
|
+
|
|
76
|
+
cd "$CLOUD9_PATH"
|
|
77
|
+
print_status "Installing cloud9-protocol..."
|
|
78
|
+
pip3 install -e .
|
|
79
|
+
|
|
80
|
+
cd "$SKMEMORY_PATH"
|
|
81
|
+
print_status "Installing skmemory..."
|
|
82
|
+
pip3 install -e ".[skvector]"
|
|
83
|
+
|
|
84
|
+
cd "$SKSECURITY_PATH"
|
|
85
|
+
print_status "Installing sksecurity..."
|
|
86
|
+
pip3 install -e .
|
|
87
|
+
|
|
88
|
+
cd "$SKCAPSTONE_PATH"
|
|
89
|
+
print_status "Installing skcapstone (with all dependencies)..."
|
|
90
|
+
pip3 install -e .
|
|
91
|
+
|
|
92
|
+
# Verify installation
|
|
93
|
+
print_status "Verifying installation..."
|
|
94
|
+
python3 << 'EOF'
|
|
95
|
+
import sys
|
|
96
|
+
try:
|
|
97
|
+
import skmemory
|
|
98
|
+
print(" ✓ skmemory:", skmemory.__version__ if hasattr(skmemory, '__version__') else "installed")
|
|
99
|
+
except ImportError as e:
|
|
100
|
+
print(" ✗ skmemory: FAILED -", e)
|
|
101
|
+
sys.exit(1)
|
|
102
|
+
|
|
103
|
+
try:
|
|
104
|
+
import sksecurity
|
|
105
|
+
print(" ✓ sksecurity:", sksecurity.__version__ if hasattr(sksecurity, '__version__') else "installed")
|
|
106
|
+
except ImportError as e:
|
|
107
|
+
print(" ✗ sksecurity: FAILED -", e)
|
|
108
|
+
sys.exit(1)
|
|
109
|
+
|
|
110
|
+
try:
|
|
111
|
+
import cloud9_protocol
|
|
112
|
+
print(" ✓ cloud9-protocol:", cloud9_protocol.__version__ if hasattr(cloud9_protocol, '__version__') else "installed")
|
|
113
|
+
except ImportError as e:
|
|
114
|
+
print(" ✗ cloud9-protocol: FAILED -", e)
|
|
115
|
+
sys.exit(1)
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
import skcapstone
|
|
119
|
+
print(" ✓ skcapstone:", skcapstone.__version__ if hasattr(skcapstone, '__version__') else "installed")
|
|
120
|
+
except ImportError as e:
|
|
121
|
+
print(" ✗ skcapstone: FAILED -", e)
|
|
122
|
+
sys.exit(1)
|
|
123
|
+
|
|
124
|
+
print("\n✓ All packages installed successfully!")
|
|
125
|
+
EOF
|
|
126
|
+
|
|
127
|
+
# Setup agent memory
|
|
128
|
+
print_status "Setting up agent memory structure..."
|
|
129
|
+
mkdir -p ~/.skcapstone/agent/lumina/memory/{short,medium,long}
|
|
130
|
+
mkdir -p ~/.skcapstone/agent/lumina/coordination/{inbox,plebeian,archive}
|
|
131
|
+
mkdir -p ~/.skcapstone/agent/lumina/config
|
|
132
|
+
mkdir -p ~/.skcapstone/agent/lumina/cron
|
|
133
|
+
mkdir -p ~/.skcapstone/agent/lumina/logs
|
|
134
|
+
|
|
135
|
+
print_status "✓ Memory directories created"
|
|
136
|
+
|
|
137
|
+
# Check for SQLite
|
|
138
|
+
print_status "Checking SQLite configuration..."
|
|
139
|
+
python3 -c "
|
|
140
|
+
import sqlite3
|
|
141
|
+
print(f' ✓ SQLite version: {sqlite3.sqlite_version}')
|
|
142
|
+
print(f' ✓ SQLite module: {sqlite3.version}')
|
|
143
|
+
|
|
144
|
+
# Test database creation
|
|
145
|
+
test_db = '~/.skcapstone/agent/lumina/test.db'
|
|
146
|
+
import os
|
|
147
|
+
os.makedirs(os.path.dirname(os.path.expanduser(test_db)), exist_ok=True)
|
|
148
|
+
conn = sqlite3.connect(os.path.expanduser(test_db))
|
|
149
|
+
conn.execute('CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY)')
|
|
150
|
+
conn.close()
|
|
151
|
+
os.remove(os.path.expanduser(test_db))
|
|
152
|
+
print(' ✓ SQLite database operations working')
|
|
153
|
+
"
|
|
154
|
+
|
|
155
|
+
echo ""
|
|
156
|
+
echo "========================================"
|
|
157
|
+
echo "✅ Installation Complete!"
|
|
158
|
+
echo "========================================"
|
|
159
|
+
echo ""
|
|
160
|
+
echo "Installed packages:"
|
|
161
|
+
echo " • skcapstone (sovereign agent framework)"
|
|
162
|
+
echo " • skmemory (universal AI memory)"
|
|
163
|
+
echo " • sksecurity (enterprise security)"
|
|
164
|
+
echo " • cloud9-protocol (emotional continuity)"
|
|
165
|
+
echo ""
|
|
166
|
+
echo "Next steps:"
|
|
167
|
+
echo " 1. Run: skcapstone doctor"
|
|
168
|
+
echo " 2. Run: skcapstone init"
|
|
169
|
+
echo " 3. Check for updates: ~/.skcapstone/scripts/check-updates.py"
|
|
170
|
+
echo ""
|
|
171
|
+
echo "For help: skcapstone --help"
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Sovereign Agent Suite Installer for Windows.
|
|
5
|
+
|
|
6
|
+
.DESCRIPTION
|
|
7
|
+
Installs all SK* packages into a dedicated virtualenv at
|
|
8
|
+
$env:LOCALAPPDATA\skenv. This keeps the system Python clean.
|
|
9
|
+
|
|
10
|
+
.PARAMETER Dev
|
|
11
|
+
Include dev/test tools (pytest, ruff, black, pytest-cov).
|
|
12
|
+
|
|
13
|
+
.PARAMETER Force
|
|
14
|
+
Remove and recreate the virtualenv from scratch.
|
|
15
|
+
|
|
16
|
+
.EXAMPLE
|
|
17
|
+
.\install.ps1
|
|
18
|
+
.\install.ps1 -Dev
|
|
19
|
+
.\install.ps1 -Force -Dev
|
|
20
|
+
#>
|
|
21
|
+
|
|
22
|
+
[CmdletBinding()]
|
|
23
|
+
param(
|
|
24
|
+
[switch]$Dev,
|
|
25
|
+
[switch]$Force
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
Set-StrictMode -Version Latest
|
|
29
|
+
$ErrorActionPreference = 'Stop'
|
|
30
|
+
|
|
31
|
+
$SKENV = Join-Path $env:LOCALAPPDATA 'skenv'
|
|
32
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
33
|
+
$RepoRoot = Split-Path -Parent $ScriptDir
|
|
34
|
+
|
|
35
|
+
Write-Host '=== Sovereign Agent Suite Installer (Windows) ===' -ForegroundColor Cyan
|
|
36
|
+
Write-Host ''
|
|
37
|
+
|
|
38
|
+
# ---------------------------------------------------------------------------
|
|
39
|
+
# Step 1: Check prerequisites — Python 3.10+
|
|
40
|
+
# ---------------------------------------------------------------------------
|
|
41
|
+
$Python = $null
|
|
42
|
+
foreach ($candidate in @('python3', 'python')) {
|
|
43
|
+
try {
|
|
44
|
+
$verOutput = & $candidate -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>$null
|
|
45
|
+
if ($LASTEXITCODE -eq 0 -and $verOutput) {
|
|
46
|
+
$parts = $verOutput.Split('.')
|
|
47
|
+
$major = [int]$parts[0]
|
|
48
|
+
$minor = [int]$parts[1]
|
|
49
|
+
if ($major -ge 3 -and $minor -ge 10) {
|
|
50
|
+
$Python = $candidate
|
|
51
|
+
break
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
# candidate not found, try next
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (-not $Python) {
|
|
60
|
+
Write-Host 'ERROR: Python 3.10+ required. Found none on PATH.' -ForegroundColor Red
|
|
61
|
+
Write-Host 'Download from https://www.python.org/downloads/' -ForegroundColor Red
|
|
62
|
+
exit 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
$pyVersion = & $Python --version 2>&1
|
|
66
|
+
Write-Host "[1/6] Using $Python ($pyVersion)" -ForegroundColor Green
|
|
67
|
+
|
|
68
|
+
# ---------------------------------------------------------------------------
|
|
69
|
+
# Step 2: Create virtualenv
|
|
70
|
+
# ---------------------------------------------------------------------------
|
|
71
|
+
if ($Force -and (Test-Path $SKENV)) {
|
|
72
|
+
Write-Host '[2/6] Removing existing venv (-Force)...' -ForegroundColor Yellow
|
|
73
|
+
Remove-Item -Recurse -Force $SKENV
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (-not (Test-Path $SKENV)) {
|
|
77
|
+
Write-Host "[2/6] Creating virtualenv at $SKENV..."
|
|
78
|
+
& $Python -m venv $SKENV
|
|
79
|
+
if ($LASTEXITCODE -ne 0) {
|
|
80
|
+
Write-Host 'ERROR: Failed to create virtualenv.' -ForegroundColor Red
|
|
81
|
+
exit 1
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
Write-Host "[2/6] Virtualenv exists at $SKENV"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
$Pip = Join-Path $SKENV 'Scripts\pip.exe'
|
|
88
|
+
& $Pip install --upgrade pip -q 2>$null | Out-Null
|
|
89
|
+
|
|
90
|
+
# ---------------------------------------------------------------------------
|
|
91
|
+
# Step 3: Install SK* packages
|
|
92
|
+
# ---------------------------------------------------------------------------
|
|
93
|
+
Write-Host '[3/6] Installing SK* packages...'
|
|
94
|
+
|
|
95
|
+
$ParentDir = Split-Path -Parent $RepoRoot
|
|
96
|
+
$PillarDir = Join-Path $ParentDir 'pillar-repos'
|
|
97
|
+
|
|
98
|
+
function Install-Pkg {
|
|
99
|
+
<#
|
|
100
|
+
.SYNOPSIS
|
|
101
|
+
Install a package editable from local paths, falling back to PyPI.
|
|
102
|
+
#>
|
|
103
|
+
param(
|
|
104
|
+
[string]$Name,
|
|
105
|
+
[string]$Extras,
|
|
106
|
+
[string[]]$Paths
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
foreach ($path in $Paths) {
|
|
110
|
+
if (Test-Path $path) {
|
|
111
|
+
if ($Extras) {
|
|
112
|
+
& $Pip install -e "${path}[$Extras]" -q 2>$null | Out-Null
|
|
113
|
+
if ($LASTEXITCODE -eq 0) {
|
|
114
|
+
Write-Host " $Name (editable: $path)"
|
|
115
|
+
return
|
|
116
|
+
}
|
|
117
|
+
# Retry without extras
|
|
118
|
+
& $Pip install -e $path -q 2>$null | Out-Null
|
|
119
|
+
if ($LASTEXITCODE -eq 0) {
|
|
120
|
+
Write-Host " $Name (editable, no extras: $path)"
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
& $Pip install -e $path -q 2>$null | Out-Null
|
|
125
|
+
if ($LASTEXITCODE -eq 0) {
|
|
126
|
+
Write-Host " $Name (editable: $path)"
|
|
127
|
+
return
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# Fall back to PyPI
|
|
134
|
+
if ($Extras) {
|
|
135
|
+
& $Pip install "${Name}[$Extras]" -q 2>$null | Out-Null
|
|
136
|
+
if ($LASTEXITCODE -eq 0) {
|
|
137
|
+
Write-Host " $Name (PyPI)"
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
& $Pip install $Name -q 2>$null | Out-Null
|
|
141
|
+
if ($LASTEXITCODE -eq 0) {
|
|
142
|
+
Write-Host " $Name (PyPI, no extras)"
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
& $Pip install $Name -q 2>$null | Out-Null
|
|
147
|
+
if ($LASTEXITCODE -eq 0) {
|
|
148
|
+
Write-Host " $Name (PyPI)"
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
Write-Host " $Name (FAILED -- skipping)" -ForegroundColor Red
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# Core packages (in dependency order)
|
|
157
|
+
Install-Pkg -Name 'capauth' -Extras 'all' -Paths @((Join-Path $PillarDir 'capauth'), (Join-Path $ParentDir 'capauth'))
|
|
158
|
+
Install-Pkg -Name 'skmemory' -Extras '' -Paths @((Join-Path $PillarDir 'skmemory'), (Join-Path $ParentDir 'skmemory'))
|
|
159
|
+
Install-Pkg -Name 'skcomm' -Extras 'cli,crypto,discovery,api' -Paths @((Join-Path $PillarDir 'skcomm'), (Join-Path $ParentDir 'skcomm'))
|
|
160
|
+
Install-Pkg -Name 'skcapstone' -Extras '' -Paths @($RepoRoot)
|
|
161
|
+
Install-Pkg -Name 'skchat-sovereign' -Extras 'all' -Paths @((Join-Path $ParentDir 'skchat'))
|
|
162
|
+
Install-Pkg -Name 'skseal' -Extras '' -Paths @((Join-Path $ParentDir 'skseal'))
|
|
163
|
+
Install-Pkg -Name 'skskills' -Extras '' -Paths @((Join-Path $ParentDir 'skskills'))
|
|
164
|
+
Install-Pkg -Name 'sksecurity' -Extras '' -Paths @((Join-Path $ParentDir 'sksecurity'))
|
|
165
|
+
|
|
166
|
+
# ---------------------------------------------------------------------------
|
|
167
|
+
# Step 4: Dev tools (optional)
|
|
168
|
+
# ---------------------------------------------------------------------------
|
|
169
|
+
if ($Dev) {
|
|
170
|
+
Write-Host '[4/6] Installing dev tools...'
|
|
171
|
+
& $Pip install pytest pytest-cov ruff black -q 2>$null | Out-Null
|
|
172
|
+
Write-Host ' pytest, pytest-cov, ruff, black'
|
|
173
|
+
} else {
|
|
174
|
+
Write-Host '[4/6] Skipping dev tools (use -Dev to include)'
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
# ---------------------------------------------------------------------------
|
|
178
|
+
# Step 5: Register skills & MCP servers
|
|
179
|
+
# ---------------------------------------------------------------------------
|
|
180
|
+
Write-Host '[5/6] Registering skills and MCP servers...'
|
|
181
|
+
$skcapstoneExe = Join-Path $SKENV 'Scripts\skcapstone.exe'
|
|
182
|
+
if (Test-Path $skcapstoneExe) {
|
|
183
|
+
try {
|
|
184
|
+
& $skcapstoneExe register 2>$null | Out-Null
|
|
185
|
+
if ($LASTEXITCODE -eq 0) {
|
|
186
|
+
Write-Host ' Registration complete'
|
|
187
|
+
} else {
|
|
188
|
+
Write-Host ' (registration skipped -- run "skcapstone register" manually)'
|
|
189
|
+
}
|
|
190
|
+
} catch {
|
|
191
|
+
Write-Host ' (registration skipped -- run "skcapstone register" manually)'
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
Write-Host ' (skcapstone not found -- registration skipped)'
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
# ---------------------------------------------------------------------------
|
|
198
|
+
# Step 6: Verify installation & PATH setup
|
|
199
|
+
# ---------------------------------------------------------------------------
|
|
200
|
+
Write-Host '[6/6] Verifying installation...'
|
|
201
|
+
|
|
202
|
+
$ScriptsDir = Join-Path $SKENV 'Scripts'
|
|
203
|
+
$failures = 0
|
|
204
|
+
foreach ($cmd in @('skcomm', 'skcapstone', 'capauth', 'skmemory')) {
|
|
205
|
+
$exe = Join-Path $ScriptsDir "$cmd.exe"
|
|
206
|
+
if (Test-Path $exe) {
|
|
207
|
+
try {
|
|
208
|
+
& $exe --version 2>$null | Out-Null
|
|
209
|
+
if ($LASTEXITCODE -eq 0) {
|
|
210
|
+
Write-Host " $cmd OK" -ForegroundColor Green
|
|
211
|
+
} else {
|
|
212
|
+
Write-Host " $cmd FAILED" -ForegroundColor Yellow
|
|
213
|
+
$failures++
|
|
214
|
+
}
|
|
215
|
+
} catch {
|
|
216
|
+
Write-Host " $cmd FAILED" -ForegroundColor Yellow
|
|
217
|
+
$failures++
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
Write-Host " $cmd not found" -ForegroundColor Yellow
|
|
221
|
+
$failures++
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
Write-Host ''
|
|
226
|
+
|
|
227
|
+
# Add Scripts dir to user PATH if not present
|
|
228
|
+
$userPath = [Environment]::GetEnvironmentVariable('PATH', 'User')
|
|
229
|
+
if ($userPath -and $userPath.Split(';') -contains $ScriptsDir) {
|
|
230
|
+
Write-Host "PATH already includes $ScriptsDir"
|
|
231
|
+
} else {
|
|
232
|
+
Write-Host "Adding $ScriptsDir to user PATH..." -ForegroundColor Yellow
|
|
233
|
+
if ($userPath) {
|
|
234
|
+
$newPath = "$ScriptsDir;$userPath"
|
|
235
|
+
} else {
|
|
236
|
+
$newPath = $ScriptsDir
|
|
237
|
+
}
|
|
238
|
+
[Environment]::SetEnvironmentVariable('PATH', $newPath, 'User')
|
|
239
|
+
# Also update current session
|
|
240
|
+
$env:PATH = "$ScriptsDir;$env:PATH"
|
|
241
|
+
Write-Host " Added to user PATH. Restart your terminal for it to take effect."
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
Write-Host ''
|
|
245
|
+
if ($failures -eq 0) {
|
|
246
|
+
Write-Host '=== Installation complete ===' -ForegroundColor Green
|
|
247
|
+
} else {
|
|
248
|
+
Write-Host "=== Installation complete with $failures warning(s) ===" -ForegroundColor Yellow
|
|
249
|
+
}
|
|
250
|
+
Write-Host ''
|
|
251
|
+
Write-Host "Commands available: skcomm, skcapstone, capauth, skchat, skseal, skmemory, skskills, sksecurity"
|
|
252
|
+
Write-Host "Venv location: $SKENV"
|
|
253
|
+
Write-Host "To activate: & $SKENV\Scripts\Activate.ps1"
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# install.sh — Sovereign Agent Suite Installer
|
|
3
|
+
#
|
|
4
|
+
# Installs all SK* packages into a dedicated virtualenv at ~/.skenv.
|
|
5
|
+
# This keeps the system Python clean and avoids --break-system-packages.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# bash scripts/install.sh # Standard install
|
|
9
|
+
# bash scripts/install.sh --dev # Include dev/test tools
|
|
10
|
+
# bash scripts/install.sh --force # Recreate venv from scratch
|
|
11
|
+
#
|
|
12
|
+
# After install, add to your shell profile:
|
|
13
|
+
# export PATH="$HOME/.skenv/bin:$PATH"
|
|
14
|
+
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
SKENV="$HOME/.skenv"
|
|
18
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
19
|
+
REPO_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
20
|
+
DEV_MODE=false
|
|
21
|
+
FORCE=false
|
|
22
|
+
|
|
23
|
+
for arg in "$@"; do
|
|
24
|
+
case "$arg" in
|
|
25
|
+
--dev) DEV_MODE=true ;;
|
|
26
|
+
--force) FORCE=true ;;
|
|
27
|
+
esac
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
echo "=== Sovereign Agent Suite Installer ==="
|
|
31
|
+
echo ""
|
|
32
|
+
|
|
33
|
+
# ---------------------------------------------------------------------------
|
|
34
|
+
# Step 1: Check prerequisites
|
|
35
|
+
# ---------------------------------------------------------------------------
|
|
36
|
+
PYTHON=""
|
|
37
|
+
for candidate in python3.12 python3.11 python3; do
|
|
38
|
+
if command -v "$candidate" &>/dev/null; then
|
|
39
|
+
ver=$("$candidate" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
|
40
|
+
major="${ver%%.*}"
|
|
41
|
+
minor="${ver##*.}"
|
|
42
|
+
if [[ "$major" -ge 3 ]] && [[ "$minor" -ge 10 ]]; then
|
|
43
|
+
PYTHON="$candidate"
|
|
44
|
+
break
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
done
|
|
48
|
+
|
|
49
|
+
if [[ -z "$PYTHON" ]]; then
|
|
50
|
+
echo "ERROR: Python 3.10+ required. Found none."
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
echo "[1/6] Using $PYTHON ($($PYTHON --version 2>&1))"
|
|
55
|
+
|
|
56
|
+
# ---------------------------------------------------------------------------
|
|
57
|
+
# Step 2: Create virtualenv
|
|
58
|
+
# ---------------------------------------------------------------------------
|
|
59
|
+
if [[ "$FORCE" == "true" ]] && [[ -d "$SKENV" ]]; then
|
|
60
|
+
echo "[2/6] Removing existing venv (--force)..."
|
|
61
|
+
rm -rf "$SKENV"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
if [[ ! -d "$SKENV" ]]; then
|
|
65
|
+
echo "[2/6] Creating virtualenv at $SKENV..."
|
|
66
|
+
"$PYTHON" -m venv "$SKENV"
|
|
67
|
+
else
|
|
68
|
+
echo "[2/6] Virtualenv exists at $SKENV"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
PIP="$SKENV/bin/pip"
|
|
72
|
+
$PIP install --upgrade pip -q 2>/dev/null
|
|
73
|
+
|
|
74
|
+
# ---------------------------------------------------------------------------
|
|
75
|
+
# Step 3: Install SK* packages
|
|
76
|
+
# ---------------------------------------------------------------------------
|
|
77
|
+
echo "[3/6] Installing SK* packages..."
|
|
78
|
+
|
|
79
|
+
# Helper: install editable if local dir exists, else from PyPI
|
|
80
|
+
install_pkg() {
|
|
81
|
+
local name="$1"
|
|
82
|
+
local extras="${2:-}"
|
|
83
|
+
local paths="${3:-}"
|
|
84
|
+
|
|
85
|
+
for path in $paths; do
|
|
86
|
+
if [[ -d "$path" ]]; then
|
|
87
|
+
if [[ -n "$extras" ]]; then
|
|
88
|
+
$PIP install -e "${path}[${extras}]" -q 2>/dev/null && echo " $name (editable: $path)" && return 0
|
|
89
|
+
# Retry without extras if they fail
|
|
90
|
+
$PIP install -e "$path" -q 2>/dev/null && echo " $name (editable, no extras: $path)" && return 0
|
|
91
|
+
else
|
|
92
|
+
$PIP install -e "$path" -q 2>/dev/null && echo " $name (editable: $path)" && return 0
|
|
93
|
+
fi
|
|
94
|
+
fi
|
|
95
|
+
done
|
|
96
|
+
|
|
97
|
+
# Fall back to PyPI
|
|
98
|
+
if [[ -n "$extras" ]]; then
|
|
99
|
+
$PIP install "${name}[${extras}]" -q 2>/dev/null && echo " $name (PyPI)" && return 0
|
|
100
|
+
$PIP install "$name" -q 2>/dev/null && echo " $name (PyPI, no extras)" && return 0
|
|
101
|
+
else
|
|
102
|
+
$PIP install "$name" -q 2>/dev/null && echo " $name (PyPI)" && return 0
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
echo " $name (FAILED — skipping)" && return 1
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Parent dir of skcapstone (where sibling repos might live)
|
|
109
|
+
PARENT="$(dirname "$REPO_ROOT")"
|
|
110
|
+
PILLAR="$PARENT/pillar-repos"
|
|
111
|
+
|
|
112
|
+
# Core packages (in dependency order)
|
|
113
|
+
install_pkg "capauth" "all" "$PILLAR/capauth $PARENT/capauth"
|
|
114
|
+
install_pkg "skmemory" "" "$PILLAR/skmemory $PARENT/skmemory"
|
|
115
|
+
install_pkg "skcomm" "cli,crypto,discovery,api" "$PILLAR/skcomm $PARENT/skcomm"
|
|
116
|
+
install_pkg "skcapstone" "" "$REPO_ROOT"
|
|
117
|
+
install_pkg "skchat-sovereign" "all" "$PARENT/skchat"
|
|
118
|
+
install_pkg "skseal" "" "$PARENT/skseal"
|
|
119
|
+
install_pkg "skskills" "" "$PARENT/skskills"
|
|
120
|
+
install_pkg "sksecurity" "" "$PARENT/sksecurity"
|
|
121
|
+
|
|
122
|
+
# ---------------------------------------------------------------------------
|
|
123
|
+
# Step 4: Dev tools (optional)
|
|
124
|
+
# ---------------------------------------------------------------------------
|
|
125
|
+
if [[ "$DEV_MODE" == "true" ]]; then
|
|
126
|
+
echo "[4/6] Installing dev tools..."
|
|
127
|
+
$PIP install pytest pytest-cov ruff black -q 2>/dev/null
|
|
128
|
+
echo " pytest, pytest-cov, ruff, black"
|
|
129
|
+
else
|
|
130
|
+
echo "[4/6] Skipping dev tools (use --dev to include)"
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# ---------------------------------------------------------------------------
|
|
134
|
+
# Step 5: Register skills & MCP servers
|
|
135
|
+
# ---------------------------------------------------------------------------
|
|
136
|
+
echo "[5/6] Registering skills and MCP servers..."
|
|
137
|
+
"$SKENV/bin/skcapstone" register 2>/dev/null && echo " Registration complete" || echo " (registration skipped — run 'skcapstone register' manually)"
|
|
138
|
+
|
|
139
|
+
# ---------------------------------------------------------------------------
|
|
140
|
+
# Step 6: PATH setup
|
|
141
|
+
# ---------------------------------------------------------------------------
|
|
142
|
+
echo "[6/6] Verifying installation..."
|
|
143
|
+
|
|
144
|
+
failures=0
|
|
145
|
+
for cmd in skcomm skcapstone capauth skmemory; do
|
|
146
|
+
if "$SKENV/bin/$cmd" --version &>/dev/null; then
|
|
147
|
+
echo " $cmd OK"
|
|
148
|
+
else
|
|
149
|
+
echo " $cmd FAILED"
|
|
150
|
+
failures=$((failures + 1))
|
|
151
|
+
fi
|
|
152
|
+
done
|
|
153
|
+
|
|
154
|
+
echo ""
|
|
155
|
+
|
|
156
|
+
# Check if PATH is configured
|
|
157
|
+
if echo "$PATH" | grep -q "$SKENV/bin"; then
|
|
158
|
+
echo "PATH already includes $SKENV/bin"
|
|
159
|
+
else
|
|
160
|
+
echo "Add this to your ~/.bashrc (or ~/.zshrc):"
|
|
161
|
+
echo ""
|
|
162
|
+
echo " export PATH=\"\$HOME/.skenv/bin:\$PATH\""
|
|
163
|
+
echo ""
|
|
164
|
+
|
|
165
|
+
# Auto-add if not present
|
|
166
|
+
for rcfile in "$HOME/.bashrc" "$HOME/.zshrc"; do
|
|
167
|
+
if [[ -f "$rcfile" ]] && ! grep -q ".skenv/bin" "$rcfile"; then
|
|
168
|
+
echo "" >> "$rcfile"
|
|
169
|
+
echo '# SK* sovereign suite — installed in dedicated venv' >> "$rcfile"
|
|
170
|
+
echo 'export PATH="$HOME/.skenv/bin:$PATH"' >> "$rcfile"
|
|
171
|
+
echo " (Added to $rcfile)"
|
|
172
|
+
fi
|
|
173
|
+
done
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
echo ""
|
|
177
|
+
if [[ "$failures" -eq 0 ]]; then
|
|
178
|
+
echo "=== Installation complete ==="
|
|
179
|
+
else
|
|
180
|
+
echo "=== Installation complete with $failures warning(s) ==="
|
|
181
|
+
fi
|
|
182
|
+
echo ""
|
|
183
|
+
echo "Commands available: skcomm, skcapstone, capauth, skchat, skseal, skmemory, skskills, sksecurity"
|
|
184
|
+
echo "Venv location: $SKENV"
|
|
185
|
+
echo "To activate: source $SKENV/bin/activate"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# -------------------------------------------------------------------
|
|
3
|
+
# skcapstone MCP server launcher (tool-agnostic)
|
|
4
|
+
#
|
|
5
|
+
# Works with: Cursor, Claude Desktop, Claude Code CLI, Windsurf,
|
|
6
|
+
# Aider, Cline, or any MCP client that speaks stdio.
|
|
7
|
+
#
|
|
8
|
+
# The script auto-detects the Python virtualenv and launches the
|
|
9
|
+
# MCP server on stdio. No hardcoded paths required in client configs.
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
# ./skcapstone/scripts/mcp-serve.sh (from repo root)
|
|
13
|
+
# bash skcapstone/scripts/mcp-serve.sh (explicit bash)
|
|
14
|
+
# -------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
19
|
+
SKCAPSTONE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
20
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
21
|
+
|
|
22
|
+
# --- Locate the virtualenv ---
|
|
23
|
+
# Priority: SKCAPSTONE_VENV env var > first venv with mcp installed
|
|
24
|
+
# Candidates: skmemory/.venv (shared project venv) > skcapstone/.venv > repo .venv
|
|
25
|
+
find_venv() {
|
|
26
|
+
if [[ -n "${SKCAPSTONE_VENV:-}" ]] && [[ -f "$SKCAPSTONE_VENV/bin/python" ]]; then
|
|
27
|
+
echo "$SKCAPSTONE_VENV"
|
|
28
|
+
return
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
local candidates=(
|
|
32
|
+
"$REPO_ROOT/skmemory/.venv"
|
|
33
|
+
"$SKCAPSTONE_DIR/.venv"
|
|
34
|
+
"$REPO_ROOT/.venv"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
for venv in "${candidates[@]}"; do
|
|
38
|
+
if [[ -f "$venv/bin/python" ]]; then
|
|
39
|
+
if "$venv/bin/python" -c "import mcp" 2>/dev/null; then
|
|
40
|
+
echo "$venv"
|
|
41
|
+
return
|
|
42
|
+
fi
|
|
43
|
+
fi
|
|
44
|
+
done
|
|
45
|
+
|
|
46
|
+
# Fallback: return first venv that exists (may need pip install mcp)
|
|
47
|
+
for venv in "${candidates[@]}"; do
|
|
48
|
+
if [[ -f "$venv/bin/python" ]]; then
|
|
49
|
+
echo "$venv"
|
|
50
|
+
return
|
|
51
|
+
fi
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
return 1
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
VENV_DIR="$(find_venv)" || {
|
|
58
|
+
echo "ERROR: No Python virtualenv found." >&2
|
|
59
|
+
echo "Create one with: python -m venv skcapstone/.venv && skcapstone/.venv/bin/pip install -e skcapstone/" >&2
|
|
60
|
+
exit 1
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
PYTHON="$VENV_DIR/bin/python"
|
|
64
|
+
|
|
65
|
+
# --- Ensure skcapstone is importable ---
|
|
66
|
+
export PYTHONPATH="${SKCAPSTONE_DIR}/src${PYTHONPATH:+:$PYTHONPATH}"
|
|
67
|
+
|
|
68
|
+
# --- Launch MCP server on stdio ---
|
|
69
|
+
exec "$PYTHON" -m skcapstone.mcp_server "$@"
|