@dsh-enhanced/assistant-delivery 0.1.24 → 0.1.30

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.
Files changed (66) hide show
  1. package/README.md +81 -10
  2. package/lib/acceptance.d.ts +46 -0
  3. package/lib/acceptance.d.ts.map +1 -0
  4. package/lib/acceptance.js +2 -0
  5. package/lib/acceptance.js.map +1 -0
  6. package/lib/agent-runtime.d.ts +33 -3
  7. package/lib/agent-runtime.d.ts.map +1 -1
  8. package/lib/agent-runtime.js +835 -62
  9. package/lib/agent-runtime.js.map +1 -1
  10. package/lib/coordinator.d.ts +4 -1
  11. package/lib/coordinator.d.ts.map +1 -1
  12. package/lib/coordinator.js +9 -0
  13. package/lib/coordinator.js.map +1 -1
  14. package/lib/feedback-command.d.ts +21 -1
  15. package/lib/feedback-command.d.ts.map +1 -1
  16. package/lib/feedback-command.js +18 -0
  17. package/lib/feedback-command.js.map +1 -1
  18. package/lib/goal-wake-types.d.ts +93 -0
  19. package/lib/goal-wake-types.d.ts.map +1 -0
  20. package/lib/goal-wake-types.js +70 -0
  21. package/lib/goal-wake-types.js.map +1 -0
  22. package/lib/inbound-images.d.ts.map +1 -1
  23. package/lib/inbound-images.js +11 -9
  24. package/lib/inbound-images.js.map +1 -1
  25. package/lib/index.d.ts +4 -0
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +1 -0
  28. package/lib/index.js.map +1 -1
  29. package/lib/native-web-owner.d.ts +78 -0
  30. package/lib/native-web-owner.d.ts.map +1 -0
  31. package/lib/native-web-owner.js +291 -0
  32. package/lib/native-web-owner.js.map +1 -0
  33. package/lib/operator-snapshot.d.ts +80 -0
  34. package/lib/operator-snapshot.d.ts.map +1 -0
  35. package/lib/operator-snapshot.js +935 -0
  36. package/lib/operator-snapshot.js.map +1 -0
  37. package/lib/operator.d.ts +2 -0
  38. package/lib/operator.d.ts.map +1 -1
  39. package/lib/operator.js +10 -0
  40. package/lib/operator.js.map +1 -1
  41. package/lib/service.d.ts +63 -13
  42. package/lib/service.d.ts.map +1 -1
  43. package/lib/service.js +917 -349
  44. package/lib/service.js.map +1 -1
  45. package/lib/session-lease-runtime.d.ts +69 -0
  46. package/lib/session-lease-runtime.d.ts.map +1 -0
  47. package/lib/session-lease-runtime.js +395 -0
  48. package/lib/session-lease-runtime.js.map +1 -0
  49. package/lib/session-lease-types.d.ts +27 -0
  50. package/lib/session-lease-types.d.ts.map +1 -0
  51. package/lib/session-lease-types.js +2 -0
  52. package/lib/session-lease-types.js.map +1 -0
  53. package/lib/sqlite.d.ts +1 -1
  54. package/lib/sqlite.d.ts.map +1 -1
  55. package/lib/sqlite.js +201 -3
  56. package/lib/sqlite.js.map +1 -1
  57. package/lib/store.d.ts +133 -4
  58. package/lib/store.d.ts.map +1 -1
  59. package/lib/store.js +771 -43
  60. package/lib/store.js.map +1 -1
  61. package/lib/types.d.ts +9 -2
  62. package/lib/types.d.ts.map +1 -1
  63. package/lib/types.js.map +1 -1
  64. package/lib/version.d.ts +1 -1
  65. package/lib/version.js +1 -1
  66. package/package.json +61 -44
@@ -0,0 +1,69 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Agent, AgentHandle, CreateAgentOptions, ResumeAgentOptions } from '@deepseek-ai/dsh-agent';
3
+ import type { SessionLease, SessionLeaseClaim, SessionLeaseTarget } from './session-lease-types.js';
4
+ export interface SessionLeasePort {
5
+ leaseMs: number;
6
+ /** Whether this durable Session is Delivery-owned and must have a local execution lease. */
7
+ requiresLease(sessionId: string): boolean;
8
+ claim(target: SessionLeaseTarget, holderId: string, leaseMs: number): SessionLeaseClaim;
9
+ dispatch(lease: SessionLease): boolean;
10
+ valid(lease: SessionLease): boolean;
11
+ renew(lease: SessionLease, leaseMs: number): boolean;
12
+ finish(lease: SessionLease, input: {
13
+ quiescent: boolean;
14
+ }): boolean;
15
+ }
16
+ export declare class SessionLeaseUnavailable extends Error {
17
+ readonly kind: 'busy' | 'unknown' | 'denied';
18
+ constructor(kind: 'busy' | 'unknown' | 'denied');
19
+ }
20
+ /** One process-local owner of a durable token. Unknown is never a takeover grant. */
21
+ export declare class SessionExecutionLease {
22
+ #private;
23
+ readonly token: SessionLease;
24
+ private readonly port;
25
+ private readonly released;
26
+ readonly controller: AbortController;
27
+ readonly agents: Map<Agent, boolean>;
28
+ constructor(token: SessionLease, port: SessionLeasePort, outer: AbortSignal, released: () => void);
29
+ get signal(): AbortSignal;
30
+ assert(): void;
31
+ assertAgent(agent: Agent): void;
32
+ dispatch(): void;
33
+ attach(agent: Agent): void;
34
+ disposed(agent: Agent): void;
35
+ enter(): () => void;
36
+ cancel(reason?: unknown): void;
37
+ close(): void;
38
+ /** A rejected cold resume can leave an unobservable, abort-raced load behind. */
39
+ abandonConstruction(): void;
40
+ }
41
+ /** Shared by bound foreground work and unbound Session construction; wake must use this same port. */
42
+ export declare class DeliverySessionLeases {
43
+ #private;
44
+ private readonly ctx;
45
+ private readonly port;
46
+ constructor(ctx: Context, port: SessionLeasePort);
47
+ /** Host-only, one occurrence: a client source tag alone never grants owner authority. */
48
+ admitNativeInput(agent: Agent, input: {
49
+ requestId: string;
50
+ content: readonly unknown[];
51
+ onClaimed(turn: number): void;
52
+ }): {
53
+ inserted(): boolean;
54
+ dispose(): void;
55
+ };
56
+ get leaseMs(): number;
57
+ /**
58
+ * Use the host's one factory and the caller's ownership scope. These methods
59
+ * only consume an already admitted lease; they do not authorize Web input.
60
+ */
61
+ create(owner: Context, options: CreateAgentOptions): Promise<AgentHandle>;
62
+ resume(owner: Context, options: ResumeAgentOptions): Promise<AgentHandle>;
63
+ open(target: SessionLeaseTarget, signal: AbortSignal): SessionExecutionLease;
64
+ attach(agent: Agent): void;
65
+ assert(sessionId: string): void;
66
+ cancel(sessionId: string, reason: unknown): void;
67
+ disposed(agent: Agent): void;
68
+ }
69
+ //# sourceMappingURL=session-lease-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lease-runtime.d.ts","sourceRoot":"","sources":["../src/session-lease-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,395 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ // Cordis publishes this as an erased const enum. Keep the value type-checked
3
+ // against its exact member without requiring a nonexistent runtime export.
4
+ const activeFiberState = 2;
5
+ export class SessionLeaseUnavailable extends Error {
6
+ kind;
7
+ constructor(kind) {
8
+ super(`assistant-delivery: session execution ${kind}`);
9
+ this.kind = kind;
10
+ }
11
+ }
12
+ /** One process-local owner of a durable token. Unknown is never a takeover grant. */
13
+ export class SessionExecutionLease {
14
+ token;
15
+ port;
16
+ released;
17
+ controller = new AbortController();
18
+ agents = new Map();
19
+ #closed = false;
20
+ #released = false;
21
+ #pending = 0;
22
+ #unobservedCleanup = false;
23
+ #timer;
24
+ #removeAbort;
25
+ constructor(token, port, outer, released) {
26
+ this.token = token;
27
+ this.port = port;
28
+ this.released = released;
29
+ const abort = () => this.cancel(outer.reason);
30
+ outer.addEventListener('abort', abort, { once: true });
31
+ this.#removeAbort = () => outer.removeEventListener('abort', abort);
32
+ this.#timer = setInterval(() => {
33
+ try {
34
+ if (port.renew(token, port.leaseMs))
35
+ return;
36
+ }
37
+ catch { }
38
+ this.cancel();
39
+ }, Math.max(1, Math.floor(port.leaseMs / 3)));
40
+ this.#timer.unref?.();
41
+ if (outer.aborted)
42
+ abort();
43
+ }
44
+ get signal() { return this.controller.signal; }
45
+ assert() {
46
+ if (this.#closed || this.#released || this.signal.aborted)
47
+ throw new SessionLeaseUnavailable('denied');
48
+ try {
49
+ if (this.port.valid(this.token))
50
+ return;
51
+ }
52
+ catch { }
53
+ this.cancel();
54
+ throw new SessionLeaseUnavailable('denied');
55
+ }
56
+ assertAgent(agent) {
57
+ this.assert();
58
+ if (this.agents.get(agent) !== false)
59
+ throw new SessionLeaseUnavailable('denied');
60
+ }
61
+ dispatch() {
62
+ this.assert();
63
+ if (!this.port.dispatch(this.token)) {
64
+ this.cancel();
65
+ throw new SessionLeaseUnavailable('denied');
66
+ }
67
+ }
68
+ attach(agent) { this.assert(); this.agents.set(agent, false); }
69
+ disposed(agent) {
70
+ if (this.agents.has(agent))
71
+ this.agents.set(agent, true);
72
+ this.#settle();
73
+ }
74
+ enter() {
75
+ this.assert();
76
+ this.#pending += 1;
77
+ let done = false;
78
+ return () => { if (done)
79
+ return; done = true; this.#pending -= 1; this.#settle(); };
80
+ }
81
+ cancel(reason = new SessionLeaseUnavailable('denied')) {
82
+ if (!this.signal.aborted)
83
+ this.controller.abort(reason);
84
+ for (const [agent, disposed] of this.agents)
85
+ if (!disposed) {
86
+ try {
87
+ agent.cancel({ kind: 'hook', reason: 'assistant-delivery-session-lease-lost' });
88
+ }
89
+ catch { }
90
+ }
91
+ }
92
+ close() {
93
+ if (this.#closed)
94
+ return;
95
+ this.#closed = true;
96
+ clearInterval(this.#timer);
97
+ this.#removeAbort();
98
+ this.#settle();
99
+ }
100
+ /** A rejected cold resume can leave an unobservable, abort-raced load behind. */
101
+ abandonConstruction() {
102
+ this.#unobservedCleanup = true;
103
+ this.cancel();
104
+ this.close();
105
+ }
106
+ #settle() {
107
+ if (!this.#closed || this.#released)
108
+ return;
109
+ const quiescent = !this.#unobservedCleanup && this.#pending === 0 && [...this.agents.values()].every(Boolean);
110
+ try {
111
+ if (this.port.finish(this.token, { quiescent }) && quiescent) {
112
+ this.#released = true;
113
+ this.released();
114
+ }
115
+ }
116
+ catch { /* Store outage keeps the durable dispatched/unknown fence occupied. */ }
117
+ }
118
+ }
119
+ /** Shared by bound foreground work and unbound Session construction; wake must use this same port. */
120
+ export class DeliverySessionLeases {
121
+ ctx;
122
+ port;
123
+ #active = new Map();
124
+ #agents = new WeakMap();
125
+ #nativeInputs = new WeakMap();
126
+ #factoryGeneration = 0;
127
+ #live = true;
128
+ constructor(ctx, port) {
129
+ this.ctx = ctx;
130
+ this.port = port;
131
+ // Cordis synchronously notifies availability transitions and replacement.
132
+ // A new live provider must not make an old factory's abort look settled.
133
+ ctx.on('internal/service', name => {
134
+ if (name === 'agentLoop')
135
+ this.#factoryGeneration += 1;
136
+ });
137
+ const nativeInput = (agent, message, turn) => {
138
+ if (message.source !== undefined && message.source.kind !== 'user')
139
+ return;
140
+ const permit = this.#nativeInputs.get(agent);
141
+ const source = message.source;
142
+ try {
143
+ this.#agents.get(agent)?.assertAgent(agent);
144
+ if (permit !== undefined && source?.kind === 'user' && source.rpcId === permit.requestId
145
+ && JSON.stringify(message.content) === permit.content) {
146
+ if (turn === undefined && permit.message === undefined) {
147
+ permit.message = message;
148
+ return;
149
+ }
150
+ if (turn !== undefined && permit.message === message && !permit.claimed) {
151
+ permit.claimed = true;
152
+ permit.onClaimed(turn);
153
+ return;
154
+ }
155
+ }
156
+ }
157
+ catch { /* A stale or invalid exact admission cancels the whole lane. */ }
158
+ this.#agents.get(agent)?.cancel();
159
+ };
160
+ ctx.on('agent/inbox/inserted', ({ agent, message }) => nativeInput(agent, message), { prepend: true });
161
+ ctx.on('agent/inbox/claimed', ({ agent, message, turn }) => nativeInput(agent, message, turn), { prepend: true });
162
+ ctx.on('agent/request', async ({ agent }, next) => {
163
+ this.#assertAgent(agent);
164
+ const result = await next();
165
+ this.#assertAgent(agent);
166
+ return result;
167
+ }, { prepend: true });
168
+ ctx.on('tools/pre-execute', async ({ agent }, next) => {
169
+ this.#assertAgent(agent);
170
+ const result = await next();
171
+ this.#assertAgent(agent);
172
+ return result;
173
+ }, { prepend: true });
174
+ ctx.on('tools/execute', async ({ agent }, next) => {
175
+ const lease = this.#assertAgent(agent);
176
+ const done = lease?.enter();
177
+ try {
178
+ const result = await next();
179
+ this.#assertAgent(agent);
180
+ return result;
181
+ }
182
+ finally {
183
+ done?.();
184
+ }
185
+ }, { prepend: true });
186
+ ctx.inject(['tools'], runtime => runtime.tools.guard(({ agent }) => {
187
+ try {
188
+ this.#assertAgent(agent);
189
+ return undefined;
190
+ }
191
+ catch {
192
+ return 'assistant-delivery: session lease no longer authorizes this tool';
193
+ }
194
+ }));
195
+ ctx.on('llm/stream', this.#stream.bind(this), { prepend: true });
196
+ ctx.effect(() => () => {
197
+ this.#live = false;
198
+ for (const lease of this.#active.values()) {
199
+ lease.cancel();
200
+ lease.close();
201
+ }
202
+ }, 'assistant-delivery.session-leases');
203
+ }
204
+ /** Host-only, one occurrence: a client source tag alone never grants owner authority. */
205
+ admitNativeInput(agent, input) {
206
+ const lease = this.#agents.get(agent);
207
+ if (lease === undefined || this.#nativeInputs.has(agent))
208
+ throw new SessionLeaseUnavailable('denied');
209
+ lease.assertAgent(agent);
210
+ const permit = { requestId: input.requestId, content: JSON.stringify(input.content),
211
+ claimed: false, onClaimed: input.onClaimed, message: undefined };
212
+ this.#nativeInputs.set(agent, permit);
213
+ return { inserted: () => permit.message !== undefined, dispose: () => {
214
+ if (this.#nativeInputs.get(agent) === permit)
215
+ this.#nativeInputs.delete(agent);
216
+ } };
217
+ }
218
+ get leaseMs() { return this.port.leaseMs; }
219
+ /**
220
+ * Use the host's one factory and the caller's ownership scope. These methods
221
+ * only consume an already admitted lease; they do not authorize Web input.
222
+ */
223
+ create(owner, options) {
224
+ const agents = owner.reflect.trace(this.ctx.agents);
225
+ return this.#construct(owner, 'create', String(options.sessionId), options, (setup, signal) => agents.create({ ...options, setup, signal }));
226
+ }
227
+ resume(owner, options) {
228
+ const agents = owner.reflect.trace(this.ctx.agents);
229
+ return this.#construct(owner, 'resume', String(options.resumeSessionId), options, (setup, signal) => agents.resume({ ...options, setup, signal }));
230
+ }
231
+ async #construct(owner, kind, sessionId, options, factory) {
232
+ const lease = this.#active.get(sessionId);
233
+ if (lease === undefined)
234
+ throw new SessionLeaseUnavailable('denied');
235
+ lease.assert();
236
+ options.signal?.throwIfAborted();
237
+ const ownerAbort = new AbortController();
238
+ let constructing = true;
239
+ const unwatchOwner = owner.effect(() => () => {
240
+ if (constructing)
241
+ ownerAbort.abort(new SessionLeaseUnavailable('denied'));
242
+ }, 'assistant-delivery.agent-construction');
243
+ const signal = AbortSignal.any([lease.signal, ownerAbort.signal, ...(options.signal === undefined ? [] : [options.signal])]);
244
+ const factoryGeneration = this.#factoryGeneration;
245
+ const nativeFactory = this.ctx.get('agentLoop') !== undefined;
246
+ // A cold persistence load may not have produced an Agent yet. It still
247
+ // occupies the lease until the factory settles and native rollback drains.
248
+ let finishConstruction;
249
+ let prepared;
250
+ let native;
251
+ try {
252
+ finishConstruction = lease.enter();
253
+ native = await factory(async (agentCtx) => {
254
+ const agent = agentCtx.agent;
255
+ if (agent === undefined || String(agent.session.id) !== sessionId)
256
+ throw new SessionLeaseUnavailable('denied');
257
+ lease.attach(agent);
258
+ this.#agents.set(agent, lease);
259
+ prepared = agent;
260
+ const setup = await options.setup?.(agentCtx);
261
+ lease.assertAgent(agent);
262
+ // Preserve the native setup commit and revalidate at publication, not
263
+ // just before the last async setup operation returns.
264
+ return { commit: () => {
265
+ lease.assertAgent(agent);
266
+ setup?.commit();
267
+ lease.assertAgent(agent);
268
+ } };
269
+ }, signal);
270
+ if (native.agent !== prepared)
271
+ throw new SessionLeaseUnavailable('denied');
272
+ lease.assertAgent(native.agent);
273
+ const handle = native;
274
+ let disposal;
275
+ const drain = () => disposal ??= Promise.resolve().then(() => handle.dispose())
276
+ .then(() => lease.disposed(handle.agent));
277
+ let detached = false;
278
+ // Controller consumers may retain only the Agent. The owner's fiber
279
+ // must still await the native memoized disposer, not merely observe an
280
+ // idle status or a registry notification. This also covers concurrent
281
+ // teardown by the upstream factory's own owner effect.
282
+ const detachOwner = owner.effect(() => async () => {
283
+ if (detached)
284
+ return;
285
+ detached = true;
286
+ lease.cancel();
287
+ lease.close();
288
+ await drain();
289
+ }, 'assistant-delivery.owned-agent');
290
+ return { agent: handle.agent, dispose: async () => {
291
+ await drain();
292
+ if (!detached) {
293
+ detached = true;
294
+ await detachOwner();
295
+ }
296
+ } };
297
+ }
298
+ catch (error) {
299
+ // rc.1 races prepare against caller, owner and factory cancellation.
300
+ // Only an unchanged live native factory + live owner + non-aborted
301
+ // caller rules out all three abort branches. Otherwise the rejected
302
+ // public Promise says nothing about late preparation cleanup. Error
303
+ // names/text are deliberately not a settlement or release capability.
304
+ const loadSettled = nativeFactory && this.#live && !signal.aborted
305
+ && owner.fiber.state === activeFiberState
306
+ && factoryGeneration === this.#factoryGeneration
307
+ && this.ctx.get('agentLoop') !== undefined;
308
+ if (kind === 'resume' && prepared === undefined && !loadSettled)
309
+ lease.abandonConstruction();
310
+ // Once setup has received an Agent, rc.1 awaits its native rollback.
311
+ // Unpublished setup has no agent/disposed event: remember its exact
312
+ // object rather than marking every Agent with the same Session disposed.
313
+ if (native !== undefined)
314
+ await native.dispose();
315
+ if (prepared !== undefined)
316
+ lease.disposed(prepared);
317
+ throw error;
318
+ }
319
+ finally {
320
+ constructing = false;
321
+ try {
322
+ await unwatchOwner();
323
+ }
324
+ finally {
325
+ finishConstruction?.();
326
+ }
327
+ }
328
+ }
329
+ open(target, signal) {
330
+ if (!this.#live)
331
+ throw new SessionLeaseUnavailable('denied');
332
+ signal.throwIfAborted();
333
+ const claim = this.port.claim(target, `delivery-session-${randomUUID()}`, this.port.leaseMs);
334
+ if (claim.kind !== 'claimed')
335
+ throw new SessionLeaseUnavailable(claim.kind);
336
+ const lease = new SessionExecutionLease(claim.lease, this.port, signal, () => {
337
+ if (this.#active.get(claim.lease.sessionId) === lease)
338
+ this.#active.delete(claim.lease.sessionId);
339
+ });
340
+ this.#active.set(claim.lease.sessionId, lease);
341
+ return lease;
342
+ }
343
+ attach(agent) {
344
+ const lease = this.#active.get(String(agent.session.id));
345
+ if (lease === undefined)
346
+ throw new SessionLeaseUnavailable('denied');
347
+ lease.attach(agent);
348
+ this.#agents.set(agent, lease);
349
+ }
350
+ assert(sessionId) {
351
+ const lease = this.#active.get(sessionId);
352
+ if (lease === undefined)
353
+ throw new SessionLeaseUnavailable('denied');
354
+ lease.assert();
355
+ }
356
+ cancel(sessionId, reason) { this.#active.get(sessionId)?.cancel(reason); }
357
+ disposed(agent) { this.#agents.get(agent)?.disposed(agent); }
358
+ async *#stream(_options, next) {
359
+ const agent = this.ctx.get('agents')?.currentInitiator();
360
+ const lease = this.#assertAgent(agent);
361
+ const done = lease?.enter();
362
+ try {
363
+ for await (const chunk of next()) {
364
+ this.#assertAgent(agent);
365
+ yield chunk;
366
+ }
367
+ this.#assertAgent(agent);
368
+ }
369
+ finally {
370
+ done?.();
371
+ }
372
+ }
373
+ #assertAgent(agent) {
374
+ if (agent === undefined)
375
+ return undefined;
376
+ const lease = this.#agents.get(agent);
377
+ if (lease !== undefined) {
378
+ lease.assertAgent(agent);
379
+ return lease;
380
+ }
381
+ try {
382
+ if (!this.port.requiresLease(String(agent.session.id)))
383
+ return undefined;
384
+ }
385
+ catch {
386
+ // A failed ownership lookup must not grant native/Web execution.
387
+ }
388
+ try {
389
+ agent.cancel({ kind: 'hook', reason: 'assistant-delivery-session-lease-required' });
390
+ }
391
+ catch { }
392
+ throw new SessionLeaseUnavailable('denied');
393
+ }
394
+ }
395
+ //# sourceMappingURL=session-lease-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lease-runtime.js","sourceRoot":"","sources":["../src/session-lease-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ConversationBinding, ConversationRef, ExternalPrincipalKey } from './types.js';
2
+ export type SessionLeaseTarget = {
3
+ kind: 'bound';
4
+ binding: Readonly<ConversationBinding>;
5
+ } | {
6
+ kind: 'construction';
7
+ sessionId: string;
8
+ conversation: ConversationRef;
9
+ principal: ExternalPrincipalKey;
10
+ workspace: string;
11
+ agentPreset: string;
12
+ generation: number;
13
+ previous?: Readonly<ConversationBinding>;
14
+ };
15
+ export interface SessionLease {
16
+ sessionId: string;
17
+ holderId: string;
18
+ fencingToken: number;
19
+ leaseUntil: number;
20
+ }
21
+ export type SessionLeaseClaim = {
22
+ kind: 'claimed';
23
+ lease: SessionLease;
24
+ } | {
25
+ kind: 'busy' | 'unknown' | 'denied';
26
+ };
27
+ //# sourceMappingURL=session-lease-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lease-types.d.ts","sourceRoot":"","sources":["../src/session-lease-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE5F,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;CAAE,GACzD;IACA,IAAI,EAAE,cAAc,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,eAAe,CAAA;IAC7B,SAAS,EAAE,oBAAoB,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAA;CACzC,CAAA;AAEH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-lease-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-lease-types.js","sourceRoot":"","sources":["../src/session-lease-types.ts"],"names":[],"mappings":""}
package/lib/sqlite.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DatabaseSync } from 'node:sqlite';
2
- export declare const deliverySchemaVersion = 16;
2
+ export declare const deliverySchemaVersion = 20;
3
3
  export declare class DeliveryDatabaseError extends Error {
4
4
  readonly code: 'invalid-path' | 'schema-too-new';
5
5
  constructor(code: 'invalid-path' | 'schema-too-new', message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,qBAAqB,KAAK,CAAA;AA+fvC,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;gBAAvC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAI9E;AAmgBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAwB/D"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,qBAAqB,KAAK,CAAA;AA8qBvC,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;gBAAvC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAI9E;AAujBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAwB/D"}