swarm-mail 1.5.0 → 1.5.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/dist/index.d.ts CHANGED
@@ -33,6 +33,8 @@ export { createEvent } from "./streams/events";
33
33
  export { appendEvent, clearAdapterCache, getActiveReservations, getAgent, getEvalRecords, getEvalStats, getOldProjectDbPaths, readEvents, } from "./streams/index";
34
34
  export type { EvalRecord } from "./streams/projections-drizzle";
35
35
  export { acknowledgeSwarmMessage, checkSwarmHealth as checkSwarmMailHealth, getSwarmInbox, initSwarmAgent, readSwarmMessage, releaseSwarmFiles, reserveSwarmFiles, sendSwarmMessage, } from "./streams/swarm-mail";
36
+ export { createDurableStreamAdapter, type DurableStreamAdapter, type StreamEvent, } from "./streams/durable-adapter.js";
37
+ export { createDurableStreamServer, type DurableStreamServer, type DurableStreamServerConfig, } from "./streams/durable-server.js";
36
38
  export { agentActivity, checkpointFrequency, failedDecompositions, formatCSV, formatJSON, formatJSONL, formatTable, humanFeedback, lockContention, messageLatency, QueryBuilder, recoverySuccess, scopeViolations, strategySuccessRates, taskDuration, } from "./analytics/index.js";
37
39
  export type { AgentActivityFilters, FailedDecompositionsFilters, LockContentionFilters, MessageLatencyFilters, OutputFormat, QueryResult, StrategySuccessRatesFilters, } from "./analytics/index.js";
38
40
  export { ANALYTICS_QUERIES, runAnalyticsQuery } from "./analytics.js";
@@ -55,4 +57,5 @@ export { createDrizzleClient } from "./db/drizzle";
55
57
  export { withSqliteRetry } from "./db/retry";
56
58
  export { toDrizzleDb, toSwarmDb } from "./libsql.convenience";
57
59
  export { type MigrationOptions as PGliteMigrationOptions, type MigrationResult as PGliteMigrationResult, migratePGliteToLibSQL, pgliteExists, } from "./migrate-pglite-to-libsql";
60
+ export { warnPGliteDeprecation, wrapPGlite, } from "./pglite";
58
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -81331,6 +81331,33 @@ async function validateLibSQLMemorySchema(db) {
81331
81331
  }
81332
81332
  var EMBEDDING_DIM = 1024;
81333
81333
 
81334
+ // src/pglite.ts
81335
+ function warnPGliteDeprecation() {
81336
+ if (!_pgliteDeprecationWarned) {
81337
+ console.warn("[DEPRECATION] PGlite is deprecated and will be removed in the next major version. Please migrate to libSQL using migratePGliteToLibSQL().");
81338
+ _pgliteDeprecationWarned = true;
81339
+ }
81340
+ }
81341
+ function wrapPGlite(pglite) {
81342
+ warnPGliteDeprecation();
81343
+ return {
81344
+ async query(sql, params) {
81345
+ const result = await pglite.query(sql, params);
81346
+ return { rows: result.rows };
81347
+ },
81348
+ async exec(sql) {
81349
+ await pglite.exec(sql);
81350
+ },
81351
+ async transaction(fn2) {
81352
+ return await fn2(this);
81353
+ },
81354
+ async close() {
81355
+ await pglite.close();
81356
+ }
81357
+ };
81358
+ }
81359
+ var _pgliteDeprecationWarned = false;
81360
+
81334
81361
  // src/migrate-pglite-to-libsql.ts
81335
81362
  import { existsSync } from "node:fs";
81336
81363
  import { join as join8 } from "node:path";
@@ -81340,6 +81367,7 @@ function pgliteExists(path2) {
81340
81367
  return existsSync(pgVersionPath);
81341
81368
  }
81342
81369
  async function migratePGliteToLibSQL(options) {
81370
+ warnPGliteDeprecation();
81343
81371
  const {
81344
81372
  pglitePath,
81345
81373
  libsqlPath,
@@ -95630,7 +95658,7 @@ var require_session2 = __commonJS((exports, module) => {
95630
95658
  var import_session3 = require_session();
95631
95659
  var import_sql18 = require_sql();
95632
95660
  var import_utils13 = require_utils();
95633
- var import_pglite = __require("@electric-sql/pglite");
95661
+ var import_pglite2 = __require("@electric-sql/pglite");
95634
95662
 
95635
95663
  class PglitePreparedQuery extends import_session3.PgPreparedQuery {
95636
95664
  constructor(client, queryString, params, logger2, fields, name2, _isResponseInArrayMode, customResultMapper) {
@@ -95645,10 +95673,10 @@ var require_session2 = __commonJS((exports, module) => {
95645
95673
  this.rawQueryConfig = {
95646
95674
  rowMode: "object",
95647
95675
  parsers: {
95648
- [import_pglite.types.TIMESTAMP]: (value10) => value10,
95649
- [import_pglite.types.TIMESTAMPTZ]: (value10) => value10,
95650
- [import_pglite.types.INTERVAL]: (value10) => value10,
95651
- [import_pglite.types.DATE]: (value10) => value10,
95676
+ [import_pglite2.types.TIMESTAMP]: (value10) => value10,
95677
+ [import_pglite2.types.TIMESTAMPTZ]: (value10) => value10,
95678
+ [import_pglite2.types.INTERVAL]: (value10) => value10,
95679
+ [import_pglite2.types.DATE]: (value10) => value10,
95652
95680
  [1231]: (value10) => value10,
95653
95681
  [1115]: (value10) => value10,
95654
95682
  [1185]: (value10) => value10,
@@ -95659,10 +95687,10 @@ var require_session2 = __commonJS((exports, module) => {
95659
95687
  this.queryConfig = {
95660
95688
  rowMode: "array",
95661
95689
  parsers: {
95662
- [import_pglite.types.TIMESTAMP]: (value10) => value10,
95663
- [import_pglite.types.TIMESTAMPTZ]: (value10) => value10,
95664
- [import_pglite.types.INTERVAL]: (value10) => value10,
95665
- [import_pglite.types.DATE]: (value10) => value10,
95690
+ [import_pglite2.types.TIMESTAMP]: (value10) => value10,
95691
+ [import_pglite2.types.TIMESTAMPTZ]: (value10) => value10,
95692
+ [import_pglite2.types.INTERVAL]: (value10) => value10,
95693
+ [import_pglite2.types.DATE]: (value10) => value10,
95666
95694
  [1231]: (value10) => value10,
95667
95695
  [1115]: (value10) => value10,
95668
95696
  [1185]: (value10) => value10,
@@ -95767,7 +95795,7 @@ var require_driver = __commonJS((exports, module) => {
95767
95795
  drizzle: () => drizzle2
95768
95796
  });
95769
95797
  module.exports = __toCommonJS2(driver_exports);
95770
- var import_pglite = __require("@electric-sql/pglite");
95798
+ var import_pglite2 = __require("@electric-sql/pglite");
95771
95799
  var import_entity46 = require_entity();
95772
95800
  var import_logger3 = require_logger();
95773
95801
  var import_db3 = require_db();
@@ -95816,7 +95844,7 @@ var require_driver = __commonJS((exports, module) => {
95816
95844
  }
95817
95845
  function drizzle2(...params) {
95818
95846
  if (params[0] === undefined || typeof params[0] === "string") {
95819
- const instance = new import_pglite.PGlite(params[0]);
95847
+ const instance = new import_pglite2.PGlite(params[0]);
95820
95848
  return construct2(instance, params[1]);
95821
95849
  }
95822
95850
  if ((0, import_utils13.isConfig)(params[0])) {
@@ -95825,10 +95853,10 @@ var require_driver = __commonJS((exports, module) => {
95825
95853
  return construct2(client, drizzleConfig);
95826
95854
  if (typeof connection === "object") {
95827
95855
  const { dataDir, ...options } = connection;
95828
- const instance2 = new import_pglite.PGlite(dataDir, options);
95856
+ const instance2 = new import_pglite2.PGlite(dataDir, options);
95829
95857
  return construct2(instance2, drizzleConfig);
95830
95858
  }
95831
- const instance = new import_pglite.PGlite(connection);
95859
+ const instance = new import_pglite2.PGlite(connection);
95832
95860
  return construct2(instance, drizzleConfig);
95833
95861
  }
95834
95862
  return construct2(params[0], params[1]);
@@ -95945,6 +95973,7 @@ function toDrizzleDb(db2) {
95945
95973
  return createDrizzleClient(db2.getClient());
95946
95974
  }
95947
95975
  if (db2 && typeof db2.query === "function" && typeof db2.exec === "function") {
95976
+ warnPGliteDeprecation();
95948
95977
  const { drizzle: drizzle2 } = require_pglite();
95949
95978
  const { schema } = (init_schema(), __toCommonJS(exports_schema));
95950
95979
  return drizzle2(db2, { schema });
@@ -99394,6 +99423,181 @@ init_events();
99394
99423
  init_streams2();
99395
99424
  init_swarm_mail();
99396
99425
 
99426
+ // src/streams/durable-adapter.ts
99427
+ function createDurableStreamAdapter(swarmMail, projectKey) {
99428
+ return {
99429
+ async read(offset, limit) {
99430
+ const events2 = await swarmMail.readEvents({
99431
+ projectKey,
99432
+ afterSequence: offset,
99433
+ limit
99434
+ });
99435
+ return events2.map((event) => ({
99436
+ offset: event.sequence,
99437
+ data: JSON.stringify(event),
99438
+ timestamp: event.timestamp
99439
+ }));
99440
+ },
99441
+ async head() {
99442
+ return await swarmMail.getLatestSequence(projectKey);
99443
+ },
99444
+ subscribe(callback, startOffset) {
99445
+ let lastSequence = startOffset ?? 0;
99446
+ let isActive3 = true;
99447
+ let initialized = startOffset !== undefined;
99448
+ if (!initialized) {
99449
+ (async () => {
99450
+ lastSequence = await swarmMail.getLatestSequence(projectKey);
99451
+ initialized = true;
99452
+ })();
99453
+ }
99454
+ const pollInterval = setInterval(async () => {
99455
+ if (!isActive3 || !initialized)
99456
+ return;
99457
+ try {
99458
+ const events2 = await swarmMail.readEvents({
99459
+ projectKey,
99460
+ afterSequence: lastSequence,
99461
+ limit: 100
99462
+ });
99463
+ for (const event of events2) {
99464
+ if (!isActive3)
99465
+ break;
99466
+ const streamEvent = {
99467
+ offset: event.sequence,
99468
+ data: JSON.stringify(event),
99469
+ timestamp: event.timestamp
99470
+ };
99471
+ callback(streamEvent);
99472
+ lastSequence = event.sequence;
99473
+ }
99474
+ } catch (error48) {
99475
+ console.error("[DurableStreamAdapter] Poll error:", error48);
99476
+ }
99477
+ }, 100);
99478
+ return () => {
99479
+ isActive3 = false;
99480
+ clearInterval(pollInterval);
99481
+ };
99482
+ }
99483
+ };
99484
+ }
99485
+ // src/streams/durable-server.ts
99486
+ function createDurableStreamServer(config3) {
99487
+ const { adapter: adapter5, port: port3 = 4483, projectKey: configProjectKey } = config3;
99488
+ let bunServer = null;
99489
+ const subscriptions = new Map;
99490
+ let subscriptionCounter = 0;
99491
+ const url4 = `http://localhost:${port3}`;
99492
+ async function start5() {
99493
+ if (bunServer) {
99494
+ throw new Error("Server is already running");
99495
+ }
99496
+ bunServer = Bun.serve({
99497
+ port: port3,
99498
+ idleTimeout: 120,
99499
+ async fetch(req) {
99500
+ const url5 = new URL(req.url);
99501
+ const match44 = url5.pathname.match(/^\/streams\/(.+)$/);
99502
+ if (!match44) {
99503
+ return new Response("Not Found", { status: 404 });
99504
+ }
99505
+ const requestedProjectKey = decodeURIComponent(match44[1]);
99506
+ if (configProjectKey && configProjectKey !== requestedProjectKey) {
99507
+ return new Response("Project not found", { status: 404 });
99508
+ }
99509
+ const offsetParam = url5.searchParams.get("offset");
99510
+ const liveParam = url5.searchParams.get("live");
99511
+ const limitParam = url5.searchParams.get("limit");
99512
+ const offset = offsetParam ? Number.parseInt(offsetParam, 10) : 0;
99513
+ const live6 = liveParam === "true";
99514
+ const limit = limitParam ? Number.parseInt(limitParam, 10) : 100;
99515
+ if (Number.isNaN(offset) || offset < 0) {
99516
+ return new Response("Invalid offset parameter", { status: 400 });
99517
+ }
99518
+ if (!live6) {
99519
+ const events2 = await adapter5.read(offset, limit);
99520
+ return new Response(JSON.stringify(events2), {
99521
+ status: 200,
99522
+ headers: {
99523
+ "Content-Type": "application/json"
99524
+ }
99525
+ });
99526
+ }
99527
+ const stream2 = new ReadableStream({
99528
+ async start(controller) {
99529
+ const encoder2 = new TextEncoder;
99530
+ controller.enqueue(encoder2.encode(`: connected
99531
+
99532
+ `));
99533
+ const existingEvents = await adapter5.read(offset, limit);
99534
+ for (const event of existingEvents) {
99535
+ const sse = `data: ${JSON.stringify(event)}
99536
+
99537
+ `;
99538
+ controller.enqueue(encoder2.encode(sse));
99539
+ }
99540
+ const subscriptionId = subscriptionCounter++;
99541
+ const unsubscribe = adapter5.subscribe((event) => {
99542
+ if (event.offset > offset) {
99543
+ try {
99544
+ const sse = `data: ${JSON.stringify(event)}
99545
+
99546
+ `;
99547
+ controller.enqueue(encoder2.encode(sse));
99548
+ } catch (error48) {
99549
+ console.error("Error sending event:", error48);
99550
+ }
99551
+ }
99552
+ }, offset);
99553
+ subscriptions.set(subscriptionId, { unsubscribe, controller });
99554
+ const cleanup = () => {
99555
+ const sub = subscriptions.get(subscriptionId);
99556
+ if (sub) {
99557
+ sub.unsubscribe();
99558
+ subscriptions.delete(subscriptionId);
99559
+ }
99560
+ };
99561
+ req.signal.addEventListener("abort", () => {
99562
+ cleanup();
99563
+ try {
99564
+ controller.close();
99565
+ } catch {}
99566
+ });
99567
+ },
99568
+ cancel() {}
99569
+ });
99570
+ return new Response(stream2, {
99571
+ status: 200,
99572
+ headers: {
99573
+ "Content-Type": "text/event-stream",
99574
+ "Cache-Control": "no-cache",
99575
+ Connection: "keep-alive"
99576
+ }
99577
+ });
99578
+ }
99579
+ });
99580
+ }
99581
+ async function stop3() {
99582
+ if (!bunServer) {
99583
+ return;
99584
+ }
99585
+ for (const { unsubscribe, controller } of subscriptions.values()) {
99586
+ unsubscribe();
99587
+ try {
99588
+ controller.close();
99589
+ } catch {}
99590
+ }
99591
+ subscriptions.clear();
99592
+ bunServer.stop();
99593
+ bunServer = null;
99594
+ }
99595
+ return {
99596
+ start: start5,
99597
+ stop: stop3,
99598
+ url: url4
99599
+ };
99600
+ }
99397
99601
  // src/analytics/formatters.ts
99398
99602
  function formatTable(result) {
99399
99603
  const { columns: columns2, rows, rowCount } = result;
@@ -101502,7 +101706,7 @@ function getHiveDrizzle(db2) {
101502
101706
  }
101503
101707
  async function resolvePartialIdDrizzle(adapter5, projectKey, partialHash) {
101504
101708
  const db2 = getHiveDrizzle(await adapter5.getDatabase());
101505
- const pattern2 = `%-${partialHash}%-%`;
101709
+ const pattern2 = `%${partialHash}%`;
101506
101710
  const results = await db2.select().from(beads).where(and3(eq(beads.project_key, projectKey), isNull2(beads.deleted_at), like(beads.id, pattern2)));
101507
101711
  if (results.length === 0) {
101508
101712
  return null;
@@ -102440,8 +102644,10 @@ init_libsql_convenience();
102440
102644
  init_migrate_pglite_to_libsql();
102441
102645
  var SWARM_MAIL_VERSION = "0.1.0";
102442
102646
  export {
102647
+ wrapPGlite,
102443
102648
  wouldCreateCycle,
102444
102649
  withSqliteRetry,
102650
+ warnPGliteDeprecation,
102445
102651
  validateLibSQLStreamsSchema,
102446
102652
  validateLibSQLMemorySchema,
102447
102653
  updateProjections,
@@ -102553,6 +102759,8 @@ export {
102553
102759
  createInMemoryDb,
102554
102760
  createHiveAdapter,
102555
102761
  createEvent,
102762
+ createDurableStreamServer,
102763
+ createDurableStreamAdapter,
102556
102764
  createDrizzleClient,
102557
102765
  createHiveAdapter as createBeadsAdapter,
102558
102766
  computeContentHash,
@@ -1 +1 @@
1
- {"version":3,"file":"libsql.convenience.d.ts","sourceRoot":"","sources":["../src/libsql.convenience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAajE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAW7D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAO3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAgB5C"}
1
+ {"version":3,"file":"libsql.convenience.d.ts","sourceRoot":"","sources":["../src/libsql.convenience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAU3D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAajE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAW7D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAO3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAiB5C"}
@@ -68,6 +68,9 @@ export interface MigrationResult {
68
68
  export declare function pgliteExists(path: string): boolean;
69
69
  /**
70
70
  * Migrate all data from PGlite to libSQL
71
+ *
72
+ * @deprecated This is the last version supporting PGlite migration.
73
+ * PGlite support will be removed in the next major version.
71
74
  */
72
75
  export declare function migratePGliteToLibSQL(options: MigrationOptions): Promise<MigrationResult>;
73
76
  //# sourceMappingURL=migrate-pglite-to-libsql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-pglite-to-libsql.d.ts","sourceRoot":"","sources":["../src/migrate-pglite-to-libsql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA4E1B"}
1
+ {"version":3,"file":"migrate-pglite-to-libsql.d.ts","sourceRoot":"","sources":["../src/migrate-pglite-to-libsql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+E1B"}
package/dist/pglite.d.ts CHANGED
@@ -1,16 +1,63 @@
1
1
  /**
2
- * PGLite Compatibility Shim
2
+ * PGlite Adapter (DEPRECATED)
3
3
  *
4
- * Provides wrapPGlite for tests that still use PGLite directly.
5
- * This is a temporary shim during the libSQL migration.
4
+ * This module provides backward compatibility for PGlite databases.
5
+ * It wraps PGlite instances as DatabaseAdapter and warns about deprecation.
6
6
  *
7
- * @deprecated Use libSQL adapter instead. This file will be removed.
7
+ * @deprecated This entire module will be removed in the next major version.
8
+ * Migrate to libSQL using migratePGliteToLibSQL().
9
+ *
10
+ * @module pglite
8
11
  */
9
12
  import type { DatabaseAdapter } from "./types/database.js";
13
+ /**
14
+ * Reset deprecation flag (for testing only)
15
+ * @internal
16
+ */
17
+ export declare function _resetDeprecationFlag(): void;
18
+ /**
19
+ * Warn about PGlite deprecation (once per session)
20
+ *
21
+ * Logs a deprecation warning to console.warn() on first call.
22
+ * Subsequent calls are silent to avoid log spam.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * import { warnPGliteDeprecation } from 'swarm-mail';
27
+ *
28
+ * warnPGliteDeprecation(); // Warns
29
+ * warnPGliteDeprecation(); // Silent
30
+ * ```
31
+ */
32
+ export declare function warnPGliteDeprecation(): void;
10
33
  /**
11
34
  * Wrap a PGlite instance as a DatabaseAdapter
12
35
  *
13
- * @deprecated Use createLibSQLAdapter instead
36
+ * Provides a DatabaseAdapter interface around a PGlite instance.
37
+ * Warns about deprecation on first call.
38
+ *
39
+ * @param pglite - PGlite database instance
40
+ * @returns DatabaseAdapter wrapping the PGlite instance
41
+ *
42
+ * @deprecated Use libSQL via createLibSQLAdapter() instead.
43
+ * This function will be removed in the next major version.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { PGlite } from '@electric-sql/pglite';
48
+ * import { wrapPGlite } from 'swarm-mail';
49
+ *
50
+ * const pglite = await PGlite.create({ dataDir: './data' });
51
+ * const adapter = wrapPGlite(pglite);
52
+ *
53
+ * await adapter.query('SELECT * FROM users');
54
+ * ```
14
55
  */
15
- export declare function wrapPGlite(pglite: any): DatabaseAdapter;
56
+ export declare function wrapPGlite(pglite: {
57
+ query: (sql: string, params?: unknown[]) => Promise<{
58
+ rows: unknown[];
59
+ }>;
60
+ exec: (sql: string) => Promise<void>;
61
+ close: () => Promise<void>;
62
+ }): DatabaseAdapter;
16
63
  //# sourceMappingURL=pglite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,CA0CvD"}
1
+ {"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ3D;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAClC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,GAAG,eAAe,CAkBlB"}
@@ -53,9 +53,10 @@ export interface DurableStreamAdapter {
53
53
  * Only delivers events that arrive AFTER subscription starts.
54
54
  *
55
55
  * @param callback - Called with each new event
56
+ * @param startOffset - Optional offset to start from (avoids async race)
56
57
  * @returns Unsubscribe function
57
58
  */
58
- subscribe(callback: (event: StreamEvent) => void): () => void;
59
+ subscribe(callback: (event: StreamEvent) => void, startOffset?: number): () => void;
59
60
  }
60
61
  /**
61
62
  * Create a DurableStreamAdapter for a specific project
@@ -1 +1 @@
1
- {"version":3,"file":"durable-adapter.d.ts","sourceRoot":"","sources":["../../src/streams/durable-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5D;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC/D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,GACjB,oBAAoB,CAqEtB"}
1
+ {"version":3,"file":"durable-adapter.d.ts","sourceRoot":"","sources":["../../src/streams/durable-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5D;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CACrF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,MAAM,GACjB,oBAAoB,CA0EtB"}
@@ -24,10 +24,12 @@ import type { DurableStreamAdapter } from "./durable-adapter.js";
24
24
  * Configuration for the Durable Stream HTTP server
25
25
  */
26
26
  export interface DurableStreamServerConfig {
27
- /** Adapter for reading events */
27
+ /** Adapter for reading events (single project) */
28
28
  adapter: DurableStreamAdapter;
29
29
  /** Port to listen on (default 4483 - HIVE on phone keypad) */
30
30
  port?: number;
31
+ /** Optional project key (for URL matching, defaults to "*" = any) */
32
+ projectKey?: string;
31
33
  }
32
34
  /**
33
35
  * Durable Stream HTTP server interface
@@ -1 +1 @@
1
- {"version":3,"file":"durable-server.d.ts","sourceRoot":"","sources":["../../src/streams/durable-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,sBAAsB,CAAC;AAK9E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,sDAAsD;IACtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,yBAAyB,GAChC,mBAAmB,CAmJrB"}
1
+ {"version":3,"file":"durable-server.d.ts","sourceRoot":"","sources":["../../src/streams/durable-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAe,MAAM,sBAAsB,CAAC;AAK9E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,kDAAkD;IAClD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,sDAAsD;IACtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,yBAAyB,GAChC,mBAAmB,CA+JrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swarm-mail",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Event sourcing primitives for multi-agent coordination. Local-first, no external servers.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",