improve(imessage): manage imsg setup and plugin skill ownership#101407
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 7, 2026, 5:05 PM ET / 21:05 UTC. Summary PR surface: Source +275, Tests +501, Docs +13. Total +789 across 18 files. Reproducibility: not applicable. this is a PR adding setup and packaging behavior, not a standalone bug report. The PR body provides after-change upgrade/setup proof rather than a failing current-main repro. Review metrics: 3 noteworthy metrics.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Merge only after maintainers confirm plugin-scoped Do we have a high-confidence way to reproduce the issue? Not applicable; this is a PR adding setup and packaging behavior, not a standalone bug report. The PR body provides after-change upgrade/setup proof rather than a failing current-main repro. Is this the best way to solve the issue? Unclear until maintainer intent is confirmed: the code shape is an acceptable owner-boundary fix if AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against d563101a82fd. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +275, Tests +501, Docs +13. Total +789 across 18 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (10 earlier review cycles; latest 8 shown)
|
bed601a to
6139ef4
Compare
|
@clawsweeper re-review Real behavior proof has been added to the PR body for the current head ( |
|
🦞🧹 I asked ClawSweeper to review this item again. |
6139ef4 to
650ad0d
Compare
|
@clawsweeper re-review Remaining proof has been added on current head
|
|
🦞🧹 I asked ClawSweeper to review this item again. |
650ad0d to
79790dd
Compare
79790dd to
20b43dc
Compare
|
Merged via squash.
|
Co-authored-by: Omar Shahine <[email protected]>
Co-authored-by: Omar Shahine <[email protected]>
Related: openclaw/imsg#157
What Problem This Solves
Resolves a problem where OpenClaw's bundled iMessage guidance and setup flow lagged the current
imsgCLI: the OpenClaw copy of theimsgskill still lived outside the iMessage plugin, did not document the landed poll behavior, and setup only reported thatimsgwas missing without offering the Homebrew install/update path most local Mac users need.This is AI-assisted work.
Why This Change Was Made
The
imsgskill now lives with the bundled iMessage plugin, matching the existing Discord, Slack, WhatsApp, and QQBot channel-plugin pattern. The old top-levelskills/imsgcopy was removed.The iMessage setup flow borrows the Signal-style prepare hook to offer macOS Homebrew install/update for the default local
imsgpath, while preserving explicit customcliPathvalues, including SSH/PATH wrappers. Probe and setup status messages now distinguish default/Homebrew-managedimsgfrom operator-owned wrappers, and doctor can repair stale session snapshot paths to the generated plugin-skill path when that path has been published.Clanker checked the prior Vincent/Jason history: Vincent previously moved bundled skills into plugin directories with manifest
skillsentries and did not add extra doctor migration. This PR keeps that ownership move, with a conservative doctor repair only for stale session metadata when the generated plugin-skill target exists.Codex review note: local Codex review repeatedly flagged that moving
imsginto plugin skills means the skill is only published when the iMessage plugin is activated. I am keeping that behavior because Omar explicitly asked to remove the old skill and align with other channel plugins; the PR body calls out the tradeoff for maintainer review.User Impact
Users configuring iMessage on the signed-in Messages Mac can install or update
imsgfrom setup instead of manually discovering the command. Existing custom wrapper/SSH setups are left untouched, and setup/probe errors point operators at the configured wrapper when that is what is missing.Agents using the iMessage skill get updated poll guidance, including the landed
imsg poll sendcaption behavior and poll history/watch backfill notes.Evidence
pnpm docs:listpnpm format:docs:check -- docs/channels/imessage.md docs/channels/imessage-from-bluebubbles.md extensions/imessage/skills/imsg/SKILL.mdpnpm format:docs:check -- docs/channels/imessage.md docs/channels/imessage-from-bluebubbles.mdgit diff --check.agents/skills/autoreview/scripts/autoreview --mode localcodex review --uncommitted -c 'model="gpt-5.4"'extensions/imessage/src/setup-surface.ts,extensions/imessage/src/install-imsg.ts,extensions/imessage/src/setup-core.ts, andextensions/imessage/src/status.test.ts; it found no concrete inaccuracy or regression in the docs-only follow-up.tbx_01kwxk5p1772r17gqm46862fh0/ https://github.com/openclaw/openclaw/actions/runs/28845525814node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox --timing-json -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm test extensions/imessage/src/status.test.ts extensions/imessage/src/install-imsg.test.ts src/plugins/bundled-plugin-metadata.test.ts src/skills/loading/plugin-skills.test.ts src/commands/doctor-session-snapshots.test.tstbx_01kwyrmyjprq8rqvjdb0ve7psc/ https://github.com/openclaw/openclaw/actions/runs/28884362791node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox --id tbx_01kwyrmyjprq8rqvjdb0ve7psc --timing-json -- bash imsg-upgrade-proof.tmp.shusing a temporary, uncommitted proof script.openclaw@latestglobal install withchannels.imessage.enabled=true,channels.imessage.cliPath=/tmp/imsg-wrapper, seeded staleagent:main:mainsession snapshot pointing atskills/imsg/SKILL.md, candidate release tarball built withscripts/package-openclaw-for-docker.mjs, then candidate global upgrade plusopenclaw doctor --non-interactive --fix.OpenClaw 2026.6.11 (e085fa1), top-levelskills/imsg/SKILL.mdexisted, generated plugin skill did not, skill list exposedimsgfromopenclaw-bundled, cached prompt and injected workspace file both pointed at the old top-level skill path.OpenClaw 2026.6.11 (6139ef4), old top-levelskills/imsg/SKILL.mdabsent, generatedstate/plugin-skills/imsg/SKILL.mdpresent and linked todist/extensions/imessage/skills/imsg/SKILL.md, skill list exposedimsgfrom plugin skills,doctor --fixrewrote both cached prompt and injected workspace file to the generated plugin-skill path, proof summaryresult: true.650ad0dusing the local dev install and an isolatedPATHwith temporarybrew/imsgshims in front of the real system tools. This exercises the real iMessage plugin setup hook without modifying the machine's Homebrew packages. Current head20b43dconly changesextensions/imessage/src/install-imsg.test.tsto use the publicopenclaw/plugin-sdk/test-envtemp-dir helper; runtime setup code is unchanged from the proofed head.PATH=<proof>/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin PROOF_DIR=<proof> node --import tsx -e '<imports imessageSetupWizard from extensions/imessage/src/setup-surface.ts and calls prepare({ options: { allowIMessageInstall: true } })>'{ "platform": "darwin", "result": { "credentialValues": { "cliPath": "<proof>/homebrew/opt/imsg/bin/imsg" } }, "events": [ ["prompt.confirm", "imsg detected. Reinstall/update now?", false], ["runtime.log", "Updating imsg via Homebrew (<proof>/bin/brew)..."], ["prompt.note", "iMessage", "Installed imsg at <proof>/homebrew/opt/imsg/bin/imsg"] ] }