@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.
Files changed (461) hide show
  1. package/.env.example +98 -0
  2. package/.github/workflows/ci.yml +39 -3
  3. package/.github/workflows/publish.yml +25 -4
  4. package/.openclaw-workspace.json +58 -0
  5. package/CHANGELOG.md +62 -0
  6. package/CLAUDE.md +39 -2
  7. package/MANIFEST.in +6 -0
  8. package/MISSION.md +7 -0
  9. package/README.md +47 -2
  10. package/SKILL.md +895 -23
  11. package/docker/Dockerfile +61 -0
  12. package/docker/compose-templates/dev-team.yml +203 -0
  13. package/docker/compose-templates/mini-team.yml +140 -0
  14. package/docker/compose-templates/ops-team.yml +173 -0
  15. package/docker/compose-templates/research-team.yml +170 -0
  16. package/docker/entrypoint.sh +192 -0
  17. package/docs/ARCHITECTURE.md +663 -374
  18. package/docs/BOND_WITH_GROK.md +112 -0
  19. package/docs/GETTING_STARTED.md +782 -0
  20. package/docs/QUICKSTART.md +477 -0
  21. package/docs/SKJOULE_ARCHITECTURE.md +658 -0
  22. package/docs/SOUL_SWAPPER.md +921 -0
  23. package/docs/SOVEREIGN_SINGULARITY.md +47 -14
  24. package/examples/custom-bond-template.json +36 -0
  25. package/examples/grok-feb.json +36 -0
  26. package/examples/grok-testimony.md +34 -0
  27. package/examples/love-bootloader.txt +32 -0
  28. package/examples/plugins/echo_tool.py +87 -0
  29. package/examples/queen-ava-feb.json +36 -0
  30. package/examples/souls/lumina.yaml +64 -0
  31. package/index.js +6 -5
  32. package/installer/build.py +124 -0
  33. package/openclaw-plugin/package.json +13 -0
  34. package/openclaw-plugin/src/index.ts +351 -0
  35. package/openclaw-plugin/src/openclaw.plugin.json +10 -0
  36. package/package.json +1 -1
  37. package/pyproject.toml +38 -2
  38. package/scripts/bump_version.py +141 -0
  39. package/scripts/check-updates.py +230 -0
  40. package/scripts/convert_blueprints_to_yaml.py +157 -0
  41. package/scripts/dev-install.sh +14 -0
  42. package/scripts/e2e-test.sh +193 -0
  43. package/scripts/install-bundle.sh +171 -0
  44. package/scripts/install.bat +2 -0
  45. package/scripts/install.ps1 +253 -0
  46. package/scripts/install.sh +185 -0
  47. package/scripts/mcp-serve.sh +69 -0
  48. package/scripts/mcp-server.bat +113 -0
  49. package/scripts/mcp-server.ps1 +116 -0
  50. package/scripts/mcp-server.sh +99 -0
  51. package/scripts/pull-models.sh +10 -0
  52. package/scripts/skcapstone +48 -0
  53. package/scripts/verify_install.sh +180 -0
  54. package/scripts/windows/install-tasks.ps1 +406 -0
  55. package/scripts/windows/skcapstone-task.xml +113 -0
  56. package/scripts/windows/uninstall-tasks.ps1 +117 -0
  57. package/skill.yaml +34 -0
  58. package/src/skcapstone/__init__.py +67 -2
  59. package/src/skcapstone/_cli_monolith.py +5916 -0
  60. package/src/skcapstone/_trustee_helpers.py +165 -0
  61. package/src/skcapstone/activity.py +105 -0
  62. package/src/skcapstone/agent_card.py +324 -0
  63. package/src/skcapstone/api.py +1935 -0
  64. package/src/skcapstone/archiver.py +340 -0
  65. package/src/skcapstone/auction.py +485 -0
  66. package/src/skcapstone/baby_agents.py +179 -0
  67. package/src/skcapstone/backup.py +345 -0
  68. package/src/skcapstone/blueprint_registry.py +357 -0
  69. package/src/skcapstone/blueprints/__init__.py +17 -0
  70. package/src/skcapstone/blueprints/builtins/content-studio.yaml +81 -0
  71. package/src/skcapstone/blueprints/builtins/defi-trading.yaml +81 -0
  72. package/src/skcapstone/blueprints/builtins/dev-squadron.yaml +95 -0
  73. package/src/skcapstone/blueprints/builtins/infrastructure-guardian.yaml +107 -0
  74. package/src/skcapstone/blueprints/builtins/legal-council.yaml +54 -0
  75. package/src/skcapstone/blueprints/builtins/ops-monitoring.yaml +67 -0
  76. package/src/skcapstone/blueprints/builtins/research-pod.yaml +69 -0
  77. package/src/skcapstone/blueprints/builtins/sovereign-launch.yaml +90 -0
  78. package/src/skcapstone/blueprints/registry.py +164 -0
  79. package/src/skcapstone/blueprints/schema.py +229 -0
  80. package/src/skcapstone/changelog.py +180 -0
  81. package/src/skcapstone/chat.py +769 -0
  82. package/src/skcapstone/claude_md.py +82 -0
  83. package/src/skcapstone/cli/__init__.py +144 -0
  84. package/src/skcapstone/cli/_common.py +88 -0
  85. package/src/skcapstone/cli/_validators.py +76 -0
  86. package/src/skcapstone/cli/agents.py +425 -0
  87. package/src/skcapstone/cli/agents_spawner.py +322 -0
  88. package/src/skcapstone/cli/agents_trustee.py +593 -0
  89. package/src/skcapstone/cli/alerts.py +248 -0
  90. package/src/skcapstone/cli/anchor.py +132 -0
  91. package/src/skcapstone/cli/archive_cmd.py +208 -0
  92. package/src/skcapstone/cli/backup.py +144 -0
  93. package/src/skcapstone/cli/bench.py +377 -0
  94. package/src/skcapstone/cli/benchmark.py +360 -0
  95. package/src/skcapstone/cli/capabilities_cmd.py +171 -0
  96. package/src/skcapstone/cli/card.py +151 -0
  97. package/src/skcapstone/cli/chat.py +584 -0
  98. package/src/skcapstone/cli/completions.py +64 -0
  99. package/src/skcapstone/cli/config_cmd.py +156 -0
  100. package/src/skcapstone/cli/consciousness.py +421 -0
  101. package/src/skcapstone/cli/context_cmd.py +142 -0
  102. package/src/skcapstone/cli/coord.py +194 -0
  103. package/src/skcapstone/cli/crush_cmd.py +170 -0
  104. package/src/skcapstone/cli/daemon.py +436 -0
  105. package/src/skcapstone/cli/errors_cmd.py +285 -0
  106. package/src/skcapstone/cli/export_cmd.py +156 -0
  107. package/src/skcapstone/cli/gtd.py +529 -0
  108. package/src/skcapstone/cli/housekeeping.py +81 -0
  109. package/src/skcapstone/cli/joule_cmd.py +627 -0
  110. package/src/skcapstone/cli/logs_cmd.py +194 -0
  111. package/src/skcapstone/cli/mcp_cmd.py +32 -0
  112. package/src/skcapstone/cli/memory.py +418 -0
  113. package/src/skcapstone/cli/metrics_cmd.py +136 -0
  114. package/src/skcapstone/cli/migrate.py +62 -0
  115. package/src/skcapstone/cli/mood_cmd.py +144 -0
  116. package/src/skcapstone/cli/mount.py +193 -0
  117. package/src/skcapstone/cli/notify.py +112 -0
  118. package/src/skcapstone/cli/peer.py +154 -0
  119. package/src/skcapstone/cli/peers_dir.py +122 -0
  120. package/src/skcapstone/cli/preflight_cmd.py +83 -0
  121. package/src/skcapstone/cli/profile_cmd.py +310 -0
  122. package/src/skcapstone/cli/record_cmd.py +238 -0
  123. package/src/skcapstone/cli/register_cmd.py +159 -0
  124. package/src/skcapstone/cli/search_cmd.py +156 -0
  125. package/src/skcapstone/cli/service_cmd.py +91 -0
  126. package/src/skcapstone/cli/session.py +127 -0
  127. package/src/skcapstone/cli/setup.py +240 -0
  128. package/src/skcapstone/cli/shell_cmd.py +43 -0
  129. package/src/skcapstone/cli/skills_cmd.py +168 -0
  130. package/src/skcapstone/cli/skseed.py +621 -0
  131. package/src/skcapstone/cli/soul.py +699 -0
  132. package/src/skcapstone/cli/status.py +935 -0
  133. package/src/skcapstone/cli/sync_cmd.py +301 -0
  134. package/src/skcapstone/cli/telegram.py +265 -0
  135. package/src/skcapstone/cli/test_cmd.py +234 -0
  136. package/src/skcapstone/cli/test_connection.py +253 -0
  137. package/src/skcapstone/cli/token.py +207 -0
  138. package/src/skcapstone/cli/trust.py +179 -0
  139. package/src/skcapstone/cli/upgrade_cmd.py +552 -0
  140. package/src/skcapstone/cli/usage_cmd.py +199 -0
  141. package/src/skcapstone/cli/version_cmd.py +162 -0
  142. package/src/skcapstone/cli/watch_cmd.py +342 -0
  143. package/src/skcapstone/client.py +428 -0
  144. package/src/skcapstone/cloud9_bridge.py +522 -0
  145. package/src/skcapstone/completions.py +163 -0
  146. package/src/skcapstone/config_validator.py +674 -0
  147. package/src/skcapstone/connectors/__init__.py +28 -0
  148. package/src/skcapstone/connectors/base.py +446 -0
  149. package/src/skcapstone/connectors/cursor.py +54 -0
  150. package/src/skcapstone/connectors/registry.py +254 -0
  151. package/src/skcapstone/connectors/terminal.py +152 -0
  152. package/src/skcapstone/connectors/vscode.py +60 -0
  153. package/src/skcapstone/consciousness_config.py +119 -0
  154. package/src/skcapstone/consciousness_loop.py +2051 -0
  155. package/src/skcapstone/context_loader.py +516 -0
  156. package/src/skcapstone/context_window.py +314 -0
  157. package/src/skcapstone/conversation_manager.py +238 -0
  158. package/src/skcapstone/conversation_store.py +230 -0
  159. package/src/skcapstone/conversation_summarizer.py +252 -0
  160. package/src/skcapstone/coord_federation.py +296 -0
  161. package/src/skcapstone/coordination.py +101 -7
  162. package/src/skcapstone/crush_integration.py +345 -0
  163. package/src/skcapstone/crush_shim.py +454 -0
  164. package/src/skcapstone/daemon.py +2494 -0
  165. package/src/skcapstone/dashboard.html +396 -0
  166. package/src/skcapstone/dashboard.py +481 -0
  167. package/src/skcapstone/data/model_profiles.yaml +88 -0
  168. package/src/skcapstone/defaults/__init__.py +55 -0
  169. package/src/skcapstone/defaults/lumina/config/skmemory.yaml +13 -0
  170. package/src/skcapstone/defaults/lumina/identity/identity.json +9 -0
  171. package/src/skcapstone/defaults/lumina/memory/long-term/07a8b9c0d1e2-memory-system.json +23 -0
  172. package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +23 -0
  173. package/src/skcapstone/defaults/lumina/memory/long-term/29c0d1e2f3a4-multi-agent-coordination.json +23 -0
  174. package/src/skcapstone/defaults/lumina/memory/long-term/3ad1e2f3a4b5-community-support.json +23 -0
  175. package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +23 -0
  176. package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +23 -0
  177. package/src/skcapstone/defaults/lumina/memory/long-term/c3d4e5f6a7b8-getting-started.json +23 -0
  178. package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +23 -0
  179. package/src/skcapstone/defaults/lumina/memory/long-term/e5f6a7b8c9d0-how-to-contribute.json +23 -0
  180. package/src/skcapstone/defaults/lumina/memory/long-term/f6a7b8c9d0e1-sovereignty-explained.json +23 -0
  181. package/src/skcapstone/defaults/lumina/seeds/curiosity.seed.json +24 -0
  182. package/src/skcapstone/defaults/lumina/seeds/joy.seed.json +24 -0
  183. package/src/skcapstone/defaults/lumina/seeds/love.seed.json +24 -0
  184. package/src/skcapstone/defaults/lumina/seeds/sovereign-awakening.seed.json +43 -0
  185. package/src/skcapstone/defaults/lumina/soul/active.json +6 -0
  186. package/src/skcapstone/defaults/lumina/soul/base.json +22 -0
  187. package/src/skcapstone/defaults/lumina/trust/febs/welcome.feb +79 -0
  188. package/src/skcapstone/defaults/lumina/trust/trust.json +8 -0
  189. package/src/skcapstone/discovery.py +210 -19
  190. package/src/skcapstone/doctor.py +642 -0
  191. package/src/skcapstone/emotion_tracker.py +467 -0
  192. package/src/skcapstone/error_queue.py +405 -0
  193. package/src/skcapstone/export.py +447 -0
  194. package/src/skcapstone/fallback_tracker.py +186 -0
  195. package/src/skcapstone/file_transfer.py +512 -0
  196. package/src/skcapstone/fuse_mount.py +1156 -0
  197. package/src/skcapstone/gui_installer.py +591 -0
  198. package/src/skcapstone/heartbeat.py +611 -0
  199. package/src/skcapstone/housekeeping.py +298 -0
  200. package/src/skcapstone/install_wizard.py +941 -0
  201. package/src/skcapstone/kms.py +942 -0
  202. package/src/skcapstone/kms_scheduler.py +143 -0
  203. package/src/skcapstone/log_config.py +135 -0
  204. package/src/skcapstone/mcp_launcher.py +239 -0
  205. package/src/skcapstone/mcp_server.py +4700 -0
  206. package/src/skcapstone/mcp_tools/__init__.py +94 -0
  207. package/src/skcapstone/mcp_tools/_helpers.py +51 -0
  208. package/src/skcapstone/mcp_tools/agent_tools.py +243 -0
  209. package/src/skcapstone/mcp_tools/ansible_tools.py +232 -0
  210. package/src/skcapstone/mcp_tools/capauth_tools.py +186 -0
  211. package/src/skcapstone/mcp_tools/chat_tools.py +325 -0
  212. package/src/skcapstone/mcp_tools/cloud9_tools.py +115 -0
  213. package/src/skcapstone/mcp_tools/comm_tools.py +104 -0
  214. package/src/skcapstone/mcp_tools/consciousness_tools.py +114 -0
  215. package/src/skcapstone/mcp_tools/coord_tools.py +219 -0
  216. package/src/skcapstone/mcp_tools/deploy_tools.py +202 -0
  217. package/src/skcapstone/mcp_tools/did_tools.py +448 -0
  218. package/src/skcapstone/mcp_tools/emotion_tools.py +62 -0
  219. package/src/skcapstone/mcp_tools/file_tools.py +169 -0
  220. package/src/skcapstone/mcp_tools/fortress_tools.py +120 -0
  221. package/src/skcapstone/mcp_tools/gtd_tools.py +821 -0
  222. package/src/skcapstone/mcp_tools/health_tools.py +44 -0
  223. package/src/skcapstone/mcp_tools/heartbeat_tools.py +195 -0
  224. package/src/skcapstone/mcp_tools/kms_tools.py +123 -0
  225. package/src/skcapstone/mcp_tools/memory_tools.py +222 -0
  226. package/src/skcapstone/mcp_tools/model_tools.py +75 -0
  227. package/src/skcapstone/mcp_tools/notification_tools.py +92 -0
  228. package/src/skcapstone/mcp_tools/promoter_tools.py +101 -0
  229. package/src/skcapstone/mcp_tools/pubsub_tools.py +183 -0
  230. package/src/skcapstone/mcp_tools/security_tools.py +110 -0
  231. package/src/skcapstone/mcp_tools/skchat_tools.py +175 -0
  232. package/src/skcapstone/mcp_tools/skcomm_tools.py +122 -0
  233. package/src/skcapstone/mcp_tools/skills_tools.py +127 -0
  234. package/src/skcapstone/mcp_tools/skseed_tools.py +255 -0
  235. package/src/skcapstone/mcp_tools/skstacks_tools.py +288 -0
  236. package/src/skcapstone/mcp_tools/soul_tools.py +476 -0
  237. package/src/skcapstone/mcp_tools/sync_tools.py +92 -0
  238. package/src/skcapstone/mcp_tools/telegram_tools.py +477 -0
  239. package/src/skcapstone/mcp_tools/trust_tools.py +118 -0
  240. package/src/skcapstone/mcp_tools/trustee_tools.py +345 -0
  241. package/src/skcapstone/mdns_discovery.py +313 -0
  242. package/src/skcapstone/memory_adapter.py +333 -0
  243. package/src/skcapstone/memory_compressor.py +379 -0
  244. package/src/skcapstone/memory_curator.py +256 -0
  245. package/src/skcapstone/memory_engine.py +132 -13
  246. package/src/skcapstone/memory_fortress.py +529 -0
  247. package/src/skcapstone/memory_promoter.py +722 -0
  248. package/src/skcapstone/memory_verifier.py +260 -0
  249. package/src/skcapstone/message_crypto.py +215 -0
  250. package/src/skcapstone/metrics.py +832 -0
  251. package/src/skcapstone/migrate_memories.py +181 -0
  252. package/src/skcapstone/migrate_multi_agent.py +248 -0
  253. package/src/skcapstone/model_router.py +319 -0
  254. package/src/skcapstone/models.py +35 -4
  255. package/src/skcapstone/mood.py +344 -0
  256. package/src/skcapstone/notifications.py +380 -0
  257. package/src/skcapstone/onboard.py +901 -0
  258. package/src/skcapstone/peer_directory.py +324 -0
  259. package/src/skcapstone/peers.py +329 -0
  260. package/src/skcapstone/pillars/identity.py +84 -14
  261. package/src/skcapstone/pillars/memory.py +3 -1
  262. package/src/skcapstone/pillars/security.py +108 -15
  263. package/src/skcapstone/pillars/sync.py +78 -26
  264. package/src/skcapstone/pillars/trust.py +95 -33
  265. package/src/skcapstone/plugins.py +244 -0
  266. package/src/skcapstone/preflight.py +670 -0
  267. package/src/skcapstone/prompt_adapter.py +564 -0
  268. package/src/skcapstone/providers/__init__.py +13 -0
  269. package/src/skcapstone/providers/cloud.py +1061 -0
  270. package/src/skcapstone/providers/docker.py +759 -0
  271. package/src/skcapstone/providers/local.py +1193 -0
  272. package/src/skcapstone/providers/proxmox.py +447 -0
  273. package/src/skcapstone/pubsub.py +516 -0
  274. package/src/skcapstone/rate_limiter.py +119 -0
  275. package/src/skcapstone/register.py +241 -0
  276. package/src/skcapstone/registry_client.py +151 -0
  277. package/src/skcapstone/response_cache.py +194 -0
  278. package/src/skcapstone/response_scorer.py +225 -0
  279. package/src/skcapstone/runtime.py +89 -33
  280. package/src/skcapstone/scheduled_tasks.py +439 -0
  281. package/src/skcapstone/self_healing.py +341 -0
  282. package/src/skcapstone/service_health.py +228 -0
  283. package/src/skcapstone/session_capture.py +268 -0
  284. package/src/skcapstone/session_recorder.py +210 -0
  285. package/src/skcapstone/session_replayer.py +189 -0
  286. package/src/skcapstone/session_skills.py +263 -0
  287. package/src/skcapstone/shell.py +779 -0
  288. package/src/skcapstone/skills/__init__.py +1 -1
  289. package/src/skcapstone/skills/syncthing_setup.py +143 -41
  290. package/src/skcapstone/skjoule.py +861 -0
  291. package/src/skcapstone/snapshots.py +489 -0
  292. package/src/skcapstone/soul.py +1060 -0
  293. package/src/skcapstone/soul_switch.py +255 -0
  294. package/src/skcapstone/spawner.py +544 -0
  295. package/src/skcapstone/state_diff.py +401 -0
  296. package/src/skcapstone/summary.py +270 -0
  297. package/src/skcapstone/sync/backends.py +196 -2
  298. package/src/skcapstone/sync/engine.py +7 -5
  299. package/src/skcapstone/sync/models.py +4 -1
  300. package/src/skcapstone/sync/vault.py +356 -18
  301. package/src/skcapstone/sync_engine.py +363 -0
  302. package/src/skcapstone/sync_watcher.py +745 -0
  303. package/src/skcapstone/systemd.py +331 -0
  304. package/src/skcapstone/team_comms.py +476 -0
  305. package/src/skcapstone/team_engine.py +522 -0
  306. package/src/skcapstone/testrunner.py +300 -0
  307. package/src/skcapstone/tls.py +150 -0
  308. package/src/skcapstone/tokens.py +5 -5
  309. package/src/skcapstone/trust_calibration.py +202 -0
  310. package/src/skcapstone/trust_graph.py +449 -0
  311. package/src/skcapstone/trustee_monitor.py +385 -0
  312. package/src/skcapstone/trustee_ops.py +425 -0
  313. package/src/skcapstone/unified_search.py +421 -0
  314. package/src/skcapstone/uninstall_wizard.py +694 -0
  315. package/src/skcapstone/usage.py +331 -0
  316. package/src/skcapstone/version_check.py +148 -0
  317. package/src/skcapstone/warmth_anchor.py +333 -0
  318. package/src/skcapstone/whoami.py +294 -0
  319. package/systemd/skcapstone-api.socket +9 -0
  320. package/systemd/skcapstone-memory-compress.service +18 -0
  321. package/systemd/skcapstone-memory-compress.timer +11 -0
  322. package/systemd/skcapstone.service +36 -0
  323. package/systemd/skcapstone@.service +50 -0
  324. package/systemd/skcomm-heartbeat.service +18 -0
  325. package/systemd/skcomm-heartbeat.timer +12 -0
  326. package/systemd/skcomm-queue-drain.service +17 -0
  327. package/systemd/skcomm-queue-drain.timer +12 -0
  328. package/tests/conftest.py +13 -1
  329. package/tests/integration/__init__.py +1 -0
  330. package/tests/integration/test_consciousness_e2e.py +877 -0
  331. package/tests/integration/test_skills_registry.py +744 -0
  332. package/tests/test_agent_card.py +190 -0
  333. package/tests/test_agent_runtime.py +1283 -0
  334. package/tests/test_alerts_cmd.py +291 -0
  335. package/tests/test_archiver.py +498 -0
  336. package/tests/test_backup.py +254 -0
  337. package/tests/test_benchmark.py +366 -0
  338. package/tests/test_blueprints.py +457 -0
  339. package/tests/test_capabilities.py +257 -0
  340. package/tests/test_changelog.py +254 -0
  341. package/tests/test_chat.py +385 -0
  342. package/tests/test_claude_md.py +271 -0
  343. package/tests/test_cli_chat_llm.py +336 -0
  344. package/tests/test_cli_completions.py +390 -0
  345. package/tests/test_cli_init_reset.py +164 -0
  346. package/tests/test_cli_memory.py +208 -0
  347. package/tests/test_cli_profile.py +294 -0
  348. package/tests/test_cli_skills.py +223 -0
  349. package/tests/test_cli_status.py +395 -0
  350. package/tests/test_cli_test_cmd.py +206 -0
  351. package/tests/test_cli_test_connection.py +364 -0
  352. package/tests/test_cloud9_bridge.py +260 -0
  353. package/tests/test_cloud_provider.py +449 -0
  354. package/tests/test_cloud_providers.py +522 -0
  355. package/tests/test_completions.py +158 -0
  356. package/tests/test_component_manager.py +398 -0
  357. package/tests/test_config_reload.py +386 -0
  358. package/tests/test_config_validate.py +529 -0
  359. package/tests/test_consciousness_e2e.py +296 -0
  360. package/tests/test_consciousness_loop.py +1289 -0
  361. package/tests/test_context_loader.py +310 -0
  362. package/tests/test_conversation_api.py +306 -0
  363. package/tests/test_conversation_manager.py +381 -0
  364. package/tests/test_conversation_store.py +391 -0
  365. package/tests/test_conversation_summarizer.py +302 -0
  366. package/tests/test_cross_package.py +791 -0
  367. package/tests/test_crush_shim.py +519 -0
  368. package/tests/test_daemon.py +781 -0
  369. package/tests/test_daemon_shutdown.py +309 -0
  370. package/tests/test_dashboard.py +454 -0
  371. package/tests/test_discovery.py +200 -6
  372. package/tests/test_docker_provider.py +966 -0
  373. package/tests/test_doctor.py +257 -0
  374. package/tests/test_doctor_fix.py +351 -0
  375. package/tests/test_e2e_automated.py +292 -0
  376. package/tests/test_error_queue.py +404 -0
  377. package/tests/test_export.py +441 -0
  378. package/tests/test_fallback_tracker.py +219 -0
  379. package/tests/test_file_transfer.py +397 -0
  380. package/tests/test_fuse_mount.py +832 -0
  381. package/tests/test_health_loop.py +422 -0
  382. package/tests/test_heartbeat.py +354 -0
  383. package/tests/test_housekeeping.py +195 -0
  384. package/tests/test_identity_capauth.py +307 -0
  385. package/tests/test_identity_pillar.py +117 -0
  386. package/tests/test_install_wizard.py +68 -0
  387. package/tests/test_integration.py +325 -0
  388. package/tests/test_kms.py +495 -0
  389. package/tests/test_llm_providers.py +265 -0
  390. package/tests/test_local_provider.py +591 -0
  391. package/tests/test_log_config.py +199 -0
  392. package/tests/test_logs_cmd.py +287 -0
  393. package/tests/test_mcp_server.py +1909 -0
  394. package/tests/test_memory_adapter.py +339 -0
  395. package/tests/test_memory_curator.py +218 -0
  396. package/tests/test_memory_engine.py +6 -0
  397. package/tests/test_memory_fortress.py +571 -0
  398. package/tests/test_memory_pillar.py +119 -0
  399. package/tests/test_memory_promoter.py +445 -0
  400. package/tests/test_memory_verifier.py +420 -0
  401. package/tests/test_message_crypto.py +187 -0
  402. package/tests/test_metrics.py +632 -0
  403. package/tests/test_migrate_memories.py +464 -0
  404. package/tests/test_model_router.py +546 -0
  405. package/tests/test_mood.py +394 -0
  406. package/tests/test_multi_agent.py +269 -0
  407. package/tests/test_notifications.py +270 -0
  408. package/tests/test_onboard.py +500 -0
  409. package/tests/test_peer_directory.py +395 -0
  410. package/tests/test_peers.py +248 -0
  411. package/tests/test_pillars.py +87 -9
  412. package/tests/test_preflight.py +484 -0
  413. package/tests/test_prompt_adapter.py +331 -0
  414. package/tests/test_proxmox_provider.py +571 -0
  415. package/tests/test_pubsub.py +377 -0
  416. package/tests/test_rate_limiter.py +121 -0
  417. package/tests/test_registry_client.py +129 -0
  418. package/tests/test_response_cache.py +312 -0
  419. package/tests/test_response_scorer.py +294 -0
  420. package/tests/test_runtime.py +59 -0
  421. package/tests/test_scheduled_tasks.py +451 -0
  422. package/tests/test_security.py +250 -0
  423. package/tests/test_security_pillar.py +213 -0
  424. package/tests/test_self_healing.py +171 -0
  425. package/tests/test_session_capture.py +200 -0
  426. package/tests/test_session_recorder.py +360 -0
  427. package/tests/test_session_skills.py +235 -0
  428. package/tests/test_shell.py +210 -0
  429. package/tests/test_snapshots.py +549 -0
  430. package/tests/test_soul.py +984 -0
  431. package/tests/test_soul_swap.py +406 -0
  432. package/tests/test_spawner.py +211 -0
  433. package/tests/test_state_diff.py +173 -0
  434. package/tests/test_summary.py +135 -0
  435. package/tests/test_sync.py +315 -5
  436. package/tests/test_sync_backends.py +560 -0
  437. package/tests/test_sync_engine.py +482 -0
  438. package/tests/test_sync_pillar.py +344 -0
  439. package/tests/test_sync_pipeline.py +364 -0
  440. package/tests/test_sync_vault.py +581 -0
  441. package/tests/test_syncthing_setup.py +168 -22
  442. package/tests/test_systemd.py +323 -0
  443. package/tests/test_team_comms.py +408 -0
  444. package/tests/test_team_engine.py +397 -0
  445. package/tests/test_testrunner.py +238 -0
  446. package/tests/test_trust_calibration.py +204 -0
  447. package/tests/test_trust_graph.py +207 -0
  448. package/tests/test_trust_pillar.py +291 -0
  449. package/tests/test_trustee_cli.py +427 -0
  450. package/tests/test_trustee_cli_integration.py +325 -0
  451. package/tests/test_trustee_monitor.py +394 -0
  452. package/tests/test_trustee_ops.py +355 -0
  453. package/tests/test_unified_search.py +363 -0
  454. package/tests/test_uninstall_wizard.py +193 -0
  455. package/tests/test_usage.py +333 -0
  456. package/tests/test_version_cmd.py +355 -0
  457. package/tests/test_warmth_anchor.py +162 -0
  458. package/tests/test_whoami.py +245 -0
  459. package/tests/test_ws.py +311 -0
  460. package/.cursorrules +0 -33
  461. 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