Skip to content

Contributing

Contributions are welcome. The repo’s CONTRIBUTING.md is the authoritative guide; this page is the quick orientation.

Terminal window
git clone https://github.com/komaa-com/openclaw-msteams-bridge
cd openclaw-msteams-bridge
npm ci
npm run build # tsc -> dist/
npm run typecheck
npm test # vitest

The package is TypeScript under src/, compiled to dist/, and published prebuilt - commit source under src/, never hand-edit dist/.

AreaFiles
Entry / manifestsrc/index.ts, openclaw.plugin.json
Configsrc/config.ts, src/plugin-config.ts
Transport + handshakesrc/msteams-media-stream.ts, src/protocol.gen.ts
Runtime / mode selectsrc/msteams-runtime.ts
Call state machinesrc/call-lifecycle.ts
Realtimesrc/msteams-realtime.ts, src/msteams-realtime-tools.ts
Streamingsrc/msteams-streaming.ts, src/msteams-tts*.ts, src/telephony-*.ts
Visionsrc/vision-*.ts, src/msteams-video-frame.ts
Group gatesrc/group-call-gate.ts
Avatar cuessrc/expression.ts, src/viseme-estimate.ts

See DESIGN.md for the architecture.

  • Branch from main (feat/…, fix/…, docs/…, ci/…); keep PRs focused.
  • Keep the config surface in sync across config.ts, plugin-config.ts, and the configSchema.
  • build, typecheck, and test must pass. A real call through the sandbox is the best verification.

The StandIn media bridge is a hosted service and its internals are not public. In any doc, comment, or example, describe only the client side and the wire protocol; refer to the counterpart as “the StandIn media bridge” and never describe how it produces Teams media or any internal component behind it.