@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.
- package/LICENSE +21 -0
- package/README.md +325 -0
- package/bundled/apple-notes/SKILL.md +77 -0
- package/bundled/apple-reminders/SKILL.md +96 -0
- package/bundled/blogwatcher/SKILL.md +69 -0
- package/bundled/camsnap/SKILL.md +45 -0
- package/bundled/discord/SKILL.md +578 -0
- package/bundled/gemini/SKILL.md +43 -0
- package/bundled/gifgrep/SKILL.md +79 -0
- package/bundled/github/SKILL.md +77 -0
- package/bundled/gog/SKILL.md +116 -0
- package/bundled/goplaces/SKILL.md +52 -0
- package/bundled/himalaya/SKILL.md +257 -0
- package/bundled/himalaya/references/configuration.md +184 -0
- package/bundled/himalaya/references/message-composition.md +199 -0
- package/bundled/homebrew/SKILL.md +82 -0
- package/bundled/local-places/SERVER_README.md +101 -0
- package/bundled/local-places/SKILL.md +102 -0
- package/bundled/local-places/pyproject.toml +21 -0
- package/bundled/local-places/src/local_places/__init__.py +2 -0
- package/bundled/local-places/src/local_places/google_places.py +314 -0
- package/bundled/local-places/src/local_places/main.py +65 -0
- package/bundled/local-places/src/local_places/schemas.py +107 -0
- package/bundled/markitdown/SKILL.md +96 -0
- package/bundled/mcporter/SKILL.md +61 -0
- package/bundled/merge-pr/SKILL.md +187 -0
- package/bundled/merge-pr/agents/openai.yaml +4 -0
- package/bundled/nano-banana-pro/SKILL.md +58 -0
- package/bundled/nano-banana-pro/scripts/generate_image.py +184 -0
- package/bundled/nano-pdf/SKILL.md +38 -0
- package/bundled/open-prose/README.md +25 -0
- package/bundled/open-prose/index.ts +5 -0
- package/bundled/open-prose/openclaw.plugin.json +11 -0
- package/bundled/open-prose/package.json +15 -0
- package/bundled/open-prose/skills/prose/LICENSE +21 -0
- package/bundled/open-prose/skills/prose/SKILL.md +323 -0
- package/bundled/open-prose/skills/prose/alt-borges.md +141 -0
- package/bundled/open-prose/skills/prose/alts/arabian-nights.md +358 -0
- package/bundled/open-prose/skills/prose/alts/borges.md +360 -0
- package/bundled/open-prose/skills/prose/alts/folk.md +322 -0
- package/bundled/open-prose/skills/prose/alts/homer.md +346 -0
- package/bundled/open-prose/skills/prose/alts/kafka.md +373 -0
- package/bundled/open-prose/skills/prose/compiler.md +2971 -0
- package/bundled/open-prose/skills/prose/examples/01-hello-world.prose +4 -0
- package/bundled/open-prose/skills/prose/examples/02-research-and-summarize.prose +6 -0
- package/bundled/open-prose/skills/prose/examples/03-code-review.prose +17 -0
- package/bundled/open-prose/skills/prose/examples/04-write-and-refine.prose +14 -0
- package/bundled/open-prose/skills/prose/examples/05-debug-issue.prose +20 -0
- package/bundled/open-prose/skills/prose/examples/06-explain-codebase.prose +17 -0
- package/bundled/open-prose/skills/prose/examples/07-refactor.prose +20 -0
- package/bundled/open-prose/skills/prose/examples/08-blog-post.prose +20 -0
- package/bundled/open-prose/skills/prose/examples/09-research-with-agents.prose +25 -0
- package/bundled/open-prose/skills/prose/examples/10-code-review-agents.prose +32 -0
- package/bundled/open-prose/skills/prose/examples/11-skills-and-imports.prose +27 -0
- package/bundled/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +43 -0
- package/bundled/open-prose/skills/prose/examples/13-variables-and-context.prose +51 -0
- package/bundled/open-prose/skills/prose/examples/14-composition-blocks.prose +48 -0
- package/bundled/open-prose/skills/prose/examples/15-inline-sequences.prose +23 -0
- package/bundled/open-prose/skills/prose/examples/16-parallel-reviews.prose +19 -0
- package/bundled/open-prose/skills/prose/examples/17-parallel-research.prose +19 -0
- package/bundled/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +36 -0
- package/bundled/open-prose/skills/prose/examples/19-advanced-parallel.prose +71 -0
- package/bundled/open-prose/skills/prose/examples/20-fixed-loops.prose +20 -0
- package/bundled/open-prose/skills/prose/examples/21-pipeline-operations.prose +35 -0
- package/bundled/open-prose/skills/prose/examples/22-error-handling.prose +51 -0
- package/bundled/open-prose/skills/prose/examples/23-retry-with-backoff.prose +63 -0
- package/bundled/open-prose/skills/prose/examples/24-choice-blocks.prose +86 -0
- package/bundled/open-prose/skills/prose/examples/25-conditionals.prose +114 -0
- package/bundled/open-prose/skills/prose/examples/26-parameterized-blocks.prose +100 -0
- package/bundled/open-prose/skills/prose/examples/27-string-interpolation.prose +105 -0
- package/bundled/open-prose/skills/prose/examples/28-automated-pr-review.prose +37 -0
- package/bundled/open-prose/skills/prose/examples/28-gas-town.prose +1572 -0
- package/bundled/open-prose/skills/prose/examples/29-captains-chair.prose +218 -0
- package/bundled/open-prose/skills/prose/examples/30-captains-chair-simple.prose +42 -0
- package/bundled/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +145 -0
- package/bundled/open-prose/skills/prose/examples/33-pr-review-autofix.prose +168 -0
- package/bundled/open-prose/skills/prose/examples/34-content-pipeline.prose +204 -0
- package/bundled/open-prose/skills/prose/examples/35-feature-factory.prose +296 -0
- package/bundled/open-prose/skills/prose/examples/36-bug-hunter.prose +237 -0
- package/bundled/open-prose/skills/prose/examples/37-the-forge.prose +1474 -0
- package/bundled/open-prose/skills/prose/examples/38-skill-scan.prose +455 -0
- package/bundled/open-prose/skills/prose/examples/39-architect-by-simulation.prose +277 -0
- package/bundled/open-prose/skills/prose/examples/40-rlm-self-refine.prose +32 -0
- package/bundled/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +38 -0
- package/bundled/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +46 -0
- package/bundled/open-prose/skills/prose/examples/43-rlm-pairwise.prose +50 -0
- package/bundled/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +261 -0
- package/bundled/open-prose/skills/prose/examples/45-plugin-release.prose +159 -0
- package/bundled/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +637 -0
- package/bundled/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +148 -0
- package/bundled/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +225 -0
- package/bundled/open-prose/skills/prose/examples/47-language-self-improvement.prose +356 -0
- package/bundled/open-prose/skills/prose/examples/48-habit-miner.prose +445 -0
- package/bundled/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +210 -0
- package/bundled/open-prose/skills/prose/examples/README.md +391 -0
- package/bundled/open-prose/skills/prose/examples/roadmap/README.md +22 -0
- package/bundled/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +20 -0
- package/bundled/open-prose/skills/prose/examples/roadmap/parallel-review.prose +18 -0
- package/bundled/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +17 -0
- package/bundled/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +223 -0
- package/bundled/open-prose/skills/prose/guidance/antipatterns.md +951 -0
- package/bundled/open-prose/skills/prose/guidance/patterns.md +700 -0
- package/bundled/open-prose/skills/prose/guidance/system-prompt.md +180 -0
- package/bundled/open-prose/skills/prose/help.md +144 -0
- package/bundled/open-prose/skills/prose/lib/README.md +108 -0
- package/bundled/open-prose/skills/prose/lib/calibrator.prose +215 -0
- package/bundled/open-prose/skills/prose/lib/cost-analyzer.prose +174 -0
- package/bundled/open-prose/skills/prose/lib/error-forensics.prose +250 -0
- package/bundled/open-prose/skills/prose/lib/inspector.prose +196 -0
- package/bundled/open-prose/skills/prose/lib/profiler.prose +460 -0
- package/bundled/open-prose/skills/prose/lib/program-improver.prose +275 -0
- package/bundled/open-prose/skills/prose/lib/project-memory.prose +118 -0
- package/bundled/open-prose/skills/prose/lib/user-memory.prose +93 -0
- package/bundled/open-prose/skills/prose/lib/vm-improver.prose +243 -0
- package/bundled/open-prose/skills/prose/primitives/session.md +593 -0
- package/bundled/open-prose/skills/prose/prose.md +1237 -0
- package/bundled/open-prose/skills/prose/state/filesystem.md +498 -0
- package/bundled/open-prose/skills/prose/state/in-context.md +384 -0
- package/bundled/open-prose/skills/prose/state/postgres.md +880 -0
- package/bundled/open-prose/skills/prose/state/sqlite.md +574 -0
- package/bundled/peekaboo/SKILL.md +190 -0
- package/bundled/prepare-pr/SKILL.md +277 -0
- package/bundled/prepare-pr/agents/openai.yaml +4 -0
- package/bundled/review-pr/SKILL.md +228 -0
- package/bundled/review-pr/agents/openai.yaml +4 -0
- package/bundled/sag/SKILL.md +87 -0
- package/bundled/skill-creator/SKILL.md +370 -0
- package/bundled/skill-creator/license.txt +202 -0
- package/bundled/skill-creator/scripts/init_skill.py +378 -0
- package/bundled/skill-creator/scripts/package_skill.py +111 -0
- package/bundled/skill-creator/scripts/quick_validate.py +101 -0
- package/bundled/spotify-player/SKILL.md +64 -0
- package/bundled/ssh/SKILL.md +119 -0
- package/bundled/summarize/SKILL.md +87 -0
- package/bundled/video-frames/SKILL.md +46 -0
- package/bundled/video-frames/scripts/frame.sh +81 -0
- package/bundled/voice-call/SKILL.md +45 -0
- package/bundled/wacli/SKILL.md +72 -0
- package/bundled/weather/SKILL.md +54 -0
- package/dist/agent/agent-service.d.ts +88 -0
- package/dist/agent/agent-service.js +1 -0
- package/dist/agent/message-queue.d.ts +24 -0
- package/dist/agent/message-queue.js +1 -0
- package/dist/agent/prompt-builder.d.ts +58 -0
- package/dist/agent/prompt-builder.js +1 -0
- package/dist/agent/session-agent.d.ts +197 -0
- package/dist/agent/session-agent.js +1 -0
- package/dist/agent/session-db.d.ts +26 -0
- package/dist/agent/session-db.js +1 -0
- package/dist/agent/session-error-handler.d.ts +37 -0
- package/dist/agent/session-error-handler.js +1 -0
- package/dist/agent/session-manager.d.ts +19 -0
- package/dist/agent/session-manager.js +1 -0
- package/dist/agent/workspace-files.d.ts +51 -0
- package/dist/agent/workspace-files.js +1 -0
- package/dist/auth/auth-middleware.d.ts +9 -0
- package/dist/auth/auth-middleware.js +1 -0
- package/dist/auth/node-signature-db.d.ts +30 -0
- package/dist/auth/node-signature-db.js +1 -0
- package/dist/auth/token-db.d.ts +38 -0
- package/dist/auth/token-db.js +1 -0
- package/dist/browser/browser-service.d.ts +9 -0
- package/dist/browser/browser-service.js +1 -0
- package/dist/channels/channel.d.ts +2 -0
- package/dist/channels/channel.js +1 -0
- package/dist/channels/responses.d.ts +21 -0
- package/dist/channels/responses.js +1 -0
- package/dist/commands/clear.d.ts +7 -0
- package/dist/commands/clear.js +1 -0
- package/dist/commands/cmd.d.ts +7 -0
- package/dist/commands/cmd.js +1 -0
- package/dist/commands/coder.d.ts +12 -0
- package/dist/commands/coder.js +1 -0
- package/dist/commands/command-registry.d.ts +12 -0
- package/dist/commands/command-registry.js +1 -0
- package/dist/commands/command.d.ts +22 -0
- package/dist/commands/command.js +1 -0
- package/dist/commands/compact.d.ts +7 -0
- package/dist/commands/compact.js +1 -0
- package/dist/commands/customsubagents.d.ts +15 -0
- package/dist/commands/customsubagents.js +1 -0
- package/dist/commands/help.d.ts +9 -0
- package/dist/commands/help.js +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.js +1 -0
- package/dist/commands/model.d.ts +22 -0
- package/dist/commands/model.js +1 -0
- package/dist/commands/models.d.ts +11 -0
- package/dist/commands/models.js +1 -0
- package/dist/commands/new.d.ts +7 -0
- package/dist/commands/new.js +1 -0
- package/dist/commands/plugin.d.ts +7 -0
- package/dist/commands/plugin.js +1 -0
- package/dist/commands/sandbox.d.ts +12 -0
- package/dist/commands/sandbox.js +1 -0
- package/dist/commands/showtool.d.ts +12 -0
- package/dist/commands/showtool.js +1 -0
- package/dist/commands/status.d.ts +24 -0
- package/dist/commands/status.js +1 -0
- package/dist/commands/stop.d.ts +10 -0
- package/dist/commands/stop.js +1 -0
- package/dist/commands/subagents.d.ts +12 -0
- package/dist/commands/subagents.js +1 -0
- package/dist/commands/usage.d.ts +25 -0
- package/dist/commands/usage.js +1 -0
- package/dist/commands/useplugin.d.ts +7 -0
- package/dist/commands/useplugin.js +1 -0
- package/dist/config-watcher.d.ts +14 -0
- package/dist/config-watcher.js +1 -0
- package/dist/config.d.ts +267 -0
- package/dist/config.js +1 -0
- package/dist/cron/cron-service.d.ts +57 -0
- package/dist/cron/cron-service.js +1 -0
- package/dist/cron/heartbeat-token.d.ts +29 -0
- package/dist/cron/heartbeat-token.js +1 -0
- package/dist/cron/schedule.d.ts +3 -0
- package/dist/cron/schedule.js +1 -0
- package/dist/cron/store.d.ts +4 -0
- package/dist/cron/store.js +1 -0
- package/dist/cron/types.d.ts +47 -0
- package/dist/cron/types.js +1 -0
- package/dist/gateway/bridge.d.ts +38 -0
- package/dist/gateway/bridge.js +1 -0
- package/dist/gateway/channel-manager.d.ts +45 -0
- package/dist/gateway/channel-manager.js +1 -0
- package/dist/gateway/channels/qr-image.d.ts +5 -0
- package/dist/gateway/channels/qr-image.js +1 -0
- package/dist/gateway/channels/telegram.d.ts +39 -0
- package/dist/gateway/channels/telegram.js +1 -0
- package/dist/gateway/channels/webchat.d.ts +51 -0
- package/dist/gateway/channels/webchat.js +1 -0
- package/dist/gateway/channels/whatsapp.d.ts +40 -0
- package/dist/gateway/channels/whatsapp.js +1 -0
- package/dist/gateway/node-registry.d.ts +38 -0
- package/dist/gateway/node-registry.js +1 -0
- package/dist/heracli/index.d.ts +3 -0
- package/dist/heracli/index.js +2 -0
- package/dist/heracli/logs.d.ts +13 -0
- package/dist/heracli/logs.js +1 -0
- package/dist/heracli/security/audit.d.ts +17 -0
- package/dist/heracli/security/audit.js +1 -0
- package/dist/heracli/security/checks/channel-policies.d.ts +6 -0
- package/dist/heracli/security/checks/channel-policies.js +1 -0
- package/dist/heracli/security/checks/credentials.d.ts +6 -0
- package/dist/heracli/security/checks/credentials.js +1 -0
- package/dist/heracli/security/checks/fs-permissions.d.ts +6 -0
- package/dist/heracli/security/checks/fs-permissions.js +1 -0
- package/dist/heracli/security/checks/network.d.ts +4 -0
- package/dist/heracli/security/checks/network.js +1 -0
- package/dist/heracli/security/report.d.ts +4 -0
- package/dist/heracli/security/report.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/installer/hera.d.ts +3 -0
- package/dist/installer/hera.js +2 -0
- package/dist/media/message-processor.d.ts +23 -0
- package/dist/media/message-processor.js +1 -0
- package/dist/memory/memory-manager.d.ts +21 -0
- package/dist/memory/memory-manager.js +1 -0
- package/dist/memory/memory-provider.d.ts +22 -0
- package/dist/memory/memory-provider.js +1 -0
- package/dist/memory/memory-search.d.ts +102 -0
- package/dist/memory/memory-search.js +1 -0
- package/dist/memory/recall-strategies.d.ts +2 -0
- package/dist/memory/recall-strategies.js +1 -0
- package/dist/nostromo/auth.d.ts +29 -0
- package/dist/nostromo/auth.js +1 -0
- package/dist/nostromo/nostromo.d.ts +23 -0
- package/dist/nostromo/nostromo.js +1 -0
- package/dist/nostromo/ui-html-layout.d.ts +3 -0
- package/dist/nostromo/ui-html-layout.js +1 -0
- package/dist/nostromo/ui-html-modals.d.ts +3 -0
- package/dist/nostromo/ui-html-modals.js +1 -0
- package/dist/nostromo/ui-js-agent.d.ts +3 -0
- package/dist/nostromo/ui-js-agent.js +1 -0
- package/dist/nostromo/ui-js-channels.d.ts +3 -0
- package/dist/nostromo/ui-js-channels.js +1 -0
- package/dist/nostromo/ui-js-competences.d.ts +3 -0
- package/dist/nostromo/ui-js-competences.js +1 -0
- package/dist/nostromo/ui-js-config.d.ts +3 -0
- package/dist/nostromo/ui-js-config.js +1 -0
- package/dist/nostromo/ui-js-core.d.ts +3 -0
- package/dist/nostromo/ui-js-core.js +1 -0
- package/dist/nostromo/ui-js-ops.d.ts +3 -0
- package/dist/nostromo/ui-js-ops.js +1 -0
- package/dist/nostromo/ui-js-prompts.d.ts +3 -0
- package/dist/nostromo/ui-js-prompts.js +1 -0
- package/dist/nostromo/ui-styles.d.ts +3 -0
- package/dist/nostromo/ui-styles.js +1 -0
- package/dist/nostromo/ui.d.ts +2 -0
- package/dist/nostromo/ui.js +1 -0
- package/dist/server.d.ts +80 -0
- package/dist/server.js +1 -0
- package/dist/stt/local-whisper.d.ts +9 -0
- package/dist/stt/local-whisper.js +1 -0
- package/dist/stt/openai-whisper.d.ts +14 -0
- package/dist/stt/openai-whisper.js +1 -0
- package/dist/stt/stt-loader.d.ts +4 -0
- package/dist/stt/stt-loader.js +1 -0
- package/dist/stt/stt-provider.d.ts +4 -0
- package/dist/stt/stt-provider.js +1 -0
- package/dist/tools/browser-tools.d.ts +9 -0
- package/dist/tools/browser-tools.js +1 -0
- package/dist/tools/cron-tools.d.ts +4 -0
- package/dist/tools/cron-tools.js +1 -0
- package/dist/tools/memory-tools.d.ts +3 -0
- package/dist/tools/memory-tools.js +1 -0
- package/dist/tools/message-tools.d.ts +5 -0
- package/dist/tools/message-tools.js +1 -0
- package/dist/tools/node-tools.d.ts +3 -0
- package/dist/tools/node-tools.js +1 -0
- package/dist/tools/server-tools.d.ts +2 -0
- package/dist/tools/server-tools.js +1 -0
- package/dist/tools/tts-tools.d.ts +3 -0
- package/dist/tools/tts-tools.js +1 -0
- package/dist/tts/tts-service.d.ts +19 -0
- package/dist/tts/tts-service.js +1 -0
- package/dist/utils/chunk.d.ts +3 -0
- package/dist/utils/chunk.js +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.js +1 -0
- package/dist/utils/markdown/fences.d.ts +11 -0
- package/dist/utils/markdown/fences.js +1 -0
- package/dist/utils/markdown/ir.d.ts +33 -0
- package/dist/utils/markdown/ir.js +1 -0
- package/dist/utils/markdown/render.d.ts +19 -0
- package/dist/utils/markdown/render.js +1 -0
- package/dist/utils/markdown/tables.d.ts +3 -0
- package/dist/utils/markdown/tables.js +1 -0
- package/dist/utils/media-response.d.ts +29 -0
- package/dist/utils/media-response.js +1 -0
- package/dist/utils/package-paths.d.ts +5 -0
- package/dist/utils/package-paths.js +1 -0
- package/dist/utils/telegram-format.d.ts +13 -0
- package/dist/utils/telegram-format.js +1 -0
- package/installationPkg/.env.example +26 -0
- package/installationPkg/AGENTS.md +143 -0
- package/installationPkg/BOOTSTRAP.md +45 -0
- package/installationPkg/CBINT.json +16 -0
- package/installationPkg/HEARTBEAT.md +5 -0
- package/installationPkg/IDENTITY.md +7 -0
- package/installationPkg/SOUL.md +36 -0
- package/installationPkg/SYSTEM_PROMPT.md +55 -0
- package/installationPkg/SYSTEM_PROMPT_SUBAGENT.md +40 -0
- package/installationPkg/TOOLS.md +36 -0
- package/installationPkg/USER.md +11 -0
- package/installationPkg/config.example.yaml +291 -0
- package/package.json +95 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: peekaboo
|
|
3
|
+
description: Capture and automate macOS UI with the Peekaboo CLI.
|
|
4
|
+
homepage: https://peekaboo.boo
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"openclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "👀",
|
|
10
|
+
"os": ["darwin"],
|
|
11
|
+
"requires": { "bins": ["peekaboo"] },
|
|
12
|
+
"install":
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
"id": "brew",
|
|
16
|
+
"kind": "brew",
|
|
17
|
+
"formula": "steipete/tap/peekaboo",
|
|
18
|
+
"bins": ["peekaboo"],
|
|
19
|
+
"label": "Install Peekaboo (brew)",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Peekaboo
|
|
27
|
+
|
|
28
|
+
Peekaboo is a full macOS UI automation CLI: capture/inspect screens, target UI
|
|
29
|
+
elements, drive input, and manage apps/windows/menus. Commands share a snapshot
|
|
30
|
+
cache and support `--json`/`-j` for scripting. Run `peekaboo` or
|
|
31
|
+
`peekaboo <cmd> --help` for flags; `peekaboo --version` prints build metadata.
|
|
32
|
+
Tip: run via `polter peekaboo` to ensure fresh builds.
|
|
33
|
+
|
|
34
|
+
## Features (all CLI capabilities, excluding agent/MCP)
|
|
35
|
+
|
|
36
|
+
Core
|
|
37
|
+
|
|
38
|
+
- `bridge`: inspect Peekaboo Bridge host connectivity
|
|
39
|
+
- `capture`: live capture or video ingest + frame extraction
|
|
40
|
+
- `clean`: prune snapshot cache and temp files
|
|
41
|
+
- `config`: init/show/edit/validate, providers, models, credentials
|
|
42
|
+
- `image`: capture screenshots (screen/window/menu bar regions)
|
|
43
|
+
- `learn`: print the full agent guide + tool catalog
|
|
44
|
+
- `list`: apps, windows, screens, menubar, permissions
|
|
45
|
+
- `permissions`: check Screen Recording/Accessibility status
|
|
46
|
+
- `run`: execute `.peekaboo.json` scripts
|
|
47
|
+
- `sleep`: pause execution for a duration
|
|
48
|
+
- `tools`: list available tools with filtering/display options
|
|
49
|
+
|
|
50
|
+
Interaction
|
|
51
|
+
|
|
52
|
+
- `click`: target by ID/query/coords with smart waits
|
|
53
|
+
- `drag`: drag & drop across elements/coords/Dock
|
|
54
|
+
- `hotkey`: modifier combos like `cmd,shift,t`
|
|
55
|
+
- `move`: cursor positioning with optional smoothing
|
|
56
|
+
- `paste`: set clipboard -> paste -> restore
|
|
57
|
+
- `press`: special-key sequences with repeats
|
|
58
|
+
- `scroll`: directional scrolling (targeted + smooth)
|
|
59
|
+
- `swipe`: gesture-style drags between targets
|
|
60
|
+
- `type`: text + control keys (`--clear`, delays)
|
|
61
|
+
|
|
62
|
+
System
|
|
63
|
+
|
|
64
|
+
- `app`: launch/quit/relaunch/hide/unhide/switch/list apps
|
|
65
|
+
- `clipboard`: read/write clipboard (text/images/files)
|
|
66
|
+
- `dialog`: click/input/file/dismiss/list system dialogs
|
|
67
|
+
- `dock`: launch/right-click/hide/show/list Dock items
|
|
68
|
+
- `menu`: click/list application menus + menu extras
|
|
69
|
+
- `menubar`: list/click status bar items
|
|
70
|
+
- `open`: enhanced `open` with app targeting + JSON payloads
|
|
71
|
+
- `space`: list/switch/move-window (Spaces)
|
|
72
|
+
- `visualizer`: exercise Peekaboo visual feedback animations
|
|
73
|
+
- `window`: close/minimize/maximize/move/resize/focus/list
|
|
74
|
+
|
|
75
|
+
Vision
|
|
76
|
+
|
|
77
|
+
- `see`: annotated UI maps, snapshot IDs, optional analysis
|
|
78
|
+
|
|
79
|
+
Global runtime flags
|
|
80
|
+
|
|
81
|
+
- `--json`/`-j`, `--verbose`/`-v`, `--log-level <level>`
|
|
82
|
+
- `--no-remote`, `--bridge-socket <path>`
|
|
83
|
+
|
|
84
|
+
## Quickstart (happy path)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
peekaboo permissions
|
|
88
|
+
peekaboo list apps --json
|
|
89
|
+
peekaboo see --annotate --path /tmp/peekaboo-see.png
|
|
90
|
+
peekaboo click --on B1
|
|
91
|
+
peekaboo type "Hello" --return
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Common targeting parameters (most interaction commands)
|
|
95
|
+
|
|
96
|
+
- App/window: `--app`, `--pid`, `--window-title`, `--window-id`, `--window-index`
|
|
97
|
+
- Snapshot targeting: `--snapshot` (ID from `see`; defaults to latest)
|
|
98
|
+
- Element/coords: `--on`/`--id` (element ID), `--coords x,y`
|
|
99
|
+
- Focus control: `--no-auto-focus`, `--space-switch`, `--bring-to-current-space`,
|
|
100
|
+
`--focus-timeout-seconds`, `--focus-retry-count`
|
|
101
|
+
|
|
102
|
+
## Common capture parameters
|
|
103
|
+
|
|
104
|
+
- Output: `--path`, `--format png|jpg`, `--retina`
|
|
105
|
+
- Targeting: `--mode screen|window|frontmost`, `--screen-index`,
|
|
106
|
+
`--window-title`, `--window-id`
|
|
107
|
+
- Analysis: `--analyze "prompt"`, `--annotate`
|
|
108
|
+
- Capture engine: `--capture-engine auto|classic|cg|modern|sckit`
|
|
109
|
+
|
|
110
|
+
## Common motion/typing parameters
|
|
111
|
+
|
|
112
|
+
- Timing: `--duration` (drag/swipe), `--steps`, `--delay` (type/scroll/press)
|
|
113
|
+
- Human-ish movement: `--profile human|linear`, `--wpm` (typing)
|
|
114
|
+
- Scroll: `--direction up|down|left|right`, `--amount <ticks>`, `--smooth`
|
|
115
|
+
|
|
116
|
+
## Examples
|
|
117
|
+
|
|
118
|
+
### See -> click -> type (most reliable flow)
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
peekaboo see --app Safari --window-title "Login" --annotate --path /tmp/see.png
|
|
122
|
+
peekaboo click --on B3 --app Safari
|
|
123
|
+
peekaboo type "user@example.com" --app Safari
|
|
124
|
+
peekaboo press tab --count 1 --app Safari
|
|
125
|
+
peekaboo type "supersecret" --app Safari --return
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Target by window id
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
peekaboo list windows --app "Visual Studio Code" --json
|
|
132
|
+
peekaboo click --window-id 12345 --coords 120,160
|
|
133
|
+
peekaboo type "Hello from Peekaboo" --window-id 12345
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Capture screenshots + analyze
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
peekaboo image --mode screen --screen-index 0 --retina --path /tmp/screen.png
|
|
140
|
+
peekaboo image --app Safari --window-title "Dashboard" --analyze "Summarize KPIs"
|
|
141
|
+
peekaboo see --mode screen --screen-index 0 --analyze "Summarize the dashboard"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Live capture (motion-aware)
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
peekaboo capture live --mode region --region 100,100,800,600 --duration 30 \
|
|
148
|
+
--active-fps 8 --idle-fps 2 --highlight-changes --path /tmp/capture
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### App + window management
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
peekaboo app launch "Safari" --open https://example.com
|
|
155
|
+
peekaboo window focus --app Safari --window-title "Example"
|
|
156
|
+
peekaboo window set-bounds --app Safari --x 50 --y 50 --width 1200 --height 800
|
|
157
|
+
peekaboo app quit --app Safari
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Menus, menubar, dock
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
peekaboo menu click --app Safari --item "New Window"
|
|
164
|
+
peekaboo menu click --app TextEdit --path "Format > Font > Show Fonts"
|
|
165
|
+
peekaboo menu click-extra --title "WiFi"
|
|
166
|
+
peekaboo dock launch Safari
|
|
167
|
+
peekaboo menubar list --json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Mouse + gesture input
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
peekaboo move 500,300 --smooth
|
|
174
|
+
peekaboo drag --from B1 --to T2
|
|
175
|
+
peekaboo swipe --from-coords 100,500 --to-coords 100,200 --duration 800
|
|
176
|
+
peekaboo scroll --direction down --amount 6 --smooth
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Keyboard input
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
peekaboo hotkey --keys "cmd,shift,t"
|
|
183
|
+
peekaboo press escape
|
|
184
|
+
peekaboo type "Line 1\nLine 2" --delay 10
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Notes
|
|
188
|
+
|
|
189
|
+
- Requires Screen Recording + Accessibility permissions.
|
|
190
|
+
- Use `peekaboo see --annotate` to identify targets before clicking.
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prepare-pr
|
|
3
|
+
description: Prepare a GitHub PR for merge by rebasing onto main, fixing review findings, running gates, committing fixes, and pushing to the PR head branch. Use after /reviewpr. Never merge or push to main.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Prepare PR
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Prepare a PR branch for merge with review fixes, green gates, and an updated head branch.
|
|
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
|
+
- Never push to `main` or `origin/main`. Push only to the PR head branch.
|
|
21
|
+
- Never run `git push` without specifying remote and branch explicitly. Do not run bare `git push`.
|
|
22
|
+
- Do not run gateway stop commands. Do not kill processes. Do not touch port 18792.
|
|
23
|
+
- Do not run `git clean -fdx`.
|
|
24
|
+
- Do not run `git add -A` or `git add .`. Stage only specific files changed.
|
|
25
|
+
|
|
26
|
+
## Execution Rule
|
|
27
|
+
|
|
28
|
+
- Execute the workflow. Do not stop after printing the TODO checklist.
|
|
29
|
+
- If delegating, require the delegate to run commands and capture outputs.
|
|
30
|
+
|
|
31
|
+
## Known Footguns
|
|
32
|
+
|
|
33
|
+
- If you see "fatal: not a git repository", you are in the wrong directory. Use `~/dev/openclaw` if available; otherwise ask user.
|
|
34
|
+
- Do not run `git clean -fdx`.
|
|
35
|
+
- Do not run `git add -A` or `git add .`.
|
|
36
|
+
|
|
37
|
+
## Completion Criteria
|
|
38
|
+
|
|
39
|
+
- Rebase PR commits onto `origin/main`.
|
|
40
|
+
- Fix all BLOCKER and IMPORTANT items from `.local/review.md`.
|
|
41
|
+
- Run required gates and pass (docs-only PRs may skip `pnpm test` when high-confidence docs-only criteria are met and documented).
|
|
42
|
+
- Commit prep changes.
|
|
43
|
+
- Push the updated HEAD back to the PR head branch.
|
|
44
|
+
- Write `.local/prep.md` with a prep summary.
|
|
45
|
+
- Output exactly: `PR is ready for /mergepr`.
|
|
46
|
+
|
|
47
|
+
## First: Create a TODO Checklist
|
|
48
|
+
|
|
49
|
+
Create a checklist of all prep steps, print it, then continue and execute the commands.
|
|
50
|
+
|
|
51
|
+
## Setup: Use a Worktree
|
|
52
|
+
|
|
53
|
+
Use an isolated worktree for all prep work.
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
cd ~/openclaw
|
|
57
|
+
# Sanity: confirm you are in the repo
|
|
58
|
+
git rev-parse --show-toplevel
|
|
59
|
+
|
|
60
|
+
WORKTREE_DIR=".worktrees/pr-<PR>"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Run all commands inside the worktree directory.
|
|
64
|
+
|
|
65
|
+
## Load Review Findings (Mandatory)
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
if [ -f .local/review.md ]; then
|
|
69
|
+
echo "Found review findings from /reviewpr"
|
|
70
|
+
else
|
|
71
|
+
echo "Missing .local/review.md. Run /reviewpr first and save findings."
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Read it
|
|
76
|
+
sed -n '1,200p' .local/review.md
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Steps
|
|
80
|
+
|
|
81
|
+
1. Identify PR meta (author, head branch, head repo URL)
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
gh pr view <PR> --json number,title,author,headRefName,baseRefName,headRepository,body --jq '{number,title,author:.author.login,head:.headRefName,base:.baseRefName,headRepo:.headRepository.nameWithOwner,body}'
|
|
85
|
+
contrib=$(gh pr view <PR> --json author --jq .author.login)
|
|
86
|
+
head=$(gh pr view <PR> --json headRefName --jq .headRefName)
|
|
87
|
+
head_repo_url=$(gh pr view <PR> --json headRepository --jq .headRepository.url)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
2. Fetch the PR branch tip into a local ref
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
git fetch origin pull/<PR>/head:pr-<PR>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
3. Rebase PR commits onto latest main
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
# Move worktree to the PR tip first
|
|
100
|
+
git reset --hard pr-<PR>
|
|
101
|
+
|
|
102
|
+
# Rebase onto current main
|
|
103
|
+
git fetch origin main
|
|
104
|
+
git rebase origin/main
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If conflicts happen:
|
|
108
|
+
|
|
109
|
+
- Resolve each conflicted file.
|
|
110
|
+
- Run `git add <resolved_file>` for each file.
|
|
111
|
+
- Run `git rebase --continue`.
|
|
112
|
+
|
|
113
|
+
If the rebase gets confusing or you resolve conflicts 3 or more times, stop and report.
|
|
114
|
+
|
|
115
|
+
4. Fix issues from `.local/review.md`
|
|
116
|
+
|
|
117
|
+
- Fix all BLOCKER and IMPORTANT items.
|
|
118
|
+
- NITs are optional.
|
|
119
|
+
- Keep scope tight.
|
|
120
|
+
|
|
121
|
+
Keep a running log in `.local/prep.md`:
|
|
122
|
+
|
|
123
|
+
- List which review items you fixed.
|
|
124
|
+
- List which files you touched.
|
|
125
|
+
- Note behavior changes.
|
|
126
|
+
|
|
127
|
+
5. Update `CHANGELOG.md` if flagged in review
|
|
128
|
+
|
|
129
|
+
Check `.local/review.md` section H for guidance.
|
|
130
|
+
If flagged and user-facing:
|
|
131
|
+
|
|
132
|
+
- Check if `CHANGELOG.md` exists.
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
ls CHANGELOG.md 2>/dev/null
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
- Follow existing format.
|
|
139
|
+
- Add a concise entry with PR number and contributor.
|
|
140
|
+
|
|
141
|
+
6. Update docs if flagged in review
|
|
142
|
+
|
|
143
|
+
Check `.local/review.md` section G for guidance.
|
|
144
|
+
If flagged, update only docs related to the PR changes.
|
|
145
|
+
|
|
146
|
+
7. Commit prep fixes
|
|
147
|
+
|
|
148
|
+
Stage only specific files:
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
git add <file1> <file2> ...
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Preferred commit tool:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
committer "fix: <summary> (#<PR>) (thanks @$contrib)" <changed files>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
If `committer` is not found:
|
|
161
|
+
|
|
162
|
+
```sh
|
|
163
|
+
git commit -m "fix: <summary> (#<PR>) (thanks @$contrib)"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
8. Decide verification mode and run required gates before pushing
|
|
167
|
+
|
|
168
|
+
If you are highly confident the change is docs-only, you may skip `pnpm test`.
|
|
169
|
+
|
|
170
|
+
High-confidence docs-only criteria (all must be true):
|
|
171
|
+
|
|
172
|
+
- Every changed file is documentation-only (`docs/**`, `README*.md`, `CHANGELOG.md`, `*.md`, `*.mdx`, `mintlify.json`, `docs.json`).
|
|
173
|
+
- No code, runtime, test, dependency, or build config files changed (`src/**`, `extensions/**`, `apps/**`, `package.json`, lockfiles, TS/JS config, test files, scripts).
|
|
174
|
+
- `.local/review.md` does not call for non-doc behavior fixes.
|
|
175
|
+
|
|
176
|
+
Suggested check:
|
|
177
|
+
|
|
178
|
+
```sh
|
|
179
|
+
changed_files=$(git diff --name-only origin/main...HEAD)
|
|
180
|
+
non_docs=$(printf "%s\n" "$changed_files" | grep -Ev '^(docs/|README.*\.md$|CHANGELOG\.md$|.*\.md$|.*\.mdx$|mintlify\.json$|docs\.json$)' || true)
|
|
181
|
+
|
|
182
|
+
docs_only=false
|
|
183
|
+
if [ -n "$changed_files" ] && [ -z "$non_docs" ]; then
|
|
184
|
+
docs_only=true
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
echo "docs_only=$docs_only"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Run required gates:
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
pnpm install
|
|
194
|
+
pnpm build
|
|
195
|
+
pnpm ui:build
|
|
196
|
+
pnpm check
|
|
197
|
+
|
|
198
|
+
if [ "$docs_only" = "true" ]; then
|
|
199
|
+
echo "Docs-only change detected with high confidence; skipping pnpm test." | tee -a .local/prep.md
|
|
200
|
+
else
|
|
201
|
+
pnpm test
|
|
202
|
+
fi
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Require all required gates to pass. If something fails, fix, commit, and rerun. Allow at most 3 fix and rerun cycles. If gates still fail after 3 attempts, stop and report the failures. Do not loop indefinitely.
|
|
206
|
+
|
|
207
|
+
9. Push updates back to the PR head branch
|
|
208
|
+
|
|
209
|
+
```sh
|
|
210
|
+
# Ensure remote for PR head exists
|
|
211
|
+
git remote add prhead "$head_repo_url.git" 2>/dev/null || git remote set-url prhead "$head_repo_url.git"
|
|
212
|
+
|
|
213
|
+
# Use force with lease after rebase
|
|
214
|
+
# Double check: $head must NOT be "main" or "master"
|
|
215
|
+
echo "Pushing to branch: $head"
|
|
216
|
+
if [ "$head" = "main" ] || [ "$head" = "master" ]; then
|
|
217
|
+
echo "ERROR: head branch is main/master. This is wrong. Stopping."
|
|
218
|
+
exit 1
|
|
219
|
+
fi
|
|
220
|
+
git push --force-with-lease prhead HEAD:$head
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
10. Verify PR is not behind main (Mandatory)
|
|
224
|
+
|
|
225
|
+
```sh
|
|
226
|
+
git fetch origin main
|
|
227
|
+
git fetch origin pull/<PR>/head:pr-<PR>-verify --force
|
|
228
|
+
git merge-base --is-ancestor origin/main pr-<PR>-verify && echo "PR is up to date with main" || echo "ERROR: PR is still behind main, rebase again"
|
|
229
|
+
git branch -D pr-<PR>-verify 2>/dev/null || true
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
If still behind main, repeat steps 2 through 9.
|
|
233
|
+
|
|
234
|
+
11. Write prep summary artifacts (Mandatory)
|
|
235
|
+
|
|
236
|
+
Update `.local/prep.md` with:
|
|
237
|
+
|
|
238
|
+
- Current HEAD sha from `git rev-parse HEAD`.
|
|
239
|
+
- Short bullet list of changes.
|
|
240
|
+
- Gate results.
|
|
241
|
+
- Push confirmation.
|
|
242
|
+
- Rebase verification result.
|
|
243
|
+
|
|
244
|
+
Create or overwrite `.local/prep.md` and verify it exists and is non-empty:
|
|
245
|
+
|
|
246
|
+
```sh
|
|
247
|
+
git rev-parse HEAD
|
|
248
|
+
ls -la .local/prep.md
|
|
249
|
+
wc -l .local/prep.md
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
12. Output
|
|
253
|
+
|
|
254
|
+
Include a diff stat summary:
|
|
255
|
+
|
|
256
|
+
```sh
|
|
257
|
+
git diff --stat origin/main..HEAD
|
|
258
|
+
git diff --shortstat origin/main..HEAD
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Report totals: X files changed, Y insertions(+), Z deletions(-).
|
|
262
|
+
|
|
263
|
+
If gates passed and push succeeded, print exactly:
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
PR is ready for /mergepr
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Otherwise, list remaining failures and stop.
|
|
270
|
+
|
|
271
|
+
## Guardrails
|
|
272
|
+
|
|
273
|
+
- Worktree only.
|
|
274
|
+
- Do not delete the worktree on success. `/mergepr` may reuse it.
|
|
275
|
+
- Do not run `gh pr merge`.
|
|
276
|
+
- Never push to main. Only push to the PR head branch.
|
|
277
|
+
- Run and pass all required gates before pushing. `pnpm test` may be skipped only for high-confidence docs-only changes, and the skip must be explicitly recorded in `.local/prep.md`.
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-pr
|
|
3
|
+
description: Review-only GitHub pull request analysis with the gh CLI. Use when asked to review a PR, provide structured feedback, or assess readiness to land. Do not merge, push, or make code changes you intend to keep.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Review PR
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Perform a thorough review-only PR assessment and return a structured recommendation on readiness for /preparepr.
|
|
11
|
+
|
|
12
|
+
## Inputs
|
|
13
|
+
|
|
14
|
+
- Ask for PR number or URL.
|
|
15
|
+
- If missing, always ask. Never auto-detect from conversation.
|
|
16
|
+
- If ambiguous, ask.
|
|
17
|
+
|
|
18
|
+
## Safety
|
|
19
|
+
|
|
20
|
+
- Never push to `main` or `origin/main`, not during review, not ever.
|
|
21
|
+
- Do not run `git push` at all during review. Treat review as read only.
|
|
22
|
+
- Do not stop or kill the gateway. Do not run gateway stop commands. Do not kill processes on 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, not a plan.
|
|
28
|
+
|
|
29
|
+
## Known Failure Modes
|
|
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
|
+
- Do not stop after printing the checklist. That is not completion.
|
|
33
|
+
|
|
34
|
+
## Writing Style for Output
|
|
35
|
+
|
|
36
|
+
- Write casual and direct.
|
|
37
|
+
- Avoid em dashes and en dashes. Use commas or separate sentences.
|
|
38
|
+
|
|
39
|
+
## Completion Criteria
|
|
40
|
+
|
|
41
|
+
- Run the commands in the worktree and inspect the PR directly.
|
|
42
|
+
- Produce the structured review sections A through J.
|
|
43
|
+
- Save the full review to `.local/review.md` inside the worktree.
|
|
44
|
+
|
|
45
|
+
## First: Create a TODO Checklist
|
|
46
|
+
|
|
47
|
+
Create a checklist of all review steps, print it, then continue and execute the commands.
|
|
48
|
+
|
|
49
|
+
## Setup: Use a Worktree
|
|
50
|
+
|
|
51
|
+
Use an isolated worktree for all review work.
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
cd ~/dev/openclaw
|
|
55
|
+
# Sanity: confirm you are in the repo
|
|
56
|
+
git rev-parse --show-toplevel
|
|
57
|
+
|
|
58
|
+
WORKTREE_DIR=".worktrees/pr-<PR>"
|
|
59
|
+
git fetch origin main
|
|
60
|
+
|
|
61
|
+
# Reuse existing worktree if it exists, otherwise create new
|
|
62
|
+
if [ -d "$WORKTREE_DIR" ]; then
|
|
63
|
+
cd "$WORKTREE_DIR"
|
|
64
|
+
git checkout temp/pr-<PR> 2>/dev/null || git checkout -b temp/pr-<PR>
|
|
65
|
+
git fetch origin main
|
|
66
|
+
git reset --hard origin/main
|
|
67
|
+
else
|
|
68
|
+
git worktree add "$WORKTREE_DIR" -b temp/pr-<PR> origin/main
|
|
69
|
+
cd "$WORKTREE_DIR"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Create local scratch space that persists across /reviewpr to /preparepr to /mergepr
|
|
73
|
+
mkdir -p .local
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Run all commands inside the worktree directory.
|
|
77
|
+
Start on `origin/main` so you can check for existing implementations before looking at PR code.
|
|
78
|
+
|
|
79
|
+
## Steps
|
|
80
|
+
|
|
81
|
+
1. Identify PR meta and context
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
gh pr view <PR> --json number,title,state,isDraft,author,baseRefName,headRefName,headRepository,url,body,labels,assignees,reviewRequests,files,additions,deletions --jq '{number,title,url,state,isDraft,author:.author.login,base:.baseRefName,head:.headRefName,headRepo:.headRepository.nameWithOwner,additions,deletions,files:.files|length,body}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
2. Check if this already exists in main before looking at the PR branch
|
|
88
|
+
|
|
89
|
+
- Identify the core feature or fix from the PR title and description.
|
|
90
|
+
- Search for existing implementations using keywords from the PR title, changed file paths, and function or component names from the diff.
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
# Use keywords from the PR title and changed files
|
|
94
|
+
rg -n "<keyword_from_pr_title>" -S src packages apps ui || true
|
|
95
|
+
rg -n "<function_or_component_name>" -S src packages apps ui || true
|
|
96
|
+
|
|
97
|
+
git log --oneline --all --grep="<keyword_from_pr_title>" | head -20
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
If it already exists, call it out as a BLOCKER or at least IMPORTANT.
|
|
101
|
+
|
|
102
|
+
3. Claim the PR
|
|
103
|
+
|
|
104
|
+
Assign yourself so others know someone is reviewing. Skip if the PR looks like spam or is a draft you plan to recommend closing.
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
gh_user=$(gh api user --jq .login)
|
|
108
|
+
gh pr edit <PR> --add-assignee "$gh_user"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
4. Read the PR description carefully
|
|
112
|
+
|
|
113
|
+
Use the body from step 1. Summarize goal, scope, and missing context.
|
|
114
|
+
|
|
115
|
+
5. Read the diff thoroughly
|
|
116
|
+
|
|
117
|
+
Minimum:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
gh pr diff <PR>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
If you need full code context locally, fetch the PR head to a local ref and diff it. Do not create a merge commit.
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
git fetch origin pull/<PR>/head:pr-<PR>
|
|
127
|
+
# Show changes without modifying the working tree
|
|
128
|
+
|
|
129
|
+
git diff --stat origin/main..pr-<PR>
|
|
130
|
+
git diff origin/main..pr-<PR>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If you want to browse the PR version of files directly, temporarily check out `pr-<PR>` in the worktree. Do not commit or push. Return to `temp/pr-<PR>` and reset to `origin/main` afterward.
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
# Use only if needed
|
|
137
|
+
# git checkout pr-<PR>
|
|
138
|
+
# ...inspect files...
|
|
139
|
+
|
|
140
|
+
git checkout temp/pr-<PR>
|
|
141
|
+
git reset --hard origin/main
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
6. Validate the change is needed and valuable
|
|
145
|
+
|
|
146
|
+
Be honest. Call out low value AI slop.
|
|
147
|
+
|
|
148
|
+
7. Evaluate implementation quality
|
|
149
|
+
|
|
150
|
+
Review correctness, design, performance, and ergonomics.
|
|
151
|
+
|
|
152
|
+
8. Perform a security review
|
|
153
|
+
|
|
154
|
+
Assume OpenClaw subagents run with full disk access, including git, gh, and shell. Check auth, input validation, secrets, dependencies, tool safety, and privacy.
|
|
155
|
+
|
|
156
|
+
9. Review tests and verification
|
|
157
|
+
|
|
158
|
+
Identify what exists, what is missing, and what would be a minimal regression test.
|
|
159
|
+
|
|
160
|
+
10. Check docs
|
|
161
|
+
|
|
162
|
+
Check if the PR touches code with related documentation such as README, docs, inline API docs, or config examples.
|
|
163
|
+
|
|
164
|
+
- If docs exist for the changed area and the PR does not update them, flag as IMPORTANT.
|
|
165
|
+
- If the PR adds a new feature or config option with no docs, flag as IMPORTANT.
|
|
166
|
+
- If the change is purely internal with no user-facing impact, skip this.
|
|
167
|
+
|
|
168
|
+
11. Check changelog
|
|
169
|
+
|
|
170
|
+
Check if `CHANGELOG.md` exists and whether the PR warrants an entry.
|
|
171
|
+
|
|
172
|
+
- If the project has a changelog and the PR is user-facing, flag missing entry as IMPORTANT.
|
|
173
|
+
- Leave the change for /preparepr, only flag it here.
|
|
174
|
+
|
|
175
|
+
12. Answer the key question
|
|
176
|
+
|
|
177
|
+
Decide if /preparepr can fix issues or the contributor must update the PR.
|
|
178
|
+
|
|
179
|
+
13. Save findings to the worktree
|
|
180
|
+
|
|
181
|
+
Write the full structured review sections A through J to `.local/review.md`.
|
|
182
|
+
Create or overwrite the file and verify it exists and is non-empty.
|
|
183
|
+
|
|
184
|
+
```sh
|
|
185
|
+
ls -la .local/review.md
|
|
186
|
+
wc -l .local/review.md
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
14. Output the structured review
|
|
190
|
+
|
|
191
|
+
Produce a review that matches what you saved to `.local/review.md`.
|
|
192
|
+
|
|
193
|
+
A) TL;DR recommendation
|
|
194
|
+
|
|
195
|
+
- One of: READY FOR /preparepr | NEEDS WORK | NEEDS DISCUSSION | NOT USEFUL (CLOSE)
|
|
196
|
+
- 1 to 3 sentences.
|
|
197
|
+
|
|
198
|
+
B) What changed
|
|
199
|
+
|
|
200
|
+
C) What is good
|
|
201
|
+
|
|
202
|
+
D) Security findings
|
|
203
|
+
|
|
204
|
+
E) Concerns or questions (actionable)
|
|
205
|
+
|
|
206
|
+
- Numbered list.
|
|
207
|
+
- Mark each item as BLOCKER, IMPORTANT, or NIT.
|
|
208
|
+
- For each, point to file or area and propose a concrete fix.
|
|
209
|
+
|
|
210
|
+
F) Tests
|
|
211
|
+
|
|
212
|
+
G) Docs status
|
|
213
|
+
|
|
214
|
+
- State if related docs are up to date, missing, or not applicable.
|
|
215
|
+
|
|
216
|
+
H) Changelog
|
|
217
|
+
|
|
218
|
+
- State if `CHANGELOG.md` needs an entry and which category.
|
|
219
|
+
|
|
220
|
+
I) Follow ups (optional)
|
|
221
|
+
|
|
222
|
+
J) Suggested PR comment (optional)
|
|
223
|
+
|
|
224
|
+
## Guardrails
|
|
225
|
+
|
|
226
|
+
- Worktree only.
|
|
227
|
+
- Do not delete the worktree after review.
|
|
228
|
+
- Review only, do not merge, do not push.
|