Sign inSign up

aulayai/openclaw

By aulayai

•Updated about 12 hours ago

OpenClaw with the Aulay channel plugin, for one-click assistants hosted by an Aulay runtime.

Image
0

82

aulayai/openclaw repository overview

⁠@aulay/openclaw-channel

OpenClaw channel plugin that gives an OpenClaw gateway one channel called Aulay. The plugin dials out from inside the gateway to the Aulay messaging core (aulay-messaging/1, bearer bridge token) and the core relays every connected messenger (Telegram, Discord, Slack) to it. OpenClaw never learns which messenger a message came from; it gets a generic client profile and its rendering guidance instead.

Used by the derived image docker.io/aulayai/openclaw:<upstream>-aulay.<n> that Aulay runtimes pull for one-click assistants. The runtime writes ~/.openclaw/aulay/bridge.json ({url, token, instance_id}) into the state volume and the Aulay-owned keys into openclaw.json:

{
  plugins: { load: { paths: ["/opt/aulay/openclaw-channel"] }, entries: { aulay: { enabled: true } } },
  channels: { aulay: { enabled: true, bridgeConfigPath: "/home/node/.openclaw/aulay/bridge.json", agentId: "main" } },
  bindings: [{ agentId: "main", match: { channel: "aulay", accountId: "*" } }],
}

⁠How it maps

OpenClawAulay
gateway.startAccount(ctx) / ctx.abortSignalopens and closes the long-lived bridge link (one per account)
runtime.channel.inbound.run({ raw, adapter })one Aulay inbound event → one turn; conversation.id = Aulay conversation id, sender.id = Aulay user id (or guest:<name>)
delivery.deliver(payload) / outbound.sendTextsend to the conversation; message_id is Aulay's mref_…
outbound.sendMediafile block with the media URL
profile guidanceappended to textForAgent as [client: <profile>] …

AulayBridgeService.prompt() exposes button prompts over the bridge (used by tests); wiring OpenClaw's exec approvals onto it through approvalCapability is a follow-up.

⁠Layout

  • src/bridge-service.ts — framework-agnostic: bridge.json → BridgeClient (from @aulay/messaging-sdk) → InboundSink. Tested against the SDK's FakeCore.
  • src/openclaw-host.ts — the only module importing openclaw/plugin-sdk/*.
  • types/openclaw-sdk.d.ts — a shim transcribed from the pinned openclaw package's declarations so the repo typechecks without the 390 MB dependency. pnpm run typecheck:surface runs in CI against the real package (.forgejo/workflows/openclaw-image.yml) before the image is pushed; SDK churn fails there, not at a user's runtime.

⁠Development

pnpm install --ignore-workspace
pnpm test            # vitest: bridge round trip against FakeCore, turn adapter mapping
pnpm run typecheck   # against the shim
pnpm run build       # esbuild bundle → dist/index.js (openclaw/* external)

Tag summary

Content type

Image

Digest

sha256:a612ccc96…

Size

1.1 GB

Last updated

about 12 hours ago

docker pull aulayai/openclaw:2026.9.8-aulay.latest