@abloatai/ablo 0.61.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.62.0
|
|
4
|
+
|
|
5
|
+
Every live client now exposes one session-owned `ablo.presence` projection.
|
|
6
|
+
`active` shows the current session's announced activity and `others` shows the
|
|
7
|
+
other visible sessions. The reactive client adds `forModel(model, id?)` to
|
|
8
|
+
narrow the same projection without opening another connection. Read, claim,
|
|
9
|
+
create, update, and delete activity share one typed, model-addressable contract
|
|
10
|
+
and remain attributable to their originating human or agent session.
|
|
11
|
+
|
|
12
|
+
Claims and presence now have separate owners: the durable claim authority
|
|
13
|
+
decides admission, queuing, fencing, expiry, and release, while presence
|
|
14
|
+
projects that lifecycle for live collaborators. Cross-replica HTTP callers
|
|
15
|
+
resolve and release claims against the shared authority instead of a
|
|
16
|
+
process-local roster. An object-form claim also returns its protected row
|
|
17
|
+
snapshot in the acquisition request, removing the post-grant read race and an
|
|
18
|
+
extra round trip.
|
|
19
|
+
|
|
20
|
+
This replaces the earlier participant-oriented presence stream and its raw
|
|
21
|
+
wire event vocabulary. Migrate `PresenceStream`, `Peer`, `Activity`,
|
|
22
|
+
`PresenceUpdate*`, and `PresenceKind` consumers to `Ablo.Presence`,
|
|
23
|
+
`Ablo.PresenceSession`, and `Ablo.PresenceActivity`; read the projection through
|
|
24
|
+
`ablo.presence.active`, `ablo.presence.others`, or
|
|
25
|
+
`ablo.presence.forModel(model, id?)`. The low-level `presence_update` event,
|
|
26
|
+
frame-handler members, presence schemas, and claim-stream participant setters
|
|
27
|
+
are removed because session identity and typed presence snapshot/patch frames
|
|
28
|
+
now own that lifecycle.
|
|
29
|
+
|
|
30
|
+
Admission and other transient failures now expose machine-actionable
|
|
31
|
+
`recovery`, `retryable`, and `retryAfterSeconds` fields through the branded
|
|
32
|
+
package, including session issuance and headless model requests. The headless
|
|
33
|
+
client automatically replays an admission-rejected request after the requested
|
|
34
|
+
delay, without restarting the surrounding claim workflow. Queued HTTP claims
|
|
35
|
+
heartbeat through their known model and row target, so one holder releasing
|
|
36
|
+
cannot make the next queued ticket appear lost during promotion. A visibility
|
|
37
|
+
miss while the fence is minted is retried only inside the ticket's last
|
|
38
|
+
server-acknowledged lease window.
|
|
39
|
+
|
|
3
40
|
## 0.61.0
|
|
4
41
|
|
|
5
42
|
### Existing database connections repair in place
|
package/dist/coordination.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ export * from '@abloatai/transaction/coordination';
|
|
|
2
2
|
/**
|
|
3
3
|
* Coordination vocabulary that the streams module declares.
|
|
4
4
|
*
|
|
5
|
-
* A caller that holds a claim
|
|
6
|
-
*
|
|
5
|
+
* A caller that holds a claim needs these names, and coordination is where
|
|
6
|
+
* they belong — so they are
|
|
7
7
|
* surfaced here rather than leaving callers to reach into the type module.
|
|
8
8
|
*/
|
|
9
|
-
export type {
|
|
9
|
+
export type { Claim, ClaimTarget } from '@abloatai/transaction/types/streams';
|
|
10
10
|
//# sourceMappingURL=coordination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../src/coordination.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AAEnD;;;;;;GAMG;AACH,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../src/coordination.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AAEnD;;;;;;GAMG;AACH,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC"}
|
package/docs/client-behavior.md
CHANGED
|
@@ -157,13 +157,20 @@ see. Options on the claim:
|
|
|
157
157
|
- `{ maxQueueDepth }` rejects if the wait line is already too deep.
|
|
158
158
|
|
|
159
159
|
While waiting, schema clients learn when the claim clears from the live claim
|
|
160
|
-
stream, so they never poll.
|
|
160
|
+
stream, so they never poll. Headless HTTP clients poll the same durable queue;
|
|
161
|
+
the model client keeps the row target on each heartbeat, so a holder releasing
|
|
162
|
+
cannot make the queued ticket unresolvable by id. During fence minting, it also
|
|
163
|
+
keeps polling through a visibility miss only while the server's last enqueue or
|
|
164
|
+
heartbeat acknowledgement still guarantees that ticket is live.
|
|
161
165
|
|
|
162
166
|
## Errors
|
|
163
167
|
|
|
164
168
|
All SDK errors extend `AbloError`. `type` is the class-name discriminator, such
|
|
165
169
|
as `AbloStaleContextError`; `code` is the wire condition, such as
|
|
166
170
|
`stale_context`. Use `instanceof` in-process and `type` after serialization.
|
|
171
|
+
Every error also exposes a typed `recovery` classification and `retryable`
|
|
172
|
+
boolean. When the server requests a minimum delay, `retryAfterSeconds` is
|
|
173
|
+
present on the same error for both 429 and 503 responses.
|
|
167
174
|
|
|
168
175
|
| Error | Typical cause |
|
|
169
176
|
|---|---|
|
|
@@ -196,8 +203,14 @@ Model writes are retry-safe by default because the SDK attaches an idempotency
|
|
|
196
203
|
key. If you provide your own key, keep it stable for retries of the same logical
|
|
197
204
|
operation and never reuse it for a different payload.
|
|
198
205
|
|
|
199
|
-
Retry transport failures and 5xx with backoff.
|
|
200
|
-
|
|
206
|
+
Retry transport failures and 5xx with backoff. For example, an
|
|
207
|
+
`instance_at_capacity` error has `recovery === 'transient'`; wait at least
|
|
208
|
+
`retryAfterSeconds` before replaying the unchanged request. The headless HTTP
|
|
209
|
+
client performs that exact replay within `timeoutMs`; importantly, it does not
|
|
210
|
+
restart a larger claim/read/write workflow around the rejected request. If the
|
|
211
|
+
deadline is exhausted, the same actionable error reaches the caller. Do not
|
|
212
|
+
blindly retry validation, permission, idempotency, or stale-context errors
|
|
213
|
+
without changing the request.
|
|
201
214
|
|
|
202
215
|
## Logging
|
|
203
216
|
|
|
@@ -242,7 +242,7 @@ examples/
|
|
|
242
242
|
inngest-agent/ events, functions, steps, endpoint, AI composition
|
|
243
243
|
```
|
|
244
244
|
|
|
245
|
-
Do not add Inngest to
|
|
245
|
+
Do not add Inngest orchestration to the Ablo core. A dedicated `@abloatai/inngest` package
|
|
246
246
|
is justified only after multiple real applications reveal substantial
|
|
247
247
|
reusable behavior beyond a small function or step wrapper.
|
|
248
248
|
|
|
@@ -178,7 +178,7 @@ The repository's
|
|
|
178
178
|
[`examples/temporal-agent`](../../../../examples/temporal-agent/README.md)
|
|
179
179
|
contains a Workflow, Activities, Worker, client, durable AI SDK tool, and a
|
|
180
180
|
simulated lost-response retry. It is a standalone application on purpose:
|
|
181
|
-
Temporal stays out of Ablo's core packages
|
|
181
|
+
Temporal stays out of Ablo's core packages; applications own their agent composition.
|
|
182
182
|
|
|
183
183
|
A dedicated `@abloatai/temporal` package should be introduced only after
|
|
184
184
|
multiple production integrations reveal substantial, stable behavior that
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abloatai/ablo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"description": "The public Ablo SDK for coordinated reads, commits, claims, observation, and reactive applications.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -145,8 +145,8 @@
|
|
|
145
145
|
"directory": "packages/ablo"
|
|
146
146
|
},
|
|
147
147
|
"dependencies": {
|
|
148
|
-
"@abloatai/humans": "^0.
|
|
149
|
-
"@abloatai/transaction": "^0.
|
|
148
|
+
"@abloatai/humans": "^0.62.0",
|
|
149
|
+
"@abloatai/transaction": "^0.62.0",
|
|
150
150
|
"zod": "^4.4.3"
|
|
151
151
|
},
|
|
152
152
|
"peerDependencies": {
|