Commit Graph

89 Commits

Author SHA1 Message Date
bai 8fe175f7fe Implement state adapter based on Postgres (#154)
* Initial work on postgres state store

* Run fix

* Replace pre-written CHANGELOG with proper changeset

The CHANGELOG was manually written with a version entry. This repo uses
Changesets to manage versioning, so add a proper changeset file instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add missing @vitest/coverage-v8 dev dependency

The vitest config specifies coverage provider "v8" but the package
was missing from devDependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Drop drizzle-orm, use raw postgres queries

The adapter only needs 3 simple tables with basic CRUD. drizzle-orm is
a full ORM that adds significant dependency weight for no real benefit
here. The ensureSchema() method was already using raw queries. This
halves the dependency surface to just the postgres driver.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add comprehensive unit tests for postgres state adapter

Test factory function edge cases (missing URL, env var fallbacks,
custom keyPrefix) and ensureConnected guard for all state operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Document expired row cleanup limitation for postgres adapter

Unlike Redis, Postgres doesn't auto-delete expired rows. Document the
opportunistic cleanup behavior and provide SQL for periodic cleanup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove stale drizzle keyword from package.json

drizzle-orm was removed in a prior commit but the keyword remained.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix expiresAt parsing in acquireLock

The postgres library returns timestamptz columns as JavaScript Date
objects, not strings. Wrapping in new Date() was unnecessary overhead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Document lock atomicity difference vs Redis adapters

The Postgres ON CONFLICT approach relies on row-level locking rather
than a single atomic SET NX PX like Redis. Note this for users who
need high-contention distributed locking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Use crypto.randomUUID() for lock token generation

Math.random() is not cryptographically secure and has a higher
collision risk in distributed environments. crypto.randomUUID() is
available in Node 16+ and provides better uniqueness guarantees.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Delete CHANGELOG.md

* Add comprehensive unit tests for postgres state adapter

Mock the postgres module and SQL client to achieve 100% coverage
across statements, branches, functions, and lines. Tests cover
factory function, connection lifecycle, subscriptions, locking,
cache operations, and the owned-client disconnect path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add setIfNotExists method and merge with main

Implement the setIfNotExists method added to the StateAdapter
interface since this branch diverged. Uses INSERT ... ON CONFLICT
DO NOTHING with RETURNING to atomically check-and-set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add postgres to state docs navigation and memory adapter callout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Migrate postgres state adapter from postgres to pg (node-postgres)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Rename state-postgres to state-pg and align version to 4.17.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Hayden Bleasel <hello@haydenbleasel.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:05:32 -08:00
Hayden Bleasel c744bdc2ef Update teams.mdx 2026-03-05 17:08:16 -08:00
Hayden Bleasel fcaee5c671 Update docs 2026-03-04 11:33:41 -08:00
Malte Ubl ff954f938b Correctly handle AI SDK stream concatenation (#170)
* Correctly handle AI SDK stream concatenation

* changset

* docs

---------

Co-authored-by: Hayden Bleasel <hello@haydenbleasel.com>
2026-03-04 11:02:02 -08:00
Rich Haines 6b2a165e32 Make sitemap.md static via generateStaticParams (#176) 2026-03-04 10:56:38 -08:00
Hayden Bleasel 7bcf9d1578 Docs for f0c7050349 2026-03-04 10:52:06 -08:00
github-actions[bot] 0ab742c62d Version Packages (#133)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-04 00:32:57 -08:00
Hayden Bleasel bbe4de55bf Add docs for 73de82dbef 2026-03-03 12:57:17 -08:00
Hayden Bleasel deda3e59d4 Add docs for 02e7ef605c 2026-03-03 12:55:25 -08:00
Hayden Bleasel dc72b893ae Improve usage docs 2026-03-03 12:52:30 -08:00
Timo Lins 24532a715c [Telegram] Enable Telegram auto/polling mode for local bots without public webhooks (#141)
* Add Telegram auto mode polling and init username fallback

* Expose Telegram resetWebhook API

* Refine Telegram API to longPolling and safer auto mode

* Fix: Environment variable cleanup sets `process.env.VERCEL` to the string `"undefined"` (truthy) instead of removing it, leaking a truthy VERCEL env var into subsequent tests.

This commit fixes the issue reported at packages/adapter-telegram/src/index.test.ts:661

**Bug explanation:**

In the test "auto mode stays in webhook mode on serverless runtime" (line 622), the cleanup code in the `finally` block at line 662 uses `process.env.VERCEL = undefined` when the env var wasn't previously set. In Node.js, `process.env` coerces all values to strings, so `process.env.VERCEL = undefined` actually sets `process.env.VERCEL` to the string `"undefined"`. This is truthy (`Boolean("undefined")` === `true`).

This was verified empirically:
```
process.env.TEST_VAR = undefined;
typeof process.env.TEST_VAR  // "string"
process.env.TEST_VAR         // "undefined"  
Boolean(process.env.TEST_VAR) // true
```

The consequence is that after this test runs, `process.env.VERCEL` remains set to the truthy string `"undefined"`, causing `isLikelyServerlessRuntime()` to return `true` for all subsequent tests that run in the same process. This could cause any auto-mode tests that follow to incorrectly detect a serverless runtime and behave differently than expected.

**Fix explanation:**

Changed `process.env.VERCEL = undefined` to `delete process.env.VERCEL`, which properly removes the environment variable from `process.env`. After `delete`, `process.env.VERCEL` is `undefined` (the actual undefined value, not the string), and `Boolean(process.env.VERCEL)` correctly returns `false`. This matches the standard pattern for cleaning up environment variables in Node.js tests.

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
Co-authored-by: timolins <me@timo.sh>

* Fix lint: replace delete env cleanup with Reflect.deleteProperty

* Harden Telegram polling tests and polish polling docs

* Improve Telegram polling docs with clearer motivation and examples

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Vercel <vercel[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 23:08:00 +01:00
Peter Clement f01b92fec4 Ensure handling of Discord slash commands (#152)
* Correctly handle discord slash commands

* chore: remove unintended bot.tsx formatting churn

* tidy up

* Expand subcommand path into event.command

* Fix race condition

* Run fix

* Fix duplicate slash-context check

* Fix integration test mock

* Run fix

* Update docs

---------

Co-authored-by: Hayden Bleasel <hello@haydenbleasel.com>
2026-03-02 13:21:25 -08:00
Rich Haines dadf46f603 Add sitemap.md route for LLM-friendly documentation indexing (#155) 2026-03-02 12:21:11 -08:00
Hayden Bleasel b9266cee5b Add logos to og:image 2026-03-01 11:11:52 -08:00
Hayden Bleasel 2b941db687 Create logos.tsx 2026-03-01 11:05:22 -08:00
Hayden Bleasel aba4643bd3 Improve formatting file specificity 2026-03-01 11:04:06 -08:00
Malte Ubl bc510b8ab7 Clarify how to get designated as a vendor-official adapter 2026-03-01 10:15:57 -08:00
dependabot[bot] 3574a5b47e Bump next from 16.0.10 to 16.1.5 (#146)
Bumps [next](https://github.com/vercel/next.js) from 16.0.10 to 16.1.5.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.0.10...v16.1.5)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.1.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-28 20:28:30 -08:00
Vincenzo Domina f5a75c9680 feat(chat): allow disabling fallback streaming placeholder (#139)
* feat(chat): allow disabling fallback streaming placeholder

Add ChatConfig options to delay initial post+edit placeholder and wait for real text before creating the streamed message. Improves ordering for Telegram and other fallback-streaming adapters.

Made-with: Cursor

* fix(chat): simplify fallback streaming placeholder

* Create fallback-streaming-placeholder.md

* Improve test

* Add new test

* Run fix

* Update streaming.mdx

---------

Co-authored-by: Hayden Bleasel <hello@haydenbleasel.com>
2026-02-28 19:18:37 -08:00
Hayden Bleasel 1d5aefbc3b Remove index page 2026-02-28 17:54:41 -08:00
Hayden Bleasel 85abfb3263 Contributing (#144)
* Initial contributing draft

* Misc fixes
2026-02-28 17:51:12 -08:00
dependabot[bot] a22b14136c Bump @types/node from 22.19.3 to 25.3.0 (#79)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.19.3 to 25.3.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.3.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 09:01:01 -08:00
Hayden Bleasel 38abf84e1a Docs for 0f8503198b 2026-02-27 08:44:10 -08:00
Hayden Bleasel 3fa7001633 Docs for 90dc3251a5 2026-02-27 08:42:41 -08:00
Hayden Bleasel cf154f829c Docs for 7d4b3c50cf 2026-02-27 08:41:24 -08:00
github-actions[bot] 6ef8816a55 Version Packages (#100)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-26 15:07:23 -08:00
Tobias Lins 0c688a0111 Add support for telegram bot (#90)
* Add support for telegram bot

* Add support for action buttons in telegram

* Use markdown parse mode

* Add more tests

* Fix linting issues

* Fixes

* Fixes

* Don't reverse order messages for AI and always answer for telegram

* Add telegram integration test

* Update telegram.json
2026-02-26 14:10:41 -08:00
Nicolás Montone 5b3090a7a6 add CardLink Element (#109) 2026-02-25 08:05:30 -08:00
Richard Poelderl 77c8aa9659 docs: note init before Slack OAuth callback (#98) 2026-02-24 15:36:26 -08:00
Brycero 3bbe7e8e5c Fix URL path for editing source in GitHub (#97) 2026-02-24 14:51:05 -08:00
github-actions[bot] 18b540a9cc Version Packages (#95)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-24 15:18:11 -05:00
Vishal Yathish 90dc3251a5 [slack] add support for typing indicators with custom loading states (#87)
* [slack] add support for typing indicators with custom loading states

* adjust docs

* add changeset

* adjust

* remove

* minor bugfix

* add to example
2026-02-24 12:12:47 -08:00
Hayden Bleasel e7681c5d6e Update page.tsx 2026-02-24 09:53:39 -08:00
Hayden Bleasel 91c25accac Update thread.mdx 2026-02-23 18:17:23 -08:00
Hayden Bleasel b976e4a843 Update thread.mdx 2026-02-23 18:00:25 -08:00
Hayden Bleasel f7ea112f41 Update docs 2026-02-23 17:57:56 -08:00
Hayden Bleasel 6f44100a48 Create opengraph-image.png 2026-02-23 16:17:49 -08:00
Hayden Bleasel 276b39ff92 Update layout.tsx 2026-02-23 16:06:53 -08:00
Hayden Bleasel 3049770755 Delete apps/docs/README.md 2026-02-21 20:42:48 -08:00
Hayden Bleasel 5bcac22c94 Update index.mdx 2026-02-21 11:26:33 -08:00
Hayden Bleasel 3070a0388c Model updates 2026-02-21 11:24:34 -08:00
Hayden Bleasel dfb2b02668 Migrate to Vercel 2026-02-20 22:07:19 -08:00
Hayden Bleasel a79ff81bcc Callout skill 2026-02-20 20:16:03 -08:00
Hayden Bleasel e98a53ea48 Move notes.md into docs 2026-02-20 14:46:38 -08:00
Hayden Bleasel 0ec3c6c76d Move limitations.md to docs 2026-02-20 14:43:35 -08:00
Hayden Bleasel a5c3651179 Improve guides, update getting started 2026-02-20 14:14:13 -08:00
Hayden Bleasel 16c75b8c0f Update geistdocs.tsx 2026-02-20 14:09:43 -08:00
Hayden Bleasel 411add0ba3 Update geistdocs.tsx 2026-02-20 14:07:14 -08:00
Hayden Bleasel f25444ba17 Misc fixes 2026-02-20 14:04:06 -08:00
Hayden Bleasel b01b51a51f Update demo-client.tsx 2026-02-20 13:58:47 -08:00