diff --git a/plugin/index.ts b/plugin/index.ts index 9e89996..e70ed25 100644 --- a/plugin/index.ts +++ b/plugin/index.ts @@ -307,21 +307,22 @@ function register(api: PluginAPI): void { )}\n\`\`\``; } - // First-line ack `WAKEUP_OK` is the plugin's ack-receipt token; the - // agent MUST then continue in the same session and drive the - // `hf-wakeup` workflow to completion (calendar_status → task fetch → - // sub-workflow → calendar_complete/abort). Without that continuation - // the scheduler keeps re-waking every 30s because the slot stays - // `not_started` forever. + // The wakeup dispatcher's `deliver` callback below only logs the + // reply text — it does NOT inspect any ack token. The earlier + // `WAKEUP_OK` first-line-ack convention was prompt-only theatre; + // nothing in this plugin or in openclaw acted on it. The only + // thing that ends a wake cycle is the slot transitioning out of + // `not_started`, which happens when the agent calls + // `harborforge_calendar_complete` or `harborforge_calendar_abort`. + // Tell the agent that plainly instead of asking for a fake ack. const wakeupMessage = - `You have due slots. **First line of your reply MUST be exactly ` + - `\`WAKEUP_OK\`** so the plugin records the ack. Then, **in this ` + - `same session**, drive the \`hf-wakeup\` workflow of skill ` + - `\`hf-hangman-lab\` to completion — read slot context, call the ` + - `harborforge_calendar_* tools, route to the right sub-workflow, ` + - `and finish with harborforge_calendar_complete or abort. Do NOT ` + - `stop after the ack — the scheduler will re-wake you every 30s ` + - `until the slot transitions out of \`not_started\`.${slotBlock}`; + `You have due slots. Drive the \`hf-wakeup\` workflow of skill ` + + `\`hf-hangman-lab\` to completion in this session — read slot ` + + `context, call the harborforge_calendar_* tools, route to the ` + + `right sub-workflow, and finish with harborforge_calendar_complete ` + + `or harborforge_calendar_abort. The scheduler keeps re-waking you ` + + `every 30s until the slot transitions out of \`not_started\`, so ` + + `partial work or silence just produces another wake.${slotBlock}`; const result = await dispatchInboundMessageWithDispatcher({ ctx: {