Channels
Googlechat Pubsub
OpenClaw Google Chat channel plugin with Cloud Pub/Sub ingress (no public HTTPS endpoint required).
Install
npm install
npm
README
# openclaw-googlechat-pubsub
An OpenClaw Google Chat channel plugin that receives events over Cloud Pub/Sub instead of an
HTTP webhook, so the Gateway host needs no public HTTPS endpoint.
The plugin claims channel id `googlechat`, the same id the official `@openclaw/googlechat` uses.
Install one or the other, never both — sharing the id keeps config keys, session keys, and target
syntax identical to the official plugin, so switching back is a plugin swap and nothing else.
## Status
Pub/Sub ingress is not implemented yet. The current tree is the official plugin extracted verbatim,
repackaged to build and test on its own.
## Install
```bash
openclaw plugins install ./path/to/openclaw-googlechat-pubsub
```
Requires a host running `openclaw` >= 2026.8.1-beta.1 on Node 22.22.3+, 24.15+, or 25.9+.
## Development
```bash
npm install
npm test
```
Use Node 24.19.0. `openclaw` declares `>=22.22.3 <23 || >=24.15.0 <25 || >=25.9.0`, so the
common 23.x line is out of range.
## Provenance
`extensions/googlechat/` from [openclaw/openclaw](https://github.com/openclaw/openclaw), MIT,
copyright (c) 2026 OpenClaw Foundation.
| | |
|---|---|
| Tag | `v2026.8.1-beta.1` |
| Commit | `9ab21e0b1ab3cf3845ec47f7b7b8803255a8af80` |
The tag, not `main`, is the baseline: `main` imports `openclaw/plugin-sdk/runtime-doctor-migrations`,
which no published `openclaw` release exports. At this tag all 67 production `plugin-sdk` imports
resolve against the published package.
To re-sync against a newer upstream release, diff this tree against that tag's
`extensions/googlechat/`. Everything under `src/` is byte-identical to upstream except the three
divergences listed below; `package.json`, `openclaw.plugin.json`, `tsconfig.json`, `vitest.config.ts`,
`test/`, and `types/` are this repo's own.
### Divergences from upstream source
1. `src/*.needs-monorepo.test.ts` — renamed, see below.
2. `src/google-auth.runtime.test.ts` imports `expectDefined` from `test/upstream-shims.ts` instead of
`@openclaw/normalization-core`, which is not published to npm.
3. `src/monitor.reply-delivery-failure.test.ts` imports `withServer` from `test/upstream-shims.ts`
instead of `openclaw/plugin-sdk/test-env`.
## Parked tests
`npm test` runs 24 of upstream's 29 suites (234 tests). The five suffixed `*.needs-monorepo.test.ts`
are excluded by both `vitest.config.ts` and `tsconfig.json`, keyed off that one filename convention.
They import OpenClaw test infrastructure that the published `openclaw` package does not ship — no
test helper reaches `dist/` at all — and the helpers are barrel re-exports over core internals
(1785 transitive source files for the `channel-test-helpers` subset alone), so vendoring them is not
viable. Running them needs a full upstream checkout and workspace install.
| Suite | Blocking import |
|---|---|
| `channel.needs-monorepo.test.ts` | `plugin-sdk/channel-test-helpers` |
| `setup.needs-monorepo.test.ts` | `plugin-sdk/channel-test-helpers`, `plugin-sdk/plugin-test-runtime` |
| `monitor.webhook-routing.needs-monorepo.test.ts` | `plugin-sdk/plugin-test-runtime`, `plugin-sdk/test-env` |
| `monitor.needs-monorepo.test.ts` | `plugin-sdk/plugin-state-test-runtime` |
| `monitor-ingress.needs-monorepo.test.ts` | `plugin-sdk/plugin-state-test-runtime` |
What this costs: `monitor` and `monitor-ingress` cover durable admission and the ingress queue — the
regression net for the ack/nack work Pub/Sub ingress will need. `monitor-webhook.test.ts`, the
structural analogue of a future `monitor-pubsub.test.ts`, is in the running lane.
## Typecheck
`npm run typecheck` currently reports 12 errors and is not a passing gate. All of them trace to the
published `openclaw` package shipping 302 plugin-sdk JS modules against 149 declaration files;
upstream does not hit this because its own tsconfig maps `openclaw/plugin-sdk/*` onto TypeScript
sources. `types/openclaw-declaration-gaps.d.ts` names the ten subpaths with no declaration at all.
Treat 12 as the baseline: new code should not raise it.
`tsc` needs roughly 6 GB of heap here, so run it as
`NODE_OPTIONS=--max-old-space-size=12288 npm run typecheck`.
channels
Comments
Sign in to leave a comment