Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
6cabac8
Add pluggable friction stores
Slokh Aug 4, 2026
333d5cd
Expose stored occurrence counts
Slokh Aug 4, 2026
553a3a8
Respect PostgreSQL search paths
Slokh Aug 4, 2026
ed18ff8
Configure CLI friction stores
Slokh Aug 4, 2026
c0ddea2
Simplify Postgres store setup
Slokh Aug 4, 2026
ce222cc
Format CLI store configuration
Slokh Aug 4, 2026
bf300bd
Resolve pnpm toolchain friction
Slokh Aug 4, 2026
566a4b7
Harden pluggable store boundaries
Slokh Aug 4, 2026
7fbbda0
merge main
jxom Aug 4, 2026
2a6581d
refactor: align pluggable stores
jxom Aug 4, 2026
3051a84
test: use postgres testcontainers
jxom Aug 4, 2026
1c18c67
refactor: group postgres options
jxom Aug 4, 2026
69ce3b2
test: namespace postgres fixture
jxom Aug 4, 2026
29c402a
fix: resolve store review feedback
jxom Aug 4, 2026
8fca846
feat: accept postgres connection strings
jxom Aug 4, 2026
f906b82
feat: use postgres.js for stores
jxom Aug 4, 2026
0c570d2
fix: preserve store edge cases
jxom Aug 4, 2026
2b1a59f
feat: migrate stores through frog
jxom Aug 4, 2026
71283ea
docs: describe database store roadmap
jxom Aug 4, 2026
74b1d55
docs: add d1 store roadmap
jxom Aug 4, 2026
6b5f93c
docs: reorder database store guide
jxom Aug 4, 2026
3aa2ac9
fix: guard store parsing boundaries
jxom Aug 4, 2026
3a097a6
docs: simplify database setup
jxom Aug 4, 2026
0239ceb
docs: trim database usage
jxom Aug 4, 2026
b70df92
docs: reorder database storage
jxom Aug 4, 2026
20ecbf0
docs: expand database overview
jxom Aug 4, 2026
ec4ce5a
docs: reuse database URL
jxom Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changeset/calm-frogs-store.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'frog': minor
---

Added pluggable friction stores, a Postgres.js-backed `Store.postgres({ connectionString })` factory, and the `Frog.create` logging API.

```ts
import { Frog, Store } from 'frog'

const store = Store.postgres({ connectionString: process.env.DATABASE_URL! })
const frog = Frog.create({ store })
await frog.log({
body: 'The workaround used.',
severity: 'minor',
title: 'Tool required a workaround',
})
const logs = await frog.logs()
await store.close()
```
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,26 @@ Accept friction reported by other repositories with `.agents/friction-log/config
`frog init` enables inbound reports by default. Run `frog init --no-inbound` to initialize without
accepting inbound reports.

### Store Logs in a Database

Frog separates friction logging from persistence, so agents and applications can record and inspect
logs through one API while choosing where they live. Repository files are the default, PostgreSQL is
supported today, and SQLite and Cloudflare D1 are planned.

```sh
export FROG_DATABASE_URL=postgres://...
frog migrate
frog list
```

#### Database Support

| Database | Status | Factory |
| ------------- | ----------- | -------------------------------------- |
| PostgreSQL | Available | `Store.postgres({ connectionString })` |
| SQLite | Coming soon | — |
| Cloudflare D1 | Coming soon | — |

## CLI Reference

```
Expand All @@ -224,7 +244,9 @@ Commands:
init Create the friction log, config, and issue form.
list List entries with their state.
log Write a friction entry.
migrate Create or upgrade the selected store.
publish Report pending entries as GitHub issues.
resolve Remove one resolved friction entry.
sync Reconcile entries against issue state.
targets List dependencies that accept friction reports.

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
},
"devDependencies": {
"@changesets/cli": "catalog:",
"@testcontainers/postgresql": "catalog:",
"@types/node": "catalog:",
"@vitest/coverage-v8": "catalog:",
"tsx": "catalog:",
Expand Down Expand Up @@ -62,6 +63,7 @@
"@clack/prompts": "catalog:",
"@octokit/rest": "catalog:",
"incur": "catalog:",
"postgres": "catalog:",
"yaml": "catalog:"
},
"engines": {
Expand Down
Loading
Loading