Releases: withoneai/cli
v1.42.0
New one relay platforms command — discover which platforms support webhook relay and how many event types each exposes, without having to guess-and-check with relay event-types <platform>.
$ one relay platforms
Platform Event types
─────────────── ───────────
airtable 3
attio 27
stripe 224
...
$ one --agent relay platforms
{"platforms":[{"platform":"airtable","eventTypeCount":3}, ...]}Also fixes a bug where sync always hit prod because OneApi was constructed without apiBase. #124
v1.41.0
Late-bound connection refs in flow action steps. Re-auth no longer breaks flows.
```json
"connection": { "platform": "gmail" } // single account
"connection": { "platform": "gmail", "tag": "work@example.com" } // multi-account
```
Resolution runs at flow-execute time. The connection list is fetched once per flow run and cached on the flow context — a many-step flow does ONE `listConnections` round-trip regardless of step count. Selectors work inside the ref's `tag` field for multi-tenant flows.
Backwards compatible: literal `connectionKey` still works.
Companion to v1.40.0 (sync). #121
v1.40.0
Late-bound connection refs in sync profiles. Re-auth no longer breaks profiles.
```json
"connection": { "platform": "gmail" } // single account
"connection": { "platform": "gmail", "tag": "work@example.com" } // multi-account
```
Resolution runs at sync test/run time. After `one add gmail` (re-auth), the next sync picks up the fresh key automatically — no manual edits across profiles.
Backwards compatible: literal `connectionKey` still works. Built-in profiles migrated.
Closes #114. Partial fix for #113 (closed). Flow engine support to follow.
v1.39.1
Hard-block custom actions in sync test (and sync init auto-validation).
Follow-up to #118: the previous fix added the guard in sync run and enrich, but sync test was missing it — so a profile pointing at a custom action would pass test and only fail later at run time. The check now lives in testSyncProfile so every entry point rejects custom actions consistently.
v1.39.0
fix: hard-block custom actions in sync
Sync refuses profiles referencing custom/composer actions (tag custom). Both the list action and any enrich action must be passthrough — custom actions run on a small shared fleet that collapses under sync-scale load and often expect filters in the request body that sync doesn't send.
Changes
discoverModelsfilters customs at resolution and drops models with no passthrough variant —sync models <platform>only returns syncable modelssync runaborts with a clear error pointing atone actions searchand the flow alternative when the list or enrich action is taggedcustom- Docs updated: guide, skill, README
Why
The symptoms were empty results (withoneai/knowledge#65) and a feature request for body-param support (#116). Neither is the right fix — sync should never use custom actions. Custom actions are for one-off agent use only.
Closes #116, closes withoneai/knowledge#65. Shipped in #118.
v1.38.0
What's new
- Root-array response support for sync. Profiles can now set
resultsPathto""/"$"/"."when the API returns a bare array at the root (e.g. Hacker News/v0/topstories.json→[9129911, 9129199, ...]). - Primitive-array auto-wrapping. Arrays of numbers/strings/bools are wrapped as
{ [idField]: String(value) }so they flow through the existing schema-inference and upsert pipeline with no downstream special-casing. - Built-in profile:
hacker-news/topStories—one sync init hacker-news topStoriesnow works out of the box. - Clearer extraction errors. When
resultsPathdoesn't resolve to an array, the error now names the profile (platform/model), the path, and the actual top-level type of the response.
Profile validation no longer rejects an empty resultsPath (only undefined). Existing object-rooted profiles (Attio, Gmail, Fathom, Calendar, Notion, Stripe) are unchanged.
PR: #117
v1.37.3
Fix: eliminate cross-platform sync state race. Concurrent syncs (cron firing all platforms at once) were racing on the shared .one/sync/sync_state.json — failed renames wedged models in status=syncing, and the read-modify-write could silently lose an update. State is now stored per-platform/per-model at .one/sync/state/<platform>/<model>.json so each writer owns its own file. Legacy file is migrated on first read.
v1.37.2
Auto-recover stale sync state after a crashed sync (laptop sleep, OOM, SIGKILL, terminal close). Trust the filesystem lock as the single source of truth on concurrency; install SIGINT/SIGTERM handlers so cleanly-signaled terminations flip state to failed and release the lock before exit.
v1.37.1
Fix: profile-level hooks (transform, exclude, identityKey, onUpdate/onChange) now run on rows produced by Phase 2 enrichment. Previously they were silently skipped, so transforms that extracted columns from enriched fields stayed empty and change hooks never fired for detail-fetched rows.
See #109 for details.
v1.37.0
- Add
--metadataflag toone relay createfor platforms that need extra identifiers to register webhooks (GitHub:GITHUB_OWNER/GITHUB_REPOSITORY, Typeform:TYPEFORM_FORM_ID) - Surface the API's
warningfield in human mode onrelay create - Document the
--webhook-secretfoot-gun onrelay activate(passing it when the endpoint was created with--create-webhooksilently drops every delivery)