@48nauts/adapter-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.
- package/LICENSE +25 -0
- package/README.md +5 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +252 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
|
|
3
|
+
@48nauts/agent-core (NautCore)
|
|
4
|
+
Copyright (C) 2026 48Nauts (Andre / hello@48nauts.com)
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU Affero General Public License
|
|
17
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
NOTE: This file is the SPDX header + short notice. Before this repo is made
|
|
22
|
+
public, replace the section below with the full AGPL-3.0 license text from
|
|
23
|
+
https://www.gnu.org/licenses/agpl-3.0.txt (or run `curl -o LICENSE.full https://www.gnu.org/licenses/agpl-3.0.txt`).
|
|
24
|
+
The SPDX header above is the legally-binding identifier; the long text is the
|
|
25
|
+
canonical reference required for public distribution.
|
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @48nauts/adapter-drizzle
|
|
3
|
+
*
|
|
4
|
+
* DbAdapter backed by Drizzle ORM (Postgres). Hosts pass in their own table
|
|
5
|
+
* references + a scope ({ orgId, actorUserId }), and the adapter translates
|
|
6
|
+
* the canonical CRUD calls from @48nauts/tools-crud into Drizzle queries.
|
|
7
|
+
*
|
|
8
|
+
* Why scoped: AgenticKMU-shape schemas have NOT NULL orgId + ownerId on
|
|
9
|
+
* projects, and NOT NULL orgId + authorUserId on notes. The scope is the only
|
|
10
|
+
* place the agent's tenancy lives — tools never see it.
|
|
11
|
+
*/
|
|
12
|
+
import type { PgDatabase, PgTable } from 'drizzle-orm/pg-core';
|
|
13
|
+
import type { DbAdapter } from '@48nauts/agent-core';
|
|
14
|
+
export declare const VERSION = "0.1.0";
|
|
15
|
+
export interface DrizzleAdapterScope {
|
|
16
|
+
/** Org / tenant ID. Inserted on create, filtered on list/search. */
|
|
17
|
+
orgId: string;
|
|
18
|
+
/** User the agent acts as — inserted as owner / author on create. */
|
|
19
|
+
actorUserId: string;
|
|
20
|
+
}
|
|
21
|
+
type AnyTable = PgTable<any>;
|
|
22
|
+
export interface DrizzleAdapterTables {
|
|
23
|
+
/** `projects` table. Expected columns: id, name, description, orgId, ownerId, createdAt, updatedAt. */
|
|
24
|
+
projects: AnyTable;
|
|
25
|
+
/** `tasks` table. Expected: id, projectId, title, description, status, priority, dueDate, createdAt. */
|
|
26
|
+
tasks: AnyTable;
|
|
27
|
+
/** `notes` table. Expected: id, projectId, orgId, authorUserId, createdAt + one body column (see `noteBodyColumn`). */
|
|
28
|
+
notes: AnyTable;
|
|
29
|
+
}
|
|
30
|
+
export interface DrizzleAdapterOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Column name in the `notes` table that holds the body text.
|
|
33
|
+
* AgenticKMU uses `body`; canonical default is `content`.
|
|
34
|
+
*/
|
|
35
|
+
noteBodyColumn?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Skip orgId scoping on projects / notes. Single-tenant hosts (Engram-OSS)
|
|
38
|
+
* use this. Tasks are always scoped by projectId, never orgId.
|
|
39
|
+
*/
|
|
40
|
+
skipOrgScoping?: boolean;
|
|
41
|
+
/** Cap on unbounded list operations. Default 100. */
|
|
42
|
+
defaultListLimit?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface CreateDrizzleAdapterInput {
|
|
45
|
+
db: PgDatabase<any, any, any>;
|
|
46
|
+
tables: DrizzleAdapterTables;
|
|
47
|
+
scope: DrizzleAdapterScope;
|
|
48
|
+
options?: DrizzleAdapterOptions;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build a DbAdapter wired to the host's Drizzle setup. Construct one per
|
|
52
|
+
* agent session — `scope` is captured at construction time.
|
|
53
|
+
*
|
|
54
|
+
* import { createDrizzleAdapter } from '@48nauts/adapter-drizzle'
|
|
55
|
+
* import { projects, tasks, notes } from '@your-app/shared/schema'
|
|
56
|
+
* import { db } from '@/lib/db'
|
|
57
|
+
*
|
|
58
|
+
* const adapter = createDrizzleAdapter({
|
|
59
|
+
* db,
|
|
60
|
+
* tables: { projects, tasks, notes },
|
|
61
|
+
* scope: { orgId: session.orgId, actorUserId: session.userId },
|
|
62
|
+
* options: { noteBodyColumn: 'body' }, // AgenticKMU's schema
|
|
63
|
+
* })
|
|
64
|
+
*/
|
|
65
|
+
export declare function createDrizzleAdapter(input: CreateDrizzleAdapterInput): DbAdapter;
|
|
66
|
+
export type { DbAdapter, ProjectsRepo, TasksRepo, NotesRepo, ProjectRecord, TaskRecord, NoteRecord, } from '@48nauts/agent-core';
|
|
67
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EACV,SAAS,EASV,MAAM,qBAAqB,CAAA;AAE5B,eAAO,MAAM,OAAO,UAAU,CAAA;AAE9B,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAA;CACpB;AAID,KAAK,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAE5B,MAAM,WAAW,oBAAoB;IACnC,uGAAuG;IACvG,QAAQ,EAAE,QAAQ,CAAA;IAClB,wGAAwG;IACxG,KAAK,EAAE,QAAQ,CAAA;IACf,uHAAuH;IACvH,KAAK,EAAE,QAAQ,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IAExC,EAAE,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,KAAK,EAAE,mBAAmB,CAAA;IAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAChC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,CAWhF;AAsPD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @48nauts/adapter-drizzle
|
|
3
|
+
*
|
|
4
|
+
* DbAdapter backed by Drizzle ORM (Postgres). Hosts pass in their own table
|
|
5
|
+
* references + a scope ({ orgId, actorUserId }), and the adapter translates
|
|
6
|
+
* the canonical CRUD calls from @48nauts/tools-crud into Drizzle queries.
|
|
7
|
+
*
|
|
8
|
+
* Why scoped: AgenticKMU-shape schemas have NOT NULL orgId + ownerId on
|
|
9
|
+
* projects, and NOT NULL orgId + authorUserId on notes. The scope is the only
|
|
10
|
+
* place the agent's tenancy lives — tools never see it.
|
|
11
|
+
*/
|
|
12
|
+
import { and, eq, ilike } from 'drizzle-orm';
|
|
13
|
+
export const VERSION = '0.1.0';
|
|
14
|
+
/**
|
|
15
|
+
* Build a DbAdapter wired to the host's Drizzle setup. Construct one per
|
|
16
|
+
* agent session — `scope` is captured at construction time.
|
|
17
|
+
*
|
|
18
|
+
* import { createDrizzleAdapter } from '@48nauts/adapter-drizzle'
|
|
19
|
+
* import { projects, tasks, notes } from '@your-app/shared/schema'
|
|
20
|
+
* import { db } from '@/lib/db'
|
|
21
|
+
*
|
|
22
|
+
* const adapter = createDrizzleAdapter({
|
|
23
|
+
* db,
|
|
24
|
+
* tables: { projects, tasks, notes },
|
|
25
|
+
* scope: { orgId: session.orgId, actorUserId: session.userId },
|
|
26
|
+
* options: { noteBodyColumn: 'body' }, // AgenticKMU's schema
|
|
27
|
+
* })
|
|
28
|
+
*/
|
|
29
|
+
export function createDrizzleAdapter(input) {
|
|
30
|
+
const { db, tables, scope, options } = input;
|
|
31
|
+
const noteBodyColumn = options?.noteBodyColumn ?? 'content';
|
|
32
|
+
const skipOrgScoping = options?.skipOrgScoping ?? false;
|
|
33
|
+
const listLimit = options?.defaultListLimit ?? 100;
|
|
34
|
+
return {
|
|
35
|
+
projects: buildProjectsRepo(db, tables.projects, scope, skipOrgScoping, listLimit),
|
|
36
|
+
tasks: buildTasksRepo(db, tables.tasks, listLimit),
|
|
37
|
+
notes: buildNotesRepo(db, tables.notes, scope, skipOrgScoping, noteBodyColumn),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
41
|
+
// projects
|
|
42
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
43
|
+
function buildProjectsRepo(
|
|
44
|
+
// biome-ignore lint/suspicious/noExplicitAny: see file-level note
|
|
45
|
+
db, table, scope, skipOrgScoping, listLimit) {
|
|
46
|
+
const idCol = col(table, 'id');
|
|
47
|
+
const nameCol = col(table, 'name');
|
|
48
|
+
const orgCol = skipOrgScoping ? null : col(table, 'orgId');
|
|
49
|
+
const orgFilter = orgCol ? eq(orgCol, scope.orgId) : undefined;
|
|
50
|
+
return {
|
|
51
|
+
async get(id) {
|
|
52
|
+
const rows = await db
|
|
53
|
+
.select()
|
|
54
|
+
.from(table)
|
|
55
|
+
.where(orgFilter ? and(eq(idCol, id), orgFilter) : eq(idCol, id))
|
|
56
|
+
.limit(1);
|
|
57
|
+
return rows[0] ? toProjectRecord(rows[0]) : null;
|
|
58
|
+
},
|
|
59
|
+
async list() {
|
|
60
|
+
const q = db.select().from(table);
|
|
61
|
+
const rows = orgFilter
|
|
62
|
+
? await q.where(orgFilter).limit(listLimit)
|
|
63
|
+
: await q.limit(listLimit);
|
|
64
|
+
return rows.map(toProjectRecord);
|
|
65
|
+
},
|
|
66
|
+
async search(query, limit) {
|
|
67
|
+
const nameMatch = ilike(nameCol, `%${query}%`);
|
|
68
|
+
const rows = await db
|
|
69
|
+
.select()
|
|
70
|
+
.from(table)
|
|
71
|
+
.where(orgFilter ? and(nameMatch, orgFilter) : nameMatch)
|
|
72
|
+
.limit(limit ?? 10);
|
|
73
|
+
return rows.map(toProjectRecord);
|
|
74
|
+
},
|
|
75
|
+
async create(input) {
|
|
76
|
+
const values = {
|
|
77
|
+
name: input.name,
|
|
78
|
+
description: input.description || null,
|
|
79
|
+
};
|
|
80
|
+
if (!skipOrgScoping) {
|
|
81
|
+
values.orgId = scope.orgId;
|
|
82
|
+
values.ownerId = scope.actorUserId;
|
|
83
|
+
}
|
|
84
|
+
const [row] = await db.insert(table).values(values).returning();
|
|
85
|
+
if (!row)
|
|
86
|
+
throw new Error('createDrizzleAdapter.projects.create: insert returned no row');
|
|
87
|
+
return toProjectRecord(row);
|
|
88
|
+
},
|
|
89
|
+
async update(id, patch) {
|
|
90
|
+
const values = { ...patch, updatedAt: new Date() };
|
|
91
|
+
const [row] = await db
|
|
92
|
+
.update(table)
|
|
93
|
+
.set(values)
|
|
94
|
+
.where(orgFilter ? and(eq(idCol, id), orgFilter) : eq(idCol, id))
|
|
95
|
+
.returning();
|
|
96
|
+
if (!row)
|
|
97
|
+
throw new Error(`createDrizzleAdapter.projects.update: ${id} not found`);
|
|
98
|
+
return toProjectRecord(row);
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function toProjectRecord(row) {
|
|
103
|
+
return {
|
|
104
|
+
id: String(row.id),
|
|
105
|
+
name: String(row.name ?? ''),
|
|
106
|
+
description: stringOrEmpty(row.description),
|
|
107
|
+
createdAt: toEpoch(row.createdAt),
|
|
108
|
+
updatedAt: toEpoch(row.updatedAt ?? row.createdAt),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
112
|
+
// tasks
|
|
113
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
114
|
+
function buildTasksRepo(
|
|
115
|
+
// biome-ignore lint/suspicious/noExplicitAny: see file-level note
|
|
116
|
+
db, table, listLimit) {
|
|
117
|
+
const idCol = col(table, 'id');
|
|
118
|
+
const projectIdCol = col(table, 'projectId');
|
|
119
|
+
const statusCol = col(table, 'status');
|
|
120
|
+
return {
|
|
121
|
+
async get(id) {
|
|
122
|
+
const rows = await db.select().from(table).where(eq(idCol, id)).limit(1);
|
|
123
|
+
return rows[0] ? toTaskRecord(rows[0]) : null;
|
|
124
|
+
},
|
|
125
|
+
async listByProject(projectId, filter) {
|
|
126
|
+
const projectMatch = eq(projectIdCol, projectId);
|
|
127
|
+
const where = filter?.status !== undefined
|
|
128
|
+
? and(projectMatch, eq(statusCol, filter.status))
|
|
129
|
+
: projectMatch;
|
|
130
|
+
const rows = await db.select().from(table).where(where).limit(listLimit);
|
|
131
|
+
return rows.map(toTaskRecord);
|
|
132
|
+
},
|
|
133
|
+
async create(input) {
|
|
134
|
+
const values = {
|
|
135
|
+
projectId: input.projectId,
|
|
136
|
+
title: input.title,
|
|
137
|
+
description: input.description || null,
|
|
138
|
+
status: input.status,
|
|
139
|
+
priority: input.priority,
|
|
140
|
+
};
|
|
141
|
+
if (input.dueDate !== undefined)
|
|
142
|
+
values.dueDate = input.dueDate;
|
|
143
|
+
const [row] = await db.insert(table).values(values).returning();
|
|
144
|
+
if (!row)
|
|
145
|
+
throw new Error('createDrizzleAdapter.tasks.create: insert returned no row');
|
|
146
|
+
return toTaskRecord(row);
|
|
147
|
+
},
|
|
148
|
+
async update(id, patch) {
|
|
149
|
+
const values = { ...patch, updatedAt: new Date() };
|
|
150
|
+
const [row] = await db.update(table).set(values).where(eq(idCol, id)).returning();
|
|
151
|
+
if (!row)
|
|
152
|
+
throw new Error(`createDrizzleAdapter.tasks.update: ${id} not found`);
|
|
153
|
+
return toTaskRecord(row);
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function toTaskRecord(row) {
|
|
158
|
+
const rec = {
|
|
159
|
+
id: String(row.id),
|
|
160
|
+
projectId: String(row.projectId),
|
|
161
|
+
title: String(row.title ?? ''),
|
|
162
|
+
description: stringOrEmpty(row.description),
|
|
163
|
+
status: row.status ?? 'todo',
|
|
164
|
+
priority: row.priority ?? 'medium',
|
|
165
|
+
createdAt: toEpoch(row.createdAt),
|
|
166
|
+
};
|
|
167
|
+
if (row.dueDate != null) {
|
|
168
|
+
// Drizzle returns `date` columns as strings already (YYYY-MM-DD); pass through.
|
|
169
|
+
rec.dueDate = row.dueDate instanceof Date ? row.dueDate.toISOString().slice(0, 10) : String(row.dueDate);
|
|
170
|
+
}
|
|
171
|
+
return rec;
|
|
172
|
+
}
|
|
173
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
174
|
+
// notes
|
|
175
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
176
|
+
function buildNotesRepo(
|
|
177
|
+
// biome-ignore lint/suspicious/noExplicitAny: see file-level note
|
|
178
|
+
db, table, scope, skipOrgScoping, bodyColumn) {
|
|
179
|
+
const projectIdCol = col(table, 'projectId');
|
|
180
|
+
// Validate the body column exists — fail at construction, not at first call.
|
|
181
|
+
col(table, bodyColumn);
|
|
182
|
+
const hasTitleColumn = optionalCol(table, 'title') !== null;
|
|
183
|
+
return {
|
|
184
|
+
async listByProject(projectId) {
|
|
185
|
+
const rows = await db.select().from(table).where(eq(projectIdCol, projectId));
|
|
186
|
+
return rows.map((row) => toNoteRecord(row, bodyColumn));
|
|
187
|
+
},
|
|
188
|
+
async create(input) {
|
|
189
|
+
const values = {
|
|
190
|
+
projectId: input.projectId,
|
|
191
|
+
[bodyColumn]: input.content,
|
|
192
|
+
};
|
|
193
|
+
// The canonical NoteRecord has a `title` field, but AgenticKMU's notes
|
|
194
|
+
// table does not. Only set it when the host's table has the column.
|
|
195
|
+
if (hasTitleColumn)
|
|
196
|
+
values.title = input.title;
|
|
197
|
+
if (!skipOrgScoping) {
|
|
198
|
+
values.orgId = scope.orgId;
|
|
199
|
+
values.authorUserId = scope.actorUserId;
|
|
200
|
+
}
|
|
201
|
+
const [row] = await db.insert(table).values(values).returning();
|
|
202
|
+
if (!row)
|
|
203
|
+
throw new Error('createDrizzleAdapter.notes.create: insert returned no row');
|
|
204
|
+
return toNoteRecord(row, bodyColumn);
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function toNoteRecord(row, bodyColumn) {
|
|
209
|
+
return {
|
|
210
|
+
id: String(row.id),
|
|
211
|
+
projectId: String(row.projectId),
|
|
212
|
+
title: stringOrEmpty(row.title),
|
|
213
|
+
content: stringOrEmpty(row[bodyColumn]),
|
|
214
|
+
createdAt: toEpoch(row.createdAt),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
218
|
+
// helpers
|
|
219
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
220
|
+
/** Look up a column by name. Throws if missing — call at construction time so
|
|
221
|
+
* adapters fail loudly on schema mismatch, not at first query. */
|
|
222
|
+
function col(table, name) {
|
|
223
|
+
const c = table[name];
|
|
224
|
+
if (!c) {
|
|
225
|
+
throw new Error(`createDrizzleAdapter: table is missing required column '${name}'. ` +
|
|
226
|
+
`Check the schema you passed matches the canonical projects/tasks/notes shape.`);
|
|
227
|
+
}
|
|
228
|
+
return c;
|
|
229
|
+
}
|
|
230
|
+
function optionalCol(table, name) {
|
|
231
|
+
const c = table[name];
|
|
232
|
+
return c ?? null;
|
|
233
|
+
}
|
|
234
|
+
function toEpoch(v) {
|
|
235
|
+
if (v == null)
|
|
236
|
+
return 0;
|
|
237
|
+
if (v instanceof Date)
|
|
238
|
+
return v.getTime();
|
|
239
|
+
if (typeof v === 'number')
|
|
240
|
+
return v;
|
|
241
|
+
if (typeof v === 'string') {
|
|
242
|
+
const t = Date.parse(v);
|
|
243
|
+
return Number.isNaN(t) ? 0 : t;
|
|
244
|
+
}
|
|
245
|
+
return 0;
|
|
246
|
+
}
|
|
247
|
+
function stringOrEmpty(v) {
|
|
248
|
+
if (v == null)
|
|
249
|
+
return '';
|
|
250
|
+
return typeof v === 'string' ? v : String(v);
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@48nauts/adapter-drizzle",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DbAdapter implementation backed by Drizzle ORM (Postgres-first).",
|
|
5
|
+
"license": "AGPL-3.0-or-later",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@48nauts/agent-core": "0.1.0"
|
|
17
|
+
},
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"drizzle-orm": ">=0.30.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.5.0"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"typecheck": "tsc --noEmit",
|
|
32
|
+
"build": "tsc"
|
|
33
|
+
}
|
|
34
|
+
}
|