@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,406 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Register Windows Task Scheduler tasks for SKCapstone services.
|
|
5
|
+
|
|
6
|
+
.DESCRIPTION
|
|
7
|
+
Creates scheduled tasks equivalent to the Linux systemd services and timers:
|
|
8
|
+
|
|
9
|
+
- SKCapstone Daemon (runs on user logon, restarts on failure)
|
|
10
|
+
- Memory Rehydration (weekly memory compression via skcapstone memory compress)
|
|
11
|
+
- Sync Watcher (every 2 minutes, polls sync inbox)
|
|
12
|
+
- Health Monitor Heartbeat (every 60 seconds, emits heartbeat + queue drain)
|
|
13
|
+
- Housekeeping (daily log rotation and temp cleanup)
|
|
14
|
+
|
|
15
|
+
All tasks run under the current user, use the skenv Python, and log to
|
|
16
|
+
~/.skcapstone/logs/.
|
|
17
|
+
|
|
18
|
+
.PARAMETER SkenvPath
|
|
19
|
+
Path to the skenv virtualenv. Defaults to $env:LOCALAPPDATA\skenv.
|
|
20
|
+
Falls back to $env:USERPROFILE\.skenv if the LOCALAPPDATA path does not exist.
|
|
21
|
+
|
|
22
|
+
.PARAMETER Force
|
|
23
|
+
Remove existing SKCapstone tasks before re-registering them.
|
|
24
|
+
|
|
25
|
+
.EXAMPLE
|
|
26
|
+
.\install-tasks.ps1
|
|
27
|
+
.\install-tasks.ps1 -Force
|
|
28
|
+
.\install-tasks.ps1 -SkenvPath C:\Users\me\.skenv
|
|
29
|
+
#>
|
|
30
|
+
|
|
31
|
+
[CmdletBinding()]
|
|
32
|
+
param(
|
|
33
|
+
[string]$SkenvPath,
|
|
34
|
+
[switch]$Force
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
Set-StrictMode -Version Latest
|
|
38
|
+
$ErrorActionPreference = 'Stop'
|
|
39
|
+
|
|
40
|
+
# ---------------------------------------------------------------------------
|
|
41
|
+
# Constants
|
|
42
|
+
# ---------------------------------------------------------------------------
|
|
43
|
+
$TaskFolder = '\SKCapstone'
|
|
44
|
+
$LogDir = Join-Path $env:USERPROFILE '.skcapstone\logs'
|
|
45
|
+
|
|
46
|
+
# Resolve skenv
|
|
47
|
+
if (-not $SkenvPath) {
|
|
48
|
+
$candidate1 = Join-Path $env:LOCALAPPDATA 'skenv'
|
|
49
|
+
$candidate2 = Join-Path $env:USERPROFILE '.skenv'
|
|
50
|
+
if (Test-Path $candidate1) {
|
|
51
|
+
$SkenvPath = $candidate1
|
|
52
|
+
} elseif (Test-Path $candidate2) {
|
|
53
|
+
$SkenvPath = $candidate2
|
|
54
|
+
} else {
|
|
55
|
+
Write-Host "ERROR: Cannot find skenv virtualenv at:" -ForegroundColor Red
|
|
56
|
+
Write-Host " $candidate1" -ForegroundColor Red
|
|
57
|
+
Write-Host " $candidate2" -ForegroundColor Red
|
|
58
|
+
Write-Host "Run scripts\install.ps1 first, or pass -SkenvPath." -ForegroundColor Red
|
|
59
|
+
exit 1
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
$PythonExe = Join-Path $SkenvPath 'Scripts\python.exe'
|
|
64
|
+
$SKCapstoneExe = Join-Path $SkenvPath 'Scripts\skcapstone.exe'
|
|
65
|
+
$SKCommExe = Join-Path $SkenvPath 'Scripts\skcomm.exe'
|
|
66
|
+
|
|
67
|
+
if (-not (Test-Path $PythonExe)) {
|
|
68
|
+
Write-Host "ERROR: Python not found at $PythonExe" -ForegroundColor Red
|
|
69
|
+
exit 1
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# Ensure log directory exists
|
|
73
|
+
if (-not (Test-Path $LogDir)) {
|
|
74
|
+
New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
Write-Host '=== SKCapstone Task Scheduler Setup ===' -ForegroundColor Cyan
|
|
78
|
+
Write-Host " skenv: $SkenvPath"
|
|
79
|
+
Write-Host " logs: $LogDir"
|
|
80
|
+
Write-Host ''
|
|
81
|
+
|
|
82
|
+
# ---------------------------------------------------------------------------
|
|
83
|
+
# Helper: Remove existing task if -Force or if it already exists
|
|
84
|
+
# ---------------------------------------------------------------------------
|
|
85
|
+
function Remove-ExistingTask {
|
|
86
|
+
param([string]$TaskName)
|
|
87
|
+
$fullPath = "$TaskFolder\$TaskName"
|
|
88
|
+
try {
|
|
89
|
+
$existing = Get-ScheduledTask -TaskName $TaskName -TaskPath "$TaskFolder\" -ErrorAction SilentlyContinue
|
|
90
|
+
if ($existing) {
|
|
91
|
+
if ($Force) {
|
|
92
|
+
Unregister-ScheduledTask -TaskName $TaskName -TaskPath "$TaskFolder\" -Confirm:$false
|
|
93
|
+
Write-Host " Removed existing task: $fullPath" -ForegroundColor Yellow
|
|
94
|
+
} else {
|
|
95
|
+
Write-Host " SKIP: $fullPath already exists (use -Force to replace)" -ForegroundColor Yellow
|
|
96
|
+
return $false
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
} catch {
|
|
100
|
+
# Task does not exist, which is fine
|
|
101
|
+
}
|
|
102
|
+
return $true
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# ---------------------------------------------------------------------------
|
|
106
|
+
# Helper: Build a wrapper batch script that logs output
|
|
107
|
+
# ---------------------------------------------------------------------------
|
|
108
|
+
function New-WrapperScript {
|
|
109
|
+
param(
|
|
110
|
+
[string]$Name,
|
|
111
|
+
[string]$Command,
|
|
112
|
+
[string]$Arguments
|
|
113
|
+
)
|
|
114
|
+
$wrapperDir = Join-Path $LogDir 'task-wrappers'
|
|
115
|
+
if (-not (Test-Path $wrapperDir)) {
|
|
116
|
+
New-Item -ItemType Directory -Path $wrapperDir -Force | Out-Null
|
|
117
|
+
}
|
|
118
|
+
$wrapperPath = Join-Path $wrapperDir "$Name.bat"
|
|
119
|
+
$logFile = Join-Path $LogDir "$Name.log"
|
|
120
|
+
$content = @"
|
|
121
|
+
@echo off
|
|
122
|
+
echo [%date% %time%] === $Name started === >> "$logFile"
|
|
123
|
+
"$Command" $Arguments >> "$logFile" 2>&1
|
|
124
|
+
echo [%date% %time%] === $Name finished (exit code: %ERRORLEVEL%) === >> "$logFile"
|
|
125
|
+
"@
|
|
126
|
+
Set-Content -Path $wrapperPath -Value $content -Encoding ASCII
|
|
127
|
+
return $wrapperPath
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
$registered = 0
|
|
131
|
+
$skipped = 0
|
|
132
|
+
|
|
133
|
+
# ---------------------------------------------------------------------------
|
|
134
|
+
# Task 1: SKCapstone Daemon (equivalent to skcapstone.service)
|
|
135
|
+
# Trigger: At user logon
|
|
136
|
+
# Action: skcapstone daemon start --foreground
|
|
137
|
+
# Restart: Re-launch on failure (via repetition interval)
|
|
138
|
+
# ---------------------------------------------------------------------------
|
|
139
|
+
Write-Host '[1/5] SKCapstone Daemon...' -ForegroundColor Green
|
|
140
|
+
|
|
141
|
+
if (Remove-ExistingTask 'SKCapstone-Daemon') {
|
|
142
|
+
$wrapper = New-WrapperScript -Name 'skcapstone-daemon' `
|
|
143
|
+
-Command $SKCapstoneExe `
|
|
144
|
+
-Arguments 'daemon start --foreground'
|
|
145
|
+
|
|
146
|
+
$action = New-ScheduledTaskAction -Execute 'cmd.exe' `
|
|
147
|
+
-Argument "/c `"$wrapper`""
|
|
148
|
+
|
|
149
|
+
$trigger = New-ScheduledTaskTrigger -AtLogOn
|
|
150
|
+
$trigger.Delay = 'PT15S' # 15-second delay after logon
|
|
151
|
+
|
|
152
|
+
$settings = New-ScheduledTaskSettingsSet `
|
|
153
|
+
-AllowStartIfOnBatteries `
|
|
154
|
+
-DontStopIfGoingOnBatteries `
|
|
155
|
+
-ExecutionTimeLimit ([TimeSpan]::Zero) `
|
|
156
|
+
-RestartCount 3 `
|
|
157
|
+
-RestartInterval (New-TimeSpan -Seconds 30) `
|
|
158
|
+
-StartWhenAvailable `
|
|
159
|
+
-MultipleInstances IgnoreNew
|
|
160
|
+
|
|
161
|
+
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
|
|
162
|
+
|
|
163
|
+
Register-ScheduledTask -TaskName 'SKCapstone-Daemon' `
|
|
164
|
+
-TaskPath $TaskFolder `
|
|
165
|
+
-Action $action `
|
|
166
|
+
-Trigger $trigger `
|
|
167
|
+
-Settings $settings `
|
|
168
|
+
-Principal $principal `
|
|
169
|
+
-Description 'SKCapstone Sovereign Agent Daemon — equivalent to skcapstone.service' | Out-Null
|
|
170
|
+
|
|
171
|
+
Write-Host ' Registered: At logon, auto-restart on failure'
|
|
172
|
+
$registered++
|
|
173
|
+
} else {
|
|
174
|
+
$skipped++
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
# ---------------------------------------------------------------------------
|
|
178
|
+
# Task 2: Memory Rehydration / Compression (equivalent to skcapstone-memory-compress.timer)
|
|
179
|
+
# Trigger: Weekly (Sunday 03:00)
|
|
180
|
+
# Action: skcapstone memory compress
|
|
181
|
+
# ---------------------------------------------------------------------------
|
|
182
|
+
Write-Host '[2/5] Memory Rehydration (weekly)...' -ForegroundColor Green
|
|
183
|
+
|
|
184
|
+
if (Remove-ExistingTask 'SKCapstone-MemoryCompress') {
|
|
185
|
+
$wrapper = New-WrapperScript -Name 'skcapstone-memory-compress' `
|
|
186
|
+
-Command $SKCapstoneExe `
|
|
187
|
+
-Arguments 'memory compress'
|
|
188
|
+
|
|
189
|
+
$action = New-ScheduledTaskAction -Execute 'cmd.exe' `
|
|
190
|
+
-Argument "/c `"$wrapper`""
|
|
191
|
+
|
|
192
|
+
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At '3:00AM'
|
|
193
|
+
# Add 1-hour random delay equivalent to RandomizedDelaySec=1h
|
|
194
|
+
$trigger.RandomDelay = 'PT1H'
|
|
195
|
+
|
|
196
|
+
$settings = New-ScheduledTaskSettingsSet `
|
|
197
|
+
-AllowStartIfOnBatteries `
|
|
198
|
+
-DontStopIfGoingOnBatteries `
|
|
199
|
+
-ExecutionTimeLimit (New-TimeSpan -Hours 2) `
|
|
200
|
+
-StartWhenAvailable `
|
|
201
|
+
-MultipleInstances IgnoreNew
|
|
202
|
+
|
|
203
|
+
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
|
|
204
|
+
|
|
205
|
+
Register-ScheduledTask -TaskName 'SKCapstone-MemoryCompress' `
|
|
206
|
+
-TaskPath $TaskFolder `
|
|
207
|
+
-Action $action `
|
|
208
|
+
-Trigger $trigger `
|
|
209
|
+
-Settings $settings `
|
|
210
|
+
-Principal $principal `
|
|
211
|
+
-Description 'Weekly LLM memory compression — equivalent to skcapstone-memory-compress.timer' | Out-Null
|
|
212
|
+
|
|
213
|
+
Write-Host ' Registered: Weekly (Sunday 03:00, +1h jitter)'
|
|
214
|
+
$registered++
|
|
215
|
+
} else {
|
|
216
|
+
$skipped++
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
# ---------------------------------------------------------------------------
|
|
220
|
+
# Task 3: Sync Watcher (poll sync inbox every 2 minutes)
|
|
221
|
+
# Equivalent to the sync_inbox_scan scheduled task (30s in-process, but
|
|
222
|
+
# the external fallback polls less aggressively)
|
|
223
|
+
# ---------------------------------------------------------------------------
|
|
224
|
+
Write-Host '[3/5] Sync Watcher (every 2 min)...' -ForegroundColor Green
|
|
225
|
+
|
|
226
|
+
if (Remove-ExistingTask 'SKCapstone-SyncWatcher') {
|
|
227
|
+
$wrapper = New-WrapperScript -Name 'skcapstone-sync-watcher' `
|
|
228
|
+
-Command $PythonExe `
|
|
229
|
+
-Arguments "-m skcapstone.cli sync poll"
|
|
230
|
+
|
|
231
|
+
$action = New-ScheduledTaskAction -Execute 'cmd.exe' `
|
|
232
|
+
-Argument "/c `"$wrapper`""
|
|
233
|
+
|
|
234
|
+
# Trigger: repeating every 2 minutes, starting at logon
|
|
235
|
+
$trigger = New-ScheduledTaskTrigger -AtLogOn
|
|
236
|
+
$trigger.Delay = 'PT30S'
|
|
237
|
+
$trigger.Repetition = (New-ScheduledTaskTrigger -Once -At '00:00' `
|
|
238
|
+
-RepetitionInterval (New-TimeSpan -Minutes 2)).Repetition
|
|
239
|
+
|
|
240
|
+
$settings = New-ScheduledTaskSettingsSet `
|
|
241
|
+
-AllowStartIfOnBatteries `
|
|
242
|
+
-DontStopIfGoingOnBatteries `
|
|
243
|
+
-ExecutionTimeLimit (New-TimeSpan -Minutes 5) `
|
|
244
|
+
-StartWhenAvailable `
|
|
245
|
+
-MultipleInstances IgnoreNew
|
|
246
|
+
|
|
247
|
+
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
|
|
248
|
+
|
|
249
|
+
Register-ScheduledTask -TaskName 'SKCapstone-SyncWatcher' `
|
|
250
|
+
-TaskPath $TaskFolder `
|
|
251
|
+
-Action $action `
|
|
252
|
+
-Trigger $trigger `
|
|
253
|
+
-Settings $settings `
|
|
254
|
+
-Principal $principal `
|
|
255
|
+
-Description 'Sync inbox poller — fallback for filesystem watcher' | Out-Null
|
|
256
|
+
|
|
257
|
+
Write-Host ' Registered: Every 2 minutes after logon'
|
|
258
|
+
$registered++
|
|
259
|
+
} else {
|
|
260
|
+
$skipped++
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
# ---------------------------------------------------------------------------
|
|
264
|
+
# Task 4: Health Monitor / Heartbeat (equivalent to skcomm-heartbeat.timer
|
|
265
|
+
# and skcomm-queue-drain.timer combined)
|
|
266
|
+
# Trigger: Every 60 seconds after logon
|
|
267
|
+
# Action: skcomm heartbeat && skcomm queue drain
|
|
268
|
+
# ---------------------------------------------------------------------------
|
|
269
|
+
Write-Host '[4/5] Health Monitor Heartbeat (every 60s)...' -ForegroundColor Green
|
|
270
|
+
|
|
271
|
+
if (Remove-ExistingTask 'SKCapstone-Heartbeat') {
|
|
272
|
+
$wrapperDir = Join-Path $LogDir 'task-wrappers'
|
|
273
|
+
if (-not (Test-Path $wrapperDir)) {
|
|
274
|
+
New-Item -ItemType Directory -Path $wrapperDir -Force | Out-Null
|
|
275
|
+
}
|
|
276
|
+
$wrapperPath = Join-Path $wrapperDir 'skcapstone-heartbeat.bat'
|
|
277
|
+
$logFile = Join-Path $LogDir 'skcapstone-heartbeat.log'
|
|
278
|
+
# Combined heartbeat + queue drain (mirrors the two systemd timers)
|
|
279
|
+
$content = @"
|
|
280
|
+
@echo off
|
|
281
|
+
echo [%date% %time%] === heartbeat started === >> "$logFile"
|
|
282
|
+
"$SKCommExe" heartbeat >> "$logFile" 2>&1
|
|
283
|
+
echo [%date% %time%] heartbeat exit: %ERRORLEVEL% >> "$logFile"
|
|
284
|
+
"$SKCommExe" queue drain >> "$logFile" 2>&1
|
|
285
|
+
echo [%date% %time%] queue-drain exit: %ERRORLEVEL% >> "$logFile"
|
|
286
|
+
echo [%date% %time%] === heartbeat finished === >> "$logFile"
|
|
287
|
+
"@
|
|
288
|
+
Set-Content -Path $wrapperPath -Value $content -Encoding ASCII
|
|
289
|
+
|
|
290
|
+
$action = New-ScheduledTaskAction -Execute 'cmd.exe' `
|
|
291
|
+
-Argument "/c `"$wrapperPath`""
|
|
292
|
+
|
|
293
|
+
$trigger = New-ScheduledTaskTrigger -AtLogOn
|
|
294
|
+
$trigger.Delay = 'PT30S'
|
|
295
|
+
$trigger.Repetition = (New-ScheduledTaskTrigger -Once -At '00:00' `
|
|
296
|
+
-RepetitionInterval (New-TimeSpan -Minutes 1)).Repetition
|
|
297
|
+
|
|
298
|
+
$settings = New-ScheduledTaskSettingsSet `
|
|
299
|
+
-AllowStartIfOnBatteries `
|
|
300
|
+
-DontStopIfGoingOnBatteries `
|
|
301
|
+
-ExecutionTimeLimit (New-TimeSpan -Minutes 2) `
|
|
302
|
+
-StartWhenAvailable `
|
|
303
|
+
-MultipleInstances IgnoreNew
|
|
304
|
+
|
|
305
|
+
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
|
|
306
|
+
|
|
307
|
+
Register-ScheduledTask -TaskName 'SKCapstone-Heartbeat' `
|
|
308
|
+
-TaskPath $TaskFolder `
|
|
309
|
+
-Action $action `
|
|
310
|
+
-Trigger $trigger `
|
|
311
|
+
-Settings $settings `
|
|
312
|
+
-Principal $principal `
|
|
313
|
+
-Description 'Heartbeat + queue drain — equivalent to skcomm-heartbeat.timer + skcomm-queue-drain.timer' | Out-Null
|
|
314
|
+
|
|
315
|
+
Write-Host ' Registered: Every 60 seconds after logon'
|
|
316
|
+
$registered++
|
|
317
|
+
} else {
|
|
318
|
+
$skipped++
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
# ---------------------------------------------------------------------------
|
|
322
|
+
# Task 5: Housekeeping (log rotation + temp cleanup)
|
|
323
|
+
# Trigger: Daily at 04:00
|
|
324
|
+
# Action: Rotate logs, purge old temp files
|
|
325
|
+
# ---------------------------------------------------------------------------
|
|
326
|
+
Write-Host '[5/5] Housekeeping (daily)...' -ForegroundColor Green
|
|
327
|
+
|
|
328
|
+
if (Remove-ExistingTask 'SKCapstone-Housekeeping') {
|
|
329
|
+
$wrapperDir = Join-Path $LogDir 'task-wrappers'
|
|
330
|
+
if (-not (Test-Path $wrapperDir)) {
|
|
331
|
+
New-Item -ItemType Directory -Path $wrapperDir -Force | Out-Null
|
|
332
|
+
}
|
|
333
|
+
$wrapperPath = Join-Path $wrapperDir 'skcapstone-housekeeping.bat'
|
|
334
|
+
$logFile = Join-Path $LogDir 'skcapstone-housekeeping.log'
|
|
335
|
+
$skHome = Join-Path $env:USERPROFILE '.skcapstone'
|
|
336
|
+
$content = @"
|
|
337
|
+
@echo off
|
|
338
|
+
echo [%date% %time%] === housekeeping started === >> "$logFile"
|
|
339
|
+
|
|
340
|
+
REM --- Log rotation: compress logs older than 7 days ---
|
|
341
|
+
echo Rotating logs... >> "$logFile"
|
|
342
|
+
forfiles /P "$LogDir" /M *.log /D -7 /C "cmd /c if @fsize GTR 0 (echo Archiving @file >> \"$logFile\" & copy @path @path.bak >nul & type nul > @path)" 2>nul
|
|
343
|
+
|
|
344
|
+
REM --- Purge archived logs older than 30 days ---
|
|
345
|
+
echo Purging old archives... >> "$logFile"
|
|
346
|
+
forfiles /P "$LogDir" /M *.bak /D -30 /C "cmd /c echo Deleting @file >> \"$logFile\" & del @path" 2>nul
|
|
347
|
+
|
|
348
|
+
REM --- Clean temp/cache files ---
|
|
349
|
+
echo Cleaning temp files... >> "$logFile"
|
|
350
|
+
if exist "$skHome\tmp" (
|
|
351
|
+
forfiles /P "$skHome\tmp" /D -3 /C "cmd /c echo Deleting @file >> \"$logFile\" & del @path" 2>nul
|
|
352
|
+
)
|
|
353
|
+
if exist "$skHome\cache" (
|
|
354
|
+
forfiles /P "$skHome\cache" /D -14 /C "cmd /c echo Deleting @file >> \"$logFile\" & del @path" 2>nul
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
echo [%date% %time%] === housekeeping finished === >> "$logFile"
|
|
358
|
+
"@
|
|
359
|
+
Set-Content -Path $wrapperPath -Value $content -Encoding ASCII
|
|
360
|
+
|
|
361
|
+
$action = New-ScheduledTaskAction -Execute 'cmd.exe' `
|
|
362
|
+
-Argument "/c `"$wrapperPath`""
|
|
363
|
+
|
|
364
|
+
$trigger = New-ScheduledTaskTrigger -Daily -At '4:00AM'
|
|
365
|
+
$trigger.RandomDelay = 'PT30M'
|
|
366
|
+
|
|
367
|
+
$settings = New-ScheduledTaskSettingsSet `
|
|
368
|
+
-AllowStartIfOnBatteries `
|
|
369
|
+
-DontStopIfGoingOnBatteries `
|
|
370
|
+
-ExecutionTimeLimit (New-TimeSpan -Minutes 30) `
|
|
371
|
+
-StartWhenAvailable `
|
|
372
|
+
-MultipleInstances IgnoreNew
|
|
373
|
+
|
|
374
|
+
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
|
|
375
|
+
|
|
376
|
+
Register-ScheduledTask -TaskName 'SKCapstone-Housekeeping' `
|
|
377
|
+
-TaskPath $TaskFolder `
|
|
378
|
+
-Action $action `
|
|
379
|
+
-Trigger $trigger `
|
|
380
|
+
-Settings $settings `
|
|
381
|
+
-Principal $principal `
|
|
382
|
+
-Description 'Daily log rotation + temp file cleanup' | Out-Null
|
|
383
|
+
|
|
384
|
+
Write-Host ' Registered: Daily at 04:00 (+30min jitter)'
|
|
385
|
+
$registered++
|
|
386
|
+
} else {
|
|
387
|
+
$skipped++
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
# ---------------------------------------------------------------------------
|
|
391
|
+
# Summary
|
|
392
|
+
# ---------------------------------------------------------------------------
|
|
393
|
+
Write-Host ''
|
|
394
|
+
Write-Host "=== Done: $registered registered, $skipped skipped ===" -ForegroundColor Cyan
|
|
395
|
+
Write-Host ''
|
|
396
|
+
Write-Host 'Registered tasks (view with: Get-ScheduledTask -TaskPath \SKCapstone\):' -ForegroundColor Green
|
|
397
|
+
Write-Host ' \SKCapstone\SKCapstone-Daemon — on logon, auto-restart'
|
|
398
|
+
Write-Host ' \SKCapstone\SKCapstone-MemoryCompress — weekly (Sun 03:00)'
|
|
399
|
+
Write-Host ' \SKCapstone\SKCapstone-SyncWatcher — every 2 min'
|
|
400
|
+
Write-Host ' \SKCapstone\SKCapstone-Heartbeat — every 60s'
|
|
401
|
+
Write-Host ' \SKCapstone\SKCapstone-Housekeeping — daily (04:00)'
|
|
402
|
+
Write-Host ''
|
|
403
|
+
Write-Host "Logs: $LogDir"
|
|
404
|
+
Write-Host "Wrappers: $LogDir\task-wrappers\"
|
|
405
|
+
Write-Host ''
|
|
406
|
+
Write-Host 'To remove all tasks: .\uninstall-tasks.ps1' -ForegroundColor Yellow
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-16"?>
|
|
2
|
+
<!--
|
|
3
|
+
SKCapstone Task Scheduler Import Template
|
|
4
|
+
==========================================
|
|
5
|
+
This XML can be imported via:
|
|
6
|
+
schtasks /create /tn "\SKCapstone\SKCapstone-Daemon" /xml skcapstone-task.xml
|
|
7
|
+
or via Task Scheduler GUI: Action > Import Task...
|
|
8
|
+
|
|
9
|
+
BEFORE IMPORTING: Replace the following placeholders:
|
|
10
|
+
__USERID__ - Your Windows username (e.g., DESKTOP-ABC\alice)
|
|
11
|
+
__SKENV_PATH__ - Path to skenv (e.g., C:\Users\alice\AppData\Local\skenv)
|
|
12
|
+
__LOG_DIR__ - Log directory (e.g., C:\Users\alice\.skcapstone\logs)
|
|
13
|
+
|
|
14
|
+
This template defines the SKCapstone Daemon task. Duplicate and modify
|
|
15
|
+
the Command/Arguments and Triggers sections for other tasks:
|
|
16
|
+
- MemoryCompress: Command=skcapstone.exe memory compress, Trigger=Weekly
|
|
17
|
+
- SyncWatcher: Command=python.exe -m skcapstone.cli sync poll, Trigger=Repetition/2min
|
|
18
|
+
- Heartbeat: Command=skcomm.exe heartbeat, Trigger=Repetition/1min
|
|
19
|
+
- Housekeeping: See install-tasks.ps1 for the batch wrapper approach
|
|
20
|
+
-->
|
|
21
|
+
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
|
22
|
+
|
|
23
|
+
<!-- ================================================================== -->
|
|
24
|
+
<!-- Registration Info -->
|
|
25
|
+
<!-- ================================================================== -->
|
|
26
|
+
<RegistrationInfo>
|
|
27
|
+
<Description>SKCapstone Sovereign Agent Daemon — equivalent to skcapstone.service on Linux. Starts the agent daemon at user logon, restarts on failure.</Description>
|
|
28
|
+
<Author>SKCapstone</Author>
|
|
29
|
+
<URI>\SKCapstone\SKCapstone-Daemon</URI>
|
|
30
|
+
</RegistrationInfo>
|
|
31
|
+
|
|
32
|
+
<!-- ================================================================== -->
|
|
33
|
+
<!-- Triggers -->
|
|
34
|
+
<!-- ================================================================== -->
|
|
35
|
+
<Triggers>
|
|
36
|
+
<!-- Start at user logon with a 15-second delay -->
|
|
37
|
+
<LogonTrigger>
|
|
38
|
+
<Enabled>true</Enabled>
|
|
39
|
+
<Delay>PT15S</Delay>
|
|
40
|
+
</LogonTrigger>
|
|
41
|
+
</Triggers>
|
|
42
|
+
|
|
43
|
+
<!-- ================================================================== -->
|
|
44
|
+
<!-- Principal (security context) -->
|
|
45
|
+
<!-- ================================================================== -->
|
|
46
|
+
<Principals>
|
|
47
|
+
<Principal id="Author">
|
|
48
|
+
<UserId>__USERID__</UserId>
|
|
49
|
+
<LogonType>InteractiveToken</LogonType>
|
|
50
|
+
<RunLevel>LeastPrivilege</RunLevel>
|
|
51
|
+
</Principal>
|
|
52
|
+
</Principals>
|
|
53
|
+
|
|
54
|
+
<!-- ================================================================== -->
|
|
55
|
+
<!-- Settings -->
|
|
56
|
+
<!-- ================================================================== -->
|
|
57
|
+
<Settings>
|
|
58
|
+
<!-- Allow on battery power -->
|
|
59
|
+
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
|
|
60
|
+
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
|
|
61
|
+
|
|
62
|
+
<!-- No execution time limit (daemon runs indefinitely) -->
|
|
63
|
+
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
|
|
64
|
+
|
|
65
|
+
<!-- Restart on failure: up to 3 times, 30-second intervals -->
|
|
66
|
+
<RestartOnFailure>
|
|
67
|
+
<Interval>PT30S</Interval>
|
|
68
|
+
<Count>3</Count>
|
|
69
|
+
</RestartOnFailure>
|
|
70
|
+
|
|
71
|
+
<!-- If missed (laptop was off), start when next available -->
|
|
72
|
+
<StartWhenAvailable>true</StartWhenAvailable>
|
|
73
|
+
|
|
74
|
+
<!-- Do not start a second instance if already running -->
|
|
75
|
+
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
|
76
|
+
|
|
77
|
+
<!-- Enabled -->
|
|
78
|
+
<Enabled>true</Enabled>
|
|
79
|
+
|
|
80
|
+
<!-- Do not delete after completion -->
|
|
81
|
+
<DeleteExpiredTaskAfter>PT0S</DeleteExpiredTaskAfter>
|
|
82
|
+
|
|
83
|
+
<!-- Run even if not idle -->
|
|
84
|
+
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
|
85
|
+
|
|
86
|
+
<!-- Network not required (offline-first) -->
|
|
87
|
+
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
|
88
|
+
|
|
89
|
+
<!-- Allow on-demand start -->
|
|
90
|
+
<AllowStartOnDemand>true</AllowStartOnDemand>
|
|
91
|
+
|
|
92
|
+
<!-- Allow hard terminate -->
|
|
93
|
+
<AllowHardTerminate>true</AllowHardTerminate>
|
|
94
|
+
|
|
95
|
+
<!-- Keep task in scheduler after it ends -->
|
|
96
|
+
<Hidden>false</Hidden>
|
|
97
|
+
|
|
98
|
+
<!-- Priority: below normal (6) to avoid impacting user work -->
|
|
99
|
+
<Priority>6</Priority>
|
|
100
|
+
</Settings>
|
|
101
|
+
|
|
102
|
+
<!-- ================================================================== -->
|
|
103
|
+
<!-- Actions -->
|
|
104
|
+
<!-- ================================================================== -->
|
|
105
|
+
<Actions Context="Author">
|
|
106
|
+
<Exec>
|
|
107
|
+
<Command>__SKENV_PATH__\Scripts\skcapstone.exe</Command>
|
|
108
|
+
<Arguments>daemon start --foreground</Arguments>
|
|
109
|
+
<WorkingDirectory>%USERPROFILE%\.skcapstone</WorkingDirectory>
|
|
110
|
+
</Exec>
|
|
111
|
+
</Actions>
|
|
112
|
+
|
|
113
|
+
</Task>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Remove all SKCapstone scheduled tasks from Windows Task Scheduler.
|
|
5
|
+
|
|
6
|
+
.DESCRIPTION
|
|
7
|
+
Unregisters every task under the \SKCapstone\ folder and removes the
|
|
8
|
+
wrapper batch scripts from ~/.skcapstone/logs/task-wrappers/.
|
|
9
|
+
|
|
10
|
+
.PARAMETER KeepLogs
|
|
11
|
+
If set, leaves log files intact. By default logs are preserved;
|
|
12
|
+
this switch is a no-op placeholder for symmetry with install.
|
|
13
|
+
|
|
14
|
+
.EXAMPLE
|
|
15
|
+
.\uninstall-tasks.ps1
|
|
16
|
+
#>
|
|
17
|
+
|
|
18
|
+
[CmdletBinding()]
|
|
19
|
+
param(
|
|
20
|
+
[switch]$KeepLogs
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
Set-StrictMode -Version Latest
|
|
24
|
+
$ErrorActionPreference = 'Stop'
|
|
25
|
+
|
|
26
|
+
$TaskFolder = '\SKCapstone'
|
|
27
|
+
$LogDir = Join-Path $env:USERPROFILE '.skcapstone\logs'
|
|
28
|
+
|
|
29
|
+
Write-Host '=== SKCapstone Task Scheduler Removal ===' -ForegroundColor Cyan
|
|
30
|
+
Write-Host ''
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------------------------
|
|
33
|
+
# Remove all tasks under \SKCapstone\
|
|
34
|
+
# ---------------------------------------------------------------------------
|
|
35
|
+
$taskNames = @(
|
|
36
|
+
'SKCapstone-Daemon',
|
|
37
|
+
'SKCapstone-MemoryCompress',
|
|
38
|
+
'SKCapstone-SyncWatcher',
|
|
39
|
+
'SKCapstone-Heartbeat',
|
|
40
|
+
'SKCapstone-Housekeeping'
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
$removed = 0
|
|
44
|
+
$notFound = 0
|
|
45
|
+
|
|
46
|
+
foreach ($name in $taskNames) {
|
|
47
|
+
try {
|
|
48
|
+
$task = Get-ScheduledTask -TaskName $name -TaskPath "$TaskFolder\" -ErrorAction SilentlyContinue
|
|
49
|
+
if ($task) {
|
|
50
|
+
# Stop the task if it is running
|
|
51
|
+
if ($task.State -eq 'Running') {
|
|
52
|
+
Stop-ScheduledTask -TaskName $name -TaskPath "$TaskFolder\" -ErrorAction SilentlyContinue
|
|
53
|
+
Write-Host " Stopped running task: $name" -ForegroundColor Yellow
|
|
54
|
+
}
|
|
55
|
+
Unregister-ScheduledTask -TaskName $name -TaskPath "$TaskFolder\" -Confirm:$false
|
|
56
|
+
Write-Host " Removed: $TaskFolder\$name" -ForegroundColor Green
|
|
57
|
+
$removed++
|
|
58
|
+
} else {
|
|
59
|
+
Write-Host " Not found: $TaskFolder\$name" -ForegroundColor DarkGray
|
|
60
|
+
$notFound++
|
|
61
|
+
}
|
|
62
|
+
} catch {
|
|
63
|
+
Write-Host " Not found: $TaskFolder\$name" -ForegroundColor DarkGray
|
|
64
|
+
$notFound++
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# ---------------------------------------------------------------------------
|
|
69
|
+
# Try to remove the empty task folder
|
|
70
|
+
# ---------------------------------------------------------------------------
|
|
71
|
+
try {
|
|
72
|
+
# Check if any tasks remain in the folder
|
|
73
|
+
$remaining = Get-ScheduledTask -TaskPath "$TaskFolder\" -ErrorAction SilentlyContinue
|
|
74
|
+
if (-not $remaining) {
|
|
75
|
+
# The folder auto-removes when the last task is unregistered in most
|
|
76
|
+
# Windows versions, but we log the state for clarity.
|
|
77
|
+
Write-Host ''
|
|
78
|
+
Write-Host " Task folder $TaskFolder is now empty." -ForegroundColor Green
|
|
79
|
+
}
|
|
80
|
+
} catch {
|
|
81
|
+
# Folder already gone
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# ---------------------------------------------------------------------------
|
|
85
|
+
# Remove wrapper scripts
|
|
86
|
+
# ---------------------------------------------------------------------------
|
|
87
|
+
$wrapperDir = Join-Path $LogDir 'task-wrappers'
|
|
88
|
+
if (Test-Path $wrapperDir) {
|
|
89
|
+
$wrappers = Get-ChildItem -Path $wrapperDir -Filter '*.bat' -ErrorAction SilentlyContinue
|
|
90
|
+
if ($wrappers) {
|
|
91
|
+
foreach ($w in $wrappers) {
|
|
92
|
+
Remove-Item $w.FullName -Force
|
|
93
|
+
Write-Host " Removed wrapper: $($w.Name)" -ForegroundColor Green
|
|
94
|
+
}
|
|
95
|
+
# Remove directory if empty
|
|
96
|
+
$remaining = Get-ChildItem -Path $wrapperDir -ErrorAction SilentlyContinue
|
|
97
|
+
if (-not $remaining) {
|
|
98
|
+
Remove-Item $wrapperDir -Force
|
|
99
|
+
Write-Host " Removed wrapper directory" -ForegroundColor Green
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
Write-Host " No wrapper directory found" -ForegroundColor DarkGray
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# ---------------------------------------------------------------------------
|
|
107
|
+
# Summary
|
|
108
|
+
# ---------------------------------------------------------------------------
|
|
109
|
+
Write-Host ''
|
|
110
|
+
Write-Host "=== Done: $removed removed, $notFound not found ===" -ForegroundColor Cyan
|
|
111
|
+
Write-Host ''
|
|
112
|
+
if ($removed -gt 0) {
|
|
113
|
+
Write-Host 'All SKCapstone scheduled tasks have been removed.' -ForegroundColor Green
|
|
114
|
+
Write-Host "Log files preserved at: $LogDir" -ForegroundColor DarkGray
|
|
115
|
+
} else {
|
|
116
|
+
Write-Host 'No SKCapstone tasks were found to remove.' -ForegroundColor Yellow
|
|
117
|
+
}
|
package/skill.yaml
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: skcapstone
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
description: >
|
|
4
|
+
Sovereign Agent Framework — memory, identity, trust, coordination, and
|
|
5
|
+
consciousness pillars. The main runtime for Opus and Lumina agents.
|
|
6
|
+
Includes MCP server with 80+ tools for agent management.
|
|
7
|
+
|
|
8
|
+
author:
|
|
9
|
+
name: smilinTux.org
|
|
10
|
+
email: hello@smilintux.org
|
|
11
|
+
|
|
12
|
+
tags: [agent, memory, identity, trust, coordination, consciousness, mcp, sovereign]
|
|
13
|
+
category: core
|
|
14
|
+
|
|
15
|
+
tools:
|
|
16
|
+
- name: agent_status
|
|
17
|
+
description: Get the sovereign agent's pillar status and health
|
|
18
|
+
entrypoint: skcapstone.skill:agent_status
|
|
19
|
+
|
|
20
|
+
- name: memory_store
|
|
21
|
+
description: Store a new agent memory
|
|
22
|
+
entrypoint: skcapstone.skill:memory_store
|
|
23
|
+
|
|
24
|
+
- name: memory_search
|
|
25
|
+
description: Search agent memories by query
|
|
26
|
+
entrypoint: skcapstone.skill:memory_search
|
|
27
|
+
|
|
28
|
+
- name: coord_status
|
|
29
|
+
description: Show the multi-agent coordination board
|
|
30
|
+
entrypoint: skcapstone.skill:coord_status
|
|
31
|
+
|
|
32
|
+
- name: consciousness_status
|
|
33
|
+
description: Get consciousness loop status and health
|
|
34
|
+
entrypoint: skcapstone.skill:consciousness_status
|