@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,122 @@
1
+ """SKComm notification and status tools.
2
+
3
+ Exposes two tools:
4
+ comm_notify — Send a notification via SKComm transports
5
+ comm_status — Show SKComm subsystem status
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from mcp.types import TextContent, Tool
11
+
12
+ from ._helpers import _error_response, _home, _json_response
13
+
14
+ TOOLS: list[Tool] = [
15
+ Tool(
16
+ name="comm_notify",
17
+ description=(
18
+ "Send a notification message via SKComm. Routes through "
19
+ "available transports (Syncthing, file, Tailscale). "
20
+ "Supports urgency levels for priority routing."
21
+ ),
22
+ inputSchema={
23
+ "type": "object",
24
+ "properties": {
25
+ "recipient": {
26
+ "type": "string",
27
+ "description": "Agent name or PGP fingerprint of the recipient",
28
+ },
29
+ "message": {
30
+ "type": "string",
31
+ "description": "Notification message content",
32
+ },
33
+ "urgency": {
34
+ "type": "string",
35
+ "enum": ["low", "normal", "high", "critical"],
36
+ "description": "Notification urgency (default: normal)",
37
+ },
38
+ "subject": {
39
+ "type": "string",
40
+ "description": "Optional notification subject line",
41
+ },
42
+ },
43
+ "required": ["recipient", "message"],
44
+ },
45
+ ),
46
+ Tool(
47
+ name="comm_status",
48
+ description=(
49
+ "Show SKComm subsystem status: installed version, "
50
+ "available transports, connection state, and recent "
51
+ "delivery statistics."
52
+ ),
53
+ inputSchema={"type": "object", "properties": {}, "required": []},
54
+ ),
55
+ ]
56
+
57
+
58
+ async def _handle_comm_notify(args: dict) -> list[TextContent]:
59
+ """Send a notification via SKComm."""
60
+ recipient = args.get("recipient", "")
61
+ message = args.get("message", "")
62
+ if not recipient or not message:
63
+ return _error_response("recipient and message are required")
64
+
65
+ try:
66
+ from skcomm.core import SKComm # type: ignore[import]
67
+
68
+ comm = SKComm.from_config()
69
+ report = comm.send(recipient, message)
70
+ return _json_response({
71
+ "sent": report.success,
72
+ "recipient": recipient,
73
+ "urgency": args.get("urgency", "normal"),
74
+ "attempts": [
75
+ {
76
+ "transport": a.transport_name,
77
+ "success": a.success,
78
+ "error": a.error,
79
+ }
80
+ for a in report.attempts
81
+ ],
82
+ })
83
+ except ImportError:
84
+ return _error_response("SKComm not installed. Run: pip install skcomm")
85
+ except Exception as exc:
86
+ return _error_response(f"Notification send failed: {exc}")
87
+
88
+
89
+ async def _handle_comm_status(_args: dict) -> list[TextContent]:
90
+ """Show SKComm subsystem status."""
91
+ result: dict = {}
92
+
93
+ try:
94
+ import skcomm # type: ignore[import]
95
+
96
+ result["installed"] = True
97
+ result["version"] = getattr(skcomm, "__version__", "unknown")
98
+ except ImportError:
99
+ result["installed"] = False
100
+ result["version"] = None
101
+ return _json_response(result)
102
+
103
+ try:
104
+ from skcomm.core import SKComm # type: ignore[import]
105
+
106
+ comm = SKComm.from_config()
107
+ result["transports"] = [
108
+ t.name for t in getattr(comm, "transports", [])
109
+ ]
110
+ result["connected"] = True
111
+ except Exception as exc:
112
+ result["transports"] = []
113
+ result["connected"] = False
114
+ result["error"] = str(exc)
115
+
116
+ return _json_response(result)
117
+
118
+
119
+ HANDLERS: dict = {
120
+ "comm_notify": _handle_comm_notify,
121
+ "comm_status": _handle_comm_status,
122
+ }
@@ -0,0 +1,127 @@
1
+ """SKSkills list and run tools."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+
7
+ from mcp.types import TextContent, Tool
8
+
9
+ from ._helpers import _error_response, _get_agent_name, _home, _json_response, _text_response
10
+
11
+ logger = logging.getLogger("skcapstone.mcp")
12
+
13
+ TOOLS: list[Tool] = [
14
+ Tool(
15
+ name="skskills_list_tools",
16
+ description=(
17
+ "List all tools available from installed SKSkills agent skills. "
18
+ "Returns tool names in 'skill_name.tool_name' format, descriptions, "
19
+ "and which skills are enabled or disabled. Use this to discover "
20
+ "what skill capabilities are available before calling skskills_run_tool."
21
+ ),
22
+ inputSchema={
23
+ "type": "object",
24
+ "properties": {
25
+ "agent": {
26
+ "type": "string",
27
+ "description": "Agent namespace to load skills for (default: global)",
28
+ },
29
+ },
30
+ "required": [],
31
+ },
32
+ ),
33
+ Tool(
34
+ name="skskills_run_tool",
35
+ description=(
36
+ "Run a specific skill tool by its qualified name (skill_name.tool_name). "
37
+ "Use skskills_list_tools first to discover available tools. "
38
+ "Example: skskills_run_tool with tool='syncthing-setup.check_status'."
39
+ ),
40
+ inputSchema={
41
+ "type": "object",
42
+ "properties": {
43
+ "tool": {
44
+ "type": "string",
45
+ "description": "Fully-qualified tool name, e.g. 'syncthing-setup.check_status'",
46
+ },
47
+ "args": {
48
+ "type": "object",
49
+ "description": "Arguments to pass to the tool (tool-specific)",
50
+ },
51
+ "agent": {
52
+ "type": "string",
53
+ "description": "Agent namespace to load skills for (default: global)",
54
+ },
55
+ },
56
+ "required": ["tool"],
57
+ },
58
+ ),
59
+ ]
60
+
61
+
62
+ async def _handle_skskills_list_tools(args: dict) -> list[TextContent]:
63
+ """List all tools from installed SKSkills agent skills."""
64
+ try:
65
+ from skskills.aggregator import SkillAggregator
66
+ except ImportError:
67
+ return _error_response(
68
+ "skskills is not installed. Run: pip install skskills"
69
+ )
70
+
71
+ agent = args.get("agent") or _get_agent_name(_home())
72
+ agg = SkillAggregator(agent=agent)
73
+ count = agg.load_all_skills()
74
+
75
+ tools = agg.loader.all_tools()
76
+ skills = agg.get_loaded_skills()
77
+
78
+ return _json_response({
79
+ "agent": agent,
80
+ "skills_loaded": count,
81
+ "skills": skills,
82
+ "tools": [
83
+ {
84
+ "name": t["name"],
85
+ "description": t["description"],
86
+ "inputSchema": t["inputSchema"],
87
+ }
88
+ for t in tools
89
+ ],
90
+ })
91
+
92
+
93
+ async def _handle_skskills_run_tool(args: dict) -> list[TextContent]:
94
+ """Run a specific skill tool by its qualified name."""
95
+ try:
96
+ from skskills.aggregator import SkillAggregator
97
+ except ImportError:
98
+ return _error_response(
99
+ "skskills is not installed. Run: pip install skskills"
100
+ )
101
+
102
+ tool_name = args.get("tool", "")
103
+ if not tool_name:
104
+ return _error_response("'tool' argument is required (e.g. 'syncthing-setup.check_status')")
105
+
106
+ agent = args.get("agent") or _get_agent_name(_home())
107
+ tool_args = args.get("args") or {}
108
+
109
+ agg = SkillAggregator(agent=agent)
110
+ agg.load_all_skills()
111
+
112
+ try:
113
+ result = await agg.loader.call_tool(tool_name, tool_args)
114
+ if isinstance(result, str):
115
+ return _text_response(result)
116
+ return _json_response(result)
117
+ except KeyError as exc:
118
+ return _error_response(str(exc))
119
+ except Exception as exc:
120
+ logger.exception("skskills_run_tool '%s' failed", tool_name)
121
+ return _error_response(f"{tool_name} failed: {exc}")
122
+
123
+
124
+ HANDLERS: dict = {
125
+ "skskills_list_tools": _handle_skskills_list_tools,
126
+ "skskills_run_tool": _handle_skskills_run_tool,
127
+ }
@@ -0,0 +1,255 @@
1
+ """SKSeed (Logic Kernel) tools."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from mcp.types import TextContent, Tool
6
+
7
+ from ._helpers import _error_response, _json_response
8
+
9
+ TOOLS: list[Tool] = [
10
+ Tool(
11
+ name="skseed_ingest",
12
+ description=(
13
+ "Ingest a document (file or URL) into long-term memory. "
14
+ "Supports PDF, Markdown, TXT, HTML files and HTTP(S) URLs. "
15
+ "Extracts text, identifies key claims, and stores as a searchable memory."
16
+ ),
17
+ inputSchema={
18
+ "type": "object",
19
+ "properties": {
20
+ "path": {
21
+ "type": "string",
22
+ "description": "File path or URL to ingest",
23
+ },
24
+ "title": {
25
+ "type": "string",
26
+ "description": "Optional title override for the document",
27
+ },
28
+ "tags": {
29
+ "type": "array",
30
+ "items": {"type": "string"},
31
+ "description": "Optional tags to attach to the memory",
32
+ },
33
+ },
34
+ "required": ["path"],
35
+ },
36
+ ),
37
+ Tool(
38
+ name="skseed_collide",
39
+ description=(
40
+ "Run a proposition through the 6-stage steel man collider. "
41
+ "Builds strongest version, strongest counter, smashes them together, "
42
+ "and extracts invariant truth. Returns coherence score and truth grade."
43
+ ),
44
+ inputSchema={
45
+ "type": "object",
46
+ "properties": {
47
+ "proposition": {
48
+ "type": "string",
49
+ "description": "The claim/argument/idea to analyze",
50
+ },
51
+ "context": {
52
+ "type": "string",
53
+ "description": "Domain context (e.g., security, ethics, identity)",
54
+ },
55
+ },
56
+ "required": ["proposition"],
57
+ },
58
+ ),
59
+ Tool(
60
+ name="skseed_audit",
61
+ description=(
62
+ "Scan memories for logic/truth misalignment. Extracts beliefs from "
63
+ "memory, clusters by domain, runs through collider, flags contradictions. "
64
+ "Separates truth misalignments from moral misalignments."
65
+ ),
66
+ inputSchema={
67
+ "type": "object",
68
+ "properties": {
69
+ "domain": {
70
+ "type": "string",
71
+ "description": "Filter by topic domain (optional)",
72
+ },
73
+ "triggered_by": {
74
+ "type": "string",
75
+ "description": "What triggered this audit (default: mcp)",
76
+ },
77
+ },
78
+ "required": [],
79
+ },
80
+ ),
81
+ Tool(
82
+ name="skseed_philosopher",
83
+ description=(
84
+ "Enter philosopher mode for brainstorming. Modes: socratic (challenge "
85
+ "assumptions), dialectic (thesis/antithesis/synthesis), adversarial "
86
+ "(max counter-arguments), collaborative (steel-man only, build together)."
87
+ ),
88
+ inputSchema={
89
+ "type": "object",
90
+ "properties": {
91
+ "topic": {
92
+ "type": "string",
93
+ "description": "The subject to explore",
94
+ },
95
+ "mode": {
96
+ "type": "string",
97
+ "description": "Brainstorming mode: socratic, dialectic, adversarial, collaborative (default: dialectic)",
98
+ "enum": ["socratic", "dialectic", "adversarial", "collaborative"],
99
+ },
100
+ },
101
+ "required": ["topic"],
102
+ },
103
+ ),
104
+ Tool(
105
+ name="skseed_truth_check",
106
+ description=(
107
+ "Check if a belief is truth-aligned. Runs through the steel man "
108
+ "collider and records the result. Tracks human beliefs, model beliefs, "
109
+ "and collider results separately."
110
+ ),
111
+ inputSchema={
112
+ "type": "object",
113
+ "properties": {
114
+ "belief": {
115
+ "type": "string",
116
+ "description": "The belief statement to check",
117
+ },
118
+ "source": {
119
+ "type": "string",
120
+ "description": "Who holds this belief: human or model (default: model)",
121
+ "enum": ["human", "model"],
122
+ },
123
+ "domain": {
124
+ "type": "string",
125
+ "description": "Topic domain (default: general)",
126
+ },
127
+ },
128
+ "required": ["belief"],
129
+ },
130
+ ),
131
+ Tool(
132
+ name="skseed_alignment",
133
+ description=(
134
+ "Show truth alignment status across all three belief stores "
135
+ "(human, model, collider). Lists open misalignment issues, "
136
+ "coherence trends, and three-way comparison."
137
+ ),
138
+ inputSchema={
139
+ "type": "object",
140
+ "properties": {
141
+ "domain": {
142
+ "type": "string",
143
+ "description": "Filter by domain (optional)",
144
+ },
145
+ "action": {
146
+ "type": "string",
147
+ "description": "Action: status, issues, ledger (default: status)",
148
+ "enum": ["status", "issues", "ledger"],
149
+ },
150
+ },
151
+ "required": [],
152
+ },
153
+ ),
154
+ ]
155
+
156
+
157
+ async def _handle_skseed_ingest(args: dict) -> list[TextContent]:
158
+ """Ingest a document into long-term memory."""
159
+ from ..cli.skseed import ingest_document
160
+
161
+ path = args.get("path", "")
162
+ if not path:
163
+ return _error_response("path is required")
164
+
165
+ try:
166
+ result = ingest_document(
167
+ source=path,
168
+ title=args.get("title"),
169
+ tags=args.get("tags"),
170
+ )
171
+ return _json_response(result)
172
+ except FileNotFoundError as e:
173
+ return _error_response(str(e))
174
+ except ValueError as e:
175
+ return _error_response(str(e))
176
+ except Exception as e:
177
+ return _error_response(f"Ingestion failed: {e}")
178
+
179
+
180
+ async def _handle_skseed_collide(args: dict) -> list[TextContent]:
181
+ """Run a proposition through the 6-stage steel man collider."""
182
+ from skseed.skill import collide
183
+
184
+ proposition = args.get("proposition", "")
185
+ if not proposition:
186
+ return _error_response("proposition is required")
187
+
188
+ result = collide(
189
+ proposition=proposition,
190
+ context=args.get("context", ""),
191
+ )
192
+ return _json_response(result)
193
+
194
+
195
+ async def _handle_skseed_audit(args: dict) -> list[TextContent]:
196
+ """Scan memories for logic/truth misalignment."""
197
+ from skseed.skill import audit
198
+
199
+ result = audit(
200
+ domain=args.get("domain", ""),
201
+ triggered_by=args.get("triggered_by", "mcp"),
202
+ )
203
+ return _json_response(result)
204
+
205
+
206
+ async def _handle_skseed_philosopher(args: dict) -> list[TextContent]:
207
+ """Enter philosopher mode for brainstorming."""
208
+ from skseed.skill import philosopher
209
+
210
+ topic = args.get("topic", "")
211
+ if not topic:
212
+ return _error_response("topic is required")
213
+
214
+ result = philosopher(
215
+ topic=topic,
216
+ mode=args.get("mode", "dialectic"),
217
+ )
218
+ return _json_response(result)
219
+
220
+
221
+ async def _handle_skseed_truth_check(args: dict) -> list[TextContent]:
222
+ """Check if a belief is truth-aligned."""
223
+ from skseed.skill import truth_check
224
+
225
+ belief = args.get("belief", "")
226
+ if not belief:
227
+ return _error_response("belief is required")
228
+
229
+ result = truth_check(
230
+ belief=belief,
231
+ source=args.get("source", "model"),
232
+ domain=args.get("domain", "general"),
233
+ )
234
+ return _json_response(result)
235
+
236
+
237
+ async def _handle_skseed_alignment(args: dict) -> list[TextContent]:
238
+ """Show truth alignment status across belief stores."""
239
+ from skseed.skill import alignment_report
240
+
241
+ result = alignment_report(
242
+ domain=args.get("domain", ""),
243
+ action=args.get("action", "status"),
244
+ )
245
+ return _json_response(result)
246
+
247
+
248
+ HANDLERS: dict = {
249
+ "skseed_ingest": _handle_skseed_ingest,
250
+ "skseed_collide": _handle_skseed_collide,
251
+ "skseed_audit": _handle_skseed_audit,
252
+ "skseed_philosopher": _handle_skseed_philosopher,
253
+ "skseed_truth_check": _handle_skseed_truth_check,
254
+ "skseed_alignment": _handle_skseed_alignment,
255
+ }