@polpo-ai/drizzle 0.1.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.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/stores.test.d.ts +2 -0
  3. package/dist/__tests__/stores.test.d.ts.map +1 -0
  4. package/dist/__tests__/stores.test.js +922 -0
  5. package/dist/__tests__/stores.test.js.map +1 -0
  6. package/dist/index.d.ts +4811 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +129 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/migrate.d.ts +8 -0
  11. package/dist/migrate.d.ts.map +1 -0
  12. package/dist/migrate.js +214 -0
  13. package/dist/migrate.js.map +1 -0
  14. package/dist/schema/approvals.d.ts +413 -0
  15. package/dist/schema/approvals.d.ts.map +1 -0
  16. package/dist/schema/approvals.js +37 -0
  17. package/dist/schema/approvals.js.map +1 -0
  18. package/dist/schema/index.d.ts +17 -0
  19. package/dist/schema/index.d.ts.map +1 -0
  20. package/dist/schema/index.js +19 -0
  21. package/dist/schema/index.js.map +1 -0
  22. package/dist/schema/logs.d.ts +281 -0
  23. package/dist/schema/logs.d.ts.map +1 -0
  24. package/dist/schema/logs.js +33 -0
  25. package/dist/schema/logs.js.map +1 -0
  26. package/dist/schema/memory.d.ts +87 -0
  27. package/dist/schema/memory.d.ts.map +1 -0
  28. package/dist/schema/memory.js +13 -0
  29. package/dist/schema/memory.js.map +1 -0
  30. package/dist/schema/notifications.d.ts +521 -0
  31. package/dist/schema/notifications.d.ts.map +1 -0
  32. package/dist/schema/notifications.js +47 -0
  33. package/dist/schema/notifications.js.map +1 -0
  34. package/dist/schema/peers.d.ts +743 -0
  35. package/dist/schema/peers.d.ts.map +1 -0
  36. package/dist/schema/peers.js +71 -0
  37. package/dist/schema/peers.js.map +1 -0
  38. package/dist/schema/runs.d.ts +483 -0
  39. package/dist/schema/runs.d.ts.map +1 -0
  40. package/dist/schema/runs.js +41 -0
  41. package/dist/schema/runs.js.map +1 -0
  42. package/dist/schema/sessions.d.ts +389 -0
  43. package/dist/schema/sessions.d.ts.map +1 -0
  44. package/dist/schema/sessions.js +37 -0
  45. package/dist/schema/sessions.js.map +1 -0
  46. package/dist/schema/tasks.d.ts +1843 -0
  47. package/dist/schema/tasks.d.ts.map +1 -0
  48. package/dist/schema/tasks.js +135 -0
  49. package/dist/schema/tasks.js.map +1 -0
  50. package/dist/stores/approval-store.d.ts +19 -0
  51. package/dist/stores/approval-store.d.ts.map +1 -0
  52. package/dist/stores/approval-store.js +77 -0
  53. package/dist/stores/approval-store.js.map +1 -0
  54. package/dist/stores/checkpoint-store.d.ts +14 -0
  55. package/dist/stores/checkpoint-store.d.ts.map +1 -0
  56. package/dist/stores/checkpoint-store.js +44 -0
  57. package/dist/stores/checkpoint-store.js.map +1 -0
  58. package/dist/stores/config-store.d.ts +15 -0
  59. package/dist/stores/config-store.d.ts.map +1 -0
  60. package/dist/stores/config-store.js +31 -0
  61. package/dist/stores/config-store.js.map +1 -0
  62. package/dist/stores/delay-store.d.ts +14 -0
  63. package/dist/stores/delay-store.d.ts.map +1 -0
  64. package/dist/stores/delay-store.js +42 -0
  65. package/dist/stores/delay-store.js.map +1 -0
  66. package/dist/stores/index.d.ts +13 -0
  67. package/dist/stores/index.d.ts.map +1 -0
  68. package/dist/stores/index.js +12 -0
  69. package/dist/stores/index.js.map +1 -0
  70. package/dist/stores/log-store.d.ts +20 -0
  71. package/dist/stores/log-store.d.ts.map +1 -0
  72. package/dist/stores/log-store.js +87 -0
  73. package/dist/stores/log-store.js.map +1 -0
  74. package/dist/stores/memory-store.d.ts +14 -0
  75. package/dist/stores/memory-store.d.ts.map +1 -0
  76. package/dist/stores/memory-store.js +39 -0
  77. package/dist/stores/memory-store.js.map +1 -0
  78. package/dist/stores/notification-store.d.ts +20 -0
  79. package/dist/stores/notification-store.d.ts.map +1 -0
  80. package/dist/stores/notification-store.js +111 -0
  81. package/dist/stores/notification-store.js.map +1 -0
  82. package/dist/stores/peer-store.d.ts +40 -0
  83. package/dist/stores/peer-store.d.ts.map +1 -0
  84. package/dist/stores/peer-store.js +203 -0
  85. package/dist/stores/peer-store.js.map +1 -0
  86. package/dist/stores/run-store.d.ts +23 -0
  87. package/dist/stores/run-store.d.ts.map +1 -0
  88. package/dist/stores/run-store.js +120 -0
  89. package/dist/stores/run-store.js.map +1 -0
  90. package/dist/stores/session-store.d.ts +26 -0
  91. package/dist/stores/session-store.d.ts.map +1 -0
  92. package/dist/stores/session-store.js +166 -0
  93. package/dist/stores/session-store.js.map +1 -0
  94. package/dist/stores/task-store.d.ts +42 -0
  95. package/dist/stores/task-store.d.ts.map +1 -0
  96. package/dist/stores/task-store.js +387 -0
  97. package/dist/stores/task-store.js.map +1 -0
  98. package/dist/utils.d.ts +11 -0
  99. package/dist/utils.d.ts.map +1 -0
  100. package/dist/utils.js +24 -0
  101. package/dist/utils.js.map +1 -0
  102. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAmC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,GAAG,GAAG,aAAa,CAmBrD;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,GAAG,GAAG,aAAa,CAmBzD;AAID,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBxB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @polpo-ai/drizzle — Drizzle ORM store implementations for Polpo.
3
+ *
4
+ * Supports PostgreSQL (via postgres.js) and SQLite (via better-sqlite3).
5
+ *
6
+ * Usage:
7
+ * import { createPgStores } from "@polpo-ai/drizzle";
8
+ * import { drizzle } from "drizzle-orm/postgres-js";
9
+ * import postgres from "postgres";
10
+ *
11
+ * const sql = postgres("postgres://...");
12
+ * const db = drizzle(sql);
13
+ * const stores = createPgStores(db);
14
+ */
15
+ // ── Re-exports ────────────────────────────────────────────────────────
16
+ export * from "./stores/index.js";
17
+ export * from "./schema/index.js";
18
+ export { ensurePgSchema } from "./migrate.js";
19
+ // ── Schema sets ───────────────────────────────────────────────────────
20
+ import { tasksPg, missionsPg, metadataPg, processesPg, tasksSqlite, missionsSqlite, metadataSqlite, processesSqlite, } from "./schema/tasks.js";
21
+ import { runsPg, runsSqlite } from "./schema/runs.js";
22
+ import { sessionsPg, messagesPg, sessionsSqlite, messagesSqlite } from "./schema/sessions.js";
23
+ import { notificationsPg, notificationsSqlite } from "./schema/notifications.js";
24
+ import { logSessionsPg, logEntriesPg, logSessionsSqlite, logEntriesSqlite } from "./schema/logs.js";
25
+ import { approvalsPg, approvalsSqlite } from "./schema/approvals.js";
26
+ import { memoryPg, memorySqlite } from "./schema/memory.js";
27
+ import { peersPg, peerAllowlistPg, pairingRequestsPg, peerSessionsPg, peersSqlite, peerAllowlistSqlite, pairingRequestsSqlite, peerSessionsSqlite, } from "./schema/peers.js";
28
+ // ── Store classes ─────────────────────────────────────────────────────
29
+ import { DrizzleTaskStore } from "./stores/task-store.js";
30
+ import { DrizzleRunStore } from "./stores/run-store.js";
31
+ import { DrizzleSessionStore } from "./stores/session-store.js";
32
+ import { DrizzleNotificationStore } from "./stores/notification-store.js";
33
+ import { DrizzleLogStore } from "./stores/log-store.js";
34
+ import { DrizzleApprovalStore } from "./stores/approval-store.js";
35
+ import { DrizzleMemoryStore } from "./stores/memory-store.js";
36
+ import { DrizzlePeerStore } from "./stores/peer-store.js";
37
+ import { DrizzleCheckpointStore } from "./stores/checkpoint-store.js";
38
+ import { DrizzleDelayStore } from "./stores/delay-store.js";
39
+ import { DrizzleConfigStore } from "./stores/config-store.js";
40
+ // ── PostgreSQL factory ────────────────────────────────────────────────
41
+ /**
42
+ * Create all Drizzle stores backed by PostgreSQL.
43
+ *
44
+ * @param db A Drizzle database instance (e.g. from `drizzle(postgres(...))`)
45
+ */
46
+ export function createPgStores(db) {
47
+ return {
48
+ taskStore: new DrizzleTaskStore(db, {
49
+ tasks: tasksPg, missions: missionsPg, metadata: metadataPg, processes: processesPg,
50
+ }, "pg"),
51
+ runStore: new DrizzleRunStore(db, runsPg, "pg"),
52
+ sessionStore: new DrizzleSessionStore(db, sessionsPg, messagesPg, "pg"),
53
+ notificationStore: new DrizzleNotificationStore(db, notificationsPg, "pg"),
54
+ logStore: new DrizzleLogStore(db, logSessionsPg, logEntriesPg, "pg"),
55
+ approvalStore: new DrizzleApprovalStore(db, approvalsPg, "pg"),
56
+ memoryStore: new DrizzleMemoryStore(db, memoryPg),
57
+ peerStore: new DrizzlePeerStore(db, {
58
+ peers: peersPg, peerAllowlist: peerAllowlistPg,
59
+ pairingRequests: pairingRequestsPg, peerSessions: peerSessionsPg,
60
+ }),
61
+ checkpointStore: new DrizzleCheckpointStore(db, metadataPg, "pg"),
62
+ delayStore: new DrizzleDelayStore(db, metadataPg, "pg"),
63
+ configStore: new DrizzleConfigStore(db, metadataPg, "pg"),
64
+ };
65
+ }
66
+ // ── SQLite factory ────────────────────────────────────────────────────
67
+ /**
68
+ * Create all Drizzle stores backed by SQLite (better-sqlite3).
69
+ *
70
+ * @param db A Drizzle database instance (e.g. from `drizzle(new Database(...))`)
71
+ */
72
+ export function createSqliteStores(db) {
73
+ return {
74
+ taskStore: new DrizzleTaskStore(db, {
75
+ tasks: tasksSqlite, missions: missionsSqlite, metadata: metadataSqlite, processes: processesSqlite,
76
+ }, "sqlite"),
77
+ runStore: new DrizzleRunStore(db, runsSqlite, "sqlite"),
78
+ sessionStore: new DrizzleSessionStore(db, sessionsSqlite, messagesSqlite, "sqlite"),
79
+ notificationStore: new DrizzleNotificationStore(db, notificationsSqlite, "sqlite"),
80
+ logStore: new DrizzleLogStore(db, logSessionsSqlite, logEntriesSqlite, "sqlite"),
81
+ approvalStore: new DrizzleApprovalStore(db, approvalsSqlite, "sqlite"),
82
+ memoryStore: new DrizzleMemoryStore(db, memorySqlite),
83
+ peerStore: new DrizzlePeerStore(db, {
84
+ peers: peersSqlite, peerAllowlist: peerAllowlistSqlite,
85
+ pairingRequests: pairingRequestsSqlite, peerSessions: peerSessionsSqlite,
86
+ }),
87
+ checkpointStore: new DrizzleCheckpointStore(db, metadataSqlite, "sqlite"),
88
+ delayStore: new DrizzleDelayStore(db, metadataSqlite, "sqlite"),
89
+ configStore: new DrizzleConfigStore(db, metadataSqlite, "sqlite"),
90
+ };
91
+ }
92
+ // ── All PG table references (for drizzle-kit migrations) ──────────────
93
+ export const pgSchema = {
94
+ tasks: tasksPg,
95
+ missions: missionsPg,
96
+ metadata: metadataPg,
97
+ processes: processesPg,
98
+ runs: runsPg,
99
+ sessions: sessionsPg,
100
+ messages: messagesPg,
101
+ notifications: notificationsPg,
102
+ logSessions: logSessionsPg,
103
+ logEntries: logEntriesPg,
104
+ approvals: approvalsPg,
105
+ memory: memoryPg,
106
+ peers: peersPg,
107
+ peerAllowlist: peerAllowlistPg,
108
+ pairingRequests: pairingRequestsPg,
109
+ peerSessions: peerSessionsPg,
110
+ };
111
+ export const sqliteSchema = {
112
+ tasks: tasksSqlite,
113
+ missions: missionsSqlite,
114
+ metadata: metadataSqlite,
115
+ processes: processesSqlite,
116
+ runs: runsSqlite,
117
+ sessions: sessionsSqlite,
118
+ messages: messagesSqlite,
119
+ notifications: notificationsSqlite,
120
+ logSessions: logSessionsSqlite,
121
+ logEntries: logEntriesSqlite,
122
+ approvals: approvalsSqlite,
123
+ memory: memorySqlite,
124
+ peers: peersSqlite,
125
+ peerAllowlist: peerAllowlistSqlite,
126
+ pairingRequests: pairingRequestsSqlite,
127
+ peerSessions: peerSessionsSqlite,
128
+ };
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Ensure all PostgreSQL tables exist. Runs CREATE TABLE IF NOT EXISTS for each table.
3
+ * Safe to call on every startup — does nothing if tables already exist.
4
+ *
5
+ * @param db A Drizzle PostgreSQL database instance
6
+ */
7
+ export declare function ensurePgSchema(db: any): Promise<void>;
8
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA6M3D"}
@@ -0,0 +1,214 @@
1
+ import { sql } from "drizzle-orm";
2
+ /**
3
+ * Ensure all PostgreSQL tables exist. Runs CREATE TABLE IF NOT EXISTS for each table.
4
+ * Safe to call on every startup — does nothing if tables already exist.
5
+ *
6
+ * @param db A Drizzle PostgreSQL database instance
7
+ */
8
+ export async function ensurePgSchema(db) {
9
+ await db.execute(sql `
10
+ CREATE TABLE IF NOT EXISTS metadata (
11
+ key TEXT PRIMARY KEY,
12
+ value TEXT NOT NULL
13
+ );
14
+
15
+ CREATE TABLE IF NOT EXISTS tasks (
16
+ id TEXT PRIMARY KEY,
17
+ title TEXT NOT NULL,
18
+ description TEXT NOT NULL,
19
+ assign_to TEXT NOT NULL,
20
+ "group" TEXT,
21
+ mission_id TEXT,
22
+ depends_on JSONB NOT NULL DEFAULT '[]',
23
+ status VARCHAR(32) NOT NULL DEFAULT 'pending',
24
+ retries INTEGER NOT NULL DEFAULT 0,
25
+ max_retries INTEGER NOT NULL DEFAULT 2,
26
+ max_duration INTEGER,
27
+ retry_policy JSONB,
28
+ expectations JSONB NOT NULL DEFAULT '[]',
29
+ metrics JSONB NOT NULL DEFAULT '[]',
30
+ result JSONB,
31
+ phase VARCHAR(32),
32
+ fix_attempts INTEGER NOT NULL DEFAULT 0,
33
+ resolution_attempts INTEGER NOT NULL DEFAULT 0,
34
+ original_description TEXT,
35
+ session_id TEXT,
36
+ notifications JSONB,
37
+ outcomes JSONB,
38
+ expected_outcomes JSONB,
39
+ deadline TEXT,
40
+ priority TEXT,
41
+ side_effects INTEGER,
42
+ revision_count INTEGER,
43
+ created_at TEXT NOT NULL,
44
+ updated_at TEXT NOT NULL
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_pg_tasks_status ON tasks(status);
48
+ CREATE INDEX IF NOT EXISTS idx_pg_tasks_group ON tasks("group");
49
+ CREATE INDEX IF NOT EXISTS idx_pg_tasks_assign_to ON tasks(assign_to);
50
+ CREATE INDEX IF NOT EXISTS idx_pg_tasks_mission_id ON tasks(mission_id);
51
+
52
+ CREATE TABLE IF NOT EXISTS missions (
53
+ id TEXT PRIMARY KEY,
54
+ name TEXT NOT NULL UNIQUE,
55
+ data TEXT NOT NULL,
56
+ prompt TEXT,
57
+ status VARCHAR(32) NOT NULL DEFAULT 'draft',
58
+ schedule TEXT,
59
+ end_date TEXT,
60
+ quality_threshold TEXT,
61
+ deadline TEXT,
62
+ notifications JSONB,
63
+ execution_count INTEGER NOT NULL DEFAULT 0,
64
+ created_at TEXT NOT NULL,
65
+ updated_at TEXT NOT NULL
66
+ );
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_pg_missions_status ON missions(status);
69
+
70
+ CREATE TABLE IF NOT EXISTS processes (
71
+ agent_name TEXT NOT NULL,
72
+ pid INTEGER NOT NULL,
73
+ task_id TEXT NOT NULL,
74
+ started_at TEXT NOT NULL,
75
+ alive INTEGER NOT NULL DEFAULT 1,
76
+ activity JSONB NOT NULL DEFAULT '{}'
77
+ );
78
+
79
+ CREATE TABLE IF NOT EXISTS runs (
80
+ id TEXT PRIMARY KEY,
81
+ task_id TEXT NOT NULL,
82
+ pid INTEGER NOT NULL DEFAULT 0,
83
+ agent_name TEXT NOT NULL,
84
+ adapter_type TEXT NOT NULL,
85
+ session_id TEXT,
86
+ status VARCHAR(32) NOT NULL DEFAULT 'running',
87
+ started_at TEXT NOT NULL,
88
+ updated_at TEXT NOT NULL,
89
+ activity JSONB NOT NULL DEFAULT '{}',
90
+ result JSONB,
91
+ outcomes JSONB,
92
+ config_path TEXT NOT NULL
93
+ );
94
+
95
+ CREATE INDEX IF NOT EXISTS idx_pg_runs_status ON runs(status);
96
+ CREATE INDEX IF NOT EXISTS idx_pg_runs_task_id ON runs(task_id);
97
+
98
+ CREATE TABLE IF NOT EXISTS sessions (
99
+ id TEXT PRIMARY KEY,
100
+ title TEXT,
101
+ created_at TEXT NOT NULL,
102
+ updated_at TEXT NOT NULL
103
+ );
104
+
105
+ CREATE TABLE IF NOT EXISTS messages (
106
+ id TEXT PRIMARY KEY,
107
+ session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
108
+ role TEXT NOT NULL,
109
+ content TEXT NOT NULL,
110
+ ts TEXT NOT NULL,
111
+ tool_calls TEXT
112
+ );
113
+
114
+ CREATE INDEX IF NOT EXISTS idx_pg_messages_session ON messages(session_id, ts);
115
+
116
+ CREATE TABLE IF NOT EXISTS notifications (
117
+ id TEXT PRIMARY KEY,
118
+ timestamp TEXT NOT NULL,
119
+ rule_id TEXT NOT NULL,
120
+ rule_name TEXT NOT NULL,
121
+ channel TEXT NOT NULL,
122
+ channel_type TEXT NOT NULL,
123
+ status VARCHAR(32) NOT NULL,
124
+ error TEXT,
125
+ title TEXT NOT NULL,
126
+ body TEXT NOT NULL,
127
+ severity VARCHAR(16) NOT NULL,
128
+ source_event TEXT NOT NULL,
129
+ attachment_count INTEGER NOT NULL DEFAULT 0,
130
+ attachment_types JSONB
131
+ );
132
+
133
+ CREATE INDEX IF NOT EXISTS idx_pg_notifications_timestamp ON notifications(timestamp);
134
+ CREATE INDEX IF NOT EXISTS idx_pg_notifications_status ON notifications(status);
135
+ CREATE INDEX IF NOT EXISTS idx_pg_notifications_channel ON notifications(channel);
136
+ CREATE INDEX IF NOT EXISTS idx_pg_notifications_rule_id ON notifications(rule_id);
137
+
138
+ CREATE TABLE IF NOT EXISTS log_sessions (
139
+ id TEXT PRIMARY KEY,
140
+ started_at TEXT NOT NULL
141
+ );
142
+
143
+ CREATE TABLE IF NOT EXISTS log_entries (
144
+ id TEXT PRIMARY KEY,
145
+ session_id TEXT NOT NULL REFERENCES log_sessions(id) ON DELETE CASCADE,
146
+ ts TEXT NOT NULL,
147
+ event TEXT NOT NULL,
148
+ data JSONB
149
+ );
150
+
151
+ CREATE INDEX IF NOT EXISTS idx_pg_log_entries_session ON log_entries(session_id);
152
+ CREATE INDEX IF NOT EXISTS idx_pg_log_entries_ts ON log_entries(ts);
153
+
154
+ CREATE TABLE IF NOT EXISTS approvals (
155
+ id TEXT PRIMARY KEY,
156
+ gate_id TEXT NOT NULL,
157
+ gate_name TEXT NOT NULL,
158
+ task_id TEXT,
159
+ mission_id TEXT,
160
+ status VARCHAR(32) NOT NULL DEFAULT 'pending',
161
+ payload JSONB,
162
+ requested_at TEXT NOT NULL,
163
+ resolved_at TEXT,
164
+ resolved_by TEXT,
165
+ note TEXT
166
+ );
167
+
168
+ CREATE INDEX IF NOT EXISTS idx_pg_approvals_status ON approvals(status);
169
+ CREATE INDEX IF NOT EXISTS idx_pg_approvals_task_id ON approvals(task_id);
170
+
171
+ CREATE TABLE IF NOT EXISTS memory (
172
+ key TEXT PRIMARY KEY,
173
+ content TEXT NOT NULL DEFAULT ''
174
+ );
175
+
176
+ CREATE TABLE IF NOT EXISTS peers (
177
+ id TEXT PRIMARY KEY,
178
+ channel VARCHAR(32) NOT NULL,
179
+ external_id TEXT NOT NULL,
180
+ display_name TEXT,
181
+ first_seen_at TEXT NOT NULL,
182
+ last_seen_at TEXT NOT NULL,
183
+ linked_to TEXT
184
+ );
185
+
186
+ CREATE INDEX IF NOT EXISTS idx_pg_peers_channel ON peers(channel);
187
+ CREATE INDEX IF NOT EXISTS idx_pg_peers_external_id ON peers(external_id);
188
+
189
+ CREATE TABLE IF NOT EXISTS peer_allowlist (
190
+ peer_id TEXT PRIMARY KEY
191
+ );
192
+
193
+ CREATE TABLE IF NOT EXISTS pairing_requests (
194
+ id TEXT PRIMARY KEY,
195
+ peer_id TEXT NOT NULL,
196
+ channel VARCHAR(32) NOT NULL,
197
+ external_id TEXT NOT NULL,
198
+ display_name TEXT,
199
+ code TEXT NOT NULL UNIQUE,
200
+ created_at TEXT NOT NULL,
201
+ expires_at TEXT NOT NULL,
202
+ resolved INTEGER NOT NULL DEFAULT 0
203
+ );
204
+
205
+ CREATE INDEX IF NOT EXISTS idx_pg_pairing_code ON pairing_requests(code);
206
+ CREATE INDEX IF NOT EXISTS idx_pg_pairing_peer ON pairing_requests(peer_id);
207
+
208
+ CREATE TABLE IF NOT EXISTS peer_sessions (
209
+ peer_id TEXT PRIMARY KEY,
210
+ session_id TEXT NOT NULL
211
+ );
212
+ `);
213
+ }
214
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAO;IAC1C,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2MnB,CAAC,CAAC;AACL,CAAC"}