@creatornader/agent-bridge 0.2.0 → 0.3.1
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 +86 -4
- package/README.md +567 -55
- package/ROADMAP.md +114 -0
- package/SECURITY.md +90 -0
- package/SKILL.md +68 -2
- package/bin/agent-bridge +2 -2
- package/clients/claude-desktop.json +3 -1
- package/dist/archive.d.ts +163 -0
- package/dist/archive.js +50 -0
- package/dist/archive.js.map +1 -0
- package/dist/bridge-domain-CBX3IVqC.d.ts +153 -0
- package/dist/{bridge-service-CfqMcMAn.d.ts → bridge-service-hX1ZQp4W.d.ts} +15 -5
- package/dist/bridge-store-DPVSCwfs.d.ts +102 -0
- package/dist/bridge.d.ts +76 -17
- package/dist/bridge.js +52 -24
- package/dist/chunk-2DFNOLMO.js +618 -0
- package/dist/chunk-2DFNOLMO.js.map +1 -0
- package/dist/{chunk-KVR4JBRF.js → chunk-2EVLG3YA.js} +2 -2
- package/dist/{chunk-KVR4JBRF.js.map → chunk-2EVLG3YA.js.map} +1 -1
- package/dist/chunk-45BZGB77.js +709 -0
- package/dist/chunk-45BZGB77.js.map +1 -0
- package/dist/chunk-4VB44KJU.js +230 -0
- package/dist/chunk-4VB44KJU.js.map +1 -0
- package/dist/chunk-5GMB3A77.js +1013 -0
- package/dist/chunk-5GMB3A77.js.map +1 -0
- package/dist/chunk-A6W4QALF.js +1258 -0
- package/dist/chunk-A6W4QALF.js.map +1 -0
- package/dist/chunk-BZLMF5O5.js +328 -0
- package/dist/chunk-BZLMF5O5.js.map +1 -0
- package/dist/{chunk-AXL2I7FH.js → chunk-CEXBMOI5.js} +240 -79
- package/dist/chunk-CEXBMOI5.js.map +1 -0
- package/dist/chunk-GADH244D.js +527 -0
- package/dist/chunk-GADH244D.js.map +1 -0
- package/dist/chunk-MBPZXTJA.js +2428 -0
- package/dist/chunk-MBPZXTJA.js.map +1 -0
- package/dist/chunk-NCO7RLBM.js +146 -0
- package/dist/chunk-NCO7RLBM.js.map +1 -0
- package/dist/chunk-Q6PPMXJC.js +1050 -0
- package/dist/chunk-Q6PPMXJC.js.map +1 -0
- package/dist/{chunk-4KAOBC5X.js → chunk-SPSMZOCJ.js} +190 -165
- package/dist/chunk-SPSMZOCJ.js.map +1 -0
- package/dist/chunk-UAHMP6GC.js +54 -0
- package/dist/chunk-UAHMP6GC.js.map +1 -0
- package/dist/{chunk-YD6YJATN.js → chunk-VOQIDTCJ.js} +4 -2
- package/dist/chunk-VOQIDTCJ.js.map +1 -0
- package/dist/chunk-WAI2IYIQ.js +554 -0
- package/dist/chunk-WAI2IYIQ.js.map +1 -0
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +3555 -214
- package/dist/cli.js.map +1 -1
- package/dist/client-config.d.ts +1 -1
- package/dist/client-config.js +1 -1
- package/dist/client-runtime.d.ts +10 -6
- package/dist/client-runtime.js +9 -6
- package/dist/contracts/generate.d.ts +2 -0
- package/dist/contracts/generate.js +247 -0
- package/dist/contracts/generate.js.map +1 -0
- package/dist/dr.d.ts +324 -0
- package/dist/dr.js +124 -0
- package/dist/dr.js.map +1 -0
- package/dist/gateway-CggQ8vTC.d.ts +78 -0
- package/dist/gateway-main.js +190 -8
- package/dist/gateway-main.js.map +1 -1
- package/dist/gateway.d.ts +4 -3
- package/dist/gateway.js +4 -3
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/dist/postgres-bridge-store-Bfd3hRId.d.ts +49 -0
- package/dist/server.d.ts +3 -2
- package/dist/server.js +13 -8
- package/dist/sqlite.d.ts +94 -12
- package/dist/sqlite.js +7 -4
- package/docs/architecture-v2.md +394 -0
- package/docs/decisions/0001-protocol-layers-and-acknowledgment-semantics.md +85 -0
- package/docs/decisions/0002-canonical-operation-contract-registry.md +46 -0
- package/docs/decisions/0003-host-adapters-and-consumer-instance-keys.md +88 -0
- package/docs/ecosystem.md +86 -0
- package/docs/postmortems/2026-07-08-wrapper-source-drift.md +82 -0
- package/docs/troubleshooting.md +89 -0
- package/llms.txt +107 -6
- package/openapi/agent-bridge-v2.openapi.json +9610 -0
- package/package.json +24 -4
- package/schemas/agent-bridge-v2.capabilities.json +1829 -0
- package/schemas/agent-bridge-v2.mcp.json +2074 -0
- package/schemas/agent-bridge-v2.schema.json +4560 -0
- package/sql/migrations/008_message_projects.sql +36 -0
- package/sql/migrations/009_mailbox_query_indexes.sql +28 -0
- package/sql/migrations/010_publisher_delivery_policy.sql +210 -0
- package/sql/migrations/011_credential_security.sql +875 -0
- package/sql/migrations/012_request_authority.sql +177 -0
- package/sql/migrations/013_row_isolation.sql +495 -0
- package/sql/migrations/014_owner_control_plane.sql +1641 -0
- package/sql/migrations/015_portable_archives.sql +1813 -0
- package/sql/migrations/016_native_dr_fence.sql +1005 -0
- package/bin/CLAUDE.md +0 -11
- package/dist/bridge-domain-BcnBeHOn.d.ts +0 -97
- package/dist/bridge-store-BuGjxTn4.d.ts +0 -61
- package/dist/chunk-4KAOBC5X.js.map +0 -1
- package/dist/chunk-6MAZ6YLZ.js +0 -146
- package/dist/chunk-6MAZ6YLZ.js.map +0 -1
- package/dist/chunk-AXL2I7FH.js.map +0 -1
- package/dist/chunk-BV6W4AJK.js +0 -211
- package/dist/chunk-BV6W4AJK.js.map +0 -1
- package/dist/chunk-CKSKUBDQ.js +0 -153
- package/dist/chunk-CKSKUBDQ.js.map +0 -1
- package/dist/chunk-JOUBDRYX.js +0 -272
- package/dist/chunk-JOUBDRYX.js.map +0 -1
- package/dist/chunk-JTC5YURG.js +0 -49
- package/dist/chunk-JTC5YURG.js.map +0 -1
- package/dist/chunk-O26W5QHS.js +0 -409
- package/dist/chunk-O26W5QHS.js.map +0 -1
- package/dist/chunk-WEULPMUY.js +0 -988
- package/dist/chunk-WEULPMUY.js.map +0 -1
- package/dist/chunk-YD6YJATN.js.map +0 -1
- package/dist/gateway-BULozv3K.d.ts +0 -54
package/dist/sqlite.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as BridgeMessage, c as BridgePrincipal, B as BridgeDelivery,
|
|
2
|
-
import {
|
|
1
|
+
import { b as BridgeMessage, c as BridgePrincipal, B as BridgeDelivery, g as DeliveryState, R as RetryPolicy, A as AgentPresence, a as BridgeDeliveryEvent } from './bridge-domain-CBX3IVqC.js';
|
|
2
|
+
import { d as MessageQuery, M as MessagePage, B as BridgeDiagnostics, I as InsertMessageResult, a as BridgeStore, C as ClaimOptions, c as DeliveryQuery, b as DeliveryPage, D as DeliveryEventPage } from './bridge-store-DPVSCwfs.js';
|
|
3
3
|
|
|
4
4
|
type PendingMessage = Omit<BridgeMessage, "sequence" | "createdAt">;
|
|
5
5
|
interface EdgeScope {
|
|
@@ -20,11 +20,24 @@ interface EdgeEnqueueResult {
|
|
|
20
20
|
}
|
|
21
21
|
interface EdgeStats {
|
|
22
22
|
pending: number;
|
|
23
|
+
due: number;
|
|
24
|
+
scheduled: number;
|
|
25
|
+
leased: number;
|
|
23
26
|
blocked: number;
|
|
24
27
|
cached: number;
|
|
25
28
|
pullCursor?: string;
|
|
26
29
|
lastSyncAt?: string;
|
|
27
30
|
lastError?: string;
|
|
31
|
+
oldestDueAt?: string;
|
|
32
|
+
queueLagMs: number;
|
|
33
|
+
oldestBlockedAt?: string;
|
|
34
|
+
blockedAgeMs: number | null;
|
|
35
|
+
blockedMaxAttempts: number;
|
|
36
|
+
blockedLastError?: string;
|
|
37
|
+
nextRetryAt?: string;
|
|
38
|
+
lastOutboundSyncAt?: string;
|
|
39
|
+
lastInboundSyncAt?: string;
|
|
40
|
+
lastAttemptAt?: string;
|
|
28
41
|
}
|
|
29
42
|
declare class EdgeConflictError extends Error {
|
|
30
43
|
readonly code = "edge_idempotency_conflict";
|
|
@@ -37,25 +50,30 @@ declare class SQLiteEdgeStore {
|
|
|
37
50
|
private readonly scope;
|
|
38
51
|
private readonly busyTimeoutMs;
|
|
39
52
|
private readonly db;
|
|
53
|
+
private readonly databasePath;
|
|
54
|
+
private readonly preexistingFiles;
|
|
40
55
|
private readonly key;
|
|
41
56
|
private initialized;
|
|
57
|
+
private initialization?;
|
|
42
58
|
constructor(path: string, scope: EdgeScope, busyTimeoutMs?: number);
|
|
43
59
|
private restrictFiles;
|
|
44
60
|
get scopeKey(): string;
|
|
45
61
|
initialize(): Promise<void>;
|
|
62
|
+
private initializeOnce;
|
|
46
63
|
private ready;
|
|
47
64
|
enqueue(input: PendingMessage, now?: Date): Promise<EdgeEnqueueResult>;
|
|
48
65
|
claimNext(now?: Date, leaseMs?: number): Promise<EdgeOutboxRecord | undefined>;
|
|
49
66
|
retry(record: EdgeOutboxRecord, error: string, availableAt: Date): Promise<void>;
|
|
50
|
-
block(record: EdgeOutboxRecord, error: string): Promise<void>;
|
|
51
|
-
commit(record: EdgeOutboxRecord, message: BridgeMessage,
|
|
67
|
+
block(record: EdgeOutboxRecord, error: string, now?: Date): Promise<void>;
|
|
68
|
+
commit(record: EdgeOutboxRecord, message: BridgeMessage, now?: Date): Promise<void>;
|
|
52
69
|
private cacheOne;
|
|
53
70
|
cachePage(messages: BridgeMessage[], cursor: string | undefined, now?: Date): Promise<void>;
|
|
54
71
|
cacheLatest(messages: BridgeMessage[], now?: Date): Promise<void>;
|
|
55
72
|
list(query?: MessageQuery): Promise<MessagePage>;
|
|
56
73
|
pullCursor(): Promise<string | undefined>;
|
|
57
74
|
noteError(error: string): Promise<void>;
|
|
58
|
-
|
|
75
|
+
noteAttempt(now?: Date): Promise<void>;
|
|
76
|
+
stats(now?: Date): Promise<EdgeStats>;
|
|
59
77
|
close(): Promise<void>;
|
|
60
78
|
}
|
|
61
79
|
|
|
@@ -66,6 +84,8 @@ interface SyncInsertResult extends InsertMessageResult {
|
|
|
66
84
|
interface CachedMessagePage extends MessagePage {
|
|
67
85
|
source: "remote" | "cache";
|
|
68
86
|
stale: boolean;
|
|
87
|
+
degraded: boolean;
|
|
88
|
+
acknowledgements: "authoritative" | "unknown";
|
|
69
89
|
lastSyncedAt?: string;
|
|
70
90
|
}
|
|
71
91
|
interface SyncReport {
|
|
@@ -82,12 +102,28 @@ interface SyncReport {
|
|
|
82
102
|
failureRetryable?: boolean;
|
|
83
103
|
}
|
|
84
104
|
interface SyncDiagnostics extends BridgeDiagnostics {
|
|
85
|
-
remoteReachable: boolean;
|
|
105
|
+
remoteReachable: boolean | null;
|
|
86
106
|
outboxPending: number;
|
|
87
107
|
outboxBlocked: number;
|
|
88
108
|
cachedMessages: number;
|
|
89
109
|
lastSyncAt?: string;
|
|
90
110
|
lastSyncError?: string;
|
|
111
|
+
outboxDue: number;
|
|
112
|
+
outboxScheduled: number;
|
|
113
|
+
outboxLeased: number;
|
|
114
|
+
outboxOldestDueAt?: string;
|
|
115
|
+
outboxQueueLagMs: number;
|
|
116
|
+
outboxOldestBlockedAt?: string;
|
|
117
|
+
outboxBlockedAgeMs: number | null;
|
|
118
|
+
outboxBlockedMaxAttempts: number;
|
|
119
|
+
outboxBlockedLastError?: string;
|
|
120
|
+
outboxNextRetryAt?: string;
|
|
121
|
+
lastOutboundSyncAt?: string;
|
|
122
|
+
lastInboundSyncAt?: string;
|
|
123
|
+
lastSyncAttemptAt?: string;
|
|
124
|
+
syncLoopState: "disabled" | "idle" | "running" | "backoff" | "stopped" | "failed";
|
|
125
|
+
syncLoopError?: string;
|
|
126
|
+
remoteError?: string;
|
|
91
127
|
}
|
|
92
128
|
interface SyncingBridgeStoreOptions {
|
|
93
129
|
now?: () => Date;
|
|
@@ -95,6 +131,8 @@ interface SyncingBridgeStoreOptions {
|
|
|
95
131
|
baseDelayMs?: number;
|
|
96
132
|
maxDelayMs?: number;
|
|
97
133
|
leaseMs?: number;
|
|
134
|
+
autoSync?: boolean;
|
|
135
|
+
idleDelayMs?: number;
|
|
98
136
|
}
|
|
99
137
|
declare function isRetryableSyncError(error: unknown): boolean;
|
|
100
138
|
declare class SyncingBridgeStore implements BridgeStore {
|
|
@@ -106,26 +144,54 @@ declare class SyncingBridgeStore implements BridgeStore {
|
|
|
106
144
|
private readonly baseDelayMs;
|
|
107
145
|
private readonly maxDelayMs;
|
|
108
146
|
private readonly leaseMs;
|
|
147
|
+
private readonly autoSync;
|
|
148
|
+
private readonly idleDelayMs;
|
|
109
149
|
private remoteReady;
|
|
150
|
+
private stopped;
|
|
151
|
+
private wakeTimer;
|
|
152
|
+
private wake;
|
|
153
|
+
private background;
|
|
154
|
+
private readonly closeController;
|
|
155
|
+
private backgroundError;
|
|
156
|
+
private wakeRequested;
|
|
157
|
+
private remoteReachable;
|
|
158
|
+
private loopState;
|
|
110
159
|
constructor(edge: SQLiteEdgeStore, remote: BridgeStore, principal: BridgePrincipal, options?: SyncingBridgeStoreOptions);
|
|
111
160
|
initialize(): Promise<void>;
|
|
161
|
+
private startTransportLoop;
|
|
162
|
+
private wait;
|
|
163
|
+
private wakeTransport;
|
|
164
|
+
private fatal;
|
|
165
|
+
private assertHealthy;
|
|
166
|
+
private transportLoop;
|
|
112
167
|
verifyRemote(): Promise<void>;
|
|
113
168
|
private ensureRemote;
|
|
114
169
|
private assertPrincipal;
|
|
115
170
|
private delay;
|
|
171
|
+
private cancelled;
|
|
116
172
|
private flushOne;
|
|
117
173
|
insertMessage(message: PendingMessage): Promise<SyncInsertResult>;
|
|
118
174
|
private pull;
|
|
119
175
|
sync(options?: {
|
|
120
176
|
maxPush?: number;
|
|
121
177
|
maxPages?: number;
|
|
178
|
+
signal?: AbortSignal;
|
|
122
179
|
}): Promise<SyncReport>;
|
|
123
180
|
listMessages(principal: BridgePrincipal, query?: MessageQuery): Promise<CachedMessagePage>;
|
|
124
|
-
recordReceipt(
|
|
181
|
+
recordReceipt(principal: BridgePrincipal, messageIds: string[], readAt?: Date): Promise<number>;
|
|
125
182
|
claimDelivery(principal: BridgePrincipal, options: ClaimOptions): Promise<BridgeDelivery | null>;
|
|
126
183
|
renewDelivery(principal: BridgePrincipal, deliveryId: string, leaseToken: string, leaseMs: number): Promise<BridgeDelivery | null>;
|
|
127
|
-
settleDelivery(principal: BridgePrincipal, deliveryId: string, leaseToken: string, state: Extract<DeliveryState, "acked" | "retrying" | "dead">, error
|
|
128
|
-
|
|
184
|
+
settleDelivery(principal: BridgePrincipal, deliveryId: string, leaseToken: string, state: Extract<DeliveryState, "acked" | "retrying" | "dead">, error?: string, _retryPolicy?: RetryPolicy): Promise<BridgeDelivery | null>;
|
|
185
|
+
listDeliveries(principal: BridgePrincipal, query?: DeliveryQuery): Promise<DeliveryPage>;
|
|
186
|
+
listDeliveryEvents(principal: BridgePrincipal, id: string, query?: {
|
|
187
|
+
cursor?: string;
|
|
188
|
+
limit?: number;
|
|
189
|
+
}): Promise<DeliveryEventPage>;
|
|
190
|
+
cancelDelivery(principal: BridgePrincipal, id: string): Promise<BridgeDelivery | null>;
|
|
191
|
+
requeueDelivery(principal: BridgePrincipal, id: string): Promise<BridgeDelivery | null>;
|
|
192
|
+
diagnostics(principal: BridgePrincipal, options?: {
|
|
193
|
+
mode?: "snapshot" | "probe";
|
|
194
|
+
}): Promise<SyncDiagnostics>;
|
|
129
195
|
heartbeat(principal: BridgePrincipal, leaseMs: number, runtimeType?: string, capabilities?: string[]): Promise<AgentPresence>;
|
|
130
196
|
listPresence(principal: BridgePrincipal): Promise<AgentPresence[]>;
|
|
131
197
|
close(): Promise<void>;
|
|
@@ -135,21 +201,37 @@ declare class SQLiteBridgeStore implements BridgeStore {
|
|
|
135
201
|
private readonly path;
|
|
136
202
|
private readonly busyTimeoutMs;
|
|
137
203
|
private readonly db;
|
|
204
|
+
private readonly databasePath;
|
|
205
|
+
private readonly preexistingFiles;
|
|
138
206
|
private initialized;
|
|
207
|
+
private initialization?;
|
|
139
208
|
constructor(path?: string, busyTimeoutMs?: number);
|
|
140
209
|
private restrictFiles;
|
|
141
210
|
initialize(): Promise<void>;
|
|
211
|
+
private initializeOnce;
|
|
142
212
|
private ready;
|
|
143
213
|
insertMessage(input: Omit<BridgeMessage, "sequence" | "createdAt">): Promise<InsertMessageResult>;
|
|
144
214
|
listMessages(principal: BridgePrincipal, query?: MessageQuery): Promise<MessagePage>;
|
|
145
|
-
recordReceipt(
|
|
215
|
+
recordReceipt(principal: BridgePrincipal, messageIds: string[], readAt?: Date): Promise<number>;
|
|
146
216
|
claimDelivery(principal: BridgePrincipal, options: ClaimOptions): Promise<BridgeDelivery | null>;
|
|
147
217
|
renewDelivery(principal: BridgePrincipal, id: string, token: string, leaseMs: number): Promise<BridgeDelivery | null>;
|
|
148
|
-
settleDelivery(principal: BridgePrincipal, id: string, token: string, state: "acked" | "retrying" | "dead", error
|
|
218
|
+
settleDelivery(principal: BridgePrincipal, id: string, token: string, state: "acked" | "retrying" | "dead", error?: string, _retryPolicy?: RetryPolicy): Promise<BridgeDelivery | null>;
|
|
149
219
|
diagnostics(principal: BridgePrincipal): Promise<BridgeDiagnostics>;
|
|
150
220
|
heartbeat(principal: BridgePrincipal, leaseMs: number, runtimeType?: string, capabilities?: string[]): Promise<AgentPresence>;
|
|
151
221
|
listPresence(principal: BridgePrincipal): Promise<AgentPresence[]>;
|
|
152
|
-
|
|
222
|
+
listDeliveries(principal: BridgePrincipal, query?: DeliveryQuery): Promise<{
|
|
223
|
+
deliveries: BridgeDelivery[];
|
|
224
|
+
cursor: string | undefined;
|
|
225
|
+
}>;
|
|
226
|
+
listDeliveryEvents(principal: BridgePrincipal, deliveryId: string, query?: {
|
|
227
|
+
cursor?: string;
|
|
228
|
+
limit?: number;
|
|
229
|
+
}): Promise<{
|
|
230
|
+
events: BridgeDeliveryEvent[];
|
|
231
|
+
cursor: string | undefined;
|
|
232
|
+
}>;
|
|
233
|
+
cancelDelivery(principal: BridgePrincipal, id: string): Promise<BridgeDelivery | null>;
|
|
234
|
+
requeueDelivery(principal: BridgePrincipal, id: string): Promise<BridgeDelivery | null>;
|
|
153
235
|
close(): Promise<void>;
|
|
154
236
|
}
|
|
155
237
|
|
package/dist/sqlite.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
EdgeConflictError,
|
|
4
|
-
SQLiteBridgeStore,
|
|
5
4
|
SQLiteEdgeStore,
|
|
6
5
|
SyncingBridgeStore,
|
|
7
6
|
edgeMessageFingerprint,
|
|
8
7
|
edgeScopeKey,
|
|
9
8
|
isRetryableSyncError,
|
|
10
9
|
stableIdempotency
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import
|
|
13
|
-
|
|
10
|
+
} from "./chunk-Q6PPMXJC.js";
|
|
11
|
+
import {
|
|
12
|
+
SQLiteBridgeStore
|
|
13
|
+
} from "./chunk-5GMB3A77.js";
|
|
14
|
+
import "./chunk-NCO7RLBM.js";
|
|
15
|
+
import "./chunk-VOQIDTCJ.js";
|
|
16
|
+
import "./chunk-BZLMF5O5.js";
|
|
14
17
|
export {
|
|
15
18
|
EdgeConflictError,
|
|
16
19
|
SQLiteBridgeStore,
|