@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,113 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
REM -------------------------------------------------------------------
|
|
3
|
+
REM skcapstone MCP server launcher for Windows (cmd.exe)
|
|
4
|
+
REM Task: e5f81637
|
|
5
|
+
REM
|
|
6
|
+
REM Auto-detects the Python virtualenv and launches the MCP server
|
|
7
|
+
REM on stdio transport. Works with any MCP client that speaks stdio.
|
|
8
|
+
REM
|
|
9
|
+
REM Usage:
|
|
10
|
+
REM scripts\mcp-server.bat
|
|
11
|
+
REM
|
|
12
|
+
REM Environment overrides:
|
|
13
|
+
REM set SKCAPSTONE_VENV=C:\path\to\venv
|
|
14
|
+
REM set SKMEMORY_HOME=C:\path\to\memory
|
|
15
|
+
REM -------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
setlocal enabledelayedexpansion
|
|
18
|
+
|
|
19
|
+
set "SCRIPT_DIR=%~dp0"
|
|
20
|
+
REM Remove trailing backslash
|
|
21
|
+
set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
|
|
22
|
+
|
|
23
|
+
REM Navigate up one level to get skcapstone project dir
|
|
24
|
+
for %%I in ("%SCRIPT_DIR%\..") do set "SKCAPSTONE_DIR=%%~fI"
|
|
25
|
+
|
|
26
|
+
set "PYTHON="
|
|
27
|
+
|
|
28
|
+
REM --- 1. Explicit SKCAPSTONE_VENV override ---
|
|
29
|
+
if defined SKCAPSTONE_VENV (
|
|
30
|
+
if exist "%SKCAPSTONE_VENV%\Scripts\python.exe" (
|
|
31
|
+
set "PYTHON=%SKCAPSTONE_VENV%\Scripts\python.exe"
|
|
32
|
+
goto :found
|
|
33
|
+
)
|
|
34
|
+
if exist "%SKCAPSTONE_VENV%\bin\python" (
|
|
35
|
+
set "PYTHON=%SKCAPSTONE_VENV%\bin\python"
|
|
36
|
+
goto :found
|
|
37
|
+
)
|
|
38
|
+
echo WARNING: SKCAPSTONE_VENV=%SKCAPSTONE_VENV% set but python not found, falling back. >&2
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
REM --- 2. Standard skenv on Windows (%LOCALAPPDATA%\skenv) ---
|
|
42
|
+
if exist "%LOCALAPPDATA%\skenv\Scripts\python.exe" (
|
|
43
|
+
"%LOCALAPPDATA%\skenv\Scripts\python.exe" -c "import skcapstone" >nul 2>&1
|
|
44
|
+
if !errorlevel! equ 0 (
|
|
45
|
+
set "PYTHON=%LOCALAPPDATA%\skenv\Scripts\python.exe"
|
|
46
|
+
goto :found
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
REM --- 3. Standard skenv Unix-style (%USERPROFILE%\.skenv) ---
|
|
51
|
+
if exist "%USERPROFILE%\.skenv\Scripts\python.exe" (
|
|
52
|
+
"%USERPROFILE%\.skenv\Scripts\python.exe" -c "import skcapstone" >nul 2>&1
|
|
53
|
+
if !errorlevel! equ 0 (
|
|
54
|
+
set "PYTHON=%USERPROFILE%\.skenv\Scripts\python.exe"
|
|
55
|
+
goto :found
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
REM --- 4. Project-local .venv ---
|
|
60
|
+
if exist "%SKCAPSTONE_DIR%\.venv\Scripts\python.exe" (
|
|
61
|
+
"%SKCAPSTONE_DIR%\.venv\Scripts\python.exe" -c "import skcapstone" >nul 2>&1
|
|
62
|
+
if !errorlevel! equ 0 (
|
|
63
|
+
set "PYTHON=%SKCAPSTONE_DIR%\.venv\Scripts\python.exe"
|
|
64
|
+
goto :found
|
|
65
|
+
)
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
REM --- 5. System Python ---
|
|
69
|
+
where python >nul 2>&1
|
|
70
|
+
if %errorlevel% equ 0 (
|
|
71
|
+
python -c "import skcapstone" >nul 2>&1
|
|
72
|
+
if !errorlevel! equ 0 (
|
|
73
|
+
set "PYTHON=python"
|
|
74
|
+
goto :found
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
where python3 >nul 2>&1
|
|
79
|
+
if %errorlevel% equ 0 (
|
|
80
|
+
python3 -c "import skcapstone" >nul 2>&1
|
|
81
|
+
if !errorlevel! equ 0 (
|
|
82
|
+
set "PYTHON=python3"
|
|
83
|
+
goto :found
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
REM --- Not found ---
|
|
88
|
+
echo ERROR: Could not find a Python interpreter with skcapstone installed. >&2
|
|
89
|
+
echo. >&2
|
|
90
|
+
echo Install with: >&2
|
|
91
|
+
echo scripts\install.bat >&2
|
|
92
|
+
echo. >&2
|
|
93
|
+
echo Or point to an existing venv: >&2
|
|
94
|
+
echo set SKCAPSTONE_VENV=C:\path\to\venv >&2
|
|
95
|
+
echo scripts\mcp-server.bat >&2
|
|
96
|
+
exit /b 1
|
|
97
|
+
|
|
98
|
+
:found
|
|
99
|
+
|
|
100
|
+
REM --- Set environment variables ---
|
|
101
|
+
if not defined SKMEMORY_HOME set "SKMEMORY_HOME=%USERPROFILE%\.skcapstone\memory"
|
|
102
|
+
if not defined SKCAPSTONE_HOME set "SKCAPSTONE_HOME=%USERPROFILE%\.skcapstone"
|
|
103
|
+
|
|
104
|
+
REM Ensure skcapstone is importable
|
|
105
|
+
if defined PYTHONPATH (
|
|
106
|
+
set "PYTHONPATH=%SKCAPSTONE_DIR%\src;%PYTHONPATH%"
|
|
107
|
+
) else (
|
|
108
|
+
set "PYTHONPATH=%SKCAPSTONE_DIR%\src"
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
REM --- Launch MCP server on stdio ---
|
|
112
|
+
%PYTHON% -m skcapstone.mcp_server %*
|
|
113
|
+
exit /b %errorlevel%
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
SKCapstone MCP server launcher for Windows (PowerShell).
|
|
5
|
+
Task: e5f81637
|
|
6
|
+
|
|
7
|
+
.DESCRIPTION
|
|
8
|
+
Auto-detects the Python virtualenv and launches the MCP server
|
|
9
|
+
on stdio transport. Works with Cursor, Claude Desktop, Claude
|
|
10
|
+
Code CLI, Windsurf, Aider, Cline, or any stdio MCP client.
|
|
11
|
+
|
|
12
|
+
.PARAMETER VenvPath
|
|
13
|
+
Override the virtualenv path (instead of auto-detection).
|
|
14
|
+
|
|
15
|
+
.EXAMPLE
|
|
16
|
+
.\scripts\mcp-server.ps1
|
|
17
|
+
.\scripts\mcp-server.ps1 -VenvPath C:\Users\me\.skenv
|
|
18
|
+
|
|
19
|
+
.NOTES
|
|
20
|
+
Environment overrides:
|
|
21
|
+
SKCAPSTONE_VENV - force a specific virtualenv
|
|
22
|
+
SKMEMORY_HOME - override memory storage location
|
|
23
|
+
#>
|
|
24
|
+
|
|
25
|
+
[CmdletBinding()]
|
|
26
|
+
param(
|
|
27
|
+
[string]$VenvPath
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
Set-StrictMode -Version Latest
|
|
31
|
+
$ErrorActionPreference = 'Stop'
|
|
32
|
+
|
|
33
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
34
|
+
$SkcapstoneDir = Split-Path -Parent $ScriptDir
|
|
35
|
+
|
|
36
|
+
# --- Locate the Python interpreter ---
|
|
37
|
+
function Find-Python {
|
|
38
|
+
# 1. Explicit parameter or env var
|
|
39
|
+
$ExplicitVenv = if ($VenvPath) { $VenvPath } else { $env:SKCAPSTONE_VENV }
|
|
40
|
+
if ($ExplicitVenv) {
|
|
41
|
+
$py = Join-Path $ExplicitVenv 'Scripts\python.exe'
|
|
42
|
+
if (Test-Path $py) { return $py }
|
|
43
|
+
$py = Join-Path $ExplicitVenv 'bin\python'
|
|
44
|
+
if (Test-Path $py) { return $py }
|
|
45
|
+
Write-Warning "SKCAPSTONE_VENV=$ExplicitVenv set but python not found there, falling back."
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# 2. Standard skenv location on Windows
|
|
49
|
+
$SkenvWin = Join-Path $env:LOCALAPPDATA 'skenv\Scripts\python.exe'
|
|
50
|
+
if (Test-Path $SkenvWin) {
|
|
51
|
+
$check = & $SkenvWin -c "import skcapstone" 2>&1
|
|
52
|
+
if ($LASTEXITCODE -eq 0) { return $SkenvWin }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# 3. Standard skenv location (Unix-style, e.g. WSL path in Windows)
|
|
56
|
+
$SkenvUnix = Join-Path $HOME '.skenv\bin\python'
|
|
57
|
+
if (Test-Path $SkenvUnix) {
|
|
58
|
+
$check = & $SkenvUnix -c "import skcapstone" 2>&1
|
|
59
|
+
if ($LASTEXITCODE -eq 0) { return $SkenvUnix }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# 4. Project-local .venv
|
|
63
|
+
$LocalVenv = Join-Path $SkcapstoneDir '.venv\Scripts\python.exe'
|
|
64
|
+
if (Test-Path $LocalVenv) {
|
|
65
|
+
$check = & $LocalVenv -c "import skcapstone" 2>&1
|
|
66
|
+
if ($LASTEXITCODE -eq 0) { return $LocalVenv }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
# 5. System Python
|
|
70
|
+
foreach ($cmd in @('python', 'python3')) {
|
|
71
|
+
$sysPath = Get-Command $cmd -ErrorAction SilentlyContinue
|
|
72
|
+
if ($sysPath) {
|
|
73
|
+
$check = & $sysPath.Source -c "import skcapstone" 2>&1
|
|
74
|
+
if ($LASTEXITCODE -eq 0) { return $sysPath.Source }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return $null
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
$Python = Find-Python
|
|
82
|
+
if (-not $Python) {
|
|
83
|
+
Write-Error @"
|
|
84
|
+
Could not find a Python interpreter with skcapstone installed.
|
|
85
|
+
|
|
86
|
+
Install with:
|
|
87
|
+
.\scripts\install.ps1
|
|
88
|
+
|
|
89
|
+
Or point to an existing venv:
|
|
90
|
+
`$env:SKCAPSTONE_VENV = 'C:\path\to\venv'
|
|
91
|
+
.\scripts\mcp-server.ps1
|
|
92
|
+
"@
|
|
93
|
+
exit 1
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
Write-Verbose "Using Python: $Python"
|
|
97
|
+
|
|
98
|
+
# --- Set environment variables ---
|
|
99
|
+
if (-not $env:SKMEMORY_HOME) {
|
|
100
|
+
$env:SKMEMORY_HOME = Join-Path $HOME '.skcapstone\memory'
|
|
101
|
+
}
|
|
102
|
+
if (-not $env:SKCAPSTONE_HOME) {
|
|
103
|
+
$env:SKCAPSTONE_HOME = Join-Path $HOME '.skcapstone'
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Ensure skcapstone is importable
|
|
107
|
+
$SrcPath = Join-Path $SkcapstoneDir 'src'
|
|
108
|
+
if ($env:PYTHONPATH) {
|
|
109
|
+
$env:PYTHONPATH = "$SrcPath;$($env:PYTHONPATH)"
|
|
110
|
+
} else {
|
|
111
|
+
$env:PYTHONPATH = $SrcPath
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
# --- Launch MCP server on stdio ---
|
|
115
|
+
& $Python -m skcapstone.mcp_server @args
|
|
116
|
+
exit $LASTEXITCODE
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# -------------------------------------------------------------------
|
|
3
|
+
# skcapstone MCP server launcher — cross-platform (Linux / macOS)
|
|
4
|
+
# Task: e5f81637
|
|
5
|
+
#
|
|
6
|
+
# Works with: Cursor, Claude Desktop, Claude Code CLI, Windsurf,
|
|
7
|
+
# Aider, Cline, or any MCP client that speaks stdio.
|
|
8
|
+
#
|
|
9
|
+
# The script auto-detects the Python virtualenv and launches the
|
|
10
|
+
# MCP server on stdio. No hardcoded paths required in client configs.
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# ./scripts/mcp-server.sh (from repo root)
|
|
14
|
+
# bash scripts/mcp-server.sh (explicit bash)
|
|
15
|
+
#
|
|
16
|
+
# Environment overrides:
|
|
17
|
+
# SKCAPSTONE_VENV=/path/to/venv — force a specific virtualenv
|
|
18
|
+
# SKMEMORY_HOME=/path/to/dir — override memory storage location
|
|
19
|
+
# SKCAPSTONE_LOG_LEVEL=DEBUG — set log verbosity
|
|
20
|
+
# -------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
SKCAPSTONE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
26
|
+
|
|
27
|
+
# --- Locate the Python interpreter ---
|
|
28
|
+
# Priority:
|
|
29
|
+
# 1. SKCAPSTONE_VENV env var (explicit override)
|
|
30
|
+
# 2. ~/.skenv (standard SK* suite venv)
|
|
31
|
+
# 3. Project-local .venv dirs
|
|
32
|
+
# 4. System python3 / python
|
|
33
|
+
find_python() {
|
|
34
|
+
# 1. Explicit venv override
|
|
35
|
+
if [[ -n "${SKCAPSTONE_VENV:-}" ]]; then
|
|
36
|
+
local py="$SKCAPSTONE_VENV/bin/python"
|
|
37
|
+
if [[ -x "$py" ]]; then
|
|
38
|
+
echo "$py"
|
|
39
|
+
return
|
|
40
|
+
fi
|
|
41
|
+
echo "WARNING: SKCAPSTONE_VENV=$SKCAPSTONE_VENV set but $py not found, falling back." >&2
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# 2. Standard ~/.skenv venv
|
|
45
|
+
local skenv="$HOME/.skenv/bin/python"
|
|
46
|
+
if [[ -x "$skenv" ]]; then
|
|
47
|
+
if "$skenv" -c "import skcapstone" 2>/dev/null; then
|
|
48
|
+
echo "$skenv"
|
|
49
|
+
return
|
|
50
|
+
fi
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# 3. Project-local venvs
|
|
54
|
+
local candidates=(
|
|
55
|
+
"$SKCAPSTONE_DIR/.venv/bin/python"
|
|
56
|
+
"$SKCAPSTONE_DIR/../.venv/bin/python"
|
|
57
|
+
)
|
|
58
|
+
for py in "${candidates[@]}"; do
|
|
59
|
+
if [[ -x "$py" ]]; then
|
|
60
|
+
if "$py" -c "import skcapstone" 2>/dev/null; then
|
|
61
|
+
echo "$py"
|
|
62
|
+
return
|
|
63
|
+
fi
|
|
64
|
+
fi
|
|
65
|
+
done
|
|
66
|
+
|
|
67
|
+
# 4. System Python (must have skcapstone installed)
|
|
68
|
+
for cmd in python3 python; do
|
|
69
|
+
if command -v "$cmd" >/dev/null 2>&1; then
|
|
70
|
+
if "$cmd" -c "import skcapstone" 2>/dev/null; then
|
|
71
|
+
echo "$(command -v "$cmd")"
|
|
72
|
+
return
|
|
73
|
+
fi
|
|
74
|
+
fi
|
|
75
|
+
done
|
|
76
|
+
|
|
77
|
+
return 1
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
PYTHON="$(find_python)" || {
|
|
81
|
+
echo "ERROR: Could not find a Python interpreter with skcapstone installed." >&2
|
|
82
|
+
echo "" >&2
|
|
83
|
+
echo "Install with:" >&2
|
|
84
|
+
echo " bash scripts/install.sh" >&2
|
|
85
|
+
echo "" >&2
|
|
86
|
+
echo "Or point to an existing venv:" >&2
|
|
87
|
+
echo " SKCAPSTONE_VENV=/path/to/venv bash scripts/mcp-server.sh" >&2
|
|
88
|
+
exit 1
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
# --- Set environment variables ---
|
|
92
|
+
export SKMEMORY_HOME="${SKMEMORY_HOME:-$HOME/.skcapstone/memory}"
|
|
93
|
+
export SKCAPSTONE_HOME="${SKCAPSTONE_HOME:-$HOME/.skcapstone}"
|
|
94
|
+
|
|
95
|
+
# Ensure skcapstone is importable even if not pip-installed
|
|
96
|
+
export PYTHONPATH="${SKCAPSTONE_DIR}/src${PYTHONPATH:+:$PYTHONPATH}"
|
|
97
|
+
|
|
98
|
+
# --- Launch MCP server on stdio ---
|
|
99
|
+
exec "$PYTHON" -m skcapstone.mcp_server "$@"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Pull required Ollama models for the sovereign agent
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
echo "Pulling Ollama models for SKCapstone..."
|
|
6
|
+
|
|
7
|
+
ollama pull llama3.2 # FAST tier (3.2B, ~2GB) — CPU-only inference
|
|
8
|
+
ollama pull devstral # CODE tier — code generation and review
|
|
9
|
+
|
|
10
|
+
echo "Models ready"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ---------------------------------------------------------------------------
|
|
3
|
+
# skcapstone CLI wrapper — run without pip install (dev from repo).
|
|
4
|
+
#
|
|
5
|
+
# Adds skcapstone src to PYTHONPATH and invokes the CLI. Use when working
|
|
6
|
+
# from the monorepo without activating a venv or installing the package.
|
|
7
|
+
#
|
|
8
|
+
# To get `skcapstone` on PATH:
|
|
9
|
+
# export PATH="/path/to/smilintux-org/skcapstone/scripts:$PATH"
|
|
10
|
+
# Or from repo root: export PATH="$(pwd)/skcapstone/scripts:$PATH"
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# ./skcapstone/scripts/skcapstone status
|
|
14
|
+
# skcapstone trust rehydrate # when scripts/ is on PATH
|
|
15
|
+
# ---------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
set -euo pipefail
|
|
18
|
+
|
|
19
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
SKCAPSTONE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
21
|
+
SRC_DIR="${SKCAPSTONE_DIR}/src"
|
|
22
|
+
|
|
23
|
+
export PYTHONPATH="${SRC_DIR}${PYTHONPATH:+:$PYTHONPATH}"
|
|
24
|
+
|
|
25
|
+
# Prefer venv python if present (has deps); else system python (may need deps)
|
|
26
|
+
if [[ -x "${SKCAPSTONE_DIR}/.venv/bin/python" ]]; then
|
|
27
|
+
exec "${SKCAPSTONE_DIR}/.venv/bin/python" -c "
|
|
28
|
+
import sys
|
|
29
|
+
sys.argv = ['skcapstone'] + sys.argv[1:]
|
|
30
|
+
from skcapstone.cli import main
|
|
31
|
+
main()
|
|
32
|
+
" "$@"
|
|
33
|
+
elif [[ -x "$(cd "$SCRIPT_DIR/../.." && pwd)/skmemory/.venv/bin/python" ]]; then
|
|
34
|
+
REPO_VENV="$(cd "$SCRIPT_DIR/../.." && pwd)/skmemory/.venv/bin/python"
|
|
35
|
+
exec "$REPO_VENV" -c "
|
|
36
|
+
import sys
|
|
37
|
+
sys.argv = ['skcapstone'] + sys.argv[1:]
|
|
38
|
+
from skcapstone.cli import main
|
|
39
|
+
main()
|
|
40
|
+
" "$@"
|
|
41
|
+
else
|
|
42
|
+
exec python -c "
|
|
43
|
+
import sys
|
|
44
|
+
sys.argv = ['skcapstone'] + sys.argv[1:]
|
|
45
|
+
from skcapstone.cli import main
|
|
46
|
+
main()
|
|
47
|
+
" "$@"
|
|
48
|
+
fi
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# verify_install.sh — Verify skcapstone pip install works cleanly.
|
|
3
|
+
# Creates a fresh venv, installs each package, runs --version, reports pass/fail.
|
|
4
|
+
set -uo pipefail
|
|
5
|
+
|
|
6
|
+
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
+
VENV_DIR="/tmp/skcapstone_verify_venv_$$"
|
|
8
|
+
PASS=0
|
|
9
|
+
FAIL=0
|
|
10
|
+
RESULTS=()
|
|
11
|
+
|
|
12
|
+
# ── helpers ────────────────────────────────────────────────────────────────
|
|
13
|
+
ok() { echo " [PASS] $*"; PASS=$((PASS + 1)); RESULTS+=("PASS: $*"); }
|
|
14
|
+
fail() { echo " [FAIL] $*"; FAIL=$((FAIL + 1)); RESULTS+=("FAIL: $*"); }
|
|
15
|
+
skip() { echo " [SKIP] $*"; RESULTS+=("SKIP: $*"); }
|
|
16
|
+
|
|
17
|
+
hr() { printf '%0.s─' {1..60}; echo; }
|
|
18
|
+
|
|
19
|
+
cleanup() { rm -rf "$VENV_DIR"; }
|
|
20
|
+
trap cleanup EXIT
|
|
21
|
+
|
|
22
|
+
# ── setup ──────────────────────────────────────────────────────────────────
|
|
23
|
+
hr
|
|
24
|
+
echo " SKCapstone Install Verification"
|
|
25
|
+
echo " Repo : $REPO_ROOT"
|
|
26
|
+
echo " Venv : $VENV_DIR"
|
|
27
|
+
hr
|
|
28
|
+
|
|
29
|
+
# Require Python ≥ 3.10 — prefer pyenv global python3, then fallback names
|
|
30
|
+
for _py in python3 python python3.13 python3.12 python3.11 python3.10; do
|
|
31
|
+
if _found=$(command -v "$_py" 2>/dev/null) && "$_found" -c "import sys; sys.exit(0 if sys.version_info >= (3,10) else 1)" 2>/dev/null; then
|
|
32
|
+
PYTHON="$_found"
|
|
33
|
+
break
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
if [[ -z "${PYTHON:-}" ]]; then
|
|
37
|
+
echo "ERROR: python3 >= 3.10 not found"; exit 1
|
|
38
|
+
fi
|
|
39
|
+
PY_VER=$("$PYTHON" -c "import sys; print('%d.%d' % sys.version_info[:2])")
|
|
40
|
+
echo " Python: $PYTHON ($PY_VER)"
|
|
41
|
+
hr
|
|
42
|
+
|
|
43
|
+
# Create isolated venv
|
|
44
|
+
"$PYTHON" -m venv "$VENV_DIR" || { echo "ERROR: venv creation failed"; exit 1; }
|
|
45
|
+
PIP="$VENV_DIR/bin/pip"
|
|
46
|
+
PYEXE="$VENV_DIR/bin/python"
|
|
47
|
+
|
|
48
|
+
"$PIP" install --quiet --upgrade pip wheel setuptools 2>&1 | tail -1
|
|
49
|
+
|
|
50
|
+
# Common pip flags — prefer pre-built wheels, 60s per-package timeout
|
|
51
|
+
PIP_OPTS=(--quiet --prefer-binary --timeout=60)
|
|
52
|
+
|
|
53
|
+
# ── 1. Core skcapstone (base deps only) ───────────────────────────────────
|
|
54
|
+
echo
|
|
55
|
+
echo "Step 1: core install (click, mcp, pydantic, pyyaml, rich)"
|
|
56
|
+
if "$PIP" install "${PIP_OPTS[@]}" "$REPO_ROOT" 2>&1; then
|
|
57
|
+
ok "pip install skcapstone (core)"
|
|
58
|
+
else
|
|
59
|
+
fail "pip install skcapstone (core)"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Verify importable
|
|
63
|
+
if "$PYEXE" -c "import skcapstone; print(' version:', skcapstone.__version__)" 2>&1; then
|
|
64
|
+
ok "import skcapstone"
|
|
65
|
+
else
|
|
66
|
+
fail "import skcapstone"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Verify CLI entry point
|
|
70
|
+
if "$VENV_DIR/bin/skcapstone" --help > /dev/null 2>&1; then
|
|
71
|
+
ok "skcapstone --help"
|
|
72
|
+
else
|
|
73
|
+
fail "skcapstone --help"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
if "$VENV_DIR/bin/skcapstone" --version 2>&1 | grep -qE "[0-9]+\.[0-9]+"; then
|
|
77
|
+
ok "skcapstone --version"
|
|
78
|
+
else
|
|
79
|
+
fail "skcapstone --version"
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Verify crush shim entry point
|
|
83
|
+
if "$VENV_DIR/bin/crush" --help > /dev/null 2>&1; then
|
|
84
|
+
ok "crush --help"
|
|
85
|
+
else
|
|
86
|
+
fail "crush --help (stub)"
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# ── 2. Optional extra: consciousness (watchdog) ────────────────────────────
|
|
90
|
+
echo
|
|
91
|
+
echo "Step 2: optional 'consciousness' extra"
|
|
92
|
+
if "$PIP" install "${PIP_OPTS[@]}" "$REPO_ROOT[consciousness]" 2>&1; then
|
|
93
|
+
ok "pip install skcapstone[consciousness]"
|
|
94
|
+
if "$PYEXE" -c "import watchdog; print(' watchdog:', watchdog.__version__)" 2>&1; then
|
|
95
|
+
ok "import watchdog"
|
|
96
|
+
else
|
|
97
|
+
fail "import watchdog"
|
|
98
|
+
fi
|
|
99
|
+
else
|
|
100
|
+
fail "pip install skcapstone[consciousness]"
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# ── 3. Optional extra: shell (prompt_toolkit) ──────────────────────────────
|
|
104
|
+
echo
|
|
105
|
+
echo "Step 3: optional 'shell' extra"
|
|
106
|
+
if "$PIP" install "${PIP_OPTS[@]}" "$REPO_ROOT[shell]" 2>&1; then
|
|
107
|
+
ok "pip install skcapstone[shell]"
|
|
108
|
+
if "$PYEXE" -c "import prompt_toolkit; print(' prompt_toolkit:', prompt_toolkit.__version__)" 2>&1; then
|
|
109
|
+
ok "import prompt_toolkit"
|
|
110
|
+
else
|
|
111
|
+
fail "import prompt_toolkit"
|
|
112
|
+
fi
|
|
113
|
+
else
|
|
114
|
+
fail "pip install skcapstone[shell]"
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
# ── 4. Dev extras (pytest, ruff, black) ────────────────────────────────────
|
|
118
|
+
echo
|
|
119
|
+
echo "Step 4: dev extras"
|
|
120
|
+
if "$PIP" install "${PIP_OPTS[@]}" "$REPO_ROOT[dev]" 2>&1; then
|
|
121
|
+
ok "pip install skcapstone[dev]"
|
|
122
|
+
for pkg in pytest ruff black; do
|
|
123
|
+
if "$PYEXE" -c "import $pkg" 2>&1; then
|
|
124
|
+
ok "import $pkg"
|
|
125
|
+
else
|
|
126
|
+
fail "import $pkg"
|
|
127
|
+
fi
|
|
128
|
+
done
|
|
129
|
+
else
|
|
130
|
+
fail "pip install skcapstone[dev]"
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# ── 5. Local sibling packages (skseed, skcomm) ─────────────────────────────
|
|
134
|
+
echo
|
|
135
|
+
echo "Step 5: local sibling packages (if present)"
|
|
136
|
+
for pkg_dir in "$REPO_ROOT/../skseed" "$REPO_ROOT/../skcomm" "$REPO_ROOT/../skmemory" "$REPO_ROOT/../skskills"; do
|
|
137
|
+
pkg_name=$(basename "$pkg_dir")
|
|
138
|
+
if [[ -f "$pkg_dir/pyproject.toml" ]] || [[ -f "$pkg_dir/setup.py" ]]; then
|
|
139
|
+
if "$PIP" install "${PIP_OPTS[@]}" -e "$pkg_dir" 2>&1; then
|
|
140
|
+
ok "pip install -e $pkg_name"
|
|
141
|
+
if "$PYEXE" -c "import $pkg_name" 2>&1; then
|
|
142
|
+
ok "import $pkg_name"
|
|
143
|
+
else
|
|
144
|
+
fail "import $pkg_name"
|
|
145
|
+
fi
|
|
146
|
+
else
|
|
147
|
+
fail "pip install -e $pkg_name"
|
|
148
|
+
fi
|
|
149
|
+
else
|
|
150
|
+
skip "$pkg_name not found at $pkg_dir"
|
|
151
|
+
fi
|
|
152
|
+
done
|
|
153
|
+
|
|
154
|
+
# ── 6. Verify key CLI subcommands load ─────────────────────────────────────
|
|
155
|
+
echo
|
|
156
|
+
echo "Step 6: CLI subcommands smoke test"
|
|
157
|
+
SKCAP="$VENV_DIR/bin/skcapstone"
|
|
158
|
+
for subcmd in status memory coord doctor daemon sync; do
|
|
159
|
+
if "$SKCAP" "$subcmd" --help > /dev/null 2>&1; then
|
|
160
|
+
ok "skcapstone $subcmd --help"
|
|
161
|
+
else
|
|
162
|
+
fail "skcapstone $subcmd --help"
|
|
163
|
+
fi
|
|
164
|
+
done
|
|
165
|
+
|
|
166
|
+
# ── Summary ────────────────────────────────────────────────────────────────
|
|
167
|
+
echo
|
|
168
|
+
hr
|
|
169
|
+
echo " Results: $PASS passed, $FAIL failed"
|
|
170
|
+
hr
|
|
171
|
+
if [[ $FAIL -eq 0 ]]; then
|
|
172
|
+
echo " ALL CHECKS PASSED"
|
|
173
|
+
exit 0
|
|
174
|
+
else
|
|
175
|
+
echo " FAILURES:"
|
|
176
|
+
for r in "${RESULTS[@]}"; do
|
|
177
|
+
[[ "$r" == FAIL:* ]] && echo " $r"
|
|
178
|
+
done
|
|
179
|
+
exit 1
|
|
180
|
+
fi
|