openclaw-node-harness 2.0.0

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 (779) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/bin/discord-read.js +228 -0
  4. package/bin/fleet-deploy.js +365 -0
  5. package/bin/lane-watchdog.js +232 -0
  6. package/bin/mesh-agent.js +714 -0
  7. package/bin/mesh-bridge.js +535 -0
  8. package/bin/mesh-deploy-listener.js +322 -0
  9. package/bin/mesh-deploy.js +1048 -0
  10. package/bin/mesh-health-publisher.js +247 -0
  11. package/bin/mesh-task-daemon.js +451 -0
  12. package/bin/mesh-tool-discord.js +293 -0
  13. package/bin/mesh.js +649 -0
  14. package/boot/manifest.yaml +187 -0
  15. package/cli.js +35 -0
  16. package/config/daemon.json.template +16 -0
  17. package/config/obsidian-sync.json.template +39 -0
  18. package/config/openclaw.json.template +124 -0
  19. package/config/transcript-sources.json.template +22 -0
  20. package/identity/AGENTS.md +201 -0
  21. package/identity/CLAUDE.md +64 -0
  22. package/identity/DELEGATION.md +304 -0
  23. package/identity/HEARTBEAT.md +163 -0
  24. package/identity/MEMORY_SPEC.md +368 -0
  25. package/identity/PRINCIPLES.md +81 -0
  26. package/identity/SOUL.md +48 -0
  27. package/identity/TOOLS.md +47 -0
  28. package/install.sh +895 -0
  29. package/lib/agent-activity.js +390 -0
  30. package/lib/kanban-io.js +352 -0
  31. package/lib/mesh-registry.js +194 -0
  32. package/lib/mesh-roles.js +13 -0
  33. package/lib/mesh-tasks.js +306 -0
  34. package/lib/nats-resolve.js +108 -0
  35. package/mission-control/README.md +36 -0
  36. package/mission-control/drizzle/0000_simple_silhouette.sql +62 -0
  37. package/mission-control/drizzle/meta/0000_snapshot.json +413 -0
  38. package/mission-control/drizzle/meta/_journal.json +13 -0
  39. package/mission-control/drizzle.config.ts +13 -0
  40. package/mission-control/eslint.config.mjs +18 -0
  41. package/mission-control/next.config.ts +7 -0
  42. package/mission-control/package-lock.json +10518 -0
  43. package/mission-control/package.json +49 -0
  44. package/mission-control/postcss.config.mjs +7 -0
  45. package/mission-control/public/file.svg +1 -0
  46. package/mission-control/public/globe.svg +1 -0
  47. package/mission-control/public/next.svg +1 -0
  48. package/mission-control/public/vercel.svg +1 -0
  49. package/mission-control/public/window.svg +1 -0
  50. package/mission-control/scripts/enrich-descriptions.js +193 -0
  51. package/mission-control/scripts/gen-chronology.js +102 -0
  52. package/mission-control/scripts/import-pipeline-v2.js +523 -0
  53. package/mission-control/scripts/import-pipeline.js +295 -0
  54. package/mission-control/src/app/api/activity/live/route.ts +27 -0
  55. package/mission-control/src/app/api/activity/route.ts +47 -0
  56. package/mission-control/src/app/api/burndown/route.ts +112 -0
  57. package/mission-control/src/app/api/critical-path/route.ts +159 -0
  58. package/mission-control/src/app/api/dependencies/route.ts +176 -0
  59. package/mission-control/src/app/api/memory/categories/route.ts +93 -0
  60. package/mission-control/src/app/api/memory/consolidate/route.ts +107 -0
  61. package/mission-control/src/app/api/memory/doc/route.ts +89 -0
  62. package/mission-control/src/app/api/memory/flush/route.ts +129 -0
  63. package/mission-control/src/app/api/memory/graph/route.ts +105 -0
  64. package/mission-control/src/app/api/memory/items/route.ts +86 -0
  65. package/mission-control/src/app/api/memory/list/route.ts +48 -0
  66. package/mission-control/src/app/api/memory/retrieve/route.ts +51 -0
  67. package/mission-control/src/app/api/memory/search/route.ts +143 -0
  68. package/mission-control/src/app/api/memory/sync/route.ts +23 -0
  69. package/mission-control/src/app/api/memory/wikilinks/route.ts +75 -0
  70. package/mission-control/src/app/api/mesh/events/route.ts +67 -0
  71. package/mission-control/src/app/api/mesh/nodes/route.ts +221 -0
  72. package/mission-control/src/app/api/mesh/tokens/route.ts +133 -0
  73. package/mission-control/src/app/api/projects/route.ts +102 -0
  74. package/mission-control/src/app/api/resolve-path/route.ts +92 -0
  75. package/mission-control/src/app/api/scheduler/tick/route.ts +38 -0
  76. package/mission-control/src/app/api/scheduler/waves/route.ts +54 -0
  77. package/mission-control/src/app/api/screenshot/route.ts +127 -0
  78. package/mission-control/src/app/api/settings/gateway/route.ts +92 -0
  79. package/mission-control/src/app/api/skills/[id]/health/route.ts +57 -0
  80. package/mission-control/src/app/api/skills/list/route.ts +41 -0
  81. package/mission-control/src/app/api/souls/[id]/evolution/route.ts +253 -0
  82. package/mission-control/src/app/api/souls/[id]/prompt/route.ts +205 -0
  83. package/mission-control/src/app/api/souls/[id]/propagate/route.ts +146 -0
  84. package/mission-control/src/app/api/souls/route.ts +174 -0
  85. package/mission-control/src/app/api/tasks/[id]/handoff/route.ts +115 -0
  86. package/mission-control/src/app/api/tasks/[id]/route.ts +266 -0
  87. package/mission-control/src/app/api/tasks/[id]/tree/route.ts +94 -0
  88. package/mission-control/src/app/api/tasks/route.ts +253 -0
  89. package/mission-control/src/app/api/tts/route.ts +47 -0
  90. package/mission-control/src/app/api/workspace/files/route.ts +88 -0
  91. package/mission-control/src/app/api/workspace/read/route.ts +73 -0
  92. package/mission-control/src/app/burndown/page.tsx +309 -0
  93. package/mission-control/src/app/calendar/page.tsx +839 -0
  94. package/mission-control/src/app/favicon.ico +0 -0
  95. package/mission-control/src/app/globals.css +67 -0
  96. package/mission-control/src/app/graph/page.tsx +352 -0
  97. package/mission-control/src/app/layout.tsx +35 -0
  98. package/mission-control/src/app/live/page.tsx +232 -0
  99. package/mission-control/src/app/memory/page.tsx +154 -0
  100. package/mission-control/src/app/mesh/page.tsx +457 -0
  101. package/mission-control/src/app/obsidian/page.tsx +252 -0
  102. package/mission-control/src/app/page.tsx +70 -0
  103. package/mission-control/src/app/roadmap/page.tsx +1757 -0
  104. package/mission-control/src/app/settings/page.tsx +260 -0
  105. package/mission-control/src/app/souls/page.tsx +573 -0
  106. package/mission-control/src/components/board/activity-timeline.tsx +96 -0
  107. package/mission-control/src/components/board/daily-board.tsx +373 -0
  108. package/mission-control/src/components/board/kanban-board.tsx +364 -0
  109. package/mission-control/src/components/board/kanban-column.tsx +105 -0
  110. package/mission-control/src/components/board/live-stream.tsx +116 -0
  111. package/mission-control/src/components/board/skill-health-card.tsx +128 -0
  112. package/mission-control/src/components/board/status-banner.tsx +124 -0
  113. package/mission-control/src/components/board/task-card.tsx +454 -0
  114. package/mission-control/src/components/board/unified-task-dialog.tsx +1043 -0
  115. package/mission-control/src/components/layout/resizable-layout.tsx +68 -0
  116. package/mission-control/src/components/layout/sidebar.tsx +90 -0
  117. package/mission-control/src/components/live/audio-spectrum.tsx +106 -0
  118. package/mission-control/src/components/live/chat-bubble.tsx +52 -0
  119. package/mission-control/src/components/live/chat-input.tsx +92 -0
  120. package/mission-control/src/components/memory/doc-reader.tsx +172 -0
  121. package/mission-control/src/components/memory/memory-list.tsx +169 -0
  122. package/mission-control/src/components/memory/search-bar.tsx +67 -0
  123. package/mission-control/src/components/memory/search-results.tsx +149 -0
  124. package/mission-control/src/components/obsidian/backlinks-panel.tsx +52 -0
  125. package/mission-control/src/components/obsidian/file-tree.tsx +186 -0
  126. package/mission-control/src/components/obsidian/local-graph.tsx +107 -0
  127. package/mission-control/src/components/obsidian/obsidian-graph.tsx +192 -0
  128. package/mission-control/src/components/obsidian/obsidian-reader.tsx +246 -0
  129. package/mission-control/src/lib/activity.ts +29 -0
  130. package/mission-control/src/lib/config.ts +21 -0
  131. package/mission-control/src/lib/db/index.ts +429 -0
  132. package/mission-control/src/lib/db/schema.ts +218 -0
  133. package/mission-control/src/lib/gateway-notify.ts +113 -0
  134. package/mission-control/src/lib/hooks.ts +536 -0
  135. package/mission-control/src/lib/memory/categories.ts +125 -0
  136. package/mission-control/src/lib/memory/entities.ts +482 -0
  137. package/mission-control/src/lib/memory/extract.ts +369 -0
  138. package/mission-control/src/lib/memory/retrieval.ts +281 -0
  139. package/mission-control/src/lib/memory/wikilinks.ts +147 -0
  140. package/mission-control/src/lib/nats.ts +126 -0
  141. package/mission-control/src/lib/parsers/clawvault-doc.ts +98 -0
  142. package/mission-control/src/lib/parsers/daily-log.ts +73 -0
  143. package/mission-control/src/lib/parsers/memory-md.ts +81 -0
  144. package/mission-control/src/lib/parsers/task-markdown.ts +459 -0
  145. package/mission-control/src/lib/parsers/transcript.ts +209 -0
  146. package/mission-control/src/lib/scheduler.ts +394 -0
  147. package/mission-control/src/lib/speech/use-speech-pipeline.ts +176 -0
  148. package/mission-control/src/lib/sync/memory.ts +224 -0
  149. package/mission-control/src/lib/sync/tasks.ts +271 -0
  150. package/mission-control/src/lib/tts/edge.ts +31 -0
  151. package/mission-control/src/lib/tts/google.ts +78 -0
  152. package/mission-control/src/lib/tts/index.ts +39 -0
  153. package/mission-control/src/lib/tts/types.ts +18 -0
  154. package/mission-control/tsconfig.json +42 -0
  155. package/obsidian-vault/.obsidian/app.json +10 -0
  156. package/obsidian-vault/.obsidian/community-plugins.json +8 -0
  157. package/obsidian-vault/.obsidian/graph.json +40 -0
  158. package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/main.js +58769 -0
  159. package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/manifest.json +10 -0
  160. package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/styles.css +47 -0
  161. package/obsidian-vault/00-meta/.gitkeep +0 -0
  162. package/obsidian-vault/01-architecture/.gitkeep +0 -0
  163. package/obsidian-vault/02-smart-contracts/.gitkeep +0 -0
  164. package/obsidian-vault/03-backend/.gitkeep +0 -0
  165. package/obsidian-vault/04-mobile/.gitkeep +0 -0
  166. package/obsidian-vault/05-ar-mapping/.gitkeep +0 -0
  167. package/obsidian-vault/06-3d-assets/.gitkeep +0 -0
  168. package/obsidian-vault/07-sound-music/.gitkeep +0 -0
  169. package/obsidian-vault/08-lore/.gitkeep +0 -0
  170. package/obsidian-vault/09-quests-playthrough/.gitkeep +0 -0
  171. package/obsidian-vault/10-economy/.gitkeep +0 -0
  172. package/obsidian-vault/11-nft-assets/.gitkeep +0 -0
  173. package/obsidian-vault/12-nft-mechanics/.gitkeep +0 -0
  174. package/obsidian-vault/13-dao-guild-social/.gitkeep +0 -0
  175. package/obsidian-vault/14-game-progression/.gitkeep +0 -0
  176. package/obsidian-vault/15-analytics/.gitkeep +0 -0
  177. package/obsidian-vault/16-security/.gitkeep +0 -0
  178. package/obsidian-vault/17-devops/.gitkeep +0 -0
  179. package/obsidian-vault/18-marketplace/.gitkeep +0 -0
  180. package/obsidian-vault/19-decisions/.gitkeep +0 -0
  181. package/obsidian-vault/20-business-strategy/.gitkeep +0 -0
  182. package/obsidian-vault/21-legal-regulatory/.gitkeep +0 -0
  183. package/obsidian-vault/nodes/.gitkeep +0 -0
  184. package/openclaw.env.example +17 -0
  185. package/package.json +45 -0
  186. package/services/launchd/ai.openclaw.gateway.plist +59 -0
  187. package/services/launchd/ai.openclaw.lane-watchdog.plist +32 -0
  188. package/services/launchd/ai.openclaw.log-rotate.plist +28 -0
  189. package/services/launchd/ai.openclaw.memory-daemon.plist +36 -0
  190. package/services/launchd/ai.openclaw.mesh-agent.plist +38 -0
  191. package/services/launchd/ai.openclaw.mesh-bridge.plist +36 -0
  192. package/services/launchd/ai.openclaw.mesh-deploy-listener.plist +33 -0
  193. package/services/launchd/ai.openclaw.mesh-health-publisher.plist +29 -0
  194. package/services/launchd/ai.openclaw.mesh-task-daemon.plist +36 -0
  195. package/services/launchd/ai.openclaw.mesh-tool-discord.plist +36 -0
  196. package/services/launchd/ai.openclaw.mission-control.plist +41 -0
  197. package/services/service-manifest.json +13 -0
  198. package/services/systemd/openclaw-gateway.service +21 -0
  199. package/services/systemd/openclaw-lane-watchdog.service +21 -0
  200. package/services/systemd/openclaw-log-rotate.service +13 -0
  201. package/services/systemd/openclaw-log-rotate.timer +9 -0
  202. package/services/systemd/openclaw-memory-daemon.service +21 -0
  203. package/services/systemd/openclaw-mesh-agent.service +19 -0
  204. package/services/systemd/openclaw-mesh-bridge.service +21 -0
  205. package/services/systemd/openclaw-mesh-deploy-listener.service +23 -0
  206. package/services/systemd/openclaw-mesh-health-publisher.service +21 -0
  207. package/services/systemd/openclaw-mesh-task-daemon.service +21 -0
  208. package/services/systemd/openclaw-mesh-tool-discord.service +21 -0
  209. package/services/systemd/openclaw-mission-control.service +22 -0
  210. package/skills/1password/.clawhub/origin.json +7 -0
  211. package/skills/1password/SKILL.md +63 -0
  212. package/skills/1password/references/cli-examples.md +29 -0
  213. package/skills/1password/references/get-started.md +17 -0
  214. package/skills/acquisition-channel-advisor/SKILL.md +643 -0
  215. package/skills/acquisition-channel-advisor/examples/conversation-flow.md +531 -0
  216. package/skills/agent-browser/.clawhub/origin.json +7 -0
  217. package/skills/agent-browser/CONTRIBUTING.md +63 -0
  218. package/skills/agent-browser/SKILL.md +338 -0
  219. package/skills/agentic-compass/.clawhub/origin.json +7 -0
  220. package/skills/agentic-compass/README.md +96 -0
  221. package/skills/agentic-compass/SKILL.md +112 -0
  222. package/skills/agentic-compass/references/README.md +5 -0
  223. package/skills/agentic-compass/scripts/agentic-compass.py +196 -0
  224. package/skills/arcane-dev-ops/SKILL.md +61 -0
  225. package/skills/arcane-dev-ops/references/checklist.md +22 -0
  226. package/skills/arcane-dev-ops/references/validation-cases.md +11 -0
  227. package/skills/arcane-dev-ops/scripts/prepush_check.sh +41 -0
  228. package/skills/auto-updater/.clawhub/origin.json +7 -0
  229. package/skills/auto-updater/SKILL.md +158 -0
  230. package/skills/auto-updater/references/agent-guide.md +152 -0
  231. package/skills/auto-updater/references/summary-examples.md +109 -0
  232. package/skills/business-health-diagnostic/SKILL.md +782 -0
  233. package/skills/byterover/.clawhub/origin.json +7 -0
  234. package/skills/byterover/SKILL.md +105 -0
  235. package/skills/byterover/TROUBLESHOOTING.md +50 -0
  236. package/skills/byterover/WORKFLOWS.md +229 -0
  237. package/skills/capability-evolver/.clawhub/origin.json +7 -0
  238. package/skills/capability-evolver/CONTRIBUTING.md +11 -0
  239. package/skills/capability-evolver/README.md +157 -0
  240. package/skills/capability-evolver/README.zh-CN.md +112 -0
  241. package/skills/capability-evolver/SKILL.md +93 -0
  242. package/skills/capability-evolver/assets/gep/capsules.json +5 -0
  243. package/skills/capability-evolver/assets/gep/genes.json +104 -0
  244. package/skills/capability-evolver/index.js +59 -0
  245. package/skills/capability-evolver/package.json +22 -0
  246. package/skills/capability-evolver/scripts/analyze_by_skill.js +121 -0
  247. package/skills/capability-evolver/scripts/build_public.js +350 -0
  248. package/skills/capability-evolver/scripts/export_history.js +98 -0
  249. package/skills/capability-evolver/scripts/extract_log.js +85 -0
  250. package/skills/capability-evolver/scripts/generate_history.js +75 -0
  251. package/skills/capability-evolver/scripts/human_report.js +147 -0
  252. package/skills/capability-evolver/scripts/publish_public.js +516 -0
  253. package/skills/capability-evolver/scripts/suggest_version.js +89 -0
  254. package/skills/capability-evolver/src/evolve.js +594 -0
  255. package/skills/capability-evolver/src/gep/assetStore.js +204 -0
  256. package/skills/capability-evolver/src/gep/candidates.js +134 -0
  257. package/skills/capability-evolver/src/gep/paths.js +23 -0
  258. package/skills/capability-evolver/src/gep/prompt.js +254 -0
  259. package/skills/capability-evolver/src/gep/selector.js +89 -0
  260. package/skills/capability-evolver/src/gep/signals.js +27 -0
  261. package/skills/cc-godmode/.clawhub/origin.json +7 -0
  262. package/skills/cc-godmode/CHANGELOG.md +66 -0
  263. package/skills/cc-godmode/README.md +293 -0
  264. package/skills/cc-godmode/SKILL.md +242 -0
  265. package/skills/cc-godmode/docs/AGENTS.md +332 -0
  266. package/skills/cc-godmode/docs/MIGRATION.md +206 -0
  267. package/skills/cc-godmode/docs/TROUBLESHOOTING.md +357 -0
  268. package/skills/cc-godmode/docs/WORKFLOWS.md +329 -0
  269. package/skills/cc-godmode/references/agents.md +433 -0
  270. package/skills/cc-godmode/scripts/build-skill.js +232 -0
  271. package/skills/clawdbot-filesystem/.clawhub/origin.json +7 -0
  272. package/skills/clawdbot-filesystem/LICENSE.md +21 -0
  273. package/skills/clawdbot-filesystem/README.md +322 -0
  274. package/skills/clawdbot-filesystem/SKILL.md +219 -0
  275. package/skills/clawdbot-filesystem/config.json +41 -0
  276. package/skills/clawdbot-filesystem/package.json +69 -0
  277. package/skills/clawdbot-security-check/.clawhub/origin.json +7 -0
  278. package/skills/clawdbot-security-check/README.md +168 -0
  279. package/skills/clawdbot-security-check/SKILL.md +145 -0
  280. package/skills/clawdbot-security-check/references/audit-checks.md +521 -0
  281. package/skills/clawdbot-security-check/skill.json +42 -0
  282. package/skills/clawddocs/.clawhub/origin.json +7 -0
  283. package/skills/clawddocs/SKILL.md +176 -0
  284. package/skills/clawddocs/package.json +9 -0
  285. package/skills/clawddocs/scripts/build-index.sh +17 -0
  286. package/skills/clawddocs/scripts/cache.sh +13 -0
  287. package/skills/clawddocs/scripts/fetch-doc.sh +7 -0
  288. package/skills/clawddocs/scripts/recent.sh +5 -0
  289. package/skills/clawddocs/scripts/search.sh +8 -0
  290. package/skills/clawddocs/scripts/sitemap.sh +23 -0
  291. package/skills/clawddocs/scripts/track-changes.sh +16 -0
  292. package/skills/clawddocs/snippets/common-configs.md +69 -0
  293. package/skills/clawguard/.clawhub/origin.json +7 -0
  294. package/skills/clawguard/SKILL.md +137 -0
  295. package/skills/company-research/SKILL.md +393 -0
  296. package/skills/company-research/examples/sample.md +164 -0
  297. package/skills/company-research/template.md +60 -0
  298. package/skills/crypto-price/.clawhub/origin.json +7 -0
  299. package/skills/crypto-price/ARCHITECTURE.md +437 -0
  300. package/skills/crypto-price/README.md +194 -0
  301. package/skills/crypto-price/SKILL.md +61 -0
  302. package/skills/crypto-price/requirements.txt +1 -0
  303. package/skills/crypto-price/scripts/get_price_chart.py +988 -0
  304. package/skills/customer-journey-map/SKILL.md +343 -0
  305. package/skills/customer-journey-map/examples/sample.md +33 -0
  306. package/skills/customer-journey-map/template.md +28 -0
  307. package/skills/customer-journey-mapping-workshop/SKILL.md +522 -0
  308. package/skills/deep-research/.clawhub/origin.json +7 -0
  309. package/skills/deep-research/SKILL.md +93 -0
  310. package/skills/deep-research/rules/logic.md +32 -0
  311. package/skills/discord-telegram-triage/SKILL.md +59 -0
  312. package/skills/discord-telegram-triage/references/discord-runbook.md +28 -0
  313. package/skills/discord-telegram-triage/references/validation-cases.md +11 -0
  314. package/skills/discord-telegram-triage/scripts/triage_snapshot.sh +23 -0
  315. package/skills/discovery-interview-prep/SKILL.md +408 -0
  316. package/skills/discovery-process/SKILL.md +503 -0
  317. package/skills/discovery-process/examples/sample.md +60 -0
  318. package/skills/discovery-process/template.md +39 -0
  319. package/skills/dist/arcane-dev-ops.skill +0 -0
  320. package/skills/dist/discord-telegram-triage.skill +0 -0
  321. package/skills/dist/founder-brief-summarizer.skill +0 -0
  322. package/skills/epic-breakdown-advisor/SKILL.md +664 -0
  323. package/skills/epic-hypothesis/SKILL.md +285 -0
  324. package/skills/epic-hypothesis/examples/sample.md +104 -0
  325. package/skills/epic-hypothesis/template.md +30 -0
  326. package/skills/excel/.clawhub/origin.json +7 -0
  327. package/skills/excel/SKILL.md +332 -0
  328. package/skills/excel/scripts/excel.py +1120 -0
  329. package/skills/fast-browser-use/.clawhub/origin.json +7 -0
  330. package/skills/fast-browser-use/CODEBUDDY.md +142 -0
  331. package/skills/fast-browser-use/Cargo.toml +77 -0
  332. package/skills/fast-browser-use/README.md +62 -0
  333. package/skills/fast-browser-use/SKILL.md +217 -0
  334. package/skills/fast-browser-use/package-lock.json +28 -0
  335. package/skills/fast-browser-use/package.json +8 -0
  336. package/skills/fast-browser-use/rustfmt.toml +10 -0
  337. package/skills/fast-browser-use/src/bin/cli.rs +373 -0
  338. package/skills/fast-browser-use/src/bin/mcp_server.rs +203 -0
  339. package/skills/fast-browser-use/src/browser/config.rs +136 -0
  340. package/skills/fast-browser-use/src/browser/debug.rs +16 -0
  341. package/skills/fast-browser-use/src/browser/mod.rs +61 -0
  342. package/skills/fast-browser-use/src/browser/session.rs +478 -0
  343. package/skills/fast-browser-use/src/dom/element.rs +442 -0
  344. package/skills/fast-browser-use/src/dom/extract_dom.js +849 -0
  345. package/skills/fast-browser-use/src/dom/mod.rs +14 -0
  346. package/skills/fast-browser-use/src/dom/tree.rs +296 -0
  347. package/skills/fast-browser-use/src/dom/yaml.rs +149 -0
  348. package/skills/fast-browser-use/src/error.rs +115 -0
  349. package/skills/fast-browser-use/src/lib.rs +17 -0
  350. package/skills/fast-browser-use/src/mcp/handler.rs +63 -0
  351. package/skills/fast-browser-use/src/mcp/mod.rs +81 -0
  352. package/skills/fast-browser-use/src/tools/Readability.min.js +1480 -0
  353. package/skills/fast-browser-use/src/tools/annotate.rs +165 -0
  354. package/skills/fast-browser-use/src/tools/click.rs +84 -0
  355. package/skills/fast-browser-use/src/tools/close.rs +35 -0
  356. package/skills/fast-browser-use/src/tools/close_tab.rs +45 -0
  357. package/skills/fast-browser-use/src/tools/convert_to_markdown.js +117 -0
  358. package/skills/fast-browser-use/src/tools/cookies.rs +58 -0
  359. package/skills/fast-browser-use/src/tools/debug.rs +44 -0
  360. package/skills/fast-browser-use/src/tools/evaluate.rs +40 -0
  361. package/skills/fast-browser-use/src/tools/extract.rs +66 -0
  362. package/skills/fast-browser-use/src/tools/go_back.rs +35 -0
  363. package/skills/fast-browser-use/src/tools/go_forward.rs +35 -0
  364. package/skills/fast-browser-use/src/tools/hover.js +33 -0
  365. package/skills/fast-browser-use/src/tools/hover.rs +97 -0
  366. package/skills/fast-browser-use/src/tools/html_to_markdown.rs +99 -0
  367. package/skills/fast-browser-use/src/tools/input.rs +93 -0
  368. package/skills/fast-browser-use/src/tools/local_storage.rs +159 -0
  369. package/skills/fast-browser-use/src/tools/markdown.rs +181 -0
  370. package/skills/fast-browser-use/src/tools/mod.rs +326 -0
  371. package/skills/fast-browser-use/src/tools/navigate.rs +55 -0
  372. package/skills/fast-browser-use/src/tools/new_tab.rs +60 -0
  373. package/skills/fast-browser-use/src/tools/press_key.rs +78 -0
  374. package/skills/fast-browser-use/src/tools/read_links.rs +59 -0
  375. package/skills/fast-browser-use/src/tools/readability_script.rs +8 -0
  376. package/skills/fast-browser-use/src/tools/screenshot.rs +47 -0
  377. package/skills/fast-browser-use/src/tools/scroll.js +22 -0
  378. package/skills/fast-browser-use/src/tools/scroll.rs +95 -0
  379. package/skills/fast-browser-use/src/tools/select.js +23 -0
  380. package/skills/fast-browser-use/src/tools/select.rs +129 -0
  381. package/skills/fast-browser-use/src/tools/sitemap.rs +426 -0
  382. package/skills/fast-browser-use/src/tools/snapshot.rs +324 -0
  383. package/skills/fast-browser-use/src/tools/switch_tab.rs +69 -0
  384. package/skills/fast-browser-use/src/tools/tab_list.rs +76 -0
  385. package/skills/fast-browser-use/src/tools/utils.rs +92 -0
  386. package/skills/fast-browser-use/src/tools/wait.rs +53 -0
  387. package/skills/fast-browser-use/test_auth.json +3 -0
  388. package/skills/fast-browser-use/test_state.json +6 -0
  389. package/skills/fast-browser-use/tests/browser_tools_integration.rs +233 -0
  390. package/skills/fast-browser-use/tests/cli_recipes_integration.rs +112 -0
  391. package/skills/fast-browser-use/tests/cookies_integration.rs +56 -0
  392. package/skills/fast-browser-use/tests/debug_integration.rs +83 -0
  393. package/skills/fast-browser-use/tests/dom_integration.rs +170 -0
  394. package/skills/fast-browser-use/tests/local_storage_integration.rs +75 -0
  395. package/skills/fast-browser-use/tests/markdown_integration.rs +448 -0
  396. package/skills/fast-browser-use/tests/navigation_integration.rs +241 -0
  397. package/skills/fast-browser-use/tests/sitemap_integration.rs +326 -0
  398. package/skills/fast-browser-use/tests/tab_management_integration.rs +300 -0
  399. package/skills/feature-investment-advisor/SKILL.md +639 -0
  400. package/skills/feature-investment-advisor/examples/conversation-flow.md +538 -0
  401. package/skills/finance-based-pricing-advisor/SKILL.md +763 -0
  402. package/skills/finance-metrics-quickref/SKILL.md +309 -0
  403. package/skills/find-skills/.clawhub/origin.json +7 -0
  404. package/skills/find-skills/SKILL.md +143 -0
  405. package/skills/flavor-text-writer/SKILL.md +27 -0
  406. package/skills/founder-brief-summarizer/SKILL.md +52 -0
  407. package/skills/founder-brief-summarizer/references/response-templates.md +15 -0
  408. package/skills/founder-brief-summarizer/references/validation-cases.md +11 -0
  409. package/skills/founder-brief-summarizer/scripts/brief_template.sh +28 -0
  410. package/skills/frontend-design/.clawhub/origin.json +7 -0
  411. package/skills/frontend-design/LICENSE.txt +190 -0
  412. package/skills/frontend-design/SKILL.md +53 -0
  413. package/skills/gemini/.clawhub/origin.json +7 -0
  414. package/skills/gemini/SKILL.md +33 -0
  415. package/skills/gemini-deep-research/.clawhub/origin.json +7 -0
  416. package/skills/gemini-deep-research/SKILL.md +78 -0
  417. package/skills/gemini-deep-research/scripts/deep_research.py +176 -0
  418. package/skills/git-essentials/.clawhub/origin.json +7 -0
  419. package/skills/git-essentials/SKILL.md +239 -0
  420. package/skills/git-essentials/references/advanced.md +211 -0
  421. package/skills/github/.clawhub/origin.json +7 -0
  422. package/skills/github/SKILL.md +57 -0
  423. package/skills/google-drive/.clawhub/origin.json +7 -0
  424. package/skills/google-drive/LICENSE.txt +21 -0
  425. package/skills/google-drive/SKILL.md +320 -0
  426. package/skills/growth-loop/SKILL.md +270 -0
  427. package/skills/growth-loop/_meta.json +9 -0
  428. package/skills/growth-loop/references/diagnosis-framework.md +84 -0
  429. package/skills/growth-loop/references/platform-benchmarks.md +79 -0
  430. package/skills/growth-loop/scripts/init-campaign.sh +274 -0
  431. package/skills/humanize-ai-text/.clawhub/origin.json +7 -0
  432. package/skills/humanize-ai-text/SKILL.md +192 -0
  433. package/skills/humanize-ai-text/scripts/compare.py +58 -0
  434. package/skills/humanize-ai-text/scripts/detect.py +160 -0
  435. package/skills/humanize-ai-text/scripts/patterns.json +191 -0
  436. package/skills/humanize-ai-text/scripts/transform.py +127 -0
  437. package/skills/humanizer/.clawhub/origin.json +7 -0
  438. package/skills/humanizer/README.md +82 -0
  439. package/skills/humanizer/SKILL.md +443 -0
  440. package/skills/jobs-to-be-done/SKILL.md +378 -0
  441. package/skills/jobs-to-be-done/examples/sample.md +80 -0
  442. package/skills/jobs-to-be-done/template.md +65 -0
  443. package/skills/lean-ux-canvas/SKILL.md +561 -0
  444. package/skills/lean-ux-canvas/examples/sample.md +88 -0
  445. package/skills/lean-ux-canvas/template.md +32 -0
  446. package/skills/markdown-formatter/.clawhub/origin.json +7 -0
  447. package/skills/markdown-formatter/README.md +137 -0
  448. package/skills/markdown-formatter/SKILL.md +369 -0
  449. package/skills/markdown-formatter/config.json +20 -0
  450. package/skills/markdown-formatter/index.js +439 -0
  451. package/skills/markdown-formatter/package.json +23 -0
  452. package/skills/markdown-formatter/test.js +23 -0
  453. package/skills/marketing-mode/.clawhub/origin.json +7 -0
  454. package/skills/marketing-mode/README.md +49 -0
  455. package/skills/marketing-mode/SKILL.md +703 -0
  456. package/skills/marketing-mode/mode-prompt.md +39 -0
  457. package/skills/marketing-mode/skill.json +51 -0
  458. package/skills/memory-hygiene/.clawhub/origin.json +7 -0
  459. package/skills/memory-hygiene/SKILL.md +91 -0
  460. package/skills/memory-setup/.clawhub/origin.json +7 -0
  461. package/skills/memory-setup/SKILL.md +180 -0
  462. package/skills/memorylayer/.clawhub/origin.json +7 -0
  463. package/skills/memorylayer/README.md +197 -0
  464. package/skills/memorylayer/SKILL.md +227 -0
  465. package/skills/memorylayer/examples/agent-integration.js +145 -0
  466. package/skills/memorylayer/examples/basic-usage.js +87 -0
  467. package/skills/memorylayer/examples/token-savings-demo.js +183 -0
  468. package/skills/memorylayer/index.js +115 -0
  469. package/skills/memorylayer/package-lock.json +295 -0
  470. package/skills/memorylayer/package.json +27 -0
  471. package/skills/memorylayer/python/memorylayer_skill.py +230 -0
  472. package/skills/memorylayer/python/requirements.txt +7 -0
  473. package/skills/mesh/SKILL.md +184 -0
  474. package/skills/model-usage/.clawhub/origin.json +7 -0
  475. package/skills/model-usage/SKILL.md +54 -0
  476. package/skills/model-usage/references/codexbar-cli.md +28 -0
  477. package/skills/model-usage/scripts/model_usage.py +310 -0
  478. package/skills/moltbook-interact/.clawhub/origin.json +7 -0
  479. package/skills/moltbook-interact/INSTALL.md +139 -0
  480. package/skills/moltbook-interact/README.md +198 -0
  481. package/skills/moltbook-interact/SKILL.md +72 -0
  482. package/skills/moltbook-interact/references/api.md +106 -0
  483. package/skills/moltbook-interact/scripts/moltbook.sh +142 -0
  484. package/skills/moltbook-registry/.clawhub/origin.json +7 -0
  485. package/skills/moltbook-registry/README.md +26 -0
  486. package/skills/moltbook-registry/SKILL.md +82 -0
  487. package/skills/moltbook-registry/index.js +180 -0
  488. package/skills/moltbook-registry/package.json +11 -0
  489. package/skills/mythril-scanner/SKILL.md +27 -0
  490. package/skills/n8n/.clawhub/origin.json +7 -0
  491. package/skills/n8n/SKILL.md +141 -0
  492. package/skills/n8n/references/api.md +156 -0
  493. package/skills/n8n/scripts/n8n_api.py +158 -0
  494. package/skills/n8n-workflow-automation/.clawhub/origin.json +7 -0
  495. package/skills/n8n-workflow-automation/SKILL.md +103 -0
  496. package/skills/n8n-workflow-automation/assets/runbook-template.md +32 -0
  497. package/skills/narrative-designer/SKILL.md +27 -0
  498. package/skills/ontology/.clawhub/origin.json +7 -0
  499. package/skills/ontology/SKILL.md +236 -0
  500. package/skills/ontology/references/queries.md +211 -0
  501. package/skills/ontology/references/schema.md +322 -0
  502. package/skills/ontology/scripts/ontology.py +374 -0
  503. package/skills/openai-image-gen/.clawhub/origin.json +7 -0
  504. package/skills/openai-image-gen/SKILL.md +45 -0
  505. package/skills/openai-image-gen/scripts/gen.py +227 -0
  506. package/skills/openclaw-agent-optimize/.clawhub/origin.json +7 -0
  507. package/skills/openclaw-agent-optimize/SKILL.md +33 -0
  508. package/skills/openclaw-agent-optimize/references/agent-orchestration.md +20 -0
  509. package/skills/openclaw-agent-optimize/references/context-management.md +15 -0
  510. package/skills/openclaw-agent-optimize/references/continuous-learning.md +14 -0
  511. package/skills/openclaw-agent-optimize/references/cron-optimization.md +16 -0
  512. package/skills/openclaw-agent-optimize/references/memory-patterns.md +14 -0
  513. package/skills/openclaw-agent-optimize/references/model-selection.md +18 -0
  514. package/skills/openclaw-skill-scanner/.clawhub/origin.json +7 -0
  515. package/skills/openclaw-skill-scanner/SKILL.md +88 -0
  516. package/skills/openclaw-skill-scanner/install-hook.sh +294 -0
  517. package/skills/openclaw-skill-scanner/report-template.md +53 -0
  518. package/skills/openclaw-skill-scanner/scanner.py +929 -0
  519. package/skills/openclaw-skill-scanner/whitelist.json +18 -0
  520. package/skills/opportunity-solution-tree/SKILL.md +428 -0
  521. package/skills/opportunity-solution-tree/examples/sample.md +104 -0
  522. package/skills/opportunity-solution-tree/template.md +33 -0
  523. package/skills/pdf/.clawhub/origin.json +7 -0
  524. package/skills/pdf/SKILL.md +304 -0
  525. package/skills/pestel-analysis/SKILL.md +384 -0
  526. package/skills/pestel-analysis/examples/sample.md +143 -0
  527. package/skills/pestel-analysis/template.md +53 -0
  528. package/skills/pol-probe/SKILL.md +217 -0
  529. package/skills/pol-probe/examples/sample.md +136 -0
  530. package/skills/pol-probe/template.md +59 -0
  531. package/skills/pol-probe-advisor/SKILL.md +492 -0
  532. package/skills/positioning-statement/SKILL.md +229 -0
  533. package/skills/positioning-statement/examples/sample.md +51 -0
  534. package/skills/positioning-statement/template.md +25 -0
  535. package/skills/positioning-workshop/SKILL.md +424 -0
  536. package/skills/prd-development/SKILL.md +654 -0
  537. package/skills/prd-development/examples/sample.md +43 -0
  538. package/skills/prd-development/template.md +55 -0
  539. package/skills/press-release/SKILL.md +277 -0
  540. package/skills/press-release/examples/sample.md +73 -0
  541. package/skills/press-release/template.md +39 -0
  542. package/skills/prioritization-advisor/SKILL.md +451 -0
  543. package/skills/proactive-messages/.clawhub/origin.json +7 -0
  544. package/skills/proactive-messages/SKILL.md +91 -0
  545. package/skills/problem-framing-canvas/SKILL.md +466 -0
  546. package/skills/problem-framing-canvas/examples/sample.md +58 -0
  547. package/skills/problem-framing-canvas/template.md +22 -0
  548. package/skills/problem-statement/SKILL.md +255 -0
  549. package/skills/problem-statement/examples/sample.md +82 -0
  550. package/skills/problem-statement/template.md +37 -0
  551. package/skills/product-strategy-session/SKILL.md +434 -0
  552. package/skills/product-strategy-session/examples/sample.md +67 -0
  553. package/skills/product-strategy-session/template.md +38 -0
  554. package/skills/prompt-guard/.clawhub/origin.json +7 -0
  555. package/skills/prompt-guard/ARCHITECTURE.md +364 -0
  556. package/skills/prompt-guard/CHANGELOG.md +200 -0
  557. package/skills/prompt-guard/README.md +215 -0
  558. package/skills/prompt-guard/SECURITY.md +66 -0
  559. package/skills/prompt-guard/SKILL.md +174 -0
  560. package/skills/prompt-guard/blog/how-i-secured-my-ai-agent.md +185 -0
  561. package/skills/prompt-guard/config.example.yaml +56 -0
  562. package/skills/prompt-guard/references/detection-patterns.md +298 -0
  563. package/skills/prompt-guard/requirements.txt +1 -0
  564. package/skills/prompt-guard/scripts/analyze_log.py +224 -0
  565. package/skills/prompt-guard/scripts/audit.py +344 -0
  566. package/skills/prompt-guard/scripts/detect.py +1587 -0
  567. package/skills/prompt-guard/scripts/hivefence.py +345 -0
  568. package/skills/proto-persona/SKILL.md +336 -0
  569. package/skills/proto-persona/examples/sample.md +97 -0
  570. package/skills/proto-persona/template.md +45 -0
  571. package/skills/recommendation-canvas/SKILL.md +382 -0
  572. package/skills/recommendation-canvas/examples/sample.md +94 -0
  573. package/skills/recommendation-canvas/template.md +86 -0
  574. package/skills/refactor-suggest/.clawhub/origin.json +7 -0
  575. package/skills/refactor-suggest/SKILL.md +94 -0
  576. package/skills/roadmap-planning/SKILL.md +506 -0
  577. package/skills/roadmap-planning/examples/sample.md +62 -0
  578. package/skills/roadmap-planning/template.md +30 -0
  579. package/skills/saas-economics-efficiency-metrics/SKILL.md +694 -0
  580. package/skills/saas-economics-efficiency-metrics/examples/cash-trap.md +365 -0
  581. package/skills/saas-economics-efficiency-metrics/examples/healthy-unit-economics.md +279 -0
  582. package/skills/saas-economics-efficiency-metrics/template.md +263 -0
  583. package/skills/saas-revenue-growth-metrics/SKILL.md +629 -0
  584. package/skills/saas-revenue-growth-metrics/examples/healthy-saas.md +131 -0
  585. package/skills/saas-revenue-growth-metrics/examples/warning-signs.md +229 -0
  586. package/skills/saas-revenue-growth-metrics/template.md +192 -0
  587. package/skills/save-money/.clawhub/origin.json +7 -0
  588. package/skills/save-money/SKILL.md +173 -0
  589. package/skills/scripts/golden_skills_v3.sh +32 -0
  590. package/skills/search/.clawhub/origin.json +7 -0
  591. package/skills/search/SKILL.md +18 -0
  592. package/skills/search/skill.json +1 -0
  593. package/skills/second-brain/.clawhub/origin.json +7 -0
  594. package/skills/second-brain/SKILL.md +278 -0
  595. package/skills/second-brain/scripts/ensue-api.sh +37 -0
  596. package/skills/self-improving-agent/.clawhub/origin.json +7 -0
  597. package/skills/self-improving-agent/.learnings/ERRORS.md +5 -0
  598. package/skills/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
  599. package/skills/self-improving-agent/.learnings/LEARNINGS.md +5 -0
  600. package/skills/self-improving-agent/SKILL.md +130 -0
  601. package/skills/self-improving-agent/assets/LEARNINGS.md +45 -0
  602. package/skills/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
  603. package/skills/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
  604. package/skills/self-improving-agent/hooks/openclaw/handler.js +56 -0
  605. package/skills/self-improving-agent/hooks/openclaw/handler.ts +62 -0
  606. package/skills/self-improving-agent/references/examples.md +374 -0
  607. package/skills/self-improving-agent/references/hooks-setup.md +223 -0
  608. package/skills/self-improving-agent/references/openclaw-integration.md +248 -0
  609. package/skills/self-improving-agent/references/templates.md +480 -0
  610. package/skills/self-improving-agent/scripts/activator.sh +20 -0
  611. package/skills/self-improving-agent/scripts/error-detector.sh +55 -0
  612. package/skills/self-improving-agent/scripts/extract-skill.sh +203 -0
  613. package/skills/self-improving-agent-1-0-2/.clawhub/origin.json +7 -0
  614. package/skills/self-improving-agent-1-0-2/SKILL.md +562 -0
  615. package/skills/self-improving-agent-1-0-2/assets/LEARNINGS.md +45 -0
  616. package/skills/self-improving-agent-1-0-2/assets/SKILL-TEMPLATE.md +182 -0
  617. package/skills/self-improving-agent-1-0-2/references/clawdbot-integration.md +311 -0
  618. package/skills/self-improving-agent-1-0-2/references/examples.md +374 -0
  619. package/skills/self-improving-agent-1-0-2/references/hooks-setup.md +223 -0
  620. package/skills/self-improving-agent-1-0-2/scripts/activator.sh +20 -0
  621. package/skills/self-improving-agent-1-0-2/scripts/error-detector.sh +55 -0
  622. package/skills/self-improving-agent-1-0-2/scripts/extract-skill.sh +203 -0
  623. package/skills/self-love-confidence/.clawhub/origin.json +7 -0
  624. package/skills/self-love-confidence/SKILL.md +79 -0
  625. package/skills/self-reflection/.clawhub/origin.json +7 -0
  626. package/skills/self-reflection/README.md +292 -0
  627. package/skills/self-reflection/SKILL.md +110 -0
  628. package/skills/self-reflection/self-reflection.example.json +6 -0
  629. package/skills/slither-analyzer/SKILL.md +27 -0
  630. package/skills/solidity-audit/SKILL.md +27 -0
  631. package/skills/soulcraft/.clawhub/origin.json +7 -0
  632. package/skills/soulcraft/README.md +123 -0
  633. package/skills/soulcraft/SKILL.md +340 -0
  634. package/skills/soulcraft/references/question-bank.md +154 -0
  635. package/skills/soulcraft/references/soul-examples.md +207 -0
  636. package/skills/soulcraft/research/RESEARCH_REPORT.md +317 -0
  637. package/skills/spotify-player/.clawhub/origin.json +7 -0
  638. package/skills/spotify-player/SKILL.md +44 -0
  639. package/skills/storyboard/SKILL.md +259 -0
  640. package/skills/storyboard/examples/sample.md +71 -0
  641. package/skills/storyboard/template.md +41 -0
  642. package/skills/summarize/.clawhub/origin.json +7 -0
  643. package/skills/summarize/SKILL.md +59 -0
  644. package/skills/superdesign/.clawhub/origin.json +7 -0
  645. package/skills/superdesign/SKILL.md +224 -0
  646. package/skills/tam-sam-som-calculator/SKILL.md +399 -0
  647. package/skills/tam-sam-som-calculator/examples/sample.md +142 -0
  648. package/skills/tam-sam-som-calculator/scripts/market-sizing.py +95 -0
  649. package/skills/tam-sam-som-calculator/template.md +35 -0
  650. package/skills/tavily-search/.clawhub/origin.json +7 -0
  651. package/skills/tavily-search/SKILL.md +49 -0
  652. package/skills/tavily-search/scripts/extract.mjs +59 -0
  653. package/skills/tavily-search/scripts/search.mjs +101 -0
  654. package/skills/twitter/SKILL.md +74 -0
  655. package/skills/twitter/_meta.json +9 -0
  656. package/skills/twitter/references/validation-cases.md +53 -0
  657. package/skills/twitter/scripts/twitter.sh +421 -0
  658. package/skills/ui-ux-pro-max/.clawhub/origin.json +7 -0
  659. package/skills/ui-ux-pro-max/SKILL.md +54 -0
  660. package/skills/ui-ux-pro-max/assets/data/charts.csv +26 -0
  661. package/skills/ui-ux-pro-max/assets/data/colors.csv +97 -0
  662. package/skills/ui-ux-pro-max/assets/data/icons.csv +101 -0
  663. package/skills/ui-ux-pro-max/assets/data/landing.csv +31 -0
  664. package/skills/ui-ux-pro-max/assets/data/products.csv +97 -0
  665. package/skills/ui-ux-pro-max/assets/data/react-performance.csv +45 -0
  666. package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +54 -0
  667. package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +53 -0
  668. package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +56 -0
  669. package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +53 -0
  670. package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +53 -0
  671. package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +51 -0
  672. package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +59 -0
  673. package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +52 -0
  674. package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +54 -0
  675. package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +61 -0
  676. package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +54 -0
  677. package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +51 -0
  678. package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +50 -0
  679. package/skills/ui-ux-pro-max/assets/data/styles.csv +68 -0
  680. package/skills/ui-ux-pro-max/assets/data/typography.csv +58 -0
  681. package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +101 -0
  682. package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +100 -0
  683. package/skills/ui-ux-pro-max/assets/data/web-interface.csv +31 -0
  684. package/skills/ui-ux-pro-max/references/upstream-README.md +488 -0
  685. package/skills/ui-ux-pro-max/references/upstream-skill-content.md +288 -0
  686. package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
  687. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  688. package/skills/ui-ux-pro-max/scripts/design_system.py +1071 -0
  689. package/skills/ui-ux-pro-max/scripts/search.py +111 -0
  690. package/skills/user-story/SKILL.md +272 -0
  691. package/skills/user-story/examples/sample.md +110 -0
  692. package/skills/user-story/scripts/user-story-template.py +65 -0
  693. package/skills/user-story/template.md +32 -0
  694. package/skills/user-story-mapping/SKILL.md +296 -0
  695. package/skills/user-story-mapping/examples/sample.md +77 -0
  696. package/skills/user-story-mapping/template.md +41 -0
  697. package/skills/user-story-mapping-workshop/SKILL.md +485 -0
  698. package/skills/user-story-mapping-workshop/template.md +28 -0
  699. package/skills/user-story-splitting/SKILL.md +313 -0
  700. package/skills/user-story-splitting/examples/sample.md +147 -0
  701. package/skills/user-story-splitting/template.md +37 -0
  702. package/skills/wacli/.clawhub/origin.json +7 -0
  703. package/skills/wacli/SKILL.md +53 -0
  704. package/skills/web-search/.clawhub/origin.json +7 -0
  705. package/skills/web-search/SKILL.md +151 -0
  706. package/skills/web-search/references/api-details.md +207 -0
  707. package/skills/web-search/scripts/search.py +576 -0
  708. package/skills/workshop-facilitation/SKILL.md +88 -0
  709. package/skills/world-builder/SKILL.md +27 -0
  710. package/souls/blockchain-auditor/PRINCIPLES.md +75 -0
  711. package/souls/blockchain-auditor/SOUL.md +56 -0
  712. package/souls/blockchain-auditor/capabilities.json +33 -0
  713. package/souls/blockchain-auditor/evolution/capsules.json +4 -0
  714. package/souls/blockchain-auditor/evolution/events.jsonl +1 -0
  715. package/souls/blockchain-auditor/evolution/genes.json +62 -0
  716. package/souls/daedalus/PRINCIPLES.md +78 -0
  717. package/souls/daedalus/SOUL.md +48 -0
  718. package/souls/daedalus/capabilities.json +46 -0
  719. package/souls/identity-architect/PRINCIPLES.md +83 -0
  720. package/souls/identity-architect/SOUL.md +66 -0
  721. package/souls/identity-architect/capabilities.json +38 -0
  722. package/souls/identity-architect/evolution/capsules.json +4 -0
  723. package/souls/identity-architect/evolution/events.jsonl +0 -0
  724. package/souls/identity-architect/evolution/genes.json +4 -0
  725. package/souls/infra-ops/PRINCIPLES.md +77 -0
  726. package/souls/infra-ops/SOUL.md +56 -0
  727. package/souls/infra-ops/capabilities.json +33 -0
  728. package/souls/infra-ops/evolution/capsules.json +4 -0
  729. package/souls/infra-ops/evolution/events.jsonl +0 -0
  730. package/souls/infra-ops/evolution/genes.json +4 -0
  731. package/souls/lore-writer/PRINCIPLES.md +74 -0
  732. package/souls/lore-writer/SOUL.md +54 -0
  733. package/souls/lore-writer/capabilities.json +37 -0
  734. package/souls/lore-writer/evolution/capsules.json +4 -0
  735. package/souls/lore-writer/evolution/events.jsonl +0 -0
  736. package/souls/lore-writer/evolution/genes.json +4 -0
  737. package/souls/qa-evidence/PRINCIPLES.md +97 -0
  738. package/souls/qa-evidence/SOUL.md +66 -0
  739. package/souls/qa-evidence/capabilities.json +32 -0
  740. package/souls/qa-evidence/evolution/capsules.json +4 -0
  741. package/souls/qa-evidence/evolution/events.jsonl +0 -0
  742. package/souls/qa-evidence/evolution/genes.json +4 -0
  743. package/souls/registry.json +211 -0
  744. package/souls/sync-registry.js +65 -0
  745. package/uninstall.sh +102 -0
  746. package/workspace-bin/auto-checkpoint +60 -0
  747. package/workspace-bin/clawvault-access-control +65 -0
  748. package/workspace-bin/clawvault-local +28 -0
  749. package/workspace-bin/compile-boot +494 -0
  750. package/workspace-bin/daily-log-writer.mjs +251 -0
  751. package/workspace-bin/evolve +540 -0
  752. package/workspace-bin/fitness_score.py +395 -0
  753. package/workspace-bin/hooks/pre-commit +80 -0
  754. package/workspace-bin/install-daemon +299 -0
  755. package/workspace-bin/lane-watchdog.js +232 -0
  756. package/workspace-bin/lib/__init__.py +0 -0
  757. package/workspace-bin/lib/frontmatter.py +114 -0
  758. package/workspace-bin/memory-daemon.mjs +879 -0
  759. package/workspace-bin/memory-maintenance.mjs +531 -0
  760. package/workspace-bin/mesh-bridge.mjs +154 -0
  761. package/workspace-bin/multi-review +130 -0
  762. package/workspace-bin/obsidian +125 -0
  763. package/workspace-bin/obsidian-sync.mjs +888 -0
  764. package/workspace-bin/openclaw-register-source +102 -0
  765. package/workspace-bin/proactive-scan +147 -0
  766. package/workspace-bin/quality-gate +175 -0
  767. package/workspace-bin/screenshot +96 -0
  768. package/workspace-bin/session-recap +453 -0
  769. package/workspace-bin/skill-audit +494 -0
  770. package/workspace-bin/skill-quality-check +134 -0
  771. package/workspace-bin/skill-routing-eval +599 -0
  772. package/workspace-bin/soul-prompt +251 -0
  773. package/workspace-bin/subagent-audit.mjs +267 -0
  774. package/workspace-bin/test-multi-soul-workflow +130 -0
  775. package/workspace-bin/trust-registry +465 -0
  776. package/workspace-docs/AGENTS.md +201 -0
  777. package/workspace-docs/CLAUDE.md +64 -0
  778. package/workspace-docs/PRINCIPLES.md +81 -0
  779. package/workspace-docs/SOUL.md +48 -0
package/install.sh ADDED
@@ -0,0 +1,895 @@
1
+ #!/usr/bin/env bash
2
+ # install.sh — OpenClaw Node Installer
3
+ # Installs the full OpenClaw infrastructure on Ubuntu (or any Linux with systemd).
4
+ # Also works on macOS for fresh installs.
5
+ #
6
+ # Usage:
7
+ # bash install.sh # Full install
8
+ # bash install.sh --dry-run # Show what would happen
9
+ # bash install.sh --update # Re-copy scripts/configs, skip deps
10
+
11
+ set -euo pipefail
12
+
13
+ # ============================================================
14
+ # Configuration
15
+ # ============================================================
16
+
17
+ REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
18
+ OPENCLAW_ROOT="${OPENCLAW_ROOT:-$HOME/.openclaw}"
19
+ WORKSPACE="$OPENCLAW_ROOT/workspace"
20
+ ENV_FILE="$OPENCLAW_ROOT/openclaw.env"
21
+ DRY_RUN=false
22
+ UPDATE_ONLY=false
23
+ SKIP_MESH=false
24
+ ENABLE_SERVICES=false
25
+ NODE_ROLE=""
26
+
27
+ for arg in "$@"; do
28
+ case "$arg" in
29
+ --dry-run) DRY_RUN=true ;;
30
+ --update) UPDATE_ONLY=true ;;
31
+ --skip-mesh) SKIP_MESH=true ;;
32
+ --enable-services) ENABLE_SERVICES=true ;;
33
+ --role=*) NODE_ROLE="${arg#--role=}" ;;
34
+ --help|-h)
35
+ echo "Usage: bash install.sh [--dry-run] [--update] [--skip-mesh] [--role=lead|worker] [--enable-services]"
36
+ echo " --dry-run Show what would happen without making changes"
37
+ echo " --update Re-copy scripts/configs only (skip system deps)"
38
+ echo " --skip-mesh Skip mesh network setup (used by meta-installer)"
39
+ echo " --role=lead|worker Set node role (default: macOS=lead, Linux=worker)"
40
+ echo " --enable-services Also enable and start services after installing"
41
+ exit 0
42
+ ;;
43
+ esac
44
+ done
45
+
46
+ # ============================================================
47
+ # Helpers
48
+ # ============================================================
49
+
50
+ GREEN='\033[0;32m'
51
+ YELLOW='\033[1;33m'
52
+ RED='\033[0;31m'
53
+ NC='\033[0m'
54
+
55
+ info() { echo -e "${GREEN}[+]${NC} $*"; }
56
+ warn() { echo -e "${YELLOW}[!]${NC} $*"; }
57
+ error() { echo -e "${RED}[✗]${NC} $*"; }
58
+ step() { echo -e "\n${GREEN}━━━ $* ━━━${NC}"; }
59
+
60
+ run() {
61
+ if $DRY_RUN; then
62
+ echo " [dry-run] $*"
63
+ else
64
+ "$@"
65
+ fi
66
+ }
67
+
68
+ detect_os() {
69
+ case "$(uname -s)" in
70
+ Darwin) echo "macos" ;;
71
+ Linux) echo "linux" ;;
72
+ *) echo "unknown" ;;
73
+ esac
74
+ }
75
+
76
+ OS=$(detect_os)
77
+
78
+ echo ""
79
+ echo "╔══════════════════════════════════════════╗"
80
+ echo "║ OpenClaw Node Installer ║"
81
+ echo "║ Platform: $OS "
82
+ echo "╚══════════════════════════════════════════╝"
83
+ echo ""
84
+
85
+ # ============================================================
86
+ # Step 1: System Dependencies
87
+ # ============================================================
88
+
89
+ if ! $UPDATE_ONLY; then
90
+ step "Step 1: System Dependencies"
91
+
92
+ # Node.js
93
+ if command -v node >/dev/null 2>&1; then
94
+ NODE_VERSION=$(node -e "console.log(process.versions.node.split('.')[0])")
95
+ if [ "$NODE_VERSION" -ge 18 ]; then
96
+ info "Node.js v$(node -v | tr -d 'v') found"
97
+ else
98
+ warn "Node.js v$NODE_VERSION found but v18+ required"
99
+ if [ "$OS" = "linux" ]; then
100
+ info "Installing Node.js 22 LTS..."
101
+ run sudo mkdir -p /etc/apt/keyrings
102
+ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
103
+ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
104
+ run sudo apt-get update
105
+ run sudo apt-get install -y nodejs
106
+ else
107
+ error "Please install Node.js 18+ manually: https://nodejs.org"
108
+ exit 1
109
+ fi
110
+ fi
111
+ else
112
+ warn "Node.js not found"
113
+ if [ "$OS" = "linux" ]; then
114
+ info "Installing Node.js 22 LTS..."
115
+ run sudo mkdir -p /etc/apt/keyrings
116
+ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
117
+ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
118
+ run sudo apt-get update
119
+ run sudo apt-get install -y nodejs
120
+ else
121
+ error "Please install Node.js 18+: https://nodejs.org"
122
+ exit 1
123
+ fi
124
+ fi
125
+
126
+ # Python 3
127
+ if command -v python3 >/dev/null 2>&1; then
128
+ info "Python 3 found: $(python3 --version)"
129
+ else
130
+ warn "Python 3 not found"
131
+ if [ "$OS" = "linux" ]; then
132
+ run sudo apt-get install -y python3
133
+ else
134
+ error "Please install Python 3"
135
+ exit 1
136
+ fi
137
+ fi
138
+
139
+ # Git
140
+ if command -v git >/dev/null 2>&1; then
141
+ info "Git found: $(git --version | head -1)"
142
+ else
143
+ if [ "$OS" = "linux" ]; then
144
+ run sudo apt-get install -y git
145
+ fi
146
+ fi
147
+
148
+ # SQLite3
149
+ if command -v sqlite3 >/dev/null 2>&1; then
150
+ info "SQLite3 found"
151
+ else
152
+ if [ "$OS" = "linux" ]; then
153
+ run sudo apt-get install -y sqlite3
154
+ fi
155
+ fi
156
+
157
+ # build-essential (needed for better-sqlite3 native compilation)
158
+ if [ "$OS" = "linux" ]; then
159
+ if dpkg -s build-essential >/dev/null 2>&1; then
160
+ info "build-essential found"
161
+ else
162
+ info "Installing build-essential (needed for native modules)..."
163
+ run sudo apt-get install -y build-essential
164
+ fi
165
+ fi
166
+
167
+ # curl
168
+ if command -v curl >/dev/null 2>&1; then
169
+ info "curl found"
170
+ else
171
+ if [ "$OS" = "linux" ]; then
172
+ run sudo apt-get install -y curl
173
+ fi
174
+ fi
175
+
176
+ # jq (used by test scripts and JSON processing)
177
+ if command -v jq >/dev/null 2>&1; then
178
+ info "jq found"
179
+ else
180
+ if [ "$OS" = "linux" ]; then
181
+ run sudo apt-get install -y jq
182
+ else
183
+ warn "jq not found — install with: brew install jq (optional, used by test scripts)"
184
+ fi
185
+ fi
186
+
187
+ # Python pip (needed for pyyaml)
188
+ if [ "$OS" = "linux" ]; then
189
+ if ! command -v pip3 >/dev/null 2>&1; then
190
+ info "Installing python3-pip..."
191
+ run sudo apt-get install -y python3-pip
192
+ fi
193
+ fi
194
+
195
+ # PyYAML (required by compile-boot)
196
+ if python3 -c "import yaml" 2>/dev/null; then
197
+ info "PyYAML found"
198
+ else
199
+ info "Installing PyYAML (required by compile-boot)..."
200
+ run pip3 install --user pyyaml 2>/dev/null || run pip install --user pyyaml 2>/dev/null || warn "Could not install pyyaml — compile-boot will not work"
201
+ fi
202
+
203
+ # Screenshot tool (Linux only)
204
+ if [ "$OS" = "linux" ]; then
205
+ if command -v scrot >/dev/null 2>&1 || command -v gnome-screenshot >/dev/null 2>&1 || command -v flameshot >/dev/null 2>&1; then
206
+ info "Screenshot tool found"
207
+ else
208
+ info "Installing scrot (screenshot capture)..."
209
+ run sudo apt-get install -y scrot || warn "Could not install scrot — screenshots will not work"
210
+ fi
211
+ fi
212
+ fi
213
+
214
+ # ── Resolve NODE_BIN (used by service templates) ──
215
+ NODE_BIN="$(command -v node 2>/dev/null || echo "")"
216
+ if [ -z "$NODE_BIN" ]; then
217
+ error "Node.js not found after dependency install — cannot continue"
218
+ exit 1
219
+ fi
220
+ export NODE_BIN
221
+
222
+ # ── Resolve node role ──
223
+ if [ -z "$NODE_ROLE" ]; then
224
+ NODE_ROLE="${OPENCLAW_NODE_ROLE:-}"
225
+ fi
226
+ if [ -z "$NODE_ROLE" ]; then
227
+ if [ "$OS" = "macos" ]; then
228
+ NODE_ROLE="lead"
229
+ else
230
+ NODE_ROLE="worker"
231
+ fi
232
+ fi
233
+ export OPENCLAW_NODE_ROLE="$NODE_ROLE"
234
+ info "Node role: $NODE_ROLE"
235
+
236
+ # ── Resolve node ID ──
237
+ export OPENCLAW_NODE_ID="${OPENCLAW_NODE_ID:-$(hostname -s | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')}"
238
+ info "Node ID: $OPENCLAW_NODE_ID"
239
+
240
+ # ── Resolve NATS URL + auth (for service templates) ──
241
+ export OPENCLAW_NATS="${OPENCLAW_NATS:-nats://127.0.0.1:4222}"
242
+ export OPENCLAW_NATS_TOKEN="${OPENCLAW_NATS_TOKEN:-}"
243
+
244
+ # ── Claude Code project path encoding (for transcript-sources.json) ──
245
+ # Claude encodes workspace paths as: strip leading /, replace / and . with -
246
+ claude_project_path() {
247
+ echo "$1" | sed 's|^/||; s|[/.]|-|g'
248
+ }
249
+ export CLAUDE_PROJECT_WORKSPACE="$(claude_project_path "$WORKSPACE")"
250
+ export CLAUDE_PROJECT_HOME="$(claude_project_path "$HOME")"
251
+
252
+ # ── Resolve paths for service templates ──
253
+ export OPENCLAW_WORKSPACE="$WORKSPACE"
254
+ export OPENCLAW_REPO_DIR="$REPO_DIR"
255
+ export NPM_BIN="$(command -v npm 2>/dev/null || echo "$HOME/.openclaw/workspace/.npm-global/bin/npm")"
256
+
257
+ # ============================================================
258
+ # Step 2: Directory Structure
259
+ # ============================================================
260
+
261
+ step "Step 2: Directory Structure"
262
+
263
+ DIRS=(
264
+ "$OPENCLAW_ROOT"
265
+ "$OPENCLAW_ROOT/config"
266
+ "$OPENCLAW_ROOT/services"
267
+ "$OPENCLAW_ROOT/souls"
268
+ "$OPENCLAW_ROOT/cron"
269
+ "$OPENCLAW_ROOT/devices"
270
+ "$OPENCLAW_ROOT/logs"
271
+ "$OPENCLAW_ROOT/agents/main/sessions"
272
+ "$WORKSPACE"
273
+ "$WORKSPACE/.tmp"
274
+ "$WORKSPACE/.tmp/active-sessions"
275
+ "$WORKSPACE/memory"
276
+ "$WORKSPACE/memory/archive"
277
+ "$WORKSPACE/.learnings"
278
+ "$WORKSPACE/.boot"
279
+ "$WORKSPACE/bin"
280
+ "$WORKSPACE/bin/hooks"
281
+ "$WORKSPACE/bin/lib"
282
+ "$WORKSPACE/skills"
283
+ "$WORKSPACE/projects"
284
+ "$WORKSPACE/memory-vault"
285
+ )
286
+
287
+ for dir in "${DIRS[@]}"; do
288
+ if [ ! -d "$dir" ]; then
289
+ run mkdir -p "$dir"
290
+ info "Created $dir"
291
+ fi
292
+ done
293
+ info "Directory structure ready"
294
+
295
+ # ============================================================
296
+ # Step 3: Copy bin/ scripts
297
+ # ============================================================
298
+
299
+ step "Step 3: Install Workspace Scripts"
300
+
301
+ run rsync -av --exclude='*.bak' --exclude='*.bak.*' --exclude='routing-eval-tests.json' \
302
+ "$REPO_DIR/workspace-bin/" "$WORKSPACE/bin/"
303
+ run chmod +x "$WORKSPACE/bin/"*
304
+ run chmod +x "$WORKSPACE/bin/hooks/"* 2>/dev/null || true
305
+ info "Workspace scripts installed to $WORKSPACE/bin/"
306
+
307
+ # Mesh daemons and CLI tools → ~/openclaw/bin/
308
+ MESH_BIN="$HOME/openclaw/bin"
309
+ MESH_LIB="$HOME/openclaw/lib"
310
+ run mkdir -p "$MESH_BIN" "$MESH_LIB"
311
+ run rsync -av "$REPO_DIR/bin/" "$MESH_BIN/"
312
+ run rsync -av "$REPO_DIR/lib/" "$MESH_LIB/"
313
+ run chmod +x "$MESH_BIN/"*.sh 2>/dev/null || true
314
+ info "Mesh daemons installed to $MESH_BIN/ ($(ls -1 "$REPO_DIR/bin/" | wc -l | tr -d ' ') files)"
315
+ info "Shared libraries installed to $MESH_LIB/"
316
+
317
+ # ============================================================
318
+ # Step 4: Copy Identity Files
319
+ # ============================================================
320
+
321
+ step "Step 4: Identity Files"
322
+
323
+ for f in CLAUDE.md SOUL.md PRINCIPLES.md AGENTS.md DELEGATION.md HEARTBEAT.md MEMORY_SPEC.md TOOLS.md; do
324
+ if [ -f "$REPO_DIR/identity/$f" ]; then
325
+ if [ ! -f "$WORKSPACE/$f" ]; then
326
+ run cp "$REPO_DIR/identity/$f" "$WORKSPACE/$f"
327
+ info "Installed $f"
328
+ elif ! diff -q "$WORKSPACE/$f" "$REPO_DIR/identity/$f" >/dev/null 2>&1; then
329
+ run cp "$REPO_DIR/identity/$f" "$WORKSPACE/$f.repo"
330
+ warn "$f differs from repo — saved repo version as $f.repo (merge manually)"
331
+ else
332
+ info "$f up to date"
333
+ fi
334
+ fi
335
+ done
336
+
337
+ # ============================================================
338
+ # Step 5: Copy Souls
339
+ # ============================================================
340
+
341
+ step "Step 5: Soul Definitions"
342
+
343
+ run rsync -av "$REPO_DIR/souls/" "$OPENCLAW_ROOT/souls/"
344
+ info "Souls installed to $OPENCLAW_ROOT/souls/"
345
+
346
+ # ============================================================
347
+ # Step 6: Copy Skills
348
+ # ============================================================
349
+
350
+ step "Step 6: Skills"
351
+
352
+ run rsync -av --exclude='dist/' --exclude='scripts/' "$REPO_DIR/skills/" "$WORKSPACE/skills/"
353
+ info "Skills installed to $WORKSPACE/skills/ ($(ls -d "$REPO_DIR/skills"/*/ 2>/dev/null | grep -v dist | grep -v scripts | wc -l | tr -d ' ') skills)"
354
+
355
+ # Install skill-specific dependencies (npm/pip where needed)
356
+ info "Installing skill dependencies..."
357
+ for skill_dir in "$WORKSPACE/skills"/*/; do
358
+ skill_name=$(basename "$skill_dir")
359
+ # npm-based skills
360
+ if [ -f "$skill_dir/package.json" ] && [ ! -d "$skill_dir/node_modules" ]; then
361
+ (cd "$skill_dir" && run npm install --production 2>/dev/null) && info " npm: $skill_name" || warn " npm failed: $skill_name"
362
+ fi
363
+ # pip-based skills
364
+ if [ -f "$skill_dir/requirements.txt" ]; then
365
+ run pip3 install --user -r "$skill_dir/requirements.txt" 2>/dev/null || warn " pip failed: $skill_name"
366
+ info " pip: $skill_name"
367
+ fi
368
+ done
369
+
370
+ # ============================================================
371
+ # Step 7: Environment File
372
+ # ============================================================
373
+
374
+ step "Step 7: Environment Configuration"
375
+
376
+ if [ ! -f "$ENV_FILE" ]; then
377
+ run cp "$REPO_DIR/openclaw.env.example" "$ENV_FILE"
378
+ warn "Created $ENV_FILE — EDIT THIS FILE with your API keys before proceeding!"
379
+ warn "Run: nano $ENV_FILE"
380
+ else
381
+ info "Environment file already exists at $ENV_FILE"
382
+ fi
383
+
384
+ # Source env file for config generation (safe key=value parsing — no shell execution)
385
+ if [ -f "$ENV_FILE" ]; then
386
+ while IFS= read -r line; do
387
+ # Skip comments and empty lines
388
+ [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
389
+ # Split only on the first '=' to preserve base64 padding etc.
390
+ key="${line%%=*}"
391
+ value="${line#*=}"
392
+ # Trim whitespace
393
+ key="$(echo "$key" | xargs)"
394
+ value="$(echo "$value" | xargs)"
395
+ # Only export valid variable names
396
+ [[ "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] && export "$key=$value"
397
+ done < "$ENV_FILE"
398
+ fi
399
+
400
+ # Set defaults for template substitution
401
+ export OPENCLAW_NODE_ID="${OPENCLAW_NODE_ID:-$(hostname -s)}"
402
+ export OPENCLAW_TIMEZONE="${OPENCLAW_TIMEZONE:-America/Montreal}"
403
+ export OPENCLAW_WORKSPACE="$WORKSPACE"
404
+
405
+ # ============================================================
406
+ # Step 8: Generate Configs from Templates
407
+ # ============================================================
408
+
409
+ step "Step 8: Configuration Files"
410
+
411
+ generate_config() {
412
+ local template="$1"
413
+ local output="$2"
414
+ local basename
415
+ basename=$(basename "$output")
416
+
417
+ if [ -f "$output" ] && ! $UPDATE_ONLY; then
418
+ info "Config $basename already exists, skipping (use --update to overwrite)"
419
+ return
420
+ fi
421
+
422
+ if command -v envsubst >/dev/null 2>&1; then
423
+ envsubst < "$template" > "$output"
424
+ else
425
+ # Fallback: manual sed substitution
426
+ sed \
427
+ -e "s|\${HOME}|$HOME|g" \
428
+ -e "s|\${OPENCLAW_WORKSPACE}|$WORKSPACE|g" \
429
+ -e "s|\${OPENCLAW_NODE_ID}|$OPENCLAW_NODE_ID|g" \
430
+ -e "s|\${OPENCLAW_TIMEZONE}|$OPENCLAW_TIMEZONE|g" \
431
+ -e "s|\${OPENAI_API_KEY}|${OPENAI_API_KEY:-}|g" \
432
+ -e "s|\${GOOGLE_API_KEY}|${GOOGLE_API_KEY:-}|g" \
433
+ -e "s|\${ANTHROPIC_API_KEY}|${ANTHROPIC_API_KEY:-}|g" \
434
+ -e "s|\${DISCORD_BOT_TOKEN}|${DISCORD_BOT_TOKEN:-}|g" \
435
+ -e "s|\${TELEGRAM_BOT_TOKEN}|${TELEGRAM_BOT_TOKEN:-}|g" \
436
+ -e "s|\${WEB_SEARCH_API_KEY}|${WEB_SEARCH_API_KEY:-}|g" \
437
+ -e "s|\${OBSIDIAN_API_KEY}|${OBSIDIAN_API_KEY:-}|g" \
438
+ -e "s|\${OPENCLAW_NATS}|${OPENCLAW_NATS:-}|g" \
439
+ -e "s|\${CLAUDE_PROJECT_WORKSPACE}|${CLAUDE_PROJECT_WORKSPACE}|g" \
440
+ -e "s|\${CLAUDE_PROJECT_HOME}|${CLAUDE_PROJECT_HOME}|g" \
441
+ "$template" > "$output"
442
+ fi
443
+ chmod 600 "$output"
444
+ info "Generated $basename (mode 600)"
445
+ }
446
+
447
+ generate_config "$REPO_DIR/config/daemon.json.template" "$OPENCLAW_ROOT/config/daemon.json"
448
+ generate_config "$REPO_DIR/config/transcript-sources.json.template" "$OPENCLAW_ROOT/config/transcript-sources.json"
449
+ generate_config "$REPO_DIR/config/obsidian-sync.json.template" "$OPENCLAW_ROOT/config/obsidian-sync.json"
450
+ generate_config "$REPO_DIR/config/openclaw.json.template" "$OPENCLAW_ROOT/openclaw.json"
451
+
452
+ # ============================================================
453
+ # Step 9: Boot Manifest
454
+ # ============================================================
455
+
456
+ step "Step 9: Boot System"
457
+
458
+ if [ -f "$REPO_DIR/boot/manifest.yaml" ]; then
459
+ run cp "$REPO_DIR/boot/manifest.yaml" "$WORKSPACE/.boot/manifest.yaml"
460
+ info "Boot manifest installed"
461
+ fi
462
+
463
+ # Compile boot profiles
464
+ if [ -f "$WORKSPACE/bin/compile-boot" ]; then
465
+ info "Compiling boot profiles..."
466
+ run python3 "$WORKSPACE/bin/compile-boot" --all 2>/dev/null || warn "Boot compilation skipped (may need identity files in place first)"
467
+ fi
468
+
469
+ # ============================================================
470
+ # Step 10: Obsidian Vault Scaffold
471
+ # ============================================================
472
+
473
+ step "Step 10: Obsidian Vault"
474
+
475
+ VAULT_DIR="$WORKSPACE/projects/arcane-vault"
476
+ if [ -d "$REPO_DIR/obsidian-vault" ]; then
477
+ if [ ! -d "$VAULT_DIR/.obsidian" ]; then
478
+ run mkdir -p "$VAULT_DIR"
479
+ run rsync -av "$REPO_DIR/obsidian-vault/" "$VAULT_DIR/"
480
+ # Remove .gitkeep files (only needed for git, not for runtime)
481
+ find "$VAULT_DIR" -name '.gitkeep' -delete 2>/dev/null || true
482
+ info "Obsidian vault scaffold installed (22 domain folders + plugins)"
483
+ warn "Obsidian Local REST API plugin included. Set API key in $VAULT_DIR/.obsidian-api-key"
484
+ else
485
+ info "Obsidian vault already exists, skipping"
486
+ fi
487
+ fi
488
+
489
+ # ============================================================
490
+ # Step 11: Mission Control
491
+ # ============================================================
492
+
493
+ step "Step 11: Mission Control"
494
+
495
+ MC_DIR="$WORKSPACE/projects/mission-control"
496
+ if [ ! -d "$MC_DIR/src" ]; then
497
+ run mkdir -p "$MC_DIR"
498
+ run rsync -av "$REPO_DIR/mission-control/" "$MC_DIR/"
499
+ info "Mission Control source copied"
500
+ else
501
+ info "Mission Control already exists, updating source..."
502
+ run rsync -av --exclude='node_modules' --exclude='.next' --exclude='*.db' \
503
+ "$REPO_DIR/mission-control/" "$MC_DIR/"
504
+ fi
505
+
506
+ if [ ! -d "$MC_DIR/node_modules" ]; then
507
+ info "Installing Mission Control dependencies (this may take a minute)..."
508
+ (cd "$MC_DIR" && run npm install)
509
+ else
510
+ info "Mission Control dependencies already installed"
511
+ fi
512
+
513
+ # Create .env.local for MC if not exists
514
+ if [ ! -f "$MC_DIR/.env.local" ]; then
515
+ cat > "$MC_DIR/.env.local" << MCENV
516
+ # Mission Control Environment
517
+ WORKSPACE_ROOT=$WORKSPACE
518
+ OPENCLAW_HOME=$OPENCLAW_ROOT
519
+ DB_PATH=$MC_DIR/data/mission-control.db
520
+
521
+ # NATS (mesh connectivity — resolved from openclaw.env if not set here)
522
+ OPENCLAW_NATS=${OPENCLAW_NATS:-}
523
+ OPENCLAW_NATS_TOKEN=${OPENCLAW_NATS_TOKEN:-}
524
+
525
+ # TTS (optional — falls back to Edge TTS if missing)
526
+ GEMINI_API_KEY=${GOOGLE_API_KEY:-}
527
+ MCENV
528
+ info "Created Mission Control .env.local"
529
+ fi
530
+
531
+ # Ensure data directory exists for SQLite
532
+ run mkdir -p "$MC_DIR/data"
533
+
534
+ # ============================================================
535
+ # Step 12: ClawVault
536
+ # ============================================================
537
+
538
+ step "Step 12: ClawVault"
539
+
540
+ if command -v clawvault >/dev/null 2>&1; then
541
+ info "ClawVault already installed: $(which clawvault)"
542
+ elif [ -d "$WORKSPACE/.npm-global" ]; then
543
+ info "ClawVault: checking npm-global..."
544
+ if [ -f "$WORKSPACE/.npm-global/bin/clawvault" ]; then
545
+ info "ClawVault found in .npm-global"
546
+ else
547
+ warn "ClawVault not found. Install with: npm install -g clawvault"
548
+ fi
549
+ else
550
+ warn "ClawVault not installed. Install with: npm install -g clawvault"
551
+ warn "(Non-critical — memory system works without it)"
552
+ fi
553
+
554
+ # ============================================================
555
+ # Step 13: Initialize Memory
556
+ # ============================================================
557
+
558
+ step "Step 13: Initialize Memory"
559
+
560
+ TODAY=$(date +%Y-%m-%d)
561
+ DAILY_FILE="$WORKSPACE/memory/$TODAY.md"
562
+
563
+ if [ ! -f "$DAILY_FILE" ]; then
564
+ cat > "$DAILY_FILE" << DAILY
565
+ # $TODAY
566
+
567
+ Node initialized on $(hostname) at $(date '+%H:%M %Z').
568
+ DAILY
569
+ info "Created daily memory file: $TODAY.md"
570
+ fi
571
+
572
+ if [ ! -f "$WORKSPACE/memory/active-tasks.md" ]; then
573
+ cat > "$WORKSPACE/memory/active-tasks.md" << TASKS
574
+ # Active Tasks
575
+
576
+ Updated: $TODAY $(date '+%H:%M') $OPENCLAW_TIMEZONE
577
+
578
+ Use this as crash-recovery state.
579
+
580
+ ## Task Template
581
+
582
+ \`\`\`yaml
583
+ task_id: T-YYYYMMDD-001
584
+ title: <short title>
585
+ status: queued|running|blocked|waiting-user|done|cancelled
586
+ owner: main|sub-agent:<sessionKey>
587
+ success_criteria:
588
+ - <criterion 1>
589
+ artifacts:
590
+ - <path/or/link>
591
+ next_action: <single next step>
592
+ updated_at: YYYY-MM-DD HH:MM
593
+ \`\`\`
594
+
595
+ ## Live Tasks
596
+
597
+ (none yet)
598
+ TASKS
599
+ info "Created active-tasks.md"
600
+ fi
601
+
602
+ if [ ! -f "$WORKSPACE/.companion-state.md" ]; then
603
+ cat > "$WORKSPACE/.companion-state.md" << STATE
604
+ ## Session Status
605
+ status: inactive
606
+ started_at:
607
+ last_flush: $(date -Iseconds)
608
+
609
+ ## Active Task
610
+ (none)
611
+
612
+ ## Current State
613
+ 0 running, 0 done
614
+ STATE
615
+ info "Created .companion-state.md"
616
+ fi
617
+
618
+ if [ ! -f "$WORKSPACE/.learnings/lessons.md" ]; then
619
+ cat > "$WORKSPACE/.learnings/lessons.md" << LESSONS
620
+ # Lessons Learned
621
+
622
+ Accumulated corrections and preferences.
623
+
624
+ ## Format
625
+ - **Date** | **Category** | **Lesson** | **Source**
626
+ LESSONS
627
+ info "Created lessons.md"
628
+ fi
629
+
630
+ if [ ! -f "$WORKSPACE/MEMORY.md" ]; then
631
+ cat > "$WORKSPACE/MEMORY.md" << MEM
632
+ # MEMORY.md — Long-Term Memory
633
+
634
+ ## Active Context (this week)
635
+
636
+ - Node initialized: $TODAY on $(hostname)
637
+
638
+ ## Recent (this month)
639
+
640
+ ## Stable (long-term preferences & facts)
641
+
642
+ ## Archive Reference
643
+ - See memory/archive/ for historical context
644
+ MEM
645
+ info "Created MEMORY.md"
646
+ fi
647
+
648
+ # ============================================================
649
+ # Step 14: Install Services (role-aware, template-based)
650
+ # ============================================================
651
+
652
+ step "Step 14: Install Services (role=$NODE_ROLE)"
653
+
654
+ MANIFEST="$REPO_DIR/services/service-manifest.json"
655
+ LAUNCHD_TEMPLATES="$REPO_DIR/services/launchd"
656
+ SYSTEMD_TEMPLATES="$REPO_DIR/services/systemd"
657
+ LAUNCHD_DEST="$HOME/Library/LaunchAgents"
658
+ SYSTEMD_DEST="$HOME/.config/systemd/user"
659
+ INSTALLED_COUNT=0
660
+ SKIPPED_COUNT=0
661
+
662
+ # Ensure log directories exist
663
+ run mkdir -p "$HOME/.openclaw/logs" "$WORKSPACE/.tmp"
664
+
665
+ if [ ! -f "$MANIFEST" ]; then
666
+ warn "Service manifest not found at $MANIFEST — skipping service installation"
667
+ else
668
+ # Read manifest entries using node (jq may not be available yet)
669
+ SERVICES=$("$NODE_BIN" -e "
670
+ const m = require('$MANIFEST');
671
+ m.forEach(s => console.log([s.name, s.role, s.autostart, s.timer || false].join('|')));
672
+ ")
673
+
674
+ while IFS='|' read -r SVC_NAME SVC_ROLE SVC_AUTO SVC_TIMER; do
675
+ # Role filtering: install if role matches or role=both
676
+ if [ "$SVC_ROLE" != "both" ] && [ "$SVC_ROLE" != "$NODE_ROLE" ]; then
677
+ SKIPPED_COUNT=$((SKIPPED_COUNT + 1))
678
+ continue
679
+ fi
680
+
681
+ if [ "$OS" = "macos" ]; then
682
+ TEMPLATE="$LAUNCHD_TEMPLATES/ai.openclaw.${SVC_NAME}.plist"
683
+ DEST="$LAUNCHD_DEST/ai.openclaw.${SVC_NAME}.plist"
684
+
685
+ if [ ! -f "$TEMPLATE" ]; then
686
+ warn " Template not found: $TEMPLATE"
687
+ continue
688
+ fi
689
+
690
+ run mkdir -p "$LAUNCHD_DEST"
691
+
692
+ if command -v envsubst >/dev/null 2>&1; then
693
+ envsubst < "$TEMPLATE" > "$DEST"
694
+ else
695
+ sed \
696
+ -e "s|\${HOME}|$HOME|g" \
697
+ -e "s|\${NODE_BIN}|$NODE_BIN|g" \
698
+ -e "s|\${OPENCLAW_WORKSPACE}|$OPENCLAW_WORKSPACE|g" \
699
+ -e "s|\${OPENCLAW_NATS}|$OPENCLAW_NATS|g" \
700
+ -e "s|\${OPENCLAW_NATS_TOKEN}|$OPENCLAW_NATS_TOKEN|g" \
701
+ -e "s|\${OPENCLAW_NODE_ID}|$OPENCLAW_NODE_ID|g" \
702
+ -e "s|\${OPENCLAW_NODE_ROLE}|$OPENCLAW_NODE_ROLE|g" \
703
+ -e "s|\${OPENCLAW_REPO_DIR}|$OPENCLAW_REPO_DIR|g" \
704
+ -e "s|\${NPM_BIN}|$NPM_BIN|g" \
705
+ "$TEMPLATE" > "$DEST"
706
+ fi
707
+
708
+ # Unload if already loaded
709
+ launchctl unload "$DEST" 2>/dev/null || true
710
+
711
+ if [ "$SVC_AUTO" = "true" ] && $ENABLE_SERVICES; then
712
+ launchctl load "$DEST"
713
+ info " Installed + loaded: $SVC_NAME"
714
+ else
715
+ info " Installed: $SVC_NAME (load manually: launchctl load $DEST)"
716
+ fi
717
+ INSTALLED_COUNT=$((INSTALLED_COUNT + 1))
718
+
719
+ elif [ "$OS" = "linux" ]; then
720
+ run mkdir -p "$SYSTEMD_DEST"
721
+
722
+ # Handle timer-based services (service + timer)
723
+ if [ "$SVC_TIMER" = "true" ]; then
724
+ for ext in service timer; do
725
+ TEMPLATE="$SYSTEMD_TEMPLATES/${SVC_NAME}.${ext}"
726
+ DEST="$SYSTEMD_DEST/${SVC_NAME}.${ext}"
727
+ if [ ! -f "$TEMPLATE" ]; then
728
+ warn " Template not found: $TEMPLATE"
729
+ continue
730
+ fi
731
+ if command -v envsubst >/dev/null 2>&1; then
732
+ envsubst < "$TEMPLATE" > "$DEST"
733
+ else
734
+ sed \
735
+ -e "s|\${HOME}|$HOME|g" \
736
+ -e "s|\${NODE_BIN}|$NODE_BIN|g" \
737
+ -e "s|\${OPENCLAW_WORKSPACE}|$OPENCLAW_WORKSPACE|g" \
738
+ -e "s|\${OPENCLAW_NATS}|$OPENCLAW_NATS|g" \
739
+ -e "s|\${OPENCLAW_NODE_ID}|$OPENCLAW_NODE_ID|g" \
740
+ -e "s|\${OPENCLAW_NODE_ROLE}|$OPENCLAW_NODE_ROLE|g" \
741
+ -e "s|\${OPENCLAW_REPO_DIR}|$OPENCLAW_REPO_DIR|g" \
742
+ "$TEMPLATE" > "$DEST"
743
+ fi
744
+ done
745
+ if $ENABLE_SERVICES; then
746
+ systemctl --user enable "${SVC_NAME}.timer"
747
+ systemctl --user start "${SVC_NAME}.timer"
748
+ info " Installed + enabled: $SVC_NAME (timer)"
749
+ else
750
+ info " Installed: $SVC_NAME (timer — enable with: systemctl --user enable --now ${SVC_NAME}.timer)"
751
+ fi
752
+ else
753
+ TEMPLATE="$SYSTEMD_TEMPLATES/${SVC_NAME}.service"
754
+ DEST="$SYSTEMD_DEST/${SVC_NAME}.service"
755
+ if [ ! -f "$TEMPLATE" ]; then
756
+ warn " Template not found: $TEMPLATE"
757
+ continue
758
+ fi
759
+ if command -v envsubst >/dev/null 2>&1; then
760
+ envsubst < "$TEMPLATE" > "$DEST"
761
+ else
762
+ sed \
763
+ -e "s|\${HOME}|$HOME|g" \
764
+ -e "s|\${NODE_BIN}|$NODE_BIN|g" \
765
+ -e "s|\${OPENCLAW_WORKSPACE}|$OPENCLAW_WORKSPACE|g" \
766
+ -e "s|\${OPENCLAW_NATS}|$OPENCLAW_NATS|g" \
767
+ -e "s|\${OPENCLAW_NODE_ID}|$OPENCLAW_NODE_ID|g" \
768
+ -e "s|\${OPENCLAW_NODE_ROLE}|$OPENCLAW_NODE_ROLE|g" \
769
+ -e "s|\${OPENCLAW_REPO_DIR}|$OPENCLAW_REPO_DIR|g" \
770
+ "$TEMPLATE" > "$DEST"
771
+ fi
772
+ if [ "$SVC_AUTO" = "true" ] && $ENABLE_SERVICES; then
773
+ systemctl --user enable "${SVC_NAME}.service"
774
+ systemctl --user start "${SVC_NAME}.service"
775
+ info " Installed + started: $SVC_NAME"
776
+ else
777
+ info " Installed: $SVC_NAME"
778
+ fi
779
+ fi
780
+ INSTALLED_COUNT=$((INSTALLED_COUNT + 1))
781
+ fi
782
+ done <<< "$SERVICES"
783
+
784
+ # Reload systemd if any units were installed
785
+ if [ "$OS" = "linux" ] && [ "$INSTALLED_COUNT" -gt 0 ]; then
786
+ systemctl --user daemon-reload
787
+ # Enable linger so user services survive logout
788
+ loginctl enable-linger "$(whoami)" 2>/dev/null || warn "loginctl enable-linger failed — services may stop on logout"
789
+ fi
790
+
791
+ info "Services installed: $INSTALLED_COUNT (skipped $SKIPPED_COUNT — wrong role)"
792
+ if ! $ENABLE_SERVICES; then
793
+ info "Services installed but NOT started. Use --enable-services to also start them."
794
+ if [ "$OS" = "linux" ]; then
795
+ info "Or start individually: systemctl --user enable --now <service-name>"
796
+ else
797
+ info "Or load individually: launchctl load ~/Library/LaunchAgents/ai.openclaw.<name>.plist"
798
+ fi
799
+ fi
800
+ fi
801
+
802
+ # ============================================================
803
+ # Step 15: Mesh Network (optional — if Tailscale detected)
804
+ # ============================================================
805
+
806
+ step "Step 15: Mesh Network"
807
+
808
+ if $SKIP_MESH; then
809
+ info "Skipped (--skip-mesh flag set by meta-installer)"
810
+ MESH_AVAILABLE=false
811
+ else
812
+
813
+ MESH_AVAILABLE=false
814
+ if command -v tailscale >/dev/null 2>&1; then
815
+ TS_IP=$(tailscale ip -4 2>/dev/null || true)
816
+ if [ -n "$TS_IP" ]; then
817
+ info "Tailscale connected: $TS_IP"
818
+ MESH_AVAILABLE=true
819
+ else
820
+ warn "Tailscale installed but not connected — skipping mesh setup"
821
+ warn "Connect Tailscale and re-run with --update to enable mesh"
822
+ fi
823
+ else
824
+ info "Tailscale not found — single-node mode (mesh features disabled)"
825
+ info "Install Tailscale + run again to enable multi-node mesh"
826
+ fi
827
+
828
+ if $MESH_AVAILABLE; then
829
+ # Check if mesh is already deployed
830
+ if [ -x "$HOME/openclaw/bin/mesh" ] || command -v mesh >/dev/null 2>&1; then
831
+ info "Mesh CLI already installed"
832
+ # Update the mesh skill in the managed skills dir
833
+ if [ -f "$REPO_DIR/skills/mesh/SKILL.md" ]; then
834
+ run mkdir -p "$HOME/.openclaw/skills/mesh"
835
+ run cp "$REPO_DIR/skills/mesh/SKILL.md" "$HOME/.openclaw/skills/mesh/SKILL.md"
836
+ info "Mesh skill updated in ~/.openclaw/skills/mesh/"
837
+ fi
838
+ else
839
+ info "Setting up mesh network (NATS, agent, shared folder, health/repair)..."
840
+ if command -v npx >/dev/null 2>&1; then
841
+ # npx openclaw-mesh handles sudo internally
842
+ run npx openclaw-mesh 2>&1 || warn "Mesh setup had issues — run 'npx openclaw-mesh' manually to debug"
843
+ else
844
+ warn "npx not found — install mesh manually: npx openclaw-mesh"
845
+ fi
846
+ fi
847
+
848
+ # Install mesh skill to managed location (tier 2: visible to all agents)
849
+ if [ -f "$REPO_DIR/skills/mesh/SKILL.md" ]; then
850
+ run mkdir -p "$HOME/.openclaw/skills/mesh"
851
+ run cp "$REPO_DIR/skills/mesh/SKILL.md" "$HOME/.openclaw/skills/mesh/SKILL.md"
852
+ info "Mesh skill installed to ~/.openclaw/skills/mesh/ (all agents)"
853
+ fi
854
+ fi
855
+
856
+ fi # end SKIP_MESH else block
857
+
858
+ # ============================================================
859
+ # Done!
860
+ # ============================================================
861
+
862
+ echo ""
863
+ echo "╔══════════════════════════════════════════╗"
864
+ echo "║ Installation Complete! ║"
865
+ echo "╚══════════════════════════════════════════╝"
866
+ echo ""
867
+ info "Workspace: $WORKSPACE"
868
+ info "Config: $OPENCLAW_ROOT/config/"
869
+ info "Env file: $ENV_FILE"
870
+ echo ""
871
+
872
+ info "Role: $NODE_ROLE | Services installed: $INSTALLED_COUNT"
873
+ echo ""
874
+
875
+ if [ "$OS" = "linux" ]; then
876
+ echo "Next steps:"
877
+ echo " 1. Edit your env file: nano $ENV_FILE"
878
+ echo " 2. Enable services: bash $0 --update --enable-services"
879
+ echo " 3. Check services: systemctl --user list-units 'openclaw-*'"
880
+ echo " 4. View MC dashboard: http://localhost:3000"
881
+ if $MESH_AVAILABLE; then
882
+ echo ""
883
+ echo " Mesh commands:"
884
+ echo " mesh status # online nodes"
885
+ echo " mesh health --all # check all nodes"
886
+ echo " mesh repair --all # fix broken services"
887
+ fi
888
+ else
889
+ echo "Next steps:"
890
+ echo " 1. Edit your env file: nano $ENV_FILE"
891
+ echo " 2. Load services: bash $0 --update --enable-services"
892
+ echo " 3. Check services: launchctl list | grep openclaw"
893
+ echo " 4. View MC dashboard: http://localhost:3000"
894
+ fi
895
+ echo ""