Skip to content

feat(tools,ink): email + teams + postgres-cdc integrations + ink visual regression#765

Merged
EmersonBraun merged 2 commits into
mainfrom
feat/integrations-batch
May 3, 2026
Merged

feat(tools,ink): email + teams + postgres-cdc integrations + ink visual regression#765
EmersonBraun merged 2 commits into
mainfrom
feat/integrations-batch

Conversation

@EmersonBraun
Copy link
Copy Markdown
Collaborator

Summary

Batch of four issues delivered against origin/main:

All three new tool integrations follow the existing injection pattern (postgres, browser-agent): heavy drivers (nodemailer, imapflow, botbuilder, pg-logical-replication) are not bundled — consumers wrap the driver of their choice. Auth modes (OAuth, app secrets, certificates, managed identity) live inside the adapter.

Long-running streams (IMAP IDLE, Teams activity routing, CDC AsyncIterable) are exposed as helpers, not tools — they belong to @agentskit/triggers in AgentsKitOS, not the one-shot execute semantics of the tools package.

What's in the diff

Path What
packages/tools/src/integrations/email.ts email, emailSend, emailFetch factories
packages/tools/src/integrations/teams.ts teams, teamsSendWebhook, teamsSendBot, adaptiveCard, messageCard
packages/tools/src/integrations/postgres-cdc.ts 5 slot tools + createCdcStream helper, strict identifier validation
packages/tools/src/integrations/index.ts re-exports
packages/tools/tests/{email,teams,postgres-cdc}.test.ts 47 new unit tests (227 total in package)
packages/ink/tests/visual.snap.test.tsx 21 ANSI frame snapshots
apps/visual-react/ Vite + Playwright harness (?case=<id> routing)
.changeset/*.md 4 changesets (3 minor on tools, 1 patch on ink)

Test plan

  • pnpm --filter @agentskit/tools test → 227/227 passing
  • pnpm --filter @agentskit/tools lint → clean
  • pnpm --filter @agentskit/tools build → ESM 84 KB, DTS 35 KB (integrations bundle)
  • pnpm --filter @agentskit/ink test → 69/69 passing (21 new snapshots, two consecutive runs identical → deterministic)
  • pnpm --filter @agentskit/ink lint → clean
  • pnpm --filter @agentskit/visual-react lint → clean
  • Visual baselines for the React harness — left for a follow-up after the first playwright install on a stable machine; see apps/visual-react/README.md

Out of scope

  • Inbound activity routing for Teams (message, mentioned, installation) — belongs in @agentskit/triggers (AgentsKitOS T-6)
  • IMAP IDLE long-running listener — same, T-4
  • CDC AsyncIterable continuous consumer wiring — same, T-9
  • React visual baseline PNGs — follow-up commit

…al regression

- @agentskit/tools: provider-agnostic email (SMTP/IMAP), Microsoft Teams
  (incoming webhook + bot framework + Adaptive Card builder), and Postgres
  CDC primitives (slot status/create/drop/advance/peek + AsyncIterable
  stream helper). All use the injection pattern — heavy drivers
  (nodemailer, imapflow, botbuilder, pg-logical-replication) are not
  bundled. Closes #726, #727, #728.

- @agentskit/ink: visual regression suite via ANSI frame snapshots from
  ink-testing-library — 21 snapshots across every public component in
  stable role/status combinations. Deterministic (frozen dates,
  first-render-only sampling). Closes #253 (P0.42) ink side.

- apps/visual-react: new Vite + Playwright harness for the React
  components — 14 deterministic case routes, pinned viewport/locale/tz,
  animations stripped at test time. Not in default pnpm test (requires
  chromium binary); see apps/visual-react/README.md for setup.
@vercel
Copy link
Copy Markdown

vercel Bot commented May 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
agentskit-doc Ignored Ignored Preview May 3, 2026 1:18pm

Both pg_replication_slot_advance and pg_logical_slot_peek_changes accept
an LSN string that gets cast to pg_lsn server-side. Parameters are bound
safely so SQL injection is not the risk — but a malformed LSN from the
LLM (e.g. quote-ridden garbage) would hit the database, fail the cast,
and surface the raw Postgres error back to the model. Add an assertLsn()
guard mirroring assertIdent() and bail out with AK_TOOL_INVALID_INPUT
before the query runs. Add tests covering both rejection paths.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant