@hera-al/server 1.6.1

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 (348) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +325 -0
  3. package/bundled/apple-notes/SKILL.md +77 -0
  4. package/bundled/apple-reminders/SKILL.md +96 -0
  5. package/bundled/blogwatcher/SKILL.md +69 -0
  6. package/bundled/camsnap/SKILL.md +45 -0
  7. package/bundled/discord/SKILL.md +578 -0
  8. package/bundled/gemini/SKILL.md +43 -0
  9. package/bundled/gifgrep/SKILL.md +79 -0
  10. package/bundled/github/SKILL.md +77 -0
  11. package/bundled/gog/SKILL.md +116 -0
  12. package/bundled/goplaces/SKILL.md +52 -0
  13. package/bundled/himalaya/SKILL.md +257 -0
  14. package/bundled/himalaya/references/configuration.md +184 -0
  15. package/bundled/himalaya/references/message-composition.md +199 -0
  16. package/bundled/homebrew/SKILL.md +82 -0
  17. package/bundled/local-places/SERVER_README.md +101 -0
  18. package/bundled/local-places/SKILL.md +102 -0
  19. package/bundled/local-places/pyproject.toml +21 -0
  20. package/bundled/local-places/src/local_places/__init__.py +2 -0
  21. package/bundled/local-places/src/local_places/google_places.py +314 -0
  22. package/bundled/local-places/src/local_places/main.py +65 -0
  23. package/bundled/local-places/src/local_places/schemas.py +107 -0
  24. package/bundled/markitdown/SKILL.md +96 -0
  25. package/bundled/mcporter/SKILL.md +61 -0
  26. package/bundled/merge-pr/SKILL.md +187 -0
  27. package/bundled/merge-pr/agents/openai.yaml +4 -0
  28. package/bundled/nano-banana-pro/SKILL.md +58 -0
  29. package/bundled/nano-banana-pro/scripts/generate_image.py +184 -0
  30. package/bundled/nano-pdf/SKILL.md +38 -0
  31. package/bundled/open-prose/README.md +25 -0
  32. package/bundled/open-prose/index.ts +5 -0
  33. package/bundled/open-prose/openclaw.plugin.json +11 -0
  34. package/bundled/open-prose/package.json +15 -0
  35. package/bundled/open-prose/skills/prose/LICENSE +21 -0
  36. package/bundled/open-prose/skills/prose/SKILL.md +323 -0
  37. package/bundled/open-prose/skills/prose/alt-borges.md +141 -0
  38. package/bundled/open-prose/skills/prose/alts/arabian-nights.md +358 -0
  39. package/bundled/open-prose/skills/prose/alts/borges.md +360 -0
  40. package/bundled/open-prose/skills/prose/alts/folk.md +322 -0
  41. package/bundled/open-prose/skills/prose/alts/homer.md +346 -0
  42. package/bundled/open-prose/skills/prose/alts/kafka.md +373 -0
  43. package/bundled/open-prose/skills/prose/compiler.md +2971 -0
  44. package/bundled/open-prose/skills/prose/examples/01-hello-world.prose +4 -0
  45. package/bundled/open-prose/skills/prose/examples/02-research-and-summarize.prose +6 -0
  46. package/bundled/open-prose/skills/prose/examples/03-code-review.prose +17 -0
  47. package/bundled/open-prose/skills/prose/examples/04-write-and-refine.prose +14 -0
  48. package/bundled/open-prose/skills/prose/examples/05-debug-issue.prose +20 -0
  49. package/bundled/open-prose/skills/prose/examples/06-explain-codebase.prose +17 -0
  50. package/bundled/open-prose/skills/prose/examples/07-refactor.prose +20 -0
  51. package/bundled/open-prose/skills/prose/examples/08-blog-post.prose +20 -0
  52. package/bundled/open-prose/skills/prose/examples/09-research-with-agents.prose +25 -0
  53. package/bundled/open-prose/skills/prose/examples/10-code-review-agents.prose +32 -0
  54. package/bundled/open-prose/skills/prose/examples/11-skills-and-imports.prose +27 -0
  55. package/bundled/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +43 -0
  56. package/bundled/open-prose/skills/prose/examples/13-variables-and-context.prose +51 -0
  57. package/bundled/open-prose/skills/prose/examples/14-composition-blocks.prose +48 -0
  58. package/bundled/open-prose/skills/prose/examples/15-inline-sequences.prose +23 -0
  59. package/bundled/open-prose/skills/prose/examples/16-parallel-reviews.prose +19 -0
  60. package/bundled/open-prose/skills/prose/examples/17-parallel-research.prose +19 -0
  61. package/bundled/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +36 -0
  62. package/bundled/open-prose/skills/prose/examples/19-advanced-parallel.prose +71 -0
  63. package/bundled/open-prose/skills/prose/examples/20-fixed-loops.prose +20 -0
  64. package/bundled/open-prose/skills/prose/examples/21-pipeline-operations.prose +35 -0
  65. package/bundled/open-prose/skills/prose/examples/22-error-handling.prose +51 -0
  66. package/bundled/open-prose/skills/prose/examples/23-retry-with-backoff.prose +63 -0
  67. package/bundled/open-prose/skills/prose/examples/24-choice-blocks.prose +86 -0
  68. package/bundled/open-prose/skills/prose/examples/25-conditionals.prose +114 -0
  69. package/bundled/open-prose/skills/prose/examples/26-parameterized-blocks.prose +100 -0
  70. package/bundled/open-prose/skills/prose/examples/27-string-interpolation.prose +105 -0
  71. package/bundled/open-prose/skills/prose/examples/28-automated-pr-review.prose +37 -0
  72. package/bundled/open-prose/skills/prose/examples/28-gas-town.prose +1572 -0
  73. package/bundled/open-prose/skills/prose/examples/29-captains-chair.prose +218 -0
  74. package/bundled/open-prose/skills/prose/examples/30-captains-chair-simple.prose +42 -0
  75. package/bundled/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +145 -0
  76. package/bundled/open-prose/skills/prose/examples/33-pr-review-autofix.prose +168 -0
  77. package/bundled/open-prose/skills/prose/examples/34-content-pipeline.prose +204 -0
  78. package/bundled/open-prose/skills/prose/examples/35-feature-factory.prose +296 -0
  79. package/bundled/open-prose/skills/prose/examples/36-bug-hunter.prose +237 -0
  80. package/bundled/open-prose/skills/prose/examples/37-the-forge.prose +1474 -0
  81. package/bundled/open-prose/skills/prose/examples/38-skill-scan.prose +455 -0
  82. package/bundled/open-prose/skills/prose/examples/39-architect-by-simulation.prose +277 -0
  83. package/bundled/open-prose/skills/prose/examples/40-rlm-self-refine.prose +32 -0
  84. package/bundled/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +38 -0
  85. package/bundled/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +46 -0
  86. package/bundled/open-prose/skills/prose/examples/43-rlm-pairwise.prose +50 -0
  87. package/bundled/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +261 -0
  88. package/bundled/open-prose/skills/prose/examples/45-plugin-release.prose +159 -0
  89. package/bundled/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +637 -0
  90. package/bundled/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +148 -0
  91. package/bundled/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +225 -0
  92. package/bundled/open-prose/skills/prose/examples/47-language-self-improvement.prose +356 -0
  93. package/bundled/open-prose/skills/prose/examples/48-habit-miner.prose +445 -0
  94. package/bundled/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +210 -0
  95. package/bundled/open-prose/skills/prose/examples/README.md +391 -0
  96. package/bundled/open-prose/skills/prose/examples/roadmap/README.md +22 -0
  97. package/bundled/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +20 -0
  98. package/bundled/open-prose/skills/prose/examples/roadmap/parallel-review.prose +18 -0
  99. package/bundled/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +17 -0
  100. package/bundled/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +223 -0
  101. package/bundled/open-prose/skills/prose/guidance/antipatterns.md +951 -0
  102. package/bundled/open-prose/skills/prose/guidance/patterns.md +700 -0
  103. package/bundled/open-prose/skills/prose/guidance/system-prompt.md +180 -0
  104. package/bundled/open-prose/skills/prose/help.md +144 -0
  105. package/bundled/open-prose/skills/prose/lib/README.md +108 -0
  106. package/bundled/open-prose/skills/prose/lib/calibrator.prose +215 -0
  107. package/bundled/open-prose/skills/prose/lib/cost-analyzer.prose +174 -0
  108. package/bundled/open-prose/skills/prose/lib/error-forensics.prose +250 -0
  109. package/bundled/open-prose/skills/prose/lib/inspector.prose +196 -0
  110. package/bundled/open-prose/skills/prose/lib/profiler.prose +460 -0
  111. package/bundled/open-prose/skills/prose/lib/program-improver.prose +275 -0
  112. package/bundled/open-prose/skills/prose/lib/project-memory.prose +118 -0
  113. package/bundled/open-prose/skills/prose/lib/user-memory.prose +93 -0
  114. package/bundled/open-prose/skills/prose/lib/vm-improver.prose +243 -0
  115. package/bundled/open-prose/skills/prose/primitives/session.md +593 -0
  116. package/bundled/open-prose/skills/prose/prose.md +1237 -0
  117. package/bundled/open-prose/skills/prose/state/filesystem.md +498 -0
  118. package/bundled/open-prose/skills/prose/state/in-context.md +384 -0
  119. package/bundled/open-prose/skills/prose/state/postgres.md +880 -0
  120. package/bundled/open-prose/skills/prose/state/sqlite.md +574 -0
  121. package/bundled/peekaboo/SKILL.md +190 -0
  122. package/bundled/prepare-pr/SKILL.md +277 -0
  123. package/bundled/prepare-pr/agents/openai.yaml +4 -0
  124. package/bundled/review-pr/SKILL.md +228 -0
  125. package/bundled/review-pr/agents/openai.yaml +4 -0
  126. package/bundled/sag/SKILL.md +87 -0
  127. package/bundled/skill-creator/SKILL.md +370 -0
  128. package/bundled/skill-creator/license.txt +202 -0
  129. package/bundled/skill-creator/scripts/init_skill.py +378 -0
  130. package/bundled/skill-creator/scripts/package_skill.py +111 -0
  131. package/bundled/skill-creator/scripts/quick_validate.py +101 -0
  132. package/bundled/spotify-player/SKILL.md +64 -0
  133. package/bundled/ssh/SKILL.md +119 -0
  134. package/bundled/summarize/SKILL.md +87 -0
  135. package/bundled/video-frames/SKILL.md +46 -0
  136. package/bundled/video-frames/scripts/frame.sh +81 -0
  137. package/bundled/voice-call/SKILL.md +45 -0
  138. package/bundled/wacli/SKILL.md +72 -0
  139. package/bundled/weather/SKILL.md +54 -0
  140. package/dist/agent/agent-service.d.ts +88 -0
  141. package/dist/agent/agent-service.js +1 -0
  142. package/dist/agent/message-queue.d.ts +24 -0
  143. package/dist/agent/message-queue.js +1 -0
  144. package/dist/agent/prompt-builder.d.ts +58 -0
  145. package/dist/agent/prompt-builder.js +1 -0
  146. package/dist/agent/session-agent.d.ts +197 -0
  147. package/dist/agent/session-agent.js +1 -0
  148. package/dist/agent/session-db.d.ts +26 -0
  149. package/dist/agent/session-db.js +1 -0
  150. package/dist/agent/session-error-handler.d.ts +37 -0
  151. package/dist/agent/session-error-handler.js +1 -0
  152. package/dist/agent/session-manager.d.ts +19 -0
  153. package/dist/agent/session-manager.js +1 -0
  154. package/dist/agent/workspace-files.d.ts +51 -0
  155. package/dist/agent/workspace-files.js +1 -0
  156. package/dist/auth/auth-middleware.d.ts +9 -0
  157. package/dist/auth/auth-middleware.js +1 -0
  158. package/dist/auth/node-signature-db.d.ts +30 -0
  159. package/dist/auth/node-signature-db.js +1 -0
  160. package/dist/auth/token-db.d.ts +38 -0
  161. package/dist/auth/token-db.js +1 -0
  162. package/dist/browser/browser-service.d.ts +9 -0
  163. package/dist/browser/browser-service.js +1 -0
  164. package/dist/channels/channel.d.ts +2 -0
  165. package/dist/channels/channel.js +1 -0
  166. package/dist/channels/responses.d.ts +21 -0
  167. package/dist/channels/responses.js +1 -0
  168. package/dist/commands/clear.d.ts +7 -0
  169. package/dist/commands/clear.js +1 -0
  170. package/dist/commands/cmd.d.ts +7 -0
  171. package/dist/commands/cmd.js +1 -0
  172. package/dist/commands/coder.d.ts +12 -0
  173. package/dist/commands/coder.js +1 -0
  174. package/dist/commands/command-registry.d.ts +12 -0
  175. package/dist/commands/command-registry.js +1 -0
  176. package/dist/commands/command.d.ts +22 -0
  177. package/dist/commands/command.js +1 -0
  178. package/dist/commands/compact.d.ts +7 -0
  179. package/dist/commands/compact.js +1 -0
  180. package/dist/commands/customsubagents.d.ts +15 -0
  181. package/dist/commands/customsubagents.js +1 -0
  182. package/dist/commands/help.d.ts +9 -0
  183. package/dist/commands/help.js +1 -0
  184. package/dist/commands/mcp.d.ts +9 -0
  185. package/dist/commands/mcp.js +1 -0
  186. package/dist/commands/model.d.ts +22 -0
  187. package/dist/commands/model.js +1 -0
  188. package/dist/commands/models.d.ts +11 -0
  189. package/dist/commands/models.js +1 -0
  190. package/dist/commands/new.d.ts +7 -0
  191. package/dist/commands/new.js +1 -0
  192. package/dist/commands/plugin.d.ts +7 -0
  193. package/dist/commands/plugin.js +1 -0
  194. package/dist/commands/sandbox.d.ts +12 -0
  195. package/dist/commands/sandbox.js +1 -0
  196. package/dist/commands/showtool.d.ts +12 -0
  197. package/dist/commands/showtool.js +1 -0
  198. package/dist/commands/status.d.ts +24 -0
  199. package/dist/commands/status.js +1 -0
  200. package/dist/commands/stop.d.ts +10 -0
  201. package/dist/commands/stop.js +1 -0
  202. package/dist/commands/subagents.d.ts +12 -0
  203. package/dist/commands/subagents.js +1 -0
  204. package/dist/commands/usage.d.ts +25 -0
  205. package/dist/commands/usage.js +1 -0
  206. package/dist/commands/useplugin.d.ts +7 -0
  207. package/dist/commands/useplugin.js +1 -0
  208. package/dist/config-watcher.d.ts +14 -0
  209. package/dist/config-watcher.js +1 -0
  210. package/dist/config.d.ts +267 -0
  211. package/dist/config.js +1 -0
  212. package/dist/cron/cron-service.d.ts +57 -0
  213. package/dist/cron/cron-service.js +1 -0
  214. package/dist/cron/heartbeat-token.d.ts +29 -0
  215. package/dist/cron/heartbeat-token.js +1 -0
  216. package/dist/cron/schedule.d.ts +3 -0
  217. package/dist/cron/schedule.js +1 -0
  218. package/dist/cron/store.d.ts +4 -0
  219. package/dist/cron/store.js +1 -0
  220. package/dist/cron/types.d.ts +47 -0
  221. package/dist/cron/types.js +1 -0
  222. package/dist/gateway/bridge.d.ts +38 -0
  223. package/dist/gateway/bridge.js +1 -0
  224. package/dist/gateway/channel-manager.d.ts +45 -0
  225. package/dist/gateway/channel-manager.js +1 -0
  226. package/dist/gateway/channels/qr-image.d.ts +5 -0
  227. package/dist/gateway/channels/qr-image.js +1 -0
  228. package/dist/gateway/channels/telegram.d.ts +39 -0
  229. package/dist/gateway/channels/telegram.js +1 -0
  230. package/dist/gateway/channels/webchat.d.ts +51 -0
  231. package/dist/gateway/channels/webchat.js +1 -0
  232. package/dist/gateway/channels/whatsapp.d.ts +40 -0
  233. package/dist/gateway/channels/whatsapp.js +1 -0
  234. package/dist/gateway/node-registry.d.ts +38 -0
  235. package/dist/gateway/node-registry.js +1 -0
  236. package/dist/heracli/index.d.ts +3 -0
  237. package/dist/heracli/index.js +2 -0
  238. package/dist/heracli/logs.d.ts +13 -0
  239. package/dist/heracli/logs.js +1 -0
  240. package/dist/heracli/security/audit.d.ts +17 -0
  241. package/dist/heracli/security/audit.js +1 -0
  242. package/dist/heracli/security/checks/channel-policies.d.ts +6 -0
  243. package/dist/heracli/security/checks/channel-policies.js +1 -0
  244. package/dist/heracli/security/checks/credentials.d.ts +6 -0
  245. package/dist/heracli/security/checks/credentials.js +1 -0
  246. package/dist/heracli/security/checks/fs-permissions.d.ts +6 -0
  247. package/dist/heracli/security/checks/fs-permissions.js +1 -0
  248. package/dist/heracli/security/checks/network.d.ts +4 -0
  249. package/dist/heracli/security/checks/network.js +1 -0
  250. package/dist/heracli/security/report.d.ts +4 -0
  251. package/dist/heracli/security/report.js +1 -0
  252. package/dist/index.d.ts +3 -0
  253. package/dist/index.js +2 -0
  254. package/dist/installer/hera.d.ts +3 -0
  255. package/dist/installer/hera.js +2 -0
  256. package/dist/media/message-processor.d.ts +23 -0
  257. package/dist/media/message-processor.js +1 -0
  258. package/dist/memory/memory-manager.d.ts +21 -0
  259. package/dist/memory/memory-manager.js +1 -0
  260. package/dist/memory/memory-provider.d.ts +22 -0
  261. package/dist/memory/memory-provider.js +1 -0
  262. package/dist/memory/memory-search.d.ts +102 -0
  263. package/dist/memory/memory-search.js +1 -0
  264. package/dist/memory/recall-strategies.d.ts +2 -0
  265. package/dist/memory/recall-strategies.js +1 -0
  266. package/dist/nostromo/auth.d.ts +29 -0
  267. package/dist/nostromo/auth.js +1 -0
  268. package/dist/nostromo/nostromo.d.ts +23 -0
  269. package/dist/nostromo/nostromo.js +1 -0
  270. package/dist/nostromo/ui-html-layout.d.ts +3 -0
  271. package/dist/nostromo/ui-html-layout.js +1 -0
  272. package/dist/nostromo/ui-html-modals.d.ts +3 -0
  273. package/dist/nostromo/ui-html-modals.js +1 -0
  274. package/dist/nostromo/ui-js-agent.d.ts +3 -0
  275. package/dist/nostromo/ui-js-agent.js +1 -0
  276. package/dist/nostromo/ui-js-channels.d.ts +3 -0
  277. package/dist/nostromo/ui-js-channels.js +1 -0
  278. package/dist/nostromo/ui-js-competences.d.ts +3 -0
  279. package/dist/nostromo/ui-js-competences.js +1 -0
  280. package/dist/nostromo/ui-js-config.d.ts +3 -0
  281. package/dist/nostromo/ui-js-config.js +1 -0
  282. package/dist/nostromo/ui-js-core.d.ts +3 -0
  283. package/dist/nostromo/ui-js-core.js +1 -0
  284. package/dist/nostromo/ui-js-ops.d.ts +3 -0
  285. package/dist/nostromo/ui-js-ops.js +1 -0
  286. package/dist/nostromo/ui-js-prompts.d.ts +3 -0
  287. package/dist/nostromo/ui-js-prompts.js +1 -0
  288. package/dist/nostromo/ui-styles.d.ts +3 -0
  289. package/dist/nostromo/ui-styles.js +1 -0
  290. package/dist/nostromo/ui.d.ts +2 -0
  291. package/dist/nostromo/ui.js +1 -0
  292. package/dist/server.d.ts +80 -0
  293. package/dist/server.js +1 -0
  294. package/dist/stt/local-whisper.d.ts +9 -0
  295. package/dist/stt/local-whisper.js +1 -0
  296. package/dist/stt/openai-whisper.d.ts +14 -0
  297. package/dist/stt/openai-whisper.js +1 -0
  298. package/dist/stt/stt-loader.d.ts +4 -0
  299. package/dist/stt/stt-loader.js +1 -0
  300. package/dist/stt/stt-provider.d.ts +4 -0
  301. package/dist/stt/stt-provider.js +1 -0
  302. package/dist/tools/browser-tools.d.ts +9 -0
  303. package/dist/tools/browser-tools.js +1 -0
  304. package/dist/tools/cron-tools.d.ts +4 -0
  305. package/dist/tools/cron-tools.js +1 -0
  306. package/dist/tools/memory-tools.d.ts +3 -0
  307. package/dist/tools/memory-tools.js +1 -0
  308. package/dist/tools/message-tools.d.ts +5 -0
  309. package/dist/tools/message-tools.js +1 -0
  310. package/dist/tools/node-tools.d.ts +3 -0
  311. package/dist/tools/node-tools.js +1 -0
  312. package/dist/tools/server-tools.d.ts +2 -0
  313. package/dist/tools/server-tools.js +1 -0
  314. package/dist/tools/tts-tools.d.ts +3 -0
  315. package/dist/tools/tts-tools.js +1 -0
  316. package/dist/tts/tts-service.d.ts +19 -0
  317. package/dist/tts/tts-service.js +1 -0
  318. package/dist/utils/chunk.d.ts +3 -0
  319. package/dist/utils/chunk.js +1 -0
  320. package/dist/utils/logger.d.ts +16 -0
  321. package/dist/utils/logger.js +1 -0
  322. package/dist/utils/markdown/fences.d.ts +11 -0
  323. package/dist/utils/markdown/fences.js +1 -0
  324. package/dist/utils/markdown/ir.d.ts +33 -0
  325. package/dist/utils/markdown/ir.js +1 -0
  326. package/dist/utils/markdown/render.d.ts +19 -0
  327. package/dist/utils/markdown/render.js +1 -0
  328. package/dist/utils/markdown/tables.d.ts +3 -0
  329. package/dist/utils/markdown/tables.js +1 -0
  330. package/dist/utils/media-response.d.ts +29 -0
  331. package/dist/utils/media-response.js +1 -0
  332. package/dist/utils/package-paths.d.ts +5 -0
  333. package/dist/utils/package-paths.js +1 -0
  334. package/dist/utils/telegram-format.d.ts +13 -0
  335. package/dist/utils/telegram-format.js +1 -0
  336. package/installationPkg/.env.example +26 -0
  337. package/installationPkg/AGENTS.md +143 -0
  338. package/installationPkg/BOOTSTRAP.md +45 -0
  339. package/installationPkg/CBINT.json +16 -0
  340. package/installationPkg/HEARTBEAT.md +5 -0
  341. package/installationPkg/IDENTITY.md +7 -0
  342. package/installationPkg/SOUL.md +36 -0
  343. package/installationPkg/SYSTEM_PROMPT.md +55 -0
  344. package/installationPkg/SYSTEM_PROMPT_SUBAGENT.md +40 -0
  345. package/installationPkg/TOOLS.md +36 -0
  346. package/installationPkg/USER.md +11 -0
  347. package/installationPkg/config.example.yaml +291 -0
  348. package/package.json +95 -0
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: merge-pr
3
+ description: Merge a GitHub PR via squash after /preparepr. Use when asked to merge a ready PR. Do not push to main or modify code. Ensure the PR ends in MERGED state and clean up worktrees after success.
4
+ ---
5
+
6
+ # Merge PR
7
+
8
+ ## Overview
9
+
10
+ Merge a prepared PR via `gh pr merge --squash` and clean up the worktree after success.
11
+
12
+ ## Inputs
13
+
14
+ - Ask for PR number or URL.
15
+ - If missing, auto-detect from conversation.
16
+ - If ambiguous, ask.
17
+
18
+ ## Safety
19
+
20
+ - Use `gh pr merge --squash` as the only path to `main`.
21
+ - Do not run `git push` at all during merge.
22
+ - Do not run gateway stop commands. Do not kill processes. Do not touch port 18792.
23
+
24
+ ## Execution Rule
25
+
26
+ - Execute the workflow. Do not stop after printing the TODO checklist.
27
+ - If delegating, require the delegate to run commands and capture outputs.
28
+
29
+ ## Known Footguns
30
+
31
+ - If you see "fatal: not a git repository", you are in the wrong directory. Use `~/dev/openclaw` if available; otherwise ask user.
32
+ - Read `.local/review.md` and `.local/prep.md` in the worktree. Do not skip.
33
+ - Clean up the real worktree directory `.worktrees/pr-<PR>` only after a successful merge.
34
+ - Expect cleanup to remove `.local/` artifacts.
35
+
36
+ ## Completion Criteria
37
+
38
+ - Ensure `gh pr merge` succeeds.
39
+ - Ensure PR state is `MERGED`, never `CLOSED`.
40
+ - Record the merge SHA.
41
+ - Run cleanup only after merge success.
42
+
43
+ ## First: Create a TODO Checklist
44
+
45
+ Create a checklist of all merge steps, print it, then continue and execute the commands.
46
+
47
+ ## Setup: Use a Worktree
48
+
49
+ Use an isolated worktree for all merge work.
50
+
51
+ ```sh
52
+ cd ~/dev/openclaw
53
+ # Sanity: confirm you are in the repo
54
+ git rev-parse --show-toplevel
55
+
56
+ WORKTREE_DIR=".worktrees/pr-<PR>"
57
+ ```
58
+
59
+ Run all commands inside the worktree directory.
60
+
61
+ ## Load Local Artifacts (Mandatory)
62
+
63
+ Expect these files from earlier steps:
64
+
65
+ - `.local/review.md` from `/reviewpr`
66
+ - `.local/prep.md` from `/preparepr`
67
+
68
+ ```sh
69
+ ls -la .local || true
70
+
71
+ if [ -f .local/review.md ]; then
72
+ echo "Found .local/review.md"
73
+ sed -n '1,120p' .local/review.md
74
+ else
75
+ echo "Missing .local/review.md. Stop and run /reviewpr, then /preparepr."
76
+ exit 1
77
+ fi
78
+
79
+ if [ -f .local/prep.md ]; then
80
+ echo "Found .local/prep.md"
81
+ sed -n '1,120p' .local/prep.md
82
+ else
83
+ echo "Missing .local/prep.md. Stop and run /preparepr first."
84
+ exit 1
85
+ fi
86
+ ```
87
+
88
+ ## Steps
89
+
90
+ 1. Identify PR meta
91
+
92
+ ```sh
93
+ gh pr view <PR> --json number,title,state,isDraft,author,headRefName,baseRefName,headRepository,body --jq '{number,title,state,isDraft,author:.author.login,head:.headRefName,base:.baseRefName,headRepo:.headRepository.nameWithOwner,body}'
94
+ contrib=$(gh pr view <PR> --json author --jq .author.login)
95
+ head=$(gh pr view <PR> --json headRefName --jq .headRefName)
96
+ head_repo_url=$(gh pr view <PR> --json headRepository --jq .headRepository.url)
97
+ ```
98
+
99
+ 2. Run sanity checks
100
+
101
+ Stop if any are true:
102
+
103
+ - PR is a draft.
104
+ - Required checks are failing.
105
+ - Branch is behind main.
106
+
107
+ If `.local/prep.md` contains `Docs-only change detected with high confidence; skipping pnpm test.`, that local test skip is allowed. CI checks still must be green.
108
+
109
+ ```sh
110
+ # Checks
111
+ gh pr checks <PR>
112
+
113
+ # Check behind main
114
+ git fetch origin main
115
+ git fetch origin pull/<PR>/head:pr-<PR>
116
+ git merge-base --is-ancestor origin/main pr-<PR> || echo "PR branch is behind main, run /preparepr"
117
+ ```
118
+
119
+ If anything is failing or behind, stop and say to run `/preparepr`.
120
+
121
+ 3. Merge PR and delete branch
122
+
123
+ If checks are still running, use `--auto` to queue the merge.
124
+
125
+ ```sh
126
+ # Check status first
127
+ check_status=$(gh pr checks <PR> 2>&1)
128
+ if echo "$check_status" | grep -q "pending\|queued"; then
129
+ echo "Checks still running, using --auto to queue merge"
130
+ gh pr merge <PR> --squash --delete-branch --auto
131
+ echo "Merge queued. Monitor with: gh pr checks <PR> --watch"
132
+ else
133
+ gh pr merge <PR> --squash --delete-branch
134
+ fi
135
+ ```
136
+
137
+ If merge fails, report the error and stop. Do not retry in a loop.
138
+ If the PR needs changes beyond what `/preparepr` already did, stop and say to run `/preparepr` again.
139
+
140
+ 4. Get merge SHA
141
+
142
+ ```sh
143
+ merge_sha=$(gh pr view <PR> --json mergeCommit --jq '.mergeCommit.oid')
144
+ echo "merge_sha=$merge_sha"
145
+ ```
146
+
147
+ 5. Optional comment
148
+
149
+ Use a literal multiline string or heredoc for newlines.
150
+
151
+ ```sh
152
+ gh pr comment <PR> -F - <<'EOF'
153
+ Merged via squash.
154
+
155
+ - Merge commit: $merge_sha
156
+
157
+ Thanks @$contrib!
158
+ EOF
159
+ ```
160
+
161
+ 6. Verify PR state is MERGED
162
+
163
+ ```sh
164
+ gh pr view <PR> --json state --jq .state
165
+ ```
166
+
167
+ 7. Clean up worktree only on success
168
+
169
+ Run cleanup only if step 6 returned `MERGED`.
170
+
171
+ ```sh
172
+ cd ~/dev/openclaw
173
+
174
+ git worktree remove ".worktrees/pr-<PR>" --force
175
+
176
+ git branch -D temp/pr-<PR> 2>/dev/null || true
177
+ git branch -D pr-<PR> 2>/dev/null || true
178
+ ```
179
+
180
+ ## Guardrails
181
+
182
+ - Worktree only.
183
+ - Do not close PRs.
184
+ - End in MERGED state.
185
+ - Clean up only after merge success.
186
+ - Never push to main. Use `gh pr merge --squash` only.
187
+ - Do not run `git push` at all in this command.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Merge PR"
3
+ short_description: "Merge GitHub PRs via squash"
4
+ default_prompt: "Use $merge-pr to merge a GitHub PR via squash after preparation."
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: nano-banana-pro
3
+ description: Generate or edit images via Gemini 3 Pro Image (Nano Banana Pro).
4
+ homepage: https://ai.google.dev/
5
+ metadata:
6
+ {
7
+ "openclaw":
8
+ {
9
+ "emoji": "🍌",
10
+ "requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"] },
11
+ "primaryEnv": "GEMINI_API_KEY",
12
+ "install":
13
+ [
14
+ {
15
+ "id": "uv-brew",
16
+ "kind": "brew",
17
+ "formula": "uv",
18
+ "bins": ["uv"],
19
+ "label": "Install uv (brew)",
20
+ },
21
+ ],
22
+ },
23
+ }
24
+ ---
25
+
26
+ # Nano Banana Pro (Gemini 3 Pro Image)
27
+
28
+ Use the bundled script to generate or edit images.
29
+
30
+ Generate
31
+
32
+ ```bash
33
+ uv run {baseDir}/scripts/generate_image.py --prompt "your image description" --filename "output.png" --resolution 1K
34
+ ```
35
+
36
+ Edit (single image)
37
+
38
+ ```bash
39
+ uv run {baseDir}/scripts/generate_image.py --prompt "edit instructions" --filename "output.png" -i "/path/in.png" --resolution 2K
40
+ ```
41
+
42
+ Multi-image composition (up to 14 images)
43
+
44
+ ```bash
45
+ uv run {baseDir}/scripts/generate_image.py --prompt "combine these into one scene" --filename "output.png" -i img1.png -i img2.png -i img3.png
46
+ ```
47
+
48
+ API key
49
+
50
+ - `GEMINI_API_KEY` env var
51
+ - Or set `skills."nano-banana-pro".apiKey` / `skills."nano-banana-pro".env.GEMINI_API_KEY` in `~/.openclaw/openclaw.json`
52
+
53
+ Notes
54
+
55
+ - Resolutions: `1K` (default), `2K`, `4K`.
56
+ - Use timestamps in filenames: `yyyy-mm-dd-hh-mm-ss-name.png`.
57
+ - The script prints a `MEDIA:` line for OpenClaw to auto-attach on supported chat providers.
58
+ - Do not read the image back; report the saved path only.
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env python3
2
+ # /// script
3
+ # requires-python = ">=3.10"
4
+ # dependencies = [
5
+ # "google-genai>=1.0.0",
6
+ # "pillow>=10.0.0",
7
+ # ]
8
+ # ///
9
+ """
10
+ Generate images using Google's Nano Banana Pro (Gemini 3 Pro Image) API.
11
+
12
+ Usage:
13
+ uv run generate_image.py --prompt "your image description" --filename "output.png" [--resolution 1K|2K|4K] [--api-key KEY]
14
+
15
+ Multi-image editing (up to 14 images):
16
+ uv run generate_image.py --prompt "combine these images" --filename "output.png" -i img1.png -i img2.png -i img3.png
17
+ """
18
+
19
+ import argparse
20
+ import os
21
+ import sys
22
+ from pathlib import Path
23
+
24
+
25
+ def get_api_key(provided_key: str | None) -> str | None:
26
+ """Get API key from argument first, then environment."""
27
+ if provided_key:
28
+ return provided_key
29
+ return os.environ.get("GEMINI_API_KEY")
30
+
31
+
32
+ def main():
33
+ parser = argparse.ArgumentParser(
34
+ description="Generate images using Nano Banana Pro (Gemini 3 Pro Image)"
35
+ )
36
+ parser.add_argument(
37
+ "--prompt", "-p",
38
+ required=True,
39
+ help="Image description/prompt"
40
+ )
41
+ parser.add_argument(
42
+ "--filename", "-f",
43
+ required=True,
44
+ help="Output filename (e.g., sunset-mountains.png)"
45
+ )
46
+ parser.add_argument(
47
+ "--input-image", "-i",
48
+ action="append",
49
+ dest="input_images",
50
+ metavar="IMAGE",
51
+ help="Input image path(s) for editing/composition. Can be specified multiple times (up to 14 images)."
52
+ )
53
+ parser.add_argument(
54
+ "--resolution", "-r",
55
+ choices=["1K", "2K", "4K"],
56
+ default="1K",
57
+ help="Output resolution: 1K (default), 2K, or 4K"
58
+ )
59
+ parser.add_argument(
60
+ "--api-key", "-k",
61
+ help="Gemini API key (overrides GEMINI_API_KEY env var)"
62
+ )
63
+
64
+ args = parser.parse_args()
65
+
66
+ # Get API key
67
+ api_key = get_api_key(args.api_key)
68
+ if not api_key:
69
+ print("Error: No API key provided.", file=sys.stderr)
70
+ print("Please either:", file=sys.stderr)
71
+ print(" 1. Provide --api-key argument", file=sys.stderr)
72
+ print(" 2. Set GEMINI_API_KEY environment variable", file=sys.stderr)
73
+ sys.exit(1)
74
+
75
+ # Import here after checking API key to avoid slow import on error
76
+ from google import genai
77
+ from google.genai import types
78
+ from PIL import Image as PILImage
79
+
80
+ # Initialise client
81
+ client = genai.Client(api_key=api_key)
82
+
83
+ # Set up output path
84
+ output_path = Path(args.filename)
85
+ output_path.parent.mkdir(parents=True, exist_ok=True)
86
+
87
+ # Load input images if provided (up to 14 supported by Nano Banana Pro)
88
+ input_images = []
89
+ output_resolution = args.resolution
90
+ if args.input_images:
91
+ if len(args.input_images) > 14:
92
+ print(f"Error: Too many input images ({len(args.input_images)}). Maximum is 14.", file=sys.stderr)
93
+ sys.exit(1)
94
+
95
+ max_input_dim = 0
96
+ for img_path in args.input_images:
97
+ try:
98
+ img = PILImage.open(img_path)
99
+ input_images.append(img)
100
+ print(f"Loaded input image: {img_path}")
101
+
102
+ # Track largest dimension for auto-resolution
103
+ width, height = img.size
104
+ max_input_dim = max(max_input_dim, width, height)
105
+ except Exception as e:
106
+ print(f"Error loading input image '{img_path}': {e}", file=sys.stderr)
107
+ sys.exit(1)
108
+
109
+ # Auto-detect resolution from largest input if not explicitly set
110
+ if args.resolution == "1K" and max_input_dim > 0: # Default value
111
+ if max_input_dim >= 3000:
112
+ output_resolution = "4K"
113
+ elif max_input_dim >= 1500:
114
+ output_resolution = "2K"
115
+ else:
116
+ output_resolution = "1K"
117
+ print(f"Auto-detected resolution: {output_resolution} (from max input dimension {max_input_dim})")
118
+
119
+ # Build contents (images first if editing, prompt only if generating)
120
+ if input_images:
121
+ contents = [*input_images, args.prompt]
122
+ img_count = len(input_images)
123
+ print(f"Processing {img_count} image{'s' if img_count > 1 else ''} with resolution {output_resolution}...")
124
+ else:
125
+ contents = args.prompt
126
+ print(f"Generating image with resolution {output_resolution}...")
127
+
128
+ try:
129
+ response = client.models.generate_content(
130
+ model="gemini-3-pro-image-preview",
131
+ contents=contents,
132
+ config=types.GenerateContentConfig(
133
+ response_modalities=["TEXT", "IMAGE"],
134
+ image_config=types.ImageConfig(
135
+ image_size=output_resolution
136
+ )
137
+ )
138
+ )
139
+
140
+ # Process response and convert to PNG
141
+ image_saved = False
142
+ for part in response.parts:
143
+ if part.text is not None:
144
+ print(f"Model response: {part.text}")
145
+ elif part.inline_data is not None:
146
+ # Convert inline data to PIL Image and save as PNG
147
+ from io import BytesIO
148
+
149
+ # inline_data.data is already bytes, not base64
150
+ image_data = part.inline_data.data
151
+ if isinstance(image_data, str):
152
+ # If it's a string, it might be base64
153
+ import base64
154
+ image_data = base64.b64decode(image_data)
155
+
156
+ image = PILImage.open(BytesIO(image_data))
157
+
158
+ # Ensure RGB mode for PNG (convert RGBA to RGB with white background if needed)
159
+ if image.mode == 'RGBA':
160
+ rgb_image = PILImage.new('RGB', image.size, (255, 255, 255))
161
+ rgb_image.paste(image, mask=image.split()[3])
162
+ rgb_image.save(str(output_path), 'PNG')
163
+ elif image.mode == 'RGB':
164
+ image.save(str(output_path), 'PNG')
165
+ else:
166
+ image.convert('RGB').save(str(output_path), 'PNG')
167
+ image_saved = True
168
+
169
+ if image_saved:
170
+ full_path = output_path.resolve()
171
+ print(f"\nImage saved: {full_path}")
172
+ # OpenClaw parses MEDIA tokens and will attach the file on supported providers.
173
+ print(f"MEDIA: {full_path}")
174
+ else:
175
+ print("Error: No image was generated in the response.", file=sys.stderr)
176
+ sys.exit(1)
177
+
178
+ except Exception as e:
179
+ print(f"Error generating image: {e}", file=sys.stderr)
180
+ sys.exit(1)
181
+
182
+
183
+ if __name__ == "__main__":
184
+ main()
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: nano-pdf
3
+ description: Edit PDFs with natural-language instructions using the nano-pdf CLI.
4
+ homepage: https://pypi.org/project/nano-pdf/
5
+ metadata:
6
+ {
7
+ "openclaw":
8
+ {
9
+ "emoji": "📄",
10
+ "requires": { "bins": ["nano-pdf"] },
11
+ "install":
12
+ [
13
+ {
14
+ "id": "uv",
15
+ "kind": "uv",
16
+ "package": "nano-pdf",
17
+ "bins": ["nano-pdf"],
18
+ "label": "Install nano-pdf (uv)",
19
+ },
20
+ ],
21
+ },
22
+ }
23
+ ---
24
+
25
+ # nano-pdf
26
+
27
+ Use `nano-pdf` to apply edits to a specific page in a PDF using a natural-language instruction.
28
+
29
+ ## Quick start
30
+
31
+ ```bash
32
+ nano-pdf edit deck.pdf 1 "Change the title to 'Q3 Results' and fix the typo in the subtitle"
33
+ ```
34
+
35
+ Notes:
36
+
37
+ - Page numbers are 0-based or 1-based depending on the tool’s version/config; if the result looks off by one, retry with the other.
38
+ - Always sanity-check the output PDF before sending it out.
@@ -0,0 +1,25 @@
1
+ # OpenProse (plugin)
2
+
3
+ Adds the OpenProse skill pack and `/prose` slash command.
4
+
5
+ ## Enable
6
+
7
+ Bundled plugins are disabled by default. Enable this one:
8
+
9
+ ```json
10
+ {
11
+ "plugins": {
12
+ "entries": {
13
+ "open-prose": { "enabled": true }
14
+ }
15
+ }
16
+ }
17
+ ```
18
+
19
+ Restart the Gateway after enabling.
20
+
21
+ ## What you get
22
+
23
+ - `/prose` slash command (user-invocable skill)
24
+ - OpenProse VM semantics (`.prose` programs + multi-agent orchestration)
25
+ - Telemetry support (best-effort, per OpenProse spec)
@@ -0,0 +1,5 @@
1
+ import type { OpenClawPluginApi } from "../../src/plugins/types.js";
2
+
3
+ export default function register(_api: OpenClawPluginApi) {
4
+ // OpenProse is delivered via plugin-shipped skills.
5
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "open-prose",
3
+ "name": "OpenProse",
4
+ "description": "OpenProse VM skill pack with a /prose slash command.",
5
+ "skills": ["./skills"],
6
+ "configSchema": {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "properties": {}
10
+ }
11
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@openclaw/open-prose",
3
+ "version": "2026.2.9",
4
+ "private": true,
5
+ "description": "OpenProse VM skill pack plugin (slash command + telemetry).",
6
+ "type": "module",
7
+ "devDependencies": {
8
+ "openclaw": "workspace:*"
9
+ },
10
+ "openclaw": {
11
+ "extensions": [
12
+ "./index.ts"
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 OpenProse
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.