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