@polpo-ai/drizzle 0.1.2 → 0.2.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.
Files changed (64) hide show
  1. package/dist/__tests__/stores.test.js +3 -3
  2. package/dist/__tests__/stores.test.js.map +1 -1
  3. package/dist/index.d.ts +1703 -703
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +23 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/migrate.d.ts.map +1 -1
  8. package/dist/migrate.js +39 -0
  9. package/dist/migrate.js.map +1 -1
  10. package/dist/schema/index.d.ts +6 -0
  11. package/dist/schema/index.d.ts.map +1 -1
  12. package/dist/schema/index.js +6 -0
  13. package/dist/schema/index.js.map +1 -1
  14. package/dist/schema/memory.d.ts +7 -0
  15. package/dist/schema/memory.d.ts.map +1 -1
  16. package/dist/schema/memory.js +7 -0
  17. package/dist/schema/memory.js.map +1 -1
  18. package/dist/schema/playbooks.d.ts +339 -0
  19. package/dist/schema/playbooks.d.ts.map +1 -0
  20. package/dist/schema/playbooks.js +27 -0
  21. package/dist/schema/playbooks.js.map +1 -0
  22. package/dist/schema/sessions.d.ts +36 -0
  23. package/dist/schema/sessions.d.ts.map +1 -1
  24. package/dist/schema/sessions.js +2 -0
  25. package/dist/schema/sessions.js.map +1 -1
  26. package/dist/schema/teams.d.ts +353 -0
  27. package/dist/schema/teams.d.ts.map +1 -0
  28. package/dist/schema/teams.js +31 -0
  29. package/dist/schema/teams.js.map +1 -0
  30. package/dist/schema/vault.d.ts +267 -0
  31. package/dist/schema/vault.d.ts.map +1 -0
  32. package/dist/schema/vault.js +27 -0
  33. package/dist/schema/vault.js.map +1 -0
  34. package/dist/stores/agent-store.d.ts +24 -0
  35. package/dist/stores/agent-store.d.ts.map +1 -0
  36. package/dist/stores/agent-store.js +114 -0
  37. package/dist/stores/agent-store.js.map +1 -0
  38. package/dist/stores/index.d.ts +4 -0
  39. package/dist/stores/index.d.ts.map +1 -1
  40. package/dist/stores/index.js +4 -0
  41. package/dist/stores/index.js.map +1 -1
  42. package/dist/stores/memory-store.d.ts +9 -5
  43. package/dist/stores/memory-store.d.ts.map +1 -1
  44. package/dist/stores/memory-store.js +28 -14
  45. package/dist/stores/memory-store.js.map +1 -1
  46. package/dist/stores/playbook-store.d.ts +22 -0
  47. package/dist/stores/playbook-store.d.ts.map +1 -0
  48. package/dist/stores/playbook-store.js +88 -0
  49. package/dist/stores/playbook-store.js.map +1 -0
  50. package/dist/stores/session-store.d.ts +2 -2
  51. package/dist/stores/session-store.d.ts.map +1 -1
  52. package/dist/stores/session-store.js +21 -5
  53. package/dist/stores/session-store.js.map +1 -1
  54. package/dist/stores/task-store.js +3 -3
  55. package/dist/stores/task-store.js.map +1 -1
  56. package/dist/stores/team-store.d.ts +21 -0
  57. package/dist/stores/team-store.d.ts.map +1 -0
  58. package/dist/stores/team-store.js +109 -0
  59. package/dist/stores/team-store.js.map +1 -0
  60. package/dist/stores/vault-store.d.ts +44 -0
  61. package/dist/stores/vault-store.d.ts.map +1 -0
  62. package/dist/stores/vault-store.js +144 -0
  63. package/dist/stores/vault-store.js.map +1 -0
  64. package/package.json +4 -3
@@ -0,0 +1,267 @@
1
+ export declare const vaultSqlite: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "vault";
3
+ schema: undefined;
4
+ columns: {
5
+ agent: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "agent";
7
+ tableName: "vault";
8
+ dataType: "string";
9
+ columnType: "SQLiteText";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: false;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {
22
+ length: number | undefined;
23
+ }>;
24
+ service: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "service";
26
+ tableName: "vault";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
43
+ type: import("drizzle-orm/sqlite-core").SQLiteColumn<{
44
+ name: "type";
45
+ tableName: "vault";
46
+ dataType: "string";
47
+ columnType: "SQLiteText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: true;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {
60
+ length: number | undefined;
61
+ }>;
62
+ label: import("drizzle-orm/sqlite-core").SQLiteColumn<{
63
+ name: "label";
64
+ tableName: "vault";
65
+ dataType: "string";
66
+ columnType: "SQLiteText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: false;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {
79
+ length: number | undefined;
80
+ }>;
81
+ credentials: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
+ name: "credentials";
83
+ tableName: "vault";
84
+ dataType: "string";
85
+ columnType: "SQLiteText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: true;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {
98
+ length: number | undefined;
99
+ }>;
100
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "created_at";
102
+ tableName: "vault";
103
+ dataType: "string";
104
+ columnType: "SQLiteText";
105
+ data: string;
106
+ driverParam: string;
107
+ notNull: true;
108
+ hasDefault: false;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: [string, ...string[]];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {
117
+ length: number | undefined;
118
+ }>;
119
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
+ name: "updated_at";
121
+ tableName: "vault";
122
+ dataType: "string";
123
+ columnType: "SQLiteText";
124
+ data: string;
125
+ driverParam: string;
126
+ notNull: true;
127
+ hasDefault: false;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: [string, ...string[]];
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {
136
+ length: number | undefined;
137
+ }>;
138
+ };
139
+ dialect: "sqlite";
140
+ }>;
141
+ export declare const vaultPg: import("drizzle-orm/pg-core").PgTableWithColumns<{
142
+ name: "vault";
143
+ schema: undefined;
144
+ columns: {
145
+ agent: import("drizzle-orm/pg-core").PgColumn<{
146
+ name: "agent";
147
+ tableName: "vault";
148
+ dataType: "string";
149
+ columnType: "PgText";
150
+ data: string;
151
+ driverParam: string;
152
+ notNull: true;
153
+ hasDefault: false;
154
+ isPrimaryKey: false;
155
+ isAutoincrement: false;
156
+ hasRuntimeDefault: false;
157
+ enumValues: [string, ...string[]];
158
+ baseColumn: never;
159
+ identity: undefined;
160
+ generated: undefined;
161
+ }, {}, {}>;
162
+ service: import("drizzle-orm/pg-core").PgColumn<{
163
+ name: "service";
164
+ tableName: "vault";
165
+ dataType: "string";
166
+ columnType: "PgText";
167
+ data: string;
168
+ driverParam: string;
169
+ notNull: true;
170
+ hasDefault: false;
171
+ isPrimaryKey: false;
172
+ isAutoincrement: false;
173
+ hasRuntimeDefault: false;
174
+ enumValues: [string, ...string[]];
175
+ baseColumn: never;
176
+ identity: undefined;
177
+ generated: undefined;
178
+ }, {}, {}>;
179
+ type: import("drizzle-orm/pg-core").PgColumn<{
180
+ name: "type";
181
+ tableName: "vault";
182
+ dataType: "string";
183
+ columnType: "PgText";
184
+ data: string;
185
+ driverParam: string;
186
+ notNull: true;
187
+ hasDefault: false;
188
+ isPrimaryKey: false;
189
+ isAutoincrement: false;
190
+ hasRuntimeDefault: false;
191
+ enumValues: [string, ...string[]];
192
+ baseColumn: never;
193
+ identity: undefined;
194
+ generated: undefined;
195
+ }, {}, {}>;
196
+ label: import("drizzle-orm/pg-core").PgColumn<{
197
+ name: "label";
198
+ tableName: "vault";
199
+ dataType: "string";
200
+ columnType: "PgText";
201
+ data: string;
202
+ driverParam: string;
203
+ notNull: false;
204
+ hasDefault: false;
205
+ isPrimaryKey: false;
206
+ isAutoincrement: false;
207
+ hasRuntimeDefault: false;
208
+ enumValues: [string, ...string[]];
209
+ baseColumn: never;
210
+ identity: undefined;
211
+ generated: undefined;
212
+ }, {}, {}>;
213
+ credentials: import("drizzle-orm/pg-core").PgColumn<{
214
+ name: "credentials";
215
+ tableName: "vault";
216
+ dataType: "string";
217
+ columnType: "PgText";
218
+ data: string;
219
+ driverParam: string;
220
+ notNull: true;
221
+ hasDefault: false;
222
+ isPrimaryKey: false;
223
+ isAutoincrement: false;
224
+ hasRuntimeDefault: false;
225
+ enumValues: [string, ...string[]];
226
+ baseColumn: never;
227
+ identity: undefined;
228
+ generated: undefined;
229
+ }, {}, {}>;
230
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
231
+ name: "created_at";
232
+ tableName: "vault";
233
+ dataType: "string";
234
+ columnType: "PgText";
235
+ data: string;
236
+ driverParam: string;
237
+ notNull: true;
238
+ hasDefault: false;
239
+ isPrimaryKey: false;
240
+ isAutoincrement: false;
241
+ hasRuntimeDefault: false;
242
+ enumValues: [string, ...string[]];
243
+ baseColumn: never;
244
+ identity: undefined;
245
+ generated: undefined;
246
+ }, {}, {}>;
247
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
248
+ name: "updated_at";
249
+ tableName: "vault";
250
+ dataType: "string";
251
+ columnType: "PgText";
252
+ data: string;
253
+ driverParam: string;
254
+ notNull: true;
255
+ hasDefault: false;
256
+ isPrimaryKey: false;
257
+ isAutoincrement: false;
258
+ hasRuntimeDefault: false;
259
+ enumValues: [string, ...string[]];
260
+ baseColumn: never;
261
+ identity: undefined;
262
+ generated: undefined;
263
+ }, {}, {}>;
264
+ };
265
+ dialect: "pg";
266
+ }>;
267
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/schema/vault.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUtB,CAAC;AAIH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUlB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { sqliteTable, text, primaryKey } from "drizzle-orm/sqlite-core";
2
+ import { pgTable, text as pgText, primaryKey as pgPrimaryKey } from "drizzle-orm/pg-core";
3
+ // ── SQLite schema ──────────────────────────────────────────────────────
4
+ export const vaultSqlite = sqliteTable("vault", {
5
+ agent: text("agent").notNull(),
6
+ service: text("service").notNull(),
7
+ type: text("type").notNull(), // "smtp" | "imap" | "oauth" | "api_key" | "login" | "custom"
8
+ label: text("label"),
9
+ credentials: text("credentials").notNull(), // JSON-serialized Record<string, string>
10
+ createdAt: text("created_at").notNull(),
11
+ updatedAt: text("updated_at").notNull(),
12
+ }, (table) => [
13
+ primaryKey({ columns: [table.agent, table.service] }),
14
+ ]);
15
+ // ── PostgreSQL schema ──────────────────────────────────────────────────
16
+ export const vaultPg = pgTable("vault", {
17
+ agent: pgText("agent").notNull(),
18
+ service: pgText("service").notNull(),
19
+ type: pgText("type").notNull(),
20
+ label: pgText("label"),
21
+ credentials: pgText("credentials").notNull(), // AES-256-GCM encrypted, base64-encoded
22
+ createdAt: pgText("created_at").notNull(),
23
+ updatedAt: pgText("updated_at").notNull(),
24
+ }, (table) => [
25
+ pgPrimaryKey({ columns: [table.agent, table.service] }),
26
+ ]);
27
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/schema/vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE1F,0EAA0E;AAE1E,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE;IAC9C,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IAC9B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAQ,6DAA6D;IACjG,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IACpB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,yCAAyC;IACrF,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CACxC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;CACtD,CAAC,CAAC;AAEH,0EAA0E;AAE1E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IAChC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC9B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,wCAAwC;IACtF,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC1C,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { AgentStore } from "@polpo-ai/core/agent-store";
2
+ import type { AgentConfig } from "@polpo-ai/core/types";
3
+ import { type Dialect } from "../utils.js";
4
+ type AnyTable = any;
5
+ export declare class DrizzleAgentStore implements AgentStore {
6
+ private db;
7
+ private agentsTable;
8
+ private dialect;
9
+ constructor(db: any, agentsTable: AnyTable, dialect: Dialect);
10
+ getAgents(teamName?: string): Promise<AgentConfig[]>;
11
+ getAgent(name: string): Promise<AgentConfig | undefined>;
12
+ getAgentTeam(name: string): Promise<string | undefined>;
13
+ createAgent(agent: AgentConfig, teamName: string): Promise<AgentConfig>;
14
+ updateAgent(name: string, updates: Partial<Omit<AgentConfig, "name">>): Promise<AgentConfig>;
15
+ moveAgent(name: string, newTeamName: string): Promise<AgentConfig>;
16
+ deleteAgent(name: string): Promise<boolean>;
17
+ cleanupVolatileAgents(missionGroup: string): Promise<number>;
18
+ seed(agents: Array<AgentConfig & {
19
+ teamName: string;
20
+ }>): Promise<void>;
21
+ private rowToAgent;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=agent-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-store.d.ts","sourceRoot":"","sources":["../../src/stores/agent-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,aAAa,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,qBAAa,iBAAkB,YAAW,UAAU;IAEhD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;gBAFP,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,QAAQ,EACrB,OAAO,EAAE,OAAO;IAGpB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOpD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOxD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOvD,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBvE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAgB5F,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAYlE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3C,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB5D,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5E,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,114 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { serializeJson, deserializeJson } from "../utils.js";
3
+ export class DrizzleAgentStore {
4
+ db;
5
+ agentsTable;
6
+ dialect;
7
+ constructor(db, agentsTable, dialect) {
8
+ this.db = db;
9
+ this.agentsTable = agentsTable;
10
+ this.dialect = dialect;
11
+ }
12
+ async getAgents(teamName) {
13
+ const rows = teamName
14
+ ? await this.db.select().from(this.agentsTable).where(eq(this.agentsTable.teamName, teamName))
15
+ : await this.db.select().from(this.agentsTable);
16
+ return rows.map(r => this.rowToAgent(r));
17
+ }
18
+ async getAgent(name) {
19
+ const rows = await this.db.select().from(this.agentsTable)
20
+ .where(eq(this.agentsTable.name, name));
21
+ if (rows.length === 0)
22
+ return undefined;
23
+ return this.rowToAgent(rows[0]);
24
+ }
25
+ async getAgentTeam(name) {
26
+ const rows = await this.db.select().from(this.agentsTable)
27
+ .where(eq(this.agentsTable.name, name));
28
+ if (rows.length === 0)
29
+ return undefined;
30
+ return rows[0].teamName;
31
+ }
32
+ async createAgent(agent, teamName) {
33
+ const now = new Date().toISOString();
34
+ if (!agent.createdAt)
35
+ agent.createdAt = now;
36
+ const { name, ...rest } = agent;
37
+ try {
38
+ await this.db.insert(this.agentsTable).values({
39
+ name,
40
+ teamName,
41
+ config: serializeJson(rest, this.dialect),
42
+ createdAt: agent.createdAt,
43
+ updatedAt: now,
44
+ });
45
+ }
46
+ catch (err) {
47
+ if (err?.message?.includes("unique") || err?.message?.includes("UNIQUE") || err?.code === "23505") {
48
+ throw new Error(`Agent "${name}" already exists`);
49
+ }
50
+ throw err;
51
+ }
52
+ return agent;
53
+ }
54
+ async updateAgent(name, updates) {
55
+ const existing = await this.getAgent(name);
56
+ if (!existing)
57
+ throw new Error(`Agent "${name}" not found`);
58
+ const merged = { ...existing, ...updates, name };
59
+ const { name: _n, ...rest } = merged;
60
+ const now = new Date().toISOString();
61
+ await this.db.update(this.agentsTable).set({
62
+ config: serializeJson(rest, this.dialect),
63
+ updatedAt: now,
64
+ }).where(eq(this.agentsTable.name, name));
65
+ return merged;
66
+ }
67
+ async moveAgent(name, newTeamName) {
68
+ const existing = await this.getAgent(name);
69
+ if (!existing)
70
+ throw new Error(`Agent "${name}" not found`);
71
+ await this.db.update(this.agentsTable).set({
72
+ teamName: newTeamName,
73
+ updatedAt: new Date().toISOString(),
74
+ }).where(eq(this.agentsTable.name, name));
75
+ return existing;
76
+ }
77
+ async deleteAgent(name) {
78
+ const rows = await this.db.select().from(this.agentsTable)
79
+ .where(eq(this.agentsTable.name, name));
80
+ if (rows.length === 0)
81
+ return false;
82
+ await this.db.delete(this.agentsTable).where(eq(this.agentsTable.name, name));
83
+ return true;
84
+ }
85
+ async cleanupVolatileAgents(missionGroup) {
86
+ // We need to read agents, filter volatile ones with matching group, then delete
87
+ const rows = await this.db.select().from(this.agentsTable);
88
+ const toDelete = [];
89
+ for (const row of rows) {
90
+ const cfg = deserializeJson(row.config, {}, this.dialect);
91
+ if (cfg.volatile && cfg.missionGroup === missionGroup) {
92
+ toDelete.push(row.name);
93
+ }
94
+ }
95
+ for (const name of toDelete) {
96
+ await this.db.delete(this.agentsTable).where(eq(this.agentsTable.name, name));
97
+ }
98
+ return toDelete.length;
99
+ }
100
+ async seed(agents) {
101
+ for (const { teamName, ...agent } of agents) {
102
+ const existing = await this.getAgent(agent.name);
103
+ if (!existing) {
104
+ await this.createAgent(agent, teamName);
105
+ }
106
+ }
107
+ }
108
+ // ── helpers ──────────────────────────────────────────────────────────
109
+ rowToAgent(row) {
110
+ const cfg = deserializeJson(row.config, {}, this.dialect);
111
+ return { name: row.name, ...cfg };
112
+ }
113
+ }
114
+ //# sourceMappingURL=agent-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-store.js","sourceRoot":"","sources":["../../src/stores/agent-store.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,8 @@ export { DrizzlePeerStore } from "./peer-store.js";
10
10
  export { DrizzleCheckpointStore } from "./checkpoint-store.js";
11
11
  export { DrizzleDelayStore } from "./delay-store.js";
12
12
  export { DrizzleConfigStore } from "./config-store.js";
13
+ export { DrizzleTeamStore } from "./team-store.js";
14
+ export { DrizzleAgentStore } from "./agent-store.js";
15
+ export { DrizzleVaultStore } from "./vault-store.js";
16
+ export { DrizzlePlaybookStore } from "./playbook-store.js";
13
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -9,4 +9,8 @@ export { DrizzlePeerStore } from "./peer-store.js";
9
9
  export { DrizzleCheckpointStore } from "./checkpoint-store.js";
10
10
  export { DrizzleDelayStore } from "./delay-store.js";
11
11
  export { DrizzleConfigStore } from "./config-store.js";
12
+ export { DrizzleTeamStore } from "./team-store.js";
13
+ export { DrizzleAgentStore } from "./agent-store.js";
14
+ export { DrizzleVaultStore } from "./vault-store.js";
15
+ export { DrizzlePlaybookStore } from "./playbook-store.js";
12
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -4,11 +4,15 @@ export declare class DrizzleMemoryStore implements MemoryStore {
4
4
  private db;
5
5
  private memory;
6
6
  constructor(db: any, memory: AnyTable);
7
- exists(): Promise<boolean>;
8
- get(): Promise<string>;
9
- save(content: string): Promise<void>;
10
- append(line: string): Promise<void>;
11
- update(oldText: string, newText: string): Promise<true | string>;
7
+ /** Resolve the DB key for a given scope. Undefined = shared memory ("default"). */
8
+ private resolveKey;
9
+ exists(scope?: string): Promise<boolean>;
10
+ get(scope?: string): Promise<string>;
11
+ save(content: string, scope?: string): Promise<void>;
12
+ append(line: string, scope?: string): Promise<void>;
13
+ update(oldText: string, newText: string, scope?: string): Promise<true | string>;
14
+ /** List all agent scopes that have memory rows. Returns scope keys matching "agent:*". */
15
+ listScopes(): Promise<string[]>;
12
16
  }
13
17
  export {};
14
18
  //# sourceMappingURL=memory-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/stores/memory-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,KAAK,QAAQ,GAAG,GAAG,CAAC;AAIpB,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;gBADN,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,QAAQ;IAGpB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAM1B,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAMtB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;CASvE"}
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/stores/memory-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,KAAK,QAAQ,GAAG,GAAG,CAAC;AAKpB,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;gBADN,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,QAAQ;IAG1B,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAIZ,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IAUtF,0FAA0F;IACpF,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAKtC"}
@@ -1,5 +1,6 @@
1
- import { eq } from "drizzle-orm";
2
- const MEMORY_KEY = "default";
1
+ import { eq, like } from "drizzle-orm";
2
+ /** Default key for shared (unscoped) memory. */
3
+ const SHARED_KEY = "default";
3
4
  export class DrizzleMemoryStore {
4
5
  db;
5
6
  memory;
@@ -7,33 +8,46 @@ export class DrizzleMemoryStore {
7
8
  this.db = db;
8
9
  this.memory = memory;
9
10
  }
10
- async exists() {
11
+ /** Resolve the DB key for a given scope. Undefined = shared memory ("default"). */
12
+ resolveKey(scope) {
13
+ return scope ?? SHARED_KEY;
14
+ }
15
+ async exists(scope) {
16
+ const key = this.resolveKey(scope);
11
17
  const rows = await this.db.select().from(this.memory)
12
- .where(eq(this.memory.key, MEMORY_KEY));
18
+ .where(eq(this.memory.key, key));
13
19
  return rows.length > 0;
14
20
  }
15
- async get() {
21
+ async get(scope) {
22
+ const key = this.resolveKey(scope);
16
23
  const rows = await this.db.select().from(this.memory)
17
- .where(eq(this.memory.key, MEMORY_KEY));
24
+ .where(eq(this.memory.key, key));
18
25
  return rows.length > 0 ? rows[0].content : "";
19
26
  }
20
- async save(content) {
21
- await this.db.insert(this.memory).values({ key: MEMORY_KEY, content })
27
+ async save(content, scope) {
28
+ const key = this.resolveKey(scope);
29
+ await this.db.insert(this.memory).values({ key, content })
22
30
  .onConflictDoUpdate({ target: this.memory.key, set: { content } });
23
31
  }
24
- async append(line) {
25
- const current = await this.get();
32
+ async append(line, scope) {
33
+ const current = await this.get(scope);
26
34
  const updated = current ? `${current}\n${line}` : line;
27
- await this.save(updated);
35
+ await this.save(updated, scope);
28
36
  }
29
- async update(oldText, newText) {
30
- const current = await this.get();
37
+ async update(oldText, newText, scope) {
38
+ const current = await this.get(scope);
31
39
  if (!current.includes(oldText)) {
32
40
  return `Text not found: "${oldText.slice(0, 50)}..."`;
33
41
  }
34
42
  const updated = current.replace(oldText, newText);
35
- await this.save(updated);
43
+ await this.save(updated, scope);
36
44
  return true;
37
45
  }
46
+ /** List all agent scopes that have memory rows. Returns scope keys matching "agent:*". */
47
+ async listScopes() {
48
+ const rows = await this.db.select({ key: this.memory.key }).from(this.memory)
49
+ .where(like(this.memory.key, "agent:%"));
50
+ return rows.map((r) => r.key.slice(6)); // strip "agent:" prefix, return agent names
51
+ }
38
52
  }
39
53
  //# sourceMappingURL=memory-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/stores/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAKjC,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,MAAM,OAAO,kBAAkB;IAEnB;IACA;IAFV,YACU,EAAO,EACP,MAAgB;QADhB,OAAE,GAAF,EAAE,CAAK;QACP,WAAM,GAAN,MAAM,CAAU;IACvB,CAAC;IAEJ,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,GAAU,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACzD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAU,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACzD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;aACnE,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,OAAe;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,oBAAoB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;QACxD,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/stores/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKvC,gDAAgD;AAChD,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,MAAM,OAAO,kBAAkB;IAEnB;IACA;IAFV,YACU,EAAO,EACP,MAAgB;QADhB,OAAE,GAAF,EAAE,CAAK;QACP,WAAM,GAAN,MAAM,CAAU;IACvB,CAAC;IAEJ,mFAAmF;IAC3E,UAAU,CAAC,KAAc;QAC/B,OAAO,KAAK,IAAI,UAAU,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAc;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAU,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACzD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAc;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAU,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACzD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,KAAc;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;aACvD,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,KAAc;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,OAAe,EAAE,KAAc;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,oBAAoB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;QACxD,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAC1F,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAU,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACjF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,4CAA4C;IAC3F,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import type { PlaybookStore, PlaybookDefinition, PlaybookInfo } from "@polpo-ai/core/playbook-store";
2
+ import { type Dialect } from "../utils.js";
3
+ type AnyTable = any;
4
+ /**
5
+ * Drizzle ORM implementation of PlaybookStore.
6
+ *
7
+ * Stores playbooks in a `playbooks` table with `name` as primary key.
8
+ * Mission objects and parameters are stored as JSON (TEXT for SQLite, JSONB for PG).
9
+ */
10
+ export declare class DrizzlePlaybookStore implements PlaybookStore {
11
+ private db;
12
+ private playbooks;
13
+ private dialect;
14
+ constructor(db: any, playbooks: AnyTable, dialect: Dialect);
15
+ list(): Promise<PlaybookInfo[]>;
16
+ get(name: string): Promise<PlaybookDefinition | null>;
17
+ save(definition: PlaybookDefinition): Promise<string>;
18
+ delete(name: string): Promise<boolean>;
19
+ private rowToDefinition;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=playbook-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-store.d.ts","sourceRoot":"","sources":["../../src/stores/playbook-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,aAAa,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;gBAFP,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,QAAQ,EACnB,OAAO,EAAE,OAAO;IAGpB,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAU/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAOrD,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,OAAO,CAAC,eAAe;CAcxB"}